[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: NikolayIT # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".gitignore",
    "content": "# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)\n[Bb]in/\n[Oo]bj/\n\n# mstest test results\nTestResults/\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Rr]elease/\nx64/\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.log\n*.vspscc\n*.vssscc\n.builds\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder \n[Ee]xpress\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish\n\n# Publish Web Output\n*.Publish.xml\n\n# NuGet Packages Directory\npackages\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\n[Bb]in\n[Oo]bj\nsql\nTestResults/\n[Tt]est[Rr]esult*/\n*.Cache\nClientBin\n[Ss]tyle[Cc]op.*\n~$*\n*.dbmdl\nGenerated_Code #added for RIA/Silverlight projects\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\n\n# TFS\n$tf/\n\n# Installation guide\n/Documentation/Installation/Installation Guide for Open Judge System.docx\n\n# JustMock configuration files\n/Open Judge System/*.jmconfig\n\n#Visual studio config folder\n.vs/"
  },
  {
    "path": "Documentation/Development/How to add new administration.txt",
    "content": "﻿Adding new Administration\n\n\n1. Go to Areas -> Administration -> Controller and create a controller for the new administration (Example: \"ContestsController\")\n\n2. Remove default usings and add these to your new controller:\n\n\tusing System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n3. Enter the model you would like to use for your controller with this line:\n\n\tusing ModelType = OJS.Data.Models.{model};\n\n   For example if you want to add model for contests -> you enter:\n\n    using ModelType = OJS.Data.Models.Contest; \n\n4. Your new controller should inherit \"KendoGridAdministrationController\" class instead of the default \"Controller\" class.\n\n5. Copy the following code to enable CRUD derivered from the base class. Make sure you fill the \n   constructor with its proper name and override the correct data in GetData() method\n\n\t\tpublic {name}Controller(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.{model}.All().Where(x => !x.IsDeleted);\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ModelType model)\n        {\n            return this.BaseCreate(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ModelType model)\n        {\n            return this.BaseUpdate(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ModelType model)\n        {\n            return this.BaseDestroy(request, model);\n        }\n\n6. Your controller is now ready but it needs a view for rendering on browser. Go to Areas -> Administration -> Views and \n   add folder named after your controller. For example \"Contests\".\n\n7. Add a new Empty View, name it Index and select a proper model for it. For example \"OJS.Data.Models.Contest\". Use empty layout.\n   Now your web application should be able to render the default view for this controller.\n\n8. Remove everything from the view and copy the following text which will render the Kendo UI Grid view \n   (make sure you put correct names and options for columns). You can remove the commented part about the Groupable option if you need:\n\n\t@model OJS.Data.Models.{model}\n\t@{\n\t\tViewBag.Title = \"{name}\";\n\t\tconst string ControllerName = \"{controller}\";\n\t}\n\t<h1>@ViewBag.Title</h1>\n\n\t@(Html.Kendo().Grid<OJS.Data.Models.{model}>()\n\t\t.Name(\"DataGrid\")\n\t\t.Columns(columns =>\n\t\t\t{\n\t\t\t\tcolumns.Bound(x => x.Id);\n\t\t\t\tcolumns.Bound(x => x.Title);\n\t\t\t\tcolumns.Bound(x => x.IsVisible);\n\t\t\t\tcolumns.Bound(x => x.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\");\n\t\t\t\tcolumns.Bound(x => x.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\");\n\t\t\t\tcolumns.Command(command => command.Edit().Text(\" \").UpdateText(\"Промяна\").CancelText(\"Отказ\")).Width(80);\n\t\t\t\tcolumns.Command(command => command.Destroy().Text(\" \")).Width(80);\n\t\t\t})\n\t\t.ToolBar(toolbar =>\n\t\t{\n\t\t\ttoolbar.Create().Text(\"Създай\");\n\t\t\ttoolbar.Custom().Text(\"Обратно към администрацията\").Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n\t\t\ttoolbar.Custom().Text(\"Export To Excel\").Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", \"News\", new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n\t\t})\n\t\t.Editable(editable =>\n\t\t{\n\t\t\teditable.Mode(GridEditMode.PopUp);\n\t\t\teditable.Window(w => w.Title(ViewBag.Title));\n\t\t\teditable.DisplayDeleteConfirmation(\"Наистина ли искате да изтриете елемента\");\n\t\t})\n\t\t.ColumnMenu()\n\t\t.Events(e => e.DataBound(\"onDataBound\"))\n\t\t.Pageable(x => x.Refresh(true))\n\t\t.Sortable(x => x.Enabled(true).AllowUnsort(false))\n\t\t.Filterable(x => x.Enabled(true))\n\t\t/*.Groupable(x =>\n\t\t{\n\t\t\tx.Enabled(true);\n\t\t\tx.Messages(m => m.Empty(\"Хванете заглавието на колона и го преместете тук, за да групирате по тази колона.\"));\n\t\t})*/\n\t\t.Reorderable(x => x.Columns(true))\n\t\t.Resizable(x => x.Columns(true))\n\t\t.DataSource(datasource => datasource\n\t\t\t.Ajax()\n\t\t\t.ServerOperation(false)\n\t\t\t.Model(model => model.Id(x => x.Id))\n\t\t\t.Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n\t\t\t.Create(create => create.Action(\"Create\", ControllerName))\n\t\t\t.Read(read => read.Action(\"Read\", ControllerName))\n\t\t\t.Update(update => update.Action(\"Update\", ControllerName))\n\t\t\t.Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n\t\t)\n\t)\n\n\t<script type=\"text/javascript\">\n\t\tfunction onDataBound(e) {\n\t\t\tCreateExportToExcelButton();\n\t\t}\n\t</script>\n\n9. Go to the model and add needed attributes - DisplayName, Error Messages, Editable, etc.\n\n10. Your administration should be ready for use on {site}/Administration/{controller}"
  },
  {
    "path": "Documentation/HISTORY.txt",
    "content": "1721 | Vasil Dininski | 19.11.2013 | Updated the user registration - usernames must have at least one character now. Removed unnecessary message in the forgotter password page.\n1720 | Vasil Dininski | 19.11.2013 | Added the appropriate GetById method in the UsersRepository. Added UserProfileViewModel and now using it instead of the database model. Added the option for a user to change his email address. Added default password editor template. Added necessary localization for the change password functionality.\n1719 | Nikolay Kostov | 19.11.2013 | StyleCop violations fixed\n1718 | Nikolay Kostov | 19.11.2013 | Fixed StyleCop violoations in the projects located in the /Tools/ folder and OJS.Data.Models\n1717 | Nikolay Kostov | 19.11.2013 | Fixed StyleCop violation in OJS.Data project\n1716 | Nikolay Kostov | 19.11.2013 | Uploaded workers changes to the old Telerik Contest System (new executor integrated into the old system)\n1715 | Nikolay Kostov | 19.11.2013 | Improvements in the old systems workers\n1714 | Vasil Dininski | 19.11.2013 | Fixed a bug where a user can register using an existing email or username when logging in using an external login provider.\n1713 | Nikolay Kostov | 18.11.2013 | Administration area and links are now limited for administrators only\n1712 | Nikolay Kostov | 18.11.2013 | Version deployed\n1711 | Nikolay Kostov | 18.11.2013 | StyleCop suggestions fixed in OJS.Web\n1710 | Nikolay Kostov | 18.11.2013 | Implemented viewing details for submission Fixed bug with submission log (showing trial tests in the short report)\n1709 | Vasil Dininski | 18.11.2013 | Updated submissions partial view to correctly display the memory and time maximums when the submission was not correctly compiled.\n1708 | Vasil Dininski | 18.11.2013 | Added confirmation message in the Forgotten password page. Updated layout for submission page - now hiding the problem results for the current problem on lower resolutions.\n1707 | Ivaylo Kenov | 18.11.2013 | Submission Administration read method Repository for SubmissionType\n1706 | Nikolay Kostov | 18.11.2013 | Only users with submissions are copied to the new database Some work on submissions details\n1705 | Vasil Dininski | 18.11.2013 | Updated viewmodels to use the Compare attribute from System.Web.Mvc which is working, as the one in System.ComponentModel.DataAnnotations is not working correctly.\n1704 | Vasil Dininski | 18.11.2013 | View submission in the submissions page now opens a new window to a separate page which displays only the selected submission details.\n1703 | Vasil Dininski | 18.11.2013 | Updated and localized the forgot your password email.\n1702 | Nikolay Kostov | 18.11.2013 | Small refactoring in MailSender.cs Fixes in .gitignore\n1700 | Vasil Dininski | 18.11.2013 | Updated the Forgot your password feature to send a localized email to the user that requested the email for the forgotten pasword.\n1699 | Nikolay Kostov | 18.11.2013 | Included Kendo.Mvc readme file Changes in .gitignore file\n1698 | Asya Georgieva | 18.11.2013 | Updated check for submission size limit in the Compete controller.\n1696 | Ivaylo Kenov | 18.11.2013 | Users administration Administration EditorTemplates do not show CreatedOn, ModifiedOn and Id anymore\n1694 | Vasil Dininski | 18.11.2013 | Fixed a bug where the forgot your password form displays an incorrect validation message if the email field is left blank.\n1693 | Vasil Dininski | 18.11.2013 | Updated IExecutor interface to include passing execution parameters (null by default). Updated RestrictedProcessExecutor to close the input stream when the restricted process is disposed. Fixed a bug where the submission job would try to run tests for a submission that was not correctly compiled. Implemented the NodeJsPreprocessExecuteAndCheckExecutionStrategy.\n1692 | Vasil Dininski | 18.11.2013 | Updated submissions page so that the symbols \"<\" and \">\" can be submitted as a part of the solution. Fixed a bug where the submission partial view was incorrectly displaying if the submission was correctly compiled or not yet processed.\n1691 | Ivaylo Kenov | 17.11.2013 | User administraion without Delete\n1690 | Ivaylo Kenov | 17.11.2013 | StyleCop on Administration area\n1689 | Ivaylo Kenov | 17.11.2013 | In Settings administration value is now multiline text\n1688 | Ivaylo Kenov | 17.11.2013 | ProblemResourceType moved to OJS.Common because of view annotatons needed and used by the web application Settings administration ViewModels moved into separate folders for Administration\n1687 | Nikolay Kostov | 17.11.2013 | Updated Microsoft.Owin* packages to the latest versions (2.0.1)\n1686 | Nikolay Kostov | 17.11.2013 | Added submissions controller in contests area External login with Google now works as expected and gets the users email\n1685 | Ivaylo Kenov | 17.11.2013 | Feedback administration now works with view model\n1683 | Nikolay Kostov | 15.11.2013 | Version deployed\n1682 | Ivaylo Kenov | 15.11.2013 | Fixed bug in export to Excel function and removed not needed properties from models to be exported\n1681 | Nikolay Kostov | 15.11.2013 | Updated Glimpse packages to the latest version\n1680 | Nikolay Kostov | 15.11.2013 | Version deployed\n1679 | Ivaylo Kenov | 15.11.2013 | Contest administration implemented to use ViewModel instead of model Editor templates for administration Contest model does not have view annotations any more AdministrationViewModel for CreatedOn and ModifiedOn\n1675 | Nikolay Kostov | 15.11.2013 | Fixed SubmissionCopier.cs file encoding\n1674 | Nikolay Kostov | 15.11.2013 | TestSubmissionResponder project deleted. The LocalWorker service is doing the same job.\n1673 | Nikolay Kostov | 15.11.2013 | Implemented MailSender Added OJS.Tools.SendMailToAllUsers project\n1672 | Nikolay Kostov | 15.11.2013 | Small changes in the data migration Version deployed\n1671 | Nikolay Kostov | 14.11.2013 | Small improvements in the data migration code\n1670 | Nikolay Kostov | 14.11.2013 | Fixed bug with one thread working with the same submission multiple times because of reusing the DbContext Added batch files for the LocalWorker service\n1669 | Nikolay Kostov | 14.11.2013 | Fixed bug with the used time in the submissions migration\n1668 | Nikolay Kostov | 14.11.2013 | Implemented SunchronizedHashtable Using SunchronizedHashtable in SubmissionJob to prevent executing the same submission multiple times\n166 | Nikolay Kostov | 14.11.2013 | Almost done implementing LocalWorkerService Added TestRunsRepository with delete test runs for submission Added method in submissions repository for getting latest non-processed submission Added two new properties in Submissions model: Processing and ProcessingComment Fixes in compilation information in CompileExecuteAndCheckStrategy\n1666 | Vasil Dininski | 14.11.2013 | Added captcha to registration page. Added localized notifications for the captcha.\n1665 | Nikolay Kostov | 14.11.2013 | IsCompiledSuccessfully is set to true when compilation is successfull in CompileExecuteAndCheckExecutionStrategy\n1664 | Vasil Dininski | 14.11.2013 | Updated location and validation messages for the accounts controller and its actions. Added title text for the glyph icons in the contests list.\n1662 | Ivaylo Kenov | 14.11.2013 | ContestCategory administration now uses ViewModel Editor template for OrderBy\n1661 | Ivaylo Kenov | 14.11.2013 | News administration now uses nice editor template and view model\n1660 | Vasil Dininski | 14.11.2013 | Updated the submission result viewmodel to read the result from the database. Added a check if the code has been compiled successfully. Added a check if the submitted code is within the allowed the code length in the submission page.\n1659 | Nikolay Kostov | 13.11.2013 | Renamed SubmissionsExecutorResult to ExecutionResult\n1658 | Nikolay Kostov | 13.11.2013 | Skeleton for the NodeJsPreprocessExecuteAndCheckExecutionStrategy\n1657 | Nikolay Kostov | 13.11.2013 | Added OldDatabaseMigrationExecutor console project Instantiating checkers fixes Compilers output redirection fixed TestSubmissionResponder should be working correctly now\n1656 | Vasil Dininski | 13.11.2013 | Updated the width of the login and register forms.\n1655 | Vasil Dininski | 13.11.2013 | Changed default colors in the user Settings view to a be more consistent with the general UI. Fixed a bug where deleted resources could be downloaded.\n1654 | Vasil Dininski | 13.11.2013 | Moved the view solution button in the Submissions page to the right for better UI experience.\n1653 | Vasil Dininski | 13.11.2013 | Fixed a bug where deleted resources are accessible in the submission page. Fixed a bug where if you change a resource type it is incorrectly displayed on the submission page.\n1652 | Nikolay Kostov | 13.11.2013 | Fixes in TestSubmissionResponder Tests copier items per iteration changed to 2 to prevent out of memory exception\n1651 | Nikolay Kostov | 13.11.2013 | Runtime exception introduced in the previous changeset fixed.\n1650 | Nikolay Kostov | 13.11.2013 | Implemented real TestSubmissionResponder (not tested yet) Model changes (Memory limit from long to int, new field Processed in Submissions) Some refactorings\n1649 | Nikolay Kostov | 13.11.2013 | Refactored the execution strategies\n1648 | Nikolay Kostov | 13.11.2013 | Removed useless files Implemented get checker method in CompileExecuteAndCheckExecutionStrategy\n1647 | Nikolay Kostov | 13.11.2013 | Created CompileExecuteAndCheck strategy. Removed javascript from CompilerTypes enumeration. Moved TestRunResultType to OJS.Common.Models. Updated ExecutionStrategyType enumeration to include NodeJsPreprocess strategy. Added TestRunResultType enumeration.\n1646 | Nikolay Kostov | 13.11.2013 | Updated Kendo UI MVC wrappers libraries to version 2013.2.1111.340\n1645 | Vasil Dininski | 13.11.2013 | Updated ZippedTestsParser and the mock submission responder to better follow the StyleCop rules.\n1644 | Vasil Dininski | 13.11.2013 | Updated Tests, News and Submissions controllers, and Test view model to better follow the StyleCop rules.\n1643 | Vasil Dininski | 13.11.2013 | Updated AjaxOperation, DeleteAction, ExportAction, LasterNews and DetailsAction test classes, the Controller Service, the Resources, Account and Compete controllers, the AllNews and FeedbackReport view models to better adhere to StyleCop rules.\n1642 | Vasil Dininski | 13.11.2013 | Updated contests, feedback and problems controller to adhere to StyleCop rules.\n1641 | Ivaylo Kenov | 13.11.2013 | Administration news view model Layout menu for administration\n1640 | Vasil Dininski | 13.11.2013 | Updated registration view model to correctly restrict the minimum and maximum username length.\n1639 | Vasil Dininski | 13.11.2013 | Updated the submission content action tests to correctly create a new user with an email address. Updated the Registration view model to check for the username length. Updated CreateActionTests to adhere to StyleCop rules.\n1638 | Vasil Dininski | 13.11.2013 | Added _ViewStart.html\n1637 | Nikolay Kostov | 13.11.2013 | Updated .tfignore to exclude __.git folder\n1636 | Ivaylo Kenov | 13.11.2013 | All econdings converted to UTF-8\n1635 | Vasil Dininski | 13.11.2013 | Updated the layout for the contest listing by submission type. Partially implemented the \"Forgot your password\" functionality and localized the messages. Added a Singleton MailSender for sending emails, but it is not implemented yet.\n1634 | Nikolay Kostov | 12.11.2013 | Work on LocalWorker service Moved ToSecureString to StringExtensions\n1632 | Nikolay Kostov | 12.11.2013 | Renamed TOJS to OJS in all services and service installers Initial code for the local submissions execution worker\n1631 | Nikolay Kostov | 12.11.2013 | Proof of concept for javascript code execution in nodejs using restricted process Restricted process now supports command line arguments for the executables Fixed parsing exception in the submissions copier\n1628 | Ivaylo Kenov | 12.11.2013 | NewsViewModel for administration All administrations now allow big file uploads (around 60 mb)\n1626 | Vasil Dininski | 12.11.2013 | Fixed bug with partial view, where exception is thrown when trying to access the partial view _ExternalLoginsListPartial.\n1625 | Ivaylo Kenov | 11.11.2013 | Fixed wrong redirrection in tasks and tests administration when administrator submits wrong information\n1624 | Ivaylo Kenov | 11.11.2013 | News administration now has option do fetch news from Infos and Infoman\n1623 | Nikolay Kostov | 11.11.2013 | Fixed null reference exception in the submissions copier\n1622 | Ivaylo Kenov | 11.11.2013 | Submissions UI enhanced to show Compilation error. Log link on main menu\n1621 | Nikolay Kostov | 11.11.2013 | Fixed GetStringBetween bug with multiline text\n1620 | Ivaylo Kenov | 11.11.2013 | Home page news now shows 4 news instead of three\n1618 | Nikolay Kostov | 11.11.2013 | Created OJS.Workers.LocalWorker service for evaluating submissions\n1617 | Vasil Dininski | 11.11.2013 | Added localization for the Accounts controller.\n1616 | Ivaylo Kenov | 11.11.2013 | Large (up to 60 mb) file uploads enabled for Tests administration. After 60 mb out of memory exception is thrown\n1615 | Ivaylo Kenov | 11.11.2013 | Fixed a bug when adding wrong resource redirrects to wrong address after clicking on back button\n1604 | Nikolay Kostov | 7.11.2013 | Added bulgarian version of Account resource file\n1603 | Ivaylo Kenov | 6.11.2013 | Edit problem resource type now is selected in the update page\n1602 | Vasil Dininski | 6.11.2013 | Updated bootstrap for user settings so that the elements don't get displaced on lower resolutions/certain devices.\n1601 | Vasil Dininski | 6.11.2013 | Updated _ProfileInfo partial view to Bootstrap 3\n1600 | Vasil Dininski | 6.11.2013 | Added reCaptcha mvc helpers to the project. Added reCaptcha when submitting feedback.\n1599 | Nikolay Kostov | 6.11.2013 | Removed useless file EntityFramework.dll\n1598 | Vasil Dininski | 6.11.2013 | Updated formatting of the Date of Birth label in the user settings page to match the formatting of the other elements.\n1597 | Ivaylo Kenov | 6.11.2013 | Fixed update resource bug requiring to upload again file when not needed Downloading resourse name now contains problem name\n1596 | Vasil Dininski | 6.11.2013 | Fixed bug where the link for changing the password in the user settings page was not redirecting to the correct page.\n1595 | Vasil Dininski | 6.11.2013 | Added mandatory email field to user registration.\n1592 | Vasil Dininski | 6.11.2013 | Updated submissions page - to remove incorrect behavior by the kendo grid with different resolutions.\n1588 | Vasil Dininski | 6.11.2013 | Added a caching field in the Submissions model to hold the submission points. Updated and optimized the contest results page. Updated the TestSubmissionResponder to populate the submission points field.\n1587 | Vasil Dininski | 5.11.2013 | Updated the dummy submissions responder. Not dummy test run generation is done in increments.\n1585 | Nikolay Kostov | 4.11.2013 | Installed SQL tab for Glimpse\n1581 | Ivaylo Kenov | 4.11.2013 | Fixed tests administration not showing tests in correct order - execution order\n1578 | Nikolay Kostov | 4.11.2013 | Added two more tests for the string extension method GetStringBetween Improvements in the submissions copier Updated \"Microsoft.AspNet.Web.Optimization\" to latest version 1.1.2\n1575 | Ivaylo Kenov | 4.11.2013 | Fixed submission page styling when user is logged in\n1573 | Ivaylo Kenov | 4.11.2013 | Fixed submission page sorting when user is not logged in\n1572 | Ivaylo Kenov | 4.11.2013 | Fixed hardcoded maximum point in SubmissionViewModel to be generic determined by problem options\n1571 | Ivaylo Kenov | 4.11.2013 | Fixed bug when not showing results if TestResults are zero\n1568 | Nikolay Kostov | 2.11.2013 | Fixed broken build because of missing glimpse configuration file\n1567 | Nikolay Kostov | 2.11.2013 | Added AUTHORS and LICENSE files Removed repositories.config file from the old solution folder\n1566 | Nikolay Kostov | 2.11.2013 | Improvements in test runs parsing Updated Glimpse packages to the latest versions Added README file\n1562 | Nikolay Kostov | 1.11.2013 | Removed \"Telerik.\" from assembly titles Fixed 2 broken unit tests because of the renamings\n1561 | Nikolay Kostov | 1.11.2013 | Fixed project references after renaming\n1560 | Nikolay Kostov | 1.11.2013 | Removed \"Telerik.\" from folder names Removed Kendo.Mvc source and replaced with binaries\n1559 | Nikolay Kostov | 1.11.2013 | Updated .gitignore\n1558 | Nikolay Kostov | 1.11.2013 | Renamed project folder to \"Open Judge System\"\n1557 | Nikolay Kostov | 1.11.2013 | Added two extension methods for string (GetStringsBetween and GetStringBetween) Improvements in submissions parsing\n1556 | Ivaylo Kenov | 1.11.2013 | Telerik namespace removed from DefaultMigrationConfiguration TestsController fully tested\n1554 | Vasil Dininski | 1.11.2013 | Updated assembly names and default namespaces in .csproj files.\n1553 | Vasil Dininski | 1.11.2013 | Updated default migration configuration namespaces.\n1552 | Vasil Dininski | 1.11.2013 | Updated namespaces for the entire project. Updated routes, views and kendo widgets to use the new namespaces correctly.\n1551 | Vasil Dininski | 1.11.2013 | Moved displaying contests by submission type to the ListController. Updated the route to display a nice url, including the name submission type. Fixed bug on the main page where the remaining hours for a contest were not displayed at all. Updated the main page layout - when there are more than three contests available now only lists the contests, without additional details.\n1549 | Ivaylo Kenov | 1.11.2013 | Unit tests for Import action in TestsController\n1547 | Nikolay Kostov | 31.10.2013 | Fixed OutOfMemoryException when copying submissions from the old database to the new one.\n1544 | Vasil Dininski | 31.10.2013 | Updated the submission validation in the submission page.\n1539 | Vasil Dininski | 30.10.2013 | Refactored the contests submission page and the results page - extracted the styles and most of the javascript logic in separate files. Created a new style bundle for the submission page.\n1535 | Vasil Dininski | 30.10.2013 | Added contests results page. Added units tests for the Details Action of the Contests controller.\n1534 | Ivaylo Kenov | 30.10.2013 | Fixed bug with adding invalid zip file by catching base Exception class\n1533 | Ivaylo Kenov | 30.10.2013 | Ajax operations tests for TestsController Small refactoring for better high quality code in TestsController and tests-index.js\n1529 | Nikolay Kostov | 29.10.2013 | Renamed \"Telerik.OJS.Tools.OldDatabaseMigration\" to \"OJS.Tools.OldDatabaseMigration\" Improvements in submissions copier\n1527 | Ivaylo Kenov | 29.10.2013 | Refactored TestsController to work with default model binder for int and not parse it from string\n1526 | Ivaylo Kenov | 29.10.2013 | Ajax operations tests for TestsController Small refactors\n1523 | Nikolay Kostov | 29.10.2013 | Submissions data migration improved Fixed out of memory problems with tests migration Improved the order of the data records in some of the migrations\n1520 | Vasil Dininski | 28.10.2013 | Updated contest details so that an exception will be thrown when an invalid contest id is provided. Fixed a bug where incorrect results were displayed in the problem results grid. Updated Kendo grid template on the submissions page.\n1519 | Vasil Dininski | 28.10.2013 | Updated the submission page layout to better show the user results.\n1518 | Ivaylo Kenov | 28.10.2013 | Details action tests for TestsController\n1517 | Ivaylo Kenov | 28.10.2013 | Delete action tests for TestsController TestsController refactor for better high quality code\n1516 | Vasil Dininski | 28.10.2013 | Updated the contest details page layout.\n1515 | Nikolay Kostov | 28.10.2013 | Added new table Settings (name-value pair for runtime settings)\n1512 | Vasil Dininski | 28.10.2013 | Minor update of the main submission page.\n1511 | Vasil Dininski | 28.10.2013 | Added a countdown timer to the submissions page. Updated the details view when opening checking a submission details in the submissions page. Updated EF references to the test submission responder.\n1506 | Vasil Dininski | 25.10.2013 | Updated submission page error handling. Updated contest description page.\n1499 | Nikolay Kostov | 25.10.2013 | Renamed \"Telerik.OJS.Common\" to \"OJS.Common\"\n1498 | Nikolay Kostov | 25.10.2013 | Moved TestSubmissionResponder to /Tools/ Deleted old CheatProgram\n1496 | Vasil Dininski | 25.10.2013 | Added submission model validation. Updated the Submit action in the Compete controller to throw an exception when an invalid submission is made. Renamed the Compete controller unit tests. Added unit tests for the ReadSubmissionResults and GetSubmissionContent actions.\n1483 | Nikolay Kostov | 24.10.2013 | Installed Glimpse.Mvc4 Updated Ninject\n1481 | Vasil Dininski | 23.10.2013 | Started unit tests for the Submit action in the Compete controller. Updated the compete controller to check if the contest can be practiced or competed before processing a submission.\n1480 | Nikolay Kostov | 23.10.2013 | Project renamed from \"Telerik Online Judge System\" to \"Open Judge System\"\n1477 | Nikolay Kostov | 22.10.2013 | Refactored AccountController Added resource file for AccountController and moved a string to it.\n1471 | Vasil Dininski | 21.10.2013 | Added more unit tests for the DownloadResource action in the Compete controller. Updated CompeteControllerBaseTestsClass.\n1470 | Nikolay Kostov | 21.10.2013 | Updated to the latest version of the ASP.NET Identity system (1.0.0). Fixed all issues with the new Identity system. Updated all NuGet packages Removed redundant class OjsIdentityStoreContext\n1467 | Nikolay Kostov | 21.10.2013 | Updated \"Microsoft.jQuery.Unobtrusive.Ajax\" to version 3.0.0 Updated \"Microsoft.jQuery.Unobtrusive.Validation\" to version 3.0.0 Updated \"Microsoft.Owin\" to version 2.0.0 Updated \"Microsoft.Owin.*\" to version 2.0.0\n1466 | Vasil Dininski | 21.10.2013 | Added ValidateContest unit tests. Started DownloadResource action unit tests. Updated ContestProblemViewModel.\n1465 | Nikolay Kostov | 21.10.2013 | Updated \"Microsoft.AspNet.Mvc\" to version 5.0.0 Updated \"Microsoft.AspNet.Razor\" to version 3.0.0 Updated \"Microsoft.AspNet.WebPages\" to version 3.0.0\n1460 | Vasil Dininski | 21.10.2013 | Added a SubmissionTypeViewModel. Now displaying the allowed submission types in the contest details page.\n1459 | Vasil Dininski | 21.10.2013 | Added more unit tests for the Problem action. Added unit test for the GetAllowedSubmissionTypes action. Updated the Compete controller to redirect to the registration page, when a user tries to download a problem for a contest that he is not registered for. Updated the namespace for the Compete controller tests.\n1456 | Vasil Dininski | 18.10.2013 | Updated Compete controller unit tests. Added unit tests for the Problem action. Refactored and updated the Problem action in the Compete controller.\n1454 | Vasil Dininski | 18.10.2013 | Updated unit tests for Index action in Compete controller.\n1453 | Nikolay Kostov | 17.10.2013 | Added missing packages file for Telerik.OJS.Workers.Executors\n1452 | Nikolay Kostov | 17.10.2013 | Updated \"EntityFramework\" to version 6.0.1 Updated \"EntityFramework.SqlServerCompact\" to version 6.0.1 Updated \"Moq\" to version 4.1.1309.1617\n1451 | Nikolay Kostov | 17.10.2013 | Updated \"Newtonsoft.Json\" to version 5.0.8 Updated \"log4net\" to version 2.0.2\n1450 | Nikolay Kostov | 17.10.2013 | Work on Controller-Agent communication\n1448 | Vasil Dininski | 17.10.2013 | Updated unit tests for the Compete controller. Added an additional modelstate check in the Register action of the Compete controller.\n1443 | Nikolay Kostov | 17.10.2013 | Custom error page is now working for any kind of exceptions that are thrown in actions Small refactorings in web unit tests\n1442 | Vasil Dininski | 17.10.2013 | Added Register POST action unit tests. Updated the ContestRegistrationViewModel to check if the provided value is null. Updated the ContestRegistrationModel to instantiate the questions in the constructor. Added an error message to the ContestQuestionAnswerModel. Refactored error and exception handling in the Compete Controller.\n1441 | Ivaylo Kenov | 17.10.2013 | Base class for Web tests - validation for ModelState\n1440 | Ivaylo Kenov | 17.10.2013 | Edit action unit tests implemented for TestsController\n1439 | Ivaylo Kenov | 16.10.2013 | Create tests action in TestsController unit tests written\n1434 | Ivaylo Kenov | 16.10.2013 | Resource delete action implemented. Resources CRUD operations now ready\n1433 | Vasil Dininski | 16.10.2013 | Added Registration action unit tests for the Compete controller. Refactored CompeteControllerBaseTestsClass. Removed unused usings is CompeteController.\n1432 | Ivaylo Kenov | 16.10.2013 | Edit scripts tranfered to separate file\n1431 | Ivaylo Kenov | 16.10.2013 | Edit command implemented for problem resources\n1429 | Ivaylo Kenov | 16.10.2013 | On create the page returns back to the corresponding expanded resource row\n1427 | Ivaylo Kenov | 16.10.2013 | Resources Create page implemented\n1426 | Vasil Dininski | 16.10.2013 | Updated and refactored the unit tests for the Index action in the Compete controller.\n1423 | Vasil Dininski | 16.10.2013 | Updated the Index action unit tests for the Compete controller and added more test cases. Minor refactoring of the Index action in the Compete controller to take advantage of the contest extension method ShouldShowRegistrationForm.\n1421 | Vasil Dininski | 16.10.2013 | Added unit tests for the Index action in the Compete controller\n1418 | Vasil Dininski | 15.10.2013 | Chained constructors in Participant model. Added Compete Controller base test class. Started unit testing the Compete controller.\n1416 | Vasil Dininski | 15.10.2013 | Updated check in contest registration page - added checks whether the contest has any questions, has a contest password and can be competed or has a practice password and can be practiced and handles participant registration. Updated TestsController to adhere to StyleCop rules.\n1412 | Vasil Dininski | 15.10.2013 | Added editor template for the EmailAddress data type.\n1411 | Vasil Dininski | 15.10.2013 | Added validation for the email address on registration. Added a check in the compete contoller if an invalid problem id is provided. When displaying problems in the submissions page they are sorted alphabetically.\n1410 | Nikolay Kostov | 15.10.2013 | Updated \"Newtonsoft.Json\" to version 5.0.7 and \"Microsoft.AspNet.Web.Optimization\" to version 1.1.1\n1409 | Ivaylo Kenov | 14.10.2013 | Resource Repository StreamExtensions for converting from byte array to MemoryStream and backwards Problem Resources now as detail template grid in Problems administration. Only read method implemented currently. JS files now have the controller as prefix in their name because otherwise VS crashes if two files has the same name.\n1406 | Nikolay Kostov | 14.10.2013 | Added constructor for CompeteController and BaseController for the UserProfile to be replacable during testing\n1400 | Vasil Dininski | 14.10.2013 | Added additional comments for the Compete controller.\n1399 | Ivaylo Kenov | 14.10.2013 | Changed Edit template to use the Create one. Fixed a bug with editing task about fetching all checkers for Kendo Dropdown.\n1398 | Vasil Dininski | 14.10.2013 | Added scores to the submission page, updated code formatting in feedback controller tests and home controller tests to pass stylecop check.\n1397 | Ivaylo Kenov | 14.10.2013 | Creating tasks implemented with validation\n1396 | Ivaylo Kenov | 13.10.2013 | StreamExtension ToByteArray added for easier resource addition Create problem resources adding implemented\n1395 | Nikolay Kostov | 11.10.2013 | Work on controller-agent communicaton\n1393 | Ivaylo Kenov | 11.10.2013 | Small refactoring in Administration/Tests/index.js for better high quality code Create operation for Problem in ProblemsController implemented\n1392 | Ivaylo Kenov | 11.10.2013 | ZippedTestsParser is now called ZippedTestsManipulator since it can add tests to problem, not only parse them from zip file\n1391 | Ivaylo Kenov | 11.10.2013 | Test importing from Zip file extracted from TestsController to separate project Telerik.OJS.Common under namespace ZippedTestsParser\n1390 | Ivaylo Kenov | 11.10.2013 | Moved all extension classes from Telerik.OJS.Common to a folder and namespace Telerik.OJS.Common.Extensions\n1388 | Ivaylo Kenov | 11.10.2013 | Added to model ProblemResource property Link - if type is video it should not have file Create task front end form is ready, server side needs more work\n1385 | Vasil Dininski | 11.10.2013 | Added a navigational property from a Problem to Submissions and a not-mapped property to the Submissions model, that returns the number of correct test runs for a submission. Updated the submission page to include the best results for the current problem so far and added navigation to the problem description. Updated the contest details view to be more used friendly and to correctly navigate to the contest registration.\n1379 | Ivaylo Kenov | 10.10.2013 | Description attribute for enum and extension method for friendly text visualization. Resources now can be added dynamically in Create task form, still no server logic implemented for them. Small css adjacements for task creation form.\n1378 | Vasil Dininski | 10.10.2013 | Updated ContestViewModel to include all necessary properties, minor code refactoring to adhere to StyleCop rules.\n1375 | Nikolay Kostov | 10.10.2013 | Fixed exception with the controller configuration file Classes that are used for communication between controller and agents are marked as serializable Changed the name of the controller log file to be more descriptive Fixed compilation warning\n1374 | Nikolay Kostov | 10.10.2013 | Added batch files for installing the controller service\n1373 | Nikolay Kostov | 10.10.2013 | Fixed installing services not working by making service installers public classes with [RunInstaller] attribute\n1372 | Vasil Dininski | 10.10.2013 | Updated contest details page to include the ability to practice or compete in contest if it can be practiced/competed\n1370 | Vasil Dininski | 10.10.2013 | Added contest details and the ability to download the contest materials if the contest can be practiced and has no password\n1369 | Nikolay Kostov | 10.10.2013 | Added bat files to install the agent service\n1367 | Ivaylo Kenov | 10.10.2013 | Problem Administration QuickBar for easy contest selection Tests for ProblemsController (not completed) Create task form - ready without resource adding and tests\n1365 | Vasil Dininski | 10.10.2013 | Added 'Description' field to the Contest model and ViewModel\n1362 | Nikolay Kostov | 10.10.2013 | Fixed exceptions when starting service\n1354 | Vasil Dininski | 9.10.2013 | Added server side and client side validation whether the submission was sent too soon.\n1352 | Vasil Dininski | 9.10.2013 | Added security checks when downloading problem resources, updated displaying of results.\n1350 | Vasil Dininski | 8.10.2013 | Updated submissions page\n1345 | Nikolay Kostov | 8.10.2013 | Added unit tests for string.MaxLength extension method\n1337 | Nikolay Kostov | 5.10.2013 | Old database migration performance improved.\n1336 | Vasil Dininski | 4.10.2013 | Updated submission page to include submission test results.\n1335 | Vasil Dininski | 4.10.2013 | Added contest registration, started working on contest submissions page\n1331 | Nikolay Kostov | 3.10.2013 | Work on agent service\n1318 | Ivaylo Kenov | 29.9.2013 | Refactored TestsController to validate Anti-forgery token and ModelState\n1303 | Nikolay Kostov | 26.9.2013 | Small changes in model\n1300 | Vasil Dininski | 26.9.2013 | Updated invalid cyrillic text due to incorrect encoding.\n1273 | Vasil Dininski | 25.9.2013 | Updated encodings and text in register, login and feedback views to display cyrillic text correctly.\n1203 | Ivaylo Kenov | 17.9.2013 | Delete for problem/task Administration\n1202 | Ivaylo Kenov | 17.9.2013 | Edit for tasks Administration\n1201 | Ivaylo Kenov | 17.9.2013 | Delete all tasks from Contest Small bug fixing in Kendo Grid for tests and problems\n1200 | Ivaylo Kenov | 17.9.2013 | Default Values added for DetailedProblemViewModel Navigation now has Tasks administration Small bugs fixed in Tests Administration views\n1198 | Ivaylo Kenov | 17.9.2013 | Adding Problem through administration. Currently uploading of description resource and zip file with tests does not work.\n1197 | Nikolay Kostov | 17.9.2013 | Some code refactoring in sandbox\n1194 | Ivaylo Kenov | 17.9.2013 | Checker is DeletableEntity Repository for Checker\n1193 | Ivaylo Kenov | 17.9.2013 | DetailedProblem View Model for more information on problems Controller for Problems DropDowns for Problem Selection by category and contest Web.Common library for common web logic\n1181 | Nikolay Kostov | 16.9.2013 | Small code refactorings\n1179 | Ivaylo Kenov | 16.9.2013 | Test runs on every Test detail is now shown as AJAX option on a Kendo Grid\n1178 | Ivaylo Kenov | 16.9.2013 | Ajax jQuery bundle added Tests now have details in them with AJAX fetching of full data CRUD operations fixed Back button to redirrect to correct page\n1171 | Ivaylo Kenov | 16.9.2013 | DeleteAll option for tests added. Now all problem tests can be deleted by clicking two buttons\n1165 | Ivaylo Kenov | 15.9.2013 | Kendo AutoComplete Search implemented for tests editing\n1163 | Ivaylo Kenov | 15.9.2013 | Administration navigation now has Test Files link Test files - dropdowns are easily populated by problemId\n1161 | Ivaylo Kenov | 15.9.2013 | Administration/Tests/Problem/Id now populates the grid with the correct tests. This allows us when doing CRUD operations on tests to return to the correct problem without selecting it again. Populating drop-downs does not work correctly currently.\n1152 | Ivaylo Kenov | 13.9.2013 | Fixed unit test for displaying latest news count. There was a change on the page - from 10 to 5.\n1149 | Nikolay Kostov | 13.9.2013 | Updated Glimpse packages to latest version Updated Antlr to latest version\n1142 | Nikolay Kostov | 12.9.2013 | Fixed process name property Small comment fixes\n1068 | Ivaylo Kenov | 9.9.2013 | Refactored View for Selected news. Looks better now - latest news is in the right part of the page\n1049 | Nikolay Kostov | 9.9.2013 | Fixed issue with running sandbox on 64-bit OS versions. This was caused by using short data type for some of the BasicLimitInfo properties instead of using int (uint) If something fails when starting restricted process we close the process\n1043 | Nikolay Kostov | 8.9.2013 | Increased pipes buffer size to improve console IO operations performance with the price of additional memory\n1042 | Nikolay Kostov | 8.9.2013 | RestrictedProcessExecutor: new time strategy: now we wait the process 1.5 time the time limit and then check consumed process time RestrictedProcessExecutor: Waiting for output and error tasks to complete Added log4net logging in RestrictedProcessExecutor\n1041 | Nikolay Kostov | 7.9.2013 | Added PrivilegedProcessorTime and UserProcessorTime properties in ProcessExecutionResult Added realistic case: JustDoSomeCpuWork in sandbox target program Added SourceCodeSizeLimit in problems model Added latest version of PC2 binaries Added source and links to spoj0 judge system\n1040 | Nikolay Kostov | 7.9.2013 | Proof of concept program now uses restricted process through RestrictedProcessExecutor facade Added debug assertion that the process we are executing is exited Web version deployed\n1034 | Nikolay Kostov | 6.9.2013 | Fixed test fails because of System.AggregateException (System.Threading.Tasks.TaskCanceledException)\n1032 | Nikolay Kostov | 6.9.2013 | Attempt to fix failing unit tests\n1030 | Nikolay Kostov | 6.9.2013 | RestrictedProcessExecutor now returns memory limit when consumed memory is more than the memory limit (added unit test to validate this) JobObject limits are now twise as big as the process limit (just for additional protection)\n1025 | Nikolay Kostov | 6.9.2013 | Memory consumption evaluation task now uses cancellation token and the task is waited 30ms before closed\n1021 | Nikolay Kostov | 6.9.2013 | Reading standard output and error streams is now made asynchronously to prevent standard buffer of 4096 bytes for the output which introduces process block (https://github.com/NikolayIT/Telerik.OJS/issues/109) Added Gacutil program for registering assemblies in GAC In POC program reading standard output and error is now asynchonously Improvements in SandboxTargetProgram\n1012 | Nikolay Kostov | 6.9.2013 | In old Telerik Contest System: Updated all projects to .NET 4.5 Updated EntityFramework to version 5.0 Added RestrictedProcessExecutor wapper for the future replacement of the current executor\n1011 | Nikolay Kostov | 5.9.2013 | Moved \"Similar sites.txt\" file to \"Other Judge System\" folder\n1010 | Nikolay Kostov | 5.9.2013 | Added PowerCollections binaries (both signed and not) as they are required for the system that will compile the C# code\n1008 | Nikolay Kostov | 5.9.2013 | Migrated old Telerik Contest System solution to Visual Studio 2013\n1007 | Nikolay Kostov | 5.9.2013 | Added old Telerik Contest System source code\n1006 | Nikolay Kostov | 5.9.2013 | Added few of the old Telerik Contest System files\n1005 | Nikolay Kostov | 5.9.2013 | Added other judge systems in documentation (PC2 and SMOC)\n1003 | Nikolay Kostov | 5.9.2013 | Added folder for the source of the old version of bgcoder.com\n992 | Nikolay Kostov | 5.9.2013 | Enabled Glimpse for the web project Glimpse now works with latest versions (RC) of EF and MVC\n991 | Nikolay Kostov | 4.9.2013 | RestrictedProcess is now run as a detached process Updated Glimpse.EF6 to latest version 1.4.0\n989 | Nikolay Kostov | 4.9.2013 | SandboxTarget now counts passed tests Win32 class and SafeNativeMethods class moved to NativeMethods class Implemented creating restricted token with safer* api calls SetTokenMandatoryLabel logic extracted in separate method\n988 | Nikolay Kostov | 4.9.2013 | In compilers: Remove outputFile parameter and let implementations to return it as a part of CompileResult\n987 | Nikolay Kostov | 4.9.2013 | Attempt to fix failed tests\n986 | Nikolay Kostov | 4.9.2013 | Added IsGhostUser property in UserProfile model to indicate whether the user is from the old system and not confirmed new registration Small refactoring and improvements\n976 | Nikolay Kostov | 3.9.2013 | Extracted AgentClient and ControllerServer classes\n973 | Nikolay Kostov | 2.9.2013 | Added LimitBetweenSubmissions property in Contest model Work on skeleton of Controller and Agent services\n972 | Nikolay Kostov | 2.9.2013 | Moved submission types list from problems to contests. Attempt to fix unit tests for sandbox functionality Fixed possible wrong values for memory consumpsion in RestrictedProcessExecutor class\n969 | Nikolay Kostov | 2.9.2013 | Added problem resources (model and relations) Improved tasks copier to copy checkers information and problem descriptions Added GetFileExtension string extension method with corresponding tests\n966 | Nikolay Kostov | 2.9.2013 | Attempt to fix 2 broken tests\n965 | Nikolay Kostov | 2.9.2013 | DifferentUserProcessExecutor now measures used memory for the process Added unit tests for DifferentUserProcess and Restricted process to validate that they measure memory used correctly Improved wait times for memory usage measure in RestrictedProcess\n964 | Nikolay Kostov | 2.9.2013 | Implemented PeakWorkingSetSize and PeakPagefileUsage information for the running restricted process Added name property for the process Fixed issues with early disposing process resources RestrictedProcessExecutor now sets MemoryUsed value in ProcessExecutionResult\n963 | Ivaylo Kenov | 1.9.2013 | Fetching news frm Infos implemented\n962 | Nikolay Kostov | 1.9.2013 | Attempt to find PeakMemoryUsed by a restricted process\n961 | Ivaylo Kenov | 1.9.2013 | Test Administration refactored to use external JavaScript file\n960 | Nikolay Kostov | 1.9.2013 | Made RestrictedProcess disposable (to close handles to process and main thread)\n955 | Nikolay Kostov | 30.8.2013 | Updated version number in web footer Version deployed\n953 | Ivaylo Kenov | 30.8.2013 | TestFiles CRUD operations through Kendo Grid implemented BaseController have LargeJson result method TestViewModel edited to have properties for bigger tests\n937 | Ivaylo Kenov | 30.8.2013 | Edit and Delete button for Tests Grid View\n936 | Ivaylo Kenov | 30.8.2013 | Grid added for TestFiles administration - Read operation over tests and displaying them\n935 | Ivaylo Kenov | 29.8.2013 | TestFilesViewModel added Parts of Ajax requests for grid view for problem tests added\n934 | Nikolay Kostov | 29.8.2013 | Included TimeWorked and MemoryUsed in ProcessExecutionResult ExecutionResult renamed to ProcessExecutionResult\n933 | Nikolay Kostov | 29.8.2013 | Tests for RestrictedProcess class added ExecutionResult improved to contain error output and execution result type (time limit, success, run-time error, memory limit) ProcessExecutionInfo class is now hiden in DifferentUserProcessExecutor\n931 | Nikolay Kostov | 29.8.2013 | Added security check in SandboxTarget for writing in %USER PROFILE%\\AppData\\LocalLow\n930 | Nikolay Kostov | 29.8.2013 | Small enchancements in unit tests and SidIdentifierAuthority class\n929 | Nikolay Kostov | 29.8.2013 | RestrictedProcess is now run under low integrity SID\n927 | Ivaylo Kenov | 29.8.2013 | Fetching of news from InfoMan implemented Views for News now show content as Raw HTML\n922 | Ivaylo Kenov | 29.8.2013 | Login and Register refactored a bit to look more color friendly\n921 | Ivaylo Kenov | 29.8.2013 | Profile link redirrects to Users/Profile and Change Password link to Account/Manage Small UI fixes for Bootstrap 3.0 on users profile, layout, changing password and settings\n915 | Ivaylo Kenov | 29.8.2013 | Fixed improper rendering of navbar login user menu\n914 | Ivaylo Kenov | 29.8.2013 | Fixed all non-working unit tests - they needed Author and Source in every News instance\n913 | Nikolay Kostov | 29.8.2013 | Fixed \"access denied\" exception when starting process with restricted token in RestrictedProcess class\n912 | Nikolay Kostov | 28.8.2013 | Started work on creating restricted token for process in restricted process class. Some refactoring in processes implementation\n911 | Ivaylo Kenov | 28.8.2013 | News now have Author and Source in Controller, Model, ViewModels and Views\n910 | Nikolay Kostov | 28.8.2013 | Created restricted process executor class Small refactorings Dropped IProcessExecutor interface since only one class will implement it and that class may not be publicly visible\n909 | Nikolay Kostov | 28.8.2013 | Refactored and relocated some of the files in Telerik.OJS.Workers.Executors Source code in executors unit test extracted as constants Added RecursivelyCheckFileSystemPermissions method in sandbox target\n907 | Nikolay Kostov | 27.8.2013 | Implemented StartTime, ExitTime, PriviledgedProcessorTime, UserProcessorTime and TotalProcessorTime properties for RestrictedProcess class\n906 | Nikolay Kostov | 27.8.2013 | Fixed bug with hanging when reading standard ouput and error streams in RestrictedProcess class\n901 | Nikolay Kostov | 27.8.2013 | Added new unit test in TestDifferentUserProcess Fixed unit test timings for tests in TestDifferentUserProcess to run on slow CI servers\n900 | Nikolay Kostov | 27.8.2013 | Timing of two unit tests in TestDifferentUserProcess fixed to work correctly on slower CI servers\n899 | Nikolay Kostov | 27.8.2013 | Implemented Kill() and WaitForExit() methods in RestrictedProcess class\n897 | Nikolay Kostov | 27.8.2013 | Work on RestrictedProcess methods WaitForExit() and Kill()\n896 | Nikolay Kostov | 26.8.2013 | Fixed bug with redirecting standard input, output and error handles when using RestrictedProcess class\n895 | Nikolay Kostov | 26.8.2013 | Fixed bug with creating pipes in RestrictedProcess 2 more unit tests added for different user process class Fixed compile error caused by missing reference to System.dll in BaseExecutorsTestClass\n894 | Nikolay Kostov | 25.8.2013 | Fixed account controller to work with the new ASP.NET identity Added 2 unit tests for DifferentUserProcess class\n893 | Nikolay Kostov | 25.8.2013 | Added Telerik.OJS.Workers.Executors.Tests and 2 unit tests for DifferentUserProcess class\n892 | Nikolay Kostov | 25.8.2013 | InfoType renamed to InfoClass and added all missing values Work on job object information extraction\n891 | Nikolay Kostov | 25.8.2013 | Time is now limited correctly in SandboxProcess Writing to processes in SandboxProcess is now async operation\n890 | Nikolay Kostov | 25.8.2013 | Work on native use of processes (not done yet) Improved information in Sandbox target program\n889 | Nikolay Kostov | 25.8.2013 | Fixed encodings to all view. Their encoding is now utf8\n885 | Nikolay Kostov | 25.8.2013 | Two more packages removed from source control system since they will be included during build Fixed compilation warning with Antlr packages\n884 | Nikolay Kostov | 25.8.2013 | Removed all packages from source control since nuget package restore is enabled for the solution\n883 | Nikolay Kostov | 25.8.2013 | Attempt to fix broken build\n882 | Nikolay Kostov | 25.8.2013 | Attempt to fix broken build\n881 | Nikolay Kostov | 25.8.2013 | Attempt to fix broken build\n880 | Nikolay Kostov | 25.8.2013 | \n879 | Nikolay Kostov | 25.8.2013 | NuGet package resore enabled for the solution\n878 | Nikolay Kostov | 25.8.2013 | Implemented basic UI restrictions functionality in the sandbox (including restrict access to clipboard) WrapperImpersonationContext moved to Telerik.OJS.Workers.Executors Introduced new class PrepareJobObect to hold specific job object limitations for SandboxProcess Job object class now has 2 new methods SetExtendedLimitInformation and SetBasicUiRestrictions SandboxTarget program improved to work with clipboard ExecutionResult renamed to TestRunResultType\n877 | Nikolay Kostov | 24.8.2013 | Updated all nuget packages to latest versions AccountController is currently not working with the new asp.net identity\n876 | Nikolay Kostov | 24.8.2013 | Cheat program removed from \\Tests\\ folder because all of its funcionality is included in SandboxTarget console application Sandbox target now uses console output instead of log file\n875 | Nikolay Kostov | 23.8.2013 | Improvements in agent class method parameters\n874 | Nikolay Kostov | 23.8.2013 | Fixed missing file InfoType.cs to fix broken build\n873 | Nikolay Kostov | 23.8.2013 | Refactored SandboxProcess to not use Console for debugging. Debugging code is moved back to SandboxPocProgram\n872 | Nikolay Kostov | 23.8.2013 | Process sandbox logic extracted in SandboxProcess class\n871 | Nikolay Kostov | 23.8.2013 | Sandbox POC and target improvements\n870 | Nikolay Kostov | 23.8.2013 | Sanbox target console application refactored to reduce code duplicates Sandbox POC console application now shows process info after the process exited\n869 | Nikolay Kostov | 23.8.2013 | Job object improved to limit active processes to 1 (this solves security problem related to Process.Start capability when executing C# code) Refactoring in JobObjects classes Added Security limit flags and information class\n868 | Nikolay Kostov | 23.8.2013 | Fixed build break (renaming problems)\n867 | Nikolay Kostov | 23.8.2013 | Code refactoring in job object classes (each class is now in separate file)\n866 | Nikolay Kostov | 23.8.2013 | Started work on sandbox Created console application for sandbox proof of concept Added sandbox target to test the sandbox with Refactoring in job object classes\n862 | Nikolay Kostov | 22.8.2013 | Work on execution strategies\n861 | Nikolay Kostov | 22.8.2013 | Work on execution strategies\n860 | Nikolay Kostov | 22.8.2013 | C# compiler implemented (needs testing) C++ compiler implemented (needs testing) Base compiler logic implemented in BaseCompiler using template method design pattern\n859 | Ivaylo Kenov | 22.8.2013 | Further more Contest by category page adaptation to Bootstrap 3.0\n858 | Ivaylo Kenov | 22.8.2013 | Contest page adapted to Bootstrap 3.0\n857 | Nikolay Kostov | 22.8.2013 | Compiler model renamed to submission type Added execution strategy type Submission type data seed added\n856 | Ivaylo Kenov | 22.8.2013 | Test files View fixed for Bootstrap 3.0\n855 | Ivaylo Kenov | 22.8.2013 | HTML Agility Pack added as NuGet package Views updated to use Bootstrap 3.0 Translated Login and Register page\n854 | Nikolay Kostov | 22.8.2013 | Added compilers and compiler types to the model. Each submission now has selected compiler and each problem has list of allowed compilers\n853 | Ivaylo Kenov | 22.8.2013 | TestFiles now support Adding IOI tests\n852 | Nikolay Kostov | 22.8.2013 | Added 3 missing bootstrap files\n851 | Nikolay Kostov | 22.8.2013 | Bootstrap updated to version 3.0.0\n850 | Nikolay Kostov | 22.8.2013 | Updated 'Moq' from version '4.0.10827' to '4.1.1308.2120' in project 'Telerik.OJS.Web.Tests'\n849 | Nikolay Kostov | 22.8.2013 | Updated EntityFramework.SqlServerCompact from version 6.0.0-beta1 to version 6.0.0-rc1 All projects now use the same SqlServer Compact version (6.0.0-rc)\n848 | Nikolay Kostov | 22.8.2013 | EntityFramework updated from version 6.0.0-beta1 to 6.0.0-rc1 Fixed EF update issues related to attribute conventions Settings.StyleCop file excluded from compiled binaries in web project\n847 | Ivaylo Kenov | 22.8.2013 | Refactored TextFiles UI\n845 | Ivaylo Kenov | 21.8.2013 | Contest administration now uses ViewModel and do not fetch unneeded data\n844 | Ivaylo Kenov | 21.8.2013 | Profile Info Refactored Submissions now does not show contests with passwords All projections now use static methods from ViewModels\n843 | Ivaylo Kenov | 21.8.2013 | Submissions method is now AllPublic If contests has password -> it will not be shown in log\n842 | Ivaylo Kenov | 21.8.2013 | Contest has two passwords - Contest Password and Practise Password\n841 | Ivaylo Kenov | 21.8.2013 | SubmissionViewModel has ProblemMaximumPoints property and now calculates Points based on it Views updated to show correct information for Maximum Points\n840 | Nikolay Kostov | 21.8.2013 | Fixed bug #54 (Login returns invalid Username) by removing UserName property overriding\n839 | Ivaylo Kenov | 21.8.2013 | Submission log do not show active contests submissions Custom repository created for submissions\n838 | Nikolay Kostov | 21.8.2013 | Updated Newtonsoft.Json.4.5.11 to latest version 5.0.6 for all assemblies\n837 | Nikolay Kostov | 21.8.2013 | Refactored AdministrationRoutesTests to use RoutesTestsBase methods Data annotations moved to Telerik.OJS.Common\n836 | Nikolay Kostov | 21.8.2013 | Implemented #61 (Users should be accessed by username in URL) Added unit tests for users routes\n835 | Ivaylo Kenov | 21.8.2013 | News pagination do not show all pages if page count is more than 10 pages\n834 | Ivaylo Kenov | 21.8.2013 | Small refactor on submissions visualization Advanced submission is not sortable any more\n833 | Ivaylo Kenov | 21.8.2013 | Fixed diplaying no information in User Settings Age property when no date is given\n826 | Nikolay Kostov | 19.8.2013 | Fixed #57 (Refactor Kendo UI grids everywhere to use server side paging)\n825 | Nikolay Kostov | 19.8.2013 | Fixed #13 (Move all repositories to Telerik.OJS.Data.Repositories)\n824 | Nikolay Kostov | 19.8.2013 | Fixed #14 (Move all repository interfaces to Telerik.OJS.Data.Repositories.Contracts)\n823 | Nikolay Kostov | 19.8.2013 | TestRun should not be deletable entity since DeletableEntity will add 4 more columns to the table. TestRuns is expected to have millions of records so we should keep it as small as possible.\n822 | Ivaylo Kenov | 16.8.2013 | Import and Export for Test Files (Web form in administration) Changed css order - Kendo is now first, Site is second\n818 | Ivaylo Kenov | 15.8.2013 | Repositories for Test class. Importing of three kind of tests added: {name}.{testnumber}.{in|dol} {numberoftask}{ET|GT}_{testnumber}.{IN|OUT} test.{000|\"\"}.{testnumber}.{in|out}.txt Danger (red) messages added to layout View added\n810 | Ivaylo Kenov | 12.8.2013 | Submission log for Logged Users added with Kendo UI Grid Needs to be refactored to work with server-side paging\n809 | Ivaylo Kenov | 12.8.2013 | Removed the My ASP.NET Application header and put BGCoder instead\n808 | Ivaylo Kenov | 10.8.2013 | Fixed padding bug by removing display fixed in theme (might be a bug) Will try to fix it in better way if there is one\n807 | Ivaylo Kenov | 10.8.2013 | Repository for TestRuns Updated bootstrap to 3.0 RC 1 Added in bundles Bootstrap icons Added fonts for Bootstrap icons Submission Controller implemented Submissions View Model (needs more work) TestRun View Model (needs more work) Fixed login and register routes to have no area Basic Submissions view implemented\n806 | Nikolay Kostov | 9.8.2013 | Added 2 new unit tests to assure exceptions are thrown in CSharpCodeChecker\n805 | Nikolay Kostov | 9.8.2013 | Glimpse updated to latest version (still not working with EF6) Ninject updated to latest version (3.0.2-unstable-9037) Added styles and JS files from Kendo.Mvc in \"External Libraries\" folder\n804 | Nikolay Kostov | 9.8.2013 | Changes in TestRun model\n803 | Ivaylo Kenov | 9.8.2013 | News module should be done. Unit tests for all Actions in NewsController Precision Checker fixed for Bulgarian Culture\n802 | Ivaylo Kenov | 9.8.2013 | News error message when such do not exists\n801 | Ivaylo Kenov | 9.8.2013 | Previous and Next buttons implemented in Selected News\n798 | Ivaylo Kenov | 8.8.2013 | All news listed controller view and viewmodel\n796 | Nikolay Kostov | 8.8.2013 | Implemented CSharpCodeChecker Web.config configured to use machine key for the web application that is different from other applications on the same web server\n795 | Nikolay Kostov | 7.8.2013 | Refactored checkers and their unit tests Changed checkers model (added properties Parameter and IsProblemSpecific) Other changes and refactorings\n793 | Nikolay Kostov | 7.8.2013 | Attempt to fix broken build because of Ionic.Zip.dll not referenced correctly\n792 | Nikolay Kostov | 7.8.2013 | Fix in Web.config for Ionic.Zip version\n791 | Ivaylo Kenov | 7.8.2013 | Another attempt to fix the missing build\n790 | Ivaylo Kenov | 7.8.2013 | Attempt to fix broken build (missing DotNetZip dll library)\n789 | Ivaylo Kenov | 7.8.2013 | Test File Controller has working Extract zip file method Unit test for Test File Controller\n788 | Ivaylo Kenov | 6.8.2013 | Small refactorings in Precision Checker unit tests\n787 | Ivaylo Kenov | 6.8.2013 | Precision checker added Unit tests for precision checker\n786 | Nikolay Kostov | 5.8.2013 | Installed DotNetZip version 1.9.1.8 Added empty TestFilesController for import/export tests logic\n785 | Nikolay Kostov | 5.8.2013 | Refactorings in CompeteController.Register Closed issue #19 (Extract show registration form logic in separate method)\n784 | Nikolay Kostov | 5.8.2013 | Contest registration logic implemented when registration form should not be displayed\n783 | Ivaylo Kenov | 5.8.2013 | Case insensitive checker added Unit tests for case insensitive checker\n782 | Nikolay Kostov | 5.8.2013 | Added Participants repository Added UserProfile property to BaseController Ninject updated to version 3.0.2-unstable-9035 Translated strings in _LoginPartial.cshtml Fixed issue #15 (exception when navigate to user profile from some area) Fixed issue #16 (exception when click log off deom some area page)\n781 | Ivaylo Kenov | 5.8.2013 | Small unit tests refactor for Trim Checker\n780 | Ivaylo Kenov | 5.8.2013 | Sort checker Unit tests Additional unit tests for Exact checker and Trim checker\n779 | Ivaylo Kenov | 5.8.2013 | Exact and Trim Checker added with abstract BaseChecker Class Exact and Trim checker Unit tests\n778 | Nikolay Kostov | 3.8.2013 | Added empty project Telerik.OJS.Workers.Compilers Added empty project Telerik.OJS.Workers.Executors Added \"job objects\" functionality (http://msdn.microsoft.com/en-us/library/ms684161%28v=vs.85%29.aspx) Added Win32 class in Telerik.OJS.Workers.Common with common win32 interop functions Moved GlimplseSecurityPolicy to /App_Start\n777 | Nikolay Kostov | 2.8.2013 | Added Glimpse packages Fixed typos in Home/Index.html\n776 | Nikolay Kostov | 2.8.2013 | Action GetByCategory renamed to ByCategory\n775 | Nikolay Kostov | 2.8.2013 | Added empty views and actions for contest compete functionality Contests routes unit tested Added .gitignore (for future git integration)\n774 | Nikolay Kostov | 2.8.2013 | Contests web logic moved to its own area Contests routes unit test improvements Added NetworkDataObject class to hold communication data between controller and agents\n773 | Nikolay Kostov | 2.8.2013 | Draft of controller and agent communication sequence diagram added\n772 | Nikolay Kostov | 1.8.2013 | Added navigation property to Participants in Contest model Added HasContestPassword and HasPracticePassword properties in Contest model ContestCategory now implements IOrderable In OldDatabaseMigration copiers refactored and cleaned Performance improvements in ParticipantsCopier Fixed N+1 problem in ContestViewModel projection Improved UI of contests list\n771 | Ivaylo Kenov | 1.8.2013 | User settings Age property unit tests String Extensions unit tests String Extensions bug for replacing C # and C++ fixed Exact Checker 100% code coverage by adding one more unit test\n770 | Ivaylo Kenov | 1.8.2013 | User settings and profiles added ToUrl method - excaped some symbols\n769 | Nikolay Kostov | 1.8.2013 | Fixed exception with registrations (CreatedOn property is always null when user is created from IdentityStore.CreateLocalUser)\n768 | Nikolay Kostov | 31.7.2013 | Added CodeMirror (javascript-based code editor component) Added ToUrl() string extension method Contest urls are now clearer\n767 | Nikolay Kostov | 31.7.2013 | Added ParticipantAnswersConfiguration for preventing potential cycles or multiple cascade paths problem Depend upon abstractions instead of concrete implementations for checking AuditInfo and DeletableEntity Added ParticipantAnswer model Moved user setting specific data to complex type called UserSettings User class now implements IDeletableEntity and IAuditInfo \"Ninject.3.0.2 unstable 9\" updated to \"Ninject.3.0.2 unstable 9028\" \"Ninject.Web.Common.3.0.2 unstable 9\" updated to \"Ninject.Web.Common.3.0.2 unstable 9012\" Added logic for mivong participants from old database Logic for moving users from the old database improved\n766 | Ivaylo Kenov | 31.7.2013 | Profile information Controller, View and ViewModel Partial View for profile information Tests for feedback controller Started settings page User settings started in UserProfile model\n765 | Ivaylo Kenov | 31.7.2013 | Tests for DeletedOn + users area\n764 | Nikolay Kostov | 31.7.2013 | Temporally fix for broken unit tests because of SQL Compact database not having \"date\" type\n763 | Nikolay Kostov | 31.7.2013 | Added new ef code first convention IsUnicodeAttributeConvention Added new properties in UserProfile model Work on UsersCopier for moving users from the old database Few small fixes\n760 | Ivaylo Kenov | 30.7.2013 | Feedback form + unit tests\n759 | Nikolay Kostov | 29.7.2013 | StyleCop settings file included in all projects Feedbacks renamed to FeedbackReports Code cleanups (using StyleCop suggestions)\n757 | Ivaylo Kenov | 29.7.2013 | Common folder for Telerik.OJS.Common\n756 | Ivaylo Kenov | 29.7.2013 | Unit tests performance boosts\n755 | Ivaylo Kenov | 29.7.2013 | Routes for Administration area Unit tests and Feedback repository and dbset.\n754 | Ivaylo Kenov | 29.7.2013 | InitializeEmptyOjsData method added to clear SQL Compact database for tests\n753 | Ivaylo Kenov | 29.7.2013 | merge and new unit tests for contest category\n752 | Nikolay Kostov | 28.7.2013 | Added method AllWithDeleted in DeletableEntityRepository ClearDatabase method now have hardcoded table names to prevent problems with foreign keys when deleting data Submission properties added: Problem relation, Content and ContentAsString Added string extensions in Telerik.OJS.Common Refactored OldDatabaseMigration. All migrations are now in separate classes Few more small refactorings\n751 | Nikolay Kostov | 28.7.2013 | Added StyleCop settings files\n750 | Nikolay Kostov | 28.7.2013 | Code cleanups and refactoring (StyleCop advices used)\n749 | Nikolay Kostov | 28.7.2013 | Added some classes for the controller<->agent communication\n748 | Nikolay Kostov | 28.7.2013 | Exact checker implemented (added unit tests to verify its behavior) Wrote some routes tests (added required web stubs for testing) Added Telerik.OJS.Workers.Controller - empty service Added Telerik.OJS.Workers.Agent - empty service\n747 | Nikolay Kostov | 26.7.2013 | Added test project for Telerik.OJS.Common library Added unit test for compression and decompression\n746 | Nikolay Kostov | 26.7.2013 | Tests migration implemented Changes in tests model: the tests data is now stored in compressed format (using deflate) Added Telerik.OJS.Common library for common system functionality\n744 | Nikolay Kostov | 26.7.2013 | Work on database model Added Telerik.OJS.Workers.Common Added Telerik.OJS.Workers.Checkers Contest questions migration and contest task migrations added (from old database to the new one) Updated WebGrease to version 1.5.2\n743 | Ivaylo Kenov | 26.7.2013 | Unit tests refactored for CanBePracticed and CanBeCompeted\n741 | Nikolay Kostov | 25.7.2013 | Fixed error \"A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies...\" when using kendo grid administraton\n739 | Nikolay Kostov | 25.7.2013 | Kendo UI styles and javascripts updated to official version Q2 2013 (2013.2.716)\n738 | Nikolay Kostov | 25.7.2013 | Build error check\n737 | Nikolay Kostov | 24.7.2013 | Removed assembly signing in Kendo.Mvc.csproj to fix missing singing tool on build server\n736 | Nikolay Kostov | 24.7.2013 | Attempt to fix missing references in Kendo.Mvc project\n735 | Nikolay Kostov | 24.7.2013 | Kendo.Mvc source included in project and updated to latest stable version 2013.2.716 Contest questions implemented in model Contest password added IOrderable interface added\n734 | Nikolay Kostov | 24.7.2013 | Small UI fix in contests list\n732 | Nikolay Kostov | 24.7.2013 | Contest repository now returns only non-deleted objects by default Added contests helper to return contest url Small code refactorings\n731 | Nikolay Kostov | 23.7.2013 | Implemented contest listing by category Added navigation property to contests in ContestCategory model Added property ResultsArePubliclyVisible in contest model Contest category is now set for every contest in the OldDatabaseMigrationConfiguration Added routes for contest list and contest details Fixed AllVisibleInCategory showing deleted contests Fixed seed number in ClearDatabase method\n730 | Ivaylo Kenov | 23.7.2013 | AllVisible tests in Data Contests Repository\n729 | Ivaylo Kenov | 23.7.2013 | Unit tests for Data ContestsRepository - AllActive and AllFuture Contests has foreign key for CategoryId\n728 | Nikolay Kostov | 22.7.2013 | Administration navigation added Contest categories and hierarchy administration added Started work on contest archive page\n727 | Ivaylo Kenov | 22.7.2013 | Unit tests for News data properties - CreatedOn and ModifiedOn\n726 | Ivaylo Kenov | 22.7.2013 | Executor Security Tests documentation added\n725 | Ivaylo Kenov | 22.7.2013 | Unit tests added and separated for Contest data\n713 | Nikolay Kostov | 18.7.2013 | Added new model ContestCategory Updated jQuery to 2.0.3 KendoUI tree view with drag & drop support integrated with contest categories\n712 | Ivaylo Kenov | 18.7.2013 | Contest Data tests for validation, can be practiced, can be competed\n711 | Ivaylo Kenov | 18.7.2013 | Data tests added, ClearDatabase method\n707 | Ivaylo Kenov | 18.7.2013 | Added documentation for security tests Unit testing for new EF Mock\n706 | Nikolay Kostov | 17.7.2013 | Added contests list favicon changed Version deployed\n705 | Nikolay Kostov | 17.7.2013 | Fixed bug with ModifiedOn set on every new record Fixed bug with moving old contests to the new database Added CabBeCompeted and CanBePracticed properties in Contest model\n704 | Nikolay Kostov | 17.7.2013 | Added Telerik.OJS.Tools.OldDatabaseMigration to migrate old database data to the new one\n703 | Nikolay Kostov | 17.7.2013 | Tests fixes\n702 | Nikolay Kostov | 17.7.2013 | Extracted base test code in Telerik.OJS.Tests.Common Added project for data tests in Telerik.OJS.Data.Tests\n701 | Nikolay Kostov | 16.7.2013 | Unit tests will now use the sql server compact edition to mock real database\n700 | Nikolay Kostov | 16.7.2013 | A lot of abstractions implemented\n699 | Nikolay Kostov | 16.7.2013 | Test new build path\n698 | Nikolay Kostov | 16.7.2013 | Reverted WebGrease version to 1.3.0 Fixed broken build\n697 | Nikolay Kostov | 16.7.2013 | Moved resources to App_GlobalResources Installed WebGrease 1.5.1\n696 | Nikolay Kostov | 15.7.2013 | Enabled automatic migrations and set database initializer to MigrateDatabaseToLatestVersion\n692 | Nikolay Kostov | 11.7.2013 | Removed knockoutjs\n691 | Ivaylo Kenov | 10.7.2013 | Small fixes in naming Contest -> Contests\n690 | Ivaylo Kenov | 10.7.2013 | Contest administration added, documentation for new administration added\n689 | Ivaylo Kenov | 10.7.2013 | Small bug fixed with references\n688 | Ivaylo Kenov | 10.7.2013 | Unit tests for HomeController (visible and non-deleted contests)\n686 | Nikolay Kostov | 8.7.2013 | Using dependecy injection (Ninject) and rewrote most of the code to use it Included Moq for mocking Added 4 unit tests for HomeController Added few mock objects\n684 | Nikolay Kostov | 8.7.2013 | Added AuditInfo and DeletableEntity abstract classes to provide CreatedOn, ModifiedOn, DeletedOn and IsDeleted fields to entites Fixes in KendoGridAdministrationController\n683 | Nikolay Kostov | 8.7.2013 | Base code for each administration News administration improvements Problem with kendo culture temporally fixed\n682 | Nikolay Kostov | 8.7.2013 | Fixed bundling problem with KendoUI styles Small other fixes\n681 | Nikolay Kostov | 8.7.2013 | Try to fix broken build\n680 | Nikolay Kostov | 8.7.2013 | Few fixes in views encoding Fixed links in _Layout.cshtml Version deployed\n679 | Nikolay Kostov | 7.7.2013 | Fixed broken csproj file\n667 | Ivaylo Kenov | 5.7.2013 | Small fix in news\n666 | Ivaylo Kenov | 5.7.2013 | News controller and model added, Partial view for news on index and news page\n665 | Nikolay Kostov | 5.7.2013 | Added KendoUI Grid administration base code News administration implemented Telerik.OJS.Web MVC improvements\n664 | Nikolay Kostov | 4.7.2013 | Included KendoUI javascript, css and KendoUI MVC wrappers in Telerik.OJS.Web project\n660 | Nikolay Kostov | 4.7.2013 | Extended UserProfile table by using this approach: https://github.com/rustd/AspnetIdentitySample/blob/master/AspnetIdentitySample/Models/AppModel.cs Added \"Adminitrator\" role in database seed method Refactored OjsDbContext to use IdentityDbContext\n659 | Nikolay Kostov | 4.7.2013 | Updated all NuGet packages to latest versions Integrated new version of ASP.NET identity Updated to new ASP.NET beta2 template\n657 | Nikolay Kostov | 4.7.2013 | Deleted old and useless files Fixed encoding in _LoginPartial.cshtml\n655 | Ivaylo Kenov | 4.7.2013 | Removed some design styles which were not well done (no-color) in register and login. Added another contests for testing the visualization of the index page\n654 | Nikolay Kostov | 3.7.2013 | Database schema improved (added new fields) Index page almost ready\n653 | Nikolay Kostov | 3.7.2013 | Added two project diagrams (SystemComponents and SystemLayer) Few fixes in repository pattern files (GenericRepository and OjsData.cs)\n643 | Nikolay Kostov | 1.7.2013 | Another attempt to fix build error Included Setting.StyleCop files\n640 | Nikolay Kostov | 1.7.2013 | Added area administration\n639 | Nikolay Kostov | 30.6.2013 | Data model improvements UI improvements\n638 | Nikolay Kostov | 30.6.2013 | Fixes and improvements in accounts\n637 | Nikolay Kostov | 30.6.2013 | Moved user models in Telerik.OJS.Data.Models Enabled database migrations\n636 | Nikolay Kostov | 30.6.2013 | Work on data. Partially implemented repository pattern and unit of work.\n635 | Nikolay Kostov | 29.6.2013 | Small code changes in default MVC 5 project\n634 | Nikolay Kostov | 29.6.2013 | Reverted changes. Stable build.\n633 | Nikolay Kostov | 29.6.2013 | Reverted updates\n632 | Nikolay Kostov | 29.6.2013 | Updated all nuget packages with their latest prerelese versions\n631 | Nikolay Kostov | 29.6.2013 | Replaced Telerik.OJS.Web with new tempalte from VS 2013 (with ASP.NET MVC 5 beta) Added CheatProgram to test for security problems in the sandobxing\n629 | Nikolay Kostov | 28.6.2013 | Added deployment settings Added administration area Bootstrap design implemented\n628 | Nikolay Kostov | 28.6.2013 | Installed Twitter.Bootstrap as package and in Telerik.OJS.Web\n627 | Nikolay Kostov | 28.6.2013 | Added new project Telerik.OJS.Data.Models\n625 | Nikolay Kostov | 28.6.2013 | Added project Telerik.OJS.Web All NuGet packages updated\n624 | Nikolay Kostov | 28.6.2013 | Added few more NuGet packages\n623 | Nikolay Kostov | 28.6.2013 | Added folder structure Added NuGet packages: EF, jQuery and jQuery.Validation\n622 | Nikolay Kostov | 28.6.2013 | Added empty solution file\n621 | Nikolay Kostov | 28.6.2013 | Check-in the Lab default template\n"
  },
  {
    "path": "Documentation/Installation/sample-solution-cpp11.cpp",
    "content": "#include<iostream>\n#include<random>\n#include<unordered_map>\n#include<vector>\n#include<algorithm>\n\nvoid nptr(int x)\n{\n\tstd::cout<<\"This function shouldn't be called\\n\";\n}\nvoid nptr(char*x)\n{\n\tstd::cout<<\"This function should be called\\n\";\n\tif(x) std::cout<<\"... but something is wrong!\\n\";\n}\n\nconstexpr long long fib(int x)\n{\n\treturn x<2?1:fib(x-1)+fib(x-2);\n}\n\nint main()\n{\n\tstd::cout<<\"If the program freezes now it's bad\\n\";\n\tconst long long bigfib=fib(80);\n\tstd::cout<<\"It didn't froze\\n\";\n\tstd::cout<<bigfib<<'\\n';\n\n\tstd::mt19937 gen{std::random_device{}()};\n\n\tstd::vector<int> v;\n\tstd::cout<<\"Initialised\\n\";\n\n\tv.resize((1<<18)/sizeof(int));\n\tstd::cout<<\"Allocated\\n\";\n\n\tfor(auto &x:v) x=gen();\n\tstd::cout<<\"Filled\\n\";\n\n\tdecltype(v) v2=v;\n\tstd::cout<<\"Copied\\n\";\n\tif(v.size()==v2.size()) std::cout<<\"It's okay\\n\";\n\telse std::cout<<\"It's not okay\\n\";\n\tv.clear();\n\n\tv=std::move(v2);\n\tstd::cout<<\"Moved\\n\";\n\tif(v2.size()==0) std::cout<<\"It's okay\\n\";\n\telse std::cout<<\"It's not okay\\n\";\n\n\tv.resize(1<<12);\n\tv.shrink_to_fit();\n\tv2.shrink_to_fit();\n\n\tstd::sort(std::begin(v), std::end(v), [](int a, int b){\n\t\treturn abs(a)>abs(b);\n\t});\n\tstd::cout<<\"Sorted\\n\";\n\n\tstd::shuffle(std::begin(v), std::end(v), gen);\n\tstd::cout<<\"Shuffled\\n\";\n\n\tstd::unordered_map<int, char> um = {{1, 'a'}, {6, 'b'}, {2, 'x'}};\n\tstd::uniform_int_distribution<char> letters('a', 'z');\n\tfor(auto x:v)\n\t\tum.insert({x, letters(gen)});\n\n\tnptr(nullptr);\n\n\tstd::vector<std::vector<char>> vvc={\n\t\t{'a', 'b', 'c'},\n\t\t{'d', 'e', 'f'},\n\t\t{'g', 'h', 'i'}\n\t};\n\n\tstd::tuple<int, char, std::vector<int>> tup;\n\tint x;\n\tv.resize(42);\n\tstd::get<0>(tup) = 42;\n\tstd::tie(x, std::ignore, v) = tup;\n\tif(x == 42)\n\t\tstd::cout<<\"Perfect!\\n\";\n\telse std::cout<<\"Oh, noo! Something is wrong :(\\n\";\n\n\tauto tup2 = std::tuple_cat(tup, std::make_tuple((double)3.5), tup, std::tie(x, x));\n}\n"
  },
  {
    "path": "Documentation/Installation/sample-solution.cpp",
    "content": "#include <iostream>\nusing namespace std;\nint main()\n{\n\tstring line;\n\tcin >> line;\n\tcout << line << endl;\n\treturn 0;\n}\n"
  },
  {
    "path": "Documentation/Installation/sample-solution.cs",
    "content": "using System;\nclass Program\n{\n\tstatic void Main()\n\t{\n\t\tvar line = Console.ReadLine();\n\t\tConsole.WriteLine(line);\n\t}\n}\n"
  },
  {
    "path": "Documentation/Installation/sample-solution.js",
    "content": "function solve(lines) {\n\treturn lines[0];\n}\n"
  },
  {
    "path": "Documentation/Requirements/Gacutil/gacutil.exe.config",
    "content": "<?xml version =\"1.0\"?>\n<configuration>\n    <startup useLegacyV2RuntimeActivationPolicy=\"true\">\n        <requiredRuntime safemode=\"true\" imageVersion=\"v4.0.30319\" version=\"v4.0.30319\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Documentation/Requirements/PowerCollections/Binaries/License.txt",
    "content": "Shared Source License for Wintellect Power Collections\n\nTHE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (\"AGREEMENT\"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\n\n1. DEFINITIONS\n\n\"Contribution\" means:\n\na) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and\n\nb) in the case of each subsequent Contributor:\n\ni) changes to the Program, and\n\nii) additions to the Program; \n\nwhere such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.\n\n\"Contributor\" means any person or entity that distributes the Program.\n\n\"Licensed Patents \" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.\n\n\"Program\" means the Contributions distributed in accordance with this Agreement.\n\n\"Recipient\" means anyone who receives the Program under this Agreement, including all Contributors.\n\n2. GRANT OF RIGHTS\n\na) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.\n\nb) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.\n\nc) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.\n\nd) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.\n\n3. REQUIREMENTS\n\nA Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:\n\na) it complies with the terms and conditions of this Agreement; and\n\nb) its license agreement:\n\ni) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;\n\nii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;\n\niii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and\n\niv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. \n\nWhen the Program is made available in source code form:\n\na) it must be made available under this Agreement; and\n\nb) a copy of this Agreement must be included with each copy of the Program. \n\nContributors may not remove or alter any copyright notices contained within the Program.\n\nEach Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.\n\n4. COMMERCIAL DISTRIBUTION\n\nCommercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (\"Commercial Contributor\") hereby agrees to defend and indemnify every other Contributor (\"Indemnified Contributor\") against any losses, damages and costs (collectively \"Losses\") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.\n\nFor example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.\n\n5. NO WARRANTY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.\n\n6. DISCLAIMER OF LIABILITY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. GENERAL\n\nIf any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\n\nIf Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.\n\nAll Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.\n\nEveryone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.\n\nThis Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. "
  },
  {
    "path": "Documentation/Requirements/PowerCollections/Binaries/PowerCollections.XML",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>PowerCollections</name>\n    </assembly>\n    <members>\n        <member name=\"T:Wintellect.PowerCollections.Pair`2\">\n            <summary>\n            Stores a pair of objects within a single struct. This struct is useful to use as the\n            T of a collection, or as the TKey or TValue of a dictionary.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.firstComparer\">\n            <summary>\n            Comparers for the first and second type that are used to compare\n            values.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.First\">\n            <summary>\n            The first element of the pair.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.Second\">\n            <summary>\n            The second element of the pair.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.#ctor(`0,`1)\">\n            <summary>\n            Creates a new pair with given first and second elements.\n            </summary>\n            <param name=\"first\">The first element of the pair.</param>\n            <param name=\"second\">The second element of the pair.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.#ctor(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Creates a new pair using elements from a KeyValuePair structure. The\n            First element gets the Key, and the Second elements gets the Value.\n            </summary>\n            <param name=\"keyAndValue\">The KeyValuePair to initialize the Pair with .</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.Equals(System.Object)\">\n            <summary>\n            Determines if this pair is equal to another object. The pair is equal to another object \n            if that object is a Pair, both element types are the same, and the first and second elements\n            both compare equal using object.Equals.\n            </summary>\n            <param name=\"obj\">Object to compare for equality.</param>\n            <returns>True if the objects are equal. False if the objects are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.Equals(Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if this pair is equal to another pair. The pair is equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"other\">Pair to compare with for equality.</param>\n            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.GetHashCode\">\n            <summary>\n            Returns a hash code for the pair, suitable for use in a hash-table or other hashed collection.\n            Two pairs that compare equal (using Equals) will have the same hash code. The hash code for\n            the pair is derived by combining the hash codes for each of the two elements of the pair.\n            </summary>\n            <returns>The hash code.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.CompareTo(Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            <para> Compares this pair to another pair of the some type. The pairs are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements.</para>\n            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the pairs cannot be compared.</para>\n            </summary>\n            <param name=\"other\">The pair to compare to.</param>\n            <returns>An integer indicating how this pair compares to <paramref name=\"other\"/>. Less\n            than zero indicates this pair is less than <paramref name=\"other\"/>. Zero indicate this pair is\n            equals to <paramref name=\"other\"/>. Greater than zero indicates this pair is greater than\n            <paramref name=\"other\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond or TSecond is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.System#IComparable#CompareTo(System.Object)\">\n            <summary>\n            <para> Compares this pair to another pair of the some type. The pairs are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements.</para>\n            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the pairs cannot be compared.</para>\n            </summary>\n            <param name=\"obj\">The pair to compare to.</param>\n            <returns>An integer indicating how this pair compares to <paramref name=\"obj\"/>. Less\n            than zero indicates this pair is less than <paramref name=\"other\"/>. Zero indicate this pair is\n            equals to <paramref name=\"obj\"/>. Greater than zero indicates this pair is greater than\n            <paramref name=\"obj\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"obj\"/> is not of the correct type.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond or TSecond is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.ToString\">\n            <summary>\n            Returns a string representation of the pair. The string representation of the pair is\n            of the form:\n            <c>First: {0}, Second: {1}</c>\n            where {0} is the result of First.ToString(), and {1} is the result of Second.ToString() (or\n            \"null\" if they are null.)\n            </summary>\n            <returns> The string representation of the pair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Equality(Wintellect.PowerCollections.Pair{`0,`1},Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if two pairs are equal. Two pairs are equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First pair to compare.</param>\n            <param name=\"pair2\">Second pair to compare.</param>\n            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Inequality(Wintellect.PowerCollections.Pair{`0,`1},Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if two pairs are not equal. Two pairs are equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First pair to compare.</param>\n            <param name=\"pair2\">Second pair to compare.</param>\n            <returns>True if the pairs are not equal. False if the pairs are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Explicit(Wintellect.PowerCollections.Pair{`0,`1})~System.Collections.Generic.KeyValuePair{`0,`1}\">\n            <summary>\n            Converts a Pair to a KeyValuePair. The Key part of the KeyValuePair gets\n            the First element, and the Value part of the KeyValuePair gets the Second \n            elements.\n            </summary>\n            <param name=\"pair\">Pair to convert.</param>\n            <returns>The KeyValuePair created from <paramref name=\"pair\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.ToKeyValuePair\">\n            <summary>\n            Converts this Pair to a KeyValuePair. The Key part of the KeyValuePair gets\n            the First element, and the Value part of the KeyValuePair gets the Second \n            elements.\n            </summary>\n            <returns>The KeyValuePair created from this Pair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Explicit(System.Collections.Generic.KeyValuePair{`0,`1})~Wintellect.PowerCollections.Pair{`0,`1}\">\n            <summary>\n            Converts a KeyValuePair structure into a Pair. The\n            First element gets the Key, and the Second element gets the Value.\n            </summary>\n            <param name=\"keyAndValue\">The KeyValuePair to convert.</param>\n            <returns>The Pair created by converted the KeyValuePair into a Pair.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedDictionary`2\">\n             <summary>\n             OrderedDictionary&lt;TKey, TValue&gt; is a collection that maps keys of type TKey\n             to values of type TValue. The keys are maintained in a sorted order, and at most one value\n             is permitted for each key.\n             </summary>\n             <remarks>\n             <p>The keys are compared in one of three ways. If TKey implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare elements. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedDictionary is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) type, where N is the number of keys in the tree.</p>\n             <p><see cref=\"T:System.Collections.Generic.Dictionary`2\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the keys in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:System.Collections.Generic.Dictionary`2\"/>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2\">\n            <summary>\n            DictionaryBase is a base class that can be used to more easily implement the\n            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.\n            </summary>\n            <remarks>\n            <para>To use DictionaryBase as a base class, the derived class must override\n            Count, GetEnumerator, TryGetValue, Clear, Remove, and the indexer set accessor. </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.CollectionBase`1\">\n            <summary>\n            CollectionBase is a base class that can be used to more easily implement the\n            generic ICollection&lt;T&gt; and non-generic ICollection interfaces.\n            </summary>\n            <remarks>\n            <para>To use CollectionBase as a base class, the derived class must override\n            the Count, GetEnumerator, Add, Clear, and Remove methods. </para>\n            <para>ICollection&lt;T&gt;.Contains need not be implemented by the\n            derived class, but it should be strongly considered, because the CollectionBase implementation\n            may not be very efficient.</para>\n            </remarks>\n            <typeparam name=\"T\">The item type of the collection.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.#ctor\">\n            <summary>\n            Creates a new CollectionBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ToString\">\n            <summary>\n            Shows the string representation of the collection. The string representation contains\n            a list of the items in the collection. Contained collections (except string) are expanded\n            recursively.\n            </summary>\n            <returns>The string representation of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Add(`0)\">\n            <summary>\n            Must be overridden to allow adding items to this collection.\n            </summary>\n            <remarks><p>This method is not abstract, although derived classes should always\n            override it. It is not abstract because some derived classes may wish to reimplement\n            Add with a different return type (typically bool). In C#, this can be accomplished\n            with code like the following:</p>\n            <code>\n                public class MyCollection&lt;T&gt;: CollectionBase&lt;T&gt;, ICollection&lt;T&gt;\n                {\n                    public new bool Add(T item) {\n                        /* Add the item */\n                    }\n             \n                    void ICollection&lt;T&gt;.Add(T item) {\n                        Add(item);\n                    }\n                }\n            </code>\n            </remarks>\n            <param name=\"item\">Item to be added to the collection.</param>\n            <exception cref=\"T:System.NotImplementedException\">Always throws this exception to indicated\n            that the method must be overridden or re-implemented in the derived class.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Clear\">\n            <summary>\n            Must be overridden to allow clearing this collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Remove(`0)\">\n            <summary>\n            Must be overridden to allow removing items from this collection.\n            </summary>\n            <returns>True if <paramref name=\"item\"/> existed in the collection and\n            was removed. False if <paramref name=\"item\"/> did not exist in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Contains(`0)\">\n            <summary>\n            Determines if the collection contains a particular item. This default implementation\n            iterates all of the items in the collection via GetEnumerator, testing each item\n            against <paramref name=\"item\"/> using IComparable&lt;T&gt;.Equals or\n            Object.Equals.\n            </summary>\n            <remarks>You should strongly consider overriding this method to provide\n            a more efficient implementation, or if the default equality comparison\n            is inappropriate.</remarks>\n            <param name=\"item\">The item to check for in the collection.</param>\n            <returns>True if the collection contains <paramref name=\"item\"/>, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ToArray\">\n            <summary>\n            Creates an array of the correct size, and copies all the items in the \n            collection into the array, by calling CopyTo.\n            </summary>\n            <returns>An array containing all the elements in the collection, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this collection. The returned ICollection&lt;T&gt; provides\n            a view of the collection that prevents modifications to the collection. Use the method to provide\n            access to the collection without allowing changes. Since the returned object is just a view,\n            changes to the collection will be reflected in the view.\n            </summary>\n            <returns>An ICollection&lt;T&gt; that provides read-only access to the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Exists(System.Predicate{`0})\">\n            <summary>\n            Determines if the collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.TrueForAll(System.Predicate{`0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.CountWhere(System.Predicate{`0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.FindAll(System.Predicate{`0})\">\n            <summary>\n            Enumerates the items in the collection that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.RemoveAll(System.Predicate{`0})\">\n            <summary>\n            Removes all the items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>Returns a collection of the items that were removed, in sorted order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ForEach(System.Action{`0})\">\n            <summary>\n            Performs the specified action on each item in this collection.\n            </summary>\n            <param name=\"action\">An Action delegate which is invoked for each item in this collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration\n            contains the result of applying <paramref name=\"converter\"/> to each item in this collection, in\n            order.\n            </summary>\n            <typeparam name=\"TOutput\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in this collection.</param>\n            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name=\"converter\"/> to each item in this collection in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.GetEnumerator\">\n            <summary>\n            Must be overridden to enumerate all the members of the collection.\n            </summary>\n            <returns>A generic IEnumerator&lt;T&gt; that can be used\n            to enumerate all the items in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"index\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Provides an IEnumerator that can be used to iterate all the members of the\n            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden\n            by the derived classes to enumerate the members of the collection.\n            </summary>\n            <returns>An IEnumerator that can be used to iterate the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the collection in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.Count\">\n            <summary>\n            Must be overridden to provide the number of items in the collection.\n            </summary>\n            <value>The number of items in the collection.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly\">\n            <summary>\n            Indicates whether the collection is read-only. Always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#IsSynchronized\">\n            <summary>\n            Indicates whether the collection is synchronized.\n            </summary>\n            <value>Always returns false, indicating that the collection is not synchronized.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#SyncRoot\">\n            <summary>\n            Indicates the synchronization object for this collection.\n            </summary>\n            <value>Always returns this.</value>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new DictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Clear\">\n            <summary>\n            Clears the dictionary. This method must be overridden in the derived class.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary. \n            </summary>\n            <remarks>The default implementation of this method\n            checks to see if the key already exists using \n            ContainsKey, then calls the indexer setter if the key doesn't\n            already exist. </remarks>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found\n            in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue and returns\n            what it returns.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this dictionary. The returned IDictionary&lt;TKey,TValue&gt; provides\n            a view of the dictionary that prevents modifications to the dictionary. Use the method to provide\n            access to the dictionary without allowing changes. Since the returned object is just a view,\n            changes to the dictionary will be reflected in the view.\n            </summary>\n            <returns>An IIDictionary&lt;TKey,TValue&gt; that provides read-only access to the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Adds a key-value pair to the collection. This implementation calls the Add method\n            with the Key and Value from the item.\n            </summary>\n            <param name=\"item\">A KeyValuePair contains the Key and Value to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair, and if so, removes it. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value. If so, the key-value pair is removed.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns>True if the item was found and removed. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.CheckGenericType``1(System.String,System.Object)\">\n            <summary>\n            Check that the given parameter is of the expected generic type. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <typeparam name=\"ExpectedType\">Expected type of the parameter</typeparam>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)\">\n            <summary>\n            Adds a key-value pair to the collection. If key or value are not of the expected types, an\n            ArgumentException is thrown. If both key and value are of the expected types, the (overridden)\n            Add method is called with the key and value to add.\n            </summary>\n            <param name=\"key\">Key to add to the dictionary.</param>\n            <param name=\"value\">Value to add to the dictionary.</param>\n            <exception cref=\"T:System.ArgumentException\">key or value are not of the expected type for this dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Clear\">\n            <summary>\n            Clears this dictionary. Calls the (overridden) Clear method.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct\n            TKey for the dictionary, false is returned.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. If\n            no key in the dictionary is equal to the passed key, the \n            dictionary is unchanged. Calls the (overridden) Remove method. If key is not of the correct\n            TKey for the dictionary, the dictionary is unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <exception cref=\"T:System.ArgumentException\">key could not be converted to TKey.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Item(`0)\">\n            <summary>\n            The indexer of the dictionary. This is used to store keys and values and\n            retrieve values from the dictionary. The setter\n            accessor must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to find in the dictionary.</param>\n            <returns>The value associated with the key.</returns>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">Thrown from the get accessor if the key\n            was not found in the dictionary.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Keys\">\n            <summary>\n            Returns a collection of the keys in this dictionary. \n            </summary>\n            <value>A read-only collection of the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Values\">\n            <summary>\n            Returns a collection of the values in this dictionary. The ordering of \n            values in this collection is the same as that in the Keys collection.\n            </summary>\n            <value>A read-only collection of the values in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsFixedSize\">\n            <summary>\n            Returns whether this dictionary is fixed size. This implemented always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsReadOnly\">\n            <summary>\n            Returns if this dictionary is read-only. This implementation always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Keys\">\n            <summary>\n            Returns a collection of all the keys in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of keys.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Values\">\n            <summary>\n            Returns a collection of all the values in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of values.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Item(System.Object)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then null is returned. When setting\n            a value, the value replaces any existing value in the dictionary. If either the key or value\n            are not of the correct type for this dictionary, an ArgumentException is thrown.\n            </summary>\n            <value>The value associated with the key, or null if the key was not present.</value>\n            <exception cref=\"T:System.ArgumentException\">key could not be converted to TKey, or value could not be converted to TValue.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyCollectionBase`1\">\n            <summary>\n            ReadOnlyCollectionBase is a base class that can be used to more easily implement the\n            generic ICollection&lt;T&gt; and non-generic ICollection interfaces for a read-only collection:\n            a collection that does not allow adding or removing elements.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyCollectionBase as a base class, the derived class must override\n            the Count and GetEnumerator methods. </para>\n            <para>ICollection&lt;T&gt;.Contains need not be implemented by the\n            derived class, but it should be strongly considered, because the ReadOnlyCollectionBase implementation\n            may not be very efficient.</para>\n            </remarks>\n            <typeparam name=\"T\">The item type of the collection.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.#ctor\">\n            <summary>\n            Creates a new ReadOnlyCollectionBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ToString\">\n            <summary>\n            Shows the string representation of the collection. The string representation contains\n            a list of the items in the collection.\n            </summary>\n            <returns>The string representation of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Exists(System.Predicate{`0})\">\n            <summary>\n            Determines if the collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.TrueForAll(System.Predicate{`0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.CountWhere(System.Predicate{`0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.FindAll(System.Predicate{`0})\">\n            <summary>\n            Enumerates the items in the collection that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ForEach(System.Action{`0})\">\n            <summary>\n            Performs the specified action on each item in this collection.\n            </summary>\n            <param name=\"action\">An Action delegate which is invoked for each item in this collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration\n            contains the result of applying <paramref name=\"converter\"/> to each item in this collection, in\n            order.\n            </summary>\n            <typeparam name=\"TOutput\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in this collection.</param>\n            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name=\"converter\"/> to each item in this collection in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <param name=\"item\">Item to be added to the collection.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Clear\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Remove(`0)\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <param name=\"item\">Item to be removed from the collection.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Contains(`0)\">\n            <summary>\n            Determines if the collection contains a particular item. This default implementation\n            iterates all of the items in the collection via GetEnumerator, testing each item\n            against <paramref name=\"item\"/> using IComparable&lt;T&gt;.Equals or\n            Object.Equals.\n            </summary>\n            <remarks>You should strongly consider overriding this method to provide\n            a more efficient implementation.</remarks>\n            <param name=\"item\">The item to check for in the collection.</param>\n            <returns>True if the collection contains <paramref name=\"item\"/>, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ToArray\">\n            <summary>\n            Creates an array of the correct size, and copies all the items in the \n            collection into the array, by calling CopyTo.\n            </summary>\n            <returns>An array containing all the elements in the collection, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.GetEnumerator\">\n            <summary>\n            Must be overridden to enumerate all the members of the collection.\n            </summary>\n            <returns>A generic IEnumerator&lt;T&gt; that can be used\n            to enumerate all the items in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"index\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Provides an IEnumerator that can be used to iterate all the members of the\n            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden\n            by the derived classes to enumerate the members of the collection.\n            </summary>\n            <returns>An IEnumerator that can be used to iterate the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the collection in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Count\">\n            <summary>\n            Must be overridden to provide the number of items in the collection.\n            </summary>\n            <value>The number of items in the collection.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly\">\n            <summary>\n            Indicates whether the collection is read-only. Returns the value\n            of readOnly that was provided to the constructor.\n            </summary>\n            <value>Always true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#IsSynchronized\">\n            <summary>\n            Indicates whether the collection is synchronized.\n            </summary>\n            <value>Always returns false, indicating that the collection is not synchronized.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#SyncRoot\">\n            <summary>\n            Indicates the synchronization object for this collection.\n            </summary>\n            <value>Always returns this.</value>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.DictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper\">\n            <summary>\n            A class that wraps a IDictionaryEnumerator around an IEnumerator that\n            enumerates KeyValuePairs. This is useful in implementing IDictionary, because\n            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"enumerator\">The enumerator of KeyValuePairs that is being wrapped.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NewPair(`0,`1)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a default value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor\">\n            <summary>\n            Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;\n            or IComparable. \n            The CompareTo method of this interface will be used to compare keys in this dictionary.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedDictionary. The Compare method of the passed comparison object\n            will be used to compare keys in this dictionary.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never\n            be called, and need not be implemented.</remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;\n            or IComparable. \n            The CompareTo method of this interface will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The Compare method of the passed comparison object\n            will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never\n            be called, and need not be implemented.</remarks>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Comparison{`0})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed comparer \n            will be used to compare key-value pairs in this dictionary. Used internally  \n            from other constructors.\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"keyComparer\">An IComparer that will be used to compare keys.</param>\n            <param name=\"pairComparer\">An IComparer that will be used to compare key-value pairs.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed comparison delegate \n            will be used to compare keys in this dictionary, and the given tree is used. Used internally for Clone().\n            </summary>\n            <param name=\"keyComparer\">An IComparer that will be used to compare keys.</param>\n            <param name=\"pairComparer\">A delegate to a method that will be used to compare key-value pairs.</param>\n            <param name=\"tree\">RedBlackTree that contains the data for the dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of keys in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of keys in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the keys and values in the collection in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {\n                // process pair\n             }\n            </code></p>\n             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The keys are enumerated in sorted order.\n             Keys equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The keys are enumerated in sorted order. Keys equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. If\n            no key in the dictionary is equal to the passed key, false is returned and the \n            dictionary is unchanged.\n            </summary>\n            <remarks>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</remarks>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n            <remarks>Clearing the dictionary takes a constant amount of time, regardless of the number of keys in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.GetValueElseAdd(`0,`1@)\">\n            <summary>\n            Finds a key in the dictionary. If the dictionary already contains\n            a key equal to the passed key, then the existing value is returned via value. If the dictionary\n            doesn't contain that key, then value is associated with that key.\n            </summary>\n            <remarks><para> between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</para>\n            <para>This method takes time O(log N), where N is the number of keys in the dictionary. If a value is added, It is more efficient than\n            calling TryGetValue followed by Add, because the dictionary is not searched twice.</para></remarks>\n            <param name=\"key\">The new key. </param>\n            <param name=\"value\">The new value to associated with that key, if the key isn't present. If the key was present, \n            returns the exist value associated with that key.</param>\n            <returns>True if key was already present, false if key wasn't present (and a new value was added).</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key and value to the dictionary. If the dictionary already contains\n            a key equal to the passed key, then an ArgumentException is thrown\n            </summary>\n            <remarks>\n            <para>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</para>\n            <para>Adding an key and value takes time O(log N), where N is the number of keys in the dictionary.</para></remarks>\n            <param name=\"key\">The new key. \"null\" is a valid key value.</param>\n            <param name=\"value\">The new value to associated with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Replace(`0,`1)\">\n            <summary>\n            Changes the value associated with a given key. If the dictionary does not contain\n            a key equal to the passed key, then an ArgumentException is thrown.\n            </summary>\n            <remarks>\n            <p>Unlike adding or removing an element, changing the value associated with a key\n            can be performed while an enumeration (foreach) on the the dictionary is in progress.</p>\n            <p>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</p>\n            <p>Replace takes time O(log N), where N is the number of entries in the dictionary.</p></remarks>\n            <param name=\"key\">The new key. </param>\n            <param name=\"value\">The new value to associated with that key.</param>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">key is not present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.AddMany(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Adds multiple key-value pairs to a dictionary. If a key exists in both the current instance and dictionaryToAdd,\n            then the value is updated with the value from <paramref name=\"keysAndValues>\"/> (no exception is thrown).\n            Since IDictionary&lt;TKey,TValue&gt; inherits from IEnumerable&lt;KeyValuePair&lt;TKey,TValue&gt;&gt;, this\n            method can be used to merge one dictionary into another.\n            </summary>\n            <remarks>AddMany takes time O(M log (N+M)), where M is the size of <paramref name=\"keysAndValues>\"/>, and N is the size of\n            this dictionary.</remarks>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are added to the current dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the keys found in another collection (such as an array or List&lt;TKey&gt;). Each key in keyCollectionToRemove\n            is removed from the dictionary. Keys that are not present are ignored.\n            </summary>\n            <remarks>RemoveMany takes time O(M log N), where M is the size of keyCollectionToRemove, and N is this\n            size of this collection.</remarks>\n            <returns>The number of keys removed from the dictionary.</returns>\n            <param name=\"keyCollectionToRemove\">A collection of keys to remove from the dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed.\n            </summary>\n            <remarks>Searching the dictionary for a key takes time O(log N), where N is the number of keys in the dictionary.</remarks>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter.\n            </summary>\n            <remarks>TryGetValue takes time O(log N), where N is the number of entries in the dictionary.</remarks>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a KeyValuePair&lt;TKey,TValue&gt;.\n            The entries are enumerated in the sorted order of the keys.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the elements of the dictionary, which uses this method implicitly.</p>\n            <p>If an element is added to or deleted from the dictionary while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the entries in the dictionary takes time O(N log N), where N is the number\n            of entries in the dictionary.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Item(`0)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then an ArgumentException is thrown. When setting\n            a value, the value replaces any existing value in the dictionary.\n            </summary>\n            <remarks>The indexer takes time O(log N), where N is the number of entries in the dictionary.</remarks>\n            <value>The value associated with the key</value>\n            <exception cref=\"T:System.ArgumentException\">A value is being retrieved, and the key is not present in the dictionary.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"key\"/> is null.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Count\">\n            <summary>\n            Returns the number of keys in the dictionary.\n            </summary>\n            <remarks>The size of the dictionary is returned in constant time..</remarks>\n            <value>The number of keys in the dictionary.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedDictionary`2.View\">\n             <summary>\n             The OrderedDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values\n             inside an ordered dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made\n             to the view, the underlying dictionary changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys\n             and values in a subset of the OrderedDictionary. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {\n                // process pair\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.#ctor(Wintellect.PowerCollections.OrderedDictionary{`0,`1},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the View.\n            </summary>\n            <param name=\"myDictionary\">Associated OrderedDictionary to be viewed.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.KeyInView(`0)\">\n            <summary>\n            Determine if the given key lies within the bounds of this view.\n            </summary>\n            <param name=\"key\">Key to test.</param>\n            <returns>True if the key is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.GetEnumerator\">\n            <summary>\n            Enumerate all the keys and values in this view.\n            </summary>\n            <returns>An IEnumerator of KeyValuePairs with the keys and views in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.ContainsKey(`0)\">\n            <summary>\n            Tests if the key is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check for.</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this view contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the underlying dictionary of this view. that is equal to the passed in key. If\n            no key in the view is equal to the passed key, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Clear\">\n            <summary>\n            Removes all the keys and values within this view from the underlying OrderedDictionary.\n            </summary>\n            <example>The following removes all the keys that start with \"A\" from an OrderedDictionary.\n            <code>\n            dictionary.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Reversed\">\n            <summary>\n            Creates a new View that has the same keys and values as this, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.View.Count\">\n            <summary>\n            Number of keys in this view.\n            </summary>\n            <value>Number of keys that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.View.Item(`0)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then an ArgumentException is thrown. When setting\n            a value, the value replaces any existing value in the dictionary. When setting a value, the \n            key must be within the range of keys being viewed.\n            </summary>\n            <value>The value associated with the key.</value>\n            <exception cref=\"T:System.ArgumentException\">A value is being retrieved, and the key is not present in the dictionary, \n            or a value is being set, and the key is outside the range of keys being viewed by this View.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2\">\n            <summary>\n            ReadOnlyDictionaryBase is a base class that can be used to more easily implement the\n            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyDictionaryBase as a base class, the derived class must override\n            Count, TryGetValue, GetEnumerator. </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new DictionaryBase. This must be called from the constructor of the\n            derived class to specify whether the dictionary is read-only and the name of the\n            collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@TValue}#Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found\n            in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue and returns\n            what it returns.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. This method must be overridden \n            in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)\">\n            <summary>\n            Adds a key-value pair to the collection. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to add to the dictionary.</param>\n            <param name=\"value\">Value to add to the dictionary.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Clear\">\n            <summary>\n            Clears this dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct\n            TKey for the dictionary, false is returned.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Item(`0)\">\n            <summary>\n            The indexer of the dictionary. The set accessor throws an NotSupportedException\n            stating the dictionary is read-only.\n            </summary>\n            <remarks>The get accessor is implemented by calling TryGetValue.</remarks>\n            <param name=\"key\">Key to find in the dictionary.</param>\n            <returns>The value associated with the key.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the set accessor, indicating\n            that the dictionary is read only.</exception>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">Thrown from the get accessor if the key\n            was not found.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Keys\">\n            <summary>\n            Returns a collection of the keys in this dictionary. \n            </summary>\n            <value>A read-only collection of the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Values\">\n            <summary>\n            Returns a collection of the values in this dictionary. The ordering of \n            values in this collection is the same as that in the Keys collection.\n            </summary>\n            <value>A read-only collection of the values in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsFixedSize\">\n            <summary>\n            Returns whether this dictionary is fixed size. \n            </summary>\n            <value>Always returns true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsReadOnly\">\n            <summary>\n            Returns if this dictionary is read-only. \n            </summary>\n            <value>Always returns true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Keys\">\n            <summary>\n            Returns a collection of all the keys in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of keys.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Values\">\n            <summary>\n            Returns a collection of all the values in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of values.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Item(System.Object)\">\n            <summary>\n            Gets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then null is returned. If the key is not of the correct type \n            for this dictionary, null is returned.\n            </summary>\n            <value>The value associated with the key, or null if the key was not present.</value>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the set accessor, indicating\n            that the dictionary is read only.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.ReadOnlyDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper\">\n            <summary>\n            A class that wraps a IDictionaryEnumerator around an IEnumerator that\n            enumerates KeyValuePairs. This is useful in implementing IDictionary, because\n            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"enumerator\">The enumerator of KeyValuePairs that is being wrapped.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1\">\n             <summary>\n             OrderedBag&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a sorted order. Unlike a OrderedSet, duplicate items (items that\n             compare equal to each other) are allows in an OrderedBag.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedBag is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) + M time, where N is the number of keys in the tree, and M is the current number\n             of copies of the element being handled.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.Bag`1\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the keys in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.Bag`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor\">\n             <summary>\n             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this bag.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedBag. The Compare method of the passed comparison object\n            will be used to compare items in this bag.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this bag. The bag is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.\n            The bag is initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedBag. The Compare method of the passed comparison object\n            will be used to compare items in this bag. The bag is\n            initialized with all the items in the given collection.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0},Wintellect.PowerCollections.RedBlackTree{`0})\">\n            <summary>\n            Creates a new OrderedBag given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"comparer\">Comparer for the bag.</param>\n            <param name=\"tree\">Data for the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this bag. A new bag is created with a clone of\n            each element of this bag, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>\n            <returns>The cloned bag.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.NumberOfCopies(`0)\">\n            <summary>\n            Returns the number of copies of <paramref name=\"item\"/> in the bag. More precisely, returns\n            the number of items in the bag that compare equal to <paramref name=\"item\"/>.\n            </summary>\n            <remarks>NumberOfCopies() takes time O(log N + M), where N is the total number of items in the\n            bag, and M is the number of copies of <paramref name=\"item\"/> in the bag.</remarks>\n            <param name=\"item\">The item to search for in the bag.</param>\n            <returns>The number of items in the bag that compare equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the bag. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the bag while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the bag takes time O(N), where N is the number\n            of items in the bag.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the OrderedBag.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Contains(`0)\">\n            <summary>\n            Determines if this bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed.\n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>. False if the bag does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetEqualItems(`0)\">\n            <summary>\n            <para>Enumerates all of the items in this bag that are equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the bag was created. The bag\n            is not changed.</para>\n            <para>If the bag does contain an item equal to <paramref name=\"item\"/>, then the enumeration contains\n            no items.</para>\n            </summary>\n            <remarks>Enumeration the items in the bag equal to <paramref name=\"item\"/> takes time O(log N + M), where N \n            is the total number of items in the bag, and M is the number of items equal to <paramref name=\"item\"/>.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in the bag equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.DistinctItems\">\n            <summary>\n            Enumerates all the items in the bag, but enumerates equal items\n            just once, even if they occur multiple times in the bag.\n            </summary>\n            <remarks>If the bag is changed while items are being enumerated, the\n            enumeration will terminate with an InvalidOperationException.</remarks>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.LastIndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. If multiple\n            equal items exist, the largest index of the equal items is returned.\n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the last item in the sorted bag equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. If multiple\n            equal items exist, the smallest index of the equal items is returned.\n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the first item in the sorted bag equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Add(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case, the new item is placed after all equal items already present in the bag.\n            </summary>\n            <remarks>\n            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the bag. \n            </summary>\n            <remarks>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the bag.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Remove(`0)\">\n            <summary>\n            Searches the bag for one item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. If more than one item\n            equal to <paramref name=\"item\"/>, the item that was last inserted is removed.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveAllCopies(`0)\">\n            <summary>\n            Searches the bag for all items equal to <paramref name=\"item\"/>, and \n            removes all of them from the bag. If not found, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is\n            the number of items equal to <paramref name=\"item\"/>.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>The number of copies of <paramref name=\"item\"/> that were found and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the bag. Items not\n            present in the bag are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the bag.</param>\n            <returns>The number of items removed from the bag.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Clear\">\n            <summary>\n            Removes all items from the bag.\n            </summary>\n            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CheckEmpty\">\n            <summary>\n            If the collection is empty, throw an invalid operation exception.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetFirst\">\n            <summary>\n            Returns the first item in the bag: the item\n            that would appear first if the bag was enumerated. This is also\n            the smallest item in the bag.\n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The first item in the bag. If more than one item\n            is smallest, the first one added is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetLast\">\n            <summary>\n            Returns the last item in the bag: the item\n            that would appear last if the bag was enumerated. This is also the largest\n            item in the bag.\n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The last item in the bag. If more than one item\n            is largest, the last one added is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveFirst\">\n            <summary>\n            Removes the first item in the bag. This is also the smallest\n            item in the bag.\n            </summary>\n            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The item that was removed, which was the smallest item in the bag. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveLast\">\n            <summary>\n            Removes the last item in the bag. This is also the largest item in the bag.\n            </summary>\n            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The item that was removed, which was the largest item in the bag. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CheckConsistentComparison(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Check that this bag and another bag were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherBag\">Other bag to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherBag and this bag don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsSupersetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a superset of another bag. Neither bag is modified.\n            This bag is a superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsProperSupersetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a proper superset of another bag. Neither bag is modified.\n            This bag is a proper superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times. Additional, this bag must have strictly more items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsSubsetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherBag\"/>, and N is the size of the this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsProperSubsetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a proper subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times. Additional, this bag must have strictly fewer items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref nameb=\"otherBag\"/>, and N is the size of the this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsDisjointFrom(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is disjoint from another bag. Two bags are disjoint\n            if no item from one set is equal to any item in the other bag.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to check disjointness with.</param>\n            <returns>True if the two bags are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsEqualTo(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is equal to another bag. This bag is equal to\n            <paramref name=\"otherBag\"/> if they contain the same items, each the\n            same number of times.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to</param>\n            <returns>True if this bag is equal to <paramref name=\"otherBag\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.UnionWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives\n            the union of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Union(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is \n            created with the union of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <returns>The union of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SumWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. The sum of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives\n            the sum of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Sum(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. he sum of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is \n            created with the sum of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <returns>The sum of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IntersectionWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives\n            the intersection of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Intersection(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. A new bag is \n            created with the intersection of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <returns>The intersection of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.DifferenceWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives\n            the difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Difference(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is \n            created with the difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <returns>The difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SymmetricDifferenceWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). This bag receives\n            the symmetric difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SymmetricDifference(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). A new bag is \n            created with the symmetric difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <returns>The symmetric difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.AsList\">\n            <summary>\n            Get a read-only list view of the items in this ordered bag. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedBag.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this OrderedBag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the items in the bag in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.Reversed()) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedBag.View of items in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The items are enumerated in sorted order.\n             Items equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.Range(from, true, to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.RangeFrom(from, true)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.RangeTo(to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare items in this bag. \n            </summary>\n            <value>If the bag was created using a comparer, that comparer is returned. If the bag was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Count\">\n            <summary>\n            Returns the number of items in the bag.\n            </summary>\n            <remarks>The size of the bag is returned in constant time.</remarks>\n            <value>The number of items in the bag.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1.ListView\">\n            <summary>\n            The nested class that provides a read-only list view\n            of all or part of the collection.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyListBase`1\">\n            <summary>\n            ReadOnlyListBase is an abstract class that can be used as a base class for a read-only collection that needs \n            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs\n            to override the Count property and the get part of the indexer. The implementation\n            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.#ctor\">\n            <summary>\n            Creates a new ReadOnlyListBase.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Contains(`0)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"item\"/>.\n            The implementation simply checks whether IndexOf(item) returns a non-negative value.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the list contains an item that compares equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[])\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at index 0.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies a range of elements from the list to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"index\">The starting index in the source list of the range to copy.</param>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n            <param name=\"count\">The number of items to copy.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Find(System.Predicate{`0})\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the first item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLast(System.Predicate{`0})\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the last item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0)\">\n            <summary>\n            Finds the index of the first item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the first item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0)\">\n            <summary>\n            Finds the index of the last item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the last item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. \n            </summary>\n            <remarks>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.Reverse(deque.Range(3, 6))</code>\n            will return the reverse opf the 6 items beginning at index 3.</remarks>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-part of this list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of the list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index.  This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Add(System.Object)\">\n            <summary>\n            Adds an item to the end of the list. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"value\">The item to add to the list.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Clear\">\n            <summary>\n            Removes all the items from the list, resulting in an empty list. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Contains(System.Object)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"value\"/>.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IndexOf(System.Object)\">\n            <summary>\n            Find the first occurrence of an item equal to <paramref name=\"value\"/>\n            in the list, and returns the index of that item.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n            <returns>The index of <paramref name=\"value\"/>, or -1 if no item in the \n            list compares equal to <paramref name=\"value\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)\">\n            <summary>\n            Insert a new item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"value\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Remove(System.Object)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"value\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.  This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to remove from the list.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.Count\">\n            <summary>\n            The property must be overridden by the derived class to return the number of \n            items in the list.\n            </summary>\n            <value>The number of items in the list.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.Item(System.Int32)\">\n            <summary>\n            The get part of the indexer must be overridden by the derived class to get \n            values of the list at a particular index.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Returns whether the list is a fixed size. This implementation always returns true.\n            </summary>\n            <value>Alway true, indicating that the list is fixed size.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsReadOnly\">\n            <summary>\n            Returns whether the list is read only. This implementation always returns true.\n            </summary>\n            <value>Alway true, indicating that the list is read-only.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Item(System.Int32)\">\n            <summary>\n            Gets or sets the value at a particular index in the list.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <value>The item at the given index.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the setter, indicating that the list\n            is read-only.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.ListView.#ctor(Wintellect.PowerCollections.OrderedBag{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Create a new list view wrapped the given set.\n            </summary>\n            <param name=\"myBag\">The ordered bag to wrap.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1.View\">\n             <summary>\n             The OrderedBag&lt;T&gt;.View class is used to look at a subset of the items\n             inside an ordered bag. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying bag changes, the view changes in sync. If a change is made\n             to the view, the underlying bag changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items \n             in a subset of the OrderedBag. For example:</p>\n            <code>\n             foreach(T item in bag.Range(from, to)) {\n                // process item\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.#ctor(Wintellect.PowerCollections.OrderedBag{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the view.\n            </summary>\n            <param name=\"myBag\">OrderedBag being viewed</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.ItemInView(`0)\">\n            <summary>\n            Determine if the given item lies within the bounds of this view.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>True if the item is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetEnumerator\">\n            <summary>\n            Enumerate all the items in this view.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Clear\">\n            <summary>\n            Removes all the items within this view from the underlying bag.\n            </summary>\n            <example>The following removes all the items that start with \"A\" from an OrderedBag.\n            <code>\n            bag.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Add(`0)\">\n            <summary>\n            Adds a new item to the bag underlying this View. If the bag already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n            <returns>True if the bag already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Remove(`0)\">\n            <summary>\n            Searches the underlying bag for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. If the item is outside\n            the range of this view, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag, or\n            was outside the range of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Contains(`0)\">\n            <summary>\n            Determines if this view of the bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed. If \n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>, and <paramref name=\"item\"/> is within\n            the range of this view. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.IndexOf(`0)\">\n            <summary>\n            Get the first index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the first item in the view equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.LastIndexOf(`0)\">\n            <summary>\n            Get the last index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the last item in the view equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.AsList\">\n            <summary>\n            Get a read-only list view of the items in this view. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Reversed\">\n            <summary>\n            Creates a new View that has the same items as this view, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view, with the same upper \n            and lower bounds.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetFirst\">\n            <summary>\n            Returns the first item in this view: the item\n            that would appear first if the view was enumerated. \n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The first item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetLast\">\n            <summary>\n            Returns the last item in the view: the item\n            that would appear last if the view was enumerated. \n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The last item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.View.Count\">\n            <summary>\n            Number of items in this view.\n            </summary>\n            <value>Number of items that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.View.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Triple`3\">\n            <summary>\n            Stores a triple of objects within a single struct. This struct is useful to use as the\n            T of a collection, or as the TKey or TValue of a dictionary.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.firstComparer\">\n            <summary>\n            Comparers for the first and second type that are used to compare\n            values.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.First\">\n            <summary>\n            The first element of the triple.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.Second\">\n            <summary>\n            The second element of the triple.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.Third\">\n            <summary>\n            The thrid element of the triple.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.#ctor(`0,`1,`2)\">\n            <summary>\n            Creates a new triple with given elements.\n            </summary>\n            <param name=\"first\">The first element of the triple.</param>\n            <param name=\"second\">The second element of the triple.</param>\n            <param name=\"third\">The third element of the triple.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.Equals(System.Object)\">\n            <summary>\n            Determines if this triple is equal to another object. The triple is equal to another object \n            if that object is a Triple, all element types are the same, and the all three elements\n            compare equal using object.Equals.\n            </summary>\n            <param name=\"obj\">Object to compare for equality.</param>\n            <returns>True if the objects are equal. False if the objects are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.Equals(Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if this triple is equal to another triple. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"other\">Triple to compare with for equality.</param>\n            <returns>True if the triples are equal. False if the triples are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.GetHashCode\">\n            <summary>\n            Returns a hash code for the triple, suitable for use in a hash-table or other hashed collection.\n            Two triples that compare equal (using Equals) will have the same hash code. The hash code for\n            the triple is derived by combining the hash codes for each of the two elements of the triple.\n            </summary>\n            <returns>The hash code.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.CompareTo(Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            <para> Compares this triple to another triple of the some type. The triples are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements. If their second elements are also equal, then they\n            are compared by their third elements.</para>\n            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the triples cannot be compared.</para>\n            </summary>\n            <param name=\"other\">The triple to compare to.</param>\n            <returns>An integer indicating how this triple compares to <paramref name=\"other\"/>. Less\n            than zero indicates this triple is less than <paramref name=\"other\"/>. Zero indicate this triple is\n            equals to <paramref name=\"other\"/>. Greater than zero indicates this triple is greater than\n            <paramref name=\"other\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond, TSecond, or TThird is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.System#IComparable#CompareTo(System.Object)\">\n            <summary>\n            <para> Compares this triple to another triple of the some type. The triples are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements. If their second elements are also equal, then they\n            are compared by their third elements.</para>\n            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the triples cannot be compared.</para>\n            </summary>\n            <param name=\"obj\">The triple to compare to.</param>\n            <returns>An integer indicating how this triple compares to <paramref name=\"obj\"/>. Less\n            than zero indicates this triple is less than <paramref name=\"obj\"/>. Zero indicate this triple is\n            equals to <paramref name=\"obj\"/>. Greater than zero indicates this triple is greater than\n            <paramref name=\"obj\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"obj\"/> is not of the correct type.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond, TSecond, or TThird is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.ToString\">\n            <summary>\n            Returns a string representation of the triple. The string representation of the triple is\n            of the form:\n            <c>First: {0}, Second: {1}, Third: {2}</c>\n            where {0} is the result of First.ToString(), {1} is the result of Second.ToString(), and\n            {2} is the result of Third.ToString() (or \"null\" if they are null.)\n            </summary>\n            <returns> The string representation of the triple.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.op_Equality(Wintellect.PowerCollections.Triple{`0,`1,`2},Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if two triples are equal. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First triple to compare.</param>\n            <param name=\"pair2\">Second triple to compare.</param>\n            <returns>True if the triples are equal. False if the triples are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.op_Inequality(Wintellect.PowerCollections.Triple{`0,`1,`2},Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if two triples are not equal. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First triple to compare.</param>\n            <param name=\"pair2\">Second triple to compare.</param>\n            <returns>True if the triples are not equal. False if the triples are equal.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Strings\">\n            <summary>\n            A holder class for localizable strings that are used. Currently, these are not loaded from resources, but \n            just coded into this class. To make this library localizable, simply change this class to load the\n            given strings from resources.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2\">\n             <summary>\n             <para>The MultiDictionary class that associates values with a key. Unlike an Dictionary,\n             each key can have multiple values associated with it. When indexing an MultiDictionary, instead\n             of a single value associated with a key, you retrieve an enumeration of values.</para>\n             <para>When constructed, you can chose to allow the same value to be associated with a key multiple\n             times, or only one time. </para>\n             </summary>\n             <typeparam name=\"TKey\">The type of the keys.</typeparam>\n             <typeparam name=\"TValue\">The of values associated with the keys.</typeparam>\n            <seealso cref=\"T:System.Collections.Generic.Dictionary`2\"/>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2\"/>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2\">\n            <summary>\n            MultiDictionaryBase is a base class that can be used to more easily implement a class\n            that associates multiple values to a single key. The class implements the generic\n            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface.\n            </summary>\n            <remarks>\n            <para>To use MultiDictionaryBase as a base class, the derived class must override\n            Count, Clear, Add, Remove(TKey), Remove(TKey,TValue), Contains(TKey,TValue), \n            EnumerateKeys, and TryEnumerateValuesForKey. </para>\n            <para>It may wish consider overriding CountValues, CountAllValues, ContainsKey,\n            and EqualValues, but these are not required.\n            </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new MultiDictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Clear\">\n            <summary>\n            Clears the dictionary. This method must be overridden in the derived class.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. This method must be overridden by a derived\n            class.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. This method must be overridden\n            by the derived class. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Adds a key-value pair to the collection. The value part of the pair must be a collection\n            of values to associate with the key. If values are already associated with the given\n            key, the new values are added to the ones associated with that key.\n            </summary>\n            <param name=\"item\">A KeyValuePair contains the Key and Value collection to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})\">\n            <summary>\n            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the \n            key is already present, and ArgumentException is thrown. Otherwise, a\n            new key is added, and new values are associated with that key.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"values\">Values to associate with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">The key is already present in the dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.AddMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            <para>Adds new values to be associated with a key. If duplicate values are permitted, this\n            method always adds new key-value pairs to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to one of <paramref name=\"values\"/> associated with it, then that value is replaced,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"values\">A collection of values to associate with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary.  This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(`0,`1)\">\n            <summary>\n            Removes a key-value pair from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <param name=\"value\">Associated value to remove from the dictionary.</param>\n            <returns>True if the key-value pair was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Removes a set of values from a given key. If all values associated with a key are\n            removed, then the key is removed also.\n            </summary>\n            <param name=\"pair\">A KeyValuePair contains a key and a set of values to remove from that key.</param>\n            <returns>True if at least one values was found and removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.RemoveMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            Removes a collection of values from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove values from.</param>\n            <param name=\"values\">A collection of values to remove.</param>\n            <returns>The number of values that were present and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Remove all of the keys (and any associated values) in a collection\n            of keys. If a key is not present in the dictionary, nothing happens.\n            </summary>\n            <param name=\"keyCollection\">A collection of key values to remove.</param>\n            <returns>The number of keys from the collection that were present and removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryEnumerateValuesForKey.\n            It may be appropriate to override this method to \n            provide a more efficient implementation.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Contains(`0,`1)\">\n            <summary>\n            Determines if this dictionary contains a key-value pair equal to <paramref name=\"key\"/> and \n            <paramref name=\"value\"/>. The dictionary is not changed. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">The value to search for.</param>\n            <returns>True if the dictionary has associated <paramref name=\"value\"/> with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Determines if this dictionary contains the given key and all of the values associated with that key..\n            </summary>\n            <param name=\"pair\">A key and collection of values to search for.</param>\n            <returns>True if the dictionary has associated all of the values in <paramref name=\"pair\"/>.Value with <paramref name=\"pair\"/>.Key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.EqualValues(`1,`1)\">\n            <summary>\n            If the derived class does not use the default comparison for values, this\n            methods should be overridden to compare two values for equality. This is\n            used for the correct implementation of ICollection.Contains on the Values\n            and KeyValuePairs collections.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.CountValues(`0)\">\n            <summary>\n            Gets a count of the number of values associated with a key. The\n            default implementation is slow; it enumerators all of the values\n            (using TryEnumerateValuesForKey) to count them. A derived class\n            may be able to supply a more efficient implementation.\n            </summary>\n            <param name=\"key\">The key to count values for.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. This default implementation\n            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.\n            A derived class may be able to supply a more efficient implementation.\n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Replace(`0,`1)\">\n            <summary>\n            Replaces all values associated with <paramref name=\"key\"/> with the single value <paramref name=\"value\"/>.\n            </summary>\n            <remarks>This implementation simply calls Remove, followed by Add.</remarks>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The new values to be associated with <paramref name=\"key\"/>.</param>\n            <returns>Returns true if some values were removed. Returns false if <paramref name=\"key\"/> was not\n            present in the dictionary before Replace was called.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ReplaceMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            Replaces all values associated with <paramref name=\"key\"/> with a new collection\n            of values. If the collection does not permit duplicate values, and <paramref name=\"values\"/> has duplicate\n            items, then only the last of duplicates is added.\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"values\">The new values to be associated with <paramref name=\"key\"/>.</param>\n            <returns>Returns true if some values were removed. Returns false if <paramref name=\"key\"/> was not\n            present in the dictionary before Replace was called.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.GetEnumerator\">\n            <summary>\n            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.\n            </summary>\n            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Count\">\n            <summary>\n            Gets the number of keys in the dictionary. This property must be overridden\n            in the derived class.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Keys\">\n            <summary>\n            Gets a read-only collection all the keys in this dictionary.\n            </summary>\n            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Values\">\n            <summary>\n            Gets a read-only collection of all the values in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values\">\n            <summary>\n            Gets a read-only collection of all the value collections in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Item(`0)\">\n            <summary>\n            Returns a collection of all of the values in the dictionary associated with <paramref name=\"key\"/>,\n            or changes the set of values associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, an ICollection enumerating no\n            values is returned. The returned collection of values is read-write, and can be used to \n            modify the collection of values associated with the key.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name=\"key\"/>.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)\">\n            <summary>\n            Gets a collection of all the values in the dictionary associated with <paramref name=\"key\"/>,\n            or changes the set of values associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, a KeyNotFound exception is thrown.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name=\"key\"/>.</value>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">The given key is not present in the dictionary.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection\">\n            <summary>\n            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection\n            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,\n            etc. values from the multi-dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.#ctor(Wintellect.PowerCollections.MultiDictionaryBase{`0,`1},`0)\">\n            <summary>\n            Constructor. Initializes this collection.\n            </summary>\n            <param name=\"myDictionary\">Dictionary we're using.</param>\n            <param name=\"key\">The key we're looking at.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Clear\">\n            <summary>\n            Remove the key and all values associated with it.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Add(`1)\">\n            <summary>\n            Add a new values to this key.\n            </summary>\n            <param name=\"item\">New values to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Remove(`1)\">\n            <summary>\n            Remove a value currently associated with key.\n            </summary>\n            <param name=\"item\">Value to remove.</param>\n            <returns>True if item was assocaited with key, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.NoValues\">\n            <summary>\n            A simple function that returns an IEnumerator&lt;TValue&gt; that\n            doesn't yield any values. A helper.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator\">\n            <summary>\n            Enumerate all the values associated with key.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)\">\n            <summary>\n            Determines if the given values is associated with key.\n            </summary>\n            <param name=\"item\">Value to check for.</param>\n            <returns>True if value is associated with key, false otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Count\">\n            <summary>\n            Get the number of values associated with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.MultiDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.EnumerableValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;ICollection&lt;TValue&gt;&gt; and ICollection for the\n            Values collection on IDictionary. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean)\">\n            <summary>\n            Create a new MultiDictionary. The default ordering of keys and values are used. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation\n            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be\n            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Create a new MultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyEqualityComparer\">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1})\">\n            <summary>\n            Create a new MultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyEqualityComparer\">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueEqualityComparer\">An IEqualityComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1},System.Collections.Generic.IEqualityComparer{Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues},Wintellect.PowerCollections.Hash{Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues})\">\n            <summary>\n            Create a new MultiDictionary. Private constructor, for use by Clone().\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Add(`0,`1)\">\n            <summary>\n            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this\n            method always adds a new key-value pair to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to <paramref name=\"value\"/> associated with it, then that value is replaced with <paramref name=\"value\"/>,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The value to associated with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Remove(`0,`1)\">\n            <summary>\n            Removes a given value from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove a value from.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if <paramref name=\"value\"/> was associated with <paramref name=\"key\"/> (and was\n            therefore removed). False if <paramref name=\"value\"/> was not associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Remove(`0)\">\n            <summary>\n            Removes a key and all associated values from the dictionary. If the\n            key is not present in the dictionary, it is unchanged and false is returned.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was present and was removed. Returns \n            false if the key was not present.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EqualValues(`1,`1)\">\n            <summary>\n            Determine if two values are equal.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Checks to see if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>\n            in the dictionary.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <param name=\"value\">The value to check.</param>\n            <returns>True if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Checks to see if the key is present in the dictionary and has\n            at least one value associated with it.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <returns>True if <paramref name=\"key\"/> is present and has at least\n            one value associated with it. Returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. \n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the dictionary that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EnumerateValues(Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)\">\n            <summary>\n             Enumerate the values in the a KeyAndValues structure. Can't return\n            the array directly because:\n              a) The array might be larger than the count.\n              b) We can't allow clients to down-cast to the array and modify it.\n              c) We have to abort enumeration if the hash changes.\n            </summary>\n            <param name=\"keyAndValues\">Item with the values to enumerate..</param>\n            <returns>An enumerable that enumerates the items in the KeyAndValues structure.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in the dictionary, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.KeyComparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for TKey (EqualityComparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.ValueComparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare values in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for TValue (EqualityComparer&lt;TValue&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.Count\">\n            <summary>\n            Gets the number of key-value pairs in the dictionary. Each value associated\n            with a given key is counted. If duplicate values are permitted, each duplicate\n            value is included in the count.\n            </summary>\n            <value>The number of key-value pairs in the dictionary.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues\">\n            <summary>\n            A structure to hold the key and the values associated with the key.\n            The number of values must always be 1 or greater in a version that is stored, but \n            can be zero in a dummy version used only for lookups.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Key\">\n            <summary>\n            The key.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Count\">\n            <summary>\n            The number of values. Always at least 1 except in a dummy version for lookups.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Values\">\n            <summary>\n            An array of values. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.#ctor(`0)\">\n            <summary>\n            Create a dummy KeyAndValues with just the key, for lookups.\n            </summary>\n            <param name=\"key\">The key to use.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Copy(Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)\">\n            <summary>\n            Make a copy of a KeyAndValues, copying the array.\n            </summary>\n            <param name=\"x\">KeyAndValues to copy.</param>\n            <returns>A copied version.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValuesEqualityComparer\">\n            <summary>\n            This class implements IEqualityComparer for KeysAndValues, allowing them to be\n            compared by their keys. An IEqualityComparer on keys is required.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ListBase`1\">\n            <summary>\n            ListBase is an abstract class that can be used as a base class for a read-write collection that needs \n            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs\n            to override the following methods: Count, Clear, Insert, RemoveAt, and the indexer. The implementation\n            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.#ctor\">\n            <summary>\n            Creates a new ListBase.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Clear\">\n            <summary>\n            This method must be overridden by the derived class to empty the list\n            of all items.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Insert(System.Int32,`0)\">\n            <summary>\n            This method must be overridden by the derived class to insert a new\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.RemoveAt(System.Int32)\">\n            <summary>\n            This method must be overridden by the derived class to remove the\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on.\n            </summary>\n            <remarks>The enumerator does not check for changes made\n            to the structure of the list. Thus, changes to the list during\n            enumeration may cause incorrect enumeration or out of range\n            exceptions. Consider overriding this method and adding checks\n            for structural changes.</remarks>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Contains(`0)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"item\"/>.\n            The implementation simply checks whether IndexOf(item) returns a non-negative value.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the list contains an item that compares equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Add(`0)\">\n            <summary>\n            Adds an item to the end of the list. This method is equivalent to calling: \n            <code>Insert(Count, item)</code>\n            </summary>\n            <param name=\"item\">The item to add to the list.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Remove(`0)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"item\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to remove from the list.</param>\n            <returns>True if an item was found and removed that compared equal to\n            <paramref name=\"item\"/>. False if no such item was in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(`0[])\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at index 0.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies a range of elements from the list to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"index\">The starting index in the source list of the range to copy.</param>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n            <param name=\"count\">The number of items to copy.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this list. The returned IList&lt;T&gt; provides\n            a view of the list that prevents modifications to the list. Use the method to provide\n            access to the list without allowing changes. Since the returned object is just a view,\n            changes to the list will be reflected in the view.\n            </summary>\n            <returns>An IList&lt;T&gt; that provides read-only access to the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Find(System.Predicate{`0})\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the first item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLast(System.Predicate{`0})\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the last item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0)\">\n            <summary>\n            Finds the index of the first item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the first item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0)\">\n            <summary>\n            Finds the index of the last item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the last item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.ReverseInPlace(deque.Range(3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-part of this list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of the list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.ConvertToItemType(System.String,System.Object)\">\n            <summary>\n            Convert the given parameter to T. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Add(System.Object)\">\n            <summary>\n            Adds an item to the end of the list. This method is equivalent to calling: \n            <code>Insert(Count, item)</code>\n            </summary>\n            <param name=\"value\">The item to add to the list.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Clear\">\n            <summary>\n            Removes all the items from the list, resulting in an empty list.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Contains(System.Object)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"value\"/>.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IndexOf(System.Object)\">\n            <summary>\n            Find the first occurrence of an item equal to <paramref name=\"value\"/>\n            in the list, and returns the index of that item.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n            <returns>The index of <paramref name=\"value\"/>, or -1 if no item in the \n            list compares equal to <paramref name=\"value\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)\">\n            <summary>\n            Insert a new\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"value\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Remove(System.Object)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"value\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to remove from the list.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.Count\">\n            <summary>\n            The property must be overridden by the derived class to return the number of \n            items in the list.\n            </summary>\n            <value>The number of items in the list.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.Item(System.Int32)\">\n            <summary>\n            The indexer must be overridden by the derived class to get and set\n            values of the list at a particular index.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Returns whether the list is a fixed size. This implementation always returns false.\n            </summary>\n            <value>Alway false, indicating that the list is not fixed size.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IsReadOnly\">\n            <summary>\n            Returns whether the list is read only. This implementation returns the value\n            from ICollection&lt;T&gt;.IsReadOnly, which is by default, false.\n            </summary>\n            <value>By default, false, indicating that the list is not read only.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Item(System.Int32)\">\n            <summary>\n            Gets or sets the\n            value at a particular index in the list.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <value>The item at the given index.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Set`1\">\n             <summary>\n             Set&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a haphazard, unpredictable order, and duplicate items are not allowed.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; \n             then the Equals method of that interface will be used to compare items, otherwise the Equals\n             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed\n             to the constructor to use to compare items.</p>\n             <p>Set is implemented as a hash table. Inserting, deleting, and looking up an\n             an element all are done in approximately constant time, regardless of the number of items in the Set.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.OrderedSet`1\"/> is similar, but uses comparison instead of hashing, and does maintains\n             the items in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedSet`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor\">\n             <summary>\n             Creates a new Set. The Equals method and GetHashCode method on T\n             will be used to compare items for equality.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Set. The Equals and GetHashCode method of the passed comparer object\n            will be used to compare items in this set.\n            </summary>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new Set. The Equals method and GetHashCode method on T\n             will be used to compare items for equality.\n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the Set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Set. The Equals and GetHashCode method of the passed comparer object\n            will be used to compare items in this set. The set is\n            initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the Set.</param>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0},Wintellect.PowerCollections.Hash{`0})\">\n            <summary>\n            Creates a new Set given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"equalityComparer\">EqualityComparer for the set.</param>\n            <param name=\"hash\">Data for the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this set. A new set is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the set takes time O(N), where N is the number of items in the set.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the set. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the set while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumerating all the items in the set takes time O(N), where N is the number\n            of items in the set.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the Set.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Contains(`0)\">\n            <summary>\n            Determines if this set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed.\n            </summary>\n            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.TryGetItem(`0,`0@)\">\n            <summary>\n            <para>Determines if this set contains an item equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the set was created. The set\n            is not changed.</para>\n            <para>If the set does contain an item equal to <paramref name=\"item\"/>, then the item from the set is returned.</para>\n            </summary>\n            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>\n            <example>\n            In the following example, the set contains strings which are compared in a case-insensitive manner. \n            <code>\n            Set&lt;string&gt; set = new Set&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);\n            set.Add(\"HELLO\");\n            string s;\n            bool b = set.TryGetItem(\"Hello\", out s);   // b receives true, s receives \"HELLO\".\n            </code>\n            </example>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"foundItem\">Returns the item from the set that was equal to <paramref name=\"item\"/>.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the set. If the set already contains an item equal to\n            one of the items in <paramref name=\"collection\"/>, that item will be replaced.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Remove(`0)\">\n            <summary>\n            Searches the set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes approximately constant time, regardless of the size of the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the set. \n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the set.</param>\n            <returns>The number of items removed from the set.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Clear\">\n            <summary>\n            Removes all items from the set.\n            </summary>\n            <remarks>Clearing the set takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.CheckConsistentComparison(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Check that this set and another set were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherSet\">Other set to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherSet and this set don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsSupersetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a superset of another set. Neither set is modified.\n            This set is a superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            <remarks>IsSupersetOf is computed in time O(M), where M is the size of the \n            <paramref name=\"otherSet\"/>.</remarks>\n            </summary>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsProperSupersetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a proper superset of another set. Neither set is modified.\n            This set is a proper superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            Additionally, this set must have strictly more items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(M), where M is the size of\n            <paramref name=\"otherSet\"/>.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsSubsetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsProperSubsetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a proper subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>. Additionally, this set must have strictly \n            fewer items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsEqualTo(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is equal to another set. This set is equal to\n            <paramref name=\"otherSet\"/> if they contain the same items.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this set.</remarks>\n            <param name=\"otherSet\">Set to compare to</param>\n            <returns>True if this set is equal to <paramref name=\"otherSet\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsDisjointFrom(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is disjoint from another set. Two sets are disjoint\n            if no item from one set is equal to any item in the other set.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to check disjointness with.</param>\n            <returns>True if the two sets are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.UnionWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. This set receives\n            the union of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Union(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. A new set is \n            created with the union of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N), where M is the size of the \n            one set, and N is the size of the other set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <returns>The union of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IntersectionWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. This set receives\n            the intersection of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Intersection(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. A new set is \n            created with the intersection of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <returns>The intersection of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.DifferenceWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. This set receives\n            the difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Difference(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. A new set is \n            created with the difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <returns>The difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.SymmetricDifferenceWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. This set receives\n            the symmetric difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.SymmetricDifference(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. A new set is \n            created with the symmetric difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <returns>The symmetric difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Set`1.Comparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare items in this set. \n            </summary>\n            <value>If the set was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Set`1.Count\">\n            <summary>\n            Returns the number of items in the set.\n            </summary>\n            <remarks>The size of the set is returned in constant time.</remarks>\n            <value>The number of items in the set.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers\">\n            <summary>\n            A collection of methods to create IComparer and IEqualityComparer instances in various ways.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerFromComparison``1(System.Comparison{``0})\">\n            <summary>\n            Given an Comparison on a type, returns an IComparer on that type. \n            </summary>\n            <typeparam name=\"T\">T to compare.</typeparam>\n            <param name=\"comparison\">Comparison delegate on T</param>\n            <returns>IComparer that uses the comparison.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerKeyValueFromComparerKey``2(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Given an IComparer on TKey, returns an IComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparer\">IComparer on TKey</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.EqualityComparerKeyValueFromComparerKey``2(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Given an IEqualityComparer on TKey, returns an IEqualityComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyEqualityComparer\">IComparer on TKey</param>\n            <returns>IEqualityComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerPairFromKeyValueComparers``2(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IComparer{``1})\">\n            <summary>\n            Given an IComparer on TKey and TValue, returns an IComparer on\n            key-value Pairs of TKey and TValue, comparing first keys, then values. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparer\">IComparer on TKey</param>\n            <param name=\"valueComparer\">IComparer on TValue</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerKeyValueFromComparisonKey``2(System.Comparison{``0})\">\n            <summary>\n            Given an Comparison on TKey, returns an IComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparison\">Comparison delegate on TKey</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.DefaultComparer``1\">\n            <summary>\n            Given an element type, check that it implements IComparable&lt;T&gt; or IComparable, then returns\n            a IComparer that can be used to compare elements of that type.\n            </summary>\n            <returns>The IComparer&lt;T&gt; instance.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;T&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.DefaultKeyValueComparer``2\">\n            <summary>\n            Given an key and value type, check that TKey implements IComparable&lt;T&gt; or IComparable, then returns\n            a IComparer that can be used to compare KeyValuePairs of those types.\n            </summary>\n            <returns>The IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; instance.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;T&gt;.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.KeyValueEqualityComparer`2\">\n            <summary>\n            Class to change an IEqualityComparer&lt;TKey&gt; to an IEqualityComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Only the keys are compared.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.KeyValueComparer`2\">\n            <summary>\n            Class to change an IComparer&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Only the keys are compared.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.PairComparer`2\">\n            <summary>\n            Class to change an IComparer&lt;TKey&gt; and IComparer&lt;TValue&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Keys are compared, followed by values.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.ComparisonComparer`1\">\n            <summary>\n            Class to change an Comparison&lt;T&gt; to an IComparer&lt;T&gt;.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.ComparisonKeyValueComparer`2\">\n            <summary>\n            Class to change an Comparison&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;.\n            GetHashCode cannot be used on this class.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2\">\n            <summary>\n            MultiDictionaryBase is a base class that can be used to more easily implement a class\n            that associates multiple values to a single key. The class implements the generic\n            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface. The resulting collection\n            is read-only -- items cannot be added or removed.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyMultiDictionaryBase as a base class, the derived class must override\n            Count, Contains(TKey,TValue), EnumerateKeys, and TryEnumerateValuesForKey . </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new ReadOnlyMultiDictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. This method must be overridden by a derived\n            class.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. This method must be overridden\n            by the derived class. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})\">\n            <summary>\n            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the \n            key is already present, and ArgumentException is thrown. Otherwise, a\n            new key is added, and new values are associated with that key.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"values\">Values to associate with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">The key is already present in the dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue.\n            It may be appropriate to override this method to \n            provide a more efficient implementation.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(`0,`1)\">\n            <summary>\n            Determines if this dictionary contains a key-value pair equal to <paramref name=\"key\"/> and \n            <paramref name=\"value\"/>. The dictionary is not changed. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">The value to search for.</param>\n            <returns>True if the dictionary has associated <paramref name=\"value\"/> with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Determines if this dictionary contains the given key and all of the values associated with that key..\n            </summary>\n            <param name=\"pair\">A key and collection of values to search for.</param>\n            <returns>True if the dictionary has associated all of the values in <paramref name=\"pair\"/>.Value with <paramref name=\"pair\"/>.Key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EqualValues(`1,`1)\">\n            <summary>\n            If the derived class does not use the default comparison for values, this\n            methods should be overridden to compare two values for equality. This is\n            used for the correct implementation of ICollection.Contains on the Values\n            and KeyValuePairs collections.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountValues(`0)\">\n            <summary>\n            Gets a count of the number of values associated with a key. The\n            default implementation is slow; it enumerators all of the values\n            (using TryEnumerateValuesForKey) to count them. A derived class\n            may be able to supply a more efficient implementation.\n            </summary>\n            <param name=\"key\">The key to count values for.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. This default implementation\n            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.\n            A derived class may be able to supply a more efficient implementation.\n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.GetEnumerator\">\n            <summary>\n            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.\n            </summary>\n            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Count\">\n            <summary>\n            Gets the number of keys in the dictionary. This property must be overridden\n            in the derived class.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Keys\">\n            <summary>\n            Gets a read-only collection all the keys in this dictionary.\n            </summary>\n            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Values\">\n            <summary>\n            Gets a read-only collection of all the values in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values\">\n            <summary>\n            Gets a read-only collection of all the value collections in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Item(`0)\">\n            <summary>\n            Returns a collection of all of the values in the dictionary associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, an ICollection with no\n            values is returned. The returned ICollection is read-only.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name=\"key\"/>.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)\">\n            <summary>\n            Gets a collection of all the values in the dictionary associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, a KeyNotFound exception is thrown.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name=\"key\"/>.</value>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">The given key is not present in the dictionary.</exception>\n            <exception cref=\"T:System.NotSupportedException\">The set accessor is called.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection\">\n            <summary>\n            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection\n            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,\n            etc. values from the multi-dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.#ctor(Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1},`0)\">\n            <summary>\n            Constructor. Initializes this collection.\n            </summary>\n            <param name=\"myDictionary\">Dictionary we're using.</param>\n            <param name=\"key\">The key we're looking at.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.NoValues\">\n            <summary>\n            A simple function that returns an IEnumerator&lt;TValue&gt; that\n            doesn't yield any values. A helper.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator\">\n            <summary>\n            Enumerate all the values associated with key.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)\">\n            <summary>\n            Determines if the given values is associated with key.\n            </summary>\n            <param name=\"item\">Value to check for.</param>\n            <returns>True if value is associated with key, false otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Count\">\n            <summary>\n            Get the number of values associated with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerableValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;IEnumerable&lt;TValue&gt;&gt; and ICollection for the\n            Values collection on IDictionary. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BinaryPredicate`1\">\n            <summary>\n            The BinaryPredicate delegate type  encapsulates a method that takes two\n            items of the same type, and returns a boolean value representating \n            some relationship between them. For example, checking whether two\n            items are equal or equivalent is one kind of binary predicate.\n            </summary>\n            <param name=\"item1\">The first item.</param>\n            <param name=\"item2\">The second item.</param>\n            <returns>Whether item1 and item2 satisfy the relationship that the BinaryPredicate defines.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms\">\n            <summary>\n            Algorithms contains a number of static methods that implement\n            algorithms that work on collections. Most of the methods deal with\n            the standard generic collection interfaces such as IEnumerable&lt;T&gt;,\n            ICollection&lt;T&gt; and IList&lt;T&gt;.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Range``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of a list. Items from <paramref name=\"list\"/> are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name=\"list\"/>\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>This method can be used to apply an algorithm to a portion of a list. For example:\n            <code>Algorithms.ReverseInPlace(Algorithms.Range(list, 3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <typeparam name=\"T\">The type of the items in the list.</typeparam>\n            <param name=\"list\">The list to view.</param>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-list. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of <paramref name=\"list\"/>.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Range``1(``0[],System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of an array. Items from <paramref name=\"array\"/> are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name=\"array\"/>\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view. After an insertion, the last item in <paramref name=\"array\"/> \"falls off the end\". After a deletion, the\n            last item in array becomes the default value (0 or null).\n            </summary>\n            <remarks>This method can be used to apply an algorithm to a portion of a array. For example:\n            <code>Algorithms.ReverseInPlace(Algorithms.Range(array, 3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"array\">The array to view.</param>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-array. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of <paramref name=\"array\"/>.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Returns a read-only view onto a collection. The returned ICollection&lt;T&gt; interface\n            only allows operations that do not change the collection: GetEnumerator, Contains, CopyTo,\n            Count. The ReadOnly property returns false, indicating that the collection is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying collection is not copied. If the underlying\n            collection is changed, then the read-only view also changes accordingly.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"collection\"/>. If <paramref name=\"collection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Returns a read-only view onto a list. The returned IList&lt;T&gt; interface\n            only allows operations that do not change the list: GetEnumerator, Contains, CopyTo,\n            Count, IndexOf, and the get accessor of the indexer. \n            The IsReadOnly property returns true, indicating that the list is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying list is not copied. If the underlying\n            list is changed, then the read-only view also changes accordingly.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"list\"/>. Returns null if <paramref name=\"list\"/> is null. \n            If <paramref name=\"list\"/> is already read-only, returns <paramref name=\"list\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Returns a read-only view onto a dictionary. The returned IDictionary&lt;TKey,TValue&gt; interface\n            only allows operations that do not change the dictionary. \n            The IsReadOnly property returns true, indicating that the dictionary is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying dictionary is not copied. If the underlying\n            dictionary is changed, then the read-only view also changes accordingly.</remarks>\n            <param name=\"dictionary\">The dictionary to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"dictionary\"/>. Returns null if <paramref name=\"dictionary\"/> is null. \n            If <paramref name=\"dictionary\"/> is already read-only, returns <paramref name=\"dictionary\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.IEnumerable)\">\n            <summary>\n            Given a non-generic IEnumerable interface, wrap a generic IEnumerable&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic collection, but can be used in places that require a generic interface.\n            The underlying non-generic collection must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic collections to newer code that uses generic interfaces.\n            </summary>\n            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedCollection\"/> to IEnumerable&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the wrapper collection.</typeparam>\n            <param name=\"untypedCollection\">An untyped collection. This collection should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic IEnumerable&lt;T&gt; wrapper around <paramref name=\"untypedCollection\"/>. \n            If <paramref name=\"untypedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.ICollection)\">\n            <summary>\n            Given a non-generic ICollection interface, wrap a generic ICollection&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic collection, but can be used in places that require a generic interface.\n            The underlying non-generic collection must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic collections to newer code that uses generic interfaces.\n            </summary>\n            <remarks><para>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedCollection\"/> to ICollection&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</para>\n            <para>Unlike the generic interface, the non-generic ICollection interfaces does\n            not contain methods for adding or removing items from the collection. For this reason,\n            the returned ICollection&lt;T&gt; will be read-only.</para></remarks>\n            <typeparam name=\"T\">The item type of the wrapper collection.</typeparam>\n            <param name=\"untypedCollection\">An untyped collection. This collection should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic ICollection&lt;T&gt; wrapper around <paramref name=\"untypedCollection\"/>.\n            If <paramref name=\"untypedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.IList)\">\n            <summary>\n            Given a non-generic IList interface, wrap a generic IList&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic list, but can be used in places that require a generic interface.\n            The underlying non-generic list must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic lists to newer code that uses generic interfaces.\n            </summary>\n            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedList\"/> to IList&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the wrapper list.</typeparam>\n            <param name=\"untypedList\">An untyped list. This list should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic IList&lt;T&gt; wrapper around <paramref name=\"untypedlist\"/>.\n            If <paramref name=\"untypedlist\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Given a generic ICollection&lt;T&gt; interface, wrap a non-generic (untyped)\n            ICollection interface around it. The non-generic interface will contain the same objects as the \n            underlying generic collection, but can be used in places that require a non-generic interface.\n            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.\n            </summary>\n            <remarks>Many generic collections already implement the non-generic interfaces directly. This\n            method will first attempt to simply cast <paramref name=\"typedCollection\"/> to ICollection. If that\n            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the underlying collection.</typeparam>\n            <param name=\"typedCollection\">A typed collection to wrap.</param>\n            <returns>A non-generic ICollection wrapper around <paramref name=\"typedCollection\"/>.\n            If <paramref name=\"typedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Given a generic IList&lt;T&gt; interface, wrap a non-generic (untyped)\n            IList interface around it. The non-generic interface will contain the same objects as the \n            underlying generic list, but can be used in places that require a non-generic interface.\n            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.\n            </summary>\n            <remarks>Many generic collections already implement the non-generic interfaces directly. This\n            method will first attempt to simply cast <paramref name=\"typedList\"/> to IList. If that\n            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the underlying list.</typeparam>\n            <param name=\"typedList\">A typed list to wrap.</param>\n            <returns>A non-generic IList wrapper around <paramref name=\"typedList\"/>.\n            If <paramref name=\"typedList\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadWriteList``1(``0[])\">\n            <summary>\n            <para>Creates a read-write IList&lt;T&gt; wrapper around an array. When an array is\n            implicitely converted to an IList&lt;T&gt;, changes to the items in the array cannot\n            be made through the interface. This method creates a read-write IList&lt;T&gt; wrapper\n            on an array that can be used to make changes to the array. </para>\n            <para>Use this method when you need to pass an array to an algorithms that takes an \n            IList&lt;T&gt; and that tries to modify items in the list. Algorithms in this class generally do not\n            need this method, since they have been design to operate on arrays even when they\n            are passed as an IList&lt;T&gt;.</para>\n            </summary>\n            <remarks>Since arrays cannot be resized, inserting an item causes the last item in the array to be automatically\n            removed. Removing an item causes the last item in the array to be replaced with a default value (0 or null). Clearing\n            the list causes all the items to be replaced with a default value.</remarks>\n            <param name=\"array\">The array to wrap.</param>\n            <returns>An IList&lt;T&gt; wrapper onto <paramref name=\"array\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0)\">\n            <summary>\n            Replace all items in a collection equal to a particular value with another values, yielding another collection.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Replace all items in a collection equal to a particular value with another values, yielding another collection. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0)\">\n            <summary>\n            Replace all items in a collection that a predicate evalues at true with a value, yielding another collection. .\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"predicate\">The predicate used to evaluate items with the collection. If the predicate returns true for a particular\n            item, the item is replaces with <paramref name=\"replaceWith\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0)\">\n            <summary>\n            Replace all items in a list or array equal to a particular value with another value. The replacement is done in-place, changing\n            the list.\n            </summary>\n            <remarks><para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Replace all items in a list or array equal to a particular value with another values.\n            The replacement is done in-place, changing\n            the list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},System.Predicate{``0},``0)\">\n            <summary>\n            Replace all items in a list or array that a predicate evaluates at true with a value. The replacement is done in-place, changing\n            the list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"predicate\">The predicate used to evaluate items with the collection. If the predicate returns true for a particular\n            item, the item is replaces with <paramref name=\"replaceWith\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. \n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive duplicates removed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive duplicates removed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"equalityComparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Remove consecutive \"equal\" items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. </remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". An item <c>current</c> is removed if <c>predicate(first, current)==true</c>, where\n            <c>first</c> is the first item in the group of \"duplicate\" items.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive \"duplicates\" removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Remove consecutive equal items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed. The removal is done in-place, changing\n            the list. \n            </summary>\n            <remarks><para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Remove subsequent consecutive equal items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed.\n            The replacement is done in-place, changing\n            the list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Remove consecutive \"equal\" items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed. The replacement is done in-place, changing\n            the list. The passed BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks><para>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive equal items in the\n            list.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists..</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive equal items in the\n            list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive \"equal\" items in the\n            list. The passed BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </remarks>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveWhere``1(System.Collections.Generic.IList{``0},System.Int32,System.Predicate{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive items in the\n            list for which a given predicate returns true.\n            </summary>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive items to look for. The count must be at least 1.</param>\n            <param name=\"predicate\">The predicate used to test each item.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> items where <paramref name=\"predicate\"/>\n            returns true for all items in the run, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the first item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the default value for T could be present in the collection, and \n            would be matched by the predicate, then this method is inappropriate, because\n            you cannot disguish whether the default value for T was actually present in the collection,\n            or no items matched the predicate. In this case, use TryFindFirstWhere.</remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item in the collection that matches the condition, or the default value for T (0 or null) if no\n            item that matches the condition is found.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\">\n            <summary>\n            Finds the first item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"foundItem\">Outputs the first item in the collection that matches the condition, if the method returns true.</param>\n            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the last item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks><para>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a \n            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</para>\n            <para>If the default value for T could be present in the collection, and \n            would be matched by the predicate, then this method is inappropriate, because\n            you cannot disguish whether the default value for T was actually present in the collection,\n            or no items matched the predicate. In this case, use TryFindFirstWhere.</para></remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item in the collection that matches the condition, or the default value for T (0 or null) if no\n            item that matches the condition is found.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\">\n            <summary>\n            Finds the last item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a \n            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"foundItem\">Outputs the last item in the collection that matches the condition, if the method returns true.</param>\n            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Enumerates all the items in <paramref name=\"collection\"/> that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindFirstIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the index of the first item in a list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item satisfying the condition. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindLastIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the index of the last item in a list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item satisfying the condition. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindIndicesWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Enumerates the indices of all the items in <paramref name=\"list\"/> that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Finds the index of the first item in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>The index of the first item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the first item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Finds the index of the last item in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>The index of the last item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the last item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to one of several given items.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <returns>The index of the first item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode methods will be called.</param>\n            <returns>The index of the first item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the index of the first item in a list \"equal\" to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            first item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the first item \"equal\" to any of the items in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to one of several given items.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <returns>The index of the last item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>\n            <returns>The index of the last item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the index of the last item in a list \"equal\" to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the last item \"equal\" to any of the items in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. \n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to\n            any of the items in the collection <paramref name=\"itemsToLookFor\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. </param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to\n            any of the items in the collection <paramref name=\"itemsToLookFor\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items \"equal\" to any of the items \n            in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is equal to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is equal to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is \"equal\" to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is \"equal\" to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested\n            for in the pattern need not be equality. </remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is equal to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is equal to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>. The passed \n            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if one collection is a subset of another, considered as sets. The first set is a subset\n            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if one collection is a subset of another, considered as sets. The first set is a subset\n            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset\n            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than\n            the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset\n            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than\n            the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a proper subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they\n            have no common items.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsDisjoint method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are disjoint, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they\n            have no common items.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsDisjoint method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparerComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are disjoint, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if two collections are equal, considered as sets. Two sets are equal if they\n            have have the same items, with order not being significant.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the EqualTo method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are equal, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if two collections are equal, considered as sets. Two sets are equal if they\n            have have the same items, with order not being significant.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the EqualTo method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are equal, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic intersection of two collections. The intersection of two sets\n            is all items that appear in both of the sets. If an item appears X times in one set,\n            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the intersection of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to intersect.</param>\n            <param name=\"collection2\">The second collection to intersect.</param>\n            <returns>The intersection of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic intersection of two collections. The intersection of two sets\n            is all items that appear in both of the sets. If an item appears X times in one set,\n            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the intersection of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to intersect.</param>\n            <param name=\"collection2\">The second collection to intersect.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The intersection of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic union of two collections. The union of two sets\n            is all items that appear in either of the sets. If an item appears X times in one set,\n            and Y times in the other set, the union contains the item Maximum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the union of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Union or UnionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to union.</param>\n            <param name=\"collection2\">The second collection to union.</param>\n            <returns>The union of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic union of two collections. The union of two sets\n            is all items that appear in either of the sets. If an item appears X times in one set,\n            and Y times in the other set, the union contains the item Maximum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the union of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the union or unionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to union.</param>\n            <param name=\"collection2\">The second collection to union.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The union of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic difference of two collections. The difference of two sets\n            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,\n            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). \n            The source collections are not changed.\n            A new collection is created with the difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Difference or DifferenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to difference.</param>\n            <param name=\"collection2\">The second collection to difference.</param>\n            <returns>The difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic difference of two collections. The difference of two sets\n            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,\n            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). \n            The source collections are not changed.\n            A new collection is created with the difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the difference or differenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to difference.</param>\n            <param name=\"collection2\">The second collection to difference.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets\n            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,\n            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. \n            The source collections are not changed.\n            A new collection is created with the symmetric difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the SymmetricDifference or SymmetricDifferenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to symmetric difference.</param>\n            <param name=\"collection2\">The second collection to symmetric difference.</param>\n            <returns>The symmetric difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets\n            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,\n            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. \n            The source collections are not changed.\n            A new collection is created with the symmetric difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the symmetric difference or symmetric differenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to symmetric difference.</param>\n            <param name=\"collection2\">The second collection to symmetric difference.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The symmetric difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CartesianProduct``2(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1})\">\n            <summary>\n            Computes the cartestian product of two collections: all possible pairs of items, with the first item taken from the first collection and \n            the second item taken from the second collection. If the first collection has N items, and the second collection has M items, the cartesian\n            product will have N * M pairs.\n            </summary>\n            <typeparam name=\"TFirst\">The type of items in the first collection.</typeparam>\n            <typeparam name=\"TSecond\">The type of items in the second collection.</typeparam>\n            <param name=\"first\">The first collection.</param>\n            <param name=\"second\">The second collection.</param>\n            <returns>An IEnumerable&lt;Pair&lt;TFirst, TSecond&gt;&gt; that enumerates the cartesian product of the two collections.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Gets a string representation of the elements in the collection.\n            The string representation starts with \"{\", has a list of items separated\n            by commas (\",\"), and ends with \"}\". Each item in the collection is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            Contained collections (except strings) are recursively converted to strings by this method.\n            </summary>\n            <param name=\"collection\">A collection to get the string representation of.</param>\n            <returns>The string representation of the collection. If <paramref name=\"collection\"/> is null, then the string \"null\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0},System.Boolean,System.String,System.String,System.String)\">\n            <summary>\n            Gets a string representation of the elements in the collection.\n            The string to used at the beginning and end, and to separate items,\n            and supplied by parameters. Each item in the collection is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            </summary>\n            <param name=\"collection\">A collection to get the string representation of.</param>\n            <param name=\"recursive\">If true, contained collections (except strings) are converted to strings by a recursive call to this method, instead\n            of by calling ToString.</param>\n            <param name=\"start\">The string to appear at the beginning of the output string.</param>\n            <param name=\"separator\">The string to appear between each item in the string.</param>\n            <param name=\"end\">The string to appear at the end of the output string.</param>\n            <returns>The string representation of the collection. If <paramref name=\"collection\"/> is null, then the string \"null\" is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"start\"/>, <paramref name=\"separator\"/>, or <paramref name=\"end\"/>\n             is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Gets a string representation of the mappings in a dictionary.\n            The string representation starts with \"{\", has a list of mappings separated\n            by commas (\", \"), and ends with \"}\". Each mapping is represented\n            by \"key->value\". Each key and value in the dictionary is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            Contained collections (except strings) are recursively converted to strings by this method.\n            </summary>\n            <param name=\"dictionary\">A dictionary to get the string representation of.</param>\n            <returns>The string representation of the collection, or \"null\" \n            if <paramref name=\"dictionary\"/> is null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetRandomGenerator\">\n            <summary>\n            Return a private random number generator to use if the user\n            doesn't supply one.\n            </summary>\n            <returns>The private random number generator. Only one is ever created\n            and is always returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Randomly shuffles the items in a collection, yielding a new collection.\n            </summary>\n            <typeparam name=\"T\">The type of the items in the collection.</typeparam>\n            <param name=\"collection\">The collection to shuffle.</param>\n            <returns>An array with the same size and items as <paramref name=\"collection\"/>, but the items in a randomly chosen order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0},System.Random)\">\n            <summary>\n            Randomly shuffles the items in a collection, yielding a new collection.\n            </summary>\n            <typeparam name=\"T\">The type of the items in the collection.</typeparam>\n            <param name=\"collection\">The collection to shuffle.</param>\n            <param name=\"randomGenerator\">The random number generator to use to select the random order.</param>\n            <returns>An array with the same size and items as <paramref name=\"collection\"/>, but the items in a randomly chosen order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Randomly shuffles the items in a list or array, in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to shuffle.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0},System.Random)\">\n            <summary>\n            Randomly shuffles the items in a list or array, in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to shuffle.</param>\n            <param name=\"randomGenerator\">The random number generator to use to select the random order.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32)\">\n            <summary>\n            Picks a random subset of <paramref name=\"count\"/> items from <paramref name=\"collection\"/>, and places\n            those items into a random order. No item is selected more than once.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name=\"count\"/>).\n            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection of items to select from. This collection is not changed.</param>\n            <param name=\"count\">The number of items in the subset to choose.</param>\n            <returns>An array of <paramref name=\"count\"/> items, selected at random from <paramref name=\"collection\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or greater than <paramref name=\"collection\"/>.Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32,System.Random)\">\n            <summary>\n            Picks a random subset of <paramref name=\"count\"/> items from <paramref name=\"collection\"/>, and places\n            those items into a random order. No item is selected more than once.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name=\"count\"/>).\n            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection of items to select from. This collection is not changed.</param>\n            <param name=\"count\">The number of items in the subset to choose.</param>\n            <param name=\"randomGenerator\">The random number generates used to make the selection.</param>\n            <returns>An array of <paramref name=\"count\"/> items, selected at random from <paramref name=\"collection\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or greater than <paramref name=\"list\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"randomGenerator\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GeneratePermutations``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>. If <paramref name=\"collection\"/>\n            has N items, then N factorial permutations will be generated. This method does not compare the items to determine if\n            any of them are equal. If some items are equal, the same permutation may be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate the six permutations, AAB, AAB,\n            ABA, ABA, BAA, BAA (not necessarily in that order). To take equal items into account, use the GenerateSortedPermutations\n            method.\n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. \n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. A\n            supplied IComparer&lt;T&gt; instance is used to compare the items.\n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to compare the items.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. A\n            supplied Comparison&lt;T&gt; delegate is used to compare the items.\n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <param name=\"comparison\">The Comparison&lt;T&gt; delegate used to compare the items.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the maximum value in a collection.\n            </summary>\n            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <returns>The largest item in the collection. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the maximum value in a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The largest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the maximum value in a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The largest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the minimum value in a collection.\n            </summary>\n            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the minimum value in a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the minimum value in a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list.\n            </summary>\n            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list.\n            </summary>\n            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a sorted version of a collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates a sorted version of a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Creates a sorted version of a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Sorts a list or array in place.\n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Sorts a list or array in place. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Sorts a list or array in place. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            </summary>\n            <remarks><para>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;).\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IComparer{``0},System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering in the passed instance of IComparer&lt;T&gt;.\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparer\">The comparer instance used to sort the list. Only\n            the Compare method is used.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Comparison{``0},System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering in the passed Comparison&lt;T&gt; delegate.\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the list.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;). The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the ordering in the passed instance of IComparer&lt;T&gt;. The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <param name=\"comparer\">The comparer instance used to sort the list. Only\n            the Compare method is used.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Comparison{``0},System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the ordering in the passed Comparison&lt;T&gt; delegate. The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the collections.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used\n            to compare the items. </remarks>\n            <typeparam name=\"T\">Types of items to compare. This type must implement IComparable&lt;T&gt; to allow \n            items to be compared.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">T does not implement IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values, using a supplied comparison delegate. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <typeparam name=\"T\">Types of items to compare.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <param name=\"comparison\">The IComparison&lt;T&gt; delegate to compare items. \n            Only the Compare member function of this interface is called.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values, using a supplied comparer interface. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <typeparam name=\"T\">Types of items to compare.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to compare items. \n            Only the Compare member function of this interface is called.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"sequence1\"/>, <paramref name=\"sequence2\"/>, or \n            <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be used\n            for collections or algorithms that use sequences of T as an item type. The Lexicographical\n            ordered of sequences is for comparison.\n            </summary>\n            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used\n            to compare the items. </remarks>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses\n            for collections or algorithms that use sequences of T as an item type. The Lexicographics\n            ordered of sequences is for comparison.\n            </summary>\n            <param name=\"comparer\">A comparer instance used to compare individual items of type T.</param>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Comparison{``0})\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses\n            for collections or algorithms that use sequences of T as an item type. The Lexicographics\n            ordered of sequences is for comparison.\n            </summary>\n            <param name=\"comparison\">A comparison delegate used to compare individual items of type T.</param>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetReverseComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Reverses the order of comparison of an IComparer&lt;T&gt;. The resulting comparer can be used,\n            for example, to sort a collection in descending order. Equality and hash codes are unchanged.\n            </summary>\n            <typeparam name=\"T\">The type of items thta are being compared.</typeparam>\n            <param name=\"comparer\">The comparer to reverse.</param>\n            <returns>An IComparer&lt;T&gt; that compares items in the reverse order of <paramref name=\"comparer\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetIdentityComparer``1\">\n            <summary>\n            Gets an IEqualityComparer&lt;T&gt; instance that can be used to compare objects\n            of type T for object identity only. Two objects compare equal only if they\n            are references to the same object. \n            </summary>\n            <returns>An IEqualityComparer&lt;T&gt; instance for identity comparison.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetReverseComparison``1(System.Comparison{``0})\">\n            <summary>\n            Reverses the order of comparison of an Comparison&lt;T&gt;. The resulting comparison can be used,\n            for example, to sort a collection in descending order. \n            </summary>\n            <typeparam name=\"T\">The type of items that are being compared.</typeparam>\n            <param name=\"comparison\">The comparison to reverse.</param>\n            <returns>A Comparison&lt;T&gt; that compares items in the reverse order of <paramref name=\"comparison\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetComparerFromComparison``1(System.Comparison{``0})\">\n            <summary>\n            Given a comparison delegate that compares two items of type T, gets an\n            IComparer&lt;T&gt; instance that performs the same comparison.\n            </summary>\n            <param name=\"comparison\">The comparison delegate to use.</param>\n            <returns>An IComparer&lt;T&gt; that performs the same comparing operation\n            as <paramref name=\"comparison\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetComparisonFromComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Given in IComparer&lt;T&gt; instenace that comparers two items from type T, \n            gets a Comparison delegate that performs the same comparison.\n            </summary>\n            <param name=\"comparer\">The IComparer&lt;T&gt; instance to use.</param>\n            <returns>A Comparison&lt;T&gt; delegate that performans the same comparing\n            operation as <paramref name=\"comparer\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetCollectionEqualityComparer``1\">\n            <summary>\n            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, considered in order. This is the same notion of equality as\n            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a collection of strings.\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;());\n            </code>\n            </example>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetCollectionEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, considered in order. This is the same notion of equality as\n            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>\n            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a collection of strings, compared in a case-insensitive way\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));\n            </code>\n            </example>\n            <param name=\"equalityComparer\">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetSetEqualityComparer``1\">\n            <summary>\n            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, without regard to order. This is the same notion of equality as\n            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>\n            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a set of strings, without regard to order\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));\n            </code>\n            </example>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality, without regard to order.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetSetEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, without regard to order. This is the same notion of equality as\n            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a set of strings, without regard to order\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;());\n            </code>\n            </example>\n            <param name=\"equalityComparer\">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality, without regard to order.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Exists``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Determines if a collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TrueForAll``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveWhere``1(System.Collections.Generic.ICollection{``0},System.Predicate{``0})\">\n            <summary>\n            Removes all the items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the collection if an array or implements IList&lt;T&gt;, an efficient algorithm that\n            compacts items is used. If not, then ICollection&lt;T&gt;.Remove is used\n            to remove items from the collection. If the collection is an array or fixed-size list,\n            the non-removed elements are placed, in order, at the beginning of\n            the list, and the remaining list items are filled with a default value (0 or null).</remarks>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>Returns a collection of the items that were removed. This collection contains the\n            items in the same order that they orginally appeared in <paramref name=\"collection\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Convert``2(System.Collections.Generic.IEnumerable{``0},System.Converter{``0,``1})\">\n            <summary>\n            Convert a collection of items by applying a delegate to each item in the collection. The resulting collection\n            contains the result of applying <paramref name=\"converter\"/> to each item in <paramref name=\"sourceCollection\"/>, in\n            order.\n            </summary>\n            <typeparam name=\"TSource\">The type of items in the collection to convert.</typeparam>\n            <typeparam name=\"TDest\">The type each item is being converted to.</typeparam>\n            <param name=\"sourceCollection\">The collection of item being converted.</param>\n            <param name=\"converter\">A delegate to the method to call, passing each item in <paramref name=\"sourceCollection\"/>.</param>\n            <returns>The resulting collection from applying <paramref name=\"converter\"/> to each item in <paramref name=\"sourceCollection\"/>, in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"sourceCollection\"/> or <paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Creates a delegate that converts keys to values by used a dictionary to map values. Keys\n            that a not present in the dictionary are converted to the default value (zero or null).\n            </summary>\n            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert\n            entire collections.</remarks>\n            <param name=\"dictionary\">The dictionary used to perform the conversion.</param>\n            <returns>A delegate to a method that converts keys to values. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1},``1)\">\n            <summary>\n            Creates a delegate that converts keys to values by used a dictionary to map values. Keys\n            that a not present in the dictionary are converted to a supplied default value.\n            </summary>\n            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert\n            entire collections.</remarks>\n            <param name=\"dictionary\">The dictionary used to perform the conversion.</param>\n            <param name=\"defaultValue\">The result of the conversion for keys that are not present in the dictionary.</param>\n            <returns>A delegate to a method that converts keys to values. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"dictionary\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})\">\n            <summary>\n            Performs the specified action on each item in a collection.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"action\">An Action delegate which is invoked for each item in <paramref name=\"collection\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Partition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Partition a list or array based on a predicate. After partitioning, all items for which\n            the predicate returned true precede all items for which the predicate returned false.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to partition.</param>\n            <param name=\"predicate\">A delegate that defines the partitioning condition.</param>\n            <returns>The index of the first item in the second half of the partition; i.e., the first item for\n            which <paramref name=\"predicate\"/> returned false. If the predicate was true for all items\n            in the list, list.Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StablePartition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Partition a list or array based on a predicate. After partitioning, all items for which\n            the predicate returned true precede all items for which the predicate returned false. \n            The partition is stable, which means that if items X and Y have the same result from\n            the predicate, and X precedes Y in the original list, X will precede Y in the \n            partitioned list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to partition.</param>\n            <param name=\"predicate\">A delegate that defines the partitioning condition.</param>\n            <returns>The index of the first item in the second half of the partition; i.e., the first item for\n            which <paramref name=\"predicate\"/> returned false. If the predicate was true for all items\n            in the list, list.Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Concatenate``1(System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Concatenates all the items from several collections. The collections need not be of the same type, but\n            must have the same item type.\n            </summary>\n            <param name=\"collections\">The set of collections to concatenate. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <returns>An IEnumerable that enumerates all the items in each of the collections, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if the two collections contain equal items in the same order. The two collections do not need\n            to be of the same type; it is permissible to compare an array and an OrderedBag, for instance.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if the two collections contain equal items in the same order. The passed \n            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals member function of this interface is called.</param>\n            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/>, <paramref name=\"collection2\"/>, or\n            <paramref name=\"equalityComparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Determines if the two collections contain \"equal\" items in the same order. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested\n            for need not be equality. For example, the following code determines if each integer in\n            list1 is less than or equal to the corresponding integer in list2.\n            <code>\n            List&lt;int&gt; list1, list2;\n            if (EqualCollections(list1, list2, delegate(int x, int y) { return x &lt;= y; }) {\n                // the check is true...\n            }\n            </code>\n            </remarks>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". \n            This predicate can compute any relation between two items; it need not represent equality or an equivalence relation.</param>\n            <returns>True if <paramref name=\"predicate\"/>returns true for each corresponding pair of\n            items in the two collections. If both collections are empty, true is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/>, <paramref name=\"collection2\"/>, or\n            <paramref name=\"predicate\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToArray``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Create an array with the items in a collection.\n            </summary>\n            <remarks>If <paramref name=\"collection\"/> implements ICollection&lt;T&gt;T, then \n            ICollection&lt;T&gt;.CopyTo() is used to fill the array. Otherwise, the IEnumerable&lt;T&gt;.GetEnumerator()\n            is used to fill the array.</remarks>\n            <typeparam name=\"T\">Element type of the collection.</typeparam>\n            <param name=\"collection\">Collection to create array from.</param>\n            <returns>An array with the items from the collection, in enumeration order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Count the number of items in an IEnumerable&lt;T&gt; collection. If \n            a more specific collection type is being used, it is more efficient to use\n            the Count property, if one is provided.\n            </summary>\n            <remarks>If the collection implements ICollection&lt;T&gt;, this method\n            simply returns ICollection&lt;T&gt;.Count. Otherwise, it enumerates all items\n            and counts them.</remarks>\n            <param name=\"collection\">The collection to count items in.</param>\n            <returns>The number of items in the collection.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0)\">\n            <summary>\n            Counts the number of items in the collection that are equal to <paramref name=\"find\"/>.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"find\">The item to compare to.</param>\n            <returns>The number of items in the collection that are equal to <paramref name=\"find\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Counts the number of items in the collection that are equal to <paramref name=\"find\"/>.\n            </summary>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"find\">The item to compare to.</param>\n            <param name=\"equalityComparer\">The comparer to use to determine if two items are equal. Only the Equals\n            member function will be called.</param>\n            <returns>The number of items in the collection that are equal to <paramref name=\"find\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"collection\"/> or <paramref name=\"equalityComparer\"/>\n            is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.NCopiesOf``1(System.Int32,``0)\">\n            <summary>\n            Creates an IEnumerator that enumerates a given item <paramref name=\"n\"/> times.\n            </summary>\n            <example>\n            The following creates a list consisting of 1000 copies of the double 1.0.\n            <code>\n            List&lt;double&gt; list = new List&lt;double&gt;(Algorithms.NCopiesOf(1000, 1.0));\n            </code></example>\n            <param name=\"n\">The number of times to enumerate the item.</param>\n            <param name=\"item\">The item that should occur in the enumeration.</param>\n            <returns>An IEnumerable&lt;T&gt; that yields <paramref name=\"n\"/> copies\n            of <paramref name=\"item\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The argument <paramref name=\"n\"/> is less than zero.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Fill``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Replaces each item in a list with a given value. The list does not change in size.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to modify.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is a read-only list.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Fill``1(``0[],``0)\">\n            <summary>\n            Replaces each item in a array with a given value. \n            </summary>\n            <param name=\"array\">The array to modify.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FillRange``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0)\">\n            <summary>\n            Replaces each item in a part of a list with a given value.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to modify.</param>\n            <param name=\"start\">The index at which to start filling. The first index in the list has index 0.</param>\n            <param name=\"count\">The number of items to fill.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is a read-only list.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative, or \n            <paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than <paramref name=\"list\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FillRange``1(``0[],System.Int32,System.Int32,``0)\">\n            <summary>\n            Replaces each item in a part of a array with a given value.\n            </summary>\n            <param name=\"array\">The array to modify.</param>\n            <param name=\"start\">The index at which to start filling. The first index in the array has index 0.</param>\n            <param name=\"count\">The number of items to fill.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative, or \n            <paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than <paramref name=\"array\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Copies all of the items from the collection <paramref name=\"source\"/> to the list <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32)\">\n            <summary>\n            Copies all of the items from the collection <paramref name=\"source\"/> to the array <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. \n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">The collection has more items than will fit into the array. In this case, the array\n            has been filled with as many items as fit before the exception is thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Copies at most <paramref name=\"count\"/> items from the collection <paramref name=\"source\"/> to the list <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded. The source collection must not be\n            the destination list or part thereof.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies at most <paramref name=\"count\"/> items from the collection <paramref name=\"source\"/> to the array <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. The source collection must not be\n            the destination array or part thereof.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy. The array must be large enought to fit this number of items.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or <paramref name=\"destIndex\"/> + <paramref name=\"count\"/>\n            is greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Copies <paramref name=\"count\"/> items from the list <paramref name=\"source\"/>, starting at the index <paramref name=\"sourceIndex\"/>, \n            to the list <paramref name=\"dest\"/>, starting at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded.\n            The source and destination lists may be the same.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"sourceIndex\">The index within <paramref name=\"source\"/>to begin copying items from.</param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index within <paramref name=\"dest\"/>to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"sourceIndex\"/> is negative or \n            greater than <paramref name=\"source\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or too large.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies <paramref name=\"count\"/> items from the list or array <paramref name=\"source\"/>, starting at the index <paramref name=\"sourceIndex\"/>, \n            to the array <paramref name=\"dest\"/>, starting at the index <paramref name=\"destIndex\"/>. \n            The source may be the same as the destination array.\n            </summary>\n            <param name=\"source\">The list or array that provide the source items. </param>\n            <param name=\"sourceIndex\">The index within <paramref name=\"source\"/>to begin copying items from.</param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index within <paramref name=\"dest\"/>to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy. The destination array must be large enough to hold this many items.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"sourceIndex\"/> is negative or \n            greater than <paramref name=\"source\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or too large.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Reverse``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Reverses a list and returns the reversed list, without changing the source list.\n            </summary>\n            <param name=\"source\">The list to reverse.</param>\n            <returns>A collection that contains the items from <paramref name=\"source\"/> in reverse order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReverseInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Reverses a list or array in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to reverse.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is read only.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Rotate``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Rotates a list and returns the rotated list, without changing the source list.\n            </summary>\n            <param name=\"source\">The list to rotate.</param>\n            <param name=\"amountToRotate\">The number of elements to rotate. This value can be positive or negative. \n            For example, rotating by positive 3 means that source[3] is the first item in the returned collection.\n            Rotating by negative 3 means that source[source.Count - 3] is the first item in the returned collection.</param>\n            <returns>A collection that contains the items from <paramref name=\"source\"/> in rotated order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RotateInPlace``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Rotates a list or array in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to rotate.</param>\n            <param name=\"amountToRotate\">The number of elements to rotate. This value can be positive or negative. \n            For example, rotating by positive 3 means that list[3] is the first item in the resulting list.\n            Rotating by negative 3 means that list[list.Count - 3] is the first item in the resulting list.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ListRange`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of a list. The object stores a wrapped list, and a start/count indicating\n            a sub-range of the list. Insertion/deletions through the sub-range view\n            cause the count to change also; insertions and deletions directly on\n            the wrapped list do not.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ListRange`1.#ctor(System.Collections.Generic.IList{`0},System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the list.\n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ArrayRange`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of an array. The object stores a wrapped array, and a start/count indicating\n            a sub-range of the array. Insertion/deletions through the sub-range view\n            cause the count to change up to the size of the underlying array. Elements\n            fall off the end of the underlying array.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ArrayRange`1.#ctor(`0[],System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the array.\n            </summary>\n            <param name=\"wrappedArray\">Array to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1\">\n            <summary>\n            The read-only ICollection&lt;T&gt; implementation that is used by the ReadOnly method.\n            Methods that modify the collection throw a NotSupportedException, methods that don't\n            modify are fowarded through to the wrapped collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1.#ctor(System.Collections.Generic.ICollection{`0})\">\n            <summary>\n            Create a ReadOnlyCollection wrapped around the given collection.\n            </summary>\n            <param name=\"wrappedCollection\">Collection to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1\">\n            <summary>\n            The read-only IList&lt;T&gt; implementation that is used by the ReadOnly method.\n            Methods that modify the list throw a NotSupportedException, methods that don't\n            modify are fowarded through to the wrapped list.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1.#ctor(System.Collections.Generic.IList{`0})\">\n            <summary>\n            Create a ReadOnlyList wrapped around the given list.\n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2\">\n            <summary>\n            The private class that implements a read-only wrapped for \n            IDictionary &lt;TKey,TValue&gt;.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})\">\n            <summary>\n            Create a read-only dictionary wrapped around the given dictionary.\n            </summary>\n            <param name=\"wrappedDictionary\">The IDictionary&lt;TKey,TValue&gt; to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedEnumerator`1\">\n            <summary>\n             The class that provides a typed IEnumerator&lt;T&gt;\n            view onto an untyped IEnumerator interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedEnumerator`1.#ctor(System.Collections.IEnumerator)\">\n            <summary>\n            Create a typed IEnumerator&lt;T&gt;\n            view onto an untyped IEnumerator interface \n            </summary>\n            <param name=\"wrappedEnumerator\">IEnumerator to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedEnumerable`1\">\n            <summary>\n            The class that provides a typed IEnumerable&lt;T&gt; view\n            onto an untyped IEnumerable interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedEnumerable`1.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Create a typed IEnumerable&lt;T&gt; view\n            onto an untyped IEnumerable interface.\n            </summary>\n            <param name=\"wrappedEnumerable\">IEnumerable interface to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedCollection`1\">\n            <summary>\n            The class that provides a typed ICollection&lt;T&gt; view\n            onto an untyped ICollection interface. The ICollection&lt;T&gt;\n            is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedCollection`1.#ctor(System.Collections.ICollection)\">\n            <summary>\n            Create a typed ICollection&lt;T&gt; view\n            onto an untyped ICollection interface.\n            </summary>\n            <param name=\"wrappedCollection\">ICollection interface to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedCollection`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedList`1\">\n            <summary>\n            The class used to create a typed IList&lt;T&gt; view onto\n            an untype IList interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedList`1.#ctor(System.Collections.IList)\">\n            <summary>\n            Create a typed IList&lt;T&gt; view onto\n            an untype IList interface.\n            </summary>\n            <param name=\"wrappedList\">The IList to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.UntypedCollection`1\">\n            <summary>\n            The class that is used to provide an untyped ICollection\n            view onto a typed ICollection&lt;T&gt; interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedCollection`1.#ctor(System.Collections.Generic.ICollection{`0})\">\n            <summary>\n            Create an untyped ICollection\n            view onto a typed ICollection&lt;T&gt; interface.\n            </summary>\n            <param name=\"wrappedCollection\">The ICollection&lt;T&gt; to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.UntypedList`1\">\n            <summary>\n            The class that implements a non-generic IList wrapper\n            around a generic IList&lt;T&gt; interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedList`1.#ctor(System.Collections.Generic.IList{`0})\">\n            <summary>\n            Create a non-generic IList wrapper\n            around a generic IList&lt;T&gt; interface.\n            </summary>\n            <param name=\"wrappedList\">The IList&lt;T&gt; interface to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedList`1.ConvertToItemType(System.String,System.Object)\">\n            <summary>\n            Convert the given parameter to T. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view an array\n            in a read-write way. Insertions cause the last item in the array\n            to fall off, deletions replace the last item with the default value.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1.#ctor(`0[])\">\n            <summary>\n            Create a list wrapper object on an array.\n            </summary>\n            <param name=\"wrappedArray\">Array to wrap.</param>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Return true, to indicate that the list is fixed size.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.LexicographicalComparerClass`1\">\n            <summary>\n            A private class used by the LexicographicalComparer method to compare sequences\n            (IEnumerable) of T by there Lexicographical ordering.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new instance that comparer sequences of T by their lexicographical\n            ordered.\n            </summary>\n            <param name=\"itemComparer\">The IComparer used to compare individual items of type T.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReverseComparerClass`1\">\n            <summary>\n            An IComparer instance that can be used to reverse the sense of \n            a wrapped IComparer instance.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReverseComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            </summary>\n            <param name=\"comparer\">The comparer to reverse.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.IdentityComparer`1\">\n            <summary>\n            A class, implementing IEqualityComparer&lt;T&gt;, that compares objects\n            for object identity only. Only Equals and GetHashCode can be used;\n            this implementation is not appropriate for ordering.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.CollectionEqualityComparer`1\">\n            <summary>\n            A private class used to implement GetCollectionEqualityComparer(). This\n            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare\n            two enumerables for equality, where order is significant.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.SetEqualityComparer`1\">\n            <summary>\n            A private class used to implement GetSetEqualityComparer(). This\n            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare\n            two enumerables for equality, where order is not significant.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Util\">\n            <summary>\n            A holder class for various internal utility functions that need to be shared.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.IsCloneableType(System.Type,System.Boolean@)\">\n            <summary>\n            Determine if a type is cloneable: either a value type or implementing\n            ICloneable.\n            </summary>\n            <param name=\"type\">Type to check.</param>\n            <param name=\"isValue\">Returns if the type is a value type, and does not implement ICloneable.</param>\n            <returns>True if the type is cloneable.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.SimpleClassName(System.Type)\">\n            <summary>\n            Returns the simple name of the class, for use in exception messages. \n            </summary>\n            <returns>The simple name of this class.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.CreateEnumerableWrapper``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Wrap an enumerable so that clients can't get to the underlying\n            implementation via a down-case\n            </summary>\n            <param name=\"wrapped\">Enumerable to wrap.</param>\n            <returns>A wrapper around the enumerable.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.GetHashCode``1(``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Gets the hash code for an object using a comparer. Correctly handles\n            null.\n            </summary>\n            <param name=\"item\">Item to get hash code for. Can be null.</param>\n            <param name=\"equalityComparer\">The comparer to use.</param>\n            <returns>The hash code for the item.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Util.WrapEnumerable`1\">\n            <summary>\n            Wrap an enumerable so that clients can't get to the underlying \n            implementation via a down-cast.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.WrapEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Create the wrapper around an enumerable.\n            </summary>\n            <param name=\"wrapped\">IEnumerable to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1\">\n            <summary>\n            BigList&lt;T&gt; provides a list of items, in order, with indices of the items ranging from 0 to one less\n            than the count of items in the collection. BigList&lt;T&gt; is optimized for efficient operations on large (&gt;100 items)\n            lists, especially for insertions, deletions, copies, and concatinations.\n            </summary>\n            <remarks>\n            <para>BigList&lt;T&gt; class is similar in functionality to the standard List&lt;T&gt; class. Both classes\n            provide a collection that stores an set of items in order, with indices of the items ranging from 0 to one less\n            than the count of items in the collection. Both classes provide the ability to add and remove items from any index,\n            and the get or set the item at any index.</para> \n            <para>BigList&lt;T&gt; differs significantly from List&lt;T&gt; in the performance of various operations, \n            especially when the lists become large (several hundred items or more). With List&lt;T&gt;, inserting or removing\n            elements from anywhere in a large list except the end is very inefficient -- every item after the point of inserting\n            or deletion has to be moved in the list. The BigList&lt;T&gt; class, however, allows for fast insertions\n            and deletions anywhere in the list. Furthermore, BigList&lt;T&gt; allows copies of a list, sub-parts\n            of a list, and concatinations of two lists to be very fast. When a copy is made of part or all of a BigList,\n            two lists shared storage for the parts of the lists that are the same. Only when one of the lists is changed is additional\n            memory allocated to store the distinct parts of the lists.</para>\n            <para>Of course, there is a small price to pay for this extra flexibility. Although still quite efficient, using an \n            index to get or change one element of a BigList, while still reasonably efficient, is significantly slower than using\n            a plain List. Because of this, if you want to process every element of a BigList, using a foreach loop is a lot\n            more efficient than using a for loop and indexing the list.</para>\n            <para>In general, use a List when the only operations you are using are Add (to the end), foreach,\n            or indexing, or you are very sure the list will always remain small (less than 100 items). For large (&gt;100 items) lists\n            that do insertions, removals, copies, concatinations, or sub-ranges, BigList will be more efficient than List. \n            In almost all cases, BigList is more efficient and easier to use than LinkedList.</para>\n            </remarks>\n            <typeparam name=\"T\">The type of items to store in the BigList.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor\">\n            <summary>\n            Creates a new BigList. The BigList is initially empty.\n            </summary>\n            <remarks>Creating a empty BigList takes constant time and consumes a very small amount of memory.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Creates a new BigList initialized with the items from <paramref name=\"collection\"/>, in order.\n            </summary>\n            <remarks>Initializing the tree list with the elements of collection takes time O(N), where N is the number of\n            items in <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection used to initialize the BigList. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Int32)\">\n            <summary>\n            Creates a new BigList initialized with a given number of copies of the items from <paramref name=\"collection\"/>, in order. \n            </summary>\n            <remarks>Initializing the tree list with the elements of collection takes time O(N + log K), where N is the number of\n            items in <paramref name=\"collection\"/>, and K is the number of copies.</remarks>\n            <param name=\"copies\">Number of copies of the collection to use.</param>\n            <param name=\"collection\">The collection used to initialize the BigList. </param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"copies\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Creates a new BigList that is a copy of <paramref name=\"list\"/>.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <param name=\"list\">The BigList to copy. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0},System.Int32)\">\n            <summary>\n            Creates a new BigList that is several copies of <paramref name=\"list\"/>.\n            </summary>\n            <remarks>Creating K copies of a BigList takes time O(log K), and O(log K) \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <param name=\"copies\">Number of copies of the collection to use.</param>\n            <param name=\"list\">The BigList to copy. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Creates a new BigList from the indicated Node.\n            </summary>\n            <param name=\"node\">Node that becomes the new root. If null, the new BigList is empty.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Clear\">\n            <summary>\n            Removes all of the items from the BigList.\n            </summary>\n            <remarks>Clearing a BigList takes constant time.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> move up one index.\n            </summary>\n            <remarks>The amount of time to insert an item is O(log N), no matter where\n            in the list the insertion occurs. Inserting an item at the beginning or end of the \n            list is O(N). \n            </remarks>\n            <param name=\"index\">The index to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Inserts a collection of items at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices \n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert an arbitrary collection in the BigList is O(M + log N), \n            where M is the number of items inserted, and N is the number of items in the list.\n            </remarks>\n            <param name=\"index\">The index to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            first item has index 0.</param>\n            <param name=\"collection\">The collection of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.InsertRange(System.Int32,Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Inserts a BigList of items at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices \n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert another BigList is O(log N), \n            where N is the number of items in the list, regardless of the number of items in the \n            inserted list. Storage is shared between the two lists until one of them is changed.\n            </remarks>\n            <param name=\"index\">The index to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            first item has index 0.</param>\n            <param name=\"list\">The BigList of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index in the BigList. All items at indexes \n            greater than <paramref name=\"index\"/> move down one index.\n            </summary>\n            <remarks>The amount of time to delete an item in the BigList is O(log N),\n            where N is the number of items in the list. \n            </remarks>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Removes a range of items at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down <paramref name=\"count\"/> indices\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete <paramref name=\"count\"/> items in the Deque is proportional\n            to the distance of index from the closest end of the Deque, plus <paramref name=\"count\"/>: \n            O(count + Min(<paramref name=\"index\"/>, Count - 1 - <paramref name=\"index\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the list to remove the range at. The\n            first item in the list has index 0.</param>\n            <param name=\"count\">The number of items to remove.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count, or <paramref name=\"count\"/> is less than zero\n            or too large.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Add(`0)\">\n            <summary>\n            Adds an item to the end of the BigList. The indices of all existing items\n            in the Deque are unchanged. \n            </summary>\n            <remarks>Adding an item takes, on average, constant time.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddToFront(`0)\">\n            <summary>\n            Adds an item to the beginning of the BigList. The indices of all existing items\n            in the Deque are increased by one, and the new item has index zero. \n            </summary>\n            <remarks>Adding an item takes, on average, constant time.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRange(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the end of BigList. The indices of all existing items\n            are unchanged. The last item in the added collection becomes the\n            last item in the BigList.\n            </summary>\n            <remarks>This method takes time O(M + log N), where M is the number of items in the \n            <paramref name=\"collection\"/>, and N is the size of the BigList.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRangeToFront(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the front of BigList. The indices of all existing items\n            in the are increased by the number of items in <paramref name=\"collection\"/>. \n            The first item in the added collection becomes the first item in the BigList.\n            </summary>\n            <remarks>This method takes time O(M + log N), where M is the number of items in the \n            <paramref name=\"collection\"/>, and N is the size of the BigList.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Clone\">\n            <summary>\n            Creates a new BigList that is a copy of this list.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <returns>A copy of the current list</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.System#ICloneable#Clone\">\n            <summary>\n            Creates a new BigList that is a copy of this list.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <returns>A copy of the current list</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this BigList. A new BigList is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then this method is the same as Clone.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>If T is a reference type, cloning the list takes time approximate O(N), where N is the number of items in the list.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRange(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Adds a BigList of items to the end of BigList. The indices of all existing items\n            are unchanged. The last item in <paramref name=\"list\"/> becomes the\n            last item in this list. The added list <paramref name=\"list\"/> is unchanged.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in <paramref name=\"list\"/> are\n            copied, storage is shared between the two lists until changes are made to the \n            shared sections.</remarks>\n            <param name=\"list\">The list of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRangeToFront(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Adds a BigList of items to the front of BigList. The indices of all existing items\n            are increased by the number of items in <paramref name=\"list\"/>. The first item in <paramref name=\"list\"/> \n            becomes the first item in this list. The added list <paramref name=\"list\"/> is unchanged.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in <paramref name=\"list\"/> are\n            copied, storage is shared between the two lists until changes are made to the \n            shared sections.</remarks>\n            <param name=\"list\">The list of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.op_Addition(Wintellect.PowerCollections.BigList{`0},Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Concatenates two lists together to create a new list. Both lists being concatenated\n            are unchanged. The resulting list contains all the items in <paramref name=\"first\"/>, followed\n            by all the items in <paramref name=\"second\"/>.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in both lists are\n            copied, storage is shared until changes are made to the \n            shared sections.</remarks>\n            <param name=\"first\">The first list to concatenate.</param>\n            <param name=\"second\">The second list to concatenate.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"first\"/> or <paramref name=\"second\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)\">\n            <summary>\n            Creates a new list that contains a subrange of elements from this list. The\n            current list is unchanged.\n            </summary>\n            <remarks>This method takes take O(log N), where N is the size of the current list. Although\n            the sub-range is conceptually copied, storage is shared between the two lists until a change\n            is made to the shared items.</remarks>\n            <remarks>If a view of a sub-range is desired, instead of a copy, use the\n            more efficient <see cref=\"M:Wintellect.PowerCollections.BigList`1.Range(System.Int32,System.Int32)\"/> method, which provides a view onto a sub-range of items.</remarks>\n            <param name=\"index\">The starting index of the sub-range.</param>\n            <param name=\"count\">The number of items in the sub-range. If this is zero,\n            the returned list is empty.</param>\n            <returns>A new list with the <paramref name=\"count\"/> items that start at <paramref name=\"index\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>\n            <para>If a copy of the sub-range is desired, use the <see cref=\"M:Wintellect.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)\"/> method instead.</para>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.ReverseInPlace(list.Range(3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"index\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> + <paramref name=\"count\"/> is greater than the\n            size of this list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetEnumerator(System.Int32,System.Int32)\">\n            <summary>\n            Enumerates a range of the items in the list, in order. The item at <paramref name=\"start\"/>\n            is enumerated first, then the next item at index 1, and so on. At most <paramref name=\"maxItems\"/>\n            items are enumerated. \n            </summary>\n            <remarks>Enumerating all of the items in the list take time O(N), where\n            N is the number of items being enumerated. Using GetEnumerator() or foreach\n            is much more efficient than accessing all items by index.</remarks>\n            <param name=\"start\">Index to start enumerating at.</param>\n            <param name=\"maxItems\">Max number of items to enumerate.</param>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on. Usually, the\n            foreach statement is used to call this method implicitly.\n            </summary>\n            <remarks>Enumerating all of the items in the list take time O(N), where\n            N is the number of items in the list. Using GetEnumerator() or foreach\n            is much more efficient than accessing all items by index.</remarks>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.NodeFromEnumerable(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Given an IEnumerable&lt;T&gt;, create a new Node with all of the \n            items in the enumerable. Returns null if the enumerable has no items.\n            </summary>\n            <param name=\"collection\">The collection to copy.</param>\n            <returns>Returns a Node, not shared or with any shared children, \n            with the items from the collection. If the collection was empty,\n            null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafFromEnumerator(System.Collections.Generic.IEnumerator{`0})\">\n            <summary>\n            Consumes up to MAXLEAF items from an Enumerator and places them in a leaf\n            node. If the enumerator is at the end, null is returned.\n            </summary>\n            <param name=\"enumerator\">The enumerator to take items from.</param>\n            <returns>A LeafNode with items taken from the enumerator. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.NCopiesOfNode(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a node that has N copies of the given node. \n            </summary>\n            <param name=\"copies\">Number of copies. Must be non-negative.</param>\n            <param name=\"node\">Node to make copies of.</param>\n            <returns>null if node is null or copies is 0. Otherwise, a node consisting of <paramref name=\"copies\"/> copies\n            of node.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">copies is negative.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CheckBalance\">\n            <summary>\n            Check the balance of the current tree and rebalance it if it is more than BALANCEFACTOR\n            levels away from fully balanced. Note that rebalancing a tree may leave it two levels away from \n            fully balanced.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Rebalance\">\n            <summary>\n            Rebalance the current tree. Once rebalanced, the depth of the current tree is no more than\n            two levels from fully balanced, where fully balanced is defined as having Fibonacci(N+2) or more items\n            in a tree of depth N.\n            </summary>\n            <remarks>The rebalancing algorithm is from \"Ropes: an Alternative to Strings\", by \n            Boehm, Atkinson, and Plass, in SOFTWARE--PRACTICE AND EXPERIENCE, VOL. 25(12), 1315–1330 (DECEMBER 1995).\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddNodeToRebalanceArray(Wintellect.PowerCollections.BigList{`0}.Node[],Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Part of the rebalancing algorithm. Adds a node to the rebalance array. If it is already balanced, add it directly, otherwise\n            add its children.\n            </summary>\n            <param name=\"rebalanceArray\">Rebalance array to insert into.</param>\n            <param name=\"node\">Node to add.</param>\n            <param name=\"shared\">If true, mark the node as shared before adding, because one\n            of its parents was shared.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddBalancedNodeToRebalanceArray(Wintellect.PowerCollections.BigList{`0}.Node[],Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Part of the rebalancing algorithm. Adds a balanced node to the rebalance array. \n            </summary>\n            <param name=\"rebalanceArray\">Rebalance array to insert into.</param>\n            <param name=\"balancedNode\">Node to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert the list to a new list by applying a delegate to each item in the collection. The resulting list\n            contains the result of applying <paramref name=\"converter\"/> to each item in the list, in\n            order. The current list is unchanged.\n            </summary>\n            <typeparam name=\"TDest\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in <paramref name=\"sourceCollection\"/>.</param>\n            <returns>The resulting BigList from applying <paramref name=\"converter\"/> to each item in this list.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Reverse\">\n            <summary>\n            Reverses the current list in place.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Reverse(System.Int32,System.Int32)\">\n            <summary>\n            Reverses the items in the range of <paramref name=\"count\"/> items starting from <paramref name=\"startIndex\"/>, in place.\n            </summary>\n            <param name=\"start\">The starting index of the range to reverse.</param>\n            <param name=\"count\">The number of items in range to reverse.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort\">\n            <summary>\n            Sorts the list in place.\n            </summary>\n            <remarks><para>The Quicksort algorithm is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Values are compared by using the IComparable or IComparable&lt;T&gt;\n            interface implementation on the type T.</para></remarks>\n            <exception cref=\"T:System.InvalidOperationException\">The type T does not implement either the IComparable or\n            IComparable&lt;T&gt; interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Sorts the list in place. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</remarks>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort(System.Comparison{`0})\">\n            <summary>\n            Sorts the list in place. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</remarks>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            in the order defined by the default ordering of the item type; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The type T does not implement either the IComparable or\n            IComparable&lt;T&gt; interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0,System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering defined by the passed IComparer&lt;T&gt; interface; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; interface used to sort the list.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0,System.Comparison{`0})\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering defined by the passed Comparison&lt;T&gt; delegate; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the list.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Count\">\n            <summary>\n            Gets the number of items stored in the BigList. The indices of the items\n            range from 0 to Count-1.\n            </summary>\n            <remarks>Getting the number of items in the BigList takes constant time.</remarks>\n            <value>The number of items in the BigList.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Item(System.Int32)\">\n            <summary>\n            Gets or sets an item in the list, by index.\n            </summary>\n            <remarks><para> Gettingor setting an item takes time O(log N), where N is the number of items\n            in the list.</para>\n            <para>To process each of the items in the list, using GetEnumerator() or a foreach loop is more efficient\n            that accessing each of the elements by index.</para></remarks>\n            <param name=\"index\">The index of the item to get or set. The first item in the list\n            has index 0, the last item has index Count-1.</param>\n            <returns>The value of the item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is less than zero or \n            greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.Node\">\n            <summary>\n            The base class for the two kinds of nodes in the tree: Concat nodes\n            and Leaf nodes.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.MarkShared\">\n            <summary>\n            Marks this node as shared by setting the shared variable.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Append(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node appended to this node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Prepend(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Prefpend a node before this node. Never changes this node, but returns\n            a new node with the given prepending done.\n            </summary>\n            <param name=\"node\">Node to prepend.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node prepended to this node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.PrependInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Prepend a node before this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to prepend.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.IsBalanced\">\n            <summary>\n            Determine if this node is balanced. A node is balanced if the number\n            of items is greater than\n            Fibonacci(Depth+2). Balanced nodes are never rebalanced unless\n            they go out of balance again.\n            </summary>\n            <returns>True if the node is balanced by this definition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.IsAlmostBalanced\">\n            <summary>\n            Determine if this node is almost balanced. A node is almost balanced if t\n            its depth is at most one greater than a fully balanced node with the same count.\n            </summary>\n            <returns>True if the node is almost balanced by this definition.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Count\">\n            <summary>\n            The number of items stored in the node (or below it).\n            </summary>\n            <value>The number of items in the node or below.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Shared\">\n            <summary>\n            Is this node shared by more that one list (or within a single)\n            lists. If true, indicates that this node, and any nodes below it,\n            may never be modified. Never becomes false after being set to \n            true.\n            </summary>\n            <value></value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Depth\">\n            <summary>\n            Gets the depth of this node. A leaf node has depth 0, \n            a concat node with two leaf children has depth 1, etc.\n            </summary>\n            <value>The depth of this node.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.LeafNode\">\n            <summary>\n            The LeafNode class is the type of node that lives at the leaf of a tree and holds\n            the actual items stored in the list. Each leaf holds at least 1, and at most MAXLEAF\n            items in the items array. The number of items stored is found in \"count\", which may\n            be less than \"items.Length\".\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.LeafNode.items\">\n            <summary>\n            Array that stores the items in the nodes. Always has a least \"count\" elements,\n            but may have more as padding.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.#ctor(`0)\">\n            <summary>\n            Creates a LeafNode that holds a single item.\n            </summary>\n            <param name=\"item\">Item to place into the leaf node.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.#ctor(System.Int32,`0[])\">\n            <summary>\n            Creates a new leaf node with the indicates count of item and the\n            </summary>\n            <param name=\"count\">Number of items. Can't be zero.</param>\n            <param name=\"newItems\">The array of items. The LeafNode takes\n            possession of this array.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.MergeLeafInPlace(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge\n            the other leaf node into this one (after this one) and return true.\n            </summary>\n            <param name=\"other\">Other node to possible merge.</param>\n            <returns>If <paramref name=\"other\"/> could be merged into this node, returns\n            true. Otherwise returns false and the current node is unchanged.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.MergeLeaf(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge\n            the other leaf node with this one (after this one) and return a new node with \n            the merged items. Does not modify this.\n            If no merging, return null.\n            </summary>\n            <param name=\"other\">Other node to possible merge.</param>\n            <returns>If the nodes could be merged, returns the new node. Otherwise\n            returns null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.ConcatNode\">\n            <summary>\n            A ConcatNode is an interior (non-leaf) node that represents the concatination of\n            the left and right child nodes. Both children must always be non-null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.left\">\n            <summary>\n            The left and right child nodes. They are never null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.right\">\n            <summary>\n            The left and right child nodes. They are never null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.depth\">\n            <summary>\n            The depth of this node -- the maximum length path to \n            a leaf. If this node has two children that are leaves, the\n            depth in 1.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.#ctor(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a new ConcatNode with the given children.\n            </summary>\n            <param name=\"left\">The left child. May not be null.</param>\n            <param name=\"right\">The right child. May not be null.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.NewNode(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a new node with the given children. Mark unchanged\n            children as shared. There are four\n            possible cases:\n            1. If one of the new children is null, the other new child is returned.\n            2. If neither child has changed, then this is marked as shared as returned.\n            3. If one child has changed, the other child is marked shared an a new node is returned.\n            4. If both children have changed, a new node is returned.\n            </summary>\n            <param name=\"newLeft\">New left child.</param>\n            <param name=\"newRight\">New right child.</param>\n            <returns>New node with the given children. Returns null if and only if both\n            new children are null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.NewNodeInPlace(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Updates a node with the given new children. If one of the new children is\n            null, the other is returned. If both are null, null is returned.\n            </summary>\n            <param name=\"newLeft\">New left child.</param>\n            <param name=\"newRight\">New right child.</param>\n            <returns>Node with the given children. Usually, but not always, this. Returns\n            null if and only if both new children are null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.ConcatNode.Depth\">\n            <summary>\n            The depth of this node -- the maximum length path to \n            a leaf. If this node has two children that are leaves, the\n            depth in 1.\n            </summary>\n            <value>The depth of this node.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.BigListRange\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of a BigList. The object stores a wrapped list, and a start/count indicating\n            a sub-range of the list. Insertion/deletions through the sub-range view\n            cause the count to change also; insertions and deletions directly on\n            the wrapped list do not.\n            </summary>\n            <remarks>This is different from Algorithms.Range in a very few respects:\n            it is specialized to only wrap BigList, and it is a lot more efficient in enumeration.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BigListRange.#ctor(Wintellect.PowerCollections.BigList{`0},System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the list. \n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1\">\n             <summary>\n             OrderedSet&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a sorted order, and duplicate items are not allowed. Each item has\n             an index in the set: the smallest item has index 0, the next smallest item has index 1,\n             and so forth.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedSet is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) type, where N is the number of keys in the tree.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.Set`1\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the items in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.Set`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor\">\n             <summary>\n             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this set.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedSet. The Compare method of the passed comparison object\n            will be used to compare items in this set.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this set. The set is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.\n            The set is initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedSet. The Compare method of the passed comparison object\n            will be used to compare items in this set. The set is\n            initialized with all the items in the given collection.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0},Wintellect.PowerCollections.RedBlackTree{`0})\">\n            <summary>\n            Creates a new OrderedSet given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"comparer\">Comparer for the set.</param>\n            <param name=\"tree\">Data for the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this set. A new set is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the set takes time O(N log N), where N is the number of items in the set.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the set. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the set while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the set takes time O(N log N), where N is the number\n            of items in the set.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the OrderedSet.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Contains(`0)\">\n            <summary>\n            Determines if this set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed.\n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.TryGetItem(`0,`0@)\">\n            <summary>\n            <para>Determines if this set contains an item equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the set was created. The set\n            is not changed.</para>\n            <para>If the set does contain an item equal to <paramref name=\"item\"/>, then the item from the set is returned.</para>\n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <example>\n            In the following example, the set contains strings which are compared in a case-insensitive manner. \n            <code>\n            OrderedSet&lt;string&gt; set = new OrderedSet&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);\n            set.Add(\"HELLO\");\n            string s;\n            bool b = set.TryGetItem(\"Hello\", out s);   // b receives true, s receives \"HELLO\".\n            </code>\n            </example>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"foundItem\">Returns the item from the set that was equal to <paramref name=\"item\"/>.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the item in the sorted set, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the set. If the set already contains an item equal to\n            one of the items in <paramref name=\"collection\"/>, that item will be replaced.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the set, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Remove(`0)\">\n            <summary>\n            Searches the set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the set. Items\n            not present in the set are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing the collection takes time O(M log N), where N is the number of items in the set, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the set.</param>\n            <returns>The number of items removed from the set.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Clear\">\n            <summary>\n            Removes all items from the set.\n            </summary>\n            <remarks>Clearing the sets takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CheckEmpty\">\n            <summary>\n            If the collection is empty, throw an invalid operation exception.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetFirst\">\n            <summary>\n            Returns the first item in the set: the item\n            that would appear first if the set was enumerated. This is also\n            the smallest item in the set.\n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The first item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetLast\">\n            <summary>\n            Returns the lastl item in the set: the item\n            that would appear last if the set was enumerated. This is also the\n            largest item in the set.\n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The lastl item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveFirst\">\n            <summary>\n            Removes the first item in the set. This is also the smallest item in the set.\n            </summary>\n            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The item that was removed, which was the smallest item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveLast\">\n            <summary>\n            Removes the last item in the set. This is also the largest item in the set.\n            </summary>\n            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The item that was removed, which was the largest item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CheckConsistentComparison(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Check that this set and another set were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherSet\">Other set to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherSet and this set don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsSupersetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a superset of another set. Neither set is modified.\n            This set is a superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            </summary>\n            <param name=\"otherSet\">OrderedSet to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsProperSupersetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a proper superset of another set. Neither set is modified.\n            This set is a proper superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            Additionally, this set must have strictly more items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in \n            <paramref name=\"otherSet\"/>.</remarks>\n            <param name=\"otherSet\">OrderedSet to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsSubsetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsProperSubsetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a proper subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>. Additionally, this set must have strictly \n            fewer items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsEqualTo(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is equal to another set. This set is equal to\n            <paramref name=\"otherSet\"/> if they contain the same items.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this set.</remarks>\n            <param name=\"otherSet\">Set to compare to</param>\n            <returns>True if this set is equal to <paramref name=\"otherSet\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.UnionWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. This set receives\n            the union of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsDisjointFrom(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is disjoint from another set. Two sets are disjoint\n            if no item from one set is equal to any item in the other set.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to check disjointness with.</param>\n            <returns>True if the two sets are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Union(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. A new set is \n            created with the union of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <returns>The union of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IntersectionWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. This set receives\n            the intersection of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Intersection(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. A new set is \n            created with the intersection of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <returns>The intersection of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.DifferenceWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. This set receives\n            the difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Difference(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. A new set is \n            created with the difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <returns>The difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.SymmetricDifferenceWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. This set receives\n            the symmetric difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.SymmetricDifference(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. A new set is \n            created with the symmetric difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <returns>The symmetric difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.AsList\">\n            <summary>\n            Get a read-only list view of the items in this ordered set. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this OrderedSet.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the items in the set in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.Reversed()) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedSet.View of items in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The items are enumerated in sorted order.\n             Items equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.Range(from, true, to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.RangeFrom(from, true)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.RangeTo(to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare items in this set. \n            </summary>\n            <value>If the set was created using a comparer, that comparer is returned. If the set was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Count\">\n            <summary>\n            Returns the number of items in the set.\n            </summary>\n            <remarks>The size of the set is returned in constant time.</remarks>\n            <value>The number of items in the set.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1.ListView\">\n            <summary>\n            The nested class that provides a read-only list view\n            of all or part of the collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.ListView.#ctor(Wintellect.PowerCollections.OrderedSet{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Create a new list view wrapped the given set.\n            </summary>\n            <param name=\"mySet\"></param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1.View\">\n             <summary>\n             The OrderedSet&lt;T&gt;.View class is used to look at a subset of the Items\n             inside an ordered set. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying set changes, the view changes in sync. If a change is made\n             to the view, the underlying set changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items \n             in a subset of the OrderedSet. For example:</p>\n            <code>\n             foreach(T item in set.Range(from, to)) {\n                // process item\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.#ctor(Wintellect.PowerCollections.OrderedSet{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the view.\n            </summary>\n            <param name=\"mySet\">OrderedSet being viewed</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.ItemInView(`0)\">\n            <summary>\n            Determine if the given item lies within the bounds of this view.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>True if the item is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetEnumerator\">\n            <summary>\n            Enumerate all the items in this view.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Clear\">\n            <summary>\n            Removes all the items within this view from the underlying set.\n            </summary>\n            <example>The following removes all the items that start with \"A\" from an OrderedSet.\n            <code>\n            set.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Add(`0)\">\n            <summary>\n            Adds a new item to the set underlying this View. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set underlying this View. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Remove(`0)\">\n            <summary>\n            Searches the underlying set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged. If the item is outside\n            the range of this view, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set, or\n            was outside the range of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Contains(`0)\">\n            <summary>\n            Determines if this view of the set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed. If \n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>, and <paramref name=\"item\"/> is within\n            the range of this view. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the item in the view, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.AsList\">\n            <summary>\n            Get a read-only list view of the items in this view. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Reversed\">\n            <summary>\n            Creates a new View that has the same items as this view, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view, with the same upper \n            and lower bounds.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetFirst\">\n            <summary>\n            Returns the first item in this view: the item\n            that would appear first if the view was enumerated. \n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The first item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetLast\">\n            <summary>\n            Returns the last item in the view: the item\n            that would appear last if the view was enumerated. \n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The last item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.View.Count\">\n            <summary>\n            Number of items in this view.\n            </summary>\n            <value>Number of items that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.View.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Deque`1\">\n            <summary>\n            <para>The Deque class implements a type of list known as a Double Ended Queue. A Deque\n            is quite similar to a List, in that items have indices (starting at 0), and the item at any\n            index can be efficiently retrieved. The difference between a List and a Deque lies in the\n            efficiency of inserting elements at the beginning. In a List, items can be efficiently added\n            to the end, but inserting an item at the beginning of the List is slow, taking time \n            proportional to the size of the List. In a Deque, items can be added to the beginning \n            or end equally efficiently, regardless of the number of items in the Deque. As a trade-off\n            for this increased flexibility, Deque is somewhat slower than List (but still constant time) when\n            being indexed to get or retrieve elements. </para>\n            </summary>\n            <remarks>\n            <para>The Deque class can also be used as a more flexible alternative to the Queue \n            and Stack classes. Deque is as efficient as Queue and Stack for adding or removing items, \n            but is more flexible: it allows access\n            to all items in the queue, and allows adding or removing from either end.</para>\n            <para>Deque is implemented as a ring buffer, which is grown as necessary. The size\n            of the buffer is doubled whenever the existing capacity is too small to hold all the\n            elements.</para>\n            </remarks>\n            <typeparam name=\"T\">The type of items stored in the Deque.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.#ctor\">\n            <summary>\n            Create a new Deque that is initially empty.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Create a new Deque initialized with the items from the passed collection,\n            in order.\n            </summary>\n            <param name=\"collection\">A collection of items to initialize the Deque with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the Deque into an array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.TrimToSize\">\n            <summary>\n            Trims the amount of memory used by the Deque by changing\n            the Capacity to be equal to Count. If no more items will be added\n            to the Deque, calling TrimToSize will reduce the amount of memory\n            used by the Deque.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Clear\">\n            <summary>\n            Removes all items from the Deque.\n            </summary>\n            <remarks>Clearing the Deque takes a small constant amount of time, regardless of\n            how many items are currently in the Deque.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on. If the items\n            are added to or removed from the Deque during enumeration, the \n            enumeration ends with an InvalidOperationException.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CreateInitialBuffer(`0)\">\n            <summary>\n            Creates the initial buffer and initialized the Deque to contain one initial\n            item.\n            </summary>\n            <param name=\"firstItem\">First and only item for the Deque.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index in the Deque. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> move up one index\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to insert an item in the Deque is proportional\n            to the distance of index from the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/>)).\n            Thus, inserting an item at the front or end of the Deque is always fast; the middle of\n            of the Deque is the slowest place to insert.\n            </remarks>\n            <param name=\"index\">The index in the Deque to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            front item in the Deque has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Inserts a collection of items at the given index in the Deque. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices in the Deque\n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert a collection in the Deque is proportional\n            to the distance of index from the closest end of the Deque, plus the number of items\n            inserted (M): \n            O(M + Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the Deque to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            front item in the Deque has index 0.</param>\n            <param name=\"collection\">The collection of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down one index\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete an item in the Deque is proportional\n            to the distance of index from the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - 1 - <paramref name=\"index\"/>)).\n            Thus, deleting an item at the front or end of the Deque is always fast; the middle of\n            of the Deque is the slowest place to delete.\n            </remarks>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Removes a range of items at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down <paramref name=\"count\"/> indices\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete <paramref name=\"count\"/> items in the Deque is proportional\n            to the distance to the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/> - <paramref name=\"count\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the list to remove the range at. The\n            first item in the list has index 0.</param>\n            <param name=\"count\">The number of items to remove.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count, or <paramref name=\"count\"/> is less than zero\n            or too large.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.IncreaseBuffer\">\n            <summary>\n            Increase the amount of buffer space. When calling this method, the Deque\n            must not be empty. If start and end are equal, that indicates a completely\n            full Deque.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddToFront(`0)\">\n            <summary>\n            Adds an item to the front of the Deque. The indices of all existing items\n            in the Deque are increased by 1. This method is \n            equivalent to <c>Insert(0, item)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Adding an item to the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddManyToFront(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the front of the Deque. The indices of all existing items\n            in the Deque are increased by the number of items inserted. The first item in the added collection becomes the\n            first item in the Deque. \n            </summary>\n            <remarks>This method takes time O(M), where M is the number of items in the \n            <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddToBack(`0)\">\n            <summary>\n            Adds an item to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>Insert(Count, item)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Adding an item to the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Add(`0)\">\n            <summary>\n            Adds an item to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>AddToBack(item)</c>.\n            </summary>\n            <remarks>Adding an item to the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddManyToBack(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. The last item in the added collection becomes the\n            last item in the Deque.\n            </summary>\n            <remarks>This method takes time O(M), where M is the number of items in the \n            <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection of item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveFromFront\">\n            <summary>\n            Removes an item from the front of the Deque. The indices of all existing items\n            in the Deque are decreased by 1. This method is \n            equivalent to <c>RemoveAt(0)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Removing an item from the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item that was removed.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveFromBack\">\n            <summary>\n            Removes an item from the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>RemoveAt(Count-1)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Removing an item from the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetAtFront\">\n            <summary>\n            Retreives the item currently at the front of the Deque. The Deque is \n            unchanged. This method is \n            equivalent to <c>deque[0]</c> (except that a different exception is thrown).\n            </summary>\n            <remarks>Retreiving the item at the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item at the front of the Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetAtBack\">\n            <summary>\n            Retreives the item currently at the back of the Deque. The Deque is \n            unchanged. This method is \n            equivalent to <c>deque[deque.Count - 1]</c> (except that a different exception is thrown).\n            </summary>\n            <remarks>Retreiving the item at the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item at the back of the Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Clone\">\n            <summary>\n            Creates a new Deque that is a copy of this one.\n            </summary>\n            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>\n            <returns>A copy of the current deque.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.System#ICloneable#Clone\">\n            <summary>\n            Creates a new Deque that is a copy of this one.\n            </summary>\n            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>\n            <returns>A copy of the current deque.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this Deque. A new Deque is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the Deque takes time O(N), where N is the number of items in the Deque.</para></remarks>\n            <returns>The cloned Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Count\">\n            <summary>\n            Gets the number of items currently stored in the Deque. The last item\n            in the Deque has index Count-1.\n            </summary>\n            <remarks>Getting the count of items in the Deque takes a small constant\n            amount of time.</remarks>\n            <value>The number of items stored in this Deque.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Capacity\">\n            <summary>\n            Gets or sets the capacity of the Deque. The Capacity is the number of\n            items that this Deque can hold without expanding its internal buffer. Since\n            Deque will automatically expand its buffer when necessary, in almost all cases\n            it is unnecessary to worry about the capacity. However, if it is known that a\n            Deque will contain exactly 1000 items eventually, it can slightly improve \n            efficiency to set the capacity to 1000 up front, so that the Deque does not\n            have to expand automatically.\n            </summary>\n            <value>The number of items that this Deque can hold without expanding its\n            internal buffer.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The capacity is being set\n            to less than Count, or to too large a value.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Item(System.Int32)\">\n            <summary>\n            Gets or sets an item at a particular index in the Deque. \n            </summary>\n            <remarks>Getting or setting the item at a particular index takes a small constant amount\n            of time, no matter what index is used.</remarks>\n            <param name=\"index\">The index of the item to retrieve or change. The front item has index 0, and\n            the back item has index Count-1.</param>\n            <returns>The value at the indicated index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The index is less than zero or greater than or equal\n            to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DuplicatePolicy\">\n            <summary>\n            Describes what to do if a key is already in the tree when doing an\n            insertion.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1\">\n             <summary>\n             The base implementation for various collections classes that use Red-Black trees\n             as part of their implementation. This class should not (and can not) be \n             used directly by end users; it's only for internal use by the collections package.\n             </summary>\n             <remarks>\n             The Red-Black tree manages items of type T, and uses a IComparer&lt;T&gt; that\n             compares items to sort the tree. Multiple items can compare equal and be stored\n             in the tree. Insert, Delete, and Find operations are provided in their full generality;\n             all operations allow dealing with either the first or last of items that compare equal. \n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetNodeStack\">\n            <summary>\n            Create an array of Nodes big enough for any path from top \n            to bottom. This is cached, and reused from call-to-call, so only one\n            can be around at a time per tree.\n            </summary>\n            <returns>The node stack.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Initialize a red-black tree, using the given interface instance to compare elements. Only\n            Compare is used on the IComparer interface.\n            </summary>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to sort keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Clone\">\n            <summary>\n            Clone the tree, returning a new tree containing the same items. Should\n            take O(N) take.\n            </summary>\n            <returns>Clone version of this tree.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Find(`0,System.Boolean,System.Boolean,`0@)\">\n            <summary>\n            Finds the key in the tree. If multiple items in the tree have\n            compare equal to the key, finds the first or last one. Optionally replaces the item\n            with the one searched for.\n            </summary>\n            <param name=\"key\">Key to search for.</param>\n            <param name=\"findFirst\">If true, find the first of duplicates, else finds the last of duplicates.</param>\n            <param name=\"replace\">If true, replaces the item with key (if function returns true)</param>\n            <param name=\"item\">Returns the found item, before replacing (if function returns true).</param>\n            <returns>True if the key was found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.FindIndex(`0,System.Boolean)\">\n            <summary>\n            Finds the index of the key in the tree. If multiple items in the tree have\n            compare equal to the key, finds the first or last one. \n            </summary>\n            <param name=\"key\">Key to search for.</param>\n            <param name=\"findFirst\">If true, find the first of duplicates, else finds the last of duplicates.</param>\n            <returns>Index of the item found if the key was found, -1 if not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetItemByIndex(System.Int32)\">\n            <summary>\n            Find the item at a particular index in the tree.\n            </summary>\n            <param name=\"index\">The zero-based index of the item. Must be &gt;= 0 and &lt; Count.</param>\n            <returns>The item at the particular index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Insert(`0,Wintellect.PowerCollections.DuplicatePolicy,`0@)\">\n            <summary>\n            Insert a new node into the tree, maintaining the red-black invariants.\n            </summary>\n            <remarks>Algorithm from Sedgewick, \"Algorithms\".</remarks>\n            <param name=\"item\">The new item to insert</param>\n            <param name=\"dupPolicy\">What to do if equal item is already present.</param>\n            <param name=\"previous\">If false, returned, the previous item.</param>\n            <returns>false if duplicate exists, otherwise true.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.InsertSplit(Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,System.Boolean@)\">\n            <summary>\n            Split a node with two red children (a 4-node in the 2-3-4 tree formalism), as\n            part of an insert operation.\n            </summary>\n            <param name=\"ggparent\">great grand-parent of \"node\", can be null near root</param>\n            <param name=\"gparent\">grand-parent of \"node\", can be null near root</param>\n            <param name=\"parent\">parent of \"node\", can be null near root</param>\n            <param name=\"node\">Node to split, can't be null</param>\n            <param name=\"rotated\">Indicates that rotation(s) occurred in the tree.</param>\n            <returns>Node to continue searching from.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Rotate(Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Performs a rotation involving the node, it's child and grandchild. The counts of \n            childs and grand-child are set the correct values from their children; this is important\n            if they have been adjusted on the way down the try as part of an insert/delete.\n            </summary>\n            <param name=\"node\">Top node of the rotation. Can be null if child==root.</param>\n            <param name=\"child\">One child of \"node\". Not null.</param>\n            <param name=\"gchild\">One child of \"child\". Not null.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Delete(`0,System.Boolean,`0@)\">\n            <summary>\n            Deletes a key from the tree. If multiple elements are equal to key, \n            deletes the first or last. If no element is equal to the key, \n            returns false.\n            </summary>\n            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, \n            rotating and recoloring along the way to always keep the current node red, which \n            ensures that the node we delete is red. The details are quite complex, however! </remarks>\n            <param name=\"key\">Key to delete.</param>\n            <param name=\"deleteFirst\">Which item to delete if multiple are equal to key. True to delete the first, false to delete last.</param>\n            <param name=\"item\">Returns the item that was deleted, if true returned.</param>\n            <returns>True if an element was deleted, false if no element had \n            specified key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetEnumerator\">\n            \n            <summary>\n            Enumerate all the items in-order\n            </summary>\n            <returns>An enumerator for all the items, in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Enumerate all the items in-order\n            </summary>\n            <returns>An enumerator for all the items, in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.BoundedRangeTester(System.Boolean,`0,System.Boolean,`0)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"useFirst\">If true, bound the range on the bottom by first.</param>\n            <param name=\"first\">If useFirst is true, the inclusive lower bound.</param>\n            <param name=\"useLast\">If true, bound the range on the top by last.</param>\n            <param name=\"last\">If useLast is true, the exclusive upper bound.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DoubleBoundedRangeTester(`0,System.Boolean,`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"firstInclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"lastInclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.LowerBoundedRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by a lower bound.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"inclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.UpperBoundedRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by upper bound.\n            </summary>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"inclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EqualRangeTester(`0)\">\n            <summary>\n            Gets a range tester that defines a range by all items equal to an item.\n            </summary>\n            <param name=\"equalTo\">The item that is contained in the range.</param>\n            <returns>A RangeTester delegate that tests for an item equal to <paramref name=\"equalTo\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EntireRangeTester(`0)\">\n            <summary>\n            A range tester that defines a range that is the entire tree.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>Always returns 0.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Enumerate the items in a custom range in the tree. The range is determined by \n            a RangeTest delegate.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeInOrder(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Enumerate all the items in a custom range, under and including node, in-order.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <returns>An enumerable of the items.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeReversed(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Enumerate the items in a custom range in the tree, in reversed order. The range is determined by \n            a RangeTest delegate.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in reversed order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeInReversedOrder(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Enumerate all the items in a custom range, under and including node, in reversed order.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <returns>An enumerable of the items, in reversed oreder.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DeleteItemFromRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,`0@)\">\n            <summary>\n            Deletes either the first or last item from a range, as identified by a RangeTester\n            delegate. If the range is empty, returns false.\n            </summary>\n            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, \n            rotating and recoloring along the way to always keep the current node red, which \n            ensures that the node we delete is red. The details are quite complex, however! </remarks>\n            <param name=\"rangeTester\">Range to delete from.</param>\n            <param name=\"deleteFirst\">If true, delete the first item from the range, else the last.</param>\n            <param name=\"item\">Returns the item that was deleted, if true returned.</param>\n            <returns>True if an element was deleted, false if the range is empty.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DeleteRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Delete all the items in a range, identified by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range to delete.</param>\n            <returns>The number of items deleted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CountRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Count the items in a custom range in the tree. The range is determined by \n            a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <returns>The number of items in the range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CountRangeUnderNode(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node,System.Boolean,System.Boolean)\">\n            <summary>\n            Count all the items in a custom range, under and including node.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <param name=\"belowRangeTop\">This node and all under it are either in the range or below it.</param>\n            <param name=\"aboveRangeBottom\">This node and all under it are either in the range or above it.</param>\n            <returns>The number of items in the range, under and include node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.FirstItemInRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)\">\n            <summary>\n            Find the first item in a custom range in the tree, and it's index. The range is determined\n            by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"item\">Returns the item found, if true was returned.</param>\n            <returns>Index of first item in range if range is non-empty, -1 otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.LastItemInRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)\">\n            <summary>\n            Find the last item in a custom range in the tree, and it's index. The range is determined\n            by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"item\">Returns the item found, if true was returned.</param>\n            <returns>Index of the item if range is non-empty, -1 otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.ElementCount\">\n            <summary>\n            Returns the number of elements in the tree.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1.Node\">\n            <summary>\n            The class that is each node in the red-black tree.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.IncrementCount\">\n            <summary>\n            Add one to the Count.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.DecrementCount\">\n            <summary>\n            Subtract one from the Count. The current\n            Count must be non-zero.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.Clone\">\n            <summary>\n            Clones a node and all its descendants.\n            </summary>\n            <returns>The cloned node.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.Node.IsRed\">\n            <summary>\n            Is this a red node?\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.Node.Count\">\n            <summary>\n            Get or set the Count field -- a 31-bit field\n            that holds the number of nodes at or below this\n            level.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1.RangeTester\">\n            <summary>\n            A delegate that tests if an item is within a custom range. The range must be a contiguous\n            range of items with the ordering of this tree. The range test function must test\n            if an item is before, withing, or after the range.\n            </summary>\n            <param name=\"item\">Item to test against the range.</param>\n            <returns>Returns negative if item is before the range, zero if item is withing the range,\n            and positive if item is after the range.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Bag`1\">\n             <summary>\n             Bag&lt;T&gt; is a collection that contains items of type T. \n             Unlike a Set, duplicate items (items that compare equal to each other) are allowed in an Bag. \n             </summary>\n             <remarks>\n             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; \n             then the Equals method of that interface will be used to compare items, otherwise the Equals\n             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed\n             to the constructor to use to compare items.</p>\n             <p>Bag is implemented as a hash table. Inserting, deleting, and looking up an\n             an element all are done in approximately constant time, regardless of the number of items in the bag.</p>\n             <p>When multiple equal items are stored in the bag, they are stored as a representative item and a count. \n             If equal items can be distinguished, this may be noticable. For example, if a case-insensitive\n             comparer is used with a Bag&lt;string&gt;, and both \"hello\", and \"HELLO\" are added to the bag, then the\n             bag will appear to contain two copies of \"hello\" (the representative item).</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.OrderedBag`1\"/> is similar, but uses comparison instead of hashing, maintain\n             the items in sorted order, and stores distinct copies of items that compare equal.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedBag`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NewPair(`0,System.Int32)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with an item and a count.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <param name=\"count\">The number of appearances.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a count of zero.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor\">\n             <summary>\n             Creates a new Bag. \n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object\n            will be used to compare items in this bag for equality.\n            </summary>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new Bag. The bag is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the Bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object\n            will be used to compare items in this bag. The bag is\n            initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the Bag.</param>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Collections.Generic.IEqualityComparer{`0},Wintellect.PowerCollections.Hash{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Int32)\">\n            <summary>\n            Creates a new Bag given a comparer and a hash that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"equalityComparer\">IEqualityComparer for the bag.</param>\n            <param name=\"keyEqualityComparer\">IEqualityComparer for the key.</param>\n            <param name=\"hash\">Data for the bag.</param>\n            <param name=\"count\">Size of the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of unquie items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this bag. A new bag is created with a clone of\n            each element of this bag, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>\n            <returns>The cloned bag.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NumberOfCopies(`0)\">\n            <summary>\n            Returns the number of copies of <paramref name=\"item\"/> in the bag. \n            </summary>\n            <remarks>NumberOfCopies() takes approximately constant time, no matter how many items\n            are stored in the bag.</remarks>\n            <param name=\"item\">The item to search for in the bag.</param>\n            <returns>The number of items in the bag that compare equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.GetRepresentativeItem(`0,`0@)\">\n            <summary>\n            Returns the representative item stored in the bag that is equal to\n            the provided item. Also returns the number of copies of the item in the bag.\n            </summary>\n            <param name=\"item\">Item to find in the bag.</param>\n            <param name=\"representative\">If one or more items equal to <paramref name=\"item\"/> are present in the\n            bag, returns the representative item. If no items equal to <paramref name=\"item\"/> are stored in the bag, \n            returns <paramref name=\"item\"/>.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> stored in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the bag. \n            If an item is present multiple times in the bag, the representative item is yielded by the\n            enumerator multiple times. The order of enumeration is haphazard and may change.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the bag while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the bag takes time O(N), where N is the number\n            of items in the bag.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the Bag.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Contains(`0)\">\n            <summary>\n            Determines if this bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed.\n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>. False if the bag does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.DistinctItems\">\n            <summary>\n            Enumerates all the items in the bag, but enumerates equal items\n            just once, even if they occur multiple times in the bag.\n            </summary>\n            <remarks>If the bag is changed while items are being enumerated, the\n            enumeration will terminate with an InvalidOperationException.</remarks>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Add(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case, the count of items for the representative item is increased by one, but the existing\n            represetative item is unchanged.\n            </summary>\n            <remarks>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.AddRepresentative(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case (unlike Add), the new item becomes the representative item.\n            </summary>\n            <remarks>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.ChangeNumberOfCopies(`0,System.Int32)\">\n            <summary>\n            Changes the number of copies of an existing item in the bag, or adds the indicated number\n            of copies of the item to the bag. \n            </summary>\n            <remarks>\n            <para>Changing the number of copies takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to change the number of copies of. This may or may not already be present in the bag.</param>\n            <param name=\"numCopies\">The new number of copies of the item.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the bag. \n            </summary>\n            <remarks>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Remove(`0)\">\n            <summary>\n            Searches the bag for one item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. \n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes approximated constant time,\n            regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.RemoveAllCopies(`0)\">\n            <summary>\n            Searches the bag for all items equal to <paramref name=\"item\"/>, and \n            removes all of them from the bag. If not found, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparer instance used\n            to create the bag.</para>\n            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is\n            the number of items equal to <paramref name=\"item\"/>.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>The number of copies of <paramref name=\"item\"/> that were found and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the bag. Items that\n            are not present in the bag are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparer instance used\n            to create the bag.</para>\n            <para>Removing the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the bag.</param>\n            <returns>The number of items removed from the bag.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Clear\">\n            <summary>\n            Removes all items from the bag.\n            </summary>\n            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.CheckConsistentComparison(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Check that this bag and another bag were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherBag\">Other bag to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherBag and this bag don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsEqualTo(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is equal to another bag. This bag is equal to\n            <paramref name=\"otherBag\"/> if they contain the same number of \n            of copies of equal elements.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(N), where N is the number of unique items in \n            this bag.</remarks>\n            <param name=\"otherBag\">Bag to compare to</param>\n            <returns>True if this bag is equal to <paramref name=\"otherBag\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsSupersetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a superset of another bag. Neither bag is modified.\n            This bag is a superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(M), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsProperSupersetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a proper superset of another bag. Neither bag is modified.\n            This bag is a proper superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times. Additional, this bag must have strictly more items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">Set to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsSubsetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a subset of another ba11 items in this bag.\n            </summary>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsProperSubsetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a proper subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times. Additional, this bag must have strictly fewer items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(N), where N is the number of unique items in this bag.</remarks>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsDisjointFrom(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is disjoint from another bag. Two bags are disjoint\n            if no item from one set is equal to any item in the other bag.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to check disjointness with.</param>\n            <returns>True if the two bags are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.UnionWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives\n            the union of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the \n            two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Union(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is \n            created with the union of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <returns>The union of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SumWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. The sum of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives\n            the sum of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M), where M is the size of the \n            other bag..</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Sum(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. he sum of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is \n            created with the sum of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <returns>The sum of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IntersectionWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives\n            the intersection of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Intersection(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the intersection contains the item Minimum(X,Y) times. A new bag is \n            created with the intersection of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <returns>The intersection of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.DifferenceWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives\n            the difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M), where M is the size of the \n            other bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Difference(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is \n            created with the difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N), where M and N are the size\n            of the two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <returns>The difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SymmetricDifferenceWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. This bag receives\n            the symmetric difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SymmetricDifference(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. A new bag is \n            created with the symmetric difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <returns>The symmetric difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Bag`1.Comparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare items in this bag. \n            </summary>\n            <value>If the bag was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Bag`1.Count\">\n            <summary>\n            Returns the number of items in the bag.\n            </summary>\n            <remarks>The size of the bag is returned in constant time.</remarks>\n            <value>The number of items in the bag.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Hash`1\">\n             <summary>\n             The base implementation for various collections classes that use hash tables\n             as part of their implementation. This class should not (and can not) be \n             used directly by end users; it's only for internal use by the collections package. The Hash\n             does not handle duplicate values.\n             </summary>\n             <remarks>\n             The Hash manages items of type T, and uses a IComparer&lt;ItemTYpe&gt; that\n             hashes compares items to hash items into the table.  \n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Constructor. Create a new hash table.\n            </summary>\n            <param name=\"equalityComparer\">The comparer to use to compare items. </param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetEnumerationStamp\">\n            <summary>\n            Gets the current enumeration stamp. Call CheckEnumerationStamp later\n            with this value to throw an exception if the hash table is changed.\n            </summary>\n            <returns>The current enumeration stamp.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetFullHash(`0)\">\n            <summary>\n            Gets the full hash code for an item.\n            </summary>\n            <param name=\"item\">Item to get hash code for.</param>\n            <returns>The full hash code. It is never zero.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetHashValuesFromFullHash(System.Int32,System.Int32@,System.Int32@)\">\n            <summary>\n            Get the initial bucket number and skip amount from the full hash value.\n            </summary>\n            <param name=\"hash\">The full hash value.</param>\n            <param name=\"initialBucket\">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>\n            <param name=\"skip\">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetHashValues(`0,System.Int32@,System.Int32@)\">\n            <summary>\n            Gets the full hash value, initial bucket number, and skip amount for an item.\n            </summary>\n            <param name=\"item\">Item to get hash value of.</param>\n            <param name=\"initialBucket\">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>\n            <param name=\"skip\">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>\n            <returns>The full hash value. This is never zero.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.EnsureEnoughSlots(System.Int32)\">\n            <summary>\n            Make sure there are enough slots in the hash table that <paramref name=\"additionalItems\"/>\n            items can be inserted into the table.\n            </summary>\n            <param name=\"additionalItems\">Number of additional items we are inserting.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.ShrinkIfNeeded\">\n            <summary>\n            Check if the number of items in the table is small enough that\n            we should shrink the table again.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetSecondaryShift(System.Int32)\">\n            <summary>\n            Given the size of a hash table, compute the \"secondary shift\" value -- the shift\n            that is used to determine the skip amount for collision resolution.\n            </summary>\n            <param name=\"newSize\">The new size of the table.</param>\n            <returns>The secondary skip amount.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.ResizeTable(System.Int32)\">\n            <summary>\n            Resize the hash table to the given new size, moving all items into the\n            new hash table.\n            </summary>\n            <param name=\"newSize\">The new size of the hash table. Must be a power\n            of two.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Insert(`0,System.Boolean,`0@)\">\n            <summary>\n            Insert a new item into the hash table. If a duplicate item exists, can replace or\n            do nothing.\n            </summary>\n            <param name=\"item\">The item to insert.</param>\n            <param name=\"replaceOnDuplicate\">If true, duplicate items are replaced. If false, nothing\n            is done if a duplicate already exists.</param>\n            <param name=\"previous\">If a duplicate was found, returns it (whether replaced or not).</param>\n            <returns>True if no duplicate existed, false if a duplicate was found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Delete(`0,`0@)\">\n            <summary>\n            Deletes an item from the hash table. \n            </summary>\n            <param name=\"item\">Item to search for and delete.</param>\n            <param name=\"itemDeleted\">If true returned, the actual item stored in the hash table (must be \n            equal to <paramref name=\"item\"/>, but may not be identical.</param>\n            <returns>True if item was found and deleted, false if item wasn't found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Find(`0,System.Boolean,`0@)\">\n            <summary>\n            Find an item in the hash table. If found, optionally replace it with the\n            finding item.\n            </summary>\n            <param name=\"find\">Item to find.</param>\n            <param name=\"replace\">If true, replaces the equal item in the hash table\n            with <paramref name=\"item\"/>.</param>\n            <param name=\"item\">Returns the equal item found in the table, if true was returned.</param>\n            <returns>True if the item was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetEnumerator\">\n            <summary>\n            Enumerate all of the items in the hash table. The items\n            are enumerated in a haphazard, unpredictable order.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates the items\n            in the hash table.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Enumerate all of the items in the hash table. The items\n            are enumerated in a haphazard, unpredictable order.\n            </summary>\n            <returns>An IEnumerator that enumerates the items\n            in the hash table.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Clone(System.Converter{`0,`0})\">\n            <summary>\n            Creates a clone of this hash table.\n            </summary>\n            <param name=\"cloneItem\">If non-null, this function is applied to each item when cloning. It must be the \n            case that this function does not modify the hash code or equality function.</param>\n            <returns>A shallow clone that contains the same items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Runtime#Serialization#ISerializable#GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\n            <summary>\n            Serialize the hash table. Called from the serialization infrastructure.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\n            <summary>\n            Called on deserialization. We cannot deserialize now, because hash codes\n            might not be correct now. We do real deserialization in the OnDeserialization call.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Runtime#Serialization#IDeserializationCallback#OnDeserialization(System.Object)\">\n            <summary>\n            Deserialize the hash table. Called from the serialization infrastructure when \n            the object graph has finished deserializing.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.ElementCount\">\n            <summary>\n            Get the number of items in the hash table.\n            </summary>\n            <value>The number of items stored in the hash table.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.SlotCount\">\n            <summary>\n            Get the number of slots in the hash table. Exposed internally\n            for testing purposes.\n            </summary>\n            <value>The number of slots in the hash table.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.LoadFactor\">\n            <summary>\n            Get or change the load factor. Changing the load factor may cause\n            the size of the table to grow or shrink accordingly.\n            </summary>\n            <value></value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Hash`1.Slot\">\n            <summary>\n            The structure that has each slot in the hash table. Each slot has three parts:\n            1. The collision bit. Indicates whether some item visited this slot but had to\n            keep looking because the slot was full. \n            2. 31-bit full hash value of the item. If zero, the slot is empty.\n            3. The item itself.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Slot.Clear\">\n            <summary>\n            Clear this slot, leaving the collision bit alone.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.HashValue\">\n            <summary>\n            The full hash value associated with the value in this slot, or zero\n            if the slot is empty.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.Empty\">\n            <summary>\n            Is this slot empty?\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.Collision\">\n            <summary>\n            The \"Collision\" bit indicates that some value hit this slot and\n            collided, so had to try another slot.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2\">\n             <summary>\n             <para>The OrderedMultiDictionary class that associates values with a key. Unlike an OrderedDictionary,\n             each key can have multiple values associated with it. When indexing an OrderedMultidictionary, instead\n             of a single value associated with a key, you retrieve an enumeration of values.</para>\n             <para>All of the key are stored in sorted order. Also, the values associated with a given key \n             are kept in sorted order as well.</para>\n             <para>When constructed, you can chose to allow the same value to be associated with a key multiple\n             times, or only one time. </para>\n             </summary>\n             <typeparam name=\"TKey\">The type of the keys.</typeparam>\n             <typeparam name=\"TValue\">The of values associated with the keys.</typeparam>\n            <seealso cref=\"T:Wintellect.PowerCollections.MultiDictionary`2\"/>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedDictionary`2\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NewPair(`0,`1)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a default value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyRange(`0)\">\n            <summary>\n            Get a RangeTester that maps to the range of all items with the \n            given key.\n            </summary>\n            <param name=\"key\">Key in the given range.</param>\n            <returns>A RangeTester delegate that selects the range of items with that range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.DoubleBoundedKeyRangeTester(`0,System.Boolean,`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"firstInclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"lastInclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.LowerBoundedKeyRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by a lower bound.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"inclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.UpperBoundedKeyRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by upper bound.\n            </summary>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"inclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean)\">\n            <summary>\n            Create a new OrderedMultiDictionary. The default ordering of keys and values are used. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation\n            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be\n            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparison\">A delegate to a method that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0},System.Comparison{`1})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparison\">A delegate to a method that will be used to compare keys.</param>\n            <param name=\"valueComparison\">A delegate to a method that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueComparer\">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Int32,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Create a new OrderedMultiDictionary. Used internally for cloning.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyCount\">Number of keys.</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueComparer\">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n            <param name=\"comparer\">Comparer of key-value pairs.</param>\n            <param name=\"tree\">The red-black tree used to store the data.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Add(`0,`1)\">\n            <summary>\n            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this\n            method always adds a new key-value pair to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to <paramref name=\"value\"/> associated with it, then that value is replaced with <paramref name=\"value\"/>,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The value to associated with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Remove(`0,`1)\">\n            <summary>\n            Removes a given value from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove a value from.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if <paramref name=\"value\"/> was associated with <paramref name=\"key\"/> (and was\n            therefore removed). False if <paramref name=\"value\"/> was not associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Remove(`0)\">\n            <summary>\n            Removes a key and all associated values from the dictionary. If the\n            key is not present in the dictionary, it is unchanged and false is returned.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was present and was removed. Returns \n            false if the key was not present.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EqualValues(`1,`1)\">\n            <summary>\n            Determine if two values are equal.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Checks to see if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>\n            in the dictionary.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <param name=\"value\">The value to check.</param>\n            <returns>True if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Checks to see if the key is present in the dictionary and has\n            at least one value associated with it.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <returns>True if <paramref name=\"key\"/> is present and has at least\n            one value associated with it. Returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys(Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean)\">\n            <summary>\n            A private helper method that returns an enumerable that\n            enumerates all the keys in a range.\n            </summary>\n            <param name=\"rangeTester\">Defines the range to enumerate.</param>\n            <param name=\"reversed\">Should the keys be enumerated in reverse order?</param>\n            <returns>An IEnumerable&lt;TKey&gt; that enumerates the keys in the given range.\n            in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateValuesForKey(`0)\">\n            <summary>\n            A private helper method for the indexer to return an enumerable that\n            enumerates all the values for a key. This is separate method because indexers\n            can't use the yield return construct.\n            </summary>\n            <param name=\"key\"></param>\n            <returns>An IEnumerable&lt;TValue&gt; that can be used to enumerate all the\n            values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/> is not present,\n            an enumerable that enumerates no items is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys\">\n            <summary>\n            Enumerate all of the keys in the dictionary.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; of all of the keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in the dictionary, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. \n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the keys and values in the collection in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {\n                // process pair\n             }\n            </code></p>\n             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The keys are enumerated in sorted order.\n             Keys equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The keys are enumerated in sorted order. Keys equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyComparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.ValueComparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare values in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TValue (Comparer&lt;TValue&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.Count\">\n            <summary>\n            Gets the number of key-value pairs in the dictionary. Each value associated\n            with a given key is counted. If duplicate values are permitted, each duplicate\n            value is included in the count.\n            </summary>\n            <value>The number of key-value pairs in the dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2.View\">\n             <summary>\n             The OrderedMultiDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values\n             inside an ordered multi-dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made\n             to the view, the underlying dictionary changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys\n             and values in a subset of the OrderedMultiDictionary. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {\n                // process pair\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.#ctor(Wintellect.PowerCollections.OrderedMultiDictionary{`0,`1},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the View.\n            </summary>\n            <param name=\"myDictionary\">Associated OrderedMultiDictionary to be viewed.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.KeyInView(`0)\">\n            <summary>\n            Determine if the given key lies within the bounds of this view.\n            </summary>\n            <param name=\"key\">Key to test.</param>\n            <returns>True if the key is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. \n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.ContainsKey(`0)\">\n            <summary>\n            Tests if the key is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Contains(`0,`1)\">\n            <summary>\n            Tests if the key-value pair is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check for.</param>\n            <param name=\"value\">Value to check for.</param>\n            <returns>True if the key-value pair is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in this view, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Add(`0,`1)\">\n            <summary>\n            Adds the given key-value pair to the underlying dictionary of this view.\n            If <paramref name=\"key\"/> is not within the range of this view, an\n            ArgumentException is thrown.\n            </summary>\n            <param name=\"key\"></param>\n            <param name=\"value\"></param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"key\"/> is not \n            within the range of this view.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the underlying dictionary of this view. If\n            no key in the view is equal to the passed key, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0,`1)\">\n            <summary>\n            Removes the key and value from the underlying dictionary of this view. that is equal to the passed in key. If\n            no key in the view is equal to the passed key, or has the given value associated with it, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if the key-value pair was found and removed. False if the key-value pair was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Clear\">\n            <summary>\n            Removes all the keys and values within this view from the underlying OrderedMultiDictionary.\n            </summary>\n            <example>The following removes all the keys that start with \"A\" from an OrderedMultiDictionary.\n            <code>\n            dictionary.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Reversed\">\n            <summary>\n            Creates a new View that has the same keys and values as this, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Count\">\n            <summary>\n            Number of keys in this view.\n            </summary>\n            <value>Number of keys that lie within the bounds the view.</value>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "Documentation/Requirements/PowerCollections/Binaries_Signed_4.5/PowerCollections.XML",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>PowerCollections</name>\n    </assembly>\n    <members>\n        <member name=\"T:Wintellect.PowerCollections.BinaryPredicate`1\">\n            <summary>\n            The BinaryPredicate delegate type  encapsulates a method that takes two\n            items of the same type, and returns a boolean value representating \n            some relationship between them. For example, checking whether two\n            items are equal or equivalent is one kind of binary predicate.\n            </summary>\n            <param name=\"item1\">The first item.</param>\n            <param name=\"item2\">The second item.</param>\n            <returns>Whether item1 and item2 satisfy the relationship that the BinaryPredicate defines.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms\">\n            <summary>\n            Algorithms contains a number of static methods that implement\n            algorithms that work on collections. Most of the methods deal with\n            the standard generic collection interfaces such as IEnumerable&lt;T&gt;,\n            ICollection&lt;T&gt; and IList&lt;T&gt;.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Range``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of a list. Items from <paramref name=\"list\"/> are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name=\"list\"/>\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>This method can be used to apply an algorithm to a portion of a list. For example:\n            <code>Algorithms.ReverseInPlace(Algorithms.Range(list, 3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <typeparam name=\"T\">The type of the items in the list.</typeparam>\n            <param name=\"list\">The list to view.</param>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-list. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of <paramref name=\"list\"/>.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Range``1(``0[],System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of an array. Items from <paramref name=\"array\"/> are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name=\"array\"/>\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view. After an insertion, the last item in <paramref name=\"array\"/> \"falls off the end\". After a deletion, the\n            last item in array becomes the default value (0 or null).\n            </summary>\n            <remarks>This method can be used to apply an algorithm to a portion of a array. For example:\n            <code>Algorithms.ReverseInPlace(Algorithms.Range(array, 3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"array\">The array to view.</param>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-array. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of <paramref name=\"array\"/>.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Returns a read-only view onto a collection. The returned ICollection&lt;T&gt; interface\n            only allows operations that do not change the collection: GetEnumerator, Contains, CopyTo,\n            Count. The ReadOnly property returns false, indicating that the collection is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying collection is not copied. If the underlying\n            collection is changed, then the read-only view also changes accordingly.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"collection\"/>. If <paramref name=\"collection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Returns a read-only view onto a list. The returned IList&lt;T&gt; interface\n            only allows operations that do not change the list: GetEnumerator, Contains, CopyTo,\n            Count, IndexOf, and the get accessor of the indexer. \n            The IsReadOnly property returns true, indicating that the list is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying list is not copied. If the underlying\n            list is changed, then the read-only view also changes accordingly.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"list\"/>. Returns null if <paramref name=\"list\"/> is null. \n            If <paramref name=\"list\"/> is already read-only, returns <paramref name=\"list\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnly``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Returns a read-only view onto a dictionary. The returned IDictionary&lt;TKey,TValue&gt; interface\n            only allows operations that do not change the dictionary. \n            The IsReadOnly property returns true, indicating that the dictionary is read-only. All other\n            methods on the interface throw a NotSupportedException.\n            </summary>\n            <remarks>The data in the underlying dictionary is not copied. If the underlying\n            dictionary is changed, then the read-only view also changes accordingly.</remarks>\n            <param name=\"dictionary\">The dictionary to wrap.</param>\n            <returns>A read-only view onto <paramref name=\"dictionary\"/>. Returns null if <paramref name=\"dictionary\"/> is null. \n            If <paramref name=\"dictionary\"/> is already read-only, returns <paramref name=\"dictionary\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.IEnumerable)\">\n            <summary>\n            Given a non-generic IEnumerable interface, wrap a generic IEnumerable&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic collection, but can be used in places that require a generic interface.\n            The underlying non-generic collection must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic collections to newer code that uses generic interfaces.\n            </summary>\n            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedCollection\"/> to IEnumerable&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the wrapper collection.</typeparam>\n            <param name=\"untypedCollection\">An untyped collection. This collection should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic IEnumerable&lt;T&gt; wrapper around <paramref name=\"untypedCollection\"/>. \n            If <paramref name=\"untypedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.ICollection)\">\n            <summary>\n            Given a non-generic ICollection interface, wrap a generic ICollection&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic collection, but can be used in places that require a generic interface.\n            The underlying non-generic collection must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic collections to newer code that uses generic interfaces.\n            </summary>\n            <remarks><para>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedCollection\"/> to ICollection&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</para>\n            <para>Unlike the generic interface, the non-generic ICollection interfaces does\n            not contain methods for adding or removing items from the collection. For this reason,\n            the returned ICollection&lt;T&gt; will be read-only.</para></remarks>\n            <typeparam name=\"T\">The item type of the wrapper collection.</typeparam>\n            <param name=\"untypedCollection\">An untyped collection. This collection should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic ICollection&lt;T&gt; wrapper around <paramref name=\"untypedCollection\"/>.\n            If <paramref name=\"untypedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedAs``1(System.Collections.IList)\">\n            <summary>\n            Given a non-generic IList interface, wrap a generic IList&lt;T&gt;\n            interface around it. The generic interface will enumerate the same objects as the \n            underlying non-generic list, but can be used in places that require a generic interface.\n            The underlying non-generic list must contain only items that\n            are of type <paramref name=\"T\"/> or a type derived from it. This method is useful\n            when interfacing older, non-generic lists to newer code that uses generic interfaces.\n            </summary>\n            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,\n            this method will first attempt to cast <paramref name=\"untypedList\"/> to IList&lt;T&gt;. \n            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the wrapper list.</typeparam>\n            <param name=\"untypedList\">An untyped list. This list should only contain\n            items of type <paramref name=\"T\"/> or a type derived from it. </param>\n            <returns>A generic IList&lt;T&gt; wrapper around <paramref name=\"untypedlist\"/>.\n            If <paramref name=\"untypedlist\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.ICollection{``0})\">\n            <summary>\n            Given a generic ICollection&lt;T&gt; interface, wrap a non-generic (untyped)\n            ICollection interface around it. The non-generic interface will contain the same objects as the \n            underlying generic collection, but can be used in places that require a non-generic interface.\n            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.\n            </summary>\n            <remarks>Many generic collections already implement the non-generic interfaces directly. This\n            method will first attempt to simply cast <paramref name=\"typedCollection\"/> to ICollection. If that\n            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the underlying collection.</typeparam>\n            <param name=\"typedCollection\">A typed collection to wrap.</param>\n            <returns>A non-generic ICollection wrapper around <paramref name=\"typedCollection\"/>.\n            If <paramref name=\"typedCollection\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Given a generic IList&lt;T&gt; interface, wrap a non-generic (untyped)\n            IList interface around it. The non-generic interface will contain the same objects as the \n            underlying generic list, but can be used in places that require a non-generic interface.\n            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.\n            </summary>\n            <remarks>Many generic collections already implement the non-generic interfaces directly. This\n            method will first attempt to simply cast <paramref name=\"typedList\"/> to IList. If that\n            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>\n            <typeparam name=\"T\">The item type of the underlying list.</typeparam>\n            <param name=\"typedList\">A typed list to wrap.</param>\n            <returns>A non-generic IList wrapper around <paramref name=\"typedList\"/>.\n            If <paramref name=\"typedList\"/> is null, then null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadWriteList``1(``0[])\">\n            <summary>\n            <para>Creates a read-write IList&lt;T&gt; wrapper around an array. When an array is\n            implicitely converted to an IList&lt;T&gt;, changes to the items in the array cannot\n            be made through the interface. This method creates a read-write IList&lt;T&gt; wrapper\n            on an array that can be used to make changes to the array. </para>\n            <para>Use this method when you need to pass an array to an algorithms that takes an \n            IList&lt;T&gt; and that tries to modify items in the list. Algorithms in this class generally do not\n            need this method, since they have been design to operate on arrays even when they\n            are passed as an IList&lt;T&gt;.</para>\n            </summary>\n            <remarks>Since arrays cannot be resized, inserting an item causes the last item in the array to be automatically\n            removed. Removing an item causes the last item in the array to be replaced with a default value (0 or null). Clearing\n            the list causes all the items to be replaced with a default value.</remarks>\n            <param name=\"array\">The array to wrap.</param>\n            <returns>An IList&lt;T&gt; wrapper onto <paramref name=\"array\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0)\">\n            <summary>\n            Replace all items in a collection equal to a particular value with another values, yielding another collection.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Replace all items in a collection equal to a particular value with another values, yielding another collection. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0)\">\n            <summary>\n            Replace all items in a collection that a predicate evalues at true with a value, yielding another collection. .\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"predicate\">The predicate used to evaluate items with the collection. If the predicate returns true for a particular\n            item, the item is replaces with <paramref name=\"replaceWith\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with the appropriate replacements made.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0)\">\n            <summary>\n            Replace all items in a list or array equal to a particular value with another value. The replacement is done in-place, changing\n            the list.\n            </summary>\n            <remarks><para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Replace all items in a list or array equal to a particular value with another values.\n            The replacement is done in-place, changing\n            the list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"itemFind\">The value to find and replace within <paramref name=\"collection\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},System.Predicate{``0},``0)\">\n            <summary>\n            Replace all items in a list or array that a predicate evaluates at true with a value. The replacement is done in-place, changing\n            the list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"predicate\">The predicate used to evaluate items with the collection. If the predicate returns true for a particular\n            item, the item is replaces with <paramref name=\"replaceWith\"/>.</param>\n            <param name=\"replaceWith\">The new value to replace with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. \n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive duplicates removed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive duplicates removed.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"equalityComparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Remove consecutive \"equal\" items from a collection, yielding another collection. In each run of consecutive equal items\n            in the collection, all items after the first item in the run are removed. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. </remarks>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". An item <c>current</c> is removed if <c>predicate(first, current)==true</c>, where\n            <c>first</c> is the first item in the group of \"duplicate\" items.</param>\n            <returns>An new collection with the items from <paramref name=\"collection\"/>, in the same order, \n            with consecutive \"duplicates\" removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Remove consecutive equal items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed. The removal is done in-place, changing\n            the list. \n            </summary>\n            <remarks><para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Remove subsequent consecutive equal items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed.\n            The replacement is done in-place, changing\n            the list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Remove consecutive \"equal\" items from a list or array. In each run of consecutive equal items\n            in the list, all items after the first item in the run are removed. The replacement is done in-place, changing\n            the list. The passed BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks><para>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to process.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive equal items in the\n            list.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists..</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive equal items in the\n            list. A passed IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive \"equal\" items in the\n            list. The passed BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </remarks>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive equal items to look for. The count must be at least 1.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> consecutive equal items, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstConsecutiveWhere``1(System.Collections.Generic.IList{``0},System.Int32,System.Predicate{``0})\">\n            <summary>\n            Finds the first occurence of <paramref name=\"count\"/> consecutive items in the\n            list for which a given predicate returns true.\n            </summary>\n            <param name=\"list\">The list to examine.</param>\n            <param name=\"count\">The number of consecutive items to look for. The count must be at least 1.</param>\n            <param name=\"predicate\">The predicate used to test each item.</param>\n            <returns>The index of the first item in the first run of <paramref name=\"count\"/> items where <paramref name=\"predicate\"/>\n            returns true for all items in the run, or -1 if no such run exists.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the first item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the default value for T could be present in the collection, and \n            would be matched by the predicate, then this method is inappropriate, because\n            you cannot disguish whether the default value for T was actually present in the collection,\n            or no items matched the predicate. In this case, use TryFindFirstWhere.</remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item in the collection that matches the condition, or the default value for T (0 or null) if no\n            item that matches the condition is found.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\">\n            <summary>\n            Finds the first item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"foundItem\">Outputs the first item in the collection that matches the condition, if the method returns true.</param>\n            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the last item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks><para>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a \n            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</para>\n            <para>If the default value for T could be present in the collection, and \n            would be matched by the predicate, then this method is inappropriate, because\n            you cannot disguish whether the default value for T was actually present in the collection,\n            or no items matched the predicate. In this case, use TryFindFirstWhere.</para></remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item in the collection that matches the condition, or the default value for T (0 or null) if no\n            item that matches the condition is found.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)\">\n            <summary>\n            Finds the last item in a collection that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a \n            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</remarks>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"foundItem\">Outputs the last item in the collection that matches the condition, if the method returns true.</param>\n            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Enumerates all the items in <paramref name=\"collection\"/> that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindFirstIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the index of the first item in a list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item satisfying the condition. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindLastIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Finds the index of the last item in a list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item satisfying the condition. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FindIndicesWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Enumerates the indices of all the items in <paramref name=\"list\"/> that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"list\">The list to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Finds the index of the first item in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>The index of the first item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the first item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Finds the index of the last item in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>The index of the last item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The index of the last item equal to <paramref name=\"item\"/>. -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to a given item.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to a given item. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to one of several given items.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <returns>The index of the first item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the first item in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode methods will be called.</param>\n            <returns>The index of the first item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the index of the first item in a list \"equal\" to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            first item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the first item \"equal\" to any of the items in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to one of several given items.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <returns>The index of the last item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Finds the index of the last item in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>\n            <returns>The index of the last item equal to any of the items in the collection <paramref name=\"itemsToLookFor\"/>. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Finds the index of the last item in a list \"equal\" to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">The items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The index of the last item \"equal\" to any of the items in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. \n            -1 if no such item exists in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. \n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to\n            any of the items in the collection <paramref name=\"itemsToLookFor\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. A passed\n            IEqualityComparer is used to determine equality.\n            </summary>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. </param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to\n            any of the items in the collection <paramref name=\"itemsToLookFor\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Enumerates the indices of all the items in a list equal to one of several given items. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds \n            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name=\"itemsToLookFor\"/></remarks>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"itemsToLookFor\">A collection of items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items \"equal\" to any of the items \n            in the collection <paramref name=\"itemsToLookFor\"/>, using \n            <paramref name=\"BinaryPredicate\"/> as the test for equality. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is equal to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is equal to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is \"equal\" to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is \"equal\" to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested\n            for in the pattern need not be equality. </remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". </param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence \n            of <paramref name=\"list\"/> matches pattern at index i if list[i] is equal to the first item\n            in <paramref name=\"pattern\"/>, list[i+1] is equal to the second item in <paramref name=\"pattern\"/>,\n            and so forth for all the items in <paramref name=\"pattern\"/>. The passed \n            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"pattern\">The sequence of items to search for.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>\n            <returns>The first index with <paramref name=\"list\"/> that matches the items in <paramref name=\"pattern\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if one collection is a subset of another, considered as sets. The first set is a subset\n            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if one collection is a subset of another, considered as sets. The first set is a subset\n            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset\n            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than\n            the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset\n            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than\n            the second set. If an item appears X times in the first set,\n            it must appear at least X times in the second set.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsSubsetOf method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> is a proper subset of <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they\n            have no common items.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsDisjoint method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are disjoint, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they\n            have no common items.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the IsDisjoint method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparerComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are disjoint, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if two collections are equal, considered as sets. Two sets are equal if they\n            have have the same items, with order not being significant.\n            </summary>\n            <remarks>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the EqualTo method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are equal, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if two collections are equal, considered as sets. Two sets are equal if they\n            have have the same items, with order not being significant.\n            </summary>\n            <remarks>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the EqualTo method on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection.</param>\n            <param name=\"collection2\">The second collection.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>True if <paramref name=\"collection1\"/> are <paramref name=\"collection2\"/> are equal, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic intersection of two collections. The intersection of two sets\n            is all items that appear in both of the sets. If an item appears X times in one set,\n            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the intersection of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to intersect.</param>\n            <param name=\"collection2\">The second collection to intersect.</param>\n            <returns>The intersection of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic intersection of two collections. The intersection of two sets\n            is all items that appear in both of the sets. If an item appears X times in one set,\n            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the intersection of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to intersect.</param>\n            <param name=\"collection2\">The second collection to intersect.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The intersection of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic union of two collections. The union of two sets\n            is all items that appear in either of the sets. If an item appears X times in one set,\n            and Y times in the other set, the union contains the item Maximum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the union of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Union or UnionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to union.</param>\n            <param name=\"collection2\">The second collection to union.</param>\n            <returns>The union of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic union of two collections. The union of two sets\n            is all items that appear in either of the sets. If an item appears X times in one set,\n            and Y times in the other set, the union contains the item Maximum(X,Y) times. \n            The source collections are not changed.\n            A new collection is created with the union of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the union or unionWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to union.</param>\n            <param name=\"collection2\">The second collection to union.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The union of the two collections, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic difference of two collections. The difference of two sets\n            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,\n            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). \n            The source collections are not changed.\n            A new collection is created with the difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the Difference or DifferenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to difference.</param>\n            <param name=\"collection2\">The second collection to difference.</param>\n            <returns>The difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic difference of two collections. The difference of two sets\n            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,\n            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). \n            The source collections are not changed.\n            A new collection is created with the difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the difference or differenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to difference.</param>\n            <param name=\"collection2\">The second collection to difference.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets\n            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,\n            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. \n            The source collections are not changed.\n            A new collection is created with the symmetric difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the SymmetricDifference or SymmetricDifferenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to symmetric difference.</param>\n            <param name=\"collection2\">The second collection to symmetric difference.</param>\n            <returns>The symmetric difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets\n            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,\n            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. \n            The source collections are not changed.\n            A new collection is created with the symmetric difference of the collections; the order of the\n            items in this collection is undefined.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag\n            collections, it is more efficient to use the symmetric difference or symmetric differenceWith methods on that class.</para>\n            </remarks>\n            <param name=\"collection1\">The first collection to symmetric difference.</param>\n            <param name=\"collection2\">The second collection to symmetric difference.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals and GetHashCode member functions of this interface are called.</param>\n            <returns>The symmetric difference of <paramref name=\"collection1\"/> and <paramref name=\"collection2\"/>, considered as sets.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/> or <paramref name=\"collection2\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CartesianProduct``2(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1})\">\n            <summary>\n            Computes the cartestian product of two collections: all possible pairs of items, with the first item taken from the first collection and \n            the second item taken from the second collection. If the first collection has N items, and the second collection has M items, the cartesian\n            product will have N * M pairs.\n            </summary>\n            <typeparam name=\"TFirst\">The type of items in the first collection.</typeparam>\n            <typeparam name=\"TSecond\">The type of items in the second collection.</typeparam>\n            <param name=\"first\">The first collection.</param>\n            <param name=\"second\">The second collection.</param>\n            <returns>An IEnumerable&lt;Pair&lt;TFirst, TSecond&gt;&gt; that enumerates the cartesian product of the two collections.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Gets a string representation of the elements in the collection.\n            The string representation starts with \"{\", has a list of items separated\n            by commas (\",\"), and ends with \"}\". Each item in the collection is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            Contained collections (except strings) are recursively converted to strings by this method.\n            </summary>\n            <param name=\"collection\">A collection to get the string representation of.</param>\n            <returns>The string representation of the collection. If <paramref name=\"collection\"/> is null, then the string \"null\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0},System.Boolean,System.String,System.String,System.String)\">\n            <summary>\n            Gets a string representation of the elements in the collection.\n            The string to used at the beginning and end, and to separate items,\n            and supplied by parameters. Each item in the collection is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            </summary>\n            <param name=\"collection\">A collection to get the string representation of.</param>\n            <param name=\"recursive\">If true, contained collections (except strings) are converted to strings by a recursive call to this method, instead\n            of by calling ToString.</param>\n            <param name=\"start\">The string to appear at the beginning of the output string.</param>\n            <param name=\"separator\">The string to appear between each item in the string.</param>\n            <param name=\"end\">The string to appear at the end of the output string.</param>\n            <returns>The string representation of the collection. If <paramref name=\"collection\"/> is null, then the string \"null\" is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"start\"/>, <paramref name=\"separator\"/>, or <paramref name=\"end\"/>\n             is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToString``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Gets a string representation of the mappings in a dictionary.\n            The string representation starts with \"{\", has a list of mappings separated\n            by commas (\", \"), and ends with \"}\". Each mapping is represented\n            by \"key->value\". Each key and value in the dictionary is \n            converted to a string by calling its ToString method (null is represented by \"null\").\n            Contained collections (except strings) are recursively converted to strings by this method.\n            </summary>\n            <param name=\"dictionary\">A dictionary to get the string representation of.</param>\n            <returns>The string representation of the collection, or \"null\" \n            if <paramref name=\"dictionary\"/> is null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetRandomGenerator\">\n            <summary>\n            Return a private random number generator to use if the user\n            doesn't supply one.\n            </summary>\n            <returns>The private random number generator. Only one is ever created\n            and is always returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Randomly shuffles the items in a collection, yielding a new collection.\n            </summary>\n            <typeparam name=\"T\">The type of the items in the collection.</typeparam>\n            <param name=\"collection\">The collection to shuffle.</param>\n            <returns>An array with the same size and items as <paramref name=\"collection\"/>, but the items in a randomly chosen order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0},System.Random)\">\n            <summary>\n            Randomly shuffles the items in a collection, yielding a new collection.\n            </summary>\n            <typeparam name=\"T\">The type of the items in the collection.</typeparam>\n            <param name=\"collection\">The collection to shuffle.</param>\n            <param name=\"randomGenerator\">The random number generator to use to select the random order.</param>\n            <returns>An array with the same size and items as <paramref name=\"collection\"/>, but the items in a randomly chosen order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Randomly shuffles the items in a list or array, in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to shuffle.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0},System.Random)\">\n            <summary>\n            Randomly shuffles the items in a list or array, in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to shuffle.</param>\n            <param name=\"randomGenerator\">The random number generator to use to select the random order.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32)\">\n            <summary>\n            Picks a random subset of <paramref name=\"count\"/> items from <paramref name=\"collection\"/>, and places\n            those items into a random order. No item is selected more than once.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name=\"count\"/>).\n            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection of items to select from. This collection is not changed.</param>\n            <param name=\"count\">The number of items in the subset to choose.</param>\n            <returns>An array of <paramref name=\"count\"/> items, selected at random from <paramref name=\"collection\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or greater than <paramref name=\"collection\"/>.Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32,System.Random)\">\n            <summary>\n            Picks a random subset of <paramref name=\"count\"/> items from <paramref name=\"collection\"/>, and places\n            those items into a random order. No item is selected more than once.\n            </summary>\n            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name=\"count\"/>).\n            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection of items to select from. This collection is not changed.</param>\n            <param name=\"count\">The number of items in the subset to choose.</param>\n            <param name=\"randomGenerator\">The random number generates used to make the selection.</param>\n            <returns>An array of <paramref name=\"count\"/> items, selected at random from <paramref name=\"collection\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or greater than <paramref name=\"list\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"randomGenerator\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GeneratePermutations``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>. If <paramref name=\"collection\"/>\n            has N items, then N factorial permutations will be generated. This method does not compare the items to determine if\n            any of them are equal. If some items are equal, the same permutation may be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate the six permutations, AAB, AAB,\n            ABA, ABA, BAA, BAA (not necessarily in that order). To take equal items into account, use the GenerateSortedPermutations\n            method.\n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. \n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. A\n            supplied IComparer&lt;T&gt; instance is used to compare the items.\n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to compare the items.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Generates all the possible permutations of the items in <paramref name=\"collection\"/>, in lexicographical order. A\n            supplied Comparison&lt;T&gt; delegate is used to compare the items.\n            Even if some items are equal, the same permutation will not be generated more than once. For example,\n            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,\n            BAA. \n            </summary>\n            <typeparam name=\"T\">The type of items to permute.</typeparam>\n            <param name=\"collection\">The collection of items to permute.</param>\n            <param name=\"comparison\">The Comparison&lt;T&gt; delegate used to compare the items.</param>\n            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the \n            items in <paramref name=\"collection\"/>. Each permutations is returned as an array. The items in the array\n            should be copied if they need to be used after the next permutation is generated; each permutation may\n            reuse the same array instance.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the maximum value in a collection.\n            </summary>\n            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <returns>The largest item in the collection. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the maximum value in a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The largest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the maximum value in a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The largest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Finds the minimum value in a collection.\n            </summary>\n            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the minimum value in a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the minimum value in a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collection.</typeparam>\n            <param name=\"collection\">The collection to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The smallest item in the collection.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list.\n            </summary>\n            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the index of the maximum value in a list. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparison\">The comparison used to compare items in the collection.</param>\n            <returns>The index of the largest item in the list. If the maximum value appears\n            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list.\n            </summary>\n            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Finds the index of the minimum value in a list. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to search.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>The index of the smallest item in the list. If the minimum value appears\n            multiple times, the index of the first appearance is used.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The collection is empty.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> or <paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a sorted version of a collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates a sorted version of a collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Creates a sorted version of a collection. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Sorts a list or array in place.\n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Sorts a list or array in place. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Sorts a list or array in place. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the collection. \n            </summary>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the collection.\n            </summary>\n            <remarks>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</remarks>\n            <param name=\"collection\">The collection to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n            <returns>An array containing the sorted version of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            </summary>\n            <remarks><para>Values are compared by using the IComparable&lt;T&gt;\n            interfaces implementation on the type T.</para>\n            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</para></remarks>\n            <param name=\"list\">The list or array to sort.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})\">\n            <summary>\n            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,\n            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. \n            A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to sort.</param>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;).\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IComparer{``0},System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering in the passed instance of IComparer&lt;T&gt;.\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparer\">The comparer instance used to sort the list. Only\n            the Compare method is used.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Comparison{``0},System.Int32@)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering in the passed Comparison&lt;T&gt; delegate.\n            </summary>\n            <param name=\"list\">The sorted list to search.</param>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the list.</param>\n            <param name=\"index\">Returns the first index at which the item can be found. If the return\n            value is zero, indicating that <paramref name=\"item\"/> was not present in the list, then this\n            returns the index at which <paramref name=\"item\"/> could be inserted to maintain the sorted\n            order of the list.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> that appear in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;). The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the ordering in the passed instance of IComparer&lt;T&gt;. The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <param name=\"comparer\">The comparer instance used to sort the list. Only\n            the Compare method is used.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.MergeSorted``1(System.Comparison{``0},System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Merge several sorted collections into a single sorted collection. Each input collection must be sorted\n            by the ordering in the passed Comparison&lt;T&gt; delegate. The merging\n            is stable; equal items maintain their ordering, and equal items in different collections are placed\n            in the order of the collections.\n            </summary>\n            <param name=\"collections\">The set of collections to merge. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the collections.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections\n            in sorted order. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used\n            to compare the items. </remarks>\n            <typeparam name=\"T\">Types of items to compare. This type must implement IComparable&lt;T&gt; to allow \n            items to be compared.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">T does not implement IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values, using a supplied comparison delegate. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <typeparam name=\"T\">Types of items to compare.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <param name=\"comparison\">The IComparison&lt;T&gt; delegate to compare items. \n            Only the Compare member function of this interface is called.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Performs a lexicographical comparison of two sequences of values, using a supplied comparer interface. A lexicographical comparison compares corresponding\n            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, \n            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence\n            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,\n            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.\n            </summary>\n            <typeparam name=\"T\">Types of items to compare.</typeparam>\n            <param name=\"sequence1\">The first sequence to compare.</param>\n            <param name=\"sequence2\">The second sequence to compare.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to compare items. \n            Only the Compare member function of this interface is called.</param>\n            <returns>Less than zero if <paramref name=\"sequence1\"/> is lexicographically less than <paramref name=\"sequence2\"/>.\n            Greater than zero if <paramref name=\"sequence1\"/> is lexicographically greater than <paramref name=\"sequence2\"/>.\n            Zero if <paramref name=\"sequence1\"/> is equal to <paramref name=\"sequence2\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"sequence1\"/>, <paramref name=\"sequence2\"/>, or \n            <paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be used\n            for collections or algorithms that use sequences of T as an item type. The Lexicographical\n            ordered of sequences is for comparison.\n            </summary>\n            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used\n            to compare the items. </remarks>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses\n            for collections or algorithms that use sequences of T as an item type. The Lexicographics\n            ordered of sequences is for comparison.\n            </summary>\n            <param name=\"comparer\">A comparer instance used to compare individual items of type T.</param>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Comparison{``0})\">\n            <summary>\n            Creates an IComparer instance that can be used for comparing ordered\n            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses\n            for collections or algorithms that use sequences of T as an item type. The Lexicographics\n            ordered of sequences is for comparison.\n            </summary>\n            <param name=\"comparison\">A comparison delegate used to compare individual items of type T.</param>\n            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetReverseComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Reverses the order of comparison of an IComparer&lt;T&gt;. The resulting comparer can be used,\n            for example, to sort a collection in descending order. Equality and hash codes are unchanged.\n            </summary>\n            <typeparam name=\"T\">The type of items thta are being compared.</typeparam>\n            <param name=\"comparer\">The comparer to reverse.</param>\n            <returns>An IComparer&lt;T&gt; that compares items in the reverse order of <paramref name=\"comparer\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"comparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetIdentityComparer``1\">\n            <summary>\n            Gets an IEqualityComparer&lt;T&gt; instance that can be used to compare objects\n            of type T for object identity only. Two objects compare equal only if they\n            are references to the same object. \n            </summary>\n            <returns>An IEqualityComparer&lt;T&gt; instance for identity comparison.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetReverseComparison``1(System.Comparison{``0})\">\n            <summary>\n            Reverses the order of comparison of an Comparison&lt;T&gt;. The resulting comparison can be used,\n            for example, to sort a collection in descending order. \n            </summary>\n            <typeparam name=\"T\">The type of items that are being compared.</typeparam>\n            <param name=\"comparison\">The comparison to reverse.</param>\n            <returns>A Comparison&lt;T&gt; that compares items in the reverse order of <paramref name=\"comparison\"/>.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"comparison\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetComparerFromComparison``1(System.Comparison{``0})\">\n            <summary>\n            Given a comparison delegate that compares two items of type T, gets an\n            IComparer&lt;T&gt; instance that performs the same comparison.\n            </summary>\n            <param name=\"comparison\">The comparison delegate to use.</param>\n            <returns>An IComparer&lt;T&gt; that performs the same comparing operation\n            as <paramref name=\"comparison\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetComparisonFromComparer``1(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Given in IComparer&lt;T&gt; instenace that comparers two items from type T, \n            gets a Comparison delegate that performs the same comparison.\n            </summary>\n            <param name=\"comparer\">The IComparer&lt;T&gt; instance to use.</param>\n            <returns>A Comparison&lt;T&gt; delegate that performans the same comparing\n            operation as <paramref name=\"comparer\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetCollectionEqualityComparer``1\">\n            <summary>\n            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, considered in order. This is the same notion of equality as\n            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a collection of strings.\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;());\n            </code>\n            </example>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetCollectionEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, considered in order. This is the same notion of equality as\n            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>\n            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a collection of strings, compared in a case-insensitive way\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));\n            </code>\n            </example>\n            <param name=\"equalityComparer\">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetSetEqualityComparer``1\">\n            <summary>\n            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, without regard to order. This is the same notion of equality as\n            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>\n            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a set of strings, without regard to order\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));\n            </code>\n            </example>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality, without regard to order.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetSetEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation \n            that can be used to compare collections of elements (of type T). Two collections\n            of T's are equal if they have the same number of items, and corresponding \n            items are equal, without regard to order. This is the same notion of equality as\n            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.\n            </summary>\n            <example>\n            The following code creates a Dictionary where the keys are a set of strings, without regard to order\n            <code>\n                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = \n                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;());\n            </code>\n            </example>\n            <param name=\"equalityComparer\">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>\n            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for \n            comparing collections of T for equality, without regard to order.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Exists``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Determines if a collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TrueForAll``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RemoveWhere``1(System.Collections.Generic.ICollection{``0},System.Predicate{``0})\">\n            <summary>\n            Removes all the items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <remarks>If the collection if an array or implements IList&lt;T&gt;, an efficient algorithm that\n            compacts items is used. If not, then ICollection&lt;T&gt;.Remove is used\n            to remove items from the collection. If the collection is an array or fixed-size list,\n            the non-removed elements are placed, in order, at the beginning of\n            the list, and the remaining list items are filled with a default value (0 or null).</remarks>\n            <param name=\"collection\">The collection to check all the items in.</param>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>Returns a collection of the items that were removed. This collection contains the\n            items in the same order that they orginally appeared in <paramref name=\"collection\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Convert``2(System.Collections.Generic.IEnumerable{``0},System.Converter{``0,``1})\">\n            <summary>\n            Convert a collection of items by applying a delegate to each item in the collection. The resulting collection\n            contains the result of applying <paramref name=\"converter\"/> to each item in <paramref name=\"sourceCollection\"/>, in\n            order.\n            </summary>\n            <typeparam name=\"TSource\">The type of items in the collection to convert.</typeparam>\n            <typeparam name=\"TDest\">The type each item is being converted to.</typeparam>\n            <param name=\"sourceCollection\">The collection of item being converted.</param>\n            <param name=\"converter\">A delegate to the method to call, passing each item in <paramref name=\"sourceCollection\"/>.</param>\n            <returns>The resulting collection from applying <paramref name=\"converter\"/> to each item in <paramref name=\"sourceCollection\"/>, in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"sourceCollection\"/> or <paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1})\">\n            <summary>\n            Creates a delegate that converts keys to values by used a dictionary to map values. Keys\n            that a not present in the dictionary are converted to the default value (zero or null).\n            </summary>\n            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert\n            entire collections.</remarks>\n            <param name=\"dictionary\">The dictionary used to perform the conversion.</param>\n            <returns>A delegate to a method that converts keys to values. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1},``1)\">\n            <summary>\n            Creates a delegate that converts keys to values by used a dictionary to map values. Keys\n            that a not present in the dictionary are converted to a supplied default value.\n            </summary>\n            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert\n            entire collections.</remarks>\n            <param name=\"dictionary\">The dictionary used to perform the conversion.</param>\n            <param name=\"defaultValue\">The result of the conversion for keys that are not present in the dictionary.</param>\n            <returns>A delegate to a method that converts keys to values. </returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"dictionary\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})\">\n            <summary>\n            Performs the specified action on each item in a collection.\n            </summary>\n            <param name=\"collection\">The collection to process.</param>\n            <param name=\"action\">An Action delegate which is invoked for each item in <paramref name=\"collection\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Partition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Partition a list or array based on a predicate. After partitioning, all items for which\n            the predicate returned true precede all items for which the predicate returned false.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to partition.</param>\n            <param name=\"predicate\">A delegate that defines the partitioning condition.</param>\n            <returns>The index of the first item in the second half of the partition; i.e., the first item for\n            which <paramref name=\"predicate\"/> returned false. If the predicate was true for all items\n            in the list, list.Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.StablePartition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})\">\n            <summary>\n            Partition a list or array based on a predicate. After partitioning, all items for which\n            the predicate returned true precede all items for which the predicate returned false. \n            The partition is stable, which means that if items X and Y have the same result from\n            the predicate, and X precedes Y in the original list, X will precede Y in the \n            partitioned list.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to partition.</param>\n            <param name=\"predicate\">A delegate that defines the partitioning condition.</param>\n            <returns>The index of the first item in the second half of the partition; i.e., the first item for\n            which <paramref name=\"predicate\"/> returned false. If the predicate was true for all items\n            in the list, list.Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Concatenate``1(System.Collections.Generic.IEnumerable{``0}[])\">\n            <summary>\n            Concatenates all the items from several collections. The collections need not be of the same type, but\n            must have the same item type.\n            </summary>\n            <param name=\"collections\">The set of collections to concatenate. In many languages, this parameter\n            can be specified as several individual parameters.</param>\n            <returns>An IEnumerable that enumerates all the items in each of the collections, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Determines if the two collections contain equal items in the same order. The two collections do not need\n            to be of the same type; it is permissible to compare an array and an OrderedBag, for instance.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Determines if the two collections contain equal items in the same order. The passed \n            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.\n            </summary>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <param name=\"equalityComparer\">The IEqualityComparer&lt;T&gt; used to compare items for equality. \n            Only the Equals member function of this interface is called.</param>\n            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/>, <paramref name=\"collection2\"/>, or\n            <paramref name=\"equalityComparer\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},Wintellect.PowerCollections.BinaryPredicate{``0})\">\n            <summary>\n            Determines if the two collections contain \"equal\" items in the same order. The passed \n            BinaryPredicate is used to determine if two items are \"equal\".\n            </summary>\n            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested\n            for need not be equality. For example, the following code determines if each integer in\n            list1 is less than or equal to the corresponding integer in list2.\n            <code>\n            List&lt;int&gt; list1, list2;\n            if (EqualCollections(list1, list2, delegate(int x, int y) { return x &lt;= y; }) {\n                // the check is true...\n            }\n            </code>\n            </remarks>\n            <typeparam name=\"T\">The type of items in the collections.</typeparam>\n            <param name=\"collection1\">The first collection to compare.</param>\n            <param name=\"collection2\">The second collection to compare.</param>\n            <param name=\"predicate\">The BinaryPredicate used to compare items for \"equality\". \n            This predicate can compute any relation between two items; it need not represent equality or an equivalence relation.</param>\n            <returns>True if <paramref name=\"predicate\"/>returns true for each corresponding pair of\n            items in the two collections. If both collections are empty, true is returned.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection1\"/>, <paramref name=\"collection2\"/>, or\n            <paramref name=\"predicate\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ToArray``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Create an array with the items in a collection.\n            </summary>\n            <remarks>If <paramref name=\"collection\"/> implements ICollection&lt;T&gt;T, then \n            ICollection&lt;T&gt;.CopyTo() is used to fill the array. Otherwise, the IEnumerable&lt;T&gt;.GetEnumerator()\n            is used to fill the array.</remarks>\n            <typeparam name=\"T\">Element type of the collection.</typeparam>\n            <param name=\"collection\">Collection to create array from.</param>\n            <returns>An array with the items from the collection, in enumeration order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Count``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Count the number of items in an IEnumerable&lt;T&gt; collection. If \n            a more specific collection type is being used, it is more efficient to use\n            the Count property, if one is provided.\n            </summary>\n            <remarks>If the collection implements ICollection&lt;T&gt;, this method\n            simply returns ICollection&lt;T&gt;.Count. Otherwise, it enumerates all items\n            and counts them.</remarks>\n            <param name=\"collection\">The collection to count items in.</param>\n            <returns>The number of items in the collection.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0)\">\n            <summary>\n            Counts the number of items in the collection that are equal to <paramref name=\"find\"/>.\n            </summary>\n            <remarks>The default sense of equality for T is used, as defined by T's\n            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"find\">The item to compare to.</param>\n            <returns>The number of items in the collection that are equal to <paramref name=\"find\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Counts the number of items in the collection that are equal to <paramref name=\"find\"/>.\n            </summary>\n            <param name=\"collection\">The collection to count items in.</param>\n            <param name=\"find\">The item to compare to.</param>\n            <param name=\"equalityComparer\">The comparer to use to determine if two items are equal. Only the Equals\n            member function will be called.</param>\n            <returns>The number of items in the collection that are equal to <paramref name=\"find\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"collection\"/> or <paramref name=\"equalityComparer\"/>\n            is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.NCopiesOf``1(System.Int32,``0)\">\n            <summary>\n            Creates an IEnumerator that enumerates a given item <paramref name=\"n\"/> times.\n            </summary>\n            <example>\n            The following creates a list consisting of 1000 copies of the double 1.0.\n            <code>\n            List&lt;double&gt; list = new List&lt;double&gt;(Algorithms.NCopiesOf(1000, 1.0));\n            </code></example>\n            <param name=\"n\">The number of times to enumerate the item.</param>\n            <param name=\"item\">The item that should occur in the enumeration.</param>\n            <returns>An IEnumerable&lt;T&gt; that yields <paramref name=\"n\"/> copies\n            of <paramref name=\"item\"/>.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The argument <paramref name=\"n\"/> is less than zero.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Fill``1(System.Collections.Generic.IList{``0},``0)\">\n            <summary>\n            Replaces each item in a list with a given value. The list does not change in size.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to modify.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is a read-only list.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Fill``1(``0[],``0)\">\n            <summary>\n            Replaces each item in a array with a given value. \n            </summary>\n            <param name=\"array\">The array to modify.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FillRange``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0)\">\n            <summary>\n            Replaces each item in a part of a list with a given value.\n            </summary>\n            <typeparam name=\"T\">The type of items in the list.</typeparam>\n            <param name=\"list\">The list to modify.</param>\n            <param name=\"start\">The index at which to start filling. The first index in the list has index 0.</param>\n            <param name=\"count\">The number of items to fill.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is a read-only list.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative, or \n            <paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than <paramref name=\"list\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.FillRange``1(``0[],System.Int32,System.Int32,``0)\">\n            <summary>\n            Replaces each item in a part of a array with a given value.\n            </summary>\n            <param name=\"array\">The array to modify.</param>\n            <param name=\"start\">The index at which to start filling. The first index in the array has index 0.</param>\n            <param name=\"count\">The number of items to fill.</param>\n            <param name=\"value\">The value to fill with.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative, or \n            <paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than <paramref name=\"array\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"array\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Copies all of the items from the collection <paramref name=\"source\"/> to the list <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32)\">\n            <summary>\n            Copies all of the items from the collection <paramref name=\"source\"/> to the array <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. \n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentException\">The collection has more items than will fit into the array. In this case, the array\n            has been filled with as many items as fit before the exception is thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Copies at most <paramref name=\"count\"/> items from the collection <paramref name=\"source\"/> to the list <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded. The source collection must not be\n            the destination list or part thereof.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies at most <paramref name=\"count\"/> items from the collection <paramref name=\"source\"/> to the array <paramref name=\"dest\"/>, starting\n            at the index <paramref name=\"destIndex\"/>. The source collection must not be\n            the destination array or part thereof.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy. The array must be large enought to fit this number of items.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or <paramref name=\"destIndex\"/> + <paramref name=\"count\"/>\n            is greater than <paramref name=\"dest\"/>.Length.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IList{``0},System.Int32,System.Int32)\">\n            <summary>\n            Copies <paramref name=\"count\"/> items from the list <paramref name=\"source\"/>, starting at the index <paramref name=\"sourceIndex\"/>, \n            to the list <paramref name=\"dest\"/>, starting at the index <paramref name=\"destIndex\"/>. If necessary, the size of the destination list is expanded.\n            The source and destination lists may be the same.\n            </summary>\n            <param name=\"source\">The collection that provide the source items. </param>\n            <param name=\"sourceIndex\">The index within <paramref name=\"source\"/>to begin copying items from.</param>\n            <param name=\"dest\">The list to store the items into.</param>\n            <param name=\"destIndex\">The index within <paramref name=\"dest\"/>to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"sourceIndex\"/> is negative or \n            greater than <paramref name=\"source\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or too large.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,``0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies <paramref name=\"count\"/> items from the list or array <paramref name=\"source\"/>, starting at the index <paramref name=\"sourceIndex\"/>, \n            to the array <paramref name=\"dest\"/>, starting at the index <paramref name=\"destIndex\"/>. \n            The source may be the same as the destination array.\n            </summary>\n            <param name=\"source\">The list or array that provide the source items. </param>\n            <param name=\"sourceIndex\">The index within <paramref name=\"source\"/>to begin copying items from.</param>\n            <param name=\"dest\">The array to store the items into.</param>\n            <param name=\"destIndex\">The index within <paramref name=\"dest\"/>to begin copying items to.</param>\n            <param name=\"count\">The maximum number of items to copy. The destination array must be large enough to hold this many items.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"sourceIndex\"/> is negative or \n            greater than <paramref name=\"source\"/>.Count</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"destIndex\"/> is negative or \n            greater than <paramref name=\"dest\"/>.Length</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"count\"/> is negative or too large.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"dest\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Reverse``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Reverses a list and returns the reversed list, without changing the source list.\n            </summary>\n            <param name=\"source\">The list to reverse.</param>\n            <returns>A collection that contains the items from <paramref name=\"source\"/> in reverse order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReverseInPlace``1(System.Collections.Generic.IList{``0})\">\n            <summary>\n            Reverses a list or array in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to reverse.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"list\"/> is read only.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.Rotate``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Rotates a list and returns the rotated list, without changing the source list.\n            </summary>\n            <param name=\"source\">The list to rotate.</param>\n            <param name=\"amountToRotate\">The number of elements to rotate. This value can be positive or negative. \n            For example, rotating by positive 3 means that source[3] is the first item in the returned collection.\n            Rotating by negative 3 means that source[source.Count - 3] is the first item in the returned collection.</param>\n            <returns>A collection that contains the items from <paramref name=\"source\"/> in rotated order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.RotateInPlace``1(System.Collections.Generic.IList{``0},System.Int32)\">\n            <summary>\n            Rotates a list or array in place.\n            </summary>\n            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method\n            will work correctly and modify an array passed as <paramref name=\"list\"/>.</remarks>\n            <param name=\"list\">The list or array to rotate.</param>\n            <param name=\"amountToRotate\">The number of elements to rotate. This value can be positive or negative. \n            For example, rotating by positive 3 means that list[3] is the first item in the resulting list.\n            Rotating by negative 3 means that list[list.Count - 3] is the first item in the resulting list.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ListRange`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of a list. The object stores a wrapped list, and a start/count indicating\n            a sub-range of the list. Insertion/deletions through the sub-range view\n            cause the count to change also; insertions and deletions directly on\n            the wrapped list do not.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ListBase`1\">\n            <summary>\n            ListBase is an abstract class that can be used as a base class for a read-write collection that needs \n            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs\n            to override the following methods: Count, Clear, Insert, RemoveAt, and the indexer. The implementation\n            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.CollectionBase`1\">\n            <summary>\n            CollectionBase is a base class that can be used to more easily implement the\n            generic ICollection&lt;T&gt; and non-generic ICollection interfaces.\n            </summary>\n            <remarks>\n            <para>To use CollectionBase as a base class, the derived class must override\n            the Count, GetEnumerator, Add, Clear, and Remove methods. </para>\n            <para>ICollection&lt;T&gt;.Contains need not be implemented by the\n            derived class, but it should be strongly considered, because the CollectionBase implementation\n            may not be very efficient.</para>\n            </remarks>\n            <typeparam name=\"T\">The item type of the collection.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.#ctor\">\n            <summary>\n            Creates a new CollectionBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ToString\">\n            <summary>\n            Shows the string representation of the collection. The string representation contains\n            a list of the items in the collection. Contained collections (except string) are expanded\n            recursively.\n            </summary>\n            <returns>The string representation of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Add(`0)\">\n            <summary>\n            Must be overridden to allow adding items to this collection.\n            </summary>\n            <remarks><p>This method is not abstract, although derived classes should always\n            override it. It is not abstract because some derived classes may wish to reimplement\n            Add with a different return type (typically bool). In C#, this can be accomplished\n            with code like the following:</p>\n            <code>\n                public class MyCollection&lt;T&gt;: CollectionBase&lt;T&gt;, ICollection&lt;T&gt;\n                {\n                    public new bool Add(T item) {\n                        /* Add the item */\n                    }\n             \n                    void ICollection&lt;T&gt;.Add(T item) {\n                        Add(item);\n                    }\n                }\n            </code>\n            </remarks>\n            <param name=\"item\">Item to be added to the collection.</param>\n            <exception cref=\"T:System.NotImplementedException\">Always throws this exception to indicated\n            that the method must be overridden or re-implemented in the derived class.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Clear\">\n            <summary>\n            Must be overridden to allow clearing this collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Remove(`0)\">\n            <summary>\n            Must be overridden to allow removing items from this collection.\n            </summary>\n            <returns>True if <paramref name=\"item\"/> existed in the collection and\n            was removed. False if <paramref name=\"item\"/> did not exist in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Contains(`0)\">\n            <summary>\n            Determines if the collection contains a particular item. This default implementation\n            iterates all of the items in the collection via GetEnumerator, testing each item\n            against <paramref name=\"item\"/> using IComparable&lt;T&gt;.Equals or\n            Object.Equals.\n            </summary>\n            <remarks>You should strongly consider overriding this method to provide\n            a more efficient implementation, or if the default equality comparison\n            is inappropriate.</remarks>\n            <param name=\"item\">The item to check for in the collection.</param>\n            <returns>True if the collection contains <paramref name=\"item\"/>, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ToArray\">\n            <summary>\n            Creates an array of the correct size, and copies all the items in the \n            collection into the array, by calling CopyTo.\n            </summary>\n            <returns>An array containing all the elements in the collection, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this collection. The returned ICollection&lt;T&gt; provides\n            a view of the collection that prevents modifications to the collection. Use the method to provide\n            access to the collection without allowing changes. Since the returned object is just a view,\n            changes to the collection will be reflected in the view.\n            </summary>\n            <returns>An ICollection&lt;T&gt; that provides read-only access to the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.Exists(System.Predicate{`0})\">\n            <summary>\n            Determines if the collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.TrueForAll(System.Predicate{`0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.CountWhere(System.Predicate{`0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.FindAll(System.Predicate{`0})\">\n            <summary>\n            Enumerates the items in the collection that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.RemoveAll(System.Predicate{`0})\">\n            <summary>\n            Removes all the items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>Returns a collection of the items that were removed, in sorted order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ForEach(System.Action{`0})\">\n            <summary>\n            Performs the specified action on each item in this collection.\n            </summary>\n            <param name=\"action\">An Action delegate which is invoked for each item in this collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration\n            contains the result of applying <paramref name=\"converter\"/> to each item in this collection, in\n            order.\n            </summary>\n            <typeparam name=\"TOutput\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in this collection.</param>\n            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name=\"converter\"/> to each item in this collection in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.GetEnumerator\">\n            <summary>\n            Must be overridden to enumerate all the members of the collection.\n            </summary>\n            <returns>A generic IEnumerator&lt;T&gt; that can be used\n            to enumerate all the items in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"index\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Provides an IEnumerator that can be used to iterate all the members of the\n            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden\n            by the derived classes to enumerate the members of the collection.\n            </summary>\n            <returns>An IEnumerator that can be used to iterate the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.CollectionBase`1.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the collection in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.Count\">\n            <summary>\n            Must be overridden to provide the number of items in the collection.\n            </summary>\n            <value>The number of items in the collection.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly\">\n            <summary>\n            Indicates whether the collection is read-only. Always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#IsSynchronized\">\n            <summary>\n            Indicates whether the collection is synchronized.\n            </summary>\n            <value>Always returns false, indicating that the collection is not synchronized.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.CollectionBase`1.System#Collections#ICollection#SyncRoot\">\n            <summary>\n            Indicates the synchronization object for this collection.\n            </summary>\n            <value>Always returns this.</value>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.#ctor\">\n            <summary>\n            Creates a new ListBase.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Clear\">\n            <summary>\n            This method must be overridden by the derived class to empty the list\n            of all items.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Insert(System.Int32,`0)\">\n            <summary>\n            This method must be overridden by the derived class to insert a new\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.RemoveAt(System.Int32)\">\n            <summary>\n            This method must be overridden by the derived class to remove the\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on.\n            </summary>\n            <remarks>The enumerator does not check for changes made\n            to the structure of the list. Thus, changes to the list during\n            enumeration may cause incorrect enumeration or out of range\n            exceptions. Consider overriding this method and adding checks\n            for structural changes.</remarks>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Contains(`0)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"item\"/>.\n            The implementation simply checks whether IndexOf(item) returns a non-negative value.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the list contains an item that compares equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Add(`0)\">\n            <summary>\n            Adds an item to the end of the list. This method is equivalent to calling: \n            <code>Insert(Count, item)</code>\n            </summary>\n            <param name=\"item\">The item to add to the list.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Remove(`0)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"item\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to remove from the list.</param>\n            <returns>True if an item was found and removed that compared equal to\n            <paramref name=\"item\"/>. False if no such item was in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(`0[])\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at index 0.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies a range of elements from the list to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"index\">The starting index in the source list of the range to copy.</param>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n            <param name=\"count\">The number of items to copy.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this list. The returned IList&lt;T&gt; provides\n            a view of the list that prevents modifications to the list. Use the method to provide\n            access to the list without allowing changes. Since the returned object is just a view,\n            changes to the list will be reflected in the view.\n            </summary>\n            <returns>An IList&lt;T&gt; that provides read-only access to the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Find(System.Predicate{`0})\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the first item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLast(System.Predicate{`0})\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the last item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0)\">\n            <summary>\n            Finds the index of the first item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the first item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.IndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0)\">\n            <summary>\n            Finds the index of the last item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the last item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.ReverseInPlace(deque.Range(3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-part of this list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of the list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.ConvertToItemType(System.String,System.Object)\">\n            <summary>\n            Convert the given parameter to T. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Add(System.Object)\">\n            <summary>\n            Adds an item to the end of the list. This method is equivalent to calling: \n            <code>Insert(Count, item)</code>\n            </summary>\n            <param name=\"value\">The item to add to the list.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Clear\">\n            <summary>\n            Removes all the items from the list, resulting in an empty list.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Contains(System.Object)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"value\"/>.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IndexOf(System.Object)\">\n            <summary>\n            Find the first occurrence of an item equal to <paramref name=\"value\"/>\n            in the list, and returns the index of that item.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n            <returns>The index of <paramref name=\"value\"/>, or -1 if no item in the \n            list compares equal to <paramref name=\"value\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)\">\n            <summary>\n            Insert a new\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"value\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Remove(System.Object)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"value\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to remove from the list.</param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the\n            item at the given index. \n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.Count\">\n            <summary>\n            The property must be overridden by the derived class to return the number of \n            items in the list.\n            </summary>\n            <value>The number of items in the list.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.Item(System.Int32)\">\n            <summary>\n            The indexer must be overridden by the derived class to get and set\n            values of the list at a particular index.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Returns whether the list is a fixed size. This implementation always returns false.\n            </summary>\n            <value>Alway false, indicating that the list is not fixed size.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#IsReadOnly\">\n            <summary>\n            Returns whether the list is read only. This implementation returns the value\n            from ICollection&lt;T&gt;.IsReadOnly, which is by default, false.\n            </summary>\n            <value>By default, false, indicating that the list is not read only.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ListBase`1.System#Collections#IList#Item(System.Int32)\">\n            <summary>\n            Gets or sets the\n            value at a particular index in the list.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <value>The item at the given index.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ListRange`1.#ctor(System.Collections.Generic.IList{`0},System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the list.\n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ArrayRange`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of an array. The object stores a wrapped array, and a start/count indicating\n            a sub-range of the array. Insertion/deletions through the sub-range view\n            cause the count to change up to the size of the underlying array. Elements\n            fall off the end of the underlying array.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ArrayRange`1.#ctor(`0[],System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the array.\n            </summary>\n            <param name=\"wrappedArray\">Array to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1\">\n            <summary>\n            The read-only ICollection&lt;T&gt; implementation that is used by the ReadOnly method.\n            Methods that modify the collection throw a NotSupportedException, methods that don't\n            modify are fowarded through to the wrapped collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1.#ctor(System.Collections.Generic.ICollection{`0})\">\n            <summary>\n            Create a ReadOnlyCollection wrapped around the given collection.\n            </summary>\n            <param name=\"wrappedCollection\">Collection to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyCollection`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1\">\n            <summary>\n            The read-only IList&lt;T&gt; implementation that is used by the ReadOnly method.\n            Methods that modify the list throw a NotSupportedException, methods that don't\n            modify are fowarded through to the wrapped list.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1.#ctor(System.Collections.Generic.IList{`0})\">\n            <summary>\n            Create a ReadOnlyList wrapped around the given list.\n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyList`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2\">\n            <summary>\n            The private class that implements a read-only wrapped for \n            IDictionary &lt;TKey,TValue&gt;.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})\">\n            <summary>\n            Create a read-only dictionary wrapped around the given dictionary.\n            </summary>\n            <param name=\"wrappedDictionary\">The IDictionary&lt;TKey,TValue&gt; to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReadOnlyDictionary`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedEnumerator`1\">\n            <summary>\n             The class that provides a typed IEnumerator&lt;T&gt;\n            view onto an untyped IEnumerator interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedEnumerator`1.#ctor(System.Collections.IEnumerator)\">\n            <summary>\n            Create a typed IEnumerator&lt;T&gt;\n            view onto an untyped IEnumerator interface \n            </summary>\n            <param name=\"wrappedEnumerator\">IEnumerator to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedEnumerable`1\">\n            <summary>\n            The class that provides a typed IEnumerable&lt;T&gt; view\n            onto an untyped IEnumerable interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedEnumerable`1.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Create a typed IEnumerable&lt;T&gt; view\n            onto an untyped IEnumerable interface.\n            </summary>\n            <param name=\"wrappedEnumerable\">IEnumerable interface to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedCollection`1\">\n            <summary>\n            The class that provides a typed ICollection&lt;T&gt; view\n            onto an untyped ICollection interface. The ICollection&lt;T&gt;\n            is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedCollection`1.#ctor(System.Collections.ICollection)\">\n            <summary>\n            Create a typed ICollection&lt;T&gt; view\n            onto an untyped ICollection interface.\n            </summary>\n            <param name=\"wrappedCollection\">ICollection interface to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedCollection`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.TypedList`1\">\n            <summary>\n            The class used to create a typed IList&lt;T&gt; view onto\n            an untype IList interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.TypedList`1.#ctor(System.Collections.IList)\">\n            <summary>\n            Create a typed IList&lt;T&gt; view onto\n            an untype IList interface.\n            </summary>\n            <param name=\"wrappedList\">The IList to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.UntypedCollection`1\">\n            <summary>\n            The class that is used to provide an untyped ICollection\n            view onto a typed ICollection&lt;T&gt; interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedCollection`1.#ctor(System.Collections.Generic.ICollection{`0})\">\n            <summary>\n            Create an untyped ICollection\n            view onto a typed ICollection&lt;T&gt; interface.\n            </summary>\n            <param name=\"wrappedCollection\">The ICollection&lt;T&gt; to wrap.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.UntypedList`1\">\n            <summary>\n            The class that implements a non-generic IList wrapper\n            around a generic IList&lt;T&gt; interface.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedList`1.#ctor(System.Collections.Generic.IList{`0})\">\n            <summary>\n            Create a non-generic IList wrapper\n            around a generic IList&lt;T&gt; interface.\n            </summary>\n            <param name=\"wrappedList\">The IList&lt;T&gt; interface to wrap.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.UntypedList`1.ConvertToItemType(System.String,System.Object)\">\n            <summary>\n            Convert the given parameter to T. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view an array\n            in a read-write way. Insertions cause the last item in the array\n            to fall off, deletions replace the last item with the default value.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1.#ctor(`0[])\">\n            <summary>\n            Create a list wrapper object on an array.\n            </summary>\n            <param name=\"wrappedArray\">Array to wrap.</param>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Algorithms.ArrayWrapper`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Return true, to indicate that the list is fixed size.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.LexicographicalComparerClass`1\">\n            <summary>\n            A private class used by the LexicographicalComparer method to compare sequences\n            (IEnumerable) of T by there Lexicographical ordering.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.LexicographicalComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new instance that comparer sequences of T by their lexicographical\n            ordered.\n            </summary>\n            <param name=\"itemComparer\">The IComparer used to compare individual items of type T.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.ReverseComparerClass`1\">\n            <summary>\n            An IComparer instance that can be used to reverse the sense of \n            a wrapped IComparer instance.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Algorithms.ReverseComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            </summary>\n            <param name=\"comparer\">The comparer to reverse.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.IdentityComparer`1\">\n            <summary>\n            A class, implementing IEqualityComparer&lt;T&gt;, that compares objects\n            for object identity only. Only Equals and GetHashCode can be used;\n            this implementation is not appropriate for ordering.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.CollectionEqualityComparer`1\">\n            <summary>\n            A private class used to implement GetCollectionEqualityComparer(). This\n            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare\n            two enumerables for equality, where order is significant.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Algorithms.SetEqualityComparer`1\">\n            <summary>\n            A private class used to implement GetSetEqualityComparer(). This\n            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare\n            two enumerables for equality, where order is not significant.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Bag`1\">\n             <summary>\n             Bag&lt;T&gt; is a collection that contains items of type T. \n             Unlike a Set, duplicate items (items that compare equal to each other) are allowed in an Bag. \n             </summary>\n             <remarks>\n             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; \n             then the Equals method of that interface will be used to compare items, otherwise the Equals\n             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed\n             to the constructor to use to compare items.</p>\n             <p>Bag is implemented as a hash table. Inserting, deleting, and looking up an\n             an element all are done in approximately constant time, regardless of the number of items in the bag.</p>\n             <p>When multiple equal items are stored in the bag, they are stored as a representative item and a count. \n             If equal items can be distinguished, this may be noticable. For example, if a case-insensitive\n             comparer is used with a Bag&lt;string&gt;, and both \"hello\", and \"HELLO\" are added to the bag, then the\n             bag will appear to contain two copies of \"hello\" (the representative item).</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.OrderedBag`1\"/> is similar, but uses comparison instead of hashing, maintain\n             the items in sorted order, and stores distinct copies of items that compare equal.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedBag`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NewPair(`0,System.Int32)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with an item and a count.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <param name=\"count\">The number of appearances.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a count of zero.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor\">\n             <summary>\n             Creates a new Bag. \n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object\n            will be used to compare items in this bag for equality.\n            </summary>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new Bag. The bag is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the Bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object\n            will be used to compare items in this bag. The bag is\n            initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the Bag.</param>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Collections.Generic.IEqualityComparer{`0},Wintellect.PowerCollections.Hash{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Int32)\">\n            <summary>\n            Creates a new Bag given a comparer and a hash that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"equalityComparer\">IEqualityComparer for the bag.</param>\n            <param name=\"keyEqualityComparer\">IEqualityComparer for the key.</param>\n            <param name=\"hash\">Data for the bag.</param>\n            <param name=\"count\">Size of the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of unquie items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this bag. A new bag is created with a clone of\n            each element of this bag, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>\n            <returns>The cloned bag.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.NumberOfCopies(`0)\">\n            <summary>\n            Returns the number of copies of <paramref name=\"item\"/> in the bag. \n            </summary>\n            <remarks>NumberOfCopies() takes approximately constant time, no matter how many items\n            are stored in the bag.</remarks>\n            <param name=\"item\">The item to search for in the bag.</param>\n            <returns>The number of items in the bag that compare equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.GetRepresentativeItem(`0,`0@)\">\n            <summary>\n            Returns the representative item stored in the bag that is equal to\n            the provided item. Also returns the number of copies of the item in the bag.\n            </summary>\n            <param name=\"item\">Item to find in the bag.</param>\n            <param name=\"representative\">If one or more items equal to <paramref name=\"item\"/> are present in the\n            bag, returns the representative item. If no items equal to <paramref name=\"item\"/> are stored in the bag, \n            returns <paramref name=\"item\"/>.</param>\n            <returns>The number of items equal to <paramref name=\"item\"/> stored in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the bag. \n            If an item is present multiple times in the bag, the representative item is yielded by the\n            enumerator multiple times. The order of enumeration is haphazard and may change.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the bag while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the bag takes time O(N), where N is the number\n            of items in the bag.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the Bag.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Contains(`0)\">\n            <summary>\n            Determines if this bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed.\n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>. False if the bag does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.DistinctItems\">\n            <summary>\n            Enumerates all the items in the bag, but enumerates equal items\n            just once, even if they occur multiple times in the bag.\n            </summary>\n            <remarks>If the bag is changed while items are being enumerated, the\n            enumeration will terminate with an InvalidOperationException.</remarks>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Add(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case, the count of items for the representative item is increased by one, but the existing\n            represetative item is unchanged.\n            </summary>\n            <remarks>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.AddRepresentative(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case (unlike Add), the new item becomes the representative item.\n            </summary>\n            <remarks>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.ChangeNumberOfCopies(`0,System.Int32)\">\n            <summary>\n            Changes the number of copies of an existing item in the bag, or adds the indicated number\n            of copies of the item to the bag. \n            </summary>\n            <remarks>\n            <para>Changing the number of copies takes approximately constant time, regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to change the number of copies of. This may or may not already be present in the bag.</param>\n            <param name=\"numCopies\">The new number of copies of the item.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the bag. \n            </summary>\n            <remarks>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Remove(`0)\">\n            <summary>\n            Searches the bag for one item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. \n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes approximated constant time,\n            regardless of the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.RemoveAllCopies(`0)\">\n            <summary>\n            Searches the bag for all items equal to <paramref name=\"item\"/>, and \n            removes all of them from the bag. If not found, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparer instance used\n            to create the bag.</para>\n            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is\n            the number of items equal to <paramref name=\"item\"/>.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>The number of copies of <paramref name=\"item\"/> that were found and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the bag. Items that\n            are not present in the bag are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparer instance used\n            to create the bag.</para>\n            <para>Removing the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the bag.</param>\n            <returns>The number of items removed from the bag.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Clear\">\n            <summary>\n            Removes all items from the bag.\n            </summary>\n            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.CheckConsistentComparison(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Check that this bag and another bag were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherBag\">Other bag to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherBag and this bag don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsEqualTo(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is equal to another bag. This bag is equal to\n            <paramref name=\"otherBag\"/> if they contain the same number of \n            of copies of equal elements.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(N), where N is the number of unique items in \n            this bag.</remarks>\n            <param name=\"otherBag\">Bag to compare to</param>\n            <returns>True if this bag is equal to <paramref name=\"otherBag\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsSupersetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a superset of another bag. Neither bag is modified.\n            This bag is a superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(M), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsProperSupersetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a proper superset of another bag. Neither bag is modified.\n            This bag is a proper superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times. Additional, this bag must have strictly more items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">Set to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsSubsetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a subset of another ba11 items in this bag.\n            </summary>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsProperSubsetOf(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is a proper subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times. Additional, this bag must have strictly fewer items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(N), where N is the number of unique items in this bag.</remarks>\n            <param name=\"otherBag\">Bag to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IsDisjointFrom(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Determines if this bag is disjoint from another bag. Two bags are disjoint\n            if no item from one set is equal to any item in the other bag.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to check disjointness with.</param>\n            <returns>True if the two bags are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.UnionWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives\n            the union of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the \n            two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Union(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is \n            created with the union of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <returns>The union of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SumWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. The sum of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives\n            the sum of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M), where M is the size of the \n            other bag..</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Sum(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. he sum of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is \n            created with the sum of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <returns>The sum of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.IntersectionWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives\n            the intersection of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Intersection(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the intersection contains the item Minimum(X,Y) times. A new bag is \n            created with the intersection of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <returns>The intersection of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.DifferenceWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives\n            the difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M), where M is the size of the \n            other bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.Difference(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is \n            created with the difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N), where M and N are the size\n            of the two bags.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <returns>The difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SymmetricDifferenceWith(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. This bag receives\n            the symmetric difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Bag`1.SymmetricDifference(Wintellect.PowerCollections.Bag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. A new bag is \n            created with the symmetric difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <returns>The symmetric difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Bag`1.Comparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare items in this bag. \n            </summary>\n            <value>If the bag was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Bag`1.Count\">\n            <summary>\n            Returns the number of items in the bag.\n            </summary>\n            <remarks>The size of the bag is returned in constant time.</remarks>\n            <value>The number of items in the bag.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Deque`1\">\n            <summary>\n            <para>The Deque class implements a type of list known as a Double Ended Queue. A Deque\n            is quite similar to a List, in that items have indices (starting at 0), and the item at any\n            index can be efficiently retrieved. The difference between a List and a Deque lies in the\n            efficiency of inserting elements at the beginning. In a List, items can be efficiently added\n            to the end, but inserting an item at the beginning of the List is slow, taking time \n            proportional to the size of the List. In a Deque, items can be added to the beginning \n            or end equally efficiently, regardless of the number of items in the Deque. As a trade-off\n            for this increased flexibility, Deque is somewhat slower than List (but still constant time) when\n            being indexed to get or retrieve elements. </para>\n            </summary>\n            <remarks>\n            <para>The Deque class can also be used as a more flexible alternative to the Queue \n            and Stack classes. Deque is as efficient as Queue and Stack for adding or removing items, \n            but is more flexible: it allows access\n            to all items in the queue, and allows adding or removing from either end.</para>\n            <para>Deque is implemented as a ring buffer, which is grown as necessary. The size\n            of the buffer is doubled whenever the existing capacity is too small to hold all the\n            elements.</para>\n            </remarks>\n            <typeparam name=\"T\">The type of items stored in the Deque.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.#ctor\">\n            <summary>\n            Create a new Deque that is initially empty.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Create a new Deque initialized with the items from the passed collection,\n            in order.\n            </summary>\n            <param name=\"collection\">A collection of items to initialize the Deque with.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the Deque into an array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.TrimToSize\">\n            <summary>\n            Trims the amount of memory used by the Deque by changing\n            the Capacity to be equal to Count. If no more items will be added\n            to the Deque, calling TrimToSize will reduce the amount of memory\n            used by the Deque.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Clear\">\n            <summary>\n            Removes all items from the Deque.\n            </summary>\n            <remarks>Clearing the Deque takes a small constant amount of time, regardless of\n            how many items are currently in the Deque.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on. If the items\n            are added to or removed from the Deque during enumeration, the \n            enumeration ends with an InvalidOperationException.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CreateInitialBuffer(`0)\">\n            <summary>\n            Creates the initial buffer and initialized the Deque to contain one initial\n            item.\n            </summary>\n            <param name=\"firstItem\">First and only item for the Deque.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index in the Deque. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> move up one index\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to insert an item in the Deque is proportional\n            to the distance of index from the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/>)).\n            Thus, inserting an item at the front or end of the Deque is always fast; the middle of\n            of the Deque is the slowest place to insert.\n            </remarks>\n            <param name=\"index\">The index in the Deque to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            front item in the Deque has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Inserts a collection of items at the given index in the Deque. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices in the Deque\n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert a collection in the Deque is proportional\n            to the distance of index from the closest end of the Deque, plus the number of items\n            inserted (M): \n            O(M + Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the Deque to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            front item in the Deque has index 0.</param>\n            <param name=\"collection\">The collection of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down one index\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete an item in the Deque is proportional\n            to the distance of index from the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - 1 - <paramref name=\"index\"/>)).\n            Thus, deleting an item at the front or end of the Deque is always fast; the middle of\n            of the Deque is the slowest place to delete.\n            </remarks>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Removes a range of items at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down <paramref name=\"count\"/> indices\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete <paramref name=\"count\"/> items in the Deque is proportional\n            to the distance to the closest end of the Deque: \n            O(Min(<paramref name=\"index\"/>, Count - <paramref name=\"index\"/> - <paramref name=\"count\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the list to remove the range at. The\n            first item in the list has index 0.</param>\n            <param name=\"count\">The number of items to remove.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count, or <paramref name=\"count\"/> is less than zero\n            or too large.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.IncreaseBuffer\">\n            <summary>\n            Increase the amount of buffer space. When calling this method, the Deque\n            must not be empty. If start and end are equal, that indicates a completely\n            full Deque.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddToFront(`0)\">\n            <summary>\n            Adds an item to the front of the Deque. The indices of all existing items\n            in the Deque are increased by 1. This method is \n            equivalent to <c>Insert(0, item)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Adding an item to the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddManyToFront(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the front of the Deque. The indices of all existing items\n            in the Deque are increased by the number of items inserted. The first item in the added collection becomes the\n            first item in the Deque. \n            </summary>\n            <remarks>This method takes time O(M), where M is the number of items in the \n            <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddToBack(`0)\">\n            <summary>\n            Adds an item to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>Insert(Count, item)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Adding an item to the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Add(`0)\">\n            <summary>\n            Adds an item to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>AddToBack(item)</c>.\n            </summary>\n            <remarks>Adding an item to the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.AddManyToBack(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. The last item in the added collection becomes the\n            last item in the Deque.\n            </summary>\n            <remarks>This method takes time O(M), where M is the number of items in the \n            <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection of item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveFromFront\">\n            <summary>\n            Removes an item from the front of the Deque. The indices of all existing items\n            in the Deque are decreased by 1. This method is \n            equivalent to <c>RemoveAt(0)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Removing an item from the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item that was removed.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.RemoveFromBack\">\n            <summary>\n            Removes an item from the back of the Deque. The indices of all existing items\n            in the Deque are unchanged. This method is \n            equivalent to <c>RemoveAt(Count-1)</c> but is a little more\n            efficient.\n            </summary>\n            <remarks>Removing an item from the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetAtFront\">\n            <summary>\n            Retreives the item currently at the front of the Deque. The Deque is \n            unchanged. This method is \n            equivalent to <c>deque[0]</c> (except that a different exception is thrown).\n            </summary>\n            <remarks>Retreiving the item at the front of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item at the front of the Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.GetAtBack\">\n            <summary>\n            Retreives the item currently at the back of the Deque. The Deque is \n            unchanged. This method is \n            equivalent to <c>deque[deque.Count - 1]</c> (except that a different exception is thrown).\n            </summary>\n            <remarks>Retreiving the item at the back of the Deque takes\n            a small constant amount of time, regardless of how many items are in the Deque.</remarks>\n            <returns>The item at the back of the Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The Deque is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.Clone\">\n            <summary>\n            Creates a new Deque that is a copy of this one.\n            </summary>\n            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>\n            <returns>A copy of the current deque.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.System#ICloneable#Clone\">\n            <summary>\n            Creates a new Deque that is a copy of this one.\n            </summary>\n            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>\n            <returns>A copy of the current deque.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Deque`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this Deque. A new Deque is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the Deque takes time O(N), where N is the number of items in the Deque.</para></remarks>\n            <returns>The cloned Deque.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Count\">\n            <summary>\n            Gets the number of items currently stored in the Deque. The last item\n            in the Deque has index Count-1.\n            </summary>\n            <remarks>Getting the count of items in the Deque takes a small constant\n            amount of time.</remarks>\n            <value>The number of items stored in this Deque.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Capacity\">\n            <summary>\n            Gets or sets the capacity of the Deque. The Capacity is the number of\n            items that this Deque can hold without expanding its internal buffer. Since\n            Deque will automatically expand its buffer when necessary, in almost all cases\n            it is unnecessary to worry about the capacity. However, if it is known that a\n            Deque will contain exactly 1000 items eventually, it can slightly improve \n            efficiency to set the capacity to 1000 up front, so that the Deque does not\n            have to expand automatically.\n            </summary>\n            <value>The number of items that this Deque can hold without expanding its\n            internal buffer.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The capacity is being set\n            to less than Count, or to too large a value.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Deque`1.Item(System.Int32)\">\n            <summary>\n            Gets or sets an item at a particular index in the Deque. \n            </summary>\n            <remarks>Getting or setting the item at a particular index takes a small constant amount\n            of time, no matter what index is used.</remarks>\n            <param name=\"index\">The index of the item to retrieve or change. The front item has index 0, and\n            the back item has index Count-1.</param>\n            <returns>The value at the indicated index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">The index is less than zero or greater than or equal\n            to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2\">\n            <summary>\n            DictionaryBase is a base class that can be used to more easily implement the\n            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.\n            </summary>\n            <remarks>\n            <para>To use DictionaryBase as a base class, the derived class must override\n            Count, GetEnumerator, TryGetValue, Clear, Remove, and the indexer set accessor. </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new DictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Clear\">\n            <summary>\n            Clears the dictionary. This method must be overridden in the derived class.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary. \n            </summary>\n            <remarks>The default implementation of this method\n            checks to see if the key already exists using \n            ContainsKey, then calls the indexer setter if the key doesn't\n            already exist. </remarks>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found\n            in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue and returns\n            what it returns.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.AsReadOnly\">\n            <summary>\n            Provides a read-only view of this dictionary. The returned IDictionary&lt;TKey,TValue&gt; provides\n            a view of the dictionary that prevents modifications to the dictionary. Use the method to provide\n            access to the dictionary without allowing changes. Since the returned object is just a view,\n            changes to the dictionary will be reflected in the view.\n            </summary>\n            <returns>An IIDictionary&lt;TKey,TValue&gt; that provides read-only access to the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Adds a key-value pair to the collection. This implementation calls the Add method\n            with the Key and Value from the item.\n            </summary>\n            <param name=\"item\">A KeyValuePair contains the Key and Value to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair, and if so, removes it. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value. If so, the key-value pair is removed.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns>True if the item was found and removed. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.CheckGenericType``1(System.String,System.Object)\">\n            <summary>\n            Check that the given parameter is of the expected generic type. Throw an ArgumentException\n            if it isn't.\n            </summary>\n            <typeparam name=\"ExpectedType\">Expected type of the parameter</typeparam>\n            <param name=\"name\">parameter name</param>\n            <param name=\"value\">parameter value</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)\">\n            <summary>\n            Adds a key-value pair to the collection. If key or value are not of the expected types, an\n            ArgumentException is thrown. If both key and value are of the expected types, the (overridden)\n            Add method is called with the key and value to add.\n            </summary>\n            <param name=\"key\">Key to add to the dictionary.</param>\n            <param name=\"value\">Value to add to the dictionary.</param>\n            <exception cref=\"T:System.ArgumentException\">key or value are not of the expected type for this dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Clear\">\n            <summary>\n            Clears this dictionary. Calls the (overridden) Clear method.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct\n            TKey for the dictionary, false is returned.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. If\n            no key in the dictionary is equal to the passed key, the \n            dictionary is unchanged. Calls the (overridden) Remove method. If key is not of the correct\n            TKey for the dictionary, the dictionary is unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <exception cref=\"T:System.ArgumentException\">key could not be converted to TKey.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Item(`0)\">\n            <summary>\n            The indexer of the dictionary. This is used to store keys and values and\n            retrieve values from the dictionary. The setter\n            accessor must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to find in the dictionary.</param>\n            <returns>The value associated with the key.</returns>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">Thrown from the get accessor if the key\n            was not found in the dictionary.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Keys\">\n            <summary>\n            Returns a collection of the keys in this dictionary. \n            </summary>\n            <value>A read-only collection of the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.Values\">\n            <summary>\n            Returns a collection of the values in this dictionary. The ordering of \n            values in this collection is the same as that in the Keys collection.\n            </summary>\n            <value>A read-only collection of the values in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsFixedSize\">\n            <summary>\n            Returns whether this dictionary is fixed size. This implemented always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsReadOnly\">\n            <summary>\n            Returns if this dictionary is read-only. This implementation always returns false.\n            </summary>\n            <value>Always returns false.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Keys\">\n            <summary>\n            Returns a collection of all the keys in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of keys.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Values\">\n            <summary>\n            Returns a collection of all the values in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of values.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Item(System.Object)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then null is returned. When setting\n            a value, the value replaces any existing value in the dictionary. If either the key or value\n            are not of the correct type for this dictionary, an ArgumentException is thrown.\n            </summary>\n            <value>The value associated with the key, or null if the key was not present.</value>\n            <exception cref=\"T:System.ArgumentException\">key could not be converted to TKey, or value could not be converted to TValue.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyCollectionBase`1\">\n            <summary>\n            ReadOnlyCollectionBase is a base class that can be used to more easily implement the\n            generic ICollection&lt;T&gt; and non-generic ICollection interfaces for a read-only collection:\n            a collection that does not allow adding or removing elements.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyCollectionBase as a base class, the derived class must override\n            the Count and GetEnumerator methods. </para>\n            <para>ICollection&lt;T&gt;.Contains need not be implemented by the\n            derived class, but it should be strongly considered, because the ReadOnlyCollectionBase implementation\n            may not be very efficient.</para>\n            </remarks>\n            <typeparam name=\"T\">The item type of the collection.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.#ctor\">\n            <summary>\n            Creates a new ReadOnlyCollectionBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ToString\">\n            <summary>\n            Shows the string representation of the collection. The string representation contains\n            a list of the items in the collection.\n            </summary>\n            <returns>The string representation of the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Exists(System.Predicate{`0})\">\n            <summary>\n            Determines if the collection contains any item that satisfies the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if the collection contains one or more items that satisfy the condition\n            defined by <paramref name=\"predicate\"/>. False if the collection does not contain\n            an item that satisfies <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.TrueForAll(System.Predicate{`0})\">\n            <summary>\n            Determines if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>True if all of the items in the collection satisfy the condition\n            defined by <paramref name=\"predicate\"/>, or if the collection is empty. False if one or more items\n            in the collection do not satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.CountWhere(System.Predicate{`0})\">\n            <summary>\n            Counts the number of items in the collection that satisfy the condition\n            defined by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>The number of items in the collection that satisfy <paramref name=\"predicate\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.FindAll(System.Predicate{`0})\">\n            <summary>\n            Enumerates the items in the collection that satisfy the condition defined\n            by <paramref name=\"predicate\"/>.\n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ForEach(System.Action{`0})\">\n            <summary>\n            Performs the specified action on each item in this collection.\n            </summary>\n            <param name=\"action\">An Action delegate which is invoked for each item in this collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration\n            contains the result of applying <paramref name=\"converter\"/> to each item in this collection, in\n            order.\n            </summary>\n            <typeparam name=\"TOutput\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in this collection.</param>\n            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name=\"converter\"/> to each item in this collection in\n            order.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <param name=\"item\">Item to be added to the collection.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Clear\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Remove(`0)\">\n            <summary>\n            This method throws an NotSupportedException\n            stating the collection is read-only.\n            </summary>\n            <param name=\"item\">Item to be removed from the collection.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Contains(`0)\">\n            <summary>\n            Determines if the collection contains a particular item. This default implementation\n            iterates all of the items in the collection via GetEnumerator, testing each item\n            against <paramref name=\"item\"/> using IComparable&lt;T&gt;.Equals or\n            Object.Equals.\n            </summary>\n            <remarks>You should strongly consider overriding this method to provide\n            a more efficient implementation.</remarks>\n            <param name=\"item\">The item to check for in the collection.</param>\n            <returns>True if the collection contains <paramref name=\"item\"/>, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"arrayIndex\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.ToArray\">\n            <summary>\n            Creates an array of the correct size, and copies all the items in the \n            collection into the array, by calling CopyTo.\n            </summary>\n            <returns>An array containing all the elements in the collection, in order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.GetEnumerator\">\n            <summary>\n            Must be overridden to enumerate all the members of the collection.\n            </summary>\n            <returns>A generic IEnumerator&lt;T&gt; that can be used\n            to enumerate all the items in the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)\">\n            <summary>\n            Copies all the items in the collection into an array. Implemented by\n            using the enumerator returned from GetEnumerator to get all the items\n            and copy them to the provided array.\n            </summary>\n            <param name=\"array\">Array to copy to.</param>\n            <param name=\"index\">Starting index in <paramref name=\"array\"/> to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Provides an IEnumerator that can be used to iterate all the members of the\n            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden\n            by the derived classes to enumerate the members of the collection.\n            </summary>\n            <returns>An IEnumerator that can be used to iterate the collection.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the collection in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.Count\">\n            <summary>\n            Must be overridden to provide the number of items in the collection.\n            </summary>\n            <value>The number of items in the collection.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly\">\n            <summary>\n            Indicates whether the collection is read-only. Returns the value\n            of readOnly that was provided to the constructor.\n            </summary>\n            <value>Always true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#IsSynchronized\">\n            <summary>\n            Indicates whether the collection is synchronized.\n            </summary>\n            <value>Always returns false, indicating that the collection is not synchronized.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#SyncRoot\">\n            <summary>\n            Indicates the synchronization object for this collection.\n            </summary>\n            <value>Always returns this.</value>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.DictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper\">\n            <summary>\n            A class that wraps a IDictionaryEnumerator around an IEnumerator that\n            enumerates KeyValuePairs. This is useful in implementing IDictionary, because\n            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"enumerator\">The enumerator of KeyValuePairs that is being wrapped.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Hash`1\">\n             <summary>\n             The base implementation for various collections classes that use hash tables\n             as part of their implementation. This class should not (and can not) be \n             used directly by end users; it's only for internal use by the collections package. The Hash\n             does not handle duplicate values.\n             </summary>\n             <remarks>\n             The Hash manages items of type T, and uses a IComparer&lt;ItemTYpe&gt; that\n             hashes compares items to hash items into the table.  \n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Constructor. Create a new hash table.\n            </summary>\n            <param name=\"equalityComparer\">The comparer to use to compare items. </param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetEnumerationStamp\">\n            <summary>\n            Gets the current enumeration stamp. Call CheckEnumerationStamp later\n            with this value to throw an exception if the hash table is changed.\n            </summary>\n            <returns>The current enumeration stamp.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetFullHash(`0)\">\n            <summary>\n            Gets the full hash code for an item.\n            </summary>\n            <param name=\"item\">Item to get hash code for.</param>\n            <returns>The full hash code. It is never zero.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetHashValuesFromFullHash(System.Int32,System.Int32@,System.Int32@)\">\n            <summary>\n            Get the initial bucket number and skip amount from the full hash value.\n            </summary>\n            <param name=\"hash\">The full hash value.</param>\n            <param name=\"initialBucket\">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>\n            <param name=\"skip\">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetHashValues(`0,System.Int32@,System.Int32@)\">\n            <summary>\n            Gets the full hash value, initial bucket number, and skip amount for an item.\n            </summary>\n            <param name=\"item\">Item to get hash value of.</param>\n            <param name=\"initialBucket\">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>\n            <param name=\"skip\">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>\n            <returns>The full hash value. This is never zero.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.EnsureEnoughSlots(System.Int32)\">\n            <summary>\n            Make sure there are enough slots in the hash table that <paramref name=\"additionalItems\"/>\n            items can be inserted into the table.\n            </summary>\n            <param name=\"additionalItems\">Number of additional items we are inserting.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.ShrinkIfNeeded\">\n            <summary>\n            Check if the number of items in the table is small enough that\n            we should shrink the table again.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetSecondaryShift(System.Int32)\">\n            <summary>\n            Given the size of a hash table, compute the \"secondary shift\" value -- the shift\n            that is used to determine the skip amount for collision resolution.\n            </summary>\n            <param name=\"newSize\">The new size of the table.</param>\n            <returns>The secondary skip amount.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.ResizeTable(System.Int32)\">\n            <summary>\n            Resize the hash table to the given new size, moving all items into the\n            new hash table.\n            </summary>\n            <param name=\"newSize\">The new size of the hash table. Must be a power\n            of two.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Insert(`0,System.Boolean,`0@)\">\n            <summary>\n            Insert a new item into the hash table. If a duplicate item exists, can replace or\n            do nothing.\n            </summary>\n            <param name=\"item\">The item to insert.</param>\n            <param name=\"replaceOnDuplicate\">If true, duplicate items are replaced. If false, nothing\n            is done if a duplicate already exists.</param>\n            <param name=\"previous\">If a duplicate was found, returns it (whether replaced or not).</param>\n            <returns>True if no duplicate existed, false if a duplicate was found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Delete(`0,`0@)\">\n            <summary>\n            Deletes an item from the hash table. \n            </summary>\n            <param name=\"item\">Item to search for and delete.</param>\n            <param name=\"itemDeleted\">If true returned, the actual item stored in the hash table (must be \n            equal to <paramref name=\"item\"/>, but may not be identical.</param>\n            <returns>True if item was found and deleted, false if item wasn't found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Find(`0,System.Boolean,`0@)\">\n            <summary>\n            Find an item in the hash table. If found, optionally replace it with the\n            finding item.\n            </summary>\n            <param name=\"find\">Item to find.</param>\n            <param name=\"replace\">If true, replaces the equal item in the hash table\n            with <paramref name=\"item\"/>.</param>\n            <param name=\"item\">Returns the equal item found in the table, if true was returned.</param>\n            <returns>True if the item was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.GetEnumerator\">\n            <summary>\n            Enumerate all of the items in the hash table. The items\n            are enumerated in a haphazard, unpredictable order.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates the items\n            in the hash table.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Enumerate all of the items in the hash table. The items\n            are enumerated in a haphazard, unpredictable order.\n            </summary>\n            <returns>An IEnumerator that enumerates the items\n            in the hash table.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Clone(System.Converter{`0,`0})\">\n            <summary>\n            Creates a clone of this hash table.\n            </summary>\n            <param name=\"cloneItem\">If non-null, this function is applied to each item when cloning. It must be the \n            case that this function does not modify the hash code or equality function.</param>\n            <returns>A shallow clone that contains the same items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Runtime#Serialization#ISerializable#GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\n            <summary>\n            Serialize the hash table. Called from the serialization infrastructure.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\n            <summary>\n            Called on deserialization. We cannot deserialize now, because hash codes\n            might not be correct now. We do real deserialization in the OnDeserialization call.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.System#Runtime#Serialization#IDeserializationCallback#OnDeserialization(System.Object)\">\n            <summary>\n            Deserialize the hash table. Called from the serialization infrastructure when \n            the object graph has finished deserializing.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.ElementCount\">\n            <summary>\n            Get the number of items in the hash table.\n            </summary>\n            <value>The number of items stored in the hash table.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.SlotCount\">\n            <summary>\n            Get the number of slots in the hash table. Exposed internally\n            for testing purposes.\n            </summary>\n            <value>The number of slots in the hash table.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.LoadFactor\">\n            <summary>\n            Get or change the load factor. Changing the load factor may cause\n            the size of the table to grow or shrink accordingly.\n            </summary>\n            <value></value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Hash`1.Slot\">\n            <summary>\n            The structure that has each slot in the hash table. Each slot has three parts:\n            1. The collision bit. Indicates whether some item visited this slot but had to\n            keep looking because the slot was full. \n            2. 31-bit full hash value of the item. If zero, the slot is empty.\n            3. The item itself.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Hash`1.Slot.Clear\">\n            <summary>\n            Clear this slot, leaving the collision bit alone.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.HashValue\">\n            <summary>\n            The full hash value associated with the value in this slot, or zero\n            if the slot is empty.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.Empty\">\n            <summary>\n            Is this slot empty?\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Hash`1.Slot.Collision\">\n            <summary>\n            The \"Collision\" bit indicates that some value hit this slot and\n            collided, so had to try another slot.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2\">\n             <summary>\n             <para>The MultiDictionary class that associates values with a key. Unlike an Dictionary,\n             each key can have multiple values associated with it. When indexing an MultiDictionary, instead\n             of a single value associated with a key, you retrieve an enumeration of values.</para>\n             <para>When constructed, you can chose to allow the same value to be associated with a key multiple\n             times, or only one time. </para>\n             </summary>\n             <typeparam name=\"TKey\">The type of the keys.</typeparam>\n             <typeparam name=\"TValue\">The of values associated with the keys.</typeparam>\n            <seealso cref=\"T:System.Collections.Generic.Dictionary`2\"/>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2\"/>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2\">\n            <summary>\n            MultiDictionaryBase is a base class that can be used to more easily implement a class\n            that associates multiple values to a single key. The class implements the generic\n            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface.\n            </summary>\n            <remarks>\n            <para>To use MultiDictionaryBase as a base class, the derived class must override\n            Count, Clear, Add, Remove(TKey), Remove(TKey,TValue), Contains(TKey,TValue), \n            EnumerateKeys, and TryEnumerateValuesForKey. </para>\n            <para>It may wish consider overriding CountValues, CountAllValues, ContainsKey,\n            and EqualValues, but these are not required.\n            </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new MultiDictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Clear\">\n            <summary>\n            Clears the dictionary. This method must be overridden in the derived class.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. This method must be overridden by a derived\n            class.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. This method must be overridden\n            by the derived class. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Adds a key-value pair to the collection. The value part of the pair must be a collection\n            of values to associate with the key. If values are already associated with the given\n            key, the new values are added to the ones associated with that key.\n            </summary>\n            <param name=\"item\">A KeyValuePair contains the Key and Value collection to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})\">\n            <summary>\n            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the \n            key is already present, and ArgumentException is thrown. Otherwise, a\n            new key is added, and new values are associated with that key.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"values\">Values to associate with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">The key is already present in the dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.AddMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            <para>Adds new values to be associated with a key. If duplicate values are permitted, this\n            method always adds new key-value pairs to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to one of <paramref name=\"values\"/> associated with it, then that value is replaced,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"values\">A collection of values to associate with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary.  This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(`0,`1)\">\n            <summary>\n            Removes a key-value pair from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <param name=\"value\">Associated value to remove from the dictionary.</param>\n            <returns>True if the key-value pair was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Removes a set of values from a given key. If all values associated with a key are\n            removed, then the key is removed also.\n            </summary>\n            <param name=\"pair\">A KeyValuePair contains a key and a set of values to remove from that key.</param>\n            <returns>True if at least one values was found and removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.RemoveMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            Removes a collection of values from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove values from.</param>\n            <param name=\"values\">A collection of values to remove.</param>\n            <returns>The number of values that were present and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Remove all of the keys (and any associated values) in a collection\n            of keys. If a key is not present in the dictionary, nothing happens.\n            </summary>\n            <param name=\"keyCollection\">A collection of key values to remove.</param>\n            <returns>The number of keys from the collection that were present and removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryEnumerateValuesForKey.\n            It may be appropriate to override this method to \n            provide a more efficient implementation.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Contains(`0,`1)\">\n            <summary>\n            Determines if this dictionary contains a key-value pair equal to <paramref name=\"key\"/> and \n            <paramref name=\"value\"/>. The dictionary is not changed. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">The value to search for.</param>\n            <returns>True if the dictionary has associated <paramref name=\"value\"/> with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Determines if this dictionary contains the given key and all of the values associated with that key..\n            </summary>\n            <param name=\"pair\">A key and collection of values to search for.</param>\n            <returns>True if the dictionary has associated all of the values in <paramref name=\"pair\"/>.Value with <paramref name=\"pair\"/>.Key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.EqualValues(`1,`1)\">\n            <summary>\n            If the derived class does not use the default comparison for values, this\n            methods should be overridden to compare two values for equality. This is\n            used for the correct implementation of ICollection.Contains on the Values\n            and KeyValuePairs collections.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.CountValues(`0)\">\n            <summary>\n            Gets a count of the number of values associated with a key. The\n            default implementation is slow; it enumerators all of the values\n            (using TryEnumerateValuesForKey) to count them. A derived class\n            may be able to supply a more efficient implementation.\n            </summary>\n            <param name=\"key\">The key to count values for.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. This default implementation\n            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.\n            A derived class may be able to supply a more efficient implementation.\n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.Replace(`0,`1)\">\n            <summary>\n            Replaces all values associated with <paramref name=\"key\"/> with the single value <paramref name=\"value\"/>.\n            </summary>\n            <remarks>This implementation simply calls Remove, followed by Add.</remarks>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The new values to be associated with <paramref name=\"key\"/>.</param>\n            <returns>Returns true if some values were removed. Returns false if <paramref name=\"key\"/> was not\n            present in the dictionary before Replace was called.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ReplaceMany(`0,System.Collections.Generic.IEnumerable{`1})\">\n            <summary>\n            Replaces all values associated with <paramref name=\"key\"/> with a new collection\n            of values. If the collection does not permit duplicate values, and <paramref name=\"values\"/> has duplicate\n            items, then only the last of duplicates is added.\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"values\">The new values to be associated with <paramref name=\"key\"/>.</param>\n            <returns>Returns true if some values were removed. Returns false if <paramref name=\"key\"/> was not\n            present in the dictionary before Replace was called.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.GetEnumerator\">\n            <summary>\n            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.\n            </summary>\n            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Count\">\n            <summary>\n            Gets the number of keys in the dictionary. This property must be overridden\n            in the derived class.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Keys\">\n            <summary>\n            Gets a read-only collection all the keys in this dictionary.\n            </summary>\n            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Values\">\n            <summary>\n            Gets a read-only collection of all the values in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values\">\n            <summary>\n            Gets a read-only collection of all the value collections in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.Item(`0)\">\n            <summary>\n            Returns a collection of all of the values in the dictionary associated with <paramref name=\"key\"/>,\n            or changes the set of values associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, an ICollection enumerating no\n            values is returned. The returned collection of values is read-write, and can be used to \n            modify the collection of values associated with the key.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name=\"key\"/>.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)\">\n            <summary>\n            Gets a collection of all the values in the dictionary associated with <paramref name=\"key\"/>,\n            or changes the set of values associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, a KeyNotFound exception is thrown.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name=\"key\"/>.</value>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">The given key is not present in the dictionary.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection\">\n            <summary>\n            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection\n            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,\n            etc. values from the multi-dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.#ctor(Wintellect.PowerCollections.MultiDictionaryBase{`0,`1},`0)\">\n            <summary>\n            Constructor. Initializes this collection.\n            </summary>\n            <param name=\"myDictionary\">Dictionary we're using.</param>\n            <param name=\"key\">The key we're looking at.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Clear\">\n            <summary>\n            Remove the key and all values associated with it.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Add(`1)\">\n            <summary>\n            Add a new values to this key.\n            </summary>\n            <param name=\"item\">New values to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Remove(`1)\">\n            <summary>\n            Remove a value currently associated with key.\n            </summary>\n            <param name=\"item\">Value to remove.</param>\n            <returns>True if item was assocaited with key, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.NoValues\">\n            <summary>\n            A simple function that returns an IEnumerator&lt;TValue&gt; that\n            doesn't yield any values. A helper.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator\">\n            <summary>\n            Enumerate all the values associated with key.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)\">\n            <summary>\n            Determines if the given values is associated with key.\n            </summary>\n            <param name=\"item\">Value to check for.</param>\n            <returns>True if value is associated with key, false otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Count\">\n            <summary>\n            Get the number of values associated with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.MultiDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.EnumerableValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;ICollection&lt;TValue&gt;&gt; and ICollection for the\n            Values collection on IDictionary. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionaryBase`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean)\">\n            <summary>\n            Create a new MultiDictionary. The default ordering of keys and values are used. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation\n            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be\n            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Create a new MultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyEqualityComparer\">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1})\">\n            <summary>\n            Create a new MultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyEqualityComparer\">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueEqualityComparer\">An IEqualityComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1},System.Collections.Generic.IEqualityComparer{Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues},Wintellect.PowerCollections.Hash{Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues})\">\n            <summary>\n            Create a new MultiDictionary. Private constructor, for use by Clone().\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Add(`0,`1)\">\n            <summary>\n            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this\n            method always adds a new key-value pair to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to <paramref name=\"value\"/> associated with it, then that value is replaced with <paramref name=\"value\"/>,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The value to associated with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Remove(`0,`1)\">\n            <summary>\n            Removes a given value from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove a value from.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if <paramref name=\"value\"/> was associated with <paramref name=\"key\"/> (and was\n            therefore removed). False if <paramref name=\"value\"/> was not associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Remove(`0)\">\n            <summary>\n            Removes a key and all associated values from the dictionary. If the\n            key is not present in the dictionary, it is unchanged and false is returned.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was present and was removed. Returns \n            false if the key was not present.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EqualValues(`1,`1)\">\n            <summary>\n            Determine if two values are equal.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Checks to see if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>\n            in the dictionary.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <param name=\"value\">The value to check.</param>\n            <returns>True if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Checks to see if the key is present in the dictionary and has\n            at least one value associated with it.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <returns>True if <paramref name=\"key\"/> is present and has at least\n            one value associated with it. Returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. \n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the dictionary that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.EnumerateValues(Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)\">\n            <summary>\n             Enumerate the values in the a KeyAndValues structure. Can't return\n            the array directly because:\n              a) The array might be larger than the count.\n              b) We can't allow clients to down-cast to the array and modify it.\n              c) We have to abort enumeration if the hash changes.\n            </summary>\n            <param name=\"keyAndValues\">Item with the values to enumerate..</param>\n            <returns>An enumerable that enumerates the items in the KeyAndValues structure.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in the dictionary, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.KeyComparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for TKey (EqualityComparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.ValueComparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare values in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for TValue (EqualityComparer&lt;TValue&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.MultiDictionary`2.Count\">\n            <summary>\n            Gets the number of key-value pairs in the dictionary. Each value associated\n            with a given key is counted. If duplicate values are permitted, each duplicate\n            value is included in the count.\n            </summary>\n            <value>The number of key-value pairs in the dictionary.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues\">\n            <summary>\n            A structure to hold the key and the values associated with the key.\n            The number of values must always be 1 or greater in a version that is stored, but \n            can be zero in a dummy version used only for lookups.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Key\">\n            <summary>\n            The key.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Count\">\n            <summary>\n            The number of values. Always at least 1 except in a dummy version for lookups.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Values\">\n            <summary>\n            An array of values. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.#ctor(`0)\">\n            <summary>\n            Create a dummy KeyAndValues with just the key, for lookups.\n            </summary>\n            <param name=\"key\">The key to use.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValues.Copy(Wintellect.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)\">\n            <summary>\n            Make a copy of a KeyAndValues, copying the array.\n            </summary>\n            <param name=\"x\">KeyAndValues to copy.</param>\n            <returns>A copied version.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.MultiDictionary`2.KeyAndValuesEqualityComparer\">\n            <summary>\n            This class implements IEqualityComparer for KeysAndValues, allowing them to be\n            compared by their keys. An IEqualityComparer on keys is required.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1\">\n             <summary>\n             OrderedBag&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a sorted order. Unlike a OrderedSet, duplicate items (items that\n             compare equal to each other) are allows in an OrderedBag.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedBag is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) + M time, where N is the number of keys in the tree, and M is the current number\n             of copies of the element being handled.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.Bag`1\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the keys in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.Bag`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor\">\n             <summary>\n             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this bag.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedBag. The Compare method of the passed comparison object\n            will be used to compare items in this bag.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this bag. The bag is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.\n            The bag is initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedBag. The Compare method of the passed comparison object\n            will be used to compare items in this bag. The bag is\n            initialized with all the items in the given collection.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"collection\">A collection with items to be placed into the OrderedBag.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0},Wintellect.PowerCollections.RedBlackTree{`0})\">\n            <summary>\n            Creates a new OrderedBag given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"comparer\">Comparer for the bag.</param>\n            <param name=\"tree\">Data for the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Clone\">\n            <summary>\n            Makes a shallow clone of this bag; i.e., if items of the\n            bag are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>\n            <returns>The cloned bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this bag. A new bag is created with a clone of\n            each element of this bag, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>\n            <returns>The cloned bag.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.NumberOfCopies(`0)\">\n            <summary>\n            Returns the number of copies of <paramref name=\"item\"/> in the bag. More precisely, returns\n            the number of items in the bag that compare equal to <paramref name=\"item\"/>.\n            </summary>\n            <remarks>NumberOfCopies() takes time O(log N + M), where N is the total number of items in the\n            bag, and M is the number of copies of <paramref name=\"item\"/> in the bag.</remarks>\n            <param name=\"item\">The item to search for in the bag.</param>\n            <returns>The number of items in the bag that compare equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the bag. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the bag while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the bag takes time O(N), where N is the number\n            of items in the bag.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the OrderedBag.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Contains(`0)\">\n            <summary>\n            Determines if this bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed.\n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>. False if the bag does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetEqualItems(`0)\">\n            <summary>\n            <para>Enumerates all of the items in this bag that are equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the bag was created. The bag\n            is not changed.</para>\n            <para>If the bag does contain an item equal to <paramref name=\"item\"/>, then the enumeration contains\n            no items.</para>\n            </summary>\n            <remarks>Enumeration the items in the bag equal to <paramref name=\"item\"/> takes time O(log N + M), where N \n            is the total number of items in the bag, and M is the number of items equal to <paramref name=\"item\"/>.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in the bag equal to <paramref name=\"item\"/>. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.DistinctItems\">\n            <summary>\n            Enumerates all the items in the bag, but enumerates equal items\n            just once, even if they occur multiple times in the bag.\n            </summary>\n            <remarks>If the bag is changed while items are being enumerated, the\n            enumeration will terminate with an InvalidOperationException.</remarks>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.LastIndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. If multiple\n            equal items exist, the largest index of the equal items is returned.\n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the last item in the sorted bag equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. If multiple\n            equal items exist, the smallest index of the equal items is returned.\n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the first item in the sorted bag equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Add(`0)\">\n            <summary>\n            Adds a new item to the bag. Since bags can contain duplicate items, the item \n            is added even if the bag already contains an item equal to <paramref name=\"item\"/>. In\n            this case, the new item is placed after all equal items already present in the bag.\n            </summary>\n            <remarks>\n            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add to the bag.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the bag. \n            </summary>\n            <remarks>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the bag.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Remove(`0)\">\n            <summary>\n            Searches the bag for one item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. If more than one item\n            equal to <paramref name=\"item\"/>, the item that was last inserted is removed.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveAllCopies(`0)\">\n            <summary>\n            Searches the bag for all items equal to <paramref name=\"item\"/>, and \n            removes all of them from the bag. If not found, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is\n            the number of items equal to <paramref name=\"item\"/>.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>The number of copies of <paramref name=\"item\"/> that were found and removed. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the bag. Items not\n            present in the bag are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing the collection takes time O(M log N), where N is the number of items in the bag, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the bag.</param>\n            <returns>The number of items removed from the bag.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Clear\">\n            <summary>\n            Removes all items from the bag.\n            </summary>\n            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CheckEmpty\">\n            <summary>\n            If the collection is empty, throw an invalid operation exception.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetFirst\">\n            <summary>\n            Returns the first item in the bag: the item\n            that would appear first if the bag was enumerated. This is also\n            the smallest item in the bag.\n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The first item in the bag. If more than one item\n            is smallest, the first one added is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.GetLast\">\n            <summary>\n            Returns the last item in the bag: the item\n            that would appear last if the bag was enumerated. This is also the largest\n            item in the bag.\n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The last item in the bag. If more than one item\n            is largest, the last one added is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveFirst\">\n            <summary>\n            Removes the first item in the bag. This is also the smallest\n            item in the bag.\n            </summary>\n            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The item that was removed, which was the smallest item in the bag. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RemoveLast\">\n            <summary>\n            Removes the last item in the bag. This is also the largest item in the bag.\n            </summary>\n            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The item that was removed, which was the largest item in the bag. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The bag is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.CheckConsistentComparison(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Check that this bag and another bag were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherBag\">Other bag to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherBag and this bag don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsSupersetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a superset of another bag. Neither bag is modified.\n            This bag is a superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsProperSupersetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a proper superset of another bag. Neither bag is modified.\n            This bag is a proper superset of <paramref name=\"otherBag\"/> if every element in\n            <paramref name=\"otherBag\"/> is also in this bag, at least the same number of\n            times. Additional, this bag must have strictly more items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in \n            <paramref name=\"otherBag\"/>.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsSubsetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherBag\"/>, and N is the size of the this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsProperSubsetOf(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is a proper subset of another bag. Neither bag is modified.\n            This bag is a subset of <paramref name=\"otherBag\"/> if every element in this bag\n            is also in <paramref name=\"otherBag\"/>, at least the same number of\n            times. Additional, this bag must have strictly fewer items than <paramref name=\"otherBag\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref nameb=\"otherBag\"/>, and N is the size of the this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherBag\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsDisjointFrom(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is disjoint from another bag. Two bags are disjoint\n            if no item from one set is equal to any item in the other bag.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to check disjointness with.</param>\n            <returns>True if the two bags are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IsEqualTo(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Determines if this bag is equal to another bag. This bag is equal to\n            <paramref name=\"otherBag\"/> if they contain the same items, each the\n            same number of times.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this bag.</remarks>\n            <param name=\"otherBag\">OrderedBag to compare to</param>\n            <returns>True if this bag is equal to <paramref name=\"otherBag\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.UnionWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives\n            the union of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Union(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the union of this bag with another bag. The union of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is \n            created with the union of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to union with.</param>\n            <returns>The union of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SumWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. The sum of two bags\n            is all items from both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives\n            the sum of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Sum(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the sum of this bag with another bag. he sum of two bags\n            is all items from both of the bags.  If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is \n            created with the sum of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to sum with.</param>\n            <returns>The sum of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.IntersectionWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives\n            the intersection of the two bags, the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Intersection(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the intersection of this bag with another bag. The intersection of two bags\n            is all items that appear in both of the bags. If an item appears X times in one bag,\n            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. A new bag is \n            created with the intersection of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to intersection with.</param>\n            <returns>The intersection of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.DifferenceWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives\n            the difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Difference(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the difference of this bag with another bag. The difference of these two bags\n            is all items that appear in this bag, but not in <paramref name=\"otherBag\"/>. If an item appears X times in this bag,\n            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is \n            created with the difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to difference with.</param>\n            <returns>The difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SymmetricDifferenceWith(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). This bag receives\n            the symmetric difference of the two bags; the other bag is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.SymmetricDifference(Wintellect.PowerCollections.OrderedBag{`0})\">\n            <summary>\n            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags\n            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,\n            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). A new bag is \n            created with the symmetric difference of the bags and is returned. This bag and the other bag \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the \n            larger bag, and N is the size of the smaller bag.</para>\n            </remarks>\n            <param name=\"otherBag\">Bag to symmetric difference with.</param>\n            <returns>The symmetric difference of the two bags.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This bag and <paramref name=\"otherBag\"/> don't use the same method for comparing items.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"otherBag\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.AsList\">\n            <summary>\n            Get a read-only list view of the items in this ordered bag. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedBag.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this OrderedBag.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the items in the bag in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.Reversed()) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedBag.View of items in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The items are enumerated in sorted order.\n             Items equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.Range(from, true, to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.RangeFrom(from, true)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the bag.\n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in bag.RangeTo(to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the bag while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedBag.View of items in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare items in this bag. \n            </summary>\n            <value>If the bag was created using a comparer, that comparer is returned. If the bag was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Count\">\n            <summary>\n            Returns the number of items in the bag.\n            </summary>\n            <remarks>The size of the bag is returned in constant time.</remarks>\n            <value>The number of items in the bag.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1.ListView\">\n            <summary>\n            The nested class that provides a read-only list view\n            of all or part of the collection.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyListBase`1\">\n            <summary>\n            ReadOnlyListBase is an abstract class that can be used as a base class for a read-only collection that needs \n            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs\n            to override the Count property and the get part of the indexer. The implementation\n            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.#ctor\">\n            <summary>\n            Creates a new ReadOnlyListBase.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Contains(`0)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"item\"/>.\n            The implementation simply checks whether IndexOf(item) returns a non-negative value.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the list contains an item that compares equal to <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[])\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at index 0.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies all the items in the list, in order, to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)\">\n            <summary>\n            Copies a range of elements from the list to <paramref name=\"array\"/>,\n            starting at <paramref name=\"arrayIndex\"/>.\n            </summary>\n            <param name=\"index\">The starting index in the source list of the range to copy.</param>\n            <param name=\"array\">The array to copy to. This array must have a size\n            that is greater than or equal to Count + arrayIndex.</param>\n            <param name=\"arrayIndex\">The starting index in <paramref name=\"array\"/>\n            to copy to.</param>\n            <param name=\"count\">The number of items to copy.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Find(System.Predicate{`0})\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the first item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLast(System.Predicate{`0})\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, than\n            the default value for T (null or all-zero) is returned.\n            </summary>\n            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name=\"predicate\"/>,\n            and the list might contain the default value, then it is impossible to distinguish the different between finding\n            the default value and not finding any item. To distinguish these cases, use <see cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>.</remarks>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, the default value for T is returned.</returns>\n            <seealso cref=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)\">\n            <summary>\n            Finds the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. \n            </summary>\n            <param name=\"predicate\">A delegate that defines the condition to check for.</param>\n            <param name=\"foundItem\">If true is returned, this parameter receives the last item in the list\n            that satifies the condition defined by <paramref name=\"predicate\"/>.</param>\n            <returns>True if an item that  satisfies the condition <paramref name=\"predicate\"/> was found. False \n            if no item in the list satisfies that condition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the first item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item in the list that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <returns>The index of the last item that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, that satisfies the condition\n            defined by <paramref name=\"predicate\"/>. If no item matches the condition, -1 is returned.\n            </summary>\n            <param name=\"predicate\">A delegate that defined the condition to check for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that satisfies the condition <paramref name=\"predicate\"/>. If no item satisfies that\n            condition, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0)\">\n            <summary>\n            Finds the index of the first item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the first item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of items extending from <paramref name=\"index\"/> to the end,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the first item, in the range of <paramref name=\"count\"/> items starting from <paramref name=\"index\"/>,  \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The starting index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the first item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0)\">\n            <summary>\n            Finds the index of the last item in the list that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <returns>The index of the last item in the list that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of items extending from the beginning\n            of the list to <paramref name=\"index\"/>, that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search fror.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32,System.Int32)\">\n            <summary>\n            Finds the index of the last item, in the range of <paramref name=\"count\"/> items ending at <paramref name=\"index\"/>, \n            that is equal to <paramref name=\"item\"/>. \n            </summary>\n            <remarks>The default implementation of equality for type T is used in the search. This is the\n            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"index\">The ending index of the range to check.</param>\n            <param name=\"count\">The number of items in range to check.</param>\n            <returns>The index of the last item in the given range that that is equal to <paramref name=\"item\"/>.  If no item is equal\n            to <paramref name=\"item\"/>, -1 is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. \n            </summary>\n            <remarks>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.Reverse(deque.Range(3, 6))</code>\n            will return the reverse opf the 6 items beginning at index 3.</remarks>\n            <param name=\"start\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-part of this list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"start\"/> + <paramref name=\"count\"/> is greater than the\n            size of the list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index.  This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Add(System.Object)\">\n            <summary>\n            Adds an item to the end of the list. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"value\">The item to add to the list.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Clear\">\n            <summary>\n            Removes all the items from the list, resulting in an empty list. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Contains(System.Object)\">\n            <summary>\n            Determines if the list contains any item that compares equal to <paramref name=\"value\"/>.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IndexOf(System.Object)\">\n            <summary>\n            Find the first occurrence of an item equal to <paramref name=\"value\"/>\n            in the list, and returns the index of that item.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to search for.</param>\n            <returns>The index of <paramref name=\"value\"/>, or -1 if no item in the \n            list compares equal to <paramref name=\"value\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)\">\n            <summary>\n            Insert a new item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item in the list has index 0.</param>\n            <param name=\"value\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Remove(System.Object)\">\n            <summary>\n            Searches the list for the first item that compares equal to <paramref name=\"value\"/>.\n            If one is found, it is removed. Otherwise, the list is unchanged.  This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <remarks>Equality in the list is determined by the default sense of\n            equality for T. If T implements IComparable&lt;T&gt;, the\n            Equals method of that interface is used to determine equality. Otherwise, \n            Object.Equals is used to determine equality.</remarks>\n            <param name=\"value\">The item to remove from the list.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index. This implementation throws a NotSupportedException\n            indicating that the list is read-only.\n            </summary>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.Count\">\n            <summary>\n            The property must be overridden by the derived class to return the number of \n            items in the list.\n            </summary>\n            <value>The number of items in the list.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.Item(System.Int32)\">\n            <summary>\n            The get part of the indexer must be overridden by the derived class to get \n            values of the list at a particular index.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsFixedSize\">\n            <summary>\n            Returns whether the list is a fixed size. This implementation always returns true.\n            </summary>\n            <value>Alway true, indicating that the list is fixed size.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsReadOnly\">\n            <summary>\n            Returns whether the list is read only. This implementation always returns true.\n            </summary>\n            <value>Alway true, indicating that the list is read-only.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Item(System.Int32)\">\n            <summary>\n            Gets or sets the value at a particular index in the list.\n            </summary>\n            <param name=\"index\">The index in the list to get or set an item at. The\n            first item in the list has index 0, and the last has index Count-1.</param>\n            <value>The item at the given index.</value>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"value\"/> cannot be converted to T.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the setter, indicating that the list\n            is read-only.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.ListView.#ctor(Wintellect.PowerCollections.OrderedBag{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Create a new list view wrapped the given set.\n            </summary>\n            <param name=\"myBag\">The ordered bag to wrap.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedBag`1.View\">\n             <summary>\n             The OrderedBag&lt;T&gt;.View class is used to look at a subset of the items\n             inside an ordered bag. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying bag changes, the view changes in sync. If a change is made\n             to the view, the underlying bag changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items \n             in a subset of the OrderedBag. For example:</p>\n            <code>\n             foreach(T item in bag.Range(from, to)) {\n                // process item\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.#ctor(Wintellect.PowerCollections.OrderedBag{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the view.\n            </summary>\n            <param name=\"myBag\">OrderedBag being viewed</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.ItemInView(`0)\">\n            <summary>\n            Determine if the given item lies within the bounds of this view.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>True if the item is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetEnumerator\">\n            <summary>\n            Enumerate all the items in this view.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Clear\">\n            <summary>\n            Removes all the items within this view from the underlying bag.\n            </summary>\n            <example>The following removes all the items that start with \"A\" from an OrderedBag.\n            <code>\n            bag.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Add(`0)\">\n            <summary>\n            Adds a new item to the bag underlying this View. If the bag already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n            <returns>True if the bag already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Remove(`0)\">\n            <summary>\n            Searches the underlying bag for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the bag. If not found, the bag is unchanged. If the item is outside\n            the range of this view, the bag is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the bag.</para>\n            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the bag, or\n            was outside the range of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Contains(`0)\">\n            <summary>\n            Determines if this view of the bag contains an item equal to <paramref name=\"item\"/>. The bag\n            is not changed. If \n            </summary>\n            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the bag contains <paramref name=\"item\"/>, and <paramref name=\"item\"/> is within\n            the range of this view. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.IndexOf(`0)\">\n            <summary>\n            Get the first index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the first item in the view equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.LastIndexOf(`0)\">\n            <summary>\n            Get the last index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the last item in the view equal to <paramref name=\"item\"/>, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.AsList\">\n            <summary>\n            Get a read-only list view of the items in this view. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.Reversed\">\n            <summary>\n            Creates a new View that has the same items as this view, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view, with the same upper \n            and lower bounds.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetFirst\">\n            <summary>\n            Returns the first item in this view: the item\n            that would appear first if the view was enumerated. \n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The first item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedBag`1.View.GetLast\">\n            <summary>\n            Returns the last item in the view: the item\n            that would appear last if the view was enumerated. \n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>\n            <returns>The last item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.View.Count\">\n            <summary>\n            Number of items in this view.\n            </summary>\n            <value>Number of items that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedBag`1.View.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2\">\n             <summary>\n             <para>The OrderedMultiDictionary class that associates values with a key. Unlike an OrderedDictionary,\n             each key can have multiple values associated with it. When indexing an OrderedMultidictionary, instead\n             of a single value associated with a key, you retrieve an enumeration of values.</para>\n             <para>All of the key are stored in sorted order. Also, the values associated with a given key \n             are kept in sorted order as well.</para>\n             <para>When constructed, you can chose to allow the same value to be associated with a key multiple\n             times, or only one time. </para>\n             </summary>\n             <typeparam name=\"TKey\">The type of the keys.</typeparam>\n             <typeparam name=\"TValue\">The of values associated with the keys.</typeparam>\n            <seealso cref=\"T:Wintellect.PowerCollections.MultiDictionary`2\"/>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedDictionary`2\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NewPair(`0,`1)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a default value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyRange(`0)\">\n            <summary>\n            Get a RangeTester that maps to the range of all items with the \n            given key.\n            </summary>\n            <param name=\"key\">Key in the given range.</param>\n            <returns>A RangeTester delegate that selects the range of items with that range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.DoubleBoundedKeyRangeTester(`0,System.Boolean,`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"firstInclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"lastInclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.LowerBoundedKeyRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by a lower bound.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"inclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.UpperBoundedKeyRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by upper bound.\n            </summary>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"inclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for a key in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean)\">\n            <summary>\n            Create a new OrderedMultiDictionary. The default ordering of keys and values are used. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation\n            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be\n            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparison\">A delegate to a method that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0},System.Comparison{`1})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparison\">A delegate to a method that will be used to compare keys.</param>\n            <param name=\"valueComparison\">A delegate to a method that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1})\">\n            <summary>\n            Create a new OrderedMultiDictionary. If duplicate values\n            are allowed, multiple copies of the same value can be associated with the same key. For example, the key \"foo\"\n            could have \"a\", \"a\", and \"b\" associated with it. If duplicate values are not allowed, only one copies of a given value can\n            be associated with the same key, although different keys can have the same value. For example, the key \"foo\" could\n            have \"a\" and \"b\" associated with it, which key \"bar\" has values \"b\" and \"c\" associated with it.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueComparer\">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Int32,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Create a new OrderedMultiDictionary. Used internally for cloning.\n            </summary>\n            <param name=\"allowDuplicateValues\">Can the same value be associated with a key multiple times?</param>\n            <param name=\"keyCount\">Number of keys.</param>\n            <param name=\"keyComparer\">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>\n            <param name=\"valueComparer\">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>\n            <param name=\"comparer\">Comparer of key-value pairs.</param>\n            <param name=\"tree\">The red-black tree used to store the data.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Add(`0,`1)\">\n            <summary>\n            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this\n            method always adds a new key-value pair to the dictionary.</para>\n            <para>If duplicate values are not permitted, and <paramref name=\"key\"/> already has a value\n            equal to <paramref name=\"value\"/> associated with it, then that value is replaced with <paramref name=\"value\"/>,\n            and the number of values associate with <paramref name=\"key\"/> is unchanged.</para>\n            </summary>\n            <param name=\"key\">The key to associate with.</param>\n            <param name=\"value\">The value to associated with <paramref name=\"key\"/>.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Remove(`0,`1)\">\n            <summary>\n            Removes a given value from the values associated with a key. If the\n            last value is removed from a key, the key is removed also.\n            </summary>\n            <param name=\"key\">A key to remove a value from.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if <paramref name=\"value\"/> was associated with <paramref name=\"key\"/> (and was\n            therefore removed). False if <paramref name=\"value\"/> was not associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Remove(`0)\">\n            <summary>\n            Removes a key and all associated values from the dictionary. If the\n            key is not present in the dictionary, it is unchanged and false is returned.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was present and was removed. Returns \n            false if the key was not present.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EqualValues(`1,`1)\">\n            <summary>\n            Determine if two values are equal.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Checks to see if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>\n            in the dictionary.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <param name=\"value\">The value to check.</param>\n            <returns>True if <paramref name=\"value\"/> is associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Checks to see if the key is present in the dictionary and has\n            at least one value associated with it.\n            </summary>\n            <param name=\"key\">The key to check.</param>\n            <returns>True if <paramref name=\"key\"/> is present and has at least\n            one value associated with it. Returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys(Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean)\">\n            <summary>\n            A private helper method that returns an enumerable that\n            enumerates all the keys in a range.\n            </summary>\n            <param name=\"rangeTester\">Defines the range to enumerate.</param>\n            <param name=\"reversed\">Should the keys be enumerated in reverse order?</param>\n            <returns>An IEnumerable&lt;TKey&gt; that enumerates the keys in the given range.\n            in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateValuesForKey(`0)\">\n            <summary>\n            A private helper method for the indexer to return an enumerable that\n            enumerates all the values for a key. This is separate method because indexers\n            can't use the yield return construct.\n            </summary>\n            <param name=\"key\"></param>\n            <returns>An IEnumerable&lt;TValue&gt; that can be used to enumerate all the\n            values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/> is not present,\n            an enumerable that enumerates no items is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys\">\n            <summary>\n            Enumerate all of the keys in the dictionary.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; of all of the keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in the dictionary, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. \n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the keys and values in the collection in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {\n                // process pair\n             }\n            </code></p>\n             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The keys are enumerated in sorted order.\n             Keys equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The keys are enumerated in sorted order. Keys equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyComparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.ValueComparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare values in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TValue (Comparer&lt;TValue&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.Count\">\n            <summary>\n            Gets the number of key-value pairs in the dictionary. Each value associated\n            with a given key is counted. If duplicate values are permitted, each duplicate\n            value is included in the count.\n            </summary>\n            <value>The number of key-value pairs in the dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedMultiDictionary`2.View\">\n             <summary>\n             The OrderedMultiDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values\n             inside an ordered multi-dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made\n             to the view, the underlying dictionary changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys\n             and values in a subset of the OrderedMultiDictionary. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {\n                // process pair\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.#ctor(Wintellect.PowerCollections.OrderedMultiDictionary{`0,`1},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the View.\n            </summary>\n            <param name=\"myDictionary\">Associated OrderedMultiDictionary to be viewed.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.KeyInView(`0)\">\n            <summary>\n            Determine if the given key lies within the bounds of this view.\n            </summary>\n            <param name=\"key\">Key to test.</param>\n            <returns>True if the key is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. \n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.ContainsKey(`0)\">\n            <summary>\n            Tests if the key is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Contains(`0,`1)\">\n            <summary>\n            Tests if the key-value pair is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check for.</param>\n            <param name=\"value\">Value to check for.</param>\n            <returns>True if the key-value pair is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.CountValues(`0)\">\n            <summary>\n            Gets the number of values associated with a given key.\n            </summary>\n            <param name=\"key\">The key to count values of.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>. If <paramref name=\"key\"/>\n            is not present in this view, zero is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Add(`0,`1)\">\n            <summary>\n            Adds the given key-value pair to the underlying dictionary of this view.\n            If <paramref name=\"key\"/> is not within the range of this view, an\n            ArgumentException is thrown.\n            </summary>\n            <param name=\"key\"></param>\n            <param name=\"value\"></param>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"key\"/> is not \n            within the range of this view.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the underlying dictionary of this view. If\n            no key in the view is equal to the passed key, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0,`1)\">\n            <summary>\n            Removes the key and value from the underlying dictionary of this view. that is equal to the passed in key. If\n            no key in the view is equal to the passed key, or has the given value associated with it, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <param name=\"value\">The value to remove.</param>\n            <returns>True if the key-value pair was found and removed. False if the key-value pair was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Clear\">\n            <summary>\n            Removes all the keys and values within this view from the underlying OrderedMultiDictionary.\n            </summary>\n            <example>The following removes all the keys that start with \"A\" from an OrderedMultiDictionary.\n            <code>\n            dictionary.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Reversed\">\n            <summary>\n            Creates a new View that has the same keys and values as this, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedMultiDictionary`2.View.Count\">\n            <summary>\n            Number of keys in this view.\n            </summary>\n            <value>Number of keys that lie within the bounds the view.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1\">\n             <summary>\n             OrderedSet&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a sorted order, and duplicate items are not allowed. Each item has\n             an index in the set: the smallest item has index 0, the next smallest item has index 1,\n             and so forth.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedSet is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) type, where N is the number of keys in the tree.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.Set`1\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the items in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.Set`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor\">\n             <summary>\n             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this set.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedSet. The Compare method of the passed comparison object\n            will be used to compare items in this set.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;\n             or IComparable. \n             The CompareTo method of this interface will be used to compare items in this set. The set is\n             initialized with all the items in the given collection.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n             <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.\n            The set is initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedSet. The Compare method of the passed comparison object\n            will be used to compare items in this set. The set is\n            initialized with all the items in the given collection.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never\n            be called, and need not be implemented.\n            </remarks>\n            <param name=\"collection\">A collection with items to be placed into the OrderedSet.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0},Wintellect.PowerCollections.RedBlackTree{`0})\">\n            <summary>\n            Creates a new OrderedSet given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"comparer\">Comparer for the set.</param>\n            <param name=\"tree\">Data for the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this set. A new set is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the set takes time O(N log N), where N is the number of items in the set.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the set. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the set while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the items in the set takes time O(N log N), where N is the number\n            of items in the set.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the OrderedSet.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Contains(`0)\">\n            <summary>\n            Determines if this set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed.\n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.TryGetItem(`0,`0@)\">\n            <summary>\n            <para>Determines if this set contains an item equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the set was created. The set\n            is not changed.</para>\n            <para>If the set does contain an item equal to <paramref name=\"item\"/>, then the item from the set is returned.</para>\n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <example>\n            In the following example, the set contains strings which are compared in a case-insensitive manner. \n            <code>\n            OrderedSet&lt;string&gt; set = new OrderedSet&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);\n            set.Add(\"HELLO\");\n            string s;\n            bool b = set.TryGetItem(\"Hello\", out s);   // b receives true, s receives \"HELLO\".\n            </code>\n            </example>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"foundItem\">Returns the item from the set that was equal to <paramref name=\"item\"/>.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the item in the sorted set, or -1 if the item is not present\n            in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the set. If the set already contains an item equal to\n            one of the items in <paramref name=\"collection\"/>, that item will be replaced.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding the collection takes time O(M log N), where N is the number of items in the set, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Remove(`0)\">\n            <summary>\n            Searches the set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the set. Items\n            not present in the set are ignored.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing the collection takes time O(M log N), where N is the number of items in the set, and M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the set.</param>\n            <returns>The number of items removed from the set.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Clear\">\n            <summary>\n            Removes all items from the set.\n            </summary>\n            <remarks>Clearing the sets takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CheckEmpty\">\n            <summary>\n            If the collection is empty, throw an invalid operation exception.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetFirst\">\n            <summary>\n            Returns the first item in the set: the item\n            that would appear first if the set was enumerated. This is also\n            the smallest item in the set.\n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The first item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.GetLast\">\n            <summary>\n            Returns the lastl item in the set: the item\n            that would appear last if the set was enumerated. This is also the\n            largest item in the set.\n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The lastl item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveFirst\">\n            <summary>\n            Removes the first item in the set. This is also the smallest item in the set.\n            </summary>\n            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The item that was removed, which was the smallest item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RemoveLast\">\n            <summary>\n            Removes the last item in the set. This is also the largest item in the set.\n            </summary>\n            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The item that was removed, which was the largest item in the set. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The set is empty.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.CheckConsistentComparison(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Check that this set and another set were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherSet\">Other set to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherSet and this set don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsSupersetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a superset of another set. Neither set is modified.\n            This set is a superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            </summary>\n            <param name=\"otherSet\">OrderedSet to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsProperSupersetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a proper superset of another set. Neither set is modified.\n            This set is a proper superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            Additionally, this set must have strictly more items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in \n            <paramref name=\"otherSet\"/>.</remarks>\n            <param name=\"otherSet\">OrderedSet to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsSubsetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsProperSubsetOf(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is a proper subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>. Additionally, this set must have strictly \n            fewer items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the \n            <paramref name=\"otherSet\"/>, and N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsEqualTo(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is equal to another set. This set is equal to\n            <paramref name=\"otherSet\"/> if they contain the same items.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this set.</remarks>\n            <param name=\"otherSet\">Set to compare to</param>\n            <returns>True if this set is equal to <paramref name=\"otherSet\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.UnionWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. This set receives\n            the union of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IsDisjointFrom(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Determines if this set is disjoint from another set. Two sets are disjoint\n            if no item from one set is equal to any item in the other set.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to check disjointness with.</param>\n            <returns>True if the two sets are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Union(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. A new set is \n            created with the union of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <returns>The union of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.IntersectionWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. This set receives\n            the intersection of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Intersection(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. A new set is \n            created with the intersection of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <returns>The intersection of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.DifferenceWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. This set receives\n            the difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Difference(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. A new set is \n            created with the difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <returns>The difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.SymmetricDifferenceWith(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. This set receives\n            the symmetric difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.SymmetricDifference(Wintellect.PowerCollections.OrderedSet{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. A new set is \n            created with the symmetric difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <returns>The symmetric difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.AsList\">\n            <summary>\n            Get a read-only list view of the items in this ordered set. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this OrderedSet.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the items in the set in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.Reversed()) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedSet.View of items in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The items are enumerated in sorted order.\n             Items equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.Range(from, true, to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.RangeFrom(from, true)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--items equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a View collection that can be used for enumerating a range of the items in the set..\n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(T item in set.RangeTo(to, false)) {\n                // process item\n             }\n            </code></p>\n             <p>If an item is added to or deleted from the set while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--items equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedSet.View of items in the given range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare items in this set. \n            </summary>\n            <value>If the set was created using a comparer, that comparer is returned. If the set was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Count\">\n            <summary>\n            Returns the number of items in the set.\n            </summary>\n            <remarks>The size of the set is returned in constant time.</remarks>\n            <value>The number of items in the set.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1.ListView\">\n            <summary>\n            The nested class that provides a read-only list view\n            of all or part of the collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.ListView.#ctor(Wintellect.PowerCollections.OrderedSet{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Create a new list view wrapped the given set.\n            </summary>\n            <param name=\"mySet\"></param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedSet`1.View\">\n             <summary>\n             The OrderedSet&lt;T&gt;.View class is used to look at a subset of the Items\n             inside an ordered set. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying set changes, the view changes in sync. If a change is made\n             to the view, the underlying set changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items \n             in a subset of the OrderedSet. For example:</p>\n            <code>\n             foreach(T item in set.Range(from, to)) {\n                // process item\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.#ctor(Wintellect.PowerCollections.OrderedSet{`0},Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the view.\n            </summary>\n            <param name=\"mySet\">OrderedSet being viewed</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.ItemInView(`0)\">\n            <summary>\n            Determine if the given item lies within the bounds of this view.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>True if the item is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetEnumerator\">\n            <summary>\n            Enumerate all the items in this view.\n            </summary>\n            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Clear\">\n            <summary>\n            Removes all the items within this view from the underlying set.\n            </summary>\n            <example>The following removes all the items that start with \"A\" from an OrderedSet.\n            <code>\n            set.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Add(`0)\">\n            <summary>\n            Adds a new item to the set underlying this View. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set underlying this View. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaces with <paramref name=\"item\"/>. If\n            <paramref name=\"item\"/> is outside the range of this view, an InvalidOperationException\n            is thrown.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Remove(`0)\">\n            <summary>\n            Searches the underlying set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged. If the item is outside\n            the range of this view, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set, or\n            was outside the range of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Contains(`0)\">\n            <summary>\n            Determines if this view of the set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed. If \n            </summary>\n            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>, and <paramref name=\"item\"/> is within\n            the range of this view. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.IndexOf(`0)\">\n            <summary>\n            Get the index of the given item in the view. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>Finding the index takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"item\">The item to get the index of.</param>\n            <returns>The index of the item in the view, or -1 if the item is not present\n            in the view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.AsList\">\n            <summary>\n            Get a read-only list view of the items in this view. The\n            items in the list are in sorted order, with the smallest item\n            at index 0. This view does not copy any data, and reflects any\n            changes to the underlying OrderedSet.\n            </summary>\n            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.Reversed\">\n            <summary>\n            Creates a new View that has the same items as this view, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view, with the same upper \n            and lower bounds.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetFirst\">\n            <summary>\n            Returns the first item in this view: the item\n            that would appear first if the view was enumerated. \n            </summary>\n            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The first item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedSet`1.View.GetLast\">\n            <summary>\n            Returns the last item in the view: the item\n            that would appear last if the view was enumerated. \n            </summary>\n            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>\n            <returns>The last item in the view. </returns>\n            <exception cref=\"T:System.InvalidOperationException\">The view has no items in it.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.View.Count\">\n            <summary>\n            Number of items in this view.\n            </summary>\n            <value>Number of items that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedSet`1.View.Item(System.Int32)\">\n            <summary>\n            Get the item by its index in the sorted order. The smallest item in the view has index 0,\n            the next smallest item has index 1, and the largest item has index Count-1. \n            </summary>\n            <remarks>The indexer takes time O(log N), which N is the number of items in \n            the set.</remarks>\n            <param name=\"index\">The index to get the item by.</param>\n            <returns>The item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Pair`2\">\n            <summary>\n            Stores a pair of objects within a single struct. This struct is useful to use as the\n            T of a collection, or as the TKey or TValue of a dictionary.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.firstComparer\">\n            <summary>\n            Comparers for the first and second type that are used to compare\n            values.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.First\">\n            <summary>\n            The first element of the pair.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Pair`2.Second\">\n            <summary>\n            The second element of the pair.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.#ctor(`0,`1)\">\n            <summary>\n            Creates a new pair with given first and second elements.\n            </summary>\n            <param name=\"first\">The first element of the pair.</param>\n            <param name=\"second\">The second element of the pair.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.#ctor(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Creates a new pair using elements from a KeyValuePair structure. The\n            First element gets the Key, and the Second elements gets the Value.\n            </summary>\n            <param name=\"keyAndValue\">The KeyValuePair to initialize the Pair with .</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.Equals(System.Object)\">\n            <summary>\n            Determines if this pair is equal to another object. The pair is equal to another object \n            if that object is a Pair, both element types are the same, and the first and second elements\n            both compare equal using object.Equals.\n            </summary>\n            <param name=\"obj\">Object to compare for equality.</param>\n            <returns>True if the objects are equal. False if the objects are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.Equals(Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if this pair is equal to another pair. The pair is equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"other\">Pair to compare with for equality.</param>\n            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.GetHashCode\">\n            <summary>\n            Returns a hash code for the pair, suitable for use in a hash-table or other hashed collection.\n            Two pairs that compare equal (using Equals) will have the same hash code. The hash code for\n            the pair is derived by combining the hash codes for each of the two elements of the pair.\n            </summary>\n            <returns>The hash code.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.CompareTo(Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            <para> Compares this pair to another pair of the some type. The pairs are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements.</para>\n            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the pairs cannot be compared.</para>\n            </summary>\n            <param name=\"other\">The pair to compare to.</param>\n            <returns>An integer indicating how this pair compares to <paramref name=\"other\"/>. Less\n            than zero indicates this pair is less than <paramref name=\"other\"/>. Zero indicate this pair is\n            equals to <paramref name=\"other\"/>. Greater than zero indicates this pair is greater than\n            <paramref name=\"other\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond or TSecond is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.System#IComparable#CompareTo(System.Object)\">\n            <summary>\n            <para> Compares this pair to another pair of the some type. The pairs are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements.</para>\n            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the pairs cannot be compared.</para>\n            </summary>\n            <param name=\"obj\">The pair to compare to.</param>\n            <returns>An integer indicating how this pair compares to <paramref name=\"obj\"/>. Less\n            than zero indicates this pair is less than <paramref name=\"other\"/>. Zero indicate this pair is\n            equals to <paramref name=\"obj\"/>. Greater than zero indicates this pair is greater than\n            <paramref name=\"obj\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"obj\"/> is not of the correct type.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond or TSecond is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.ToString\">\n            <summary>\n            Returns a string representation of the pair. The string representation of the pair is\n            of the form:\n            <c>First: {0}, Second: {1}</c>\n            where {0} is the result of First.ToString(), and {1} is the result of Second.ToString() (or\n            \"null\" if they are null.)\n            </summary>\n            <returns> The string representation of the pair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Equality(Wintellect.PowerCollections.Pair{`0,`1},Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if two pairs are equal. Two pairs are equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First pair to compare.</param>\n            <param name=\"pair2\">Second pair to compare.</param>\n            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Inequality(Wintellect.PowerCollections.Pair{`0,`1},Wintellect.PowerCollections.Pair{`0,`1})\">\n            <summary>\n            Determines if two pairs are not equal. Two pairs are equal if  the first and second elements\n            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First pair to compare.</param>\n            <param name=\"pair2\">Second pair to compare.</param>\n            <returns>True if the pairs are not equal. False if the pairs are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Explicit(Wintellect.PowerCollections.Pair{`0,`1})~System.Collections.Generic.KeyValuePair{`0,`1}\">\n            <summary>\n            Converts a Pair to a KeyValuePair. The Key part of the KeyValuePair gets\n            the First element, and the Value part of the KeyValuePair gets the Second \n            elements.\n            </summary>\n            <param name=\"pair\">Pair to convert.</param>\n            <returns>The KeyValuePair created from <paramref name=\"pair\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.ToKeyValuePair\">\n            <summary>\n            Converts this Pair to a KeyValuePair. The Key part of the KeyValuePair gets\n            the First element, and the Value part of the KeyValuePair gets the Second \n            elements.\n            </summary>\n            <returns>The KeyValuePair created from this Pair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Pair`2.op_Explicit(System.Collections.Generic.KeyValuePair{`0,`1})~Wintellect.PowerCollections.Pair{`0,`1}\">\n            <summary>\n            Converts a KeyValuePair structure into a Pair. The\n            First element gets the Key, and the Second element gets the Value.\n            </summary>\n            <param name=\"keyAndValue\">The KeyValuePair to convert.</param>\n            <returns>The Pair created by converted the KeyValuePair into a Pair.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2\">\n            <summary>\n            ReadOnlyDictionaryBase is a base class that can be used to more easily implement the\n            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyDictionaryBase as a base class, the derived class must override\n            Count, TryGetValue, GetEnumerator. </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new DictionaryBase. This must be called from the constructor of the\n            derived class to specify whether the dictionary is read-only and the name of the\n            collection.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@TValue}#Add(`0,`1)\">\n            <summary>\n            Adds a new key-value pair to the dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"value\">Value to associated with the key.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found\n            in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue and returns\n            what it returns.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. This method must be overridden \n            in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})\">\n            <summary>\n            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the\n            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)\n            the value.\n            </summary>\n            <param name=\"item\">A KeyValuePair containing the Key and Value to check for.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)\">\n            <summary>\n            Adds a key-value pair to the collection. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">Key to add to the dictionary.</param>\n            <param name=\"value\">Value to add to the dictionary.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Clear\">\n            <summary>\n            Clears this dictionary. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct\n            TKey for the dictionary, false is returned.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. Always throws an exception\n            indicating that this method is not supported in a read-only dictionary.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a DictionaryEntry.\n            The entries are enumerated in the same orders as the (overridden) GetEnumerator\n            method.\n            </summary>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Item(`0)\">\n            <summary>\n            The indexer of the dictionary. The set accessor throws an NotSupportedException\n            stating the dictionary is read-only.\n            </summary>\n            <remarks>The get accessor is implemented by calling TryGetValue.</remarks>\n            <param name=\"key\">Key to find in the dictionary.</param>\n            <returns>The value associated with the key.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the set accessor, indicating\n            that the dictionary is read only.</exception>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">Thrown from the get accessor if the key\n            was not found.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Keys\">\n            <summary>\n            Returns a collection of the keys in this dictionary. \n            </summary>\n            <value>A read-only collection of the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.Values\">\n            <summary>\n            Returns a collection of the values in this dictionary. The ordering of \n            values in this collection is the same as that in the Keys collection.\n            </summary>\n            <value>A read-only collection of the values in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsFixedSize\">\n            <summary>\n            Returns whether this dictionary is fixed size. \n            </summary>\n            <value>Always returns true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsReadOnly\">\n            <summary>\n            Returns if this dictionary is read-only. \n            </summary>\n            <value>Always returns true.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Keys\">\n            <summary>\n            Returns a collection of all the keys in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of keys.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Values\">\n            <summary>\n            Returns a collection of all the values in the dictionary. The values in this collection will\n            be enumerated in the same order as the (overridden) GetEnumerator method.\n            </summary>\n            <value>The collection of values.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Item(System.Object)\">\n            <summary>\n            Gets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then null is returned. If the key is not of the correct type \n            for this dictionary, null is returned.\n            </summary>\n            <value>The value associated with the key, or null if the key was not present.</value>\n            <exception cref=\"T:System.NotSupportedException\">Always thrown from the set accessor, indicating\n            that the dictionary is read only.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.ReadOnlyDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper\">\n            <summary>\n            A class that wraps a IDictionaryEnumerator around an IEnumerator that\n            enumerates KeyValuePairs. This is useful in implementing IDictionary, because\n            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"enumerator\">The enumerator of KeyValuePairs that is being wrapped.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1\">\n            <summary>\n            BigList&lt;T&gt; provides a list of items, in order, with indices of the items ranging from 0 to one less\n            than the count of items in the collection. BigList&lt;T&gt; is optimized for efficient operations on large (&gt;100 items)\n            lists, especially for insertions, deletions, copies, and concatinations.\n            </summary>\n            <remarks>\n            <para>BigList&lt;T&gt; class is similar in functionality to the standard List&lt;T&gt; class. Both classes\n            provide a collection that stores an set of items in order, with indices of the items ranging from 0 to one less\n            than the count of items in the collection. Both classes provide the ability to add and remove items from any index,\n            and the get or set the item at any index.</para> \n            <para>BigList&lt;T&gt; differs significantly from List&lt;T&gt; in the performance of various operations, \n            especially when the lists become large (several hundred items or more). With List&lt;T&gt;, inserting or removing\n            elements from anywhere in a large list except the end is very inefficient -- every item after the point of inserting\n            or deletion has to be moved in the list. The BigList&lt;T&gt; class, however, allows for fast insertions\n            and deletions anywhere in the list. Furthermore, BigList&lt;T&gt; allows copies of a list, sub-parts\n            of a list, and concatinations of two lists to be very fast. When a copy is made of part or all of a BigList,\n            two lists shared storage for the parts of the lists that are the same. Only when one of the lists is changed is additional\n            memory allocated to store the distinct parts of the lists.</para>\n            <para>Of course, there is a small price to pay for this extra flexibility. Although still quite efficient, using an \n            index to get or change one element of a BigList, while still reasonably efficient, is significantly slower than using\n            a plain List. Because of this, if you want to process every element of a BigList, using a foreach loop is a lot\n            more efficient than using a for loop and indexing the list.</para>\n            <para>In general, use a List when the only operations you are using are Add (to the end), foreach,\n            or indexing, or you are very sure the list will always remain small (less than 100 items). For large (&gt;100 items) lists\n            that do insertions, removals, copies, concatinations, or sub-ranges, BigList will be more efficient than List. \n            In almost all cases, BigList is more efficient and easier to use than LinkedList.</para>\n            </remarks>\n            <typeparam name=\"T\">The type of items to store in the BigList.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor\">\n            <summary>\n            Creates a new BigList. The BigList is initially empty.\n            </summary>\n            <remarks>Creating a empty BigList takes constant time and consumes a very small amount of memory.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Creates a new BigList initialized with the items from <paramref name=\"collection\"/>, in order.\n            </summary>\n            <remarks>Initializing the tree list with the elements of collection takes time O(N), where N is the number of\n            items in <paramref name=\"collection\"/>.</remarks>\n            <param name=\"collection\">The collection used to initialize the BigList. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Int32)\">\n            <summary>\n            Creates a new BigList initialized with a given number of copies of the items from <paramref name=\"collection\"/>, in order. \n            </summary>\n            <remarks>Initializing the tree list with the elements of collection takes time O(N + log K), where N is the number of\n            items in <paramref name=\"collection\"/>, and K is the number of copies.</remarks>\n            <param name=\"copies\">Number of copies of the collection to use.</param>\n            <param name=\"collection\">The collection used to initialize the BigList. </param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"copies\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Creates a new BigList that is a copy of <paramref name=\"list\"/>.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <param name=\"list\">The BigList to copy. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0},System.Int32)\">\n            <summary>\n            Creates a new BigList that is several copies of <paramref name=\"list\"/>.\n            </summary>\n            <remarks>Creating K copies of a BigList takes time O(log K), and O(log K) \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <param name=\"copies\">Number of copies of the collection to use.</param>\n            <param name=\"list\">The BigList to copy. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.#ctor(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Creates a new BigList from the indicated Node.\n            </summary>\n            <param name=\"node\">Node that becomes the new root. If null, the new BigList is empty.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Clear\">\n            <summary>\n            Removes all of the items from the BigList.\n            </summary>\n            <remarks>Clearing a BigList takes constant time.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Insert(System.Int32,`0)\">\n            <summary>\n            Inserts a new item at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> move up one index.\n            </summary>\n            <remarks>The amount of time to insert an item is O(log N), no matter where\n            in the list the insertion occurs. Inserting an item at the beginning or end of the \n            list is O(N). \n            </remarks>\n            <param name=\"index\">The index to insert the item at. After the\n            insertion, the inserted item is located at this index. The\n            first item has index 0.</param>\n            <param name=\"item\">The item to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Inserts a collection of items at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices \n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert an arbitrary collection in the BigList is O(M + log N), \n            where M is the number of items inserted, and N is the number of items in the list.\n            </remarks>\n            <param name=\"index\">The index to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            first item has index 0.</param>\n            <param name=\"collection\">The collection of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.InsertRange(System.Int32,Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Inserts a BigList of items at the given index in the BigList. All items at indexes \n            equal to or greater than <paramref name=\"index\"/> increase their indices \n            by the number of items inserted.\n            </summary>\n            <remarks>The amount of time to insert another BigList is O(log N), \n            where N is the number of items in the list, regardless of the number of items in the \n            inserted list. Storage is shared between the two lists until one of them is changed.\n            </remarks>\n            <param name=\"index\">The index to insert the collection at. After the\n            insertion, the first item of the inserted collection is located at this index. The\n            first item has index 0.</param>\n            <param name=\"list\">The BigList of items to insert at the given index.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than Count.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the item at the given index in the BigList. All items at indexes \n            greater than <paramref name=\"index\"/> move down one index.\n            </summary>\n            <remarks>The amount of time to delete an item in the BigList is O(log N),\n            where N is the number of items in the list. \n            </remarks>\n            <param name=\"index\">The index in the list to remove the item at. The\n            first item in the list has index 0.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Removes a range of items at the given index in the Deque. All items at indexes \n            greater than <paramref name=\"index\"/> move down <paramref name=\"count\"/> indices\n            in the Deque.\n            </summary>\n            <remarks>The amount of time to delete <paramref name=\"count\"/> items in the Deque is proportional\n            to the distance of index from the closest end of the Deque, plus <paramref name=\"count\"/>: \n            O(count + Min(<paramref name=\"index\"/>, Count - 1 - <paramref name=\"index\"/>)).\n            </remarks>\n            <param name=\"index\">The index in the list to remove the range at. The\n            first item in the list has index 0.</param>\n            <param name=\"count\">The number of items to remove.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is\n            less than zero or greater than or equal to Count, or <paramref name=\"count\"/> is less than zero\n            or too large.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Add(`0)\">\n            <summary>\n            Adds an item to the end of the BigList. The indices of all existing items\n            in the Deque are unchanged. \n            </summary>\n            <remarks>Adding an item takes, on average, constant time.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddToFront(`0)\">\n            <summary>\n            Adds an item to the beginning of the BigList. The indices of all existing items\n            in the Deque are increased by one, and the new item has index zero. \n            </summary>\n            <remarks>Adding an item takes, on average, constant time.</remarks>\n            <param name=\"item\">The item to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRange(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the end of BigList. The indices of all existing items\n            are unchanged. The last item in the added collection becomes the\n            last item in the BigList.\n            </summary>\n            <remarks>This method takes time O(M + log N), where M is the number of items in the \n            <paramref name=\"collection\"/>, and N is the size of the BigList.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRangeToFront(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds a collection of items to the front of BigList. The indices of all existing items\n            in the are increased by the number of items in <paramref name=\"collection\"/>. \n            The first item in the added collection becomes the first item in the BigList.\n            </summary>\n            <remarks>This method takes time O(M + log N), where M is the number of items in the \n            <paramref name=\"collection\"/>, and N is the size of the BigList.</remarks>\n            <param name=\"collection\">The collection of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Clone\">\n            <summary>\n            Creates a new BigList that is a copy of this list.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <returns>A copy of the current list</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.System#ICloneable#Clone\">\n            <summary>\n            Creates a new BigList that is a copy of this list.\n            </summary>\n            <remarks>Copying a BigList takes constant time, and little \n            additional memory, since the storage for the items of the two lists is shared. However, changing\n            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>\n            <returns>A copy of the current list</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this BigList. A new BigList is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then this method is the same as Clone.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>If T is a reference type, cloning the list takes time approximate O(N), where N is the number of items in the list.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRange(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Adds a BigList of items to the end of BigList. The indices of all existing items\n            are unchanged. The last item in <paramref name=\"list\"/> becomes the\n            last item in this list. The added list <paramref name=\"list\"/> is unchanged.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in <paramref name=\"list\"/> are\n            copied, storage is shared between the two lists until changes are made to the \n            shared sections.</remarks>\n            <param name=\"list\">The list of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddRangeToFront(Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Adds a BigList of items to the front of BigList. The indices of all existing items\n            are increased by the number of items in <paramref name=\"list\"/>. The first item in <paramref name=\"list\"/> \n            becomes the first item in this list. The added list <paramref name=\"list\"/> is unchanged.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in <paramref name=\"list\"/> are\n            copied, storage is shared between the two lists until changes are made to the \n            shared sections.</remarks>\n            <param name=\"list\">The list of items to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"list\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.op_Addition(Wintellect.PowerCollections.BigList{`0},Wintellect.PowerCollections.BigList{`0})\">\n            <summary>\n            Concatenates two lists together to create a new list. Both lists being concatenated\n            are unchanged. The resulting list contains all the items in <paramref name=\"first\"/>, followed\n            by all the items in <paramref name=\"second\"/>.\n            </summary>\n            <remarks>This method takes, on average, constant time, regardless of the size\n            of either list. Although conceptually all of the items in both lists are\n            copied, storage is shared until changes are made to the \n            shared sections.</remarks>\n            <param name=\"first\">The first list to concatenate.</param>\n            <param name=\"second\">The second list to concatenate.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"first\"/> or <paramref name=\"second\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)\">\n            <summary>\n            Creates a new list that contains a subrange of elements from this list. The\n            current list is unchanged.\n            </summary>\n            <remarks>This method takes take O(log N), where N is the size of the current list. Although\n            the sub-range is conceptually copied, storage is shared between the two lists until a change\n            is made to the shared items.</remarks>\n            <remarks>If a view of a sub-range is desired, instead of a copy, use the\n            more efficient <see cref=\"M:Wintellect.PowerCollections.BigList`1.Range(System.Int32,System.Int32)\"/> method, which provides a view onto a sub-range of items.</remarks>\n            <param name=\"index\">The starting index of the sub-range.</param>\n            <param name=\"count\">The number of items in the sub-range. If this is zero,\n            the returned list is empty.</param>\n            <returns>A new list with the <paramref name=\"count\"/> items that start at <paramref name=\"index\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Range(System.Int32,System.Int32)\">\n            <summary>\n            Returns a view onto a sub-range of this list. Items are not copied; the\n            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list\n            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the \n            view, but insertions and deletions in the underlying list do not.\n            </summary>\n            <remarks>\n            <para>If a copy of the sub-range is desired, use the <see cref=\"M:Wintellect.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)\"/> method instead.</para>\n            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>\n            <code>Algorithms.ReverseInPlace(list.Range(3, 6))</code>\n            will reverse the 6 items beginning at index 3.</remarks>\n            <param name=\"index\">The starting index of the view.</param>\n            <param name=\"count\">The number of items in the view.</param>\n            <returns>A list that is a view onto the given sub-list. </returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> or <paramref name=\"count\"/> is negative.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> + <paramref name=\"count\"/> is greater than the\n            size of this list.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetEnumerator(System.Int32,System.Int32)\">\n            <summary>\n            Enumerates a range of the items in the list, in order. The item at <paramref name=\"start\"/>\n            is enumerated first, then the next item at index 1, and so on. At most <paramref name=\"maxItems\"/>\n            items are enumerated. \n            </summary>\n            <remarks>Enumerating all of the items in the list take time O(N), where\n            N is the number of items being enumerated. Using GetEnumerator() or foreach\n            is much more efficient than accessing all items by index.</remarks>\n            <param name=\"start\">Index to start enumerating at.</param>\n            <param name=\"maxItems\">Max number of items to enumerate.</param>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.GetEnumerator\">\n            <summary>\n            Enumerates all of the items in the list, in order. The item at index 0\n            is enumerated first, then the item at index 1, and so on. Usually, the\n            foreach statement is used to call this method implicitly.\n            </summary>\n            <remarks>Enumerating all of the items in the list take time O(N), where\n            N is the number of items in the list. Using GetEnumerator() or foreach\n            is much more efficient than accessing all items by index.</remarks>\n            <returns>An IEnumerator&lt;T&gt; that enumerates all the\n            items in the list.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.NodeFromEnumerable(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Given an IEnumerable&lt;T&gt;, create a new Node with all of the \n            items in the enumerable. Returns null if the enumerable has no items.\n            </summary>\n            <param name=\"collection\">The collection to copy.</param>\n            <returns>Returns a Node, not shared or with any shared children, \n            with the items from the collection. If the collection was empty,\n            null is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafFromEnumerator(System.Collections.Generic.IEnumerator{`0})\">\n            <summary>\n            Consumes up to MAXLEAF items from an Enumerator and places them in a leaf\n            node. If the enumerator is at the end, null is returned.\n            </summary>\n            <param name=\"enumerator\">The enumerator to take items from.</param>\n            <returns>A LeafNode with items taken from the enumerator. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.NCopiesOfNode(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a node that has N copies of the given node. \n            </summary>\n            <param name=\"copies\">Number of copies. Must be non-negative.</param>\n            <param name=\"node\">Node to make copies of.</param>\n            <returns>null if node is null or copies is 0. Otherwise, a node consisting of <paramref name=\"copies\"/> copies\n            of node.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">copies is negative.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.CheckBalance\">\n            <summary>\n            Check the balance of the current tree and rebalance it if it is more than BALANCEFACTOR\n            levels away from fully balanced. Note that rebalancing a tree may leave it two levels away from \n            fully balanced.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Rebalance\">\n            <summary>\n            Rebalance the current tree. Once rebalanced, the depth of the current tree is no more than\n            two levels from fully balanced, where fully balanced is defined as having Fibonacci(N+2) or more items\n            in a tree of depth N.\n            </summary>\n            <remarks>The rebalancing algorithm is from \"Ropes: an Alternative to Strings\", by \n            Boehm, Atkinson, and Plass, in SOFTWARE--PRACTICE AND EXPERIENCE, VOL. 25(12), 1315–1330 (DECEMBER 1995).\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddNodeToRebalanceArray(Wintellect.PowerCollections.BigList{`0}.Node[],Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Part of the rebalancing algorithm. Adds a node to the rebalance array. If it is already balanced, add it directly, otherwise\n            add its children.\n            </summary>\n            <param name=\"rebalanceArray\">Rebalance array to insert into.</param>\n            <param name=\"node\">Node to add.</param>\n            <param name=\"shared\">If true, mark the node as shared before adding, because one\n            of its parents was shared.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.AddBalancedNodeToRebalanceArray(Wintellect.PowerCollections.BigList{`0}.Node[],Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Part of the rebalancing algorithm. Adds a balanced node to the rebalance array. \n            </summary>\n            <param name=\"rebalanceArray\">Rebalance array to insert into.</param>\n            <param name=\"balancedNode\">Node to add.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConvertAll``1(System.Converter{`0,``0})\">\n            <summary>\n            Convert the list to a new list by applying a delegate to each item in the collection. The resulting list\n            contains the result of applying <paramref name=\"converter\"/> to each item in the list, in\n            order. The current list is unchanged.\n            </summary>\n            <typeparam name=\"TDest\">The type each item is being converted to.</typeparam>\n            <param name=\"converter\">A delegate to the method to call, passing each item in <paramref name=\"sourceCollection\"/>.</param>\n            <returns>The resulting BigList from applying <paramref name=\"converter\"/> to each item in this list.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"converter\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Reverse\">\n            <summary>\n            Reverses the current list in place.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Reverse(System.Int32,System.Int32)\">\n            <summary>\n            Reverses the items in the range of <paramref name=\"count\"/> items starting from <paramref name=\"startIndex\"/>, in place.\n            </summary>\n            <param name=\"start\">The starting index of the range to reverse.</param>\n            <param name=\"count\">The number of items in range to reverse.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort\">\n            <summary>\n            Sorts the list in place.\n            </summary>\n            <remarks><para>The Quicksort algorithm is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</para>\n            <para>Values are compared by using the IComparable or IComparable&lt;T&gt;\n            interface implementation on the type T.</para></remarks>\n            <exception cref=\"T:System.InvalidOperationException\">The type T does not implement either the IComparable or\n            IComparable&lt;T&gt; interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Sorts the list in place. A supplied IComparer&lt;T&gt; is used\n            to compare the items in the list. \n            </summary>\n            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</remarks>\n            <param name=\"comparer\">The comparer instance used to compare items in the collection. Only\n            the Compare method is used.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Sort(System.Comparison{`0})\">\n            <summary>\n            Sorts the list in place. A supplied Comparison&lt;T&gt; delegate is used\n            to compare the items in the list.\n            </summary>\n            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,\n            this takes time O(N log N), where N is the number of items in the list.</remarks>\n            <param name=\"comparison\">The comparison delegate used to compare items in the collection.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0)\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            in the order defined by the default ordering of the item type; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The type T does not implement either the IComparable or\n            IComparable&lt;T&gt; interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0,System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering defined by the passed IComparer&lt;T&gt; interface; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparer\">The IComparer&lt;T&gt; interface used to sort the list.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BinarySearch(`0,System.Comparison{`0})\">\n            <summary>\n            Searches a sorted list for an item via binary search. The list must be sorted\n            by the ordering defined by the passed Comparison&lt;T&gt; delegate; otherwise, \n            incorrect results will be returned.\n            </summary>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"comparison\">The comparison delegate used to sort the list.</param>\n            <returns>Returns the index of the first occurence of <paramref name=\"item\"/> in the list. If the item does not occur\n            in the list, the bitwise complement of the first item larger than <paramref name=\"item\"/> in the list is returned. If no item is \n            larger than <paramref name=\"item\"/>, the bitwise complement of Count is returned.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Count\">\n            <summary>\n            Gets the number of items stored in the BigList. The indices of the items\n            range from 0 to Count-1.\n            </summary>\n            <remarks>Getting the number of items in the BigList takes constant time.</remarks>\n            <value>The number of items in the BigList.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Item(System.Int32)\">\n            <summary>\n            Gets or sets an item in the list, by index.\n            </summary>\n            <remarks><para> Gettingor setting an item takes time O(log N), where N is the number of items\n            in the list.</para>\n            <para>To process each of the items in the list, using GetEnumerator() or a foreach loop is more efficient\n            that accessing each of the elements by index.</para></remarks>\n            <param name=\"index\">The index of the item to get or set. The first item in the list\n            has index 0, the last item has index Count-1.</param>\n            <returns>The value of the item at the given index.</returns>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><paramref name=\"index\"/> is less than zero or \n            greater than or equal to Count.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.Node\">\n            <summary>\n            The base class for the two kinds of nodes in the tree: Concat nodes\n            and Leaf nodes.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.MarkShared\">\n            <summary>\n            Marks this node as shared by setting the shared variable.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Append(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node appended to this node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.Prepend(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Prefpend a node before this node. Never changes this node, but returns\n            a new node with the given prepending done.\n            </summary>\n            <param name=\"node\">Node to prepend.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node prepended to this node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.PrependInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Prepend a node before this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to prepend.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.IsBalanced\">\n            <summary>\n            Determine if this node is balanced. A node is balanced if the number\n            of items is greater than\n            Fibonacci(Depth+2). Balanced nodes are never rebalanced unless\n            they go out of balance again.\n            </summary>\n            <returns>True if the node is balanced by this definition.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.Node.IsAlmostBalanced\">\n            <summary>\n            Determine if this node is almost balanced. A node is almost balanced if t\n            its depth is at most one greater than a fully balanced node with the same count.\n            </summary>\n            <returns>True if the node is almost balanced by this definition.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Count\">\n            <summary>\n            The number of items stored in the node (or below it).\n            </summary>\n            <value>The number of items in the node or below.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Shared\">\n            <summary>\n            Is this node shared by more that one list (or within a single)\n            lists. If true, indicates that this node, and any nodes below it,\n            may never be modified. Never becomes false after being set to \n            true.\n            </summary>\n            <value></value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.Node.Depth\">\n            <summary>\n            Gets the depth of this node. A leaf node has depth 0, \n            a concat node with two leaf children has depth 1, etc.\n            </summary>\n            <value>The depth of this node.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.LeafNode\">\n            <summary>\n            The LeafNode class is the type of node that lives at the leaf of a tree and holds\n            the actual items stored in the list. Each leaf holds at least 1, and at most MAXLEAF\n            items in the items array. The number of items stored is found in \"count\", which may\n            be less than \"items.Length\".\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.LeafNode.items\">\n            <summary>\n            Array that stores the items in the nodes. Always has a least \"count\" elements,\n            but may have more as padding.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.#ctor(`0)\">\n            <summary>\n            Creates a LeafNode that holds a single item.\n            </summary>\n            <param name=\"item\">Item to place into the leaf node.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.#ctor(System.Int32,`0[])\">\n            <summary>\n            Creates a new leaf node with the indicates count of item and the\n            </summary>\n            <param name=\"count\">Number of items. Can't be zero.</param>\n            <param name=\"newItems\">The array of items. The LeafNode takes\n            possession of this array.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.MergeLeafInPlace(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge\n            the other leaf node into this one (after this one) and return true.\n            </summary>\n            <param name=\"other\">Other node to possible merge.</param>\n            <returns>If <paramref name=\"other\"/> could be merged into this node, returns\n            true. Otherwise returns false and the current node is unchanged.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.MergeLeaf(Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge\n            the other leaf node with this one (after this one) and return a new node with \n            the merged items. Does not modify this.\n            If no merging, return null.\n            </summary>\n            <param name=\"other\">Other node to possible merge.</param>\n            <returns>If the nodes could be merged, returns the new node. Otherwise\n            returns null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.LeafNode.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.ConcatNode\">\n            <summary>\n            A ConcatNode is an interior (non-leaf) node that represents the concatination of\n            the left and right child nodes. Both children must always be non-null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.left\">\n            <summary>\n            The left and right child nodes. They are never null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.right\">\n            <summary>\n            The left and right child nodes. They are never null.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.BigList`1.ConcatNode.depth\">\n            <summary>\n            The depth of this node -- the maximum length path to \n            a leaf. If this node has two children that are leaves, the\n            depth in 1.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.#ctor(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a new ConcatNode with the given children.\n            </summary>\n            <param name=\"left\">The left child. May not be null.</param>\n            <param name=\"right\">The right child. May not be null.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.NewNode(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Create a new node with the given children. Mark unchanged\n            children as shared. There are four\n            possible cases:\n            1. If one of the new children is null, the other new child is returned.\n            2. If neither child has changed, then this is marked as shared as returned.\n            3. If one child has changed, the other child is marked shared an a new node is returned.\n            4. If both children have changed, a new node is returned.\n            </summary>\n            <param name=\"newLeft\">New left child.</param>\n            <param name=\"newRight\">New right child.</param>\n            <returns>New node with the given children. Returns null if and only if both\n            new children are null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.NewNodeInPlace(Wintellect.PowerCollections.BigList{`0}.Node,Wintellect.PowerCollections.BigList{`0}.Node)\">\n            <summary>\n            Updates a node with the given new children. If one of the new children is\n            null, the other is returned. If both are null, null is returned.\n            </summary>\n            <param name=\"newLeft\">New left child.</param>\n            <param name=\"newRight\">New right child.</param>\n            <returns>Node with the given children. Usually, but not always, this. Returns\n            null if and only if both new children are null.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.GetAt(System.Int32)\">\n            <summary>\n            Returns the items at the given index in this node.\n            </summary>\n            <param name=\"index\">0-based index, relative to this node.</param>\n            <returns>Item at that index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.SetAtInPlace(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. May change this node,\n            or return a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A node with the give item changed. If it can be done in place\n            then \"this\" is returned.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.SetAt(System.Int32,`0)\">\n            <summary>\n            Changes the item at the given index. Never changes this node,\n            but always returns a new node with the given item changed.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to change.</param>\n            <param name=\"item\">New item to place at the given index.</param>\n            <returns>A new node with the given item changed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.PrependInPlace(`0)\">\n            <summary>\n            Prepend a item before this node. May change this node, or return \n            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to prepend.</param>\n            <returns>A node with the given item prepended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.AppendInPlace(`0)\">\n            <summary>\n            Append a item after this node. May change this node, or return \n            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but\n            may be more efficient because a new LeafNode might not be allocated.\n            </summary>\n            <param name=\"item\">Item to append.</param>\n            <returns>A node with the given item appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.AppendInPlace(Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Append a node after this node. May change this node, or return \n            a new node.\n            </summary>\n            <param name=\"node\">Node to append.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the give node appended to this node. May be a new\n            node or the current node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,`0)\">\n            <summary>\n            Inserts an item inside this node. May change this node, or return\n            a new node with the given appending done. Equivalent to \n            InsertInPlace(new LeafNode(item), true), but may be more efficient.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"item\">Item to insert.</param>\n            <returns>A node with the give item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. May change this node, or return\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A node with the given item inserted. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.Insert(System.Int32,Wintellect.PowerCollections.BigList{`0}.Node,System.Boolean)\">\n            <summary>\n            Inserts a node inside this node. Never changes this node, but returns\n            a new node with the given appending done.\n            </summary>\n            <param name=\"index\">Index, relative to this node, to insert at. Must \n            be in bounds.</param>\n            <param name=\"node\">Node to insert.</param>\n            <param name=\"nodeIsUnused\">If true, the given node is not used\n            in any current list, so it may be change, overwritten, or destroyed\n            if convenient. If false, the given node is in use. It should be marked\n            as shared if is is used within the return value.</param>\n            <returns>A new node with the give node inserted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.RemoveRangeInPlace(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. May change this node, or returns\n            a new node with the given appending done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A node with the sub-range removed. If done in-place, returns\n            \"this\".</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.RemoveRange(System.Int32,System.Int32)\">\n            <summary>\n            Remove a range of items from this node. Never changes this node, but returns\n            a new node with the removing done. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive index of first item in sub-range, relative\n            to this node.</param>\n            <param name=\"last\">Inclusize index of last item in sub-range, relative\n            to this node.</param>\n            <returns>A new node with the sub-range removed.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.ConcatNode.Subrange(System.Int32,System.Int32)\">\n            <summary>\n            Returns a node that has a sub-range of items from this node. The\n            sub-range may not be empty, but may extend outside the node. \n            In other words, first might be less than zero or last might be greater\n            than count. But, last can't be less than zero and first can't be\n            greater than count. Also, last must be greater than or equal to last.\n            </summary>\n            <param name=\"first\">Inclusive first element, relative to this node.</param>\n            <param name=\"last\">Inclusize last element, relative to this node.</param>\n            <returns>Node with the given sub-range.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.BigList`1.ConcatNode.Depth\">\n            <summary>\n            The depth of this node -- the maximum length path to \n            a leaf. If this node has two children that are leaves, the\n            depth in 1.\n            </summary>\n            <value>The depth of this node.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.BigList`1.BigListRange\">\n            <summary>\n            The class that is used to implement IList&lt;T&gt; to view a sub-range\n            of a BigList. The object stores a wrapped list, and a start/count indicating\n            a sub-range of the list. Insertion/deletions through the sub-range view\n            cause the count to change also; insertions and deletions directly on\n            the wrapped list do not.\n            </summary>\n            <remarks>This is different from Algorithms.Range in a very few respects:\n            it is specialized to only wrap BigList, and it is a lot more efficient in enumeration.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.BigList`1.BigListRange.#ctor(Wintellect.PowerCollections.BigList{`0},System.Int32,System.Int32)\">\n            <summary>\n            Create a sub-range view object on the indicate part \n            of the list. \n            </summary>\n            <param name=\"wrappedList\">List to wrap.</param>\n            <param name=\"start\">The start index of the view in the wrapped list.</param>\n            <param name=\"count\">The number of items in the view.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2\">\n            <summary>\n            MultiDictionaryBase is a base class that can be used to more easily implement a class\n            that associates multiple values to a single key. The class implements the generic\n            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface. The resulting collection\n            is read-only -- items cannot be added or removed.\n            </summary>\n            <remarks>\n            <para>To use ReadOnlyMultiDictionaryBase as a base class, the derived class must override\n            Count, Contains(TKey,TValue), EnumerateKeys, and TryEnumerateValuesForKey . </para>\n            </remarks>\n            <typeparam name=\"TKey\">The key type of the dictionary.</typeparam>\n            <typeparam name=\"TValue\">The value type of the dictionary.</typeparam>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.#ctor\">\n            <summary>\n            Creates a new ReadOnlyMultiDictionaryBase. \n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.MethodModifiesCollection\">\n            <summary>\n            Throws an NotSupportedException stating that this collection cannot be modified.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerateKeys\">\n            <summary>\n            Enumerate all the keys in the dictionary. This method must be overridden by a derived\n            class.\n            </summary>\n            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that\n            have at least one value associated with them.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)\">\n            <summary>\n            Enumerate all of the values associated with a given key. This method must be overridden\n            by the derived class. If the key exists and has values associated with it, an enumerator for those\n            values is returned throught <paramref name=\"values\"/>. If the key does not exist, false is returned.\n            </summary>\n            <param name=\"key\">The key to get values for.</param>\n            <param name=\"values\">If true is returned, this parameter receives an enumerators that\n            enumerates the values associated with that key.</param>\n            <returns>True if the key exists and has values associated with it. False otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})\">\n            <summary>\n            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the \n            key is already present, and ArgumentException is thrown. Otherwise, a\n            new key is added, and new values are associated with that key.\n            </summary>\n            <param name=\"key\">Key to add.</param>\n            <param name=\"values\">Values to associate with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">The key is already present in the dictionary.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Remove(`0)\">\n            <summary>\n            Removes a key from the dictionary. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">Key to remove from the dictionary.</param>\n            <returns>True if the key was found, false otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, all the values\n            associated with that key are returned through the values parameter. This method must be\n            overridden by the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"values\">Returns all values associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ContainsKey(`0)\">\n            <summary>\n            Determines whether a given key is found in the dictionary.\n            </summary>\n            <remarks>The default implementation simply calls TryGetValue.\n            It may be appropriate to override this method to \n            provide a more efficient implementation.</remarks>\n            <param name=\"key\">Key to look for in the dictionary.</param>\n            <returns>True if the key is present in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(`0,`1)\">\n            <summary>\n            Determines if this dictionary contains a key-value pair equal to <paramref name=\"key\"/> and \n            <paramref name=\"value\"/>. The dictionary is not changed. This method must be overridden in the derived class.\n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">The value to search for.</param>\n            <returns>True if the dictionary has associated <paramref name=\"value\"/> with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})\">\n            <summary>\n            Determines if this dictionary contains the given key and all of the values associated with that key..\n            </summary>\n            <param name=\"pair\">A key and collection of values to search for.</param>\n            <returns>True if the dictionary has associated all of the values in <paramref name=\"pair\"/>.Value with <paramref name=\"pair\"/>.Key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EqualValues(`1,`1)\">\n            <summary>\n            If the derived class does not use the default comparison for values, this\n            methods should be overridden to compare two values for equality. This is\n            used for the correct implementation of ICollection.Contains on the Values\n            and KeyValuePairs collections.\n            </summary>\n            <param name=\"value1\">First value to compare.</param>\n            <param name=\"value2\">Second value to compare.</param>\n            <returns>True if the values are equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountValues(`0)\">\n            <summary>\n            Gets a count of the number of values associated with a key. The\n            default implementation is slow; it enumerators all of the values\n            (using TryEnumerateValuesForKey) to count them. A derived class\n            may be able to supply a more efficient implementation.\n            </summary>\n            <param name=\"key\">The key to count values for.</param>\n            <returns>The number of values associated with <paramref name=\"key\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountAllValues\">\n            <summary>\n            Gets a total count of values in the collection. This default implementation\n            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.\n            A derived class may be able to supply a more efficient implementation.\n            </summary>\n            <returns>The total number of values associated with all keys in the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ToString\">\n            <summary>\n            Shows the string representation of the dictionary. The string representation contains\n            a list of the mappings in the dictionary.\n            </summary>\n            <returns>The string representation of the dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.DebuggerDisplayString\">\n            <summary>\n            Display the contents of the dictionary in the debugger. This is intentionally private, it is called\n            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar\n            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.\n            </summary>\n            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.GetEnumerator\">\n            <summary>\n            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.\n            </summary>\n            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Count\">\n            <summary>\n            Gets the number of keys in the dictionary. This property must be overridden\n            in the derived class.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Keys\">\n            <summary>\n            Gets a read-only collection all the keys in this dictionary.\n            </summary>\n            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Values\">\n            <summary>\n            Gets a read-only collection of all the values in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values\">\n            <summary>\n            Gets a read-only collection of all the value collections in the dictionary. \n            </summary>\n            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairs\">\n            <summary>\n            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple\n            values associated with it, then a key-value pair is present for each value associated\n            with the key.\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.Item(`0)\">\n            <summary>\n            Returns a collection of all of the values in the dictionary associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, an ICollection with no\n            values is returned. The returned ICollection is read-only.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name=\"key\"/>.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)\">\n            <summary>\n            Gets a collection of all the values in the dictionary associated with <paramref name=\"key\"/>.\n            If the key is not present in the dictionary, a KeyNotFound exception is thrown.\n            </summary>\n            <param name=\"key\">The key to get the values associated with.</param>\n            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name=\"key\"/>.</value>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">The given key is not present in the dictionary.</exception>\n            <exception cref=\"T:System.NotSupportedException\">The set accessor is called.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection\">\n            <summary>\n            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection\n            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,\n            etc. values from the multi-dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.#ctor(Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1},`0)\">\n            <summary>\n            Constructor. Initializes this collection.\n            </summary>\n            <param name=\"myDictionary\">Dictionary we're using.</param>\n            <param name=\"key\">The key we're looking at.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.NoValues\">\n            <summary>\n            A simple function that returns an IEnumerator&lt;TValue&gt; that\n            doesn't yield any values. A helper.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator\">\n            <summary>\n            Enumerate all the values associated with key.\n            </summary>\n            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)\">\n            <summary>\n            Determines if the given values is associated with key.\n            </summary>\n            <param name=\"item\">Value to check for.</param>\n            <returns>True if value is associated with key, false otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Count\">\n            <summary>\n            Get the number of values associated with the key.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TKey&gt; and ICollection for the\n            Keys collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection.#ctor(Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1})\">\n            <summary>\n            Constructor.\n            </summary>\n            <param name=\"myDictionary\">The dictionary this is associated with.</param>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;TValue&gt; and ICollection for the\n            Values collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerableValuesCollection\">\n            <summary>\n            A private class that implements ICollection&lt;IEnumerable&lt;TValue&gt;&gt; and ICollection for the\n            Values collection on IDictionary. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairsCollection\">\n            <summary>\n            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the\n            KeyValuePairs collection. The collection is read-only.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Set`1\">\n             <summary>\n             Set&lt;T&gt; is a collection that contains items of type T. \n             The item are maintained in a haphazard, unpredictable order, and duplicate items are not allowed.\n             </summary>\n             <remarks>\n             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; \n             then the Equals method of that interface will be used to compare items, otherwise the Equals\n             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed\n             to the constructor to use to compare items.</p>\n             <p>Set is implemented as a hash table. Inserting, deleting, and looking up an\n             an element all are done in approximately constant time, regardless of the number of items in the Set.</p>\n             <p><see cref=\"T:Wintellect.PowerCollections.OrderedSet`1\"/> is similar, but uses comparison instead of hashing, and does maintains\n             the items in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:Wintellect.PowerCollections.OrderedSet`1\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor\">\n             <summary>\n             Creates a new Set. The Equals method and GetHashCode method on T\n             will be used to compare items for equality.\n             </summary>\n            <remarks>\n             Items that are null are permitted, and will be sorted before all other items.\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Set. The Equals and GetHashCode method of the passed comparer object\n            will be used to compare items in this set.\n            </summary>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n             <summary>\n             Creates a new Set. The Equals method and GetHashCode method on T\n             will be used to compare items for equality.\n             </summary>\n            <remarks>\n             Items that are null are permitted.\n            </remarks>\n             <param name=\"collection\">A collection with items to be placed into the Set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})\">\n            <summary>\n            Creates a new Set. The Equals and GetHashCode method of the passed comparer object\n            will be used to compare items in this set. The set is\n            initialized with all the items in the given collection.\n            </summary>\n            <param name=\"collection\">A collection with items to be placed into the Set.</param>\n            <param name=\"equalityComparer\">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0},Wintellect.PowerCollections.Hash{`0})\">\n            <summary>\n            Creates a new Set given a comparer and a tree that contains the data. Used\n            internally for Clone.\n            </summary>\n            <param name=\"equalityComparer\">EqualityComparer for the set.</param>\n            <param name=\"hash\">Data for the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.System#ICloneable#Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Clone\">\n            <summary>\n            Makes a shallow clone of this set; i.e., if items of the\n            set are reference types, then they are not cloned. If T is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>\n            <returns>The cloned set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.CloneContents\">\n            <summary>\n            Makes a deep clone of this set. A new set is created with a clone of\n            each element of this set, by calling ICloneable.Clone on each element. If T is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If T is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the set takes time O(N), where N is the number of items in the set.</para></remarks>\n            <returns>The cloned set.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the items in the set. \n            The items are enumerated in sorted order.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the items, which uses this method implicitly.</p>\n            <p>If an item is added to or deleted from the set while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumerating all the items in the set takes time O(N), where N is the number\n            of items in the set.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the items in the Set.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Contains(`0)\">\n            <summary>\n            Determines if this set contains an item equal to <paramref name=\"item\"/>. The set\n            is not changed.\n            </summary>\n            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>\n            <param name=\"item\">The item to search for.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.TryGetItem(`0,`0@)\">\n            <summary>\n            <para>Determines if this set contains an item equal to <paramref name=\"item\"/>, according to the \n            comparison mechanism that was used when the set was created. The set\n            is not changed.</para>\n            <para>If the set does contain an item equal to <paramref name=\"item\"/>, then the item from the set is returned.</para>\n            </summary>\n            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>\n            <example>\n            In the following example, the set contains strings which are compared in a case-insensitive manner. \n            <code>\n            Set&lt;string&gt; set = new Set&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);\n            set.Add(\"HELLO\");\n            string s;\n            bool b = set.TryGetItem(\"Hello\", out s);   // b receives true, s receives \"HELLO\".\n            </code>\n            </example>\n            <param name=\"item\">The item to search for.</param>\n            <param name=\"foundItem\">Returns the item from the set that was equal to <paramref name=\"item\"/>.</param>\n            <returns>True if the set contains <paramref name=\"item\"/>. False if the set does not contain <paramref name=\"item\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.System#Collections#Generic#ICollection{T}#Add(`0)\">\n            <summary>\n            Adds a new item to the set. If the set already contains an item equal to\n            <paramref name=\"item\"/>, that item is replaced with <paramref name=\"item\"/>.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>\n            <param name=\"item\">The item to add to the set.</param>\n            <returns>True if the set already contained an item equal to <paramref name=\"item\"/> (which was replaced), false \n            otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.AddMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Adds all the items in <paramref name=\"collection\"/> to the set. If the set already contains an item equal to\n            one of the items in <paramref name=\"collection\"/>, that item will be replaced.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Adding the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to add to the set.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Remove(`0)\">\n            <summary>\n            Searches the set for an item equal to <paramref name=\"item\"/>, and if found,\n            removes it from the set. If not found, the set is unchanged.\n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing an item from the set takes approximately constant time, regardless of the size of the set.</para></remarks>\n            <param name=\"item\">The item to remove.</param>\n            <returns>True if <paramref name=\"item\"/> was found and removed. False if <paramref name=\"item\"/> was not in the set.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the items in <paramref name=\"collection\"/> from the set. \n            </summary>\n            <remarks>\n            <para>Equality between items is determined by the comparison instance or delegate used\n            to create the set.</para>\n            <para>Removing the collection takes time O(M), where M is the \n            number of items in <paramref name=\"collection\"/>.</para></remarks>\n            <param name=\"collection\">A collection of items to remove from the set.</param>\n            <returns>The number of items removed from the set.</returns>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"collection\"/> is null.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Clear\">\n            <summary>\n            Removes all items from the set.\n            </summary>\n            <remarks>Clearing the set takes a constant amount of time, regardless of the number of items in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.CheckConsistentComparison(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Check that this set and another set were created with the same comparison\n            mechanism. Throws exception if not compatible.\n            </summary>\n            <param name=\"otherSet\">Other set to check comparision mechanism.</param>\n            <exception cref=\"T:System.InvalidOperationException\">If otherSet and this set don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsSupersetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a superset of another set. Neither set is modified.\n            This set is a superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            <remarks>IsSupersetOf is computed in time O(M), where M is the size of the \n            <paramref name=\"otherSet\"/>.</remarks>\n            </summary>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsProperSupersetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a proper superset of another set. Neither set is modified.\n            This set is a proper superset of <paramref name=\"otherSet\"/> if every element in\n            <paramref name=\"otherSet\"/> is also in this set.\n            Additionally, this set must have strictly more items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(M), where M is the size of\n            <paramref name=\"otherSet\"/>.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper superset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsSubsetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsProperSubsetOf(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is a proper subset of another set. Neither set is modified.\n            This set is a subset of <paramref name=\"otherSet\"/> if every element in this set\n            is also in <paramref name=\"otherSet\"/>. Additionally, this set must have strictly \n            fewer items than <paramref name=\"otherSet\"/>.\n            </summary>\n            <remarks>IsProperSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>\n            <param name=\"otherSet\">Set to compare to.</param>\n            <returns>True if this is a proper subset of <paramref name=\"otherSet\"/>.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsEqualTo(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is equal to another set. This set is equal to\n            <paramref name=\"otherSet\"/> if they contain the same items.\n            </summary>\n            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in \n            this set.</remarks>\n            <param name=\"otherSet\">Set to compare to</param>\n            <returns>True if this set is equal to <paramref name=\"otherSet\"/>, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IsDisjointFrom(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Determines if this set is disjoint from another set. Two sets are disjoint\n            if no item from one set is equal to any item in the other set.\n            </summary>\n            <remarks>\n            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to check disjointness with.</param>\n            <returns>True if the two sets are disjoint, false otherwise.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.UnionWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. This set receives\n            the union of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N), where M is the size of the \n            larger set, and N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Union(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the union of this set with another set. The union of two sets\n            is all items that appear in either or both of the sets. A new set is \n            created with the union of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The union of two sets is computed in time O(M + N), where M is the size of the \n            one set, and N is the size of the other set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to union with.</param>\n            <returns>The union of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.IntersectionWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. This set receives\n            the intersection of the two sets, the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Intersection(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the intersection of this set with another set. The intersection of two sets\n            is all items that appear in both of the sets. A new set is \n            created with the intersection of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the\n            two equal items.</para>\n            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to intersection with.</param>\n            <returns>The intersection of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.DifferenceWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. This set receives\n            the difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.Difference(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the difference of this set with another set. The difference of these two sets\n            is all items that appear in this set, but not in <paramref name=\"otherSet\"/>. A new set is \n            created with the difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to difference with.</param>\n            <returns>The difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.SymmetricDifferenceWith(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. This set receives\n            the symmetric difference of the two sets; the other set is unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Set`1.SymmetricDifference(Wintellect.PowerCollections.Set{`0})\">\n            <summary>\n            Computes the symmetric difference of this set with another set. The symmetric difference of two sets\n            is all items that appear in either of the sets, but not both. A new set is \n            created with the symmetric difference of the sets and is returned. This set and the other set \n            are unchanged.\n            </summary>\n            <remarks>\n            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>\n            </remarks>\n            <param name=\"otherSet\">Set to symmetric difference with.</param>\n            <returns>The symmetric difference of the two sets.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">This set and <paramref name=\"otherSet\"/> don't use the same method for comparing items.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Set`1.Comparer\">\n            <summary>\n            Returns the IEqualityComparer&lt;T&gt; used to compare items in this set. \n            </summary>\n            <value>If the set was created using a comparer, that comparer is returned. Otherwise\n            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.Set`1.Count\">\n            <summary>\n            Returns the number of items in the set.\n            </summary>\n            <remarks>The size of the set is returned in constant time.</remarks>\n            <value>The number of items in the set.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers\">\n            <summary>\n            A collection of methods to create IComparer and IEqualityComparer instances in various ways.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerFromComparison``1(System.Comparison{``0})\">\n            <summary>\n            Given an Comparison on a type, returns an IComparer on that type. \n            </summary>\n            <typeparam name=\"T\">T to compare.</typeparam>\n            <param name=\"comparison\">Comparison delegate on T</param>\n            <returns>IComparer that uses the comparison.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerKeyValueFromComparerKey``2(System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Given an IComparer on TKey, returns an IComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparer\">IComparer on TKey</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.EqualityComparerKeyValueFromComparerKey``2(System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Given an IEqualityComparer on TKey, returns an IEqualityComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyEqualityComparer\">IComparer on TKey</param>\n            <returns>IEqualityComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerPairFromKeyValueComparers``2(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IComparer{``1})\">\n            <summary>\n            Given an IComparer on TKey and TValue, returns an IComparer on\n            key-value Pairs of TKey and TValue, comparing first keys, then values. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparer\">IComparer on TKey</param>\n            <param name=\"valueComparer\">IComparer on TValue</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.ComparerKeyValueFromComparisonKey``2(System.Comparison{``0})\">\n            <summary>\n            Given an Comparison on TKey, returns an IComparer on\n            key-value Pairs. \n            </summary>\n            <typeparam name=\"TKey\">TKey of the pairs</typeparam>\n            <typeparam name=\"TValue\">TValue of the apris</typeparam>\n            <param name=\"keyComparison\">Comparison delegate on TKey</param>\n            <returns>IComparer for comparing key-value pairs.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.DefaultComparer``1\">\n            <summary>\n            Given an element type, check that it implements IComparable&lt;T&gt; or IComparable, then returns\n            a IComparer that can be used to compare elements of that type.\n            </summary>\n            <returns>The IComparer&lt;T&gt; instance.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">T does not implement IComparable&lt;T&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Comparers.DefaultKeyValueComparer``2\">\n            <summary>\n            Given an key and value type, check that TKey implements IComparable&lt;T&gt; or IComparable, then returns\n            a IComparer that can be used to compare KeyValuePairs of those types.\n            </summary>\n            <returns>The IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; instance.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;T&gt;.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.KeyValueEqualityComparer`2\">\n            <summary>\n            Class to change an IEqualityComparer&lt;TKey&gt; to an IEqualityComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Only the keys are compared.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.KeyValueComparer`2\">\n            <summary>\n            Class to change an IComparer&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Only the keys are compared.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.PairComparer`2\">\n            <summary>\n            Class to change an IComparer&lt;TKey&gt; and IComparer&lt;TValue&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; \n            Keys are compared, followed by values.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.ComparisonComparer`1\">\n            <summary>\n            Class to change an Comparison&lt;T&gt; to an IComparer&lt;T&gt;.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Comparers.ComparisonKeyValueComparer`2\">\n            <summary>\n            Class to change an Comparison&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;.\n            GetHashCode cannot be used on this class.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.DuplicatePolicy\">\n            <summary>\n            Describes what to do if a key is already in the tree when doing an\n            insertion.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1\">\n             <summary>\n             The base implementation for various collections classes that use Red-Black trees\n             as part of their implementation. This class should not (and can not) be \n             used directly by end users; it's only for internal use by the collections package.\n             </summary>\n             <remarks>\n             The Red-Black tree manages items of type T, and uses a IComparer&lt;T&gt; that\n             compares items to sort the tree. Multiple items can compare equal and be stored\n             in the tree. Insert, Delete, and Find operations are provided in their full generality;\n             all operations allow dealing with either the first or last of items that compare equal. \n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetNodeStack\">\n            <summary>\n            Create an array of Nodes big enough for any path from top \n            to bottom. This is cached, and reused from call-to-call, so only one\n            can be around at a time per tree.\n            </summary>\n            <returns>The node stack.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.StopEnumerations\">\n            <summary>\n            Must be called whenever there is a structural change in the tree. Causes\n            changeStamp to be changed, which causes any in-progress enumerations\n            to throw exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CheckEnumerationStamp(System.Int32)\">\n            <summary>\n            Checks the given stamp against the current change stamp. If different, the\n            collection has changed during enumeration and an InvalidOperationException\n            must be thrown\n            </summary>\n            <param name=\"startStamp\">changeStamp at the start of the enumeration.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Initialize a red-black tree, using the given interface instance to compare elements. Only\n            Compare is used on the IComparer interface.\n            </summary>\n            <param name=\"comparer\">The IComparer&lt;T&gt; used to sort keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Clone\">\n            <summary>\n            Clone the tree, returning a new tree containing the same items. Should\n            take O(N) take.\n            </summary>\n            <returns>Clone version of this tree.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Find(`0,System.Boolean,System.Boolean,`0@)\">\n            <summary>\n            Finds the key in the tree. If multiple items in the tree have\n            compare equal to the key, finds the first or last one. Optionally replaces the item\n            with the one searched for.\n            </summary>\n            <param name=\"key\">Key to search for.</param>\n            <param name=\"findFirst\">If true, find the first of duplicates, else finds the last of duplicates.</param>\n            <param name=\"replace\">If true, replaces the item with key (if function returns true)</param>\n            <param name=\"item\">Returns the found item, before replacing (if function returns true).</param>\n            <returns>True if the key was found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.FindIndex(`0,System.Boolean)\">\n            <summary>\n            Finds the index of the key in the tree. If multiple items in the tree have\n            compare equal to the key, finds the first or last one. \n            </summary>\n            <param name=\"key\">Key to search for.</param>\n            <param name=\"findFirst\">If true, find the first of duplicates, else finds the last of duplicates.</param>\n            <returns>Index of the item found if the key was found, -1 if not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetItemByIndex(System.Int32)\">\n            <summary>\n            Find the item at a particular index in the tree.\n            </summary>\n            <param name=\"index\">The zero-based index of the item. Must be &gt;= 0 and &lt; Count.</param>\n            <returns>The item at the particular index.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Insert(`0,Wintellect.PowerCollections.DuplicatePolicy,`0@)\">\n            <summary>\n            Insert a new node into the tree, maintaining the red-black invariants.\n            </summary>\n            <remarks>Algorithm from Sedgewick, \"Algorithms\".</remarks>\n            <param name=\"item\">The new item to insert</param>\n            <param name=\"dupPolicy\">What to do if equal item is already present.</param>\n            <param name=\"previous\">If false, returned, the previous item.</param>\n            <returns>false if duplicate exists, otherwise true.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.InsertSplit(Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,System.Boolean@)\">\n            <summary>\n            Split a node with two red children (a 4-node in the 2-3-4 tree formalism), as\n            part of an insert operation.\n            </summary>\n            <param name=\"ggparent\">great grand-parent of \"node\", can be null near root</param>\n            <param name=\"gparent\">grand-parent of \"node\", can be null near root</param>\n            <param name=\"parent\">parent of \"node\", can be null near root</param>\n            <param name=\"node\">Node to split, can't be null</param>\n            <param name=\"rotated\">Indicates that rotation(s) occurred in the tree.</param>\n            <returns>Node to continue searching from.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Rotate(Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Performs a rotation involving the node, it's child and grandchild. The counts of \n            childs and grand-child are set the correct values from their children; this is important\n            if they have been adjusted on the way down the try as part of an insert/delete.\n            </summary>\n            <param name=\"node\">Top node of the rotation. Can be null if child==root.</param>\n            <param name=\"child\">One child of \"node\". Not null.</param>\n            <param name=\"gchild\">One child of \"child\". Not null.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Delete(`0,System.Boolean,`0@)\">\n            <summary>\n            Deletes a key from the tree. If multiple elements are equal to key, \n            deletes the first or last. If no element is equal to the key, \n            returns false.\n            </summary>\n            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, \n            rotating and recoloring along the way to always keep the current node red, which \n            ensures that the node we delete is red. The details are quite complex, however! </remarks>\n            <param name=\"key\">Key to delete.</param>\n            <param name=\"deleteFirst\">Which item to delete if multiple are equal to key. True to delete the first, false to delete last.</param>\n            <param name=\"item\">Returns the item that was deleted, if true returned.</param>\n            <returns>True if an element was deleted, false if no element had \n            specified key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.GetEnumerator\">\n            \n            <summary>\n            Enumerate all the items in-order\n            </summary>\n            <returns>An enumerator for all the items, in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Enumerate all the items in-order\n            </summary>\n            <returns>An enumerator for all the items, in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.BoundedRangeTester(System.Boolean,`0,System.Boolean,`0)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"useFirst\">If true, bound the range on the bottom by first.</param>\n            <param name=\"first\">If useFirst is true, the inclusive lower bound.</param>\n            <param name=\"useLast\">If true, bound the range on the top by last.</param>\n            <param name=\"last\">If useLast is true, the exclusive upper bound.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DoubleBoundedRangeTester(`0,System.Boolean,`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by first and last items.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"firstInclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"lastInclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.LowerBoundedRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by a lower bound.\n            </summary>\n            <param name=\"first\">The lower bound.</param>\n            <param name=\"inclusive\">True if the lower bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.UpperBoundedRangeTester(`0,System.Boolean)\">\n            <summary>\n            Gets a range tester that defines a range by upper bound.\n            </summary>\n            <param name=\"last\">The upper bound.</param>\n            <param name=\"inclusive\">True if the upper bound is inclusive, false if exclusive.</param>\n            <returns>A RangeTester delegate that tests for an item in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EqualRangeTester(`0)\">\n            <summary>\n            Gets a range tester that defines a range by all items equal to an item.\n            </summary>\n            <param name=\"equalTo\">The item that is contained in the range.</param>\n            <returns>A RangeTester delegate that tests for an item equal to <paramref name=\"equalTo\"/>.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EntireRangeTester(`0)\">\n            <summary>\n            A range tester that defines a range that is the entire tree.\n            </summary>\n            <param name=\"item\">Item to test.</param>\n            <returns>Always returns 0.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Enumerate the items in a custom range in the tree. The range is determined by \n            a RangeTest delegate.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeInOrder(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Enumerate all the items in a custom range, under and including node, in-order.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <returns>An enumerable of the items.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeReversed(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Enumerate the items in a custom range in the tree, in reversed order. The range is determined by \n            a RangeTest delegate.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in reversed order.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.EnumerateRangeInReversedOrder(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node)\">\n            <summary>\n            Enumerate all the items in a custom range, under and including node, in reversed order.\n            </summary>\n            <param name=\"rangeTester\">Tests an item against the custom range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <returns>An enumerable of the items, in reversed oreder.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">The tree has an item added or deleted during the enumeration.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DeleteItemFromRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,`0@)\">\n            <summary>\n            Deletes either the first or last item from a range, as identified by a RangeTester\n            delegate. If the range is empty, returns false.\n            </summary>\n            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, \n            rotating and recoloring along the way to always keep the current node red, which \n            ensures that the node we delete is red. The details are quite complex, however! </remarks>\n            <param name=\"rangeTester\">Range to delete from.</param>\n            <param name=\"deleteFirst\">If true, delete the first item from the range, else the last.</param>\n            <param name=\"item\">Returns the item that was deleted, if true returned.</param>\n            <returns>True if an element was deleted, false if the range is empty.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.DeleteRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Delete all the items in a range, identified by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range to delete.</param>\n            <returns>The number of items deleted.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CountRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester)\">\n            <summary>\n            Count the items in a custom range in the tree. The range is determined by \n            a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <returns>The number of items in the range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.CountRangeUnderNode(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,Wintellect.PowerCollections.RedBlackTree{`0}.Node,System.Boolean,System.Boolean)\">\n            <summary>\n            Count all the items in a custom range, under and including node.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"node\">Node to begin enumeration. May be null.</param>\n            <param name=\"belowRangeTop\">This node and all under it are either in the range or below it.</param>\n            <param name=\"aboveRangeBottom\">This node and all under it are either in the range or above it.</param>\n            <returns>The number of items in the range, under and include node.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.FirstItemInRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)\">\n            <summary>\n            Find the first item in a custom range in the tree, and it's index. The range is determined\n            by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"item\">Returns the item found, if true was returned.</param>\n            <returns>Index of first item in range if range is non-empty, -1 otherwise.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.LastItemInRange(Wintellect.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)\">\n            <summary>\n            Find the last item in a custom range in the tree, and it's index. The range is determined\n            by a RangeTester delegate.\n            </summary>\n            <param name=\"rangeTester\">The delegate that defines the range.</param>\n            <param name=\"item\">Returns the item found, if true was returned.</param>\n            <returns>Index of the item if range is non-empty, -1 otherwise.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.ElementCount\">\n            <summary>\n            Returns the number of elements in the tree.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1.Node\">\n            <summary>\n            The class that is each node in the red-black tree.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.IncrementCount\">\n            <summary>\n            Add one to the Count.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.DecrementCount\">\n            <summary>\n            Subtract one from the Count. The current\n            Count must be non-zero.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.RedBlackTree`1.Node.Clone\">\n            <summary>\n            Clones a node and all its descendants.\n            </summary>\n            <returns>The cloned node.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.Node.IsRed\">\n            <summary>\n            Is this a red node?\n            </summary>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.RedBlackTree`1.Node.Count\">\n            <summary>\n            Get or set the Count field -- a 31-bit field\n            that holds the number of nodes at or below this\n            level.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.RedBlackTree`1.RangeTester\">\n            <summary>\n            A delegate that tests if an item is within a custom range. The range must be a contiguous\n            range of items with the ordering of this tree. The range test function must test\n            if an item is before, withing, or after the range.\n            </summary>\n            <param name=\"item\">Item to test against the range.</param>\n            <returns>Returns negative if item is before the range, zero if item is withing the range,\n            and positive if item is after the range.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedDictionary`2\">\n             <summary>\n             OrderedDictionary&lt;TKey, TValue&gt; is a collection that maps keys of type TKey\n             to values of type TValue. The keys are maintained in a sorted order, and at most one value\n             is permitted for each key.\n             </summary>\n             <remarks>\n             <p>The keys are compared in one of three ways. If TKey implements IComparable&lt;TKey&gt; or IComparable,\n             then the CompareTo method of that interface will be used to compare elements. Alternatively, a comparison\n             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>\n             <p>OrderedDictionary is implemented as a balanced binary tree. Inserting, deleting, and looking up an\n             an element all are done in log(N) type, where N is the number of keys in the tree.</p>\n             <p><see cref=\"T:System.Collections.Generic.Dictionary`2\"/> is similar, but uses hashing instead of comparison, and does not maintain\n             the keys in sorted order.</p>\n            </remarks>\n            <seealso cref=\"T:System.Collections.Generic.Dictionary`2\"/>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NewPair(`0,`1)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NewPair(`0)\">\n            <summary>\n            Helper function to create a new KeyValuePair struct with a default value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <returns>A new KeyValuePair.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor\">\n            <summary>\n            Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;\n            or IComparable. \n            The CompareTo method of this interface will be used to compare keys in this dictionary.\n            </summary>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            Creates a new OrderedDictionary. The Compare method of the passed comparison object\n            will be used to compare keys in this dictionary.\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never\n            be called, and need not be implemented.</remarks>\n            <param name=\"comparer\">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Comparison{`0})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.\n            </summary>\n            <param name=\"comparison\">A delegate to a method that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;\n            or IComparable. \n            The CompareTo method of this interface will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <exception cref=\"T:System.InvalidOperationException\">TKey does not implement IComparable&lt;TKey&gt;.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The Compare method of the passed comparison object\n            will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <remarks>\n            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never\n            be called, and need not be implemented.</remarks>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"comparer\">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Comparison{`0})\">\n            <summary>\n            <para>Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.</para>\n            <para>A collection and keys and values (typically another dictionary) is used to initialized the \n            contents of the dictionary.</para>\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"comparison\">A delegate to a method that will be used to compare keys.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed comparer \n            will be used to compare key-value pairs in this dictionary. Used internally  \n            from other constructors.\n            </summary>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are used to initialized the dictionary.</param>\n            <param name=\"keyComparer\">An IComparer that will be used to compare keys.</param>\n            <param name=\"pairComparer\">An IComparer that will be used to compare key-value pairs.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Creates a new OrderedDictionary. The passed comparison delegate \n            will be used to compare keys in this dictionary, and the given tree is used. Used internally for Clone().\n            </summary>\n            <param name=\"keyComparer\">An IComparer that will be used to compare keys.</param>\n            <param name=\"pairComparer\">A delegate to a method that will be used to compare key-value pairs.</param>\n            <param name=\"tree\">RedBlackTree that contains the data for the dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Clone\">\n            <summary>\n            Makes a shallow clone of this dictionary; i.e., if keys or values of the\n            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,\n            then each element is copied as if by simple assignment.\n            </summary>\n            <remarks>Cloning the dictionary takes time O(N), where N is the number of keys in the dictionary.</remarks>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.NonCloneableType(System.Type)\">\n            <summary>\n            Throw an InvalidOperationException indicating that this type is not cloneable.\n            </summary>\n            <param name=\"t\">Type to test.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.CloneContents\">\n            <summary>\n            Makes a deep clone of this dictionary. A new dictionary is created with a clone of\n            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is\n            a value type, then each element is copied as if by simple assignment.\n            </summary>\n            <remarks><para>If TKey or TValue is a reference type, it must implement\n            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>\n            <para>Cloning the dictionary takes time O(N log N), where N is the number of keys in the dictionary.</para></remarks>\n            <returns>The cloned dictionary.</returns>\n            <exception cref=\"T:System.InvalidOperationException\">TKey or TValue is a reference type that does not implement ICloneable.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Reversed\">\n             <summary>\n             Returns a View collection that can be used for enumerating the keys and values in the collection in \n             reversed order.\n             </summary>\n            <remarks>\n            <p>Typically, this method is used in conjunction with a foreach statement. For example:\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {\n                // process pair\n             }\n            </code></p>\n             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then \n             the enumeration will end with an InvalidOperationException.</p>\n            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than <paramref name=\"from\"/> and \n             less than <paramref name=\"to\"/> are included. The keys are enumerated in sorted order.\n             Keys equal to the end points of the range can be included or excluded depending on the\n             <paramref name=\"fromInclusive\"/> and <paramref name=\"toInclusive\"/> parameters.\n             </summary>\n            <remarks>\n            <p>If <paramref name=\"from\"/> is greater than or equal to <paramref name=\"to\"/>, the returned collection is empty. </p>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RangeFrom(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only keys that are greater than (and optionally, equal to) <paramref name=\"from\"/> are included. \n             The keys are enumerated in sorted order. Keys equal to <paramref name=\"from\"/> can be included\n             or excluded depending on the <paramref name=\"fromInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"from\">The lower bound of the range.</param>\n             <param name=\"fromInclusive\">If true, the lower bound is inclusive--keys equal to the lower bound will\n             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RangeTo(`0,System.Boolean)\">\n             <summary>\n             Returns a collection that can be used for enumerating some of the keys and values in the collection. \n             Only items that are less than (and optionally, equal to) <paramref name=\"to\"/> are included. \n             The items are enumerated in sorted order. Items equal to <paramref name=\"to\"/> can be included\n             or excluded depending on the <paramref name=\"toInclusive\"/> parameter.\n             </summary>\n            <remarks>\n            <p>The sorted order of the keys is determined by the comparison instance or delegate used\n             to create the dictionary.</p>\n            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {\n                // process pair\n             }\n            </code>\n            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>\n            </remarks>\n             <param name=\"to\">The upper bound of the range. </param>\n             <param name=\"toInclusive\">If true, the upper bound is inclusive--keys equal to the upper bound will\n             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not\n             be included in the range.</param>\n             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the collection that is equal to the passed in key. If\n            no key in the dictionary is equal to the passed key, false is returned and the \n            dictionary is unchanged.\n            </summary>\n            <remarks>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</remarks>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n            <remarks>Clearing the dictionary takes a constant amount of time, regardless of the number of keys in it.</remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.GetValueElseAdd(`0,`1@)\">\n            <summary>\n            Finds a key in the dictionary. If the dictionary already contains\n            a key equal to the passed key, then the existing value is returned via value. If the dictionary\n            doesn't contain that key, then value is associated with that key.\n            </summary>\n            <remarks><para> between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</para>\n            <para>This method takes time O(log N), where N is the number of keys in the dictionary. If a value is added, It is more efficient than\n            calling TryGetValue followed by Add, because the dictionary is not searched twice.</para></remarks>\n            <param name=\"key\">The new key. </param>\n            <param name=\"value\">The new value to associated with that key, if the key isn't present. If the key was present, \n            returns the exist value associated with that key.</param>\n            <returns>True if key was already present, false if key wasn't present (and a new value was added).</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Add(`0,`1)\">\n            <summary>\n            Adds a new key and value to the dictionary. If the dictionary already contains\n            a key equal to the passed key, then an ArgumentException is thrown\n            </summary>\n            <remarks>\n            <para>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</para>\n            <para>Adding an key and value takes time O(log N), where N is the number of keys in the dictionary.</para></remarks>\n            <param name=\"key\">The new key. \"null\" is a valid key value.</param>\n            <param name=\"value\">The new value to associated with that key.</param>\n            <exception cref=\"T:System.ArgumentException\">key is already present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.Replace(`0,`1)\">\n            <summary>\n            Changes the value associated with a given key. If the dictionary does not contain\n            a key equal to the passed key, then an ArgumentException is thrown.\n            </summary>\n            <remarks>\n            <p>Unlike adding or removing an element, changing the value associated with a key\n            can be performed while an enumeration (foreach) on the the dictionary is in progress.</p>\n            <p>Equality between keys is determined by the comparison instance or delegate used\n            to create the dictionary.</p>\n            <p>Replace takes time O(log N), where N is the number of entries in the dictionary.</p></remarks>\n            <param name=\"key\">The new key. </param>\n            <param name=\"value\">The new value to associated with that key.</param>\n            <exception cref=\"T:System.Collections.Generic.KeyNotFoundException\">key is not present in the dictionary</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.AddMany(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})\">\n            <summary>\n            Adds multiple key-value pairs to a dictionary. If a key exists in both the current instance and dictionaryToAdd,\n            then the value is updated with the value from <paramref name=\"keysAndValues>\"/> (no exception is thrown).\n            Since IDictionary&lt;TKey,TValue&gt; inherits from IEnumerable&lt;KeyValuePair&lt;TKey,TValue&gt;&gt;, this\n            method can be used to merge one dictionary into another.\n            </summary>\n            <remarks>AddMany takes time O(M log (N+M)), where M is the size of <paramref name=\"keysAndValues>\"/>, and N is the size of\n            this dictionary.</remarks>\n            <param name=\"keysAndValues\">A collection of keys and values whose contents are added to the current dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Removes all the keys found in another collection (such as an array or List&lt;TKey&gt;). Each key in keyCollectionToRemove\n            is removed from the dictionary. Keys that are not present are ignored.\n            </summary>\n            <remarks>RemoveMany takes time O(M log N), where M is the size of keyCollectionToRemove, and N is this\n            size of this collection.</remarks>\n            <returns>The number of keys removed from the dictionary.</returns>\n            <param name=\"keyCollectionToRemove\">A collection of keys to remove from the dictionary.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.ContainsKey(`0)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. The dictionary\n            is not changed.\n            </summary>\n            <remarks>Searching the dictionary for a key takes time O(log N), where N is the number of keys in the dictionary.</remarks>\n            <param name=\"key\">The key to search for.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this dictionary contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter.\n            </summary>\n            <remarks>TryGetValue takes time O(log N), where N is the number of entries in the dictionary.</remarks>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.GetEnumerator\">\n            <summary>\n            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is \n            returned as a KeyValuePair&lt;TKey,TValue&gt;.\n            The entries are enumerated in the sorted order of the keys.\n            </summary>\n            <remarks>\n            <p>Typically, this method is not called directly. Instead the \"foreach\" statement is used\n            to enumerate the elements of the dictionary, which uses this method implicitly.</p>\n            <p>If an element is added to or deleted from the dictionary while it is being enumerated, then \n            the enumeration will end with an InvalidOperationException.</p>\n            <p>Enumeration all the entries in the dictionary takes time O(N log N), where N is the number\n            of entries in the dictionary.</p>\n            </remarks>\n            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>\t\t\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.System#ICloneable#Clone\">\n            <summary>\n            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.\n            </summary>\n            <returns>The cloned dictionary.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Comparer\">\n            <summary>\n            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. \n            </summary>\n            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was\n            created using a comparison delegate, then a comparer equivalent to that delegate\n            is returned. Otherwise\n            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Item(`0)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then an ArgumentException is thrown. When setting\n            a value, the value replaces any existing value in the dictionary.\n            </summary>\n            <remarks>The indexer takes time O(log N), where N is the number of entries in the dictionary.</remarks>\n            <value>The value associated with the key</value>\n            <exception cref=\"T:System.ArgumentException\">A value is being retrieved, and the key is not present in the dictionary.</exception>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"key\"/> is null.</exception>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.Count\">\n            <summary>\n            Returns the number of keys in the dictionary.\n            </summary>\n            <remarks>The size of the dictionary is returned in constant time..</remarks>\n            <value>The number of keys in the dictionary.</value>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.OrderedDictionary`2.View\">\n             <summary>\n             The OrderedDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values\n             inside an ordered dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. \n             </summary>\n            <remarks>\n             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made\n             to the view, the underlying dictionary changes accordingly.</p>\n            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys\n             and values in a subset of the OrderedDictionary. For example:</p>\n            <code>\n             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {\n                // process pair\n             }\n            </code>\n            </remarks>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.#ctor(Wintellect.PowerCollections.OrderedDictionary{`0,`1},Wintellect.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)\">\n            <summary>\n            Initialize the View.\n            </summary>\n            <param name=\"myDictionary\">Associated OrderedDictionary to be viewed.</param>\n            <param name=\"rangeTester\">Range tester that defines the range being used.</param>\n            <param name=\"entireTree\">If true, then rangeTester defines the entire tree.</param>\n            <param name=\"reversed\">Is the view enuemerated in reverse order?</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.KeyInView(`0)\">\n            <summary>\n            Determine if the given key lies within the bounds of this view.\n            </summary>\n            <param name=\"key\">Key to test.</param>\n            <returns>True if the key is within the bounds of this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.GetEnumerator\">\n            <summary>\n            Enumerate all the keys and values in this view.\n            </summary>\n            <returns>An IEnumerator of KeyValuePairs with the keys and views in this view.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.ContainsKey(`0)\">\n            <summary>\n            Tests if the key is present in the part of the dictionary being viewed.\n            </summary>\n            <param name=\"key\">Key to check for.</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.TryGetValue(`0,`1@)\">\n            <summary>\n            Determines if this view contains a key equal to <paramref name=\"key\"/>. If so, the value\n            associated with that key is returned through the value parameter. \n            </summary>\n            <param name=\"key\">The key to search for.</param>\n            <param name=\"value\">Returns the value associated with key, if true was returned.</param>\n            <returns>True if the key is within this view. </returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Remove(`0)\">\n            <summary>\n            Removes the key (and associated value) from the underlying dictionary of this view. that is equal to the passed in key. If\n            no key in the view is equal to the passed key, the dictionary and view are unchanged.\n            </summary>\n            <param name=\"key\">The key to remove.</param>\n            <returns>True if the key was found and removed. False if the key was not found.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Clear\">\n            <summary>\n            Removes all the keys and values within this view from the underlying OrderedDictionary.\n            </summary>\n            <example>The following removes all the keys that start with \"A\" from an OrderedDictionary.\n            <code>\n            dictionary.Range(\"A\", \"B\").Clear();\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.OrderedDictionary`2.View.Reversed\">\n            <summary>\n            Creates a new View that has the same keys and values as this, in the reversed order.\n            </summary>\n            <returns>A new View that has the reversed order of this view.</returns>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.View.Count\">\n            <summary>\n            Number of keys in this view.\n            </summary>\n            <value>Number of keys that lie within the bounds the view.</value>\n        </member>\n        <member name=\"P:Wintellect.PowerCollections.OrderedDictionary`2.View.Item(`0)\">\n            <summary>\n            Gets or sets the value associated with a given key. When getting a value, if this\n            key is not found in the collection, then an ArgumentException is thrown. When setting\n            a value, the value replaces any existing value in the dictionary. When setting a value, the \n            key must be within the range of keys being viewed.\n            </summary>\n            <value>The value associated with the key.</value>\n            <exception cref=\"T:System.ArgumentException\">A value is being retrieved, and the key is not present in the dictionary, \n            or a value is being set, and the key is outside the range of keys being viewed by this View.</exception>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Strings\">\n            <summary>\n            A holder class for localizable strings that are used. Currently, these are not loaded from resources, but \n            just coded into this class. To make this library localizable, simply change this class to load the\n            given strings from resources.\n            </summary>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Triple`3\">\n            <summary>\n            Stores a triple of objects within a single struct. This struct is useful to use as the\n            T of a collection, or as the TKey or TValue of a dictionary.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.firstComparer\">\n            <summary>\n            Comparers for the first and second type that are used to compare\n            values.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.First\">\n            <summary>\n            The first element of the triple.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.Second\">\n            <summary>\n            The second element of the triple.\n            </summary>\n        </member>\n        <member name=\"F:Wintellect.PowerCollections.Triple`3.Third\">\n            <summary>\n            The thrid element of the triple.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.#ctor(`0,`1,`2)\">\n            <summary>\n            Creates a new triple with given elements.\n            </summary>\n            <param name=\"first\">The first element of the triple.</param>\n            <param name=\"second\">The second element of the triple.</param>\n            <param name=\"third\">The third element of the triple.</param>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.Equals(System.Object)\">\n            <summary>\n            Determines if this triple is equal to another object. The triple is equal to another object \n            if that object is a Triple, all element types are the same, and the all three elements\n            compare equal using object.Equals.\n            </summary>\n            <param name=\"obj\">Object to compare for equality.</param>\n            <returns>True if the objects are equal. False if the objects are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.Equals(Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if this triple is equal to another triple. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"other\">Triple to compare with for equality.</param>\n            <returns>True if the triples are equal. False if the triples are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.GetHashCode\">\n            <summary>\n            Returns a hash code for the triple, suitable for use in a hash-table or other hashed collection.\n            Two triples that compare equal (using Equals) will have the same hash code. The hash code for\n            the triple is derived by combining the hash codes for each of the two elements of the triple.\n            </summary>\n            <returns>The hash code.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.CompareTo(Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            <para> Compares this triple to another triple of the some type. The triples are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements. If their second elements are also equal, then they\n            are compared by their third elements.</para>\n            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the triples cannot be compared.</para>\n            </summary>\n            <param name=\"other\">The triple to compare to.</param>\n            <returns>An integer indicating how this triple compares to <paramref name=\"other\"/>. Less\n            than zero indicates this triple is less than <paramref name=\"other\"/>. Zero indicate this triple is\n            equals to <paramref name=\"other\"/>. Greater than zero indicates this triple is greater than\n            <paramref name=\"other\"/>.</returns>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond, TSecond, or TThird is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.System#IComparable#CompareTo(System.Object)\">\n            <summary>\n            <para> Compares this triple to another triple of the some type. The triples are compared by using\n            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples\n            are compared by their first elements first, if their first elements are equal, then they\n            are compared by their second elements. If their second elements are also equal, then they\n            are compared by their third elements.</para>\n            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then\n            an NotSupportedException is thrown, because the triples cannot be compared.</para>\n            </summary>\n            <param name=\"obj\">The triple to compare to.</param>\n            <returns>An integer indicating how this triple compares to <paramref name=\"obj\"/>. Less\n            than zero indicates this triple is less than <paramref name=\"obj\"/>. Zero indicate this triple is\n            equals to <paramref name=\"obj\"/>. Greater than zero indicates this triple is greater than\n            <paramref name=\"obj\"/>.</returns>\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"obj\"/> is not of the correct type.</exception>\n            <exception cref=\"T:System.NotSupportedException\">Either FirstSecond, TSecond, or TThird is not comparable\n            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.ToString\">\n            <summary>\n            Returns a string representation of the triple. The string representation of the triple is\n            of the form:\n            <c>First: {0}, Second: {1}, Third: {2}</c>\n            where {0} is the result of First.ToString(), {1} is the result of Second.ToString(), and\n            {2} is the result of Third.ToString() (or \"null\" if they are null.)\n            </summary>\n            <returns> The string representation of the triple.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.op_Equality(Wintellect.PowerCollections.Triple{`0,`1,`2},Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if two triples are equal. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First triple to compare.</param>\n            <param name=\"pair2\">Second triple to compare.</param>\n            <returns>True if the triples are equal. False if the triples are not equal.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Triple`3.op_Inequality(Wintellect.PowerCollections.Triple{`0,`1,`2},Wintellect.PowerCollections.Triple{`0,`1,`2})\">\n            <summary>\n            Determines if two triples are not equal. Two triples are equal if the all three elements\n            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.\n            </summary>\n            <param name=\"pair1\">First triple to compare.</param>\n            <param name=\"pair2\">Second triple to compare.</param>\n            <returns>True if the triples are not equal. False if the triples are equal.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Util\">\n            <summary>\n            A holder class for various internal utility functions that need to be shared.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.IsCloneableType(System.Type,System.Boolean@)\">\n            <summary>\n            Determine if a type is cloneable: either a value type or implementing\n            ICloneable.\n            </summary>\n            <param name=\"type\">Type to check.</param>\n            <param name=\"isValue\">Returns if the type is a value type, and does not implement ICloneable.</param>\n            <returns>True if the type is cloneable.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.SimpleClassName(System.Type)\">\n            <summary>\n            Returns the simple name of the class, for use in exception messages. \n            </summary>\n            <returns>The simple name of this class.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.CreateEnumerableWrapper``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Wrap an enumerable so that clients can't get to the underlying\n            implementation via a down-case\n            </summary>\n            <param name=\"wrapped\">Enumerable to wrap.</param>\n            <returns>A wrapper around the enumerable.</returns>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.GetHashCode``1(``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Gets the hash code for an object using a comparer. Correctly handles\n            null.\n            </summary>\n            <param name=\"item\">Item to get hash code for. Can be null.</param>\n            <param name=\"equalityComparer\">The comparer to use.</param>\n            <returns>The hash code for the item.</returns>\n        </member>\n        <member name=\"T:Wintellect.PowerCollections.Util.WrapEnumerable`1\">\n            <summary>\n            Wrap an enumerable so that clients can't get to the underlying \n            implementation via a down-cast.\n            </summary>\n        </member>\n        <member name=\"M:Wintellect.PowerCollections.Util.WrapEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Create the wrapper around an enumerable.\n            </summary>\n            <param name=\"wrapped\">IEnumerable to wrap.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "Documentation/Requirements/PowerCollections/Binaries_Signed_4.5/PowerCollections.dll.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\"/></startup></configuration>\n"
  },
  {
    "path": "Documentation/Requirements/Requirements for agent enviroments.txt",
    "content": ".NET 4.5.1 installed\n\n.NET Framework 4.5 Software Development Kit\n\thttp://msdn.microsoft.com/en-us/library/windows/desktop/hh852363.aspx\n\nPowerCollections.dll should be added to the GAC\n\tgacutil /i PowerCollections.dll\n\thttp://msdn.microsoft.com/en-us/library/ex0ss12c.aspx\n\tIf gacutil doesn't work, paste the assembly in C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319 and C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\n\nGCC compiler installed\n\nFirewall should block all unnecessary ips and ports\n\nSystem is tested in Win8 and Windows Server 2012 R2 (Preview)\n\n\nThe executor process should be with Realtime priority\n\nWhen executor process is run for the first time, a sample process should be run in order for system dlls to be cached.\n\nFor tests with strange characters to work correctly the non-Unicode setting in Windows settings must be set to proper encoding (for example: Windows-1251)\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {description}\n    Copyright (C) {year}  {fullname}\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  {signature of Ty Coon}, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"v11.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=.;Initial Catalog=OnlineJudgeSystem;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework.MappingAPI\" publicKeyToken=\"7ee2e825d201459e\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.9\" newVersion=\"6.1.0.9\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Configurations/ParticipantAnswersConfiguration.cs",
    "content": "﻿namespace OJS.Data.Configurations\n{\n    using System.Data.Entity.ModelConfiguration;\n\n    using OJS.Data.Models;\n\n    public class ParticipantAnswersConfiguration : EntityTypeConfiguration<ParticipantAnswer>\n    {\n        public ParticipantAnswersConfiguration()\n        {\n            /*\n             * The following configuration fixes:\n             * Introducing FOREIGN KEY constraint 'FK_dbo.ParticipantAnswers_dbo.ContestQuestions_ContestQuestionId' on table 'ParticipantAnswers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.\n             */\n            this.HasRequired(x => x.ContestQuestion)\n                .WithMany(x => x.ParticipantAnswers)\n                .HasForeignKey(x => x.ContestQuestionId)\n                .WillCascadeOnDelete(false);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Configurations/TestRunConfiguration.cs",
    "content": "﻿namespace OJS.Data.Configurations\n{\n    using System.Data.Entity.ModelConfiguration;\n\n    using OJS.Data.Models;\n\n    public class TestRunConfiguration : EntityTypeConfiguration<TestRun>\n    {\n        public TestRunConfiguration()\n        {\n            /*\n             * The following configuration fixes:\n             * Introducing FOREIGN KEY constraint 'FK_dbo.TestRuns_dbo.Tests_TestId' on table 'TestRuns' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.\n             */\n            this.HasRequired(x => x.Test)\n                .WithMany(x => x.TestRuns)\n                .HasForeignKey(x => x.TestId)\n                .WillCascadeOnDelete(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Configurations/UserProfileConfiguration.cs",
    "content": "﻿namespace OJS.Data.Configurations\n{\n    using System.Data.Entity.ModelConfiguration;\n\n    using OJS.Data.Models;\n\n    public class UserProfileConfiguration : EntityTypeConfiguration<UserProfile>\n    {\n        public UserProfileConfiguration()\n        {\n            this.Property(x => x.UserName)\n                .IsRequired()\n                .HasMaxLength(50)\n                .IsUnicode(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/IOjsData.cs",
    "content": "﻿namespace OJS.Data\n{\n    using System;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Contracts;\n\n    public interface IOjsData : IDisposable\n    {\n        IContestsRepository Contests { get; }\n\n        IDeletableEntityRepository<Problem> Problems { get; }\n\n        ITestRepository Tests { get; }\n\n        IDeletableEntityRepository<News> News { get; }\n\n        IDeletableEntityRepository<Event> Events { get; }\n\n        IDeletableEntityRepository<ContestCategory> ContestCategories { get; }\n\n        IDeletableEntityRepository<ContestQuestion> ContestQuestions { get; }\n\n        IDeletableEntityRepository<ContestQuestionAnswer> ContestQuestionAnswers { get; }\n\n        ITestRunsRepository TestRuns { get; }\n\n        IDeletableEntityRepository<FeedbackReport> FeedbackReports { get; }\n\n        IDeletableEntityRepository<Checker> Checkers { get; }\n\n        IDeletableEntityRepository<ProblemResource> Resources { get; }\n\n        IUsersRepository Users { get; }\n\n        IRepository<IdentityRole> Roles { get; }\n\n        IParticipantsRepository Participants { get; }\n\n        IRepository<Setting> Settings { get; }\n\n        ISubmissionsRepository Submissions { get; }\n\n        IRepository<SubmissionType> SubmissionTypes { get; }\n\n        IDeletableEntityRepository<SourceCode> SourceCodes { get; }\n\n        IRepository<AccessLog> AccessLogs { get; }\n\n        IOjsDbContext Context { get; }\n\n        int SaveChanges();\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/IOjsDbContext.cs",
    "content": "﻿namespace OJS.Data\n{\n    using System;\n    using System.Data.Entity;\n    using System.Data.Entity.Infrastructure;\n\n    using OJS.Data.Models;\n\n    public interface IOjsDbContext : IDisposable\n    {\n        IDbSet<Setting> Settings { get; }\n\n        IDbSet<Contest> Contests { get; }\n\n        IDbSet<Problem> Problems { get; }\n\n        IDbSet<News> News { get; }\n\n        IDbSet<Event> Events { get; }\n\n        IDbSet<Participant> Participants { get; }\n\n        IDbSet<ContestCategory> ContestCategories { get; set; }\n\n        IDbSet<ContestQuestion> ContestQuestions { get; set; }\n\n        IDbSet<ContestQuestionAnswer> ContestQuestionAnswers { get; set; }\n\n        IDbSet<Checker> Checkers { get; set; }\n\n        IDbSet<Test> Tests { get; set; }\n\n        IDbSet<Submission> Submissions { get; set; }\n\n        IDbSet<SubmissionType> SubmissionTypes { get; set; }\n\n        IDbSet<SourceCode> SourceCodes { get; set; }\n\n        IDbSet<FeedbackReport> FeedbackReports { get; set; }\n\n        IDbSet<ParticipantAnswer> ParticipantAnswers { get; set; }\n\n        IDbSet<AccessLog> AccessLogs { get; set; }\n\n        DbContext DbContext { get; }\n\n        int SaveChanges();\n\n        void ClearDatabase();\n\n        DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity)\n            where TEntity : class;\n\n        IDbSet<T> Set<T>()\n            where T : class;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Migrations/DefaultMigrationConfiguration.cs",
    "content": "﻿namespace OJS.Data.Migrations\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Data.Entity.Migrations;\n    using System.Linq;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    public class DefaultMigrationConfiguration : DbMigrationsConfiguration<OjsDbContext>\n    {\n        public DefaultMigrationConfiguration()\n        {\n            this.AutomaticMigrationsEnabled = true;\n            this.AutomaticMigrationDataLossAllowed = true;\n        }\n\n        protected override void Seed(OjsDbContext context)\n        {\n            if (context.Roles.Any())\n            {\n                return;\n            }\n\n            // this.SeedSubmissionsAndTestRuns(context);\n            this.SeedRoles(context);\n            this.SeedCheckers(context);\n            this.SeedSubmissionTypes(context);\n\n            // this.SeedContests(context);\n            // this.SeedLongNews(context);\n            // this.SeedRandomContests(context);\n            // this.SeedProblem(context);\n            // this.SeedTest(context);\n            // this.SeedCategoryContestProblem(context);\n        }\n\n        //// TODO: Add seed with .Any()\n\n        protected void SeedRoles(OjsDbContext context)\n        {\n            foreach (var entity in context.Roles)\n            {\n                context.Roles.Remove(entity);\n            }\n\n            context.Roles.AddOrUpdate(new IdentityRole(GlobalConstants.AdministratorRoleName));\n        }\n\n        protected void SeedCheckers(OjsDbContext context)\n        {\n            var checkers = new[]\n                               {\n                                   new Checker\n                                       {\n                                           Name = \"Exact\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.ExactChecker\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Trim\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.TrimChecker\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Sort lines\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.SortChecker\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Case-insensitive\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.CaseInsensitiveChecker\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Precision checker - 14\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.PrecisionChecker\",\n                                           Parameter = \"14\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Precision checker - 7\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.PrecisionChecker\",\n                                           Parameter = \"7\",\n                                       },\n                                   new Checker\n                                       {\n                                           Name = \"Precision checker - 3\",\n                                           DllFile = \"OJS.Workers.Checkers.dll\",\n                                           ClassName = \"OJS.Workers.Checkers.PrecisionChecker\",\n                                           Parameter = \"3\",\n                                       }\n                               };\n            context.Checkers.AddOrUpdate(x => x.Name, checkers);\n            context.SaveChanges();\n        }\n\n        protected void SeedSubmissionTypes(OjsDbContext context)\n        {\n            foreach (var entity in context.SubmissionTypes)\n            {\n                context.SubmissionTypes.Remove(entity);\n            }\n\n            context.SaveChanges();\n\n            var submissionTypes = new[]\n                                      {\n                                          new SubmissionType\n                                              {\n                                                  Name = \"File upload\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType = ExecutionStrategyType.DoNothing,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = \"zip,rar\",\n                                                  AllowBinaryFilesUpload = true,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"C# code\",\n                                                  CompilerType = CompilerType.CSharp,\n                                                  AdditionalCompilerArguments =\n                                                      \"/optimize+ /nologo /reference:System.Numerics.dll /reference:PowerCollections.dll\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.CompileExecuteAndCheck,\n                                                  IsSelectedByDefault = true,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"C++ code\",\n                                                  CompilerType = CompilerType.CPlusPlusGcc,\n                                                  AdditionalCompilerArguments =\n                                                      \"-pipe -mtune=generic -O3 -static-libgcc -static-libstdc++\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.CompileExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"JavaScript code (NodeJS)\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.NodeJsPreprocessExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"JavaScript code (Mocha unit tests)\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = \"-R json\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType\n                                                      .NodeJsPreprocessExecuteAndRunUnitTestsWithMocha,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"JavaScript code (DOM unit tests)\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = \"-R json\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType\n                                                      .IoJsPreprocessExecuteAndRunJsDomUnitTests,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"C# project/solution\",\n                                                  CompilerType = CompilerType.MsBuild,\n                                                  AdditionalCompilerArguments =\n                                                      \"/t:rebuild /p:Configuration=Release,Optimize=true /verbosity:quiet /nologo\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.CompileExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = \"zip\",\n                                                  AllowBinaryFilesUpload = true,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"C# test runner\",\n                                                  CompilerType = CompilerType.MsBuild,\n                                                  AdditionalCompilerArguments =\n                                                      \"/t:rebuild /p:Configuration=Release,Optimize=true /verbosity:quiet /nologo\",\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.CSharpTestRunner,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = \"zip\",\n                                                  AllowBinaryFilesUpload = true,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"Java code\",\n                                                  CompilerType = CompilerType.Java,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType\n                                                      .JavaPreprocessCompileExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"Java zip file\",\n                                                  CompilerType = CompilerType.JavaZip,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType\n                                                      .JavaZipFileCompileExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = \"zip\",\n                                                  AllowBinaryFilesUpload = true,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"Python code\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType\n                                                      .PythonExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"PHP code (CGI)\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.PhpCgiExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              },\n                                          new SubmissionType\n                                              {\n                                                  Name = \"PHP code (CLI)\",\n                                                  CompilerType = CompilerType.None,\n                                                  AdditionalCompilerArguments = string.Empty,\n                                                  ExecutionStrategyType =\n                                                      ExecutionStrategyType.PhpCliExecuteAndCheck,\n                                                  IsSelectedByDefault = false,\n                                                  AllowedFileExtensions = null,\n                                                  AllowBinaryFilesUpload = false,\n                                              }\n                                      };\n\n            context.SubmissionTypes.AddOrUpdate(x => x.Name, submissionTypes);\n            context.SaveChanges();\n        }\n\n        private void SeedCategoryContestProblem(IOjsDbContext context)\n        {\n            foreach (var categoryToBeDeleted in context.ContestCategories)\n            {\n                context.ContestCategories.Remove(categoryToBeDeleted);\n            }\n\n            foreach (var contestToBeDeleted in context.Contests)\n            {\n                context.Contests.Remove(contestToBeDeleted);\n            }\n\n            foreach (var problemToBeDeleted in context.Problems)\n            {\n                context.Problems.Remove(problemToBeDeleted);\n            }\n\n            var category = new ContestCategory\n            {\n                Name = \"Category\",\n                OrderBy = 1,\n                IsVisible = true,\n                IsDeleted = false,\n            };\n\n            var otherCategory = new ContestCategory\n            {\n                Name = \"Other Category\",\n                OrderBy = 1,\n                IsVisible = true,\n                IsDeleted = false,\n            };\n\n            var contest = new Contest\n            {\n                Name = \"Contest\",\n                OrderBy = 1,\n                PracticeStartTime = DateTime.Now.AddDays(-2),\n                StartTime = DateTime.Now.AddDays(-2),\n                IsVisible = true,\n                IsDeleted = false,\n                Category = category\n            };\n\n            var otherContest = new Contest\n            {\n                Name = \"Other Contest\",\n                OrderBy = 2,\n                PracticeStartTime = DateTime.Now.AddDays(-2),\n                StartTime = DateTime.Now.AddDays(-2),\n                IsVisible = true,\n                IsDeleted = false,\n                Category = category\n            };\n\n            var problem = new Problem\n            {\n                Name = \"Problem\",\n                MaximumPoints = 100,\n                TimeLimit = 10,\n                MemoryLimit = 10,\n                OrderBy = 1,\n                ShowResults = true,\n                IsDeleted = false,\n                Contest = contest\n            };\n\n            var otherProblem = new Problem\n            {\n                Name = \"Other Problem\",\n                MaximumPoints = 100,\n                TimeLimit = 10,\n                MemoryLimit = 10,\n                OrderBy = 1,\n                ShowResults = true,\n                IsDeleted = false,\n                Contest = contest\n            };\n\n            var test = new Test\n            {\n                InputDataAsString = \"Input\",\n                OutputDataAsString = \"Output\",\n                OrderBy = 0,\n                IsTrialTest = false,\n                Problem = problem,\n            };\n\n            var user = new UserProfile\n            {\n                UserName = \"Ifaka\",\n                Email = \"Nekav@nekav.com\"\n            };\n\n            var participant = new Participant\n            {\n                Contest = contest,\n                IsOfficial = false,\n                User = user\n            };\n\n            var submission = new Submission\n            {\n                Problem = problem,\n                Participant = participant,\n                CreatedOn = DateTime.Now\n            };\n\n            for (int i = 0; i < 10; i++)\n            {\n                test.TestRuns.Add(new TestRun\n                {\n                    MemoryUsed = 100,\n                    TimeUsed = 100,\n                    CheckerComment = \"Checked!\",\n                    ExecutionComment = \"Executed!\",\n                    ResultType = TestRunResultType.CorrectAnswer,\n                    Submission = submission\n                });\n            }\n\n            context.Problems.Add(problem);\n            contest.Problems.Add(otherProblem);\n            context.Contests.Add(otherContest);\n            context.ContestCategories.Add(otherCategory);\n            context.Tests.Add(test);\n        }\n\n        private void SeedSubmissionsAndTestRuns(OjsDbContext context)\n        {\n            foreach (var submission in context.Submissions)\n            {\n                context.Submissions.Remove(submission);\n            }\n\n            foreach (var testRun in context.TestRuns)\n            {\n                context.TestRuns.Remove(testRun);\n            }\n\n            foreach (var participantToDelete in context.Participants)\n            {\n                context.Participants.Remove(participantToDelete);\n            }\n\n            Random random = new Random();\n\n            List<TestRun> testRuns = new List<TestRun>();\n\n            var test = new Test\n            {\n                IsTrialTest = false,\n                OrderBy = 1\n            };\n\n            for (int i = 0; i < 1000; i++)\n            {\n                testRuns.Add(new TestRun\n                    {\n                        TimeUsed = (random.Next() % 10) + 1,\n                        MemoryUsed = (random.Next() % 1500) + 200,\n                        ResultType = (TestRunResultType)(random.Next() % 5),\n                        Test = test\n                    });\n            }\n\n            var contest = new Contest\n            {\n                Name = \"Contest batka 2\",\n                StartTime = DateTime.Now.AddDays(1),\n                EndTime = DateTime.Now.AddDays(2),\n                IsDeleted = false,\n                IsVisible = true,\n                OrderBy = 1\n            };\n\n            var problem = new Problem\n            {\n                OldId = 0,\n                Contest = contest,\n                Name = \"Problem\",\n                MaximumPoints = 100,\n                MemoryLimit = 100,\n                OrderBy = 1\n            };\n\n            var user = new UserProfile\n            {\n                UserName = \"Ifaka\",\n                Email = \"Nekav@nekav.com\"\n            };\n\n            var participant = new Participant\n            {\n                Contest = contest,\n                IsOfficial = false,\n                User = user\n            };\n\n            for (int i = 0; i < 100; i++)\n            {\n                var submission = new Submission\n                {\n                    Problem = problem,\n                    Participant = participant\n                };\n\n                for (int j = 0; j < (random.Next() % 20) + 5; j++)\n                {\n                    submission.TestRuns.Add(testRuns[random.Next() % 1000]);\n                }\n\n                context.Submissions.Add(submission);\n            }\n        }\n\n        private void SeedContest(OjsDbContext context)\n        {\n            foreach (var entity in context.Contests)\n            {\n                context.Contests.Remove(entity);\n            }\n\n            context.Contests.Add(new Contest\n            {\n                Name = \"Contest\",\n            });\n\n            context.SaveChanges();\n        }\n\n        private void SeedProblem(OjsDbContext context)\n        {\n            foreach (var problem in context.Problems)\n            {\n                context.Problems.Remove(problem);\n            }\n\n            var contest = context.Contests.FirstOrDefault(x => x.Name == \"Contest\");\n\n            contest.Problems.Add(new Problem\n            {\n                Name = \"Problem\"\n            });\n\n            contest.Problems.Add(new Problem\n            {\n                Name = \"Other problem\"\n            });\n\n            context.SaveChanges();\n        }\n\n        private void SeedTest(OjsDbContext context)\n        {\n            foreach (var entity in context.Tests)\n            {\n                context.Tests.Remove(entity);\n            }\n\n            var selectedProblem = context.Problems.FirstOrDefault(x => x.Name == \"Problem\" && !x.IsDeleted);\n\n            selectedProblem.Tests.Add(new Test\n            {\n                InputDataAsString = \"Trial input test 1\",\n                OutputDataAsString = \"Trial output test 1\",\n                IsTrialTest = true\n            });\n\n            selectedProblem.Tests.Add(new Test\n            {\n                InputDataAsString = \"Trial input test 2\",\n                OutputDataAsString = \"Trial output test 2\",\n                IsTrialTest = true\n            });\n\n            for (int i = 0; i < 10; i++)\n            {\n                selectedProblem.Tests.Add(new Test\n                {\n                    InputDataAsString = i.ToString(),\n                    OutputDataAsString = (i + 1).ToString(),\n                    IsTrialTest = false\n                });\n            }\n\n            var otherProblem = context.Problems.FirstOrDefault(x => x.Name == \"Other problem\" && !x.IsDeleted);\n\n            otherProblem.Tests.Add(new Test\n            {\n                InputDataAsString = \"Trial input test 1 other\",\n                OutputDataAsString = \"Trial output test 1 other\",\n                IsTrialTest = true\n            });\n\n            otherProblem.Tests.Add(new Test\n            {\n                InputDataAsString = \"Trial input test 2 other\",\n                OutputDataAsString = \"Trial output test 2 other\",\n                IsTrialTest = true\n            });\n\n            for (int i = 0; i < 10; i++)\n            {\n                otherProblem.Tests.Add(new Test\n                {\n                    InputDataAsString = i.ToString() + \"other\",\n                    OutputDataAsString = (i + 1).ToString() + \"other\",\n                    IsTrialTest = false\n                });\n            }\n        }\n\n        private void SeedLongNews(OjsDbContext context)\n        {\n            foreach (var news in context.News)\n            {\n                context.News.Remove(news);\n            }\n\n            for (int i = 1; i < 150; i++)\n            {\n                context.News.Add(\n                new News\n                {\n                    IsVisible = true,\n                    Author = \"Author\",\n                    Source = \"Source\",\n                    Title = \"News \" + i,\n                    Content = \"Very Some long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long news\",\n                });\n\n                context.News.Add(\n                    new News\n                    {\n                        Author = \"Author\",\n                        Source = \"Source\",\n                        IsVisible = false,\n                        Title = \"This should not be visible!\",\n                        Content = \"Very Some long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long newsSome long long long long long long long long long long long news\",\n                    });\n            }\n        }\n\n        private void SeedRandomContests(OjsDbContext context)\n        {\n            foreach (var contest in context.Contests)\n            {\n                context.Contests.Remove(contest);\n            }\n\n            var category = new ContestCategory\n            {\n                Name = \"Category\",\n                OrderBy = 1,\n                IsVisible = true,\n                IsDeleted = false,\n            };\n\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"DSA future\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(10),\n                    EndTime = DateTime.Now.AddHours(19),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"DSA 2 out\",\n                    IsVisible = false,\n                    StartTime = DateTime.Now.AddHours(10),\n                    EndTime = DateTime.Now.AddHours(19),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"DSA 3 past\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-10),\n                    EndTime = DateTime.Now.AddHours(-8),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"DSA 2 active\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-2),\n                    EndTime = DateTime.Now.AddHours(2),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps another active\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-2),\n                    EndTime = DateTime.Now.AddHours(2),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps another active 2\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-2),\n                    EndTime = DateTime.Now.AddHours(2),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps another active 3\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-2),\n                    EndTime = DateTime.Now.AddHours(2),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps 2 past\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-10),\n                    EndTime = DateTime.Now.AddHours(-8),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps 3 past\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(-10),\n                    EndTime = DateTime.Now.AddHours(-8),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps 3 past\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(10),\n                    EndTime = DateTime.Now.AddHours(18),\n                    Category = category,\n                });\n            context.Contests.Add(\n                new Contest\n                {\n                    Name = \"JS Apps 3 past\",\n                    IsVisible = true,\n                    StartTime = DateTime.Now.AddHours(10),\n                    EndTime = DateTime.Now.AddHours(18),\n                    Category = category,\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/OJS.Data.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1807194C-9E25-4365-B3BE-FE1DF627612B}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Data</RootNamespace>\n    <AssemblyName>OJS.Data</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.BulkInsert, Version=6.0.2.8, Culture=neutral, PublicKeyToken=630a17433349cb76, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.BulkInsert-ef6.6.0.2.8\\lib\\Net45\\EntityFramework.BulkInsert.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.Extended, Version=6.0.0.0, Culture=neutral, PublicKeyToken=05b7e29bdd433584, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.Extended.6.1.0.168\\lib\\net45\\EntityFramework.Extended.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.MappingAPI, Version=6.1.0.9, Culture=neutral, PublicKeyToken=7ee2e825d201459e, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.MappingAPI.6.1.0.9\\lib\\net45\\EntityFramework.MappingAPI.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Glimpse.Ado, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Glimpse.Ado.1.7.3\\lib\\net45\\Glimpse.Ado.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Glimpse.Core, Version=1.8.6.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Glimpse.1.8.6\\lib\\net45\\Glimpse.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configurations\\ParticipantAnswersConfiguration.cs\" />\n    <Compile Include=\"Configurations\\TestRunConfiguration.cs\" />\n    <Compile Include=\"Configurations\\UserProfileConfiguration.cs\" />\n    <Compile Include=\"Migrations\\DefaultMigrationConfiguration.cs\" />\n    <Compile Include=\"Providers\\GlimpseConnectionEfSqlBulkInsertProvider.cs\" />\n    <Compile Include=\"Providers\\Registries\\EfBulkInsertGlimpseProviderRegistry.cs\" />\n    <Compile Include=\"Repositories\\ContestsRepository.cs\" />\n    <Compile Include=\"Repositories\\Base\\DeletableEntityRepository.cs\" />\n    <Compile Include=\"Repositories\\Base\\GenericRepository.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\IContestsRepository.cs\" />\n    <Compile Include=\"IOjsData.cs\" />\n    <Compile Include=\"IOjsDbContext.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\ISubmissionsRepository.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\ITestRepository.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\ITestRunsRepository.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\IUsersRepository.cs\" />\n    <Compile Include=\"OjsDbContext.cs\" />\n    <Compile Include=\"OjsData.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Repositories\\Contracts\\IParticipantsRepository.cs\" />\n    <Compile Include=\"Repositories\\ParticipantsRepository.cs\" />\n    <Compile Include=\"Repositories\\SubmissionsRepository.cs\" />\n    <Compile Include=\"Repositories\\TestRepository.cs\" />\n    <Compile Include=\"Repositories\\TestRunsRepository.cs\" />\n    <Compile Include=\"Repositories\\UsersRepository.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\n      <Name>OJS.Data.Contracts</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Data.Models\\OJS.Data.Models.csproj\">\n      <Project>{341ca732-d483-4487-923e-27ed2a6e9a4f}</Project>\n      <Name>OJS.Data.Models</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/OjsData.cs",
    "content": "﻿namespace OJS.Data\n{\n    using System;\n    using System.Collections.Generic;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n    using OJS.Data.Repositories;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class OjsData : IOjsData\n    {\n        private readonly IOjsDbContext context;\n\n        private readonly Dictionary<Type, object> repositories = new Dictionary<Type, object>();\n\n        public OjsData()\n            : this(new OjsDbContext())\n        {\n        }\n\n        public OjsData(IOjsDbContext context)\n        {\n            this.context = context;\n        }\n\n        public IContestsRepository Contests => (ContestsRepository)this.GetRepository<Contest>();\n\n        public IDeletableEntityRepository<Problem> Problems => this.GetDeletableEntityRepository<Problem>();\n\n        public ITestRepository Tests => (TestRepository)this.GetRepository<Test>();\n\n        public IDeletableEntityRepository<News> News => this.GetDeletableEntityRepository<News>();\n\n        public IDeletableEntityRepository<Event> Events => this.GetDeletableEntityRepository<Event>();\n\n        public IDeletableEntityRepository<ContestCategory> ContestCategories\n            => this.GetDeletableEntityRepository<ContestCategory>();\n\n        public IDeletableEntityRepository<ContestQuestion> ContestQuestions\n            => this.GetDeletableEntityRepository<ContestQuestion>();\n\n        public IDeletableEntityRepository<ContestQuestionAnswer> ContestQuestionAnswers\n            => this.GetDeletableEntityRepository<ContestQuestionAnswer>();\n\n        public ISubmissionsRepository Submissions => (SubmissionsRepository)this.GetRepository<Submission>();\n\n        public IRepository<SubmissionType> SubmissionTypes => this.GetRepository<SubmissionType>();\n\n        public IDeletableEntityRepository<SourceCode> SourceCodes => this.GetDeletableEntityRepository<SourceCode>();\n\n        public IRepository<AccessLog> AccessLogs => this.GetRepository<AccessLog>();\n\n        public ITestRunsRepository TestRuns => (TestRunsRepository)this.GetRepository<TestRun>();\n\n        public IParticipantsRepository Participants => (ParticipantsRepository)this.GetRepository<Participant>();\n\n        public IDeletableEntityRepository<FeedbackReport> FeedbackReports\n            => this.GetDeletableEntityRepository<FeedbackReport>();\n\n        public IDeletableEntityRepository<Checker> Checkers => this.GetDeletableEntityRepository<Checker>();\n\n        public IDeletableEntityRepository<ProblemResource> Resources\n            => this.GetDeletableEntityRepository<ProblemResource>();\n\n        public IRepository<Setting> Settings => this.GetRepository<Setting>();\n\n        public IUsersRepository Users => (UsersRepository)this.GetRepository<UserProfile>();\n\n        public IRepository<IdentityRole> Roles => this.GetRepository<IdentityRole>();\n\n        public IOjsDbContext Context => this.context;\n\n        /// <summary>\n        /// Saves all changes made in this context to the underlying database.\n        /// </summary>\n        /// <returns>\n        /// The number of objects written to the underlying database.\n        /// </returns>\n        /// <exception cref=\"T:System.InvalidOperationException\">Thrown if the context has been disposed.</exception>\n        public int SaveChanges()\n        {\n            return this.context.SaveChanges();\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(true);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                this.context?.Dispose();\n            }\n        }\n\n        private IRepository<T> GetRepository<T>()\n            where T : class\n        {\n            if (!this.repositories.ContainsKey(typeof(T)))\n            {\n                var type = typeof(GenericRepository<T>);\n\n                if (typeof(T).IsAssignableFrom(typeof(Contest)))\n                {\n                    type = typeof(ContestsRepository);\n                }\n\n                if (typeof(T).IsAssignableFrom(typeof(Submission)))\n                {\n                    type = typeof(SubmissionsRepository);\n                }\n\n                if (typeof(T).IsAssignableFrom(typeof(Test)))\n                {\n                    type = typeof(TestRepository);\n                }\n\n                if (typeof(T).IsAssignableFrom(typeof(TestRun)))\n                {\n                    type = typeof(TestRunsRepository);\n                }\n\n                if (typeof(T).IsAssignableFrom(typeof(UserProfile)))\n                {\n                    type = typeof(UsersRepository);\n                }\n\n                if (typeof(T).IsAssignableFrom(typeof(Participant)))\n                {\n                    type = typeof(ParticipantsRepository);\n                }\n\n                this.repositories.Add(typeof(T), Activator.CreateInstance(type, this.context));\n            }\n\n            return (IRepository<T>)this.repositories[typeof(T)];\n        }\n\n        private IDeletableEntityRepository<T> GetDeletableEntityRepository<T>()\n            where T : class, IDeletableEntity, new()\n        {\n            if (!this.repositories.ContainsKey(typeof(T)))\n            {\n                var type = typeof(DeletableEntityRepository<T>);\n                this.repositories.Add(typeof(T), Activator.CreateInstance(type, this.context));\n            }\n\n            return (IDeletableEntityRepository<T>)this.repositories[typeof(T)];\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/OjsDbContext.cs",
    "content": "﻿namespace OJS.Data\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Data.Entity;\n    using System.Linq;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Data.Configurations;\n    using OJS.Data.Contracts;\n    using OJS.Data.Contracts.CodeFirstConventions;\n    using OJS.Data.Models;\n\n    using User = OJS.Data.Models.UserProfile;\n\n    public class OjsDbContext : IdentityDbContext<UserProfile>, IOjsDbContext\n    {\n        public OjsDbContext()\n            : this(\"DefaultConnection\")\n        {\n        }\n\n        public OjsDbContext(string nameOrConnectionString)\n            : base(nameOrConnectionString)\n        {\n        }\n\n        public virtual IDbSet<Setting> Settings { get; set; }\n\n        public virtual IDbSet<Contest> Contests { get; set; }\n\n        public virtual IDbSet<Problem> Problems { get; set; }\n\n        public virtual IDbSet<News> News { get; set; }\n\n        public virtual IDbSet<Event> Events { get; set; }\n\n        public virtual IDbSet<Participant> Participants { get; set; }\n\n        public virtual IDbSet<ContestCategory> ContestCategories { get; set; }\n\n        public virtual IDbSet<ContestQuestion> ContestQuestions { get; set; }\n\n        public virtual IDbSet<ContestQuestionAnswer> ContestQuestionAnswers { get; set; }\n\n        public virtual IDbSet<Checker> Checkers { get; set; }\n\n        public virtual IDbSet<Test> Tests { get; set; }\n\n        public virtual IDbSet<Submission> Submissions { get; set; }\n\n        public virtual IDbSet<SubmissionType> SubmissionTypes { get; set; }\n\n        public virtual IDbSet<SourceCode> SourceCodes { get; set; }\n\n        public virtual IDbSet<TestRun> TestRuns { get; set; }\n\n        public virtual IDbSet<FeedbackReport> FeedbackReports { get; set; }\n\n        public virtual IDbSet<ParticipantAnswer> ParticipantAnswers { get; set; }\n\n        public virtual IDbSet<AccessLog> AccessLogs { get; set; }\n\n        public DbContext DbContext => this;\n\n        public override int SaveChanges()\n        {\n            this.ApplyAuditInfoRules();\n            return base.SaveChanges();\n        }\n\n        public void ClearDatabase()\n        {\n            /*\n            // Possible solution to foreign key deletes: http://www.ridgway.co.za/articles/174.aspx\n            // The above solution does not work with cyclic relations.\n            */\n\n            this.SaveChanges();\n            var tableNames =\n                /* this.Database.SqlQuery<string>(\n                      \"SELECT [TABLE_NAME] from information_schema.tables WHERE [TABLE_NAME] != '__MigrationHistory'\")\n                      .ToList();\n                 */\n                new List<string>\n                    {\n                        \"ParticipantAnswers\",\n                        \"FeedbackReports\",\n                        \"AspNetUserRoles\",\n                        \"AspNetRoles\",\n                        \"AspNetUserLogins\",\n                        \"AspNetUserClaims\",\n                        \"News\",\n                        \"Events\",\n                        \"TestRuns\",\n                        \"Submissions\",\n                        \"Participants\",\n                        \"AspNetUsers\",\n                        \"Tests\",\n                        \"Problems\",\n                        \"Checkers\",\n                        \"ContestQuestionAnswers\",\n                        \"ContestQuestions\",\n                        \"Contests\",\n                        \"ContestCategories\",\n                    };\n\n            foreach (var tableName in tableNames)\n            {\n                this.Database.ExecuteSqlCommand(string.Format(\"DELETE FROM {0}\", tableName));\n                try\n                {\n                    this.Database.ExecuteSqlCommand(string.Format(\"DBCC CHECKIDENT ('{0}',RESEED, 0)\", tableName));\n                }\n                catch\n                {\n                    // The table does not contain an identity column\n                }\n            }\n\n            this.SaveChanges();\n        }\n\n        public new IDbSet<T> Set<T>()\n            where T : class\n        {\n            return base.Set<T>();\n        }\n\n        protected override void OnModelCreating(DbModelBuilder modelBuilder)\n        {\n            modelBuilder.Conventions.Add(new IsUnicodeAttributeConvention());\n\n            modelBuilder.Configurations.Add(new TestRunConfiguration());\n            modelBuilder.Configurations.Add(new ParticipantAnswersConfiguration());\n            modelBuilder.Configurations.Add(new UserProfileConfiguration());\n\n            base.OnModelCreating(modelBuilder); // Without this call EntityFramework won't be able to configure the identity model\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            base.Dispose(disposing);\n        }\n\n        private void ApplyAuditInfoRules()\n        {\n            // Approach via @julielerman: http://bit.ly/123661P\n            foreach (var entry in\n                this.ChangeTracker.Entries()\n                    .Where(\n                        e =>\n                        e.Entity is IAuditInfo && ((e.State == EntityState.Added) || (e.State == EntityState.Modified))))\n            {\n                var entity = (IAuditInfo)entry.Entity;\n\n                if (entry.State == EntityState.Added)\n                {\n                    if (!entity.PreserveCreatedOn)\n                    {\n                        entity.CreatedOn = DateTime.Now;\n                    }\n                }\n                else\n                {\n                    entity.ModifiedOn = DateTime.Now;\n                }\n            }\n        }\n\n        private void ApplyDeletableEntityRules()\n        {\n            // Approach via @julielerman: http://bit.ly/123661P\n            foreach (\n                var entry in\n                    this.ChangeTracker.Entries()\n                        .Where(e => e.Entity is IDeletableEntity && (e.State == EntityState.Deleted)))\n            {\n                var entity = (IDeletableEntity)entry.Entity;\n\n                entity.DeletedOn = DateTime.Now;\n                entity.IsDeleted = true;\n                entry.State = EntityState.Modified;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Data\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Data\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"33fb6ec2-5092-4426-b5f5-3d43c762a15c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Providers/GlimpseConnectionEfSqlBulkInsertProvider.cs",
    "content": "﻿namespace OJS.Data.Providers\n{\n    using System;\n    using System.Reflection;\n\n    using EntityFramework.BulkInsert.Providers;\n\n    using Glimpse.Ado.AlternateType;\n\n    internal class GlimpseConnectionEfSqlBulkInsertProvider : EfSqlBulkInsertProviderWithMappedDataReader\n    {\n        protected override string ConnectionString => this.GetConnectionStringWithPassword();\n\n        private string GetConnectionStringWithPassword()\n        {\n            const string PropName = \"_connectionString\";\n\n            var innerConnection = ((GlimpseDbConnection)this.DbConnection).InnerConnection;\n            var type = innerConnection.GetType();\n\n            FieldInfo fieldInfo = null;\n            PropertyInfo propertyInfo = null;\n            while (fieldInfo == null && propertyInfo == null && type != null)\n            {\n                fieldInfo = type.GetField(PropName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);\n                if (fieldInfo == null)\n                {\n                    propertyInfo = type.GetProperty(PropName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);\n                }\n\n                type = type.BaseType;\n            }\n\n            if (fieldInfo == null && propertyInfo == null)\n            {\n                throw new Exception(\"Field _connectionString was not found\");\n            }\n\n            if (fieldInfo != null)\n            {\n                return (string)fieldInfo.GetValue(innerConnection);\n            }\n\n            return (string)propertyInfo.GetValue(innerConnection, null);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Providers/Registries/EfBulkInsertGlimpseProviderRegistry.cs",
    "content": "﻿namespace OJS.Data.Providers.Registries\n{\n    using EntityFramework.BulkInsert;\n\n    public static class EfBulkInsertGlimpseProviderRegistry\n    {\n        public static void Execute()\n        {\n            ProviderFactory.Register<GlimpseConnectionEfSqlBulkInsertProvider>(\"Glimpse.Ado.AlternateType.GlimpseDbConnection\");\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Base/DeletableEntityRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Base\n{\n    using System;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using EntityFramework.Extensions;\n\n    using OJS.Data.Contracts;\n\n    public class DeletableEntityRepository<T> : GenericRepository<T>, IDeletableEntityRepository<T>\n        where T : class, IDeletableEntity, new()\n    {\n        public DeletableEntityRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public override IQueryable<T> All()\n        {\n            return base.All().Where(x => !x.IsDeleted);\n        }\n\n        public IQueryable<T> AllWithDeleted()\n        {\n            return base.All();\n        }\n\n        public override void Delete(T entity)\n        {\n            entity.IsDeleted = true;\n            entity.DeletedOn = DateTime.Now;\n\n            this.Update(entity);\n        }\n\n        public override int Delete(Expression<Func<T, bool>> filterExpression)\n        {\n            return this.DbSet.Where(filterExpression).Update(entity => new T { IsDeleted = true, DeletedOn = DateTime.Now });\n        }\n\n        public void HardDelete(T entity)\n        {\n            base.Delete(entity);\n        }\n\n        public int HardDelete(Expression<Func<T, bool>> filterExpression)\n        {\n            return base.Delete(filterExpression);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Base/GenericRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Base\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n    using System.Data.Entity;\n    using System.Data.Entity.Infrastructure;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using EntityFramework.BulkInsert.Extensions;\n    using EntityFramework.Extensions;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Contracts;\n\n    public class GenericRepository<T> : IRepository<T>\n        where T : class\n    {\n        public GenericRepository(IOjsDbContext context)\n        {\n            if (context == null)\n            {\n                throw new ArgumentException(\"An instance of DbContext is required to use this repository.\", nameof(context));\n            }\n\n            this.Context = context;\n            this.DbSet = this.Context.Set<T>();\n        }\n\n        protected IDbSet<T> DbSet { get; set; }\n\n        protected IOjsDbContext Context { get; set; }\n\n        public virtual IQueryable<T> All()\n        {\n            return this.DbSet.AsQueryable();\n        }\n\n        public virtual T GetById(int id)\n        {\n            return this.DbSet.Find(id);\n        }\n\n        public virtual void Add(T entity)\n        {\n            DbEntityEntry entry = this.Context.Entry(entity);\n            if (entry.State != EntityState.Detached)\n            {\n                entry.State = EntityState.Added;\n            }\n            else\n            {\n                this.DbSet.Add(entity);\n            }\n        }\n\n        public void Add(IEnumerable<T> entities)\n        {\n            this.Context.DbContext.BulkInsert(entities);\n        }\n\n        public virtual void Update(T entity)\n        {\n            DbEntityEntry entry = this.Context.Entry(entity);\n            if (entry.State == EntityState.Detached)\n            {\n                this.DbSet.Attach(entity);\n            }\n\n            entry.State = EntityState.Modified;\n        }\n\n        public virtual int Update(Expression<Func<T, bool>> filterExpression, Expression<Func<T, T>> updateExpression)\n        {\n            return this.DbSet.Where(filterExpression).Update(updateExpression);\n        }\n\n        public virtual void Delete(T entity)\n        {\n            DbEntityEntry entry = this.Context.Entry(entity);\n            if (entry.State != EntityState.Deleted)\n            {\n                entry.State = EntityState.Deleted;\n            }\n            else\n            {\n                this.DbSet.Attach(entity);\n                this.DbSet.Remove(entity);\n            }\n        }\n\n        public virtual void Delete(int id)\n        {\n            var entity = this.GetById(id);\n\n            if (entity != null)\n            {\n                this.Delete(entity);\n            }\n        }\n\n        public virtual int Delete(Expression<Func<T, bool>> filterExpression)\n        {\n            return this.DbSet.Where(filterExpression).Delete();\n        }\n\n        public virtual void Detach(T entity)\n        {\n            DbEntityEntry entry = this.Context.Entry(entity);\n\n            entry.State = EntityState.Detached;\n        }\n\n        /// <summary>\n        /// This method updates database values by using expression. It works with both anonymous and class objects.\n        /// It is used in one of the following ways:\n        /// 1. .UpdateValues(x => new Type { Id = ..., Property = ..., AnotherProperty = ... })\n        /// 2. .UpdateValues(x => new { Id = ..., Property = ..., AnotherProperty = ... })\n        /// </summary>\n        /// <param name=\"entity\">Expression for the updated entity</param>\n        public virtual void UpdateValues(Expression<Func<T, object>> entity)\n        {\n            // compile the expression to delegate and invoke it\n            object compiledExpression = entity.Compile()(null);\n\n            // cast the result of invokation to T\n            T updatedEntity = compiledExpression is T ? compiledExpression as T : compiledExpression.CastTo<T>();\n\n            // attach the entry if missing in ObjectStateManager\n            var entry = this.Context.Entry(updatedEntity);\n\n            if (entry.State == EntityState.Detached)\n            {\n                try\n                {\n                    this.DbSet.Attach(updatedEntity);\n                }\n                catch\n                {\n                    var key = this.GetPrimaryKey(entry);\n                    entry = this.Context.Entry(this.DbSet.Find(key));\n                    entry.CurrentValues.SetValues(updatedEntity);\n                }\n            }\n\n            // get current database values of the entity\n            var values = entry.GetDatabaseValues();\n            if (values == null)\n            {\n                throw new InvalidOperationException(\"Object does not exists in ObjectStateDictionary. Entity Key|Id should be provided or valid.\");\n            }\n\n            // select the updated members as property names\n            IEnumerable<string> members;\n            if (compiledExpression is T)\n            {\n                members = ((MemberInitExpression)entity.Body).Bindings.Select(b => b.Member.Name);\n            }\n            else\n            {\n                members = ((NewExpression)entity.Body).Members.Select(m => m.Name);\n            }\n\n            // select all not mapped properties and set value\n            typeof(T)\n                .GetProperties()\n                .Where(pr => !pr.GetCustomAttributes(typeof(NotMappedAttribute), true).Any())\n                .ForEach(prop =>\n                        {\n                            if (members.Contains(prop.Name))\n                            {\n                                // if a member is updated set its state to modified\n                                entry.Property(prop.Name).IsModified = true;\n                            }\n                            else\n                            {\n                                // otherwise set the existing database value\n                                var value = values.GetValue<object>(prop.Name);\n                                prop.SetValue(entry.Entity, value);\n                            }\n                        });\n        }\n\n        private int GetPrimaryKey(DbEntityEntry entry)\n        {\n            var myObject = entry.Entity;\n\n            var property = myObject\n                .GetType()\n                .GetProperties()\n                .FirstOrDefault(prop => Attribute.IsDefined(prop, typeof(KeyAttribute)));\n\n            return (int)property.GetValue(myObject, null);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/ContestsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class ContestsRepository : DeletableEntityRepository<Contest>, IContestsRepository\n    {\n        public ContestsRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public IQueryable<Contest> AllActive()\n        {\n            return\n                this.All()\n                    .Where(x => x.StartTime <= DateTime.Now && DateTime.Now <= x.EndTime && x.IsVisible);\n        }\n\n        public IQueryable<Contest> AllFuture()\n        {\n            return this.All().Where(x => x.StartTime > DateTime.Now && x.IsVisible);\n        }\n\n        public IQueryable<Contest> AllPast()\n        {\n            return this.All().Where(x => x.EndTime < DateTime.Now && x.IsVisible);\n        }\n\n        public IQueryable<Contest> AllVisible()\n        {\n            return this.All()\n                .Where(x => x.IsVisible);\n        }\n\n        public IQueryable<Contest> AllVisibleInCategory(int categoryId)\n        {\n            return this.All()\n                .Where(x => x.IsVisible && x.CategoryId == categoryId);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/IContestsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using System.Linq;\n\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface IContestsRepository : IRepository<Contest>, IDeletableEntityRepository<Contest>\n    {\n        IQueryable<Contest> AllActive();\n\n        IQueryable<Contest> AllFuture();\n\n        IQueryable<Contest> AllPast();\n\n        IQueryable<Contest> AllVisible();\n\n        IQueryable<Contest> AllVisibleInCategory(int categoryId);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/IParticipantsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface IParticipantsRepository : IRepository<Participant>\n    {\n        Participant GetWithContest(int contestId, string userId, bool isOfficial);\n\n        bool Any(int contestId, string userId, bool isOfficial);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/ISubmissionsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using System.Linq;\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface ISubmissionsRepository : IDeletableEntityRepository<Submission>\n    {\n        IQueryable<Submission> AllPublic();\n\n        Submission GetSubmissionForProcessing();\n\n        bool HasSubmissionTimeLimitPassedForParticipant(int participantId, int limitBetweenSubmissions);\n\n        IQueryable<Submission> GetLastFiftySubmissions();\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/ITestRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface ITestRepository : IRepository<Test>\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/ITestRunsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface ITestRunsRepository : IRepository<TestRun>\n    {\n        int DeleteBySubmissionId(int submissionId);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/Contracts/IUsersRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories.Contracts\n{\n    using OJS.Data.Contracts;\n    using OJS.Data.Models;\n\n    public interface IUsersRepository : IRepository<UserProfile>\n    {\n        UserProfile GetByUsername(string username);\n\n        UserProfile GetById(string id);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/ParticipantsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System.Data.Entity;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class ParticipantsRepository : GenericRepository<Participant>, IParticipantsRepository\n    {\n        public ParticipantsRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public Participant GetWithContest(int contestId, string userId, bool isOfficial)\n        {\n            return\n                this.All()\n                    .Include(x => x.Contest)\n                    .FirstOrDefault(x => x.ContestId == contestId && x.UserId == userId && x.IsOfficial == isOfficial);\n        }\n\n        public bool Any(int contestId, string userId, bool isOfficial)\n        {\n            return\n                this.All()\n                    .Any(x => x.ContestId == contestId && x.UserId == userId && x.IsOfficial == isOfficial);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/SubmissionsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System;\n    using System.Data.Entity;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class SubmissionsRepository : DeletableEntityRepository<Submission>, ISubmissionsRepository\n    {\n        public SubmissionsRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public IQueryable<Submission> AllPublic()\n        {\n            return this.All()\n                .Where(x =>\n                    ((x.Participant.IsOfficial && x.Problem.Contest.ContestPassword == null) ||\n                     (!x.Participant.IsOfficial && x.Problem.Contest.PracticePassword == null))\n                    && x.Problem.Contest.IsVisible && !x.Problem.Contest.IsDeleted\n                    && x.Problem.ShowResults);\n        }\n\n        public Submission GetSubmissionForProcessing()\n        {\n            var submission =\n                       this.All()\n                           .Where(x => !x.Processed && !x.Processing)\n                           .OrderBy(x => x.Id)\n                           .Include(x => x.Problem)\n                           .Include(x => x.Problem.Tests)\n                           .Include(x => x.Problem.Checker)\n                           .Include(x => x.SubmissionType)\n                           .FirstOrDefault();\n\n            return submission;\n        }\n\n        public bool HasSubmissionTimeLimitPassedForParticipant(int participantId, int limitBetweenSubmissions)\n        {\n            var lastSubmission =\n                this.All()\n                    .Where(x => x.ParticipantId == participantId)\n                    .OrderByDescending(x => x.CreatedOn)\n                    .Select(x => new { x.Id, x.CreatedOn })\n                    .FirstOrDefault();\n            if (lastSubmission != null)\n            {\n                // check if the submission was sent after the submission time limit has passed\n                var latestSubmissionTime = lastSubmission.CreatedOn;\n                var differenceBetweenSubmissions = DateTime.Now - latestSubmissionTime;\n                if (differenceBetweenSubmissions.TotalSeconds < limitBetweenSubmissions)\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        public IQueryable<Submission> GetLastFiftySubmissions()\n        {\n            // TODO: add language type\n            var submissions = this.AllPublic()\n                .OrderByDescending(x => x.CreatedOn)\n                .Take(50);\n\n            return submissions;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/TestRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System.Data.Entity;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class TestRepository : GenericRepository<Test>, ITestRepository\n    {\n        public TestRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public override void Delete(int id)\n        {\n            // TODO: Evaluate if this is the best solution\n            var testToDelete = this.Context.DbContext.ChangeTracker.Entries<Test>().FirstOrDefault(t => t.Property(pr => pr.Id).CurrentValue == id);\n\n            if (testToDelete != null)\n            {\n                var test = testToDelete.Entity;\n                this.Context.Entry(test).State = EntityState.Deleted;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/TestRunsRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System.Data.Entity;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class TestRunsRepository : GenericRepository<TestRun>, ITestRunsRepository\n    {\n        public TestRunsRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public int DeleteBySubmissionId(int submissionId)\n        {\n            var testRuns = this.All().Where(x => x.SubmissionId == submissionId).ToList();\n            foreach (var testRun in testRuns)\n            {\n                this.Delete(testRun);\n            }\n\n            return testRuns.Count;\n        }\n\n        public override void Delete(int id)\n        {\n            // TODO: evaluate if this is the best solution\n            var testRunToDelete = this.Context.DbContext.ChangeTracker.Entries<TestRun>().FirstOrDefault(t => t.Property(pr => pr.Id).CurrentValue == id);\n\n            if (testRunToDelete != null)\n            {\n                var testRun = testRunToDelete.Entity;\n                this.Context.Entry(testRun).State = EntityState.Deleted;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/Repositories/UsersRepository.cs",
    "content": "﻿namespace OJS.Data.Repositories\n{\n    using System;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Data.Repositories.Base;\n    using OJS.Data.Repositories.Contracts;\n\n    public class UsersRepository : GenericRepository<UserProfile>, IUsersRepository\n    {\n        public UsersRepository(IOjsDbContext context)\n            : base(context)\n        {\n        }\n\n        public UserProfile GetByUsername(string username)\n        {\n            return this.All().FirstOrDefault(x => x.UserName == username);\n        }\n\n        public UserProfile GetById(string id)\n        {\n            return this.All().FirstOrDefault(x => x.Id == id);\n        }\n\n        public override void Delete(UserProfile entity)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework.BulkInsert-ef6\" version=\"6.0.2.8\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework.Extended\" version=\"6.1.0.168\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework.MappingAPI\" version=\"6.1.0.9\" targetFramework=\"net45\" />\n  <package id=\"Glimpse\" version=\"1.8.6\" targetFramework=\"net45\" />\n  <package id=\"Glimpse.Ado\" version=\"1.7.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"v11.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/AuditInfo.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    public abstract class AuditInfo : IAuditInfo\n    {\n        public DateTime CreatedOn { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether or not the CreatedOn property should be automatically set.\n        /// </summary>\n        [NotMapped]\n        public bool PreserveCreatedOn { get; set; }\n\n        public DateTime? ModifiedOn { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/CodeFirstConventions/IsUnicodeAttributeConvention.cs",
    "content": "﻿namespace OJS.Data.Contracts.CodeFirstConventions\n{\n    using System.Data.Entity.ModelConfiguration.Configuration;\n    using System.Data.Entity.ModelConfiguration.Conventions;\n\n    using OJS.Data.Contracts.DataAnnotations;\n\n    public class IsUnicodeAttributeConvention : PrimitivePropertyAttributeConfigurationConvention<IsUnicodeAttribute>\n    {\n        public override void Apply(ConventionPrimitivePropertyConfiguration configuration, IsUnicodeAttribute attribute)\n        {\n            configuration.IsUnicode(attribute.IsUnicode);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/DataAnnotations/IsUnicodeAttribute.cs",
    "content": "﻿namespace OJS.Data.Contracts.DataAnnotations\n{\n    using System;\n\n    public class IsUnicodeAttribute : Attribute\n    {\n        public IsUnicodeAttribute(bool isUnicode)\n        {\n            this.IsUnicode = isUnicode;\n        }\n\n        public bool IsUnicode { get; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/DeletableEntity.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n\n    public abstract class DeletableEntity : AuditInfo, IDeletableEntity\n    {\n        [Display(Name = \"Изтрит?\")]\n        [Editable(false)]\n        public bool IsDeleted { get; set; }\n\n        [Display(Name = \"Дата на изтриване\")]\n        [Editable(false)]\n        [DataType(DataType.DateTime)]\n        public DateTime? DeletedOn { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/IAuditInfo.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n\n    public interface IAuditInfo\n    {\n        DateTime CreatedOn { get; set; }\n\n        bool PreserveCreatedOn { get; set; }\n\n        DateTime? ModifiedOn { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/IDeletableEntity.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n\n    public interface IDeletableEntity\n    {\n        bool IsDeleted { get; set; }\n\n        DateTime? DeletedOn { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/IDeletableEntityRepository.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    public interface IDeletableEntityRepository<T> : IRepository<T>\n        where T : class\n    {\n        IQueryable<T> AllWithDeleted();\n\n        void HardDelete(T entity);\n\n        int HardDelete(Expression<Func<T, bool>> filterExpression);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/IOrderable.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    public interface IOrderable\n    {\n        int OrderBy { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/IRepository.cs",
    "content": "﻿namespace OJS.Data.Contracts\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    public interface IRepository<T>\n        where T : class\n    {\n        IQueryable<T> All();\n\n        T GetById(int id);\n\n        void Add(T entity);\n\n        // Use only in transaction scope\n        void Add(IEnumerable<T> entities);\n\n        void Update(T entity);\n\n        int Update(Expression<Func<T, bool>> filterExpression, Expression<Func<T, T>> updateExpression);\n\n        void Delete(T entity);\n\n        void Delete(int id);\n\n        int Delete(Expression<Func<T, bool>> filterExpression);\n\n        void Detach(T entity);\n\n        void UpdateValues(Expression<Func<T, object>> entity);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/OJS.Data.Contracts.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{8C4BF453-24EF-46F3-B947-31505FB905DE}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Data.Contracts</RootNamespace>\n    <AssemblyName>OJS.Data.Contracts</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AuditInfo.cs\" />\n    <Compile Include=\"CodeFirstConventions\\IsUnicodeAttributeConvention.cs\" />\n    <Compile Include=\"DataAnnotations\\IsUnicodeAttribute.cs\" />\n    <Compile Include=\"DeletableEntity.cs\" />\n    <Compile Include=\"IAuditInfo.cs\" />\n    <Compile Include=\"IDeletableEntity.cs\" />\n    <Compile Include=\"IDeletableEntityRepository.cs\" />\n    <Compile Include=\"IOrderable.cs\" />\n    <Compile Include=\"IRepository.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Data.Contracts\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Data.Contracts\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7634943f-a60a-4a69-a617-9ab3c887a824\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Contracts/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/AccessLog.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class AccessLog : AuditInfo\n    {\n        [Key]\n        public long Id { get; set; }\n\n        public string UserId { get; set; }\n\n        public virtual UserProfile User { get; set; }\n\n        public string IpAddress { get; set; }\n\n        public string RequestType { get; set; }\n\n        public string Url { get; set; }\n\n        public string PostParams { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"v11.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Checker.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n    using OJS.Data.Contracts;\n\n    public class Checker : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        [Required]\n        [MinLength(GlobalConstants.CheckerNameMinLength)]\n        [MaxLength(GlobalConstants.CheckerNameMaxLength)]\n        public string Name { get; set; }\n\n        public string Description { get; set; }\n\n        public string DllFile { get; set; }\n\n        public string ClassName { get; set; }\n\n        public string Parameter { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Contest.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common;\n    using OJS.Data.Contracts;\n\n    public class Contest : DeletableEntity, IValidatableObject, IOrderable\n    {\n        private ICollection<ContestQuestion> questions;\n        private ICollection<Problem> problems;\n        private ICollection<Participant> participants;\n        private ICollection<SubmissionType> submissionTypes;\n\n        public Contest()\n        {\n            this.questions = new HashSet<ContestQuestion>();\n            this.problems = new HashSet<Problem>();\n            this.participants = new HashSet<Participant>();\n            this.submissionTypes = new HashSet<SubmissionType>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public int? OldId { get; set; }\n\n        [MaxLength(GlobalConstants.ContestNameMaxLength)]\n        [MinLength(GlobalConstants.ContestNameMinLength)]\n        public string Name { get; set; }\n\n        [Required]\n        public bool IsVisible { get; set; }\n\n        public int? CategoryId { get; set; }\n\n        public virtual ContestCategory Category { get; set; }\n\n        /// <remarks>\n        /// If StartTime is null the contest cannot be competed.\n        /// </remarks>\n        public DateTime? StartTime { get; set; }\n\n        /// <remarks>\n        /// If EndTime is null the contest can be competed forever.\n        /// </remarks>\n        public DateTime? EndTime { get; set; }\n\n        /// <remarks>\n        /// If ContestPassword is null the contest can be competed by everyone without require a password.\n        /// If the ContestPassword is not null the contest participant should provide a valid password.\n        /// </remarks>\n        [MaxLength(GlobalConstants.ContestPasswordMaxLength)]\n        public string ContestPassword { get; set; }\n\n        /// <remarks>\n        /// If PracticePassword is null the contest can be practiced by everyone without require a password.\n        /// If the PracticePassword is not null the practice participant should provide a valid password.\n        /// </remarks>\n        [MaxLength(GlobalConstants.ContestPasswordMaxLength)]\n        public string PracticePassword { get; set; }\n\n        /// <remarks>\n        /// If PracticeStartTime is null the contest cannot be practiced.\n        /// </remarks>\n        public DateTime? PracticeStartTime { get; set; }\n\n        /// <remarks>\n        /// If PracticeEndTime is null the contest can be practiced forever.\n        /// </remarks>\n        public DateTime? PracticeEndTime { get; set; }\n\n        [DefaultValue(0)]\n        public int LimitBetweenSubmissions { get; set; }\n\n        [DefaultValue(0)]\n        public int OrderBy { get; set; }\n\n        public string Description { get; set; }\n\n        public virtual ICollection<ContestQuestion> Questions\n        {\n            get { return this.questions; }\n            set { this.questions = value; }\n        }\n\n        public virtual ICollection<Problem> Problems\n        {\n            get { return this.problems; }\n            set { this.problems = value; }\n        }\n\n        public virtual ICollection<Participant> Participants\n        {\n            get { return this.participants; }\n            set { this.participants = value; }\n        }\n\n        public virtual ICollection<SubmissionType> SubmissionTypes\n        {\n            get { return this.submissionTypes; }\n            set { this.submissionTypes = value; }\n        }\n\n        [NotMapped]\n        public bool CanBeCompeted\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.StartTime.HasValue)\n                {\n                    // Cannot be competed\n                    return false;\n                }\n\n                if (!this.EndTime.HasValue)\n                {\n                    // Compete forever\n                    return this.StartTime <= DateTime.Now;\n                }\n\n                return this.StartTime <= DateTime.Now && DateTime.Now <= this.EndTime;\n            }\n        }\n\n        [NotMapped]\n        public bool CanBePracticed\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.PracticeStartTime.HasValue)\n                {\n                    // Cannot be practiced\n                    return false;\n                }\n\n                if (!this.PracticeEndTime.HasValue)\n                {\n                    // Practice forever\n                    return this.PracticeStartTime <= DateTime.Now;\n                }\n\n                return this.PracticeStartTime <= DateTime.Now && DateTime.Now <= this.PracticeEndTime;\n            }\n        }\n\n        [NotMapped]\n        public bool ResultsArePubliclyVisible\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.StartTime.HasValue)\n                {\n                    // Cannot be competed\n                    return false;\n                }\n\n                return this.EndTime.HasValue && this.EndTime.Value <= DateTime.Now;\n            }\n        }\n\n        [NotMapped]\n        public bool HasContestPassword => this.ContestPassword != null;\n\n        [NotMapped]\n        public bool HasPracticePassword => this.PracticePassword != null;\n\n        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n        {\n            var validationResults = new List<ValidationResult>();\n\n            var contest = validationContext.ObjectInstance as Contest;\n            if (contest == null)\n            {\n                return validationResults;\n            }\n\n            if (contest.StartTime.HasValue && contest.EndTime.HasValue && contest.StartTime.Value > contest.EndTime.Value)\n            {\n                validationResults.Add(\n                    new ValidationResult(\"StartTime can not be after EndTime\", new[] { \"StartTime\", \"EndTime\" }));\n            }\n\n            return validationResults;\n        }\n\n        public override string ToString()\n        {\n            return $\"#{this.Id} {this.Name}\";\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/ContestCategory.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common;\n    using OJS.Data.Contracts;\n\n    public class ContestCategory : DeletableEntity, IOrderable\n    {\n        private ICollection<ContestCategory> children;\n\n        private ICollection<Contest> contests;\n\n        public ContestCategory()\n        {\n            this.children = new HashSet<ContestCategory>();\n            this.contests = new HashSet<Contest>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        [Required]\n        [MaxLength(GlobalConstants.ContestCategoryNameMaxLength)]\n        [MinLength(GlobalConstants.ContestCategoryNameMinLength)]\n        public string Name { get; set; }\n\n        [DefaultValue(0)]\n        public int OrderBy { get; set; }\n\n        [ForeignKey(\"Parent\")]\n        public int? ParentId { get; set; }\n\n        public virtual ContestCategory Parent { get; set; }\n\n        [InverseProperty(\"Parent\")]\n        public virtual ICollection<ContestCategory> Children\n        {\n            get { return this.children; }\n            set { this.children = value; }\n        }\n\n        public virtual ICollection<Contest> Contests\n        {\n            get { return this.contests; }\n            set { this.contests = value; }\n        }\n\n        public bool IsVisible { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/ContestQuestion.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data.Contracts;\n\n    /// <summary>\n    /// Represents question that is asked for every participant (real or practice) in the specified contest.\n    /// </summary>\n    public class ContestQuestion : DeletableEntity\n    {\n        private ICollection<ContestQuestionAnswer> answers;\n        private ICollection<ParticipantAnswer> participantAnswers;\n\n        public ContestQuestion()\n        {\n            this.answers = new HashSet<ContestQuestionAnswer>();\n            this.participantAnswers = new HashSet<ParticipantAnswer>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        [ForeignKey(\"Contest\")]\n        public int ContestId { get; set; }\n\n        public virtual Contest Contest { get; set; }\n\n        [MaxLength(GlobalConstants.ContestQuestionMaxLength)]\n        [MinLength(GlobalConstants.ContestQuestionMinLength)]\n        public string Text { get; set; }\n\n        [DefaultValue(true)]\n        public bool AskOfficialParticipants { get; set; }\n\n        [DefaultValue(true)]\n        public bool AskPracticeParticipants { get; set; }\n\n        public ContestQuestionType Type { get; set; }\n\n        public virtual ICollection<ContestQuestionAnswer> Answers\n        {\n            get { return this.answers; }\n            set { this.answers = value; }\n        }\n\n        public virtual ICollection<ParticipantAnswer> ParticipantAnswers\n        {\n            get { return this.participantAnswers; }\n            set { this.participantAnswers = value; }\n        }\n\n        public string RegularExpressionValidation { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/ContestQuestionAnswer.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n    using OJS.Data.Contracts;\n\n    public class ContestQuestionAnswer : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public int QuestionId { get; set; }\n\n        public virtual ContestQuestion Question { get; set; }\n\n        [MaxLength(GlobalConstants.ContestQuestionAnswerMaxLength)]\n        [MinLength(GlobalConstants.ContestQuestionAnswerMinLength)]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Event.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class Event : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        [Required(AllowEmptyStrings = false)]\n        public string Title { get; set; }\n\n        public string Description { get; set; }\n\n        public DateTime StartTime { get; set; }\n\n        /// <remarks>\n        /// If EndTime is null, the event happens (and should be displayed) only on the StartTime\n        /// </remarks>\n        public DateTime? EndTime { get; set; }\n\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/FeedbackReport.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class FeedbackReport : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        [EmailAddress]\n        public string Email { get; set; }\n\n        public string Content { get; set; }\n\n        public virtual UserProfile User { get; set; }\n\n        public bool IsFixed { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/News.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class News : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public string Title { get; set; }\n\n        public string Author { get; set; }\n\n        public string Source { get; set; }\n\n        public string Content { get; set; }\n\n        public bool IsVisible { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/OJS.Data.Models.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{341CA732-D483-4487-923E-27ED2A6E9A4F}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Data.Models</RootNamespace>\n    <AssemblyName>OJS.Data.Models</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Checker.cs\" />\n    <Compile Include=\"Event.cs\" />\n    <Compile Include=\"ProblemResource.cs\" />\n    <Compile Include=\"Setting.cs\" />\n    <Compile Include=\"SourceCode.cs\" />\n    <Compile Include=\"SubmissionType.cs\" />\n    <Compile Include=\"Contest.cs\" />\n    <Compile Include=\"ContestCategory.cs\" />\n    <Compile Include=\"FeedbackReport.cs\" />\n    <Compile Include=\"Participant.cs\" />\n    <Compile Include=\"ContestQuestion.cs\" />\n    <Compile Include=\"ContestQuestionAnswer.cs\" />\n    <Compile Include=\"News.cs\" />\n    <Compile Include=\"ParticipantAnswer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Problem.cs\" />\n    <Compile Include=\"Submission.cs\" />\n    <Compile Include=\"Tag.cs\" />\n    <Compile Include=\"Test.cs\" />\n    <Compile Include=\"TestRun.cs\" />\n    <Compile Include=\"AccessLog.cs\" />\n    <Compile Include=\"UserProfile.cs\" />\n    <Compile Include=\"UserSettings.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\n      <Name>OJS.Data.Contracts</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Participant.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class Participant : AuditInfo\n    {\n        private ICollection<Submission> submissions;\n        private ICollection<ParticipantAnswer> answers;\n\n        public Participant()\n        {\n            this.submissions = new HashSet<Submission>();\n            this.answers = new HashSet<ParticipantAnswer>();\n        }\n\n        public Participant(int contestId, string userId, bool isOfficial)\n            : this()\n        {\n            this.ContestId = contestId;\n            this.UserId = userId;\n            this.IsOfficial = isOfficial;\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public int OldId { get; set; }\n\n        public int ContestId { get; set; }\n\n        public string UserId { get; set; }\n\n        public bool IsOfficial { get; set; }\n\n        [Required]\n        public virtual Contest Contest { get; set; }\n\n        public virtual UserProfile User { get; set; }\n\n        public virtual ICollection<Submission> Submissions\n        {\n            get { return this.submissions; }\n            set { this.submissions = value; }\n        }\n\n        public virtual ICollection<ParticipantAnswer> Answers\n        {\n            get { return this.answers; }\n            set { this.answers = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/ParticipantAnswer.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    public class ParticipantAnswer\n    {\n        [Key]\n        [Column(Order = 1)]\n        public int ParticipantId { get; set; }\n\n        [Required]\n        public virtual Participant Participant { get; set; }\n\n        [Key]\n        [Column(Order = 2)]\n        public int ContestQuestionId { get; set; }\n\n        [Required]\n        public virtual ContestQuestion ContestQuestion { get; set; }\n\n        public string Answer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Problem.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common;\n    using OJS.Data.Contracts;\n\n    public class Problem : DeletableEntity, IOrderable\n    {\n        private ICollection<Test> tests;\n        private ICollection<ProblemResource> resources;\n        private ICollection<Submission> submissions;\n        private ICollection<Tag> tags;\n\n        public Problem()\n        {\n            this.tests = new HashSet<Test>();\n            this.resources = new HashSet<ProblemResource>();\n            this.submissions = new HashSet<Submission>();\n            this.tags = new HashSet<Tag>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public int? OldId { get; set; }\n\n        public int ContestId { get; set; }\n\n        public virtual Contest Contest { get; set; }\n\n        [Required]\n        [MaxLength(GlobalConstants.ProblemNameMaxLength)]\n        public string Name { get; set; }\n\n        public short MaximumPoints { get; set; }\n\n        /// <summary>\n        /// Gets or sets time limit for the problem. Measured in milliseconds.\n        /// </summary>\n        public int TimeLimit { get; set; }\n\n        /// <summary>\n        /// Gets or sets memory limit for the problem. Measured in bytes.\n        /// </summary>\n        public int MemoryLimit { get; set; }\n\n        /// <summary>\n        /// Gets or sets file size limit (measured in bytes).\n        /// </summary>\n        public int? SourceCodeSizeLimit { get; set; }\n\n        [ForeignKey(\"Checker\")]\n        public int? CheckerId { get; set; }\n\n        public virtual Checker Checker { get; set; }\n\n        public int OrderBy { get; set; }\n\n        /// <summary>\n        /// Gets or sets predefined skeleton for the task\n        /// </summary>\n        public byte[] SolutionSkeleton { get; set; }\n\n        [DefaultValue(true)]\n        public bool ShowResults { get; set; }\n\n        [DefaultValue(false)]\n        public bool ShowDetailedFeedback { get; set; }\n\n        public virtual ICollection<Test> Tests\n        {\n            get { return this.tests; }\n            set { this.tests = value; }\n        }\n\n        public virtual ICollection<ProblemResource> Resources\n        {\n            get { return this.resources; }\n            set { this.resources = value; }\n        }\n\n        public virtual ICollection<Submission> Submissions\n        {\n            get { return this.submissions; }\n            set { this.submissions = value; }\n        }\n\n        public virtual ICollection<Tag> Tags\n        {\n            get { return this.tags; }\n            set { this.tags = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/ProblemResource.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data.Contracts;\n\n    public class ProblemResource : DeletableEntity, IOrderable\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public int ProblemId { get; set; }\n\n        public Problem Problem { get; set; }\n\n        [Required]\n        [MinLength(GlobalConstants.ProblemResourceNameMinLength)]\n        [MaxLength(GlobalConstants.ProblemResourceNameMaxLength)]\n        public string Name { get; set; }\n\n        public ProblemResourceType Type { get; set; }\n\n        public byte[] File { get; set; }\n\n        [MaxLength(GlobalConstants.FileExtentionMaxLength)]\n        public string FileExtension { get; set; }\n\n        public string Link { get; set; }\n\n        public int OrderBy { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Data.Models\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Data.Models\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"4faa99d9-bcfa-43b3-aeed-71cee6be5076\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Setting.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    public class Setting\n    {\n        [Key]\n        public string Name { get; set; }\n\n        public string Value { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/SourceCode.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Contracts;\n\n    public class SourceCode : DeletableEntity\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public string AuthorId { get; set; }\n\n        public virtual UserProfile Author { get; set; }\n\n        public int? ProblemId { get; set; }\n\n        public virtual Problem Problem { get; set; }\n\n        public byte[] Content { get; set; }\n\n        [NotMapped]\n        public string ContentAsString\n        {\n            get\n            {\n                return this.Content.Decompress();\n            }\n\n            set\n            {\n                this.Content = value.Compress();\n            }\n        }\n\n        public bool IsPublic { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Submission.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n    using System.Linq;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data.Contracts;\n\n    public class Submission : DeletableEntity\n    {\n        private ICollection<TestRun> testRuns;\n\n        public Submission()\n        {\n            this.testRuns = new HashSet<TestRun>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public int? ParticipantId { get; set; }\n\n        public virtual Participant Participant { get; set; }\n\n        public int? ProblemId { get; set; }\n\n        public virtual Problem Problem { get; set; }\n\n        public int? SubmissionTypeId { get; set; }\n\n        public virtual SubmissionType SubmissionType { get; set; }\n\n        /// <remarks>\n        /// Using byte[] (compressed with deflate) to save database space for text inputs. For other file types the actual file content is saved in the field.\n        /// </remarks>\n        public byte[] Content { get; set; }\n\n        /// <remarks>\n        /// If the value of FileExtension is null, then compressed text file is written in Content\n        /// </remarks>\n        public string FileExtension { get; set; }\n\n        public byte[] SolutionSkeleton { get; set; }\n\n        [StringLength(GlobalConstants.IpAdressMaxLength)]\n        [Column(TypeName = \"varchar\")]\n        public string IpAddress { get; set; }\n\n        [NotMapped]\n        public bool IsBinaryFile => !string.IsNullOrWhiteSpace(this.FileExtension);\n\n        [NotMapped]\n        public string ContentAsString\n        {\n            get\n            {\n                if (this.IsBinaryFile)\n                {\n                    throw new InvalidOperationException(GlobalConstants.ContentAsStringErrorMessage);\n                }\n\n                return this.Content.Decompress();\n            }\n\n            set\n            {\n                if (this.IsBinaryFile)\n                {\n                    throw new InvalidOperationException(GlobalConstants.ContentAsStringErrorMessage);\n                }\n\n                this.Content = value.Compress();\n            }\n        }\n\n        public bool IsCompiledSuccessfully { get; set; }\n\n        public string CompilerComment { get; set; }\n\n        public virtual ICollection<TestRun> TestRuns\n        {\n            get { return this.testRuns; }\n            set { this.testRuns = value; }\n        }\n\n        public bool Processed { get; set; }\n\n        public bool Processing { get; set; }\n\n        public string ProcessingComment { get; set; }\n\n        /// <remarks>\n        /// Cache field for submissions points (to speed-up some of the database queries)\n        /// </remarks>\n        public int Points { get; set; }\n\n        [NotMapped]\n        public int CorrectTestRunsCount\n        {\n            get\n            {\n                return this.TestRuns.Count(x => x.ResultType == TestRunResultType.CorrectAnswer);\n            }\n        }\n\n        [NotMapped]\n        public int CorrectTestRunsWithoutTrialTestsCount\n        {\n            get\n            {\n                return this.TestRuns.Count(x => x.ResultType == TestRunResultType.CorrectAnswer && !x.Test.IsTrialTest);\n            }\n        }\n\n        [NotMapped]\n        public int TestsWithoutTrialTestsCount\n        {\n            get\n            {\n                return this.Problem.Tests.Count(x => !x.IsTrialTest);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/SubmissionType.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n    using System.Linq;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n\n    public class SubmissionType\n    {\n        private ICollection<Contest> contests;\n\n        public SubmissionType()\n        {\n            this.contests = new HashSet<Contest>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        [Required]\n        [MaxLength(GlobalConstants.SubmissionTypeNameMaxLength)]\n        [MinLength(GlobalConstants.SubmissionTypeNameMinLength)]\n        public string Name { get; set; }\n\n        [DefaultValue(false)]\n        public bool IsSelectedByDefault { get; set; }\n\n        public ExecutionStrategyType ExecutionStrategyType { get; set; }\n\n        public CompilerType CompilerType { get; set; }\n\n        public string AdditionalCompilerArguments { get; set; }\n\n        public string Description { get; set; }\n\n        [DefaultValue(false)]\n        public bool AllowBinaryFilesUpload { get; set; }\n\n        /// <summary>\n        /// Gets or sets comma-separated list of allowed file extensions.\n        /// If the value is null or whitespace then only text values are allowed. If any extension is specified then no text input is allowed.\n        /// </summary>\n        public string AllowedFileExtensions { get; set; }\n\n        [NotMapped]\n        public IEnumerable<string> AllowedFileExtensionsList\n        {\n            get\n            {\n                var list =\n                    this.AllowedFileExtensions.Split(new[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries)\n                        .Select(x => x.Trim());\n                return list.ToArray();\n            }\n        }\n\n        public virtual ICollection<Contest> Contests\n        {\n            get { return this.contests; }\n            set { this.contests = value; }\n        }\n\n        [NotMapped]\n        public string FileNameExtension\n        {\n            get\n            {\n                string extension = (this.ExecutionStrategyType.GetFileExtension()\n                                    ?? this.CompilerType.GetFileExtension()) ?? string.Empty;\n\n                return extension;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Tag.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Data.Contracts;\n\n    public class Tag : DeletableEntity\n    {\n        private ICollection<Problem> problems;\n\n        public Tag()\n        {\n            this.problems = new HashSet<Problem>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public string Description { get; set; }\n\n        public string ForegroundColor { get; set; }\n\n        public string BackgroundColor { get; set; }\n\n        public virtual ICollection<Problem> Problems\n        {\n            get { return this.problems; }\n            set { this.problems = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/Test.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Contracts;\n\n    public class Test : IOrderable\n    {\n        private ICollection<TestRun> testRuns;\n\n        public Test()\n        {\n            this.testRuns = new HashSet<TestRun>();\n        }\n\n        [Key]\n        public int Id { get; set; }\n\n        public int ProblemId { get; set; }\n\n        public virtual Problem Problem { get; set; }\n\n        /// <remarks>\n        /// Using byte[] (compressed with zip) to save database space.\n        /// </remarks>\n        public byte[] InputData { get; set; }\n\n        [NotMapped]\n        public string InputDataAsString\n        {\n            get\n            {\n                return this.InputData.Decompress();\n            }\n\n            set\n            {\n                this.InputData = value.Compress();\n            }\n        }\n\n        /// <remarks>\n        /// Using byte[] (compressed with zip) to save database space.\n        /// </remarks>\n        public byte[] OutputData { get; set; }\n\n        [NotMapped]\n        public string OutputDataAsString\n        {\n            get\n            {\n                return this.OutputData.Decompress();\n            }\n\n            set\n            {\n                this.OutputData = value.Compress();\n            }\n        }\n\n        public bool IsTrialTest { get; set; }\n\n        public int OrderBy { get; set; }\n\n        public virtual ICollection<TestRun> TestRuns\n        {\n            get { return this.testRuns; }\n            set { this.testRuns = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/TestRun.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common.Models;\n\n    public class TestRun\n    {\n        [Key]\n        public int Id { get; set; }\n\n        public int SubmissionId { get; set; }\n\n        public Submission Submission { get; set; }\n\n        public int TestId { get; set; }\n\n        public Test Test { get; set; }\n\n        public int TimeUsed { get; set; }\n\n        public long MemoryUsed { get; set; }\n\n        public TestRunResultType ResultType { get; set; }\n\n        public string ExecutionComment { get; set; }\n\n        public string CheckerComment { get; set; }\n\n        public string ExpectedOutputFragment { get; set; }\n\n        public string UserOutputFragment { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/UserProfile.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Data.Contracts;\n    using OJS.Data.Contracts.DataAnnotations;\n\n    public class UserProfile : IdentityUser, IDeletableEntity, IAuditInfo\n    {\n        public UserProfile()\n            : this(string.Empty, string.Empty)\n        {\n        }\n\n        public UserProfile(string userName, string email)\n            : base(userName)\n        {\n            this.Email = email;\n            this.UserSettings = new UserSettings();\n            this.CreatedOn = DateTime.Now;\n        }\n\n        [Required]\n        [MaxLength(80)]\n        [IsUnicode(false)]\n        [DataType(DataType.EmailAddress)]\n        public string Email { get; set; }\n\n        /// <remarks>\n        /// This property is true when the user comes from the old system and is not preregistered in the new system.\n        /// </remarks>\n        [DefaultValue(false)]\n        public bool IsGhostUser { get; set; }\n\n        public int? OldId { get; set; }\n\n        public UserSettings UserSettings { get; set; }\n\n        public Guid? ForgottenPasswordToken { get; set; }\n\n        public bool IsDeleted { get; set; }\n\n        [DataType(DataType.DateTime)]\n        public DateTime? DeletedOn { get; set; }\n\n        [DataType(DataType.DateTime)]\n        public DateTime CreatedOn { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether or not the CreatedOn property should be automatically set.\n        /// </summary>\n        [NotMapped]\n        public bool PreserveCreatedOn { get; set; }\n\n        [DataType(DataType.DateTime)]\n        public DateTime? ModifiedOn { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/UserSettings.cs",
    "content": "﻿namespace OJS.Data.Models\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.ComponentModel.DataAnnotations.Schema;\n\n    using OJS.Common;\n\n    [ComplexType]\n    public class UserSettings\n    {\n        public UserSettings()\n        {\n            this.DateOfBirth = null;\n        }\n\n        [Column(\"FirstName\")]\n        [MaxLength(GlobalConstants.FirstNameMaxLength)]\n        public string FirstName { get; set; }\n\n        [Column(\"LastName\")]\n        [MaxLength(GlobalConstants.LastNameMaxLength)]\n        public string LastName { get; set; }\n\n        [Column(\"City\")]\n        [MaxLength(GlobalConstants.CityNameMaxLength)]\n        public string City { get; set; }\n\n        [Column(\"EducationalInstitution\")]\n        [MaxLength(GlobalConstants.EducationalInstitutionMaxLength)]\n        public string EducationalInstitution { get; set; }\n\n        [Column(\"FacultyNumber\")]\n        [MaxLength(GlobalConstants.FacultyNumberMaxLength)]\n        public string FacultyNumber { get; set; }\n\n        [Column(\"DateOfBirth\")]\n        [DataType(DataType.Date)]\n        //// TODO: [Column(TypeName = \"Date\")] temporally disabled because of SQL Compact database not having \"date\" type\n        public DateTime? DateOfBirth { get; set; }\n\n        [Column(\"Company\")]\n        [MaxLength(GlobalConstants.CompanyNameMaxLength)]\n        public string Company { get; set; }\n\n        [Column(\"JobTitle\")]\n        [MaxLength(GlobalConstants.JobTitleMaxLenth)]\n        public string JobTitle { get; set; }\n\n        [NotMapped]\n        public byte? Age => Calculator.Age(this.DateOfBirth);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Data/OJS.Data.Models/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/External Libraries/Kendo.Mvc.README",
    "content": "This is Kendo UI Trial unified package, which contains all Kendo UI products and is not bound to any of the commercial Kendo UI offerings.\nIt includes trial versions of the Kendo UI server wrappers, which are available in the individual commercial packages as follows:\n \n.         Kendo UI Complete for ASP.NET MVC\n.         Kendo UI Complete for JSP\n.         Telerik DevCraft Complete or Ultimate Collections\n\n"
  },
  {
    "path": "Open Judge System/External Libraries/Kendo.Mvc.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>Kendo.Mvc</name>\n    </assembly>\n    <members>\n        <member name=\"M:Kendo.Mvc.Extensions.HttpRequestBaseExtensions.ApplicationRoot(System.Web.HttpRequestBase)\">\n            <summary>\n            Get the Application root path.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.HttpRequestBaseExtensions.CanCompress(System.Web.HttpRequestBase)\">\n            <summary>\n            Determines whether this instance can compress the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns>\n            \t<c>true</c> if this instance can compress the specified instance; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.DynamicClass.ToString\">\n            <exclude/>\n            <excludeToc/>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.DynamicProperty.#ctor(System.String,System.Type)\">\n            <exclude/>\n            <excludeToc/>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.DynamicProperty.Name\">\n            <exclude/>\n            <excludeToc/>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.DynamicProperty.Type\">\n            <exclude/>\n            <excludeToc/>\n        </member>\n        <member name=\"T:Kendo.Mvc.Resources.Messages\">\n            <summary>\n              A strongly-typed resource class, for looking up localized strings, etc.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.ResourceManager\">\n            <summary>\n              Returns the cached ResourceManager instance used by this class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Culture\">\n            <summary>\n              Overrides the current thread's CurrentUICulture property for all\n              resource lookups using this strongly typed resource class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_AddColumnLeft\">\n            <summary>\n              Looks up a localized string similar to Add column on the left.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_AddColumnRight\">\n            <summary>\n              Looks up a localized string similar to Add column on the right.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_AddRowAbove\">\n            <summary>\n              Looks up a localized string similar to Add row above.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_AddRowBelow\">\n            <summary>\n              Looks up a localized string similar to Add row below.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_BackColor\">\n            <summary>\n              Looks up a localized string similar to Background color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Bold\">\n            <summary>\n              Looks up a localized string similar to Bold.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_CreateLink\">\n            <summary>\n              Looks up a localized string similar to Insert hyperlink.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_CreateTable\">\n            <summary>\n              Looks up a localized string similar to Create table.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DeleteColumn\">\n            <summary>\n              Looks up a localized string similar to Delete column.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DeleteFile\">\n            <summary>\n              Looks up a localized string similar to Are you sure you want to delete &quot;{0}&quot;?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DeleteRow\">\n            <summary>\n              Looks up a localized string similar to Delete row.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DialogButtonSeparator\">\n            <summary>\n              Looks up a localized string similar to or.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DialogCancel\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DialogInsert\">\n            <summary>\n              Looks up a localized string similar to Insert.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DirectoryNotFound\">\n            <summary>\n              Looks up a localized string similar to A directory with this name was not found..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_DropFilesHere\">\n            <summary>\n              Looks up a localized string similar to drop files here to upload.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_EmptyFolder\">\n            <summary>\n              Looks up a localized string similar to Empty Folder.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_FontName\">\n            <summary>\n              Looks up a localized string similar to Select font family.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_FontNameInherit\">\n            <summary>\n              Looks up a localized string similar to (inherited font).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_FontSize\">\n            <summary>\n              Looks up a localized string similar to Select font size.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_FontSizeInherit\">\n            <summary>\n              Looks up a localized string similar to (inherited size).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_ForeColor\">\n            <summary>\n              Looks up a localized string similar to Color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_FormatBlock\">\n            <summary>\n              Looks up a localized string similar to Format.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_ImageAltText\">\n            <summary>\n              Looks up a localized string similar to Alternate text.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_ImageWebAddress\">\n            <summary>\n              Looks up a localized string similar to Web address.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Indent\">\n            <summary>\n              Looks up a localized string similar to Indent.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_InsertHtml\">\n            <summary>\n              Looks up a localized string similar to Insert HTML.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_InsertImage\">\n            <summary>\n              Looks up a localized string similar to Insert image.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_InsertOrderedList\">\n            <summary>\n              Looks up a localized string similar to Insert ordered list.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_InsertUnorderedList\">\n            <summary>\n              Looks up a localized string similar to Insert unordered list.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_InvalidFileType\">\n            <summary>\n              Looks up a localized string similar to The selected file &quot;{0}&quot; is not valid. Supported file types are {1}..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Italic\">\n            <summary>\n              Looks up a localized string similar to Italic.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_JustifyCenter\">\n            <summary>\n              Looks up a localized string similar to Center text.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_JustifyFull\">\n            <summary>\n              Looks up a localized string similar to Justify.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_JustifyLeft\">\n            <summary>\n              Looks up a localized string similar to Align text left.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_JustifyRight\">\n            <summary>\n              Looks up a localized string similar to Align text right.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_LinkOpenInNewWindow\">\n            <summary>\n              Looks up a localized string similar to Open link in new window.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_LinkText\">\n            <summary>\n              Looks up a localized string similar to Text.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_LinkToolTip\">\n            <summary>\n              Looks up a localized string similar to ToolTip.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_LinkWebAddress\">\n            <summary>\n              Looks up a localized string similar to Web address.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_OrderBy\">\n            <summary>\n              Looks up a localized string similar to Arrange by:.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_OrderByName\">\n            <summary>\n              Looks up a localized string similar to Name.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_OrderBySize\">\n            <summary>\n              Looks up a localized string similar to Size.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Outdent\">\n            <summary>\n              Looks up a localized string similar to Outdent.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_OverwriteFile\">\n            <summary>\n              Looks up a localized string similar to &apos;A file with name &quot;{0}&quot; already exists in the current directory. Do you want to overwrite it?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Search\">\n            <summary>\n              Looks up a localized string similar to Search.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Strikethrough\">\n            <summary>\n              Looks up a localized string similar to Strikethrough.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Styles\">\n            <summary>\n              Looks up a localized string similar to Styles.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Subscript\">\n            <summary>\n              Looks up a localized string similar to Subscript.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Superscript\">\n            <summary>\n              Looks up a localized string similar to Superscript.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Underline\">\n            <summary>\n              Looks up a localized string similar to Underline.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_Unlink\">\n            <summary>\n              Looks up a localized string similar to Remove hyperlink.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Editor_UploadFile\">\n            <summary>\n              Looks up a localized string similar to Upload.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_And\">\n            <summary>\n              Looks up a localized string similar to And.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Cancel\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Clear\">\n            <summary>\n              Looks up a localized string similar to Clear.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsGreaterThan\">\n            <summary>\n              Looks up a localized string similar to Is after.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsGreaterThanOrEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is after or equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsLessThan\">\n            <summary>\n              Looks up a localized string similar to Is before.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsLessThanOrEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is before or equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_DateIsNotEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is not equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_EnumIsEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_EnumIsNotEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is not equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Filter\">\n            <summary>\n              Looks up a localized string similar to Filter.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Info\">\n            <summary>\n              Looks up a localized string similar to Show items with value that:.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_IsFalse\">\n            <summary>\n              Looks up a localized string similar to is false.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_IsTrue\">\n            <summary>\n              Looks up a localized string similar to is true.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsGreaterThan\">\n            <summary>\n              Looks up a localized string similar to Is greater than.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsGreaterThanOrEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is greater than or equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsLessThan\">\n            <summary>\n              Looks up a localized string similar to Is less than.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsLessThanOrEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is less than or equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_NumberIsNotEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is not equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Operator\">\n            <summary>\n              Looks up a localized string similar to Operator.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Or\">\n            <summary>\n              Looks up a localized string similar to Or.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_SelectValue\">\n            <summary>\n              Looks up a localized string similar to -Select value-.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringContains\">\n            <summary>\n              Looks up a localized string similar to Contains.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringDoesNotContain\">\n            <summary>\n              Looks up a localized string similar to Does not contain.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringEndsWith\">\n            <summary>\n              Looks up a localized string similar to Ends with.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringIsEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringIsNotEqualTo\">\n            <summary>\n              Looks up a localized string similar to Is not equal to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_StringStartsWith\">\n            <summary>\n              Looks up a localized string similar to Starts with.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Filter_Value\">\n            <summary>\n              Looks up a localized string similar to Value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Cancel\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_CancelChanges\">\n            <summary>\n              Looks up a localized string similar to Cancel changes.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_CancelDelete\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Columns\">\n            <summary>\n              Looks up a localized string similar to Columns.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_ColumnSettings\">\n            <summary>\n              Looks up a localized string similar to Column Settings.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Confirmation\">\n            <summary>\n              Looks up a localized string similar to Are you sure you want to delete this record?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_ConfirmDelete\">\n            <summary>\n              Looks up a localized string similar to Delete.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Create\">\n            <summary>\n              Looks up a localized string similar to Add new record.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Destroy\">\n            <summary>\n              Looks up a localized string similar to Delete.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Done\">\n            <summary>\n              Looks up a localized string similar to Done.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Edit\">\n            <summary>\n              Looks up a localized string similar to Edit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_SaveChanges\">\n            <summary>\n              Looks up a localized string similar to Save changes.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Select\">\n            <summary>\n              Looks up a localized string similar to Select.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_SortAscending\">\n            <summary>\n              Looks up a localized string similar to Sort Ascending.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_SortDescending\">\n            <summary>\n              Looks up a localized string similar to Sort Descending.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Grid_Update\">\n            <summary>\n              Looks up a localized string similar to Update.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Group_Empty\">\n            <summary>\n              Looks up a localized string similar to Drag a column header and drop it here to group by that column.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Display\">\n            <summary>\n              Looks up a localized string similar to {0} - {1} of {2} items.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Empty\">\n            <summary>\n              Looks up a localized string similar to No items to display.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_First\">\n            <summary>\n              Looks up a localized string similar to Go to the first page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_ItemsPerPage\">\n            <summary>\n              Looks up a localized string similar to items per page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Last\">\n            <summary>\n              Looks up a localized string similar to Go to the last page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Next\">\n            <summary>\n              Looks up a localized string similar to Go to the next page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Of\">\n            <summary>\n              Looks up a localized string similar to of {0}.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Page\">\n            <summary>\n              Looks up a localized string similar to Page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Previous\">\n            <summary>\n              Looks up a localized string similar to Go to the previous page.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Pager_Refresh\">\n            <summary>\n              Looks up a localized string similar to Refresh.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_AllDay\">\n            <summary>\n              Looks up a localized string similar to all day.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Cancel\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Confirmation\">\n            <summary>\n              Looks up a localized string similar to Are you sure you want to delete this event?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Date\">\n            <summary>\n              Looks up a localized string similar to Date.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_DeleteWindowTitle\">\n            <summary>\n              Looks up a localized string similar to Delete event.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Destroy\">\n            <summary>\n              Looks up a localized string similar to Delete.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_AllDayEvent\">\n            <summary>\n              Looks up a localized string similar to All day event.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_Description\">\n            <summary>\n              Looks up a localized string similar to Description.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_EditorTitle\">\n            <summary>\n              Looks up a localized string similar to Event.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_End\">\n            <summary>\n              Looks up a localized string similar to End.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_EndTimezone\">\n            <summary>\n              Looks up a localized string similar to End timezone.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_Repeat\">\n            <summary>\n              Looks up a localized string similar to Repeat.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_SeparateTimezones\">\n            <summary>\n              Looks up a localized string similar to Use separate start and end time zones.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_Start\">\n            <summary>\n              Looks up a localized string similar to Start.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_StartTimezone\">\n            <summary>\n              Looks up a localized string similar to Start timezone.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_Timezone\">\n            <summary>\n              Looks up a localized string similar to  .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_TimezoneEditorButton\">\n            <summary>\n              Looks up a localized string similar to Time zone.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_TimezoneEditorTitle\">\n            <summary>\n              Looks up a localized string similar to Timezones.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Editor_Title\">\n            <summary>\n              Looks up a localized string similar to Title.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Event\">\n            <summary>\n              Looks up a localized string similar to Event.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_DeleteRecurring\">\n            <summary>\n              Looks up a localized string similar to Do you want to delete only this event occurrence or the whole series?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_DeleteWindowOccurrence\">\n            <summary>\n              Looks up a localized string similar to Delete current occurrence.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_DeleteWindowSeries\">\n            <summary>\n              Looks up a localized string similar to Delete the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_DeleteWindowTitle\">\n            <summary>\n              Looks up a localized string similar to Delete Recurring Item.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Daily_Interval\">\n            <summary>\n              Looks up a localized string similar to  days(s).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Daily_RepeatEvery\">\n            <summary>\n              Looks up a localized string similar to Repeat every: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_End_After\">\n            <summary>\n              Looks up a localized string similar to After .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_End_Label\">\n            <summary>\n              Looks up a localized string similar to End:.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_End_Never\">\n            <summary>\n              Looks up a localized string similar to Never.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_End_Occurrence\">\n            <summary>\n              Looks up a localized string similar to  occurrence(s).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_End_On\">\n            <summary>\n              Looks up a localized string similar to On .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Frequencies_Daily\">\n            <summary>\n              Looks up a localized string similar to Daily.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Frequencies_Monthly\">\n            <summary>\n              Looks up a localized string similar to Monthly.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Frequencies_Never\">\n            <summary>\n              Looks up a localized string similar to Never.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Frequencies_Weekly\">\n            <summary>\n              Looks up a localized string similar to Weekly.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Frequencies_Yearly\">\n            <summary>\n              Looks up a localized string similar to Yearly.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Monthly_Day\">\n            <summary>\n              Looks up a localized string similar to Day .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Monthly_Interval\">\n            <summary>\n              Looks up a localized string similar to  month(s).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Monthly_RepeatEvery\">\n            <summary>\n              Looks up a localized string similar to Repeat every: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Monthly_RepeatOn\">\n            <summary>\n              Looks up a localized string similar to Repeat on: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_OffsetPositions_First\">\n            <summary>\n              Looks up a localized string similar to first.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_OffsetPositions_Fourth\">\n            <summary>\n              Looks up a localized string similar to fourth.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_OffsetPositions_Last\">\n            <summary>\n              Looks up a localized string similar to last.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_OffsetPositions_Second\">\n            <summary>\n              Looks up a localized string similar to second.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_OffsetPositions_Third\">\n            <summary>\n              Looks up a localized string similar to third.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekdays_Day\">\n            <summary>\n              Looks up a localized string similar to day.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekdays_Weekday\">\n            <summary>\n              Looks up a localized string similar to weekday.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekdays_Weekend\">\n            <summary>\n              Looks up a localized string similar to weekend day.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekly_Interval\">\n            <summary>\n              Looks up a localized string similar to  week(s).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekly_RepeatEvery\">\n            <summary>\n              Looks up a localized string similar to Repeat every: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Weekly_RepeatOn\">\n            <summary>\n              Looks up a localized string similar to Repeat on: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Yearly_Interval\">\n            <summary>\n              Looks up a localized string similar to  year(s).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Yearly_Of\">\n            <summary>\n              Looks up a localized string similar to  of .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Yearly_RepeatEvery\">\n            <summary>\n              Looks up a localized string similar to Repeat every: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_Editor_Yearly_RepeatOn\">\n            <summary>\n              Looks up a localized string similar to Repeat on: .\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_EditRecurring\">\n            <summary>\n              Looks up a localized string similar to Do you want to edit only this event occurrence or the whole series?.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_EditWindowOccurrence\">\n            <summary>\n              Looks up a localized string similar to Edit current occurrence.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_EditWindowSeries\">\n            <summary>\n              Looks up a localized string similar to Edit the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Recurrence_EditWindowTitle\">\n            <summary>\n              Looks up a localized string similar to Edit Recurring Item.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Save\">\n            <summary>\n              Looks up a localized string similar to Save.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_ShowFullDay\">\n            <summary>\n              Looks up a localized string similar to Show full day.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_ShowWorkDay\">\n            <summary>\n              Looks up a localized string similar to Show business hours.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Time\">\n            <summary>\n              Looks up a localized string similar to Time.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_Today\">\n            <summary>\n              Looks up a localized string similar to Today.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_View_Agenda\">\n            <summary>\n              Looks up a localized string similar to Agenda.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_View_Day\">\n            <summary>\n              Looks up a localized string similar to Day.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_View_Month\">\n            <summary>\n              Looks up a localized string similar to Month.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Scheduler_View_Week\">\n            <summary>\n              Looks up a localized string similar to Week.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_Cancel\">\n            <summary>\n              Looks up a localized string similar to Cancel.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_DropFilesHere\">\n            <summary>\n              Looks up a localized string similar to drop files here to upload.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_HeaderStatusUploaded\">\n            <summary>\n              Looks up a localized string similar to Done.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_HeaderStatusUploading\">\n            <summary>\n              Looks up a localized string similar to Uploading....\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_Remove\">\n            <summary>\n              Looks up a localized string similar to Remove.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_Retry\">\n            <summary>\n              Looks up a localized string similar to Retry.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_Select\">\n            <summary>\n              Looks up a localized string similar to Select....\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_StatusFailed\">\n            <summary>\n              Looks up a localized string similar to failed.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_StatusUploaded\">\n            <summary>\n              Looks up a localized string similar to uploaded.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_StatusUploading\">\n            <summary>\n              Looks up a localized string similar to uploading.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Messages.Upload_UploadSelectedFiles\">\n            <summary>\n              Looks up a localized string similar to Upload files.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IHtmlAttributesContainer.HtmlAttributes\">\n            <summary>\n            The HtmlAttributes applied to objects which can have child items\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.IScriptableComponent.WriteInitializationScript(System.IO.TextWriter)\">\n            <summary>\n            Writes the initialization script.\n            </summary>\n            <param name=\"writer\">The writer.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.WidgetBase.#ctor(System.Web.Mvc.ViewContext,System.Web.Mvc.ViewDataDictionary)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.WidgetBase\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"clientSideObjectWriterFactory\">The client side object writer factory.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.WidgetBase.Render\">\n            <summary>\n            Renders the component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.WidgetBase.WriteInitializationScript(System.IO.TextWriter)\">\n            <summary>\n            Writes the initialization script.\n            </summary>\n            <param name=\"writer\">The writer.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.WidgetBase.WriteHtml(System.Web.UI.HtmlTextWriter)\">\n            <summary>\n            Writes the HTML.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.WidgetBase.Events\">\n            <summary>\n            Gets the client events of the grid.\n            </summary>\n            <value>The client events.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.WidgetBase.Name\">\n            <summary>\n            Gets or sets the name.\n            </summary>\n            <value>The name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.WidgetBase.Id\">\n            <summary>\n            Gets the id.\n            </summary>\n            <value>The id.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.WidgetBase.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.WidgetBase.ViewContext\">\n            <summary>\n            Gets or sets the view context to rendering a view.\n            </summary>\n            <value>The view context.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.AutoComplete\"/> component.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2\">\n            <summary>\n            View component Builder base class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.ToComponent\">\n            <summary>\n            Returns the internal view component.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.Name(System.String)\">\n            <summary>\n            Sets the name of the component.\n            </summary>\n            <param name=\"componentName\">The name.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.Deferred(System.Boolean)\">\n            <summary>\n            Suppress initialization script rendering. Note that this options should be used in conjunction with <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DeferredScripts(System.Boolean)\"/>\n            </summary>        \n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.Render\">\n            <summary>\n            Renders the component.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.WidgetBuilderBase`2.Component\">\n            <summary>\n            Gets the view component.\n            </summary>\n            <value>The component.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.Animation(System.Boolean)\">\n            <summary>\n            Use to enable or disable animation of the popup element.\n            </summary>\n            <param name=\"enable\">The boolean value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Animation(false) //toggle effect\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.Animation(System.Action{Kendo.Mvc.UI.Fluent.PopupAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the widget.\n            </summary>\n            <param name=\"animationAction\">The action which configures the animation effects.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Animation(animation =>\n                       {\n            \t            animation.Open(open =>\n            \t            {\n            \t                open.SlideIn(SlideDirection.Down);\n            \t            }\n                       })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.BindTo(System.Collections.IEnumerable)\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.DataTextField(System.String)\">\n            <summary>\n            Sets the field of the data item that provides the text content of the list items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .DataTextField(\"Text\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder})\">\n            <summary>\n            Configures the DataSource options.\n            </summary>\n            <param name=\"configurator\">The DataSource configurator action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .DataSource(source =>\n                        {\n                            source.Read(read =>\n                            {\n                                read.Action(\"GetProducts\", \"Home\");\n                            }\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.Delay(System.Int32)\">\n            <summary>\n            Specifies the delay in ms after which the widget will start filtering the dataSource.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Delay(300)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the combobox.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.IgnoreCase(System.Boolean)\">\n            <summary>\n            Use it to enable case insensitive bahavior of the combobox. If true the combobox will select the first matching item ignoring its casing.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .IgnoreCase(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.Height(System.Int32)\">\n            <summary>\n            Sets the height of the drop-down list in pixels.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Height(300)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.HeaderTemplate(System.String)\">\n            <summary>\n            Header template which will be rendered as a static header of the popup element.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .HeaderTemplate(\"<div><h2>Customers</h2></div>\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListBuilderBase`2.HeaderTemplateId(System.String)\">\n            <summary>\n            HeaderTemplateId to be used for rendering the static header of the popup element.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .HeaderTemplateId(\"widgetHeaderTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilderBase`2.Template(System.String)\">\n            <summary>\n            Template to be used for rendering the items in the list.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Template(\"#= data #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilderBase`2.TemplateId(System.String)\">\n            <summary>\n            TemplateId to be used for rendering the items in the list.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .TemplateId(\"widgetTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilderBase`2.Value(System.String)\">\n            <summary>\n            Sets the value of the widget.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Value(\"1\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.#ctor(Kendo.Mvc.UI.AutoComplete)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events =>\n                            events.Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Filter(System.String)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Filter(\"startswith\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Filter(Kendo.Mvc.UI.FilterType)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Filter(FilterType.Contains);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.HighlightFirst(System.Boolean)\">\n            <summary>\n            Use it to enable highlighting of first matched item.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .HighlightFirst(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.MinLength(System.Int32)\">\n            <summary>\n            Specifies the minimum number of characters that should be typed before the widget queries the dataSource.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .MinLength(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Placeholder(System.String)\">\n            <summary>\n            A string that appears in the textbox when it has no value.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .MinLength(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Separator(System.String)\">\n            <summary>\n            Sets the separator for completion. Empty by default, allowing for only one completion.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Separator(\", \")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteBuilder.Suggest(System.Boolean)\">\n            <summary>\n            Controls whether the AutoComplete should automatically auto-type the rest of text.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Suggest(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI AutoComplete events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder\"/> class.\n            </summary>\n            <param name=\"Events\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                       .Name(\"AutoComplete\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events => events.Select(\"select\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                       .Name(\"AutoComplete\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DataBound client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                       .Name(\"AutoComplete\")\n                       .Events(events => events.DataBound(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events => events.DataBound(\"dataBound\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                       .Name(\"AutoComplete\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                       .Name(\"AutoComplete\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AutoCompleteEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Barcode.RenderAs\">\n            <summary>\n            Gets or sets the render type.\n            </summary>\n            <value>The render type.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSpacing.#ctor(System.Nullable{System.Int32})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSpacing\"/> class.\n            </summary>\n            <param name=\"margin\">The spacing to be applied in all directions.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSpacing.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSpacing\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSpacing.Top\">\n            <summary>\n            Gets or sets the top spacing.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSpacing.Right\">\n            <summary>\n            Gets or sets the right spacing.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSpacing.Bottom\">\n            <summary>\n            Gets or sets the bottom spacing.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSpacing.Left\">\n            <summary>\n            Gets or sets the left spacing.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.BarcodeSymbology\">\n            <summary>\n            Represents the symbologies (encodings) supported by Kendo UI Barcode for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.BarcodeElementBorder.#ctor(System.Nullable{System.Int32},System.String,System.Nullable{Kendo.Mvc.UI.ChartDashType})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.BarcodeElementBorder\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.BarcodeElementBorder.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.BarcodeElementBorder\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.BarcodeElementBorder.Width\">\n            <summary>\n            Gets or sets the width of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.BarcodeElementBorder.Color\">\n            <summary>\n            Gets or sets the color of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.BarcodeElementBorder.DashType\">\n            <summary>\n            Gets or sets the dash type of the border.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.BarcodeBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Barcode\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the barcode\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Value(System.Int32)\">\n            <summary>\n            Sets the value of the barcode\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Background(System.String)\">\n            <summary>\n            Sets the background color of the barcode area\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.BarcodeBorderBuilder})\">\n            <summary>\n            Configures the options for the border of the Barcode\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Padding(System.Action{Kendo.Mvc.UI.Fluent.BarcodeSpacingBuilder})\">\n            <summary>\n            Configurator to fine tune the padding options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Padding(System.Int32)\">\n            <summary>\n            Specifies padding for top,bottom,right and left at once.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Checksum(System.Boolean)\">\n            <summary>\n            Specifies whether the Checksum should be displayed next to the text or not\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Color(System.String)\">\n            <summary>\n            Specifies the color of the bars\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Text(System.Action{Kendo.Mvc.UI.Fluent.BarcodeTextBuilder})\">\n            <summary>\n            Configures options for the Text of the Barcode\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Encoding(Kendo.Mvc.UI.BarcodeSymbology)\">\n            <summary>\n            Sets the symbology which will be used to encode the value of the barcode\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the barcode area\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.BarcodeBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the width of the barcode area\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.BarcodeBorderBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Barcode\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.BarcodeSpacingBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Barcode\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.BarcodeHtmlBuilder.#ctor(Kendo.Mvc.UI.Barcode)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.BarcodeHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The Barcode component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.BarcodeHtmlBuilder.CreateBarcode\">\n            <summary>\n            Creates the barcode top-level div.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.BarcodeHtmlBuilder.Build\">\n            <summary>\n            Builds the Barcode component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.IChartSerializer.Serialize\">\n            <summary>\n            Serializes the current instance\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Button.Template\">\n            <summary>\n            Specifies the pane contents\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ButtonBuilder\">\n            <summary>Defines the fluent interface for configuring the <see cref=\"!:Button&lt;T&gt;\"/>component.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.#ctor(Kendo.Mvc.UI.Button)\">\n            <summary>Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SliderBuilder`1\"/>class.</summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content of the Button.\n            </summary>\n            <param name=\"content\">The action which renders the HTML content.</param>\n            <code lang=\"CS\">\n             &lt;%  Html.Kendo().Button()\n                        .Name(\"Button1\")\n                        .Content(() =&gt; { &gt;%\n                              &lt;p&gt;Content&lt;/p&gt;\n                         %&lt;})\n                        .Render();\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content of the Button.\n            </summary>\n            <param name=\"content\">The Razor template for the HTML content.</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().Button()\n                   .Name(\"Button1\")\n                   .Content(@&lt;p&gt;Content&lt;/p&gt;)\n                   .Render();)\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content of the Button.\n            </summary>\n            <param name=\"content\">The HTML content.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Button()\n                     .Name(\"Button\")\n                      .Content(\"&lt;p&gt;Content&lt;/p&gt;\")\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Enable(System.Boolean)\">\n            <summary>Sets whether Button should be enabled.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Icon(System.String)\">\n            <summary>Sets the icon name of the Button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.ImageUrl(System.String)\">\n            <summary>Sets the image URL of the Button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.SpriteCssClass(System.String)\">\n            <summary>Sets the sprite CSS class(es) of the Button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.ButtonEventBuilder})\">\n            <summary>Configures the client-side events.</summary>\n            <param name=\"events\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Button()\n                       .Name(\"Button\")\n                       .Events(events =>\n                           events.Click(\"onClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonBuilder.Tag(System.String)\">\n            <summary>Sets the Button HTML tag. A button tag is used by default.</summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Button()\n                       .Name(\"Button\")\n                       .Tag(\"span\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ButtonEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Button events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonEventBuilder.Click(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Click client-side event\n            </summary>\n            <param name=\"onClickAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Button()\n                       .Name(\"Button\")\n                       .Events(events => events.Click(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ButtonEventBuilder.Click(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Click client-side event.\n            </summary>\n            <param name=\"onClickHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Button()\n                        .Name(\"Button\")\n                        .Events(events => events.Click(\"onClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.INavigatable.RouteName\">\n            <summary>\n            Gets or sets the name of the route.\n            </summary>\n            <value>The name of the route.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.INavigatable.ControllerName\">\n            <summary>\n            Gets or sets the name of the controller.\n            </summary>\n            <value>The name of the controller.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.INavigatable.ActionName\">\n            <summary>\n            Gets or sets the name of the action.\n            </summary>\n            <value>The name of the action.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.INavigatable.RouteValues\">\n            <summary>\n            Gets the route values.\n            </summary>\n            <value>The route values.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.INavigatable.Url\">\n            <summary>\n            Gets or sets the URL.\n            </summary>\n            <value>The URL.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.CalendarEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring datepicker client events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                       .Name(\"DatePicker\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Events(events => events.Change(\"change\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarEventBuilder.Navigate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Navigate client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                       .Name(\"Calendar\")\n                       .Events(events => events.Navigate(\n                            @&lt;text&gt;\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarEventBuilder.Navigate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the Navigate client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Events(events => events.Navigate(\"navigate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"P:Kendo.Mvc.UI.Calendar.SelectionSettings\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder.#ctor(Kendo.Mvc.UI.CalendarSelectionSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"settings\">The selection settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder.Dates(System.Collections.Generic.IList{System.DateTime})\">\n            <summary>\n            Defines list of dates. This list determines which dates to be rendered with action link.\n            </summary>\n            <param name=\"dates\">List of <see cref=\"T:System.DateTime\"/> objects</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder.Action(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action to which the date should navigate\n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action to which the item should navigate\n            </summary>\n            <param name=\"action\">Name of the action.</param>\n            <param name=\"controller\">Name of the controller.</param>\n            <param name=\"values\">The route values.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Font\">\n            <summary>\n            Gets or sets the label font.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Visible\">\n            <summary>\n            Gets or sets a value indicating if the label is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Background\">\n            <summary>\n            Gets or sets the label background.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Border\">\n            <summary>\n            Gets or sets the label border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Margin\">\n            <summary>\n            Gets or sets the label margin.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Padding\">\n            <summary>\n            Gets or sets the label padding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Color\">\n            <summary>\n            Gets or sets the label color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Format\">\n            <summary>\n            Gets or sets the label format.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Template\">\n            <summary>\n            Gets or sets the label template.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Opacity\">\n            <summary>\n            Gets or sets the label opacity.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLabels.Rotation\">\n            <summary>\n            Gets or sets the label rotation.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Font\">\n            <summary>\n            Gets or sets the label font.\n            </summary>\n            <value>\n            Specify a font in CSS format. For example \"12px Arial,Helvetica,sans-serif\".\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Visible\">\n            <summary>\n            Gets or sets a value indicating if the label is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Background\">\n            <summary>\n            Gets or sets the label background.\n            </summary>\n            <value>\n            The label background.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Border\">\n            <summary>\n            Gets or sets the label border.\n            </summary>\n            <value>\n            The label border.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Margin\">\n            <summary>\n            Gets or sets the label margin.\n            </summary>\n            <value>\n            The label margin.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Padding\">\n            <summary>\n            Gets or sets the label padding.\n            </summary>\n            <value>\n            The label padding.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Color\">\n            <summary>\n            Gets or sets the label color.\n            </summary>\n            <value>\n            The label color.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Format\">\n            <summary>\n            Gets or sets the label format.\n            </summary>\n            <value>\n            The label format.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Template\">\n            <summary>\n            Gets or sets the label template.\n            </summary>\n            <value>\n            The label template.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Opacity\">\n            <summary>\n            Gets or sets the label opacity.\n            </summary>\n            <value>\n            The label opacity.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLabels.Rotation\">\n            <summary>\n            Gets or sets the label rotation.\n            </summary>\n            <value>\n            The label opacity.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabels.Mirror\">\n            <summary>\n            A value indicating whether to render the axis labels on the other side.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabels.Step\">\n            <summary>\n            Label rendering step. Every n-th label is rendered where n is the step.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabels.Skip\">\n            <summary>\n            Label rendering skip. Skips rendering the first n labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabels.DateFormats\">\n            <summary>\n            Date formats for the date axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabels.Culture\">\n            <summary>\n            Culture to use for formatting date labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.MajorTicks\">\n            <summary>\n            The axis major ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.MinorTicks\">\n            <summary>\n            The axis minor ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.MajorGridLines\">\n            <summary>\n            The major grid lines configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.MinorGridLines\">\n            <summary>\n            The minor grid lines configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Line\">\n            <summary>\n            The axis line configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Labels\">\n            <summary>\n            The axis labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Title\">\n            <summary>\n            The axis title.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Name\">\n            <summary>\n            The axis name. Leave empty to use the \"primary\" default value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Color\">\n            <summary>\n            The color for all axis elements. Can be overriden by individual settings.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Reverse\">\n            <summary>\n            A value indicating if the axis labels should be rendered in reverse.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.NarrowRange\">\n            <summary>\n            A value indicating if the automatic axis range should snap to 0.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxisBase.Crosshair\">\n            <summary>\n            The axis crosshair configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.PlotBands\">\n            <summary>\n            The axis plot bands.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.Notes\">\n            <summary>\n            The axis notes configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.Pane\">\n            <summary>\n            The name of the pane that the axis should be rendered in.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.Visible\">\n            <summary>\n            Gets or sets the axis visibility.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.StartAngle\">\n            <summary>\n            The angle (degrees) where the 0 value is placed. It defaults to 0.\n            Angles increase counterclockwise and zero is to the right. Negative values are acceptable.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAxis`1.Background\">\n            <summary>\n            The axis background color\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisBase`2.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisBase`2\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Chart\">\n            <summary>\n            Gets or sets the chart.\n            </summary>\n            <value>The chart.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.MajorTicks\">\n            <summary>\n            The axis major ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Crosshair\">\n            <summary>\n            The axis crosshair configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.MinorTicks\">\n            <summary>\n            The axis minor ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.MajorGridLines\">\n            <summary>\n            The major grid lines configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.MinorGridLines\">\n            <summary>\n            The minor grid lines configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Line\">\n            <summary>\n            The axis line configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Labels\">\n            <summary>\n            The axis labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.PlotBands\">\n            <summary>\n            The axis plot bands.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Title\">\n            <summary>\n            The axis title.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Name\">\n            <summary>\n            The axis name. Leave empty to use the \"primary\" default value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Pane\">\n            <summary>\n            The name of the pane that the axis should be rendered in.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Color\">\n            <summary>\n            The color for all axis elements. Can be overriden by individual settings.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Background\">\n            <summary>\n            The axis background color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Reverse\">\n            <summary>\n            A value indicating if the axis labels should be rendered in reverse.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.NarrowRange\">\n            <summary>\n            A value indicating if the automatic axis range should snap to 0.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Visible\">\n            <summary>\n            Gets or sets the axis visibility.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.StartAngle\">\n            <summary>\n            The angle (degrees) where the 0 value is placed. It defaults to 0.\n            Angles increase counterclockwise and zero is to the right. Negative values are acceptable.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBase`2.Notes\">\n            <summary>\n            The axis notes.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Categories\">\n            <summary>\n            The categories displayed on the axis\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Member\">\n            <summary>\n            The Model member used to populate the <see cref=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Categories\"/>\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.AxisCrossingValues\">\n            <summary>\n            The category indicies at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Type\">\n            <summary>\n            Specifies the category axis type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.BaseUnit\">\n            <summary>\n            Specifies the date category axis base unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.BaseUnitStep\">\n            <summary>\n            Sets the step (interval) between categories in base units.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.MaxDateGroups\">\n            <summary>\n            Specifies the maximum number of groups (categories) to produce when\n            either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            This option is ignored in all other cases.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.RoundToBaseUnit\">\n            <summary>\n            If set to false, the min and max dates will not be rounded off to\n            the nearest baseUnit. \n            This option is most useful in combination with explicit min and max dates.\n            It will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.WeekStartDay\">\n            <summary>\n            The week start day when the base unit is Weeks. The default is Sunday.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Justified\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.AutoBaseUnitSteps\">\n            <summary>\n            Specifies the discrete BaseUnitStep values\n            when either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Min\">\n            <summary>\n            Specifies the date category axis minimum (start) date.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Max\">\n            <summary>\n            Specifies the date category axis maximum (end) date.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCategoryAxis.Select\">\n            <summary>\n            Gets or sets the axis selection.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartCategoryAxis`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartCategoryAxis`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.AxisCrossingValues\">\n            <summary>\n            The values at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Categories\">\n            <summary>\n            The categories displayed on the axis\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Member\">\n            <summary>\n            Gets the member name to be used as category.\n            </summary>\n            <value>The member.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Type\">\n            <summary>\n            Specifies the category axis type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.BaseUnit\">\n            <summary>\n            Specifies the date category axis base unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.BaseUnitStep\">\n            <summary>\n            Sets the step (interval) between categories in base units.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.MaxDateGroups\">\n            <summary>\n            Specifies the maximum number of groups (categories) to produce when\n            either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            This option is ignored in all other cases.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.RoundToBaseUnit\">\n            <summary>\n            If set to false, the min and max dates will not be rounded off to\n            the nearest baseUnit. \n            This option is most useful in combination with explicit min and max dates.\n            It will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n            <value>\n            A boolean value that indicates if the axis range should be rounded to the nearest base unit.\n            The default value is true.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.WeekStartDay\">\n            <summary>\n            The week start day when the base unit is Weeks. The default is Sunday.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Justified\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.AutoBaseUnitSteps\">\n            <summary>\n            Specifies the discrete BaseUnitStep values\n            when either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Min\">\n            <summary>\n            Specifies the date category axis minimum (start) date.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Max\">\n            <summary>\n            Specifies the date category axis maximum (end) date.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCategoryAxis`1.Select\">\n            <summary>\n            Gets or sets the axis selection.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNote.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNote\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNote.Icon\">\n            <summary>\n            Gets or sets the icon.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNote.Label\">\n            <summary>\n            Gets or sets the label.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNote.Line\">\n            <summary>\n            Gets or sets the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNote.Position\">\n            <summary>\n            Gets or sets the note position.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisNotes.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisNotes\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisNotes.Data\">\n            <summary>\n            Gets or sets the note position.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartNumericAxis.AxisCrossingValues\">\n            <summary>\n            The values at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartNumericAxis.Min\">\n            <summary>\n            The axis minimum value\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartNumericAxis.Max\">\n            <summary>\n            The axis maximum value\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartNumericAxis.MajorUnit\">\n            <summary>\n            The interval between major divisions\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartNumericAxis.MinorUnit\">\n            <summary>\n            The interval between minor divisions.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNumericAxis`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNumericAxis`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNumericAxis`1.AxisCrossingValues\">\n            <summary>\n            The values at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNumericAxis`1.Min\">\n            <summary>\n            The minimum axis value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNumericAxis`1.Max\">\n            <summary>\n            The axis maximum value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNumericAxis`1.MajorUnit\">\n            <summary>\n            The interval between major divisions\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNumericAxis`1.MinorUnit\">\n            <summary>\n            The interval between minor divisions.\n            It defaults to MajorUnit / 5.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisDefaults`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartCategoryAxis`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPlotBand.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartPlotBand&lt;T&gt;\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPlotBand.From\">\n            <summary>\n            Gets or sets the plot band start position.\n            </summary>\n            <value>\n            The start position of the plot band.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPlotBand.To\">\n            <summary>\n            Gets or sets the plot band end position.\n            </summary>\n            <value>\n            The end position of the plot band.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPlotBand.Color\">\n            <summary>\n            Gets or sets the plot band background color.\n            </summary>\n            <value>\n            The plot band background color.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPlotBand.Opacity\">\n            <summary>\n            Gets or sets the plot band opacity.\n            </summary>\n            <value>\n            The plot band opacity.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisTitle.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisTitle\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Text\">\n            <summary>\n            Gets or sets the axis title text.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Font\">\n            <summary>\n            Gets or sets the axis title font.\n            </summary>\n            <value>\n            Specify a font in CSS format. For example \"16px Arial,Helvetica,sans-serif\".\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Position\">\n            <summary>\n            Gets or sets the axis title position.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Center\"/>\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Margin\">\n            <summary>\n            Gets or sets the axis title margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Background\">\n            <summary>\n            Gets or sets the axis title background color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Color\">\n            <summary>\n            Gets or sets the axis title text color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Padding\">\n            <summary>\n            Gets or sets the axis title padding\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Border\">\n            <summary>\n            Gets or sets the axis title border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Opacity\">\n            <summary>\n            Gets or sets the axis title opacity.\n            </summary>\n            <value>\n            The axis title opacity.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTitle.Rotation\">\n            <summary>\n            Gets or sets the axis title rrotation.\n            </summary>\n            <value>\n            The label opacity.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisTicks.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisTicks\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTicks.Size\">\n            <summary>\n            Gets or sets the ticks size.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisTicks.Visible\">\n            <summary>\n            Gets or sets the ticks visibility.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Seconds\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Seconds\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Minutes\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Minutes\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Hours\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Hours\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Days\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Days\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Months\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Months\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Weeks\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Weeks\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisLabelsDateFormats.Years\">\n            <summary>\n            Date format to use when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Years\"/>.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.BaseUnit\">\n            <summary>\n            The base time interval for the axis labels.\n            The default baseUnit is determined automatically from the value range.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.AxisCrossingValues\">\n            <summary>\n            The dates at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.Min\">\n            <summary>\n            The axis minimum (start) date\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.Max\">\n            <summary>\n            The axis maximum (end) date\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.MajorUnit\">\n            <summary>\n            The interval between major divisions in base units.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDateAxis.MinorUnit\">\n            <summary>\n            The interval between minor divisions in base units.\n            It defaults to 1/5th of the majorUnit.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartDateAxis`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNumericAxis`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.BaseUnit\">\n            <summary>\n            Specifies the date category axis base unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.AxisCrossingValues\">\n            <summary>\n            The values at which perpendicular axes cross this axis.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.Min\">\n            <summary>\n            The minimum axis value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.Max\">\n            <summary>\n            The axis maximum value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.MajorUnit\">\n            <summary>\n            The interval between major divisions in base units.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateAxis`1.MinorUnit\">\n            <summary>\n            The interval between minor divisions in base units.\n            It defaults to 1/5th of the majorUnit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Seconds\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Seconds and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Minutes\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Minutes and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Hours\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Hours and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Days\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Minutes and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Weeks\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Weeks and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Months\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Months and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisBaseUnitSteps.Years\">\n            <summary>\n            The discrete baseUnitStep values when baseUnit is set to Years and\n            baseUnitStep is set to Auto.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineBase.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineBase.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Int32,System.Int32,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineBase.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Width\">\n            <summary>\n            Gets or sets the line width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Opacity\">\n            <summary>\n            Gets or sets the line opacity.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Color\">\n            <summary>\n            Gets or sets the line color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Visible\">\n            <summary>\n            Gets or sets the line visibility.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.DashType\">\n            <summary>\n            Gets or sets the line dash type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Skip\">\n            <summary>\n            Gets or sets the line skip.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineBase.Step\">\n            <summary>\n            Gets or sets the line step.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisCrosshair.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisCrosshair\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisCrosshair.Tooltip\">\n            <summary>\n            The tooltip of the crosshair.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartTooltipBase.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartTooltipBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Font\">\n            <summary>\n            Gets or sets the tooltip font.\n            </summary>\n            <value>\n            Specify a font in CSS format. For example \"16px Arial,Helvetica,sans-serif\".\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Visible\">\n            <summary>\n            Gets or sets a value indicating if the tooltip is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Padding\">\n            <summary>\n            Gets or sets the tooltip margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Border\">\n            <summary>\n            Gets or sets the tooltip border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Background\">\n            <summary>\n            Gets or sets the tooltip background.\n            </summary>\n            <value>\n            The label background.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Color\">\n            <summary>\n            Gets or sets the tooltip color.\n            </summary>\n            <value>\n            The label color.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Format\">\n            <summary>\n            Gets or sets the tooltip format.\n            </summary>\n            <value>\n            The label format.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Template\">\n            <summary>\n            Gets or sets the tooltip template.\n            </summary>\n            <value>\n            The tooltip template.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTooltipBase.Opacity\">\n            <summary>\n            Gets or sets the tooltip opacity.\n            </summary>\n            <value>\n            The tooltip opacity.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartTooltip.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartTooltip\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisCrosshairTooltip.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisCrosshairTooltip\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisSelection.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartDateSelection\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisSelection.From\">\n            <summary>\n            The lower boundary of the range.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisSelection.To\">\n            <summary>\n            The upper boundary of the range.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisSelection.Mousewheel\">\n            <summary>\n            Mousewheel zoom settings\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSelectionMousewheel.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSelectionMousewheel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSelectionMousewheel.Reverse\">\n            <summary>\n            Gets or sets a value that indicates\n            if the mousewheel direction should be reversed.\n            </summary>\n            <value>\n            The mousewheel reverse flag.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSelectionMousewheel.Zoom\">\n            <summary>\n            Gets or sets zoom direction settings.\n            </summary>\n            <value>\n            The zoom direction settings.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ISeriesContainer.Series\">\n            <summary>\n            The component series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChart.UrlGenerator\">\n            <summary>\n            The component UrlGenerator\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChart.ViewContext\">\n            <summary>\n            The component view context\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Data\">\n            <summary>\n            Gets or sets the data source.\n            </summary>\n            <value>The data source.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.UrlGenerator\">\n            <summary>\n            Gets or sets the URL generator.\n            </summary>\n            <value>The URL generator.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.ChartArea\">\n            <summary>\n            Gets or sets the Chart area.\n            </summary>\n            <value>\n            The Chart area.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.PlotArea\">\n            <summary>\n            Gets or sets the Plot area.\n            </summary>\n            <value>\n            The Plot area.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Theme\">\n            <summary>\n            Gets or sets the Chart theme.\n            </summary>\n            <value>\n            The Chart theme.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.RenderAs\">\n            <summary>\n            Gets or sets the render type.\n            </summary>\n            <value>The render type.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Title\">\n            <summary>\n            Gets or sets the Chart title.\n            </summary>\n            <value>\n            The Chart title.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Legend\">\n            <summary>\n            Gets or sets the Chart legend.\n            </summary>\n            <value>\n            The Chart legend.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Transitions\">\n            <summary>\n            Gets or sets the Chart transitions.\n            </summary>\n            <value>\n            The Chart Transitions.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Series\">\n            <summary>\n            Gets the chart series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Panes\">\n            <summary>\n            Gets the chart panes.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.SeriesDefaults\">\n            <summary>\n            Gets the default settings for all series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.CategoryAxes\">\n            <summary>\n            Configuration for all category axes\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.ValueAxes\">\n            <summary>\n            Configuration for all value axes\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.XAxes\">\n            <summary>\n            Configuration for all X axes in scatter charts\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.YAxes\">\n            <summary>\n            Configuration for all Y axes in scatter charts\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.AxisDefaults\">\n            <summary>\n            Configuration for the default axis \n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.DataSource\">\n            <summary>\n            Gets the data source configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.AutoBind\">\n            <summary>\n            Gets or sets a value indicating if the chart\n            should be data bound during initialization.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.SeriesColors\">\n            <summary>\n            Gets or sets the series colors.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Chart`1.Tooltip\">\n            <summary>\n            Gets or sets the data point tooltip options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNoteLine.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNoteLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNoteLine.Width\">\n            <summary>\n            Defines the width of the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNoteLine.Color\">\n            <summary>\n            Defines the color of the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNoteLine.Length\">\n            <summary>\n            Defines the length of the line.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartTitle.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartTitle\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Text\">\n            <summary>\n            Gets or sets the title text\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Font\">\n            <summary>\n            Gets or sets the title font.\n            </summary>\n            <value>\n            Specify a font in CSS format. For example \"16px Arial,Helvetica,sans-serif\".\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Color\">\n            <summary>\n            Gets or sets the title color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Position\">\n            <summary>\n            Gets or sets the title position.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartTitlePosition.Top\"/>\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Align\">\n            <summary>\n            Gets or sets the title text alignment.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartTextAlignment.Center\"/>\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Visible\">\n            <summary>\n            Gets or sets a value indicating if the title is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Margin\">\n            <summary>\n            Gets or sets the title margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Background\">\n            <summary>\n            Gets or sets the title background color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Padding\">\n            <summary>\n            Gets or sets the title padding\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartTitle.Border\">\n            <summary>\n            Gets or sets the legend border\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLegend.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLegend\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Font\">\n            <summary>\n            Gets or sets the legend font.\n            </summary>\n            <value>\n            Specify a font in CSS format. For example \"16px Arial,Helvetica,sans-serif\".\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Color\">\n            <summary>\n            Gets or sets the legend labels color.\n            </summary>\n            <value>\n            Specify the color of the labels.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Position\">\n            <summary>\n            Gets or sets the legend position.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartLegendPosition.Right\"/>\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.OffsetX\">\n            <summary>\n            Gets or sets the legend X-offset from its position.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.OffsetY\">\n            <summary>\n            Gets or sets the legend Y-offset from its position.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Visible\">\n            <summary>\n            Gets or sets a value indicating if the legend is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Margin\">\n            <summary>\n            Gets or sets the legend margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Padding\">\n            <summary>\n            Gets or sets the legend margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Background\">\n            <summary>\n            Gets or sets the legend background color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Border\">\n            <summary>\n            Gets or sets the legend border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLegend.Labels\">\n            <summary>\n            Gets or sets the legend labels\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartElementBorder.#ctor(System.Nullable{System.Int32},System.String,System.Nullable{Kendo.Mvc.UI.ChartDashType})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartElementBorder\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartElementBorder.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartElementBorder\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartElementBorder.Opacity\">\n            <summary>\n            Gets or sets the opacity of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartElementBorder.Width\">\n            <summary>\n            Gets or sets the width of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartElementBorder.Color\">\n            <summary>\n            Gets or sets the color of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartElementBorder.DashType\">\n            <summary>\n            Gets or sets the dash type of the border.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartArea.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartArea\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartArea.Background\">\n            <summary>\n            Gets or sets the Chart area background.\n            </summary>\n            <value>\n            The Chart area background.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartArea.Border\">\n            <summary>\n            Gets or sets the Chart area border.\n            </summary>\n            <value>\n            The Chart area border.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartArea.Margin\">\n            <summary>\n            Gets or sets the Chart area margin.\n            </summary>\n            <value>\n            The Chart area margin.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartArea.Width\">\n            <summary>\n            Gets or sets the Chart area width.\n            </summary>\n            <value>\n            The Chart area width.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartArea.Height\">\n            <summary>\n            Gets or sets the Chart area height.\n            </summary>\n            <value>\n            The Chart area height.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLine.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLine.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPane.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPane\"/> class\n            with the specified name.\n            </summary>\n            <param name=\"name\">The unique pane name.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPane.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPane\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Name\">\n            <summary>\n            Gets or sets the unique pane name\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Height\">\n            <summary>\n            Gets or sets the pane height in pixels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Title\">\n            <summary>\n            Gets or sets the pane title.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Margin\">\n            <summary>\n            Gets or sets the pane margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Background\">\n            <summary>\n            Gets or sets the pane background color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Padding\">\n            <summary>\n            Gets or sets the pane padding\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPane.Border\">\n            <summary>\n            Gets or sets the pane border\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLegendLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLegendLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAxisNoteItem.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAxisNoteItem\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAxisNoteItem.Value\">\n            <summary>\n            Gets or sets the note value.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartScatterLineStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in scatterLine series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartScatterLineStyle.Normal\">\n            <summary>\n            The values will be connected with a straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartScatterLineStyle.Smooth\">\n            <summary>\n            The values will be connected with a smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartZoomDirection\">\n            <summary>\n            Specifies the zoom direction.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartZoomDirection.Both\">\n            <summary>\n            Both ends of the selection are moved.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartZoomDirection.Left\">\n            <summary>\n            The left selection edge is moved during zoom.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartZoomDirection.Right\">\n            <summary>\n            The right selection edge is moved during zoom.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartNoteLabelPosition\">\n            <summary>\n            Defines the position of the note label\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNoteLabelPosition.Inside\">\n            <summary>\n            The label is positioned inside of the icon.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNoteLabelPosition.Outside\">\n            <summary>\n            The label is positioned outside of the icon.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartNotePosition\">\n            <summary>\n            Defines the position of the note\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNotePosition.Top\">\n            <summary>\n            The note is positioned on the top\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNotePosition.Bottom\">\n            <summary>\n            The note is positioned on the bottom\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNotePosition.Left\">\n            <summary>\n            The note is positioned on the left\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartNotePosition.Right\">\n            <summary>\n            The note is positioned on the right\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartLineStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in line series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineStyle.Step\">\n            <summary>\n            The values will be connected with a line at right.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineStyle.Smooth\">\n            <summary>\n            The values will be connected with smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAreaStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in area series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaStyle.Step\">\n            <summary>\n            The values will be connected with a line at right.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaStyle.Smooth\">\n            <summary>\n            The values will be connected with a smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartRadarLineStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in radar line series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartRadarLineStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartRadarLineStyle.Smooth\">\n            <summary>\n            The values will be connected with smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartRadarAreaStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in radar area series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartRadarAreaStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartRadarAreaStyle.Smooth\">\n            <summary>\n            The values will be connected with a smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPolarAreaStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in polar area series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPolarAreaStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPolarAreaStyle.Smooth\">\n            <summary>\n            The values will be connected with a smooth line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPolarLineStyle\">\n            <summary>\n            Defines the behavior rendering the line between values in polar line series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPolarLineStyle.Normal\">\n            <summary>\n            The values will be connected with straight line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPolarLineStyle.Smooth\">\n            <summary>\n            The values will be connected with smooth line.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaLine.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaLine.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaLine.Style\">\n            <summary>\n            The style of the area.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLineBuilderBase\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartLine\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilderBase.#ctor(Kendo.Mvc.UI.ChartLineBase)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLineBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilderBase.Color(System.String)\">\n            <summary>\n            Sets the line color\n            </summary>\n            <param name=\"color\">The line color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.Color(\"#f00\")))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilderBase.Width(System.Int32)\">\n            <summary>\n            Sets the line width\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.Width(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilderBase.DashType(Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the line dashType.\n            </summary>\n            <param name=\"dashType\">The line dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.DashType(ChartDashType.Dot)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder.#ctor(Kendo.Mvc.UI.ChartAreaLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the line opacity.\n            </summary>\n            <param name=\"opacity\">The line opacity.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Area(s => s.Sales)\n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder.Style(Kendo.Mvc.UI.ChartAreaStyle)\">\n            <summary>\n            Configures the line style for area series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Area(s => s.Sales)\n                           .Line(line => line.Style(ChartAreaStyle.Step))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Name\">\n            <summary>\n            The series name.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Opacity\">\n            <summary>\n            The series opacity\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Color\">\n            <summary>\n            The series base color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.ColorHandler\">\n            <summary>\n            Gets or sets the series color function\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Tooltip\">\n            <summary>\n            Gets or sets the data point tooltip options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Axis\">\n            <summary>\n            Gets or sets the axis name to use for this series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.GroupNameTemplate\">\n            <summary>\n            Name template for auto-generated series when binding to grouped data.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Highlight\">\n            <summary>\n            Gets or sets the series highlight options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Visible\">\n            <summary>\n            Gets or sets the visibility of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeries.Notes\">\n            <summary>\n            Gets or sets the series notes options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSeriesBase`1.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSeriesBase`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Name\">\n            <summary>\n            Gets or sets the title of the series.\n            </summary>\n            <value>The title.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Opacity\">\n            <summary>\n            Gets or sets the series opacity.\n            </summary>\n            <value>A value between 0 (transparent) and 1 (opaque).</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Color\">\n            <summary>\n            Gets or sets the series base color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.ColorHandler\">\n            <summary>\n            Gets or sets the series color function\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Tooltip\">\n            <summary>\n            Gets or sets the data point tooltip options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Axis\">\n            <summary>\n            Gets or sets the axis name to use for this series.\n            </summary>\n            <value>The axis name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.GroupNameTemplate\">\n            <summary>\n            Name template for auto-generated series when binding to grouped data.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Highlight\">\n            <summary>\n            Gets or sets the series highlight options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Visible\">\n            <summary>\n            Gets or sets a value indicating if the series is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesBase`1.Notes\">\n            <summary>\n            Gets or sets the series notes options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoundSeries.Member\">\n            <summary>\n            Gets the data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoundSeries.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoundSeries.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoundSeries.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The series data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoundSeries`3.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoundSeries`3.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoundSeries`3.Member\">\n            <summary>\n            Gets the model data member name.\n            </summary>\n            <value>The model data member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoundSeries`3.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoundSeries`3.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.Stacked\">\n            <summary>\n            A value indicating if the areas should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.Labels\">\n            <summary>\n            Gets the area chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.Markers\">\n            <summary>\n            The area chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.MissingValues\">\n            <summary>\n            The behavior for handling missing values in area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAreaSeries.Orientation\">\n            <summary>\n            The orientation of the series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeriesBase`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeriesBase`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeriesBase`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeriesBase`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.Stacked\">\n            <summary>\n            A value indicating if the areas should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.Labels\">\n            <summary>\n            Gets the area chart data labels configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.Markers\">\n            <summary>\n            The area chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.MissingValues\">\n            <summary>\n            The behavior for handling missing values in area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeriesBase`3.Orientation\">\n            <summary>\n            The orientation of the area chart.\n            </summary>\n            <value>\n            Can be either <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Horizontal\">horizontal</see>\n            or <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Vertical\">vertical</see>.\n            The default value is horizontal.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ICategoricalErrorBarsSeries.ErrorBars\">\n            <summary>\n            Gets or sets the series error bars options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartAreaSeries.Line\">\n            <summary>\n            The area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeries`3.Line\">\n            <summary>\n            The area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartAreaSeries`3.ErrorBars\">\n            <summary>\n            Gets or sets the series error bars options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartAreaSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartAreaSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring area series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring series.\n            </summary>\n            <typeparam name=\"TSeries\"></typeparam>\n            <typeparam name=\"TSeriesBuilder\">The type of the series builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Name(System.String)\">\n            <summary>\n            Sets the series title displayed in the legend.\n            </summary>\n            <param name=\"text\">The title.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Name(\"Sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.GroupNameTemplate(System.String)\">\n            <summary>\n            Sets the name template for auto-generated series when binding to grouped data.\n            </summary>\n            <param name=\"groupNameTemplate\">\n            The name template for auto-generated series when binding to grouped data.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .DataSource(dataSource => dataSource\n                           .Read(read => read.Action(\"_StockData\", \"Scatter_Charts\"))\n                           .Group(group => group.Add(model => model.Symbol))\n                       )\n                       .Series(series => series.Bar(s => s.Sales)\n                            .Name(\"Sales\")\n                            .GroupNameTemplate(\"#= series.name # for #= group.field # #= group.value #\")\n                       )\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Opacity(System.Double)\">\n            <summary>\n            Sets the series opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Opacity(0.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Color(System.String)\">\n            <summary>\n            Sets the bar fill color\n            </summary>\n            <param name=\"color\">The bar fill color (CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Color(\"Red\"))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Color(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the function used to retrieve point color.\n            </summary>\n            <param name=\"colorFunction\">\n                The JavaScript function that will be executed\n                to retrieve the color of each point.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Bar(s => s.Sales)\n                           .Color(\n                               @&lt;text&gt;\n                               function(point) {\n                                   return point.value > 5 ? \"red\" : \"green\";\n                               }\n                               &lt;/text&gt;\n                           )\n                        )\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartTooltipBuilder})\">\n            <summary>\n            Configure the data point tooltip for the series.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales)\n                           .Tooltip(tooltip =>\n                           {\n                               tooltip.Visible(true).Format(\"{0:C}\");\n                           })\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Tooltip(System.Boolean)\">\n            <summary>\n            Sets the data point tooltip visibility.\n            </summary>\n            <param name=\"visible\">\n            A value indicating if the data point tooltip should be displayed.\n            The tooltip is not visible by default.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Tooltip(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Axis(System.String)\">\n            <summary>\n            Sets the axis name to use for this series.\n            </summary>\n            <param name=\"axis\">The axis name for this series.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Name(\"Sales\").Axis(\"secondary\"))\n                       .ValueAxis(axis => axis.Numeric())\n                       .ValueAxis(axis => axis.Numeric(\"secondary\"))\n                       .CategoryAxis(axis => axis.AxisCrossingValue(0, 10))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Highlight(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder})\">\n            <summary>\n            Configures the series highlight\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Highlight(System.Boolean)\">\n            <summary>\n            Configures the highlight visibility\n            </summary>\n            <param name=\"configurator\">The highlight visibility.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Visible(System.Boolean)\">\n            <summary>\n            Sets the labels visibility\n            </summary>\n            <param name=\"visible\">The labels visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Bar(s => s.Sales).Visible(false))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Notes(System.Action{Kendo.Mvc.UI.Fluent.ChartNoteBuilder})\">\n            <summary>\n            Configures the series notes\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartSeriesBuilderBase`2.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Stack(System.Boolean)\">\n            <summary>\n            Sets a value indicating if the areas should be stacked.\n            </summary>\n            <param name=\"stacked\">A value indicating if the areas should be stacked.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Area(s => s.Sales).Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Aggregate(Kendo.Mvc.UI.ChartSeriesAggregate)\">\n            <summary>\n            Sets the aggregate function for date series.\n            This function is used when a category (an year, month, etc.) contains two or more points.\n            </summary>\n            <param name=\"aggregate\">Aggregate function name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Area(s => s.Sales).Aggregate())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder})\">\n            <summary>\n            Configures the area chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Area(s => s.Sales)\n                            .Labels(labels => labels\n                                .Position(ChartBarLabelsPosition.Above)\n                                .Visible(true)\n                            );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of area chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Area(s => s.Sales)\n                            .Labels(true);\n                         )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Markers(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Configures the area chart markers.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Area(s => s.Sales)\n                            .Markers(markers => markers\n                                .Type(ChartMarkerShape.Triangle)\n                            );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.Markers(System.Boolean)\">\n            <summary>\n            Sets the visibility of area chart markers.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is true.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Area(s => s.Sales)\n                            .Markers(true);\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilderBase`2.MissingValues(Kendo.Mvc.UI.ChartAreaMissingValues)\">\n            <summary>\n            Configures the behavior for handling missing values in area series.\n            </summary>\n            <param name=\"missingValues\">The missing values behavior. The default is to leave gaps.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Area(s => s.Sales)\n                            .MissingValues(ChartAreaMissingValues.Interpolate);\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartAreaSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,Kendo.Mvc.UI.ChartAreaStyle)\">\n            <summary>\n            Configures the area chart line.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <param name=\"color\">The line color.</param>\n            <param name=\"dashType\">The line dashType.</param>\n            <param name=\"style\">The line style.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Area(s => s.Sales)        \n                          .Line(2, \"red\", ChartDashType.Dot, ChartAreaStyle.Smooth)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder})\">\n            <summary>\n            Configures the area chart line.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Area(s => s.Sales)        \n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaSeriesBuilder`1.ErrorBars(System.Action{Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder})\">\n            <summary>\n            Configures the series error bars\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Area(s => s.Sales)        \n                          .ErrorBars(e => e.Value(1))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example> \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartRadarAreaSeries.Line\">\n            <summary>\n            The radar area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartRadarAreaSeries`3.Line\">\n            <summary>\n            The area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaLine.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarAreaLine.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartRadarAreaLine.Style\">\n            <summary>\n            The style of the radar area.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaLineBuilder.#ctor(Kendo.Mvc.UI.ChartRadarAreaLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartRadarAreaLineBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaLineBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the line opacity.\n            </summary>\n            <param name=\"opacity\">The line opacity.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .RadarArea(s => s.Sales)\n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaLineBuilder.Style(Kendo.Mvc.UI.ChartRadarAreaStyle)\">\n            <summary>\n            Configures the line style for radar area series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .RadarArea(s => s.Sales)\n                           .Line(line => line.Style(ChartRadarAreaStyle.Smooth))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartRadarAreaSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartRadarAreaSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaSeriesBuilder`1.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,Kendo.Mvc.UI.ChartRadarAreaStyle)\">\n            <summary>\n            Configures the radar area chart line.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <param name=\"color\">The line color.</param>\n            <param name=\"dashType\">The line dashType.</param>\n            <param name=\"style\">The line style.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .RadarArea(s => s.Sales)        \n                          .Line(2, \"red\", ChartDashType.Dot, ChartScatterLineStyle.Smooth)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarAreaSeriesBuilder`1.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartRadarAreaLineBuilder})\">\n            <summary>\n            Configures the radar area chart line.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .RadarArea(s => s.Sales)        \n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Stacked\">\n            <summary>\n            A value indicating if the bars should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.StackName\">\n            <summary>\n            The stack name that this series belongs to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Spacing\">\n            <summary>\n            Space between bars.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Orientation\">\n            <summary>\n            The orientation of the bars.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Labels\">\n            <summary>\n            Gets the bar chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Border\">\n            <summary>\n            Gets or sets the bar's border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.Overlay\">\n            <summary>\n            Gets or sets the effects overlay\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IBarSeries.NegativeColor\">\n            <summary>\n            Gets or sets the series color for negative values\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeriesBase`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeriesBase`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeriesBase`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeriesBase`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Stacked\">\n            <summary>\n            A value indicating if the bars should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.StackName\">\n            <summary>\n            The stack name that this series belongs to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n            <value>\n            A value of 1 means that there is a total of 1 column width / bar height between categories. \n            The distance is distributed evenly on each side.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Spacing\">\n            <summary>\n            Space between bars.\n            </summary>\n            <value>\n            Value of 1 means that the distance between bars is equal to their width.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Orientation\">\n            <summary>\n            The orientation of the bars.\n            </summary>\n            <value>\n            Can be either <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Horizontal\">horizontal</see> (bar chart)\n            or <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Vertical\">vertical</see> (column chart).\n            The default value is horizontal.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Labels\">\n            <summary>\n            Gets the bar chart data labels configuration\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Border\">\n            <summary>\n            Gets or sets the bar border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.Overlay\">\n            <summary>\n            Gets or sets the effects overlay\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeriesBase`3.NegativeColor\">\n            <summary>\n            Gets or sets the series color for negative values\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarSeries`3.ErrorBars\">\n            <summary>\n            Gets or sets the series error bars options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bar series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartBarSeriesBuilderBasee&lt;T&gt;\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Stack(System.Boolean)\">\n            <summary>\n            Sets a value indicating if the bars should be stacked.\n            </summary>\n            <param name=\"stacked\">A value indicating if the bars should be stacked.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Bar(s => s.Sales).Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Stack(System.String)\">\n            <summary>\n            Sets the name of the stack that this series belongs to. Each unique name creates a new stack.\n            </summary>\n            <param name=\"stackName\">The name of the stack.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Bar(s => s.Sales).Stack(\"Female\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Aggregate(Kendo.Mvc.UI.ChartSeriesAggregate)\">\n            <summary>\n            Sets the aggregate function for date series.\n            This function is used when a category (an year, month, etc.) contains two or more points.\n            </summary>\n            <param name=\"aggregate\">Aggregate function name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Bar(s => s.Sales).Aggregate())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Gap(System.Double)\">\n            <summary>\n            Set distance between category clusters. \n            <param name=\"gap\">\n            A value of 1 means that there is a total of 1 column width / bar height between categories.\n            The distance is distributed evenly on each side.\n            The default value is 1.5\n            </param>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                .Name(\"Chart\")\n                .Series(series => series.Bar(s => s.Sales).Gap(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Spacing(System.Double)\">\n            <summary>\n            Sets a value indicating the distance between bars / categories.\n            </summary>\n            <param name=\"spacing\">\n            Value of 1 means that the distance between bars is equal to their width.\n            The default value is 0\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                .Name(\"Chart\")\n                .Series(series => series.Spacing(s => s.Sales).Spacing(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartBarLabelsBuilder})\">\n            <summary>\n            Configures the bar chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Position(ChartBarLabelsPosition.InsideEnd)\n                                .Visible(true)\n                            );\n                         )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of bar chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(true);\n                         )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the bars border\n            </summary>\n            <param name=\"width\">The bars border width.</param>\n            <param name=\"color\">The bars border color (CSS syntax).</param>\n            <param name=\"dashType\">The bars border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Border(\"1\", \"#000\", ChartDashType.Dot))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the bar border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.Overlay(Kendo.Mvc.UI.ChartBarSeriesOverlay)\">\n            <summary>\n            Sets the bar effects overlay\n            </summary>\n            <param name=\"overlay\">The bar effects overlay. The default is ChartBarSeriesOverlay.Glass</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).Overlay(ChartBarSeriesOverlay.None))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilderBase`2.NegativeColor(System.String)\">\n            <summary>\n            Sets the bar color for negative values\n            </summary>\n            <param name=\"color\">The bar color for negative values(CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bar(s => s.Sales).NegativeColor(\"Red\"))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartBarSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarSeriesBuilder`1.ErrorBars(System.Action{Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder})\">\n            <summary>\n            Configures the series error bars\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Bar(s => s.Sales)\n                           .ErrorBars(e => e.Value(1))\n                       )\n            %&gt;\n            </code>\n            </example>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarColumnSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarColumnSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarColumnSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IBarSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartRadarColumnSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Stacked\">\n            <summary>\n            A value indicating if the lines should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Labels\">\n            <summary>\n            Gets the line chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Markers\">\n            <summary>\n            The line chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Width\">\n            <summary>\n            The line chart line width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.DashType\">\n            <summary>\n            The line chart line dash type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.MissingValues\">\n            <summary>\n            The behavior for handling missing values in line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILineSeries.Orientation\">\n            <summary>\n            The orientation of the series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeriesBase`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeriesBase`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeriesBase`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeriesBase`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Stacked\">\n            <summary>\n            A value indicating if the lines should be stacked.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Aggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Labels\">\n            <summary>\n            Gets the line chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Markers\">\n            <summary>\n            The line chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Width\">\n            <summary>\n            The line chart line width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.MissingValues\">\n            <summary>\n            The behavior for handling missing values in line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.DashType\">\n            <summary>\n            The line chart line dashType.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeriesBase`3.Orientation\">\n            <summary>\n            The orientation of the line.\n            </summary>\n            <value>\n            Can be either <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Horizontal\">horizontal</see>\n            or <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Vertical\">vertical</see>.\n            The default value is horizontal.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartLineSeries.Style\">\n            <summary>\n            The style of the series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeries`3.Style\">\n            <summary>\n            The style of the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartLineSeries`3.ErrorBars\">\n            <summary>\n            Gets or sets the series error bars options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartLineSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartLineSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring line series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Stack(System.Boolean)\">\n            <summary>\n            Sets a value indicating if the lines should be stacked.\n            </summary>\n            <param name=\"stacked\">A value indicating if the lines should be stacked.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Line(s => s.Sales).Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Aggregate(Kendo.Mvc.UI.ChartSeriesAggregate)\">\n            <summary>\n            Sets the aggregate function for date series.\n            This function is used when a category (an year, month, etc.) contains two or more points.\n            </summary>\n            <param name=\"aggregate\">Aggregate function name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.Line(s => s.Sales).Aggregate())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder})\">\n            <summary>\n            Configures the line chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Labels(labels => labels\n                               .Position(ChartBarLabelsPosition.Above)\n                               .Visible(true)\n                           );\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of line chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Labels(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Width(System.Double)\">\n            <summary>\n            Sets the line chart line width.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Line(s => s.Sales).Width(2))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.DashType(Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the line chart line dash type.\n            </summary>\n            <param name=\"dashType\">The line dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Line(s => s.Sales).DashType(ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Markers(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Configures the line chart markers.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Markers(markers => markers\n                               .Type(ChartMarkerShape.Triangle)\n                           );\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.Markers(System.Boolean)\">\n            <summary>\n            Sets the visibility of line chart markers.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is true.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Markers(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilderBase`2.MissingValues(Kendo.Mvc.UI.ChartLineMissingValues)\">\n            <summary>\n            Configures the behavior for handling missing values in line series.\n            </summary>\n            <param name=\"missingValues\">The missing values behavior. The default is to leave gaps.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .MissingValues(ChartLineMissingValues.Interpolate);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartLineSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilder`1.Style(Kendo.Mvc.UI.ChartLineStyle)\">\n            <summary>\n            Configures the style for line series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Style(ChartLineStyle.Step);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineSeriesBuilder`1.ErrorBars(System.Action{Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder})\">\n            <summary>\n            Configures the series error bars\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .ErrorBars(e => e.Value(1))\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartRadarLineSeries.Style\">\n            <summary>\n            The radar line series style.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`3\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartRadarLineSeries`3.Style\">\n            <summary>\n            The style of the line.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartRadarLineSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartRadarLineSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarLineSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartRadarLineSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartRadarLineSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartRadarLineSeriesBuilder`1.Style(Kendo.Mvc.UI.ChartRadarLineStyle)\">\n            <summary>\n            Configures the style for radar line series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .RadarLine(s => s.Sales)\n                           .Style(ChartRadarLineStyle.Smooth);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.XMember\">\n            <summary>\n            Gets the X data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.YMember\">\n            <summary>\n            Gets the Y data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.NoteTextMember\">\n            <summary>\n            Gets the note text member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.Labels\">\n            <summary>\n            Gets the scatter chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.Markers\">\n            <summary>\n            The scatter chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.XAxis\">\n            <summary>\n            Gets or sets the X axis name to use for this series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.YAxis\">\n            <summary>\n            Gets or sets the Y axis name to use for this series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterSeries.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeriesBase`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeriesBase`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeriesBase`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.XMember\">\n            <summary>\n            Gets the model X data member name.\n            </summary>\n            <value>The model X data member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.YMember\">\n            <summary>\n            Gets the model Y data member name.\n            </summary>\n            <value>The model Y data member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.NoteTextMember\">\n            <summary>\n            Gets the model note text member name.\n            </summary>\n            <value>The model note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.XAxis\">\n            <summary>\n            Gets or sets the X axis name to use for this series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.YAxis\">\n            <summary>\n            Gets or sets the Y axis name to use for this series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.Labels\">\n            <summary>\n            Gets the scatter chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.Markers\">\n            <summary>\n            The line chart markers configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeriesBase`3.Data\">\n            <summary>\n            The scatter chart data source.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterLineSeries.Width\">\n            <summary>\n            The line chart line width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterLineSeries.DashType\">\n            <summary>\n            The chart line dash type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterLineSeries.MissingValues\">\n            <summary>\n            The behavior for handling missing values in scatter line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.Width\">\n            <summary>\n            The chart line width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.DashType\">\n            <summary>\n            The chart line dashType.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterLineSeriesBase`3.MissingValues\">\n            <summary>\n            The behavior for handling missing values in scatter line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IScatterErrorBarsSeries.ErrorBars\">\n            <summary>\n            The scatter chart error bars configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartScatterLineSeries.Style\">\n            <summary>\n            The style of the series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterLineSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterLineSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterLineSeries`3.Style\">\n            <summary>\n            The style of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterLineSeries`3.ErrorBars\">\n            <summary>\n            The error bars of the series.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring scatter line series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring scatter series.\n            </summary>\n            <typeparam name=\"TSeries\">The type of the data item</typeparam>\n            <typeparam name=\"TBuilder\">The type of the builder</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder})\">\n            <summary>\n            Configures the scatter chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Scatter(s => s.x, s => s.y)\n                           .Labels(labels => labels\n                               .Position(ChartBarLabelsPosition.Above)\n                               .Visible(true)\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of scatter chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Scatter(s => s.x, s => s.y)\n                           .Labels(true);\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.Markers(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Configures the scatter chart markers.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Scatter(s => s.x, s => s.y)\n                           .Markers(markers => markers\n                               .Type(ChartMarkerShape.Triangle)\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.Markers(System.Boolean)\">\n            <summary>\n            Sets the visibility of scatter chart markers.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is true.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Scatter(s => s.x, s => s.y)\n                           .Markers(true);\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.XAxis(System.String)\">\n            <summary>\n            Sets the axis name to use for this series.\n            </summary>\n            <param name=\"axis\">The axis name for this series.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Scatter(s => s.X, s => s.Y).Name(\"Scatter\").XAxis(\"secondary\"))\n                       .XAxis(axis => axis.Numeric())\n                       .XAxis(axis => axis.Numeric(\"secondary\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.YAxis(System.String)\">\n            <summary>\n            Sets the axis name to use for this series.\n            </summary>\n            <param name=\"axis\">The axis name for this series.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Scatter(s => s.Sales).Name(\"Sales\").YAxis(\"secondary\"))\n                       .YAxis(axis => axis.Numeric())\n                       .YAxis(axis => axis.Numeric(\"secondary\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilderBase`2.Axis(System.String)\">\n            <summary>\n            Not applicable to scatter series\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilderBase`2.Width(System.Double)\">\n            <summary>\n            Sets the chart line width.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.ScatterLine(s => s.x, s => s.y).Width(2))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilderBase`2.DashType(Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the chart line dash type.\n            </summary>\n            <param name=\"dashType\">The line dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.ScatterLine(s => s.x, s => s.y).DashType(ChartDashType.Dot))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilderBase`2.MissingValues(Kendo.Mvc.UI.ChartScatterLineMissingValues)\">\n            <summary>\n            Configures the behavior for handling missing values in scatter line series.\n            </summary>\n            <param name=\"missingValues\">The missing values behavior. The default is to leave gaps.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .ScatterLine(s => s.x, s => s.y)\n                           .MissingValues(ChartScatterLineMissingValues.Interpolate);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartScatterLineSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilder`1.ErrorBars(System.Action{Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder})\">\n            <summary>\n            Configures the scatter line series error bars.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .ScatterLine(s => s.x, s => s.y)\n                           .ErrorBars(e => e.XValue(1))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterLineSeriesBuilder`1.Style(Kendo.Mvc.UI.ChartScatterLineStyle)\">\n            <summary>\n            Configures the style for scatterLine series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .ScatterLine(s => s.x, s => s.y)\n                           .Style(ChartScatterLineStyle.Smooth);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartScatterSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartScatterSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartScatterSeries`3.ErrorBars\">\n            <summary>\n            The scatter chart error bars configuration.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring scatter series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartScatterSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartScatterSeriesBuilder`1.ErrorBars(System.Action{Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder})\">\n            <summary>\n            Configures the scatter series error bars.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Scatter(s => s.x, s => s.y)\n                           .ErrorBars(e => e.XValue(1))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaLine.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaLine.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaLine.#ctor(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,System.Boolean,Kendo.Mvc.UI.ChartPolarAreaStyle)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaLine\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPolarAreaLine.Style\">\n            <summary>\n            The style of the polar area.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarAreaLineBuilder.#ctor(Kendo.Mvc.UI.ChartPolarAreaLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPolarAreaLineBuilder\"/> class.\n            </summary>\n            <param name=\"line\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarAreaLineBuilder.Style(Kendo.Mvc.UI.ChartPolarAreaStyle)\">\n            <summary>\n            Configures the line style for polar area series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .PolarArea(s => s.Sales)\n                           .Line(line => line.Style(ChartPolarAreaStyle.Smooth))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarAreaSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartPolarAreaSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPolarAreaSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarAreaSeriesBuilder`1.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType,Kendo.Mvc.UI.ChartPolarAreaStyle)\">\n            <summary>\n            Configures the polar area chart line.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <param name=\"color\">The line color.</param>\n            <param name=\"dashType\">The line dashType.</param>\n            <param name=\"style\">The line style.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .PolarArea(s => s.Sales)        \n                          .Line(2, \"red\", ChartDashType.Dot, ChartPolarAreaStyle.Smooth)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarAreaSeriesBuilder`1.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartPolarAreaLineBuilder})\">\n            <summary>\n            Configures the polar area chart line.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .PolarArea(s => s.Sales)        \n                          .Line(line => line.Width(2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarLineSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartPolarLineSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPolarLineSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarLineSeriesBuilder`1.Style(Kendo.Mvc.UI.ChartPolarLineStyle)\">\n            <summary>\n            Configures the style for scatterLine series.\n            </summary>\n            <param name=\"style\">The style. The default is normal.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .PolarLine(s => s.x, s => s.y)\n                           .Style(ChartPolarLineStyle.Smooth);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPolarScatterSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartPolarScatterSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPolarScatterSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPolarLineSeries.Style\">\n            <summary>\n            The style of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPolarAreaSeries.Line\">\n            <summary>\n            The polar area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarAreaSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarAreaSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPolarAreaSeries`3.Line\">\n            <summary>\n            The polar area chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarLineSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarLineSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarLineSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarLineSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarLineSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarLineSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPolarLineSeries`3.Style\">\n            <summary>\n            The style of the series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarScatterSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarScatterSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarScatterSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPolarScatterSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPolarScatterSeries`3\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartFunnelLabelsPosition\">\n            <summary>\n            Defines the position of funnel chart labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsPosition.Center\">\n            <summary>\n            The label is positioned at the center of the funnel segment.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsPosition.Top\">\n            <summary>\n            The label is positioned at the top of the label area.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsPosition.Bottom\">\n            <summary>\n            The label is positioned at the bottom of the label area.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartFunnelLabelsAlign\">\n            <summary>\n            Defines the alignment of the funnel labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsAlign.Center\">\n            <summary>\n            The labels are positioned on the top of the funnel chart\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsAlign.Right\">\n            <summary>\n            The labels are positioned on the left side of the chart\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartFunnelLabelsAlign.Left\">\n            <summary>\n            The labels are positioned on the right side of the chart\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.RenderingMode\">\n            <summary>\n            Defines the rendering modes supported by DataViz widgets\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.RenderingMode.SVG\">\n            <summary>\n            Renders the widget as VML, if available.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.RenderingMode.VML\">\n            <summary>\n            Renders the widget as a Canvas element, if available.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.RenderingMode.Canvas\">\n            <summary>\n            Renders the widget as inline SVG document, if available.\n            Note: Animations and most interactive features will be disabled.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ErrorBarsBase.Color\">\n            <summary>\n            Gets or sets the error bars color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ErrorBarsBase.EndCaps\">\n            <summary>\n            Gets or sets a value indicating if the end caps are visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ErrorBarsBase.Line\">\n            <summary>\n            The error bars line\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.CategoricalErrorBars.Value\">\n            <summary>\n            Gets or sets the error bars value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.CategoricalErrorBars.LowMember\">\n            <summary>\n            Gets the model data error low member name.\n            </summary>\n            <value>The model data error low member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.CategoricalErrorBars.HighMember\">\n            <summary>\n            Gets the model data error high member name.\n            </summary>\n            <value>The model data error high member name.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring funnel series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartFunnelSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Name(System.String)\">\n            <summary>\n            Sets the name of the series.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).Name(\"Sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.SegmentSpacing(System.Double)\">\n            <summary>\n            Sets the segmentSpacing of the chart.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).SegmentSpacing(5))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Opacity(System.Double)\">\n            <summary>\n            Sets the opacity of the funnel series.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).Opacity(0.3))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.NeckRatio(System.Double)\">\n            <summary>\n            Sets the neck ratio of the funnel chart.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).NeckRatio(3))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.DynamicSlope(System.Boolean)\">\n            <summary>\n            Sets the dynamic slope of the funnel chart.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).DynamicSlope(true))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.DynamicHeight(System.Boolean)\">\n            <summary>\n            Sets the dynamic height of the funnel chart.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Funnel(s => s.Sales, s => s.DateString).DynamicHeight(true))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder})\">\n            <summary>\n            Configures the funnel chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Funnel(s => s.Sales, s => s.DateString)\n                           .Labels(labels => labels\n                               .Color(\"red\")\n                               .Visible(true)\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of funnel chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Funnel(s => s.Sales, s => s.DateString)\n                           .Labels(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the funnel segments border\n            </summary>\n            <param name=\"width\">The funnel segments border width.</param>\n            <param name=\"color\">The funnel segments border color (CSS syntax).</param>\n            <param name=\"dashType\">The funnel segments border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Funnel(s => s.Sales, s => s.DateString).Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the funnel border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartFunnelSeriesBuilder`1.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data labels.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1\">\n            <summary>\n            Defines the fluent interface for configuring the chart labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.#ctor(Kendo.Mvc.UI.ChartLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1\"/> class.\n            </summary>\n            <param name=\"chartLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Font(System.String)\">\n            <summary>\n            Sets the labels font\n            </summary>\n            <param name=\"font\">The labels font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Labels(labels => labels\n                              .Font(\"14px Arial,Helvetica,sans-serif\")\n                              .Visible(true)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Visible(System.Boolean)\">\n            <summary>\n            Sets the labels visibility\n            </summary>\n            <param name=\"visible\">The labels visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Labels(labels => labels\n                              .Visible(true)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Background(System.String)\">\n            <summary>\n            Sets the labels background color\n            </summary>\n            <param name=\"background\">The labels background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Background(\"Red\")\n                                .Visible(true);\n                            );\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Color(System.String)\">\n            <summary>\n            Sets the labels text color\n            </summary>\n            <param name=\"color\">The labels text color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Color(\"Red\")\n                                .Visible(true);\n                            );\n                      )    \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the labels margin\n            </summary>\n            <param name=\"top\">The labels top margin.</param>\n            <param name=\"right\">The labels right margin.</param>\n            <param name=\"bottom\">The labels bottom margin.</param>\n            <param name=\"left\">The labels left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Margin(0, 5, 5, 0)\n                                .Visible(true);\n                            );\n                      ) \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Margin(System.Int32)\">\n            <summary>\n            Sets the labels margin\n            </summary>\n            <param name=\"margin\">The labels margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Margin(20)\n                                .Visible(true);\n                            );\n                      ) \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the labels padding\n            </summary>\n            <param name=\"top\">The labels top padding.</param>\n            <param name=\"right\">The labels right padding.</param>\n            <param name=\"bottom\">The labels bottom padding.</param>\n            <param name=\"left\">The labels left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                           .Bar(s => s.Sales)\n                           .Labels(labels => labels\n                                .Padding(0, 5, 5, 0)\n                                .Visible(true);\n                           );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Padding(System.Int32)\">\n            <summary>\n            Sets the labels padding\n            </summary>\n            <param name=\"padding\">The labels padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                           .Bar(s => s.Sales)\n                           .Labels(labels => labels\n                                .Padding(20)\n                                .Visible(true);\n                           );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the labels border\n            </summary>\n            <param name=\"width\">The labels border width.</param>\n            <param name=\"color\">The labels border color (CSS syntax).</param>\n            <param name=\"dashType\">The labels border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                           .Bar(s => s.Sales)\n                           .Labels(labels => labels\n                                .Border(1, \"Red\", ChartDashType.Dot)\n                                .Visible(true);\n                           );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the labels border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Format(System.String)\">\n            <summary>\n            Sets the labels format.\n            </summary>\n            <param name=\"format\">The labels format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Format(\"{0:C}\")\n                                .Visible(true);\n                            );\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Template(System.String)\">\n            <summary>\n            Sets the labels template.\n            </summary>\n            <param name=\"template\">The labels template.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Template(\"${TotalSales}\")\n                                .Visible(true);\n                            );\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Opacity(System.Double)\">\n            <summary>\n            Sets the labels opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Opacity(0.5)\n                                .Visible(true);\n                            );\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLabelsBuilderBase`1.Rotation(System.Int32)\">\n            <summary>\n            Sets the labels text rotation\n            </summary>\n            <param name=\"rotation\">The labels text rotation.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                            .Bar(s => s.Sales)\n                            .Labels(labels => labels\n                                .Rotation(45)\n                                .Visible(true);\n                            );\n                      )    \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartFunnelLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartFunnelLabels\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder.Align(Kendo.Mvc.UI.ChartFunnelLabelsAlign)\">\n            <summary>\n            Sets the labels align\n            </summary>\n            <param name=\"align\">The labels align.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Funnel(p => p.Sales)\n                          .Labels(labels => labels\n                              .Align(ChartFunnelLabelsAlign.Center)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartFunnelLabelsBuilder.Position(Kendo.Mvc.UI.ChartFunnelLabelsPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Funnel(p => p.Sales)\n                          .Labels(labels => labels\n                              .Position(ChartFunnelLabelsPosition.Center)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the error bars.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ErrorBarsBuilderBase`2.#ctor(`1)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ErrorBarsBuilderBase&lt;TBuilder&gt;\"/> class.\n            </summary>\n            <param name=\"errorBars\">The error bars configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ErrorBarsBuilderBase`2.Color(System.String)\">\n            <summary>\n            Sets the error bars color.\n            </summary>\n            <param name=\"color\">The error bars color.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Color(&quot;red&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Color(&quot;red&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ErrorBarsBuilderBase`2.EndCaps(System.Boolean)\">\n            <summary>\n            Sets a value indicating if the end caps should be shown.\n            </summary>\n            <param name=\"endCaps\">A value indicating if the end caps should be shown.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.EndCaps(&quot;false&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.EndCaps(&quot;false&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ErrorBarsBuilderBase`2.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Configures the error bars lines.\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <param name=\"color\">The line color.</param>\n            <param name=\"dashType\">The line dash type.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Line(2, &quot;red&quot;, ChartDashType.Dot))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Line(2, &quot;red&quot;, ChartDashType.Dot))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ErrorBarsBuilderBase`2.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartLineBuilderBase})\">\n            <summary>\n            Configures the error bars lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Line(l =&gt; l.Width(2)))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Line(l =&gt; l.Width(2)))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.#ctor(Kendo.Mvc.UI.CategoricalErrorBars)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder\"/> class.\n            </summary>\n            <param name=\"errorBars\">The error bars.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.Value(System.String)\">\n            <summary>\n            Sets the error bars value.\n            </summary>\n            <param name=\"value\">The error bars value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(&quot;stderr&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(&quot;stderr&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.Value(System.Double)\">\n            <summary>\n            Sets the error bars difference from the point value.\n            </summary>\n            <param name=\"value\">The error bars difference from the point value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(1))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(1))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.Value(System.Double,System.Double)\">\n            <summary>\n            Sets the error bars low and high value difference from the point value.\n            </summary>\n            <param name=\"lowValue\">The error bar low value difference from point value.</param>\n            <param name=\"highValue\">The error bar high value difference from point value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(1, 2))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(1, 2))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.Value(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets a handler function  that returns the error bars value.\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code that returns the error bars value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(@&lt;text&gt;\n                                            function(data) {\n                                                var value = data.value,\n                                                    lowPercentage = value * 0.05,\n                                                    highPercentage = value * 0.1;                                    \n                                                return [lowPercentage, highPercentage];\n                                             }\n                             &lt;/text&gt;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Value(o =>\n                                   @&quot;function(data) {\n                                       var value = data.value,\n                                           lowPercentage = value * 0.05,\n                                           highPercentage = value * 0.1;                                    \n                                       return [lowPercentage, highPercentage];\n                                     }&quot;\n                             ))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.LowField(System.String)\">\n            <summary>\n            Sets the error bars low field.\n            </summary>\n            <param name=\"lowField\">The error bars low field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.LowField(&quot;Low&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.LowField(&quot;Low&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.HighField(System.String)\">\n            <summary>\n            Sets the error bars high field.\n            </summary>\n            <param name=\"highField\">The error bars high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.HighField(&quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.HighField(&quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CategoricalErrorBarsBuilder.Fields(System.String,System.String)\">\n            <summary>\n            Sets the error bars low and high fields.\n            </summary>\n            <param name=\"lowField\">The error bars low field.</param>\n            <param name=\"highField\">The error bars high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Fields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Bar(s =&gt; s.Sales)\n                            .ErrorBars(e =&gt; e.Fields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.XValue\">\n            <summary>\n            Gets or sets the error bars X value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.YValue\">\n            <summary>\n            Gets or sets the error bars Y value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.XLowMember\">\n            <summary>\n            Gets the model data x axis error low member name.\n            </summary>\n            <value>The model data x axis error low member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.XHighMember\">\n            <summary>\n            Gets the model data x axis error high member name.\n            </summary>\n            <value>The model data x axis error high member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.YLowMember\">\n            <summary>\n            Gets the model data y axis error low member name.\n            </summary>\n            <value>The model data y axis error low member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ScatterErrorBars.YHighMember\">\n            <summary>\n            Gets the model data y axis error high member name.\n            </summary>\n            <value>The model data y axis error high member name.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the error bars.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.#ctor(Kendo.Mvc.UI.ScatterErrorBars)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder\"/> class.\n            </summary>\n            <param name=\"errorBars\">The error bars.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XValue(System.String)\">\n            <summary>\n            Sets the error bars x value.\n            </summary>\n            <param name=\"xValue\">The error bars x value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(&quot;stderr&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(&quot;stderr&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XValue(System.Double)\">\n            <summary>\n            Sets the error bars difference from the point x value.\n            </summary>\n            <param name=\"xValue\">The error bars difference from the point x value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(1))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(1))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XValue(System.Double,System.Double)\">\n            <summary>\n            Sets the error bars low and high value difference from the point x value.\n            </summary>\n            <param name=\"xLowValue\">The error bar low value difference from point x value.</param>\n            <param name=\"xHighValue\">The error bar high value difference from point x value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(1, 2))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(1, 2))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XValue(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets a handler function that returns the error bars x value.\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code that returns the error bars x value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(@&lt;text&gt;\n                                            function(data) {\n                                                var value = data.value.x,\n                                                    lowPercentage = value * 0.05,\n                                                    highPercentage = value * 0.1;                                    \n                                                return [lowPercentage, highPercentage];\n                                             }\n                             &lt;/text&gt;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XValue(o =>\n                                   @&quot;function(data) {\n                                       var value = data.value.x,\n                                           lowPercentage = value * 0.05,\n                                           highPercentage = value * 0.1;                                    \n                                       return [lowPercentage, highPercentage];\n                                     }&quot;\n                             ))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YValue(System.String)\">\n            <summary>\n            Sets the error bars y value.\n            </summary>\n            <param name=\"yValue\">The error bars y value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(&quot;stderr&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(&quot;stderr&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YValue(System.Double)\">\n            <summary>\n            Sets the error bars difference from the point y value.\n            </summary>\n            <param name=\"yValue\">The error bars difference from the point y value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(1))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(1))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YValue(System.Double,System.Double)\">\n            <summary>\n            Sets the error bars low and high value difference from the point y value.\n            </summary>\n            <param name=\"yLowValue\">The error bar low value difference from point y value.</param>\n            <param name=\"yHighValue\">The error bar high value difference from point y value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(1, 2))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(1, 2))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YValue(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets a handler function that returns the error bars y value.\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code that returns the error bars y value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(@&lt;text&gt;\n                                            function(data) {\n                                                var value = data.value.y,\n                                                    lowPercentage = value * 0.05,\n                                                    highPercentage = value * 0.1;                                    \n                                                return [lowPercentage, highPercentage];\n                                             }\n                             &lt;/text&gt;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YValue(o =>\n                                   @&quot;function(data) {\n                                       var value = data.value.y,\n                                           lowPercentage = value * 0.05,\n                                           highPercentage = value * 0.1;                                    \n                                       return [lowPercentage, highPercentage];\n                                     }&quot;\n                             ))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XLowField(System.String)\">\n            <summary>\n            Sets the error bars x low field.\n            </summary>\n            <param name=\"xLowField\">The error bars x low field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XLowField(&quot;Low&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XLowField(&quot;Low&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XHighField(System.String)\">\n            <summary>\n            Sets the error bars x high field.\n            </summary>\n            <param name=\"xHighField\">The error bars x high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XHighField(&quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XHighField(&quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.XFields(System.String,System.String)\">\n            <summary>\n            Sets the error bars x low and high fields.\n            </summary>\n            <param name=\"xLowField\">The error bars x low field.</param>\n            <param name=\"xHighField\">The error bars x high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XFields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.XFields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YLowField(System.String)\">\n            <summary>\n            Sets the error bars y low field.\n            </summary>\n            <param name=\"yLowField\">The error bars y low field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YLowField(&quot;Low&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YLowField(&quot;Low&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YHighField(System.String)\">\n            <summary>\n            Sets the error bars y high field.\n            </summary>\n            <param name=\"yHighField\">The error bars y high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YHighField(&quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YHighField(&quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ScatterErrorBarsBuilder.YFields(System.String,System.String)\">\n            <summary>\n            Sets the error bars y low and high fields.\n            </summary>\n            <param name=\"yLowField\">The error bars y low field.</param>\n            <param name=\"yHighField\">The error bars y high field.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YFields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"chart\")\n                        .Series(series =&gt; series\n                            .Scatter(s =&gt; s.x, s =&gt; s.y)\n                            .ErrorBars(e =&gt; e.YFields(&quot;Low&quot;, &quot;High&quot;))\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPanesFactory\">\n            <summary>\n            Creates panes for the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPanesFactory.#ctor(Kendo.Mvc.UI.IChart)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPanesFactory\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPanesFactory.Add\">\n            <summary>\n            Defines a chart pane.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPanesFactory.Add(System.String)\">\n            <summary>\n            Defines a named chart pane.\n            </summary>\n            <param name=\"name\">\n            The unique pane name\n            </param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartPanesFactory.Container\">\n            <summary>\n            The parent Chart\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPaneBuilder\">\n            <summary>\n            Defines the fluent interface for configuring Pane.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.#ctor(Kendo.Mvc.UI.ChartPane)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPaneBuilder\"/> class.\n            </summary>\n            <param name=\"pane\">The phart pane.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Title(System.String)\">\n            <summary>\n            Sets the title of the pane.\n            </summary>\n            <param name=\"title\">The pane title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Title(System.Action{Kendo.Mvc.UI.Fluent.ChartTitleBuilder})\">\n            <summary>\n            Defines the title of the pane.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the pane.\n            </summary>\n            <param name=\"height\">The pane height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Background(System.String)\">\n            <summary>\n            Sets the pane background color\n            </summary>\n            <param name=\"background\">The background color.</param>       \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the pane margin\n            </summary>\n            <param name=\"top\">The pane top margin.</param>\n            <param name=\"right\">The pane right margin.</param>\n            <param name=\"bottom\">The pane bottom margin.</param>\n            <param name=\"left\">The pane left margin.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the pane margin\n            </summary>\n            <param name=\"margin\">The pane margin.</param>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the pane padding\n            </summary>\n            <param name=\"top\">The pane top padding.</param>\n            <param name=\"right\">The pane right padding.</param>\n            <param name=\"bottom\">The pane bottom padding.</param>\n            <param name=\"left\">The pane left padding.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the pane padding\n            </summary>\n            <param name=\"padding\">The pane padding.</param>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the pane border\n            </summary>\n            <param name=\"width\">The pane border width.</param>\n            <param name=\"color\">The pane border color.</param>\n            <param name=\"dashType\">The pane dash type.</param>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the pane border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartPaneBuilder.Pane\">\n            <summary>\n            Gets or sets the Pane.\n            </summary>\n            <value>The Pane.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.#ctor(Kendo.Mvc.UI.ChartAxisBaseUnitSteps)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder\"/> class.\n            </summary>\n            <param name=\"baseUnitSteps\">The axis base unit steps.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Seconds(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Seconds and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Seconds.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Seconds(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Minutes(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Minutes and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Minutes.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Minutes(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Hours(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Hours and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Hours.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Hours(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Days(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Days and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Days.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Days(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Weeks(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Weeks and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Weeks.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Weeks(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Months(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Months and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Months.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Months(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder.Years(System.Int32[])\">\n            <summary>\n            The discrete BaseUnitStep values when BaseUnit is set to Years and\n            BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"steps\">The discrete steps when BaseUnit is set to Years.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                .Name(\"chart\")\n                .Title(\"Units sold\")\n                .Series(series => {\n                    series\n                        .Column(new int[] { 20, 40, 45, 30, 50 });\n                })\n                .CategoryAxis(axis => axis\n                    .Date()\n                    .BaseUnit(ChartAxisBaseUnit.Fit)\n                    .AutoBaseUnitSteps(steps => steps.Years(1, 2))\n                )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder\">\n            <summary>\n            Defines the fluent interface for configuring bubble series highlight.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder\">\n            <summary>\n            Defines the fluent interface for configuring series highlight.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder.#ctor(Kendo.Mvc.UI.ChartSeriesHighlight)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder\"/> class.\n            </summary>\n            <param name=\"highlight\">The series highlight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the highlight visibility\n            </summary>\n            <param name=\"visible\">The highlight visibility.</param>       \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartSeriesHighlightBuilder.Highlight\">\n            <summary>\n            Gets or sets the highlight\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder.#ctor(Kendo.Mvc.UI.ChartSeriesHighlight)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder\"/> class.\n            </summary>\n            <param name=\"highlight\">The series highlight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder.Border(System.Int32)\">\n            <summary>\n            Sets the bubble highlight border width.\n            The color is computed automatically from the base point color.\n            </summary>\n            <param name=\"width\">The bubble highlight border width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the bubble highlight border width.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the highlight border\n            </summary>\n            <param name=\"configurator\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the bubble highlight opacity.\n            </summary>\n            <param name=\"opacity\">The bubble highlight opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder\">\n            <summary>\n            Defines the fluent interface for configuring pie series highlight.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.#ctor(Kendo.Mvc.UI.ChartSeriesHighlight)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder\"/> class.\n            </summary>\n            <param name=\"highlight\">The series highlight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.Border(System.Int32)\">\n            <summary>\n            Sets the bubble highlight border width.\n            The color is computed automatically from the base point color.\n            </summary>\n            <param name=\"width\">The bubble highlight border width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the bubble highlight border width.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the highlight border\n            </summary>\n            <param name=\"configurator\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the bubble highlight opacity.\n            </summary>\n            <param name=\"opacity\">The bubble highlight opacity.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder.Color(System.String)\">\n            <summary>\n            Sets the pie highlight color.\n            </summary>\n            <param name=\"color\">The highlight color</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder\">\n            <summary>\n            Defines the fluent interface for configuring candlestick series highlight.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.#ctor(Kendo.Mvc.UI.ChartSeriesHighlight)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder\"/> class.\n            </summary>\n            <param name=\"highlight\">The series highlight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Border(System.Int32)\">\n            <summary>\n            Sets the bubble highlight border width.\n            The color is computed automatically from the base point color.\n            </summary>\n            <param name=\"width\">The bubble highlight border width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the bubble highlight border width.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the highlight border\n            </summary>\n            <param name=\"configurator\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the bubble highlight opacity.\n            </summary>\n            <param name=\"opacity\">The bubble highlight opacity.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Line(System.Int32)\">\n            <summary>\n            Configures the candlestick highlight line width.\n            </summary>\n            <param name=\"width\">The lines width.</param>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Line(System.Int32,System.String)\">\n            <summary>\n            Configures the candlestick highlight lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder})\">\n            <summary>\n            Configures the candlestick highlight chart lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder\">\n            <summary>\n            Defines the fluent interface for configuring OHLC series highlight.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder.#ctor(Kendo.Mvc.UI.ChartSeriesHighlight)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder\"/> class.\n            </summary>\n            <param name=\"highlight\">The series highlight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder.Line(System.Int32)\">\n            <summary>\n            Configures the candlestick highlight line width.\n            </summary>\n            <param name=\"width\">The lines width.</param>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder.Line(System.Int32,System.String)\">\n            <summary>\n            Configures the candlestick highlight lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaLineBuilder})\">\n            <summary>\n            Configures the OHLC highlight chart lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder.Highlight\">\n            <summary>\n            Gets or sets the highlight\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartLine\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairBuilder.#ctor(Kendo.Mvc.UI.ChartAxisCrosshair)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLineBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairBuilder.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder})\">\n            <summary>\n            Configures the crosshair tooltip\n            </summary>\n            <param name=\"configurator\">The tooltip configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the crosshair visible\n            </summary>\n            <param name=\"visible\">The crosshair visible.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example> \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.#ctor(Kendo.Mvc.UI.ChartAxisCrosshairTooltip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder\"/> class.\n            </summary>\n            <param name=\"tooltip\">The chart crosshair tooltip.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Font(System.String)\">\n            <summary>\n            Sets the tooltip font\n            </summary>\n            <param name=\"font\">The tooltip font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                           .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Font(\"14px Arial,Helvetica,sans-serif\")\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the tooltip visible\n            </summary>\n            <param name=\"visible\">The tooltip visible.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Background(System.String)\">\n            <summary>\n            Sets the tooltip background\n            </summary>\n            <param name=\"background\">The tooltip background.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                 .Visible(true)\n                                 .Tooltip(tooltip => tooltip\n                                      .Background(\"red\")\n                                      .Visible(true)\n                                 )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Color(System.String)\">\n            <summary>\n            Sets the tooltip text color\n            </summary>\n            <param name=\"color\">\n            The tooltip text color.\n            The default is the same as the series labels color.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .color(\"red\")\n                                     .Visible(true)\n                                )\n                          )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the tooltip padding\n            </summary>\n            <param name=\"top\">The tooltip top padding.</param>\n            <param name=\"right\">The tooltip right padding.</param>\n            <param name=\"bottom\">The tooltip bottom padding.</param>\n            <param name=\"left\">The tooltip left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Padding(0, 5, 5, 0)\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the tooltip padding\n            </summary>\n            <param name=\"padding\">The tooltip padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Padding(20)\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the tooltip border\n            </summary>\n            <param name=\"width\">The tooltip border width.</param>\n            <param name=\"color\">The tooltip border color (CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Border(1, \"Red\")\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the tooltip border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Format(System.String)\">\n            <summary>\n            Sets the tooltip format\n            </summary>\n            <param name=\"format\">The tooltip format.</param>\n            <remarks>\n            The format string is ignored if a template is set.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Format(\"{0:C}\")\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Template(System.String)\">\n            <summary>\n            Sets the tooltip template\n            </summary>\n            <param name=\"template\">The tooltip template.</param>\n            <value>\n            A client-side template for the tooltip.\n            <list type=\"bullet\">\n                <listheader>\n                Available template variables:\n                </listheader>\n                <item>value - the point value</item>\n            </list>\n            </value>\n            <remarks>\n            The format string is ignored if a template is set.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Template(\"|&lt;#= value #|&gt;\")\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisCrosshairTooltipBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the tooltip opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => {\n                           .series.Bar(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name(\"World\");\n                           .series.Bar(new double[] { 67.96, 68.93, 75, 74, 78 }).Name(\"United States\");\n                      })\n                      .CategoryAxis(axis => axis\n                           .Categories(\"2005\", \"2006\", \"2007\", \"2008\", \"2009\")\n                           .Crosshair(crosshair => crosshair\n                                .Visible(true)\n                                .Tooltip(tooltip => tooltip\n                                     .Opacity(0.5)\n                                     .Visible(true)\n                                )\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bullet series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartBulletSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Gap(System.Double)\">\n            <summary>\n            Set distance between category clusters. \n            <param name=\"gap\">\n            A value of 1 means that there is a total of 1 bullet width / vertical bullet height between categories.\n            The distance is distributed evenly on each side.\n            The default value is 1.5\n            </param>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Gap(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Spacing(System.Double)\">\n            <summary>\n            Sets a value indicating the distance between bullets / categories.\n            </summary>\n            <param name=\"spacing\">\n            Value of 1 means that the distance between bullets is equal to their width.\n            The default value is 0\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Spacing(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the bullets border.\n            </summary>\n            <param name=\"width\">The bullets border width.</param>\n            <param name=\"color\">The bullets border color (CSS syntax).</param>\n            <param name=\"dashType\">The bullets border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Bullet(s => s.Current, s => s.Target).Border(\"1\", \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Overlay(Kendo.Mvc.UI.ChartBarSeriesOverlay)\">\n            <summary>\n            Sets the bullet effects overlay\n            </summary>\n            <param name=\"overlay\">The bullet effects overlay. The default is ChartBarSeriesOverlay.Glass</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Bullet(s => s.Current, s => s.Target).Overlay(ChartBarSeriesOverlay.None))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Name(System.String)\">\n            <summary>\n            Sets the series title displayed in the legend.\n            </summary>\n            <param name=\"text\">The title.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Name(\"Sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Opacity(System.Double)\">\n            <summary>\n            Sets the series opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Opacity(0.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Color(System.String)\">\n            <summary>\n            Sets the bullet fill color\n            </summary>\n            <param name=\"color\">The bar bullet color (CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Bullet(s => s.Current, s => s.Target).Color(\"Red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartTooltipBuilder})\">\n            <summary>\n            Configure the data point tooltip for the series.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target)\n                           .Tooltip(tooltip =>\n                           {\n                               tooltip.Visible(true).Format(\"{0:C}\");\n                           })\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Tooltip(System.Boolean)\">\n            <summary>\n            Sets the data point tooltip visibility.\n            </summary>\n            <param name=\"visible\">\n            A value indicating if the data point tooltip should be displayed.\n            The tooltip is not visible by default.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Tooltip(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Axis(System.String)\">\n            <summary>\n            Sets the axis name to use for this series.\n            </summary>\n            <param name=\"axis\">The axis name for this series.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target).Name(\"Sales\").Axis(\"secondary\"))\n                       .ValueAxis(axis => axis.Numeric())\n                       .ValueAxis(axis => axis.Numeric(\"secondary\"))\n                       .CategoryAxis(axis => axis.AxisCrossingValue(0, 10))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Target(System.Action{Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder})\">\n            <summary>\n            Configure the data point tooltip for the series.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Bullet(s => s.Current, s => s.Target)\n                           .Tooltip(tooltip =>\n                           {\n                               tooltip.Visible(true).Format(\"{0:C}\");\n                           })\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartBulletSeriesBuilder`1.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart target.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder.#ctor(Kendo.Mvc.UI.ChartBulletTarget)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder\"/> class.\n            </summary>\n            <param name=\"chartTarget\">The chart target configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the target width.\n            </summary>\n            <param name=\"width\">The target width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bullet(s => s.Current, s => s.Target)\n                          .Target(target => target\n                              .Width(10)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the target border\n            </summary>\n            <param name=\"width\">The target border width.</param>\n            <param name=\"color\">The target border color (CSS syntax).</param>\n            <param name=\"dashType\">The target border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bullet(s => s.Current, s => s.Target)\n                          .Target(target => target\n                               .Border(1, \"Red\", ChartDashType.Dot)\n                           );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the markers border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBulletTargetBuilder.Color(System.String)\">\n            <summary>\n            Sets the color of the bullet chart target.\n            </summary>\n            <param name=\"color\">The color of the bullet chart target.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bullet(s => s.Current, s => s.Target)\n                          .Target(target => target\n                               .Color(\"Red\");\n                           );\n                        )\n                        .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.#ctor(Kendo.Mvc.UI.ChartAxisSelection)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder\"/> class.\n            </summary>\n            <param name=\"chartLegend\">The chart legend.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.From(System.DateTime)\">\n            <summary>\n            Sets the selection lower boundary\n            </summary>\n            <param name=\"fromDate\">The selection lower boundary.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =>\n                          axis.Select(select => select.From(from))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.From(System.Double)\">\n            <summary>\n            Sets the selection lower boundary\n            </summary>\n            <param name=\"fromDate\">The selection lower boundary.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select =>\n                          select.From(from).To(to)\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.To(System.DateTime)\">\n            <summary>\n            Sets the selection upper boundary\n            </summary>\n            <param name=\"toDate\">The selection upper boundary.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select =>\n                          select.To(toDate).To(toDate)\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.To(System.Double)\">\n            <summary>\n            Sets the selection upper boundary\n            </summary>\n            <param name=\"toDate\">The selection upper boundary.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select => select.To(to).To(to)\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder.Mousewheel(System.Action{Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder})\">\n            <summary>\n            Configures the mousewheel zoom options\n            </summary>\n            <param name=\"configurator\">The mousewheel zoom options</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder.#ctor(Kendo.Mvc.UI.ChartSelectionMousewheel)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder\"/> class.\n            </summary>\n            <param name=\"selectionMousewheel\">The mousewheel zoom settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder.Reverse\">\n            <summary>\n            Reverses the mousewheel direction.\n            Rotating the wheel down will shrink the selection, rotating up will expand it.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select => select\n                          .From(fromDate).To(toDate)\n                          .Mousewheel(mw => mw.Reverse())\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder.Reverse(System.Boolean)\">\n            <summary>\n            Sets a value indicating if the mousewheel should be reversed.\n            </summary>\n            <param name=\"reverse\">\n            true: scrolling up shrinks the selection.\n            false: scrolling down expands the selection.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select => select\n                          .From(fromDate).To(toDate)\n                          .Mousewheel(mw => mw.Reverse(true))\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSelectionMousewheelBuilder.Zoom(Kendo.Mvc.UI.ChartZoomDirection)\">\n            <summary>\n            Sets the mousehweel zoom type\n            </summary>\n            <param name=\"fromDate\">The mousehweel zoom type. Default value is ChartZoomDirection.Both</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.Select(select =>\n                          select.From(from).To(to)\n                          .Mousewheel(mw => mw.Zoom(ChartZoomDirection.Left))\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartLegendLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartLegendLabelsBuilder&lt;TBuilder&gt;\"/> class.\n            </summary>\n            <param name=\"legendLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder.Font(System.String)\">\n            <summary>\n            Sets the labels font\n            </summary>\n            <param name=\"font\">The labels font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend\n                            .Labels(labels => labels\n                                .Font(\"14px Arial,Helvetica,sans-serif\")\n                            )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder.Color(System.String)\">\n            <summary>\n            Sets the labels text color\n            </summary>\n            <param name=\"color\">The labels text color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend\n                            .Labels(labels => labels\n                                .Color(\"Red\")\n                            )\n                      )    \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder.Template(System.String)\">\n            <summary>\n            Sets the labels template.\n            </summary>\n            <param name=\"template\">The labels template.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend\n                            .Labels(labels => labels\n                                .Template(\"${TotalSales}\")\n                            )\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart note label.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder.#ctor(Kendo.Mvc.UI.ChartNoteLabel)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder\"/> class.\n            </summary>\n            <param name=\"ChartNoteLabel\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder.Position(Kendo.Mvc.UI.ChartNoteLabelPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note\n                               .Label(label => label\n                                    .Position(ChartNoteLabelPosition.Inside)\n                               )\n                          )\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder.Text(System.String)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"text\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note\n                               .Data(data =>\n                               {\n                                   data.Add().Value(1).Text(\"A\");\n                                   data.Add().Value(2).Text(\"B\");\n                               })\n                          )\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart note line.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder.#ctor(Kendo.Mvc.UI.ChartNoteLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder\"/> class.\n            </summary>\n            <param name=\"line\">The connectors configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the line width\n            </summary>\n            <param name=\"width\">The line width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Note(note => note.Line(line => line.Width(2)))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder.Color(System.String)\">\n            <summary>\n            Sets the line color\n            </summary>\n            <param name=\"color\">The line color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Note(note => note.Line(line => line.Color(\"red\")))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder.Length(System.Int32)\">\n            <summary>\n            Sets the connectors padding\n            </summary>\n            <param name=\"padding\">The connectors padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Note(note => note.Line(line => line.Length(15)))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNoteBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart note.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteBuilder.#ctor(Kendo.Mvc.UI.ChartNote)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNoteBuilder\"/> class.\n            </summary>\n            <param name=\"note\">The note configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteBuilder.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder})\">\n            <summary>\n            Sets the line configuration of the note\n            </summary>\n            <param name=\"configurator\">The line configuration.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note\n                                .Line(line => line.Width(2))\n                          )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteBuilder.Label(System.Action{Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder})\">\n            <summary>\n            Sets the label configuration of the note\n            </summary>\n            <param name=\"configurator\">The label configurator.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note\n                               .Label(label => label.Position(ChartNoteLabelPosition.Inside))\n                          )\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteBuilder.Icon(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Sets the icon configuration of the note\n            </summary>\n            <param name=\"configurator\">The icon configuration.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note.Icon(icon => icon.Size(10)))\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNoteBuilder.Position(System.Nullable{Kendo.Mvc.UI.ChartNotePosition})\">\n            <summary>\n            Sets the note position.\n            </summary>\n            <param name=\"position\">The note position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note.Position(ChartNotePosition.Left))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNotesFactory\">\n            <summary>\n            Creates items for the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNotesFactory\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesFactory.#ctor(System.Collections.Generic.IList{Kendo.Mvc.UI.ChartAxisNoteItem})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartNoteItemFactory\"/> class.\n            </summary>\n            <param name=\"container\">The contener of the item.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesFactory.Add\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNoteItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart note.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNoteItemBuilder.#ctor(Kendo.Mvc.UI.ChartAxisNoteItem)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNoteItemBuilder\"/> class.\n            </summary>\n            <param name=\"ChartAxisNoteItem\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNoteItemBuilder.Value(System.Object)\">\n            <summary>\n            Sets the note value.\n            </summary>\n            <param name=\"value\">The value of the note.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(note => note\n                               .Data(items =>\n                               {\n                                   data.Add().Value(1);\n                                   data.Add().Value(2);\n                               })\n                          )\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring notes of the axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.#ctor(Kendo.Mvc.UI.ChartAxisNotes)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder\"/> class.\n            </summary>\n            <param name=\"notes\">The notes.</param>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Data(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisNotesFactory})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartNoteLineBuilder})\">\n            <summary>\n            Sets the line configuration of the note\n            </summary>\n            <param name=\"configurator\">The line configuration.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(notes => notes\n                                .Line(line => line.Width(2))\n                          )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Label(System.Action{Kendo.Mvc.UI.Fluent.ChartNoteLabelBuilder})\">\n            <summary>\n            Sets the label configuration of the note\n            </summary>\n            <param name=\"configurator\">The label configurator.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(notes => notes\n                               .Label(label => label.Position(ChartNoteLabelPosition.Inside))\n                          )\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Icon(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Sets the icon configuration of the note\n            </summary>\n            <param name=\"configurator\">The icon configuration.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(notes => notes.Icon(icon => icon.Size(10)))\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Position(System.Nullable{Kendo.Mvc.UI.ChartNotePosition})\">\n            <summary>\n            Sets the note position.\n            </summary>\n            <param name=\"position\">The note position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ValueAxis(a => a.Numeric()\n                          .Note(notes => notes.Position(ChartNotePosition.Left))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder.Notes\">\n            <summary>\n            Gets or sets the axis.\n            </summary>\n            <value>The axis.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLineBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartLine\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLineBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLineBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the line visibility\n            </summary>\n            <param name=\"visible\">The line visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.Visible(true)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder.Skip(System.Int32)\">\n            <summary>\n            Sets the line skip\n            </summary>\n            <param name=\"skip\">The line skip.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.Skip(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder.Step(System.Int32)\">\n            <summary>\n            Sets the line step\n            </summary>\n            <param name=\"step\">The line step.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorGridLines(lines => lines.Step(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder.Skip(System.Int32)\">\n            <summary>\n            Sets the line skip\n            </summary>\n            <param name=\"skip\">The line skip.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MinorGridLines(lines => lines.Skip(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder.Step(System.Int32)\">\n            <summary>\n            Sets the line step\n            </summary>\n            <param name=\"step\">The line step.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MinorGridLines(lines => lines.Step(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder.Skip(System.Int32)\">\n            <summary>\n            Sets the line skip\n            </summary>\n            <param name=\"skip\">The line skip.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MinorTicks(lines => lines.Skip(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMinorTicksBuilder.Step(System.Int32)\">\n            <summary>\n            Sets the line step\n            </summary>\n            <param name=\"step\">The line step.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MinorTicks(lines => lines.Step(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder\"/> class.\n            </summary>\n            <param name=\"chartLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder.Skip(System.Int32)\">\n            <summary>\n            Sets the line skip\n            </summary>\n            <param name=\"skip\">The line skip.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorTicks(lines => lines.Skip(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMajorTicksBuilder.Step(System.Int32)\">\n            <summary>\n            Sets the line step\n            </summary>\n            <param name=\"step\">The line step.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis.MajorTicks(lines => lines.Step(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bar series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartBoxPlotSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Aggregate(System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate})\">\n            <summary>\n            Sets the aggregate function for date series.\n            This function is used when a category (an year, month, etc.) contains two or more points.\n            </summary>\n            <param name=\"lower\">Lower aggregate name.</param>\n            <param name=\"q1\">Q1 aggregate name.</param>\n            <param name=\"median\">Median aggregate name.</param>\n            <param name=\"q3\">Q3 aggregate name.</param>\n            <param name=\"upper\">Upper aggregate name.</param>\n            <param name=\"mean\">Mean aggregate name.</param>\n            <param name=\"outliers\">Outliers aggregate name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper)\n                             .Aggregate(\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.Max,\n                                ChartSeriesAggregate.First\n                              )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Gap(System.Double)\">\n            <summary>\n            Set distance between category clusters. \n            <param name=\"gap\">\n            A value of 1 means that there is a total of 1 point width between categories. \n            The distance is distributed evenly on each side.\n            The default value is 1\n            </param>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper).Gap(1.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Spacing(System.Double)\">\n            <summary>\n            Sets a value indicating the distance between points in the same category.\n            </summary>\n            <param name=\"spacing\">\n            Value of 1 means that the distance between points in the same category.\n            The default value is 0.3\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper).Spacing(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the points border\n            </summary>\n            <param name=\"width\">The points border width.</param>\n            <param name=\"color\">The points border color (CSS syntax).</param>\n            <param name=\"dashType\">The points border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper).Border(\"1\", \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Configures the ohlc chart lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>\n            <param name=\"dashType\">The lines dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper)        \n                          .Line(2, \"red\", ChartDashType.Dot)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Line(System.Int32)\">\n            <summary>\n            Configures the ohlc line width.\n            </summary>\n            <param name=\"width\">The lines width.</param>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Line(System.Int32,System.String)\">\n            <summary>\n            Configures the ohlc lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartLineBuilder})\">\n            <summary>\n            Configures the ohlc chart lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper)        \n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Outliers(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Configures the box plot chart outliers.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper)    \n                           .Outliers(outliers => outliers\n                               .Type(ChartMarkerShape.Triangle)\n                           );\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Outliers(System.Boolean)\">\n            <summary>\n            Sets the visibility of box plot chart outliers.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is true.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper) \n                           .Outliers(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Extremum(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Configures the box plot chart extremum.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper)    \n                           .Extremum(extremum => extremum\n                               .Type(ChartMarkerShape.Triangle)\n                           );\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBoxPlotSeriesBuilder`1.Extremum(System.Boolean)\">\n            <summary>\n            Sets the visibility of box plot chart extremum.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is true.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .BoxPlot(s => s.Lower, s => s.Q1, s => s.Median, s => s.Q3, s => s.Upper) \n                           .Extremum(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAxisTickType\">\n            <summary>\n            Defines the position of axis ticks\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTickType.Outside\">\n            <summary>\n            The tick is drawn on the outer side of the axis\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTickType.None\">\n            <summary>\n            No tick is drawn\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartBarGradient\">\n            <summary>\n            Defines the gradient of bar/column charts\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarGradient.Glass\">\n            <summary>\n            The bars have glass effect overlay.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarGradient.None\">\n            <summary>\n            The bars have no effect overlay.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartBarLabelsPosition\">\n            <summary>\n            Defines the position of bar/column chart labels\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.Center\">\n            <summary>\n            The label is positioned at the bar center\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.InsideEnd\">\n            <summary>\n            The label is positioned inside, near the end of the bar\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.InsideBase\">\n            <summary>\n            The label is positioned inside, near the base of the bar \n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.OutsideEnd\">\n            <summary>\n            The label is positioned outside, near the end of the bar.\n            Not applicable for stacked bar series.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartLegendPosition\">\n            <summary>\n            Defines the position chart legend\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLegendPosition.Top\">\n            <summary>\n            The legend is positioned on the top\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLegendPosition.Bottom\">\n            <summary>\n            The legend is positioned on the bottom\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLegendPosition.Left\">\n            <summary>\n            The legend is positioned on the left\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLegendPosition.Right\">\n            <summary>\n            The legend is positioned on the right\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLegendPosition.Custom\">\n            <summary>\n            The legend is positioned using OffsetX and OffsetY\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPointLabelsPosition\">\n            <summary>\n            Defines the position of point labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Above\">\n            <summary>\n            The label is positioned at the top of the point marker.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Right\">\n            <summary>\n            The label is positioned at the right of the point marker.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Below\">\n            <summary>\n            The label is positioned at the bottom of the point marker.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Left\">\n            <summary>\n            The label is positioned at the left of the point marker.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartLineMissingValues\">\n            <summary>\n            Defines the behavior for handling missing values in line series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineMissingValues.Interpolate\">\n            <summary>\n            The value is interpolated from neighboring points.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineMissingValues.Zero\">\n            <summary>\n            The value is assumed to be zero.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartLineMissingValues.Gap\">\n            <summary>\n            The line stops before the missing point and continues after it.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartMarkerShape\">\n            <summary>\n            Defines the shape of the marker.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartMarkerShape.Square\">\n            <summary>\n            The marker shape is square.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartMarkerShape.Triangle\">\n            <summary>\n            The marker shape is triangle.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartMarkerShape.Circle\">\n            <summary>\n            The marker shape is circle.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartTextAlignment\">\n            <summary>\n            Defines text alignment options\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartTextAlignment.Left\">\n            <summary>\n            The text is aligned to the left\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartTextAlignment.Center\">\n            <summary>\n            The text is aligned to the middle\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartTextAlignment.Right\">\n            <summary>\n            The text is aligned to the right\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartTitlePosition\">\n            <summary>\n            Defines the position chart title\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartTitlePosition.Top\">\n            <summary>\n            The title is positioned on the top\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartTitlePosition.Bottom\">\n            <summary>\n            The title is positioned on the bottom\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartDashType\">\n            <summary>\n            Specifies a line dash type.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.Solid\">\n            <summary>\n            Specifies a solid line.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.Dot\">\n            <summary>\n            Specifies a line consisting of dots.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.Dash\">\n            <summary>\n            Specifies a line consisting of dashes.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.LongDash\">\n            <summary>\n            Specifies a line consisting of a repeating pattern of long-dash.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.DashDot\">\n            <summary>\n            Specifies a line consisting of a repeating pattern of dash-dot.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.LongDashDot\">\n            <summary>\n            Specifies a line consisting of a repeating pattern of lond-dash-dot.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartDashType.LongDashDotDot\">\n            <summary>\n            Specifies a line consisting of a repeating pattern of long-dash-dot-dot.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPieSeriesOverlay\">\n            <summary>\n            Defines the available pie series effects overlays\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieSeriesOverlay.None\">\n            <summary>\n            The pies have no effect overlay\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieSeriesOverlay.SharpBevel\">\n            <summary>\n            The pie segments have sharp bevel effect overlay\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieSeriesOverlay.RoundedBevel\">\n            <summary>\n            The pie segments have sharp bevel effect overlay\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPieLabelsAlign\">\n            <summary>\n            Defines the alignment of the pie labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieLabelsAlign.Circle\">\n            <summary>\n            The labels are positioned in circle around the pie chart.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieLabelsAlign.Column\">\n            <summary>\n            The labels are positioned in columns to the left and right of the pie chart.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartScatterLineMissingValues\">\n            <summary>\n            Defines the behavior for handling missing values in scatter line series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartScatterLineMissingValues.Interpolate\">\n            <summary>\n            The value is interpolated from neighboring points.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartScatterLineMissingValues.Gap\">\n            <summary>\n            The line stops before the missing point and continues after it.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartPieLabelsPosition\">\n            <summary>\n            Defines the position of pie chart labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieLabelsPosition.Center\">\n            <summary>\n            The label is positioned at the center of the pie segment.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieLabelsPosition.InsideEnd\">\n            <summary>\n            The label is positioned inside, near the end of the pie segment.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartPieLabelsPosition.OutsideEnd\">\n            <summary>\n            The label is positioned outside, near the end of the pie segment.\n            The label and the pie segment are connected with connector line.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAxisOrientation\">\n            <summary>\n            Defines chart axis orientation\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisOrientation.Vertical\">\n            <summary>\n            The axis is verical\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisOrientation.Horizontal\">\n            <summary>\n            The axis is horizontal\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAxisTitlePosition\">\n            <summary>\n            Defines the position chart axis title\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Top\">\n            <summary>\n            The axis title is positioned on the top (work only with vertical axis)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Bottom\">\n            <summary>\n            The axis title is positioned on the bottom (work only with vertical axis)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Left\">\n            <summary>\n            The axis title is positioned on the left (work only with horizontal axis)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Right\">\n            <summary>\n            The axis title is positioned on the right (work only with horizontal axis)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisTitlePosition.Center\">\n            <summary>\n            The axis title is positioned in the center\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAreaMissingValues\">\n            <summary>\n            Defines the behavior for handling missing values in area series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaMissingValues.Interpolate\">\n            <summary>\n            The value is interpolated from neighboring points.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaMissingValues.Zero\">\n            <summary>\n            The value is assumed to be zero.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAreaMissingValues.Gap\">\n            <summary>\n            The line stops before the missing point and continues after it.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartSeriesAggregate\">\n            <summary>\n            Aggregate function for date series.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.Max\">\n            <summary>\n            The highest value for the date period\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.Min\">\n            <summary>\n            The lowest value for the date period\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.Sum\">\n            <summary>\n            The sum of all values for the date period\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.Count\">\n            <summary>\n            The number of values for the date period\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.Avg\">\n            <summary>\n            The average of all values for the date period\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesAggregate.First\">\n            <summary>\n            The first of all values for the date period\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartCategoryAxisType\">\n            <summary>\n            Specifies the category axis type.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartCategoryAxisType.Category\">\n            <summary>\n            Discrete category axis.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartCategoryAxisType.Date\">\n            <summary>\n            Specialized axis for displaying chronological data.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartAxisBaseUnit\">\n            <summary>\n            The base time interval for the axis.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Seconds\">\n            <summary>\n            Seconds\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Minutes\">\n            <summary>\n            Minutes\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Hours\">\n            <summary>\n            Hours\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Days\">\n            <summary>\n            Days\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Months\">\n            <summary>\n            Months\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Weeks\">\n            <summary>\n            Weeks\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Years\">\n            <summary>\n            Years\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Fit\">\n            <summary>\n            Automatic base unit based on limit set from MaxDataGroups.\n            Note that the BaseUnitStep setting will be disregarded.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring of all axes.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3\">\n            <summary>\n            Defines the fluent interface for configuring axes.\n            </summary>\n            <typeparam name=\"TAxis\"></typeparam>\n            <typeparam name=\"TValue\"></typeparam>\n            <typeparam name=\"TAxisBuilder\">The type of the series builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3\"/> class.\n            </summary>\n            <param name=\"axis\">The axis.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MajorTicks(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder})\">\n            <summary>\n            Configures the major ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis\n                           .MajorTicks(ticks => ticks\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Crosshair(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisCrosshairBuilder})\">\n            <summary>\n            Configures the major ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis\n                           .Crosshair(crosshair => crosshair\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Name(System.String)\">\n            <summary>\n            Sets the axis name.\n            </summary>\n            <param name=\"name\">The axis name.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis\n                           .Name(\"axisName\")\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MinorTicks(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder})\">\n            <summary>\n            Configures the minor ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis\n                           .MinorTicks(ticks => ticks\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MajorGridLines(System.Action{Kendo.Mvc.UI.Fluent.ChartMajorGridLinesBuilder})\">\n            <summary>\n            Configures the major grid lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .MajorGridLines(lines => lines.Visible(true))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MajorGridLines(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets color and width of the major grid lines and enables them.\n            </summary>\n            <param name=\"color\">The major gridlines width</param>\n            <param name=\"width\">The major gridlines color (CSS syntax)</param>\n            <param name=\"dashType\">The major gridlines line dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .MajorGridLines(2, \"red\", ChartDashType.Dot)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MinorGridLines(System.Action{Kendo.Mvc.UI.Fluent.ChartMinorGridLinesBuilder})\">\n            <summary>\n            Configures the minor grid lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .MinorGridLines(lines => lines.Visible(true))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.MinorGridLines(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets color and width of the minor grid lines and enables them.\n            </summary>\n            <param name=\"color\">The minor gridlines width</param>\n            <param name=\"width\">The minor gridlines color (CSS syntax)</param>\n            <param name=\"dashType\">The minor grid lines dash type</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .MinorGridLines(2, \"red\", ChartDashType.Dot)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartLineBuilder})\">\n            <summary>\n            Configures the axis line.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Line(line => line.Color(\"#f00\"))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets color and width of the lines and enables them.\n            </summary>\n            <param name=\"color\">The axis line width</param>\n            <param name=\"width\">The axis line color (CSS syntax)</param>\n            <param name=\"dashType\">The axis line dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Line(2, \"#f00\", ChartDashType.Dot)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder})\">\n            <summary>\n            Configures the axis labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Labels(labels => labels\n                               .Color(\"Red\")\n                               .Visible(true)\n                           );\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of numeric axis chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Labels(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.PlotBands(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory{`0,`1}})\">\n            <summary>\n            Defines the plot bands items.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                            .PlotBands.Add()\n                            .From(1)\n                            .To(2)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Title(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder})\">\n            <summary>\n            Configures the chart axis title.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Title(title => title.Text(\"Axis\"))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Title(System.String)\">\n            <summary>\n            Sets the axis title.\n            </summary>\n            <param name=\"title\">The axis title.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Title(\"Axis\")\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Pane(System.String)\">\n            <summary>\n            Renders the axis in the pane with the specified name.\n            </summary>\n            <param name=\"pane\">The pane name.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Panes(panes => {\n                           panes.Add().Title(\"Value\");\n                           panes.Add(\"volumePane\").Title(\"Volume\");\n                       })\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Pane(\"volumePane\")\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Color(System.String)\">\n            <summary>\n            Sets the color for all axis elements. Can be overriden by individual settings.\n            </summary>\n            <param name=\"color\">The axis color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Color(\"#ff0000\")\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Reverse(System.Boolean)\">\n            <summary>\n            Sets the axis reverse option.\n            </summary>\n            <param name=\"reverse\">A value indicating if the axis labels should be rendered in reverse.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Reverse(true)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Reverse\">\n            <summary>\n            Reverse the axis.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           .Reverse()\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Visible(System.Boolean)\">\n            <summary>\n            Sets the axis visibility\n            </summary>\n            <param name=\"visible\">The axis visibility.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.StartAngle(System.Double)\">\n            <summary>\n            The angle (degrees) where the 0 value is placed.\n            It defaults to 0.\n            </summary>\n            <param name=\"startAngle\">Angles increase counterclockwise and 0 is to the right. Negative values are acceptable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.NarrowRange(System.Boolean)\">\n            <summary>\n            A value indicating if the automatic axis range should snap to 0.\n            </summary>\n            <param name=\"narrowRange\">The narrowRange value.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Background(System.String)\">\n            <summary>\n            Sets the axis background color\n            </summary>\n            <param name=\"visible\">The axis visibility.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartAxisBuilderBase`3.Axis\">\n            <summary>\n            Gets or sets the axis.\n            </summary>\n            <value>The axis.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartAxisLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder.Mirror(System.Boolean)\">\n            <summary>\n            Renders the axis labels on the other side.\n            </summary>\n            <param name=\"mirror\">A value indicating whether to render the axis labels on the other side.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis\n                           .Numeric().Labels(labels => labels.Mirror(true))\n                       )\n                       .CategoryAxis(axis => axis\n                           .Categories(s => s.DateString)\n                           // Move the value axis to the right side\n                           .AxisCrossingValue(5)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder.Step(System.Int32)\">\n            <summary>\n            Label rendering step.\n            </summary>\n            <param name=\"step\">A value indicating the step at which labels are rendered.\n            Every n-th label is rendered where n is the step.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(product => product.Name)\n                           .Labels(labels => labels.Step(2))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsBuilder.Skip(System.Int32)\">\n            <summary>\n            Label rendering skip.\n            </summary>\n            <param name=\"skip\">Skips rendering the first n labels.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Categories(product => product.Name)\n                           .Labels(labels => labels.Skip(2))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartPieLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartPieLabels\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder.Align(Kendo.Mvc.UI.ChartPieLabelsAlign)\">\n            <summary>\n            Sets the labels align\n            </summary>\n            <param name=\"align\">The labels align.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Labels(labels => labels\n                              .Align(ChartPieLabelsAlign.Column)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder.Distance(System.Int32)\">\n            <summary>\n            Sets the labels distance\n            </summary>\n            <param name=\"distance\">The labels distance.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Labels(labels => labels\n                              .Distance(20)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder.Position(Kendo.Mvc.UI.ChartPieLabelsPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Labels(labels => labels\n                              .Position(ChartPieLabelsPosition.Center)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data points tooltip.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.#ctor(Kendo.Mvc.UI.ChartTooltip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder\"/> class.\n            </summary>\n            <param name=\"chartTooltip\">The data point tooltip configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Font(System.String)\">\n            <summary>\n            Sets the tooltip font\n            </summary>\n            <param name=\"font\">The tooltip font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Font(\"14px Arial,Helvetica,sans-serif\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the tooltip visibility\n            </summary>\n            <param name=\"visible\">The tooltip visibility. The tooltip is not visible by default.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Background(System.String)\">\n            <summary>\n            Sets the tooltip background color\n            </summary>\n            <param name=\"background\">\n            The tooltip background color.\n            The default is determined from the series color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Background(\"Red\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Color(System.String)\">\n            <summary>\n            Sets the tooltip text color\n            </summary>\n            <param name=\"color\">\n            The tooltip text color.\n            The default is the same as the series labels color.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Color(\"Red\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the tooltip padding\n            </summary>\n            <param name=\"top\">The tooltip top padding.</param>\n            <param name=\"right\">The tooltip right padding.</param>\n            <param name=\"bottom\">The tooltip bottom padding.</param>\n            <param name=\"left\">The tooltip left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Padding(0, 5, 5, 0)\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the tooltip padding\n            </summary>\n            <param name=\"padding\">The tooltip padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Padding(20)\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the tooltip border\n            </summary>\n            <param name=\"width\">The tooltip border width.</param>\n            <param name=\"color\">The tooltip border color (CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Border(1, \"Red\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the tooltip border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Format(System.String)\">\n            <summary>\n            Sets the tooltip format\n            </summary>\n            <param name=\"format\">The tooltip format.</param>\n            <remarks>\n            The format string is ignored if a template is set.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Format(\"{0:C}\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Template(System.String)\">\n            <summary>\n            Sets the tooltip template\n            </summary>\n            <param name=\"template\">The tooltip template.</param>\n            <value>\n            A client-side template for the tooltip.\n            <list type=\"bullet\">\n                <listheader>\n                Available template variables:\n                </listheader>\n                <item>value - the point value</item>\n                <item>category - the category name</item>\n                <item>series - the data series configuration object</item>\n                <item>dataItem - the original data item (client-side binding only)</item>\n            </list>\n            </value>\n            <remarks>\n            The format string is ignored if a template is set.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Template(\"&lt;#= category #&gt; - &lt;#= value #&gt;\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the tooltip opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Opacity(0.5)\n                          .Visible(true)\n                      )          \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.Shared(System.Boolean)\">\n            <summary>\n            Sets the tooltip shared\n            </summary>\n            <param name=\"shared\">The tooltip shared.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Visible(true)\n                          .Shared(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTooltipBuilder.SharedTemplate(System.String)\">\n            <summary>\n            Sets the tooltip shared template\n            </summary>\n            <param name=\"sharedTemplate\">The tooltip shared template.</param>\n            <value>\n            A client-side shared template for the tooltip.\n            <list type=\"bullet\">\n                <listheader>\n                Available shared template variables:\n                </listheader>\n                <item>points - the category points</item>\n                <item>category - the category name</item>\n            </list>\n            </value>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Tooltip(tooltip => tooltip\n                          .Template(\"&lt;#= category #&gt;\")\n                          .Visible(true)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring pie series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartPieSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Name(System.String)\">\n            <summary>\n            Sets the name of the series.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Pie(s => s.Sales, s => s.DateString).Name(\"Sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Opacity(System.Double)\">\n            <summary>\n            Sets the series opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .Series(series => series.Pie(s => s.Sales, s => s.DateString).Opacity(0.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Padding(System.Int32)\">\n            <summary>\n            Sets the padding of the chart.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Pie(s => s.Sales, s => s.DateString).Padding(100))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.StartAngle(System.Int32)\">\n            <summary>\n            Sets the start angle of the first pie segment.\n            </summary>\n            <param name=\"startAngle\">The pie start angle(in degrees).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Pie(s => s.Sales, s => s.DateString).StartAngle(100))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartPieLabelsBuilder})\">\n            <summary>\n            Configures the pie chart labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Pie(s => s.Sales, s => s.DateString)\n                           .Labels(labels => labels\n                               .Color(\"red\")\n                               .Visible(true)\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Labels(System.Boolean)\">\n            <summary>\n            Sets the visibility of pie chart labels.\n            </summary>\n            <param name=\"visible\">The visibility. The default value is false.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Pie(s => s.Sales, s => s.DateString)\n                           .Labels(true);\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the pie segments border\n            </summary>\n            <param name=\"width\">The pie segments border width.</param>\n            <param name=\"color\">The pie segments border color (CSS syntax).</param>\n            <param name=\"dashType\">The pie segments border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Pie(s => s.Sales, s => s.DateString).Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the pie border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Overlay(Kendo.Mvc.UI.ChartPieSeriesOverlay)\">\n            <summary>\n            Sets the pie segments effects overlay\n            </summary>\n            <param name=\"overlay\">\n            The pie segment effects overlay.\n            The default value is set in the theme.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Pie(s => s.Sales, s => s.DateString).Overlay(ChartPieSeriesOverlay.None))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Connectors(System.Action{Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder})\">\n            <summary>\n            Configures the pie chart connectors.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Pie(s => s.Sales, s => s.DateString)\n                           .Connectors(c => c\n                               .Color(\"red\")\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Highlight(System.Action{Kendo.Mvc.UI.Fluent.ChartPieSeriesHighlightBuilder})\">\n            <summary>\n            Configures the pie highlight\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartPieSeriesBuilder`1.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart connectors.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder.#ctor(Kendo.Mvc.UI.ChartPieConnectors)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder\"/> class.\n            </summary>\n            <param name=\"pieConnectors\">The connectors configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the connectors width\n            </summary>\n            <param name=\"width\">The connectors width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Connectors(c => c\n                              .Width(3)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder.Color(System.String)\">\n            <summary>\n            Sets the connectors color\n            </summary>\n            <param name=\"color\">The connectors color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Connectors(c => c\n                              .Color(red)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPieConnectorsBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the connectors padding\n            </summary>\n            <param name=\"padding\">The connectors padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Pie(p => p.Sales)\n                          .Connectors(c => c\n                              .Padding(10)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring plot band.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder.#ctor(Kendo.Mvc.UI.ChartPlotBand)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The plot band.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder.From(System.Double)\">\n            <summary>\n            Sets the plot band start position.\n            </summary>\n            <param name=\"from\">The plot band start position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                           .PlotBands(plotBands => plotBands\n                                 .Add().From(1).Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder.To(System.Double)\">\n            <summary>\n            Sets the plot band end position.\n            </summary>\n            <param name=\"to\">The plot band end position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                           .PlotBands(plotBands => plotBands\n                                 .Add().To(2).Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder.Color(System.String)\">\n            <summary>\n            Sets the plot band background color\n            </summary>\n            <param name=\"color\">The plot band background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                           .PlotBands(plotBands => plotBands\n                                 .Add().Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPlotBandsBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the plot band opacity\n            </summary>\n            <param name=\"opacity\">The plot band opacity.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                           .PlotBands(plotBands => plotBands\n                                 .Add().Opacity(0.5);\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2\">\n            <summary>\n            Creates plot bands for the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2\"/> class.\n            </summary>\n            <param name=\"axis\">The axis.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2.Add\">\n            <summary>\n            Adds a plot band.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2.Add(System.Double,System.Double,System.String)\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartAxisPlotBandsFactory`2.Axis\">\n            <summary>\n            The Axis\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ChartAxisTitle\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.#ctor(Kendo.Mvc.UI.ChartAxisTitle)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder\"/> class.\n            </summary>\n            <param name=\"title\">The chart axis title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Text(System.String)\">\n            <summary>\n            Sets the axis title text.\n            </summary>\n            <param name=\"text\">The text of the axis title.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Text(\"Axis\")\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Font(System.String)\">\n            <summary>\n            Sets the axis title font.\n            </summary>\n            <param name=\"font\">The axis title font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Font(\"16px Arial,Helvetica,sans-serif\")\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Background(System.String)\">\n            <summary>\n            Sets the axis title background color.\n            </summary>\n            <param name=\"background\">The axis background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Background(\"red\")\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Color(System.String)\">\n            <summary>\n            Sets the axis title text color.\n            </summary>\n            <param name=\"color\">The axis text color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Color(\"red\")\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Position(Kendo.Mvc.UI.ChartAxisTitlePosition)\">\n            <summary>\n            Sets the axis title position.\n            </summary>\n            <param name=\"position\">The axis title position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Position(ChartTitlePosition.Center)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the axis title margin.\n            </summary>\n            <param name=\"top\">The axis title top margin.</param>\n            <param name=\"right\">The axis title right margin.</param>\n            <param name=\"bottom\">The axis title bottom margin.</param>\n            <param name=\"left\">The axis title left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Margin(20, 20, 20, 20)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the axis title margin.\n            </summary>\n            <param name=\"margin\">The axis title margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Margin(20)\n                          );\n                      )\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the axis title padding.\n            </summary>\n            <param name=\"top\">The axis title top padding.</param>\n            <param name=\"right\">The axis title right padding.</param>\n            <param name=\"bottom\">The axis title bottom padding.</param>\n            <param name=\"left\">The axis title left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Padding(20, 20, 20, 20)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the axis title padding\n            </summary>\n            <param name=\"padding\">The axis title padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Padding(20)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the axis title border\n            </summary>\n            <param name=\"width\">The axis title border width.</param>\n            <param name=\"color\">The axis title border color.</param>\n            <param name=\"dashType\">The axis title dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Border(1, \"#000\", ChartDashType.Dot)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the title border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTitleBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the axis title opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis => axis\n                          .Title(title => title\n                              .Opacity(0.5)\n                          );\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBorderBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartElementBorder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBorderBuilder.#ctor(Kendo.Mvc.UI.ChartElementBorder)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBorderBuilder\"/> class.\n            </summary>\n            <param name=\"chartBorder\">The chart border.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBorderBuilder.Color(System.String)\">\n            <summary>\n            Sets the border color.\n            </summary>\n            <param name=\"color\">The border color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Border(border => border.Color(\"#f00\")))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBorderBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the border opacity\n            </summary>\n            <param name=\"opacity\">The border opacity (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Border(border => border.Opacity(0.2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBorderBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the border width.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Border(border => border.Width(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBorderBuilder.DashType(Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the border dashType.\n            </summary>\n            <param name=\"dashType\">The border dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Border(border => border.DashType(ChartDashType.Dot)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartAxisTicks\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder.#ctor(Kendo.Mvc.UI.ChartAxisTicks)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder\"/> class.\n            </summary>\n            <param name=\"gaugeTicks\">The chart axis ticks.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder.Size(System.Int32)\">\n            <summary>\n            Sets the ticks size\n            </summary>\n            <param name=\"size\">The ticks size.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"chart\")\n                      .ValueAxis(axis => axis.MajorTicks(ticks => ticks.Size(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisTicksBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the ticks visibility\n            </summary>\n            <param name=\"visible\">The ticks visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"chart\")\n                      .ValueAxis(axis => axis.MajorTicks(ticks => ticks.Visible(false)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1\">\n            <summary>\n            Configures date category axis for the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the chart is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.#ctor(Kendo.Mvc.UI.Chart{`0},Kendo.Mvc.UI.IChartCategoryAxis)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Categories(System.Linq.Expressions.Expression{System.Func{`0,System.DateTime}})\">\n            <summary>\n            Defines bound categories.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the categories value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Categories(System.Collections.Generic.IEnumerable{System.DateTime})\">\n            <summary>\n            Defines categories.\n            </summary>\n            <param name=\"categories\">\n            The list of categories\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Categories(System.DateTime[])\">\n            <summary>\n            Defines categories.\n            </summary>\n            <param name=\"categories\">\n            The list of categories\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.BaseUnit(Kendo.Mvc.UI.ChartAxisBaseUnit)\">\n            <summary>\n            Sets the date category axis base unit.\n            </summary>\n            <param name=\"baseUnit\">\n            The date category axis base unit\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.BaseUnitStep(System.Int32)\">\n            <summary>\n            Sets the step (interval) between categories in base units.\n            Specifiying 0 (auto) will set the step to such value that the total\n            number of categories does not exceed MaxDateGroups.\n            </summary>\n            <remarks>\n            This option is ignored if baseUnit is set to \"fit\".\n            </remarks>\n            <param name=\"baseUnitStep\">\n            the step (interval) between categories in base units.\n            Set 0 for automatic step. The default value is 1.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.MaxDateGroups(System.Int32)\">\n            <summary>\n            Specifies the maximum number of groups (categories) that the chart will attempt to\n            produce when either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            This option is ignored in all other cases.\n            </summary>\n            <param name=\"maxDateGroups\">\n            the maximum number of groups (categories).\n            The default value is 10.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.RoundToBaseUnit(System.Boolean)\">\n            <summary>\n            If set to false, the min and max dates will not be rounded off to\n            the nearest baseUnit.\n            This option is most useful in combination with explicit min and max dates.\n            It will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n            <param name=\"roundToBaseUnit\">\n            A boolean value that indicates if the axis range should be rounded to the nearest base unit.\n            The default value is true.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.WeekStartDay(System.DayOfWeek)\">\n            <summary>\n            Sets the week start day.\n            </summary>\n            <param name=\"weekStartDay\">\n            The week start day when the base unit is Weeks. The default is Sunday.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Justify(System.Boolean)\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n            <param name=\"justified\">\n            A boolean value that indicates if the empty space before and after the series should be removed.\n            The default value is false.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Justify\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.AutoBaseUnitSteps(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisBaseUnitStepsBuilder})\">\n            <summary>\n            Specifies the discrete baseUnitStep values when\n            either BaseUnit is set to Fit or BaseUnitStep is set to 0 (auto).\n            </summary>\n            <param name=\"configurator\">\n            The configuration action.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Min(System.DateTime)\">\n            <summary>\n            Sets the date category axis minimum (start) date.\n            </summary>\n            <param name=\"min\">\n            The date category axis minimum (start) date\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Max(System.DateTime)\">\n            <summary>\n            Sets the date category axis maximum (end) date.\n            </summary>\n            <param name=\"max\">\n            The date category axis maximum (end) date\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.AxisCrossingValue(System.Double)\">\n            <summary>\n            Sets value at which the first perpendicular axis crosses this axis.\n            </summary>\n            <param name=\"axisCrossingValue\">The value at which the first perpendicular axis crosses this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Date().AxisCrossingValue(4))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.AxisCrossingValue(System.Double[])\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Date().AxisCrossingValue(0, 10))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.AxisCrossingValue(System.Collections.Generic.IEnumerable{System.Double})\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Date().AxisCrossingValue(new double[] { 0, 10 }))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder})\">\n            <summary>\n            Configures the axis labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Date()\n                           .Labels(labels => labels\n                               .Culture(new CultureInfo(\"es-ES\")\n                               .Visible(true)\n                           )\n                       ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Select(System.Nullable{System.DateTime},System.Nullable{System.DateTime})\">\n            <summary>\n            Sets the selection range\n            </summary>\n            <param name=\"from\">The selection range start.</param>\n            <param name=\"to\">The selection range end.\n            *Note*: The specified date is not included in the selected range\n            unless the axis is justified. In order to select all categories specify\n            a value larger than the last date.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                      .Name(\"StockChart\")\n                      .CategoryAxis(axis => axis.Select(DateTime.Today.AddMonths(-1), DateTime.Today))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Select(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder})\">\n            <summary>\n            Configures the selection\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                      .Name(\"StockChart\")\n                      .CategoryAxis(axis => axis.Select(select =>\n                          select.Mousewheel(mw => mw.Reverse())\n                      ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Notes(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder})\" -->\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartDateCategoryAxisBuilder`1.Container\">\n            <summary>\n            The parent Chart\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartAxisLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder.Culture(System.Globalization.CultureInfo)\">\n            <summary>\n            Culture to use for formatting the dates.\n            </summary>\n            <param name=\"culture\">Culture to use for formatting the dates.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Date()\n                           .Categories(sale => sale.Date)\n                           .Labels(labels => labels.Culture(new CultureInfo(\"es-ES\")))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder.DateFormats(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder})\">\n            <summary>\n            Culture to use for formatting the dates.\n            See <a href=\"http://www.kendoui.com/documentation/framework/globalization/overview.aspx\">Globalization</a>\n            for more information.\n            </summary>\n            <param name=\"configurator\">Culture to use for formatting the dates.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis\n                           .Date()\n                           .Categories(sale => sale.Date)\n                           .Labels(labels => labels.Culture(new CultureInfo(\"es-ES\")))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.#ctor(Kendo.Mvc.UI.ChartAxisLabelsDateFormats)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder\"/> class.\n            </summary>\n            <param name=\"dateFormats\">The date formats.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Seconds(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Seconds\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Seconds(\"HH:mm:ss\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Minutes(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Minutes\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Minutes(\"ss\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Hours(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Hours\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Hours(\"HH:mm\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Days(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Days\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Days(\"dddd dd\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Months(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Months\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Months(\"MMMM MM\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Weeks(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Months\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Months(\"dddd\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAxisLabelsDateFormatsBuilder.Years(System.String)\">\n            <summary>\n            Sets the date format when the base date unit is <see cref=\"F:Kendo.Mvc.UI.ChartAxisBaseUnit.Years\"/>\n            </summary>\n            <param name=\"format\">The date format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .CategoryAxis(axis =&gt; axis\n                          .Date()\n                          .Labels(labels =&gt; labels\n                              .DateFormats(formats =&gt; formats\n                                  .Years(\"yyyy\")\n                              )\n                          )\n                       );\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder\">\n            <summary>\n            Defines the fluent interface for configuring numeric axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.#ctor(Kendo.Mvc.UI.IChartDateAxis)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder\"/> class.\n            </summary>\n            <param name=\"axis\">The axis.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.BaseUnit(Kendo.Mvc.UI.ChartAxisBaseUnit)\">\n            <summary>\n            Sets the date axis base unit.\n            </summary>\n            <param name=\"baseUnit\">\n            The date axis base unit\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.Min(System.DateTime)\">\n            <summary>\n            Sets the start date of the axis.\n            </summary>\n            <param name=\"min\">The start date of the axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(a => a.Date().Min(DateTime.Parse(\"2012/01/01\")))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.Max(System.DateTime)\">\n            <summary>\n            Sets the end date of the axis.\n            </summary>\n            <param name=\"max\">The end date of the axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(a => a.Date().Max(DateTime.Parse(\"2012/01/01\")))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.MajorUnit(System.Double)\">\n            <summary>\n            Sets the interval between major divisions in base units.\n            </summary>\n            <param name=\"majorUnit\">The interval between major divisions in base units.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(a => a.Date().BaseUnit(ChartAxisBaseUnit.Months).MajorUnit(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.MinorUnit(System.Double)\">\n            <summary>\n            Sets the interval between minor divisions in base units.\n            It defaults to 1/5th of the majorUnit\n            </summary>\n            <param name=\"minorUnit\">The interval between minor divisions in base units.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(a => a.Date().BaseUnit(ChartAxisBaseUnit.Days).MajorUnit(4).MinorUnit(2))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.AxisCrossingValue(System.DateTime)\">\n            <summary>\n            Sets value at which the first perpendicular axis crosses this axis.\n            </summary>\n            <param name=\"axisCrossingValue\">The value at which the first perpendicular axis crosses this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(axis => axis.Date().AxisCrossingValue(DateTime.Parse(\"2012/01/01\")))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.AxisCrossingValue(System.DateTime[])\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Date().AxisCrossingValue(DateTime.Parse(\"2012/01/01\"), DateTime.Parse(\"2012/01/10\")))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.AxisCrossingValue(System.Collections.Generic.IEnumerable{System.DateTime})\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.Date().AxisCrossingValue(new DateTime[] {\n                           DateTime.Parse(\"2012/01/01\"), DateTime.Parse(\"2012/01/10\")\n                       }))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartDateAxisLabelsBuilder})\">\n            <summary>\n            Configures the axis labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .XAxis(axis => axis\n                           .Date()\n                           .Labels(labels => labels\n                               .Culture(new CultureInfo(\"es-ES\")\n                               .Visible(true)\n                           )\n                       ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ChartDateAxisBuilder.Notes(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder})\" -->\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring donut series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartDonutSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1.Margin(System.Int32)\">\n            <summary>\n            Sets the margin of the donut series.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Donut(s => s.Sales, s => s.DateString).Margin(10))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1.HoleSize(System.Int32)\">\n            <summary>\n            Sets the the size of the donut hole.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Donut(s => s.Sales, s => s.DateString).HoleSize(40))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1.Size(System.Int32)\">\n            <summary>\n            Sets the size of the donut series.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.Donut(s => s.Sales, s => s.DateString).Size(20))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartDonutSeriesBuilder`1.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bubble series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartBubbleSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.NegativeValues(System.Action{Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder})\">\n            <summary>\n            Configures the bubble chart behavior for negative values.\n            By default negative values are not visible.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Bubble(s => s.x, s => s.y, s => s.size)\n                           .NegativeValues(n => n\n                               .Visible(true)\n                           );\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.Border(System.Int32,System.String)\">\n            <summary>\n            Sets the bubble border\n            </summary>\n            <param name=\"width\">The bubble border width.</param>\n            <param name=\"color\">The bubble border color (CSS syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                           .Bubble(s => s.x, s => s.y, s => s.size)\n                           .Border(1, \"Red\");\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.Markers(System.Action{Kendo.Mvc.UI.Fluent.ChartMarkersBuilder})\">\n            <summary>\n            Not applicable to bubble series\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.Markers(System.Boolean)\">\n            <summary>\n            Not applicable to bubble series\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBubbleSeriesBuilder`1.Highlight(System.Action{Kendo.Mvc.UI.Fluent.ChartBubbleSeriesHighlightBuilder})\">\n            <summary>\n            Configures the bubble highlight\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.ChartNegativeValueSettings\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder.#ctor(Kendo.Mvc.UI.ChartNegativeValueSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"negativeValues\">The negative value settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder.Color(System.String)\">\n            <summary>\n            Sets the color for bubbles representing negative values\n            </summary>\n            <param name=\"color\">The bubble color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bubble(s => s.x, s => s.y, s => s.size)\n                          .NegativeValues(n => n\n                              .Visible(true)\n                              .Color(\"#ff0000\")\n                          );\n                       )\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNegativeValueSettingsBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the visibility for bubbles representing negative values\n            </summary>\n            <param name=\"visible\">The visibility for bubbles representing negative values.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bubble(s => s.x, s => s.y, s => s.size)\n                          .NegativeValues(n => n\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bar series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartOHLCSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Aggregate(System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate})\">\n            <summary>\n            Sets the aggregate function for date series.\n            This function is used when a category (an year, month, etc.) contains two or more points.\n            </summary>\n            <param name=\"open\">Open aggregate name.</param>\n            <param name=\"high\">High aggregate name.</param>\n            <param name=\"low\">Low aggregate name.</param>\n            <param name=\"close\">Close aggregate name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series => series.OHLC(s => s.Sales).Aggregate(ChartSeriesAggregate.Avg))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Gap(System.Double)\">\n            <summary>\n            Set distance between category clusters. \n            <param name=\"gap\">\n            A value of 1 means that there is a total of 1 point width between categories. \n            The distance is distributed evenly on each side.\n            The default value is 1\n            </param>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                .Name(\"Chart\")\n                .Series(series => series.OHLC(s => s.Sales).Gap(1.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Spacing(System.Double)\">\n            <summary>\n            Sets a value indicating the distance between points in the same category.\n            </summary>\n            <param name=\"spacing\">\n            Value of 1 means that the distance between points in the same category.\n            The default value is 0.3\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                .Name(\"Chart\")\n                .Series(series => series.Spacing(s => s.Sales).Spacing(1))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the points border\n            </summary>\n            <param name=\"width\">The points border width.</param>\n            <param name=\"color\">The points border color (CSS syntax).</param>\n            <param name=\"dashType\">The points border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series.OHLC(s => s.Sales).Border(\"1\", \"#000\", ChartDashType.Dot))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Line(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Configures the ohlc chart lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>\n            <param name=\"dashType\">The lines dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .OHLC(s => s.Sales)        \n                          .Line(2, \"red\", ChartDashType.Dot)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Line(System.Int32)\">\n            <summary>\n            Configures the ohlc line width.\n            </summary>\n            <param name=\"width\">The lines width.</param>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Line(System.Int32,System.String)\">\n            <summary>\n            Configures the ohlc lines.\n            </summary>\n            <param name=\"width\">The lines width.</param>\n            <param name=\"color\">The lines color.</param>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Line(System.Action{Kendo.Mvc.UI.Fluent.ChartLineBuilder})\">\n            <summary>\n            Configures the ohlc chart lines.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Area(s => s.Sales)        \n                          .Line(line => line.Opacity(0.2))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartOHLCSeriesBuilder`1.Highlight(System.Action{Kendo.Mvc.UI.Fluent.ChartOHLCSeriesHighlightBuilder})\">\n            <summary>\n            Configures the series highlight\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring candlestick series.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1.#ctor(Kendo.Mvc.UI.IChartCandlestickSeries)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1\"/> class.\n            </summary>\n            <param name=\"series\">The series.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1.Overlay(Kendo.Mvc.UI.ChartBarSeriesOverlay)\">\n            <summary>\n            Sets the bar effects overlay\n            </summary>\n            <param name=\"overlay\">The candlestick effects overlay. The default is ChartBarSeriesOverlay.Glass</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series.Candlestick(s => s.Sales).Overlay(ChartBarSeriesOverlay.None))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1.Highlight(System.Action{Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesHighlightBuilder})\">\n            <summary>\n            Configures the series highlight\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>        \n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartCandlestickSeriesBuilder`1.Series\">\n            <summary>\n            Gets or sets the series.\n            </summary>\n            <value>The series.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Aggregates\">\n            <summary>\n            Aggregates function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Line\">\n            <summary>\n            The ohlc chart line configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Type\">\n            <summary>\n            The type of the chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Spacing\">\n            <summary>\n            Space between points.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Border\">\n            <summary>\n            Gets or sets the point border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.NoteTextMember\">\n            <summary>\n            Gets the model note text member name.\n            </summary>\n            <value>The model note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.LowerMember\">\n            <summary>\n            Gets the model lower member name.\n            </summary>\n            <value>The model lower member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Q1Member\">\n            <summary>\n            Gets the model q1 member name.\n            </summary>\n            <value>The model q1 member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.MedianMember\">\n            <summary>\n            Gets the model median member name.\n            </summary>\n            <value>The model median member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Q3Member\">\n            <summary>\n            Gets the model close member name.\n            </summary>\n            <value>The model close member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.UpperMember\">\n            <summary>\n            Gets the model upper member name.\n            </summary>\n            <value>The model upper member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.MeanMember\">\n            <summary>\n            Gets the model mean member name.\n            </summary>\n            <value>The model mean member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.OutliersMember\">\n            <summary>\n            Gets the model outliers member name.\n            </summary>\n            <value>The model outliers member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Outliers\">\n            <summary>\n            Gets or sets outliers.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBoxPlotSeries.Extremes\">\n            <summary>\n            Gets or sets extremes.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoxPlotSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.Collections.Generic.List{`1}}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartBoxPlotSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"lowerExpression\">The lower expression.</param>\n            <param name=\"q1Expression\">The q1 expression.</param>\n            <param name=\"medianExpression\">The median expression.</param>\n            <param name=\"q3Expression\">The q3 expression.</param>\n            <param name=\"upperExpression\">The upper expression.</param>\n            <param name=\"meanExpression\">The mean expression.</param>\n            <param name=\"outliersExpression\">The outliers expression.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"colorExpression\">The color expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoxPlotSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartBoxPlotSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoxPlotSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartBoxPlotSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.LowerMember\">\n            <summary>\n            Gets the model lower member name.\n            </summary>\n            <value>The model lower member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Q1Member\">\n            <summary>\n            Gets the model q1 member name.\n            </summary>\n            <value>The model q1 member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.MedianMember\">\n            <summary>\n            Gets the model median member name.\n            </summary>\n            <value>The model median member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Q3Member\">\n            <summary>\n            Gets the model model q3 member name.\n            </summary>\n            <value>The model q3 member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.UpperMember\">\n            <summary>\n            Gets the model upper member name.\n            </summary>\n            <value>The model upper member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.MeanMember\">\n            <summary>\n            Gets the model mean member name.\n            </summary>\n            <value>The model mean member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.OutliersMember\">\n            <summary>\n            Gets the model outliers member name.\n            </summary>\n            <value>The model outliers member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Outliers\">\n            <summary>\n            Gets or sets outliers.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Extremes\">\n            <summary>\n            Gets or sets outliers.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.ColorMember\">\n            <summary>\n            Gets the model data color member name.\n            </summary>\n            <value>The model data color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Border\">\n            <summary>\n            Gets or sets the point border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Data\">\n            <summary>\n            The ohlc chart data configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Aggregates\">\n            <summary>\n            Aggregates function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n            <value>\n            A value of 1 means that there is a total of 1 point width between categories. \n            The distance is distributed evenly on each side.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Spacing\">\n            <summary>\n            Space between points.\n            </summary>\n            <value>\n            Value of 1 means that the distance between points is equal to their width.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotSeries`3.Line\">\n            <summary>\n            The ohlc chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartMarkers.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartMarkers\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Size\">\n            <summary>\n            Gets or sets the markers size.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Background\">\n            <summary>\n            Gets or sets the markers background.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Type\">\n            <summary>\n            Gets or sets the markers type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Visible\">\n            <summary>\n            Gets or sets the markers visibility.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Border\">\n            <summary>\n            Gets or sets the markers border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartMarkers.Rotation\">\n            <summary>\n            Gets or sets the markers rotation angle.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartPointLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartPointLabels\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartPointLabelsBuilder.Position(Kendo.Mvc.UI.ChartPointLabelsPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Line(s => s.Sales)\n                          .Labels(labels => labels\n                              .Position(ChartPointLabelsPosition.Above)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.#ctor(Kendo.Mvc.UI.ChartMarkers)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder\"/> class.\n            </summary>\n            <param name=\"chartLineMarkers\">The line chart markers configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Type(Kendo.Mvc.UI.ChartMarkerShape)\">\n            <summary>\n            Sets the markers shape type.\n            </summary>\n            <param name=\"type\">The markers shape type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Line(s => s.Sales)\n                          .Markers(markers => markers\n                              .Type(ChartMarkerShape.Triangle)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Size(System.Int32)\">\n            <summary>\n            Sets the markers size.\n            </summary>\n            <param name=\"size\">The markers size.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Line(s => s.Sales)\n                          .Markers(markers => markers\n                              .Size(10)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the markers visibility\n            </summary>\n            <param name=\"visible\">The markers visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Line(s => s.Sales)\n                          .Markers(markers => markers\n                              .Visible(true)\n                          );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the markers border\n            </summary>\n            <param name=\"width\">The markers border width.</param>\n            <param name=\"color\">The markers border color (CSS syntax).</param>\n            <param name=\"dashType\">The markers border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                           .Line(s => s.Sales)\n                           .Markers(markers => markers\n                               .Border(1, \"Red\", ChartDashType.Dot)\n                           );\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the markers border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Background(System.String)\">\n            <summary>\n            The background color of the current series markers.\n            </summary>\n            <param name=\"backgorund\">The background color of the current series markers. The background color is series color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Series(series => series\n                           .Line(s => s.Sales)\n                           .Markers(markers => markers\n                               .Background(\"Red\");\n                           );\n                        )\n                        .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartMarkersBuilder.Rotation(System.Int32)\">\n            <summary>\n            Sets the markers rotation angle.\n            </summary>\n            <param name=\"size\">The markers rotation angle.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Line(s => s.Sales)\n                          .Markers(markers => markers\n                              .Type(ChartMarkerShape.Triangle)\n                              .Rotation(10)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PlotAreaBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.PlotArea\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.#ctor(Kendo.Mvc.UI.PlotArea)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.PlotAreaBuilder\"/> class.\n            </summary>\n            <param name=\"plotArea\">The plot area.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Background(System.String)\">\n            <summary>\n            Sets the Plot area background color\n            </summary>\n            <param name=\"background\">The background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .PlotArea(plotArea => plotArea.Background(\"Red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the Plot area margin\n            </summary>\n            <param name=\"top\">The plot area top margin.</param>\n            <param name=\"right\">The plot area right margin.</param>\n            <param name=\"bottom\">The plot area bottom margin.</param>\n            <param name=\"left\">The plot area left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .PlotArea(plotArea => plotArea.Margin(0, 5, 5, 0))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the Plot area margin\n            </summary>\n            <param name=\"margin\">The plot area margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .PlotArea(plotArea => plotArea.Margin(5))\n                      .Render();\n            %&gt;\n            </code>\n            </example>          \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the Plot area border\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color (CSS syntax).</param>\n            <param name=\"dashType\">The border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .PlotArea(plotArea => plotArea.Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the plot area border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PlotAreaBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the plot area opacity.\n            </summary>\n            <param name=\"opacity\">\n            The plot area opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .PlotArea(p => p.Background(\"green\").Opacity(0.5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.PlotArea.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.PlotArea\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.PlotArea.Background\">\n            <summary>\n            Gets or sets the plot area background.\n            </summary>\n            <value>\n            The plot area background.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.PlotArea.Opacity\">\n            <summary>\n            Gets or sets the plot area opacity.\n            </summary>\n            <value>A value between 0 (transparent) and 1 (opaque).</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.PlotArea.Border\">\n            <summary>\n            Gets or sets the plot area border.\n            </summary>\n            <value>\n            The plot area border.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.PlotArea.Margin\">\n            <summary>\n            Gets or sets the plot area margin.\n            </summary>\n            <value>\n            The plot area margin.\n            </value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBarLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the chart data labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarLabelsBuilder.#ctor(Kendo.Mvc.UI.ChartBarLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBarLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"chartBarLabels\">The data labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBarLabelsBuilder.Position(Kendo.Mvc.UI.ChartBarLabelsPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Series(series => series\n                          .Bar(s => s.Sales)\n                          .Labels(labels => labels\n                              .Position(ChartBarLabelsPosition.InsideEnd)\n                              .Visible(true)\n                          );\n                       )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartAreaBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ChartArea\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.#ctor(Kendo.Mvc.UI.ChartArea)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartAreaBuilder\"/> class.\n            </summary>\n            <param name=\"chartArea\">The chart area.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Background(System.String)\">\n            <summary>\n            Sets the chart area background color.\n            </summary>\n            <param name=\"background\">The background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Background(\"Red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the chart area margin.\n            </summary>\n            <param name=\"top\">The chart area top margin.</param>\n            <param name=\"right\">The chart area right margin.</param>\n            <param name=\"bottom\">The chart area bottom margin.</param>\n            <param name=\"left\">The chart area left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Margin(0, 5, 5, 0))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the chart area margin.\n            </summary>\n            <param name=\"margin\">The chart area margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .ChartArea(chartArea => chartArea.Margin(5))\n                      .Render();\n            %&gt;\n            </code>\n            </example>          \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the chart area border.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color (CSS syntax).</param>\n            <param name=\"dashType\">The border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .ChartArea(chartArea => chartArea.Border(1, \"#000\", ChartDashType.Dot))\n                       .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the plot area border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the chart area.\n            </summary>\n            <param name=\"height\">The chart area height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartAreaBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the width of the chart area.\n            </summary>\n            <param name=\"height\">The chart area width.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1\">\n            <summary>\n            Defines the fluent API for configuring the chart series defaults.\n            </summary>\n            <typeparam name=\"TModel\"></typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Bar\">\n            <summary>\n            Defines the default settings for bar series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Column\">\n            <summary>\n            Defines the default settings for column series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Line\">\n            <summary>\n            Defines the default settings for line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.VerticalLine\">\n            <summary>\n            Defines the default settings for vertical line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Area\">\n            <summary>\n            Defines the default settings for area series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.VerticalArea\">\n            <summary>\n            Defines the default settings for vertical area series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Pie\">\n            <summary>\n            Defines the default settings for pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Donut\">\n            <summary>\n            Defines the default settings for donut series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Funnel\">\n            <summary>\n            Defines the default settings for funnel series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Scatter\">\n            <summary>\n            Defines the default settings for scatter series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.ScatterLine\">\n            <summary>\n            Defines the default settings for scatter line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.OHLC\">\n            <summary>\n            Defines the default settings for ohlc series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.Bullet\">\n            <summary>\n            Defines the default settings for bullet series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.VerticalBullet\">\n            <summary>\n            Defines the default settings for vertical bullet series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.RadarArea\">\n            <summary>\n            Defines the default settings for radar area series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.RadarColumn\">\n            <summary>\n            Defines the default settings for radar column series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.RadarLine\">\n            <summary>\n            Defines the default settings for radar line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.PolarLine\">\n            <summary>\n            Defines the default settings for polar line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.PolarArea\">\n            <summary>\n            Defines the default settings for polar area series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder`1.PolarScatter\">\n            <summary>\n            Defines the default settings for polar scatter series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBarLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBarLabels.Position\">\n            <summary>\n            Gets or sets the label position.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.OutsideEnd\"/> for clustered series and\n            <see cref=\"F:Kendo.Mvc.UI.ChartBarLabelsPosition.InsideEnd\"/> for stacked series.\n            </remarks>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1\">\n            <summary>\n            Creates value axis for the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the chart is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1.#ctor(Kendo.Mvc.UI.Chart{`0},System.Collections.Generic.IList{Kendo.Mvc.UI.IChartValueAxis})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n            <param name=\"axes\">The chart axes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1.Numeric\">\n            <summary>\n            Defines a numeric value axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1.Numeric(System.String)\">\n            <summary>\n            Defines a numeric value axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1.Date\">\n            <summary>\n            Defines a date value axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartValueAxisFactory`1.Date(System.String)\">\n            <summary>\n            Defines a date value axis.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder\">\n            <summary>\n            Defines the fluent interface for configuring numeric axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.#ctor(Kendo.Mvc.UI.IChartNumericAxis)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder\"/> class.\n            </summary>\n            <param name=\"axis\">The axis.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.Min(System.Double)\">\n            <summary>\n            Sets the axis minimum value.\n            </summary>\n            <param name=\"min\">The axis minimum value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(a => a.Numeric().Min(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.Max(System.Double)\">\n            <summary>\n            Sets the axis maximum value.\n            </summary>\n            <param name=\"max\">The axis maximum value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(a => a.Numeric().Max(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.MajorUnit(System.Double)\">\n            <summary>\n            Sets the interval between major divisions.\n            </summary>\n            <param name=\"majorUnit\">The interval between major divisions.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(a => a.Numeric().MajorUnit(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.MinorUnit(System.Double)\">\n            <summary>\n            Sets the interval between minor divisions.\n            It defaults to MajorUnit / 5.\n            </summary>\n            <param name=\"minorUnit\">The interval between minor divisions.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(a => a.Numeric()\n                            .MajorUnit(4)\n                            .MinorUnit(2)\n                            .MinorTicks(mt => mt.Visible(true))\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.AxisCrossingValue(System.Double)\">\n            <summary>\n            Sets value at which the first perpendicular axis crosses this axis.\n            </summary>\n            <param name=\"axisCrossingValue\">The value at which the first perpendicular axis crosses this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .ValueAxis(axis => axis.AxisCrossingValue(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.AxisCrossingValue(System.Double[])\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(axis => axis.Numeric().AxisCrossingValue(0, 10))\n                       .YAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .YAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.AxisCrossingValue(System.Collections.Generic.IEnumerable{System.Double})\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .XAxis(axis => axis.Numeric().AxisCrossingValue(new double[] { 0, 10 }))\n                       .YAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .YAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ChartNumericAxisBuilder.Notes(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder})\" -->\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartTitleBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ChartTitle\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.#ctor(Kendo.Mvc.UI.ChartTitle)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartTitleBuilder\"/> class.\n            </summary>\n            <param name=\"chartTitle\">The chart title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Text(System.String)\">\n            <summary>\n            Sets the title text\n            </summary>\n            <param name=\"text\">The text title.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Text(\"Chart\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Font(System.String)\">\n            <summary>\n            Sets the title font\n            </summary>\n            <param name=\"font\">The title font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Font(\"16px Arial,Helvetica,sans-serif\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Color(System.String)\">\n            <summary>\n            Sets the title color\n            </summary>\n            <param name=\"color\">The title color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Color(\"#ff0000\").Text(\"Title\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Background(System.String)\">\n            <summary>\n            Sets the title background color\n            </summary>\n            <param name=\"background\">The background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Background(\"red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Position(Kendo.Mvc.UI.ChartTitlePosition)\">\n            <summary>\n            Sets the title position\n            </summary>\n            <param name=\"position\">The title position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Position(ChartTitlePosition.Bottom))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Align(Kendo.Mvc.UI.ChartTextAlignment)\">\n            <summary>\n            Sets the title alignment\n            </summary>\n            <param name=\"align\">The title alignment.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Align(ChartTextAlignment.Left))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the title visibility\n            </summary>\n            <param name=\"visible\">The title visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Visible(false))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the title margin\n            </summary>\n            <param name=\"top\">The title top margin.</param>\n            <param name=\"right\">The title right margin.</param>\n            <param name=\"bottom\">The title bottom margin.</param>\n            <param name=\"left\">The title left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Margin(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the title margin\n            </summary>\n            <param name=\"margin\">The title margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Margin(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the title padding\n            </summary>\n            <param name=\"top\">The title top padding.</param>\n            <param name=\"right\">The title right padding.</param>\n            <param name=\"bottom\">The title bottom padding.</param>\n            <param name=\"left\">The title left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Padding(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the title padding\n            </summary>\n            <param name=\"padding\">The title padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Padding(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the title border\n            </summary>\n            <param name=\"width\">The title border width.</param>\n            <param name=\"color\">The title border color.</param>\n            <param name=\"dashType\">The title dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Title(title => title.Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartTitleBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the plot area border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartLegendBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ChartLegend\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.#ctor(Kendo.Mvc.UI.ChartLegend)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartLegendBuilder\"/> class.\n            </summary>\n            <param name=\"chartLegend\">The chart legend.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Font(System.String)\">\n            <summary>\n            Sets the legend labels font\n            </summary>\n            <param name=\"font\">The legend labels font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Font(\"16px Arial,Helvetica,sans-serif\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Color(System.String)\">\n            <summary>\n            Sets the legend labels color\n            </summary>\n            <param name=\"color\">The labels color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Color(\"red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Background(System.String)\">\n            <summary>\n            Sets the legend background color\n            </summary>\n            <param name=\"background\">The background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Background(\"red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Position(Kendo.Mvc.UI.ChartLegendPosition)\">\n            <summary>\n            Sets the legend position\n            </summary>\n            <param name=\"position\">The legend position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Position(ChartLegendPosition.Bottom))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the legend visibility\n            </summary>\n            <param name=\"visible\">The legend visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Visible(false))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Offset(System.Int32,System.Int32)\">\n            <summary>\n            Sets the legend X and Y offset from its position\n            </summary>\n            <param name=\"offsetX\">The legend X offset from its position.</param>\n            <param name=\"offsetY\">The legend Y offset from its position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Offset(10, 50))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the legend margin\n            </summary>\n            <param name=\"top\">The legend top margin.</param>\n            <param name=\"right\">The legend right margin.</param>\n            <param name=\"bottom\">The legend bottom margin.</param>\n            <param name=\"left\">The legend top margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Margin(0, 5, 5, 0))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the legend margin\n            </summary>\n            <param name=\"margin\">The legend margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Margin(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the legend padding\n            </summary>\n            <param name=\"top\">The legend top padding.</param>\n            <param name=\"right\">The legend right padding.</param>\n            <param name=\"bottom\">The legend bottom padding.</param>\n            <param name=\"left\">The legend left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Padding(0, 5, 5, 0))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Padding(System.Int32)\">\n            <summary>\n            Sets the legend padding\n            </summary>\n            <param name=\"padding\">The legend padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Padding(20))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the legend border\n            </summary>\n            <param name=\"width\">The legend border width.</param>\n            <param name=\"color\">The legend border color (CSS syntax).</param>\n            <param name=\"dashType\">The legend border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Legend(legend => legend.Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the legend border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartLegendBuilder.Labels(System.Action{Kendo.Mvc.UI.Fluent.ChartLegendLabelsBuilder})\">\n            <summary>\n            Configures the legend labels\n            </summary>\n            <param name=\"configurator\">The labels configuration action</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartEventBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DataBound client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.DataBound(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DataBound(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"onDataBoundHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.DataBound(\"onDataBound\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SeriesClick(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the SeriesClick client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.SeriesClick(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SeriesClick(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the SeriesClick client-side event.\n            </summary>\n            <param name=\"onSeriesClickHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.SeriesClick(\"onSeriesClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SeriesHover(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the SeriesHover client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.SeriesHover(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SeriesHover(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the SeriesHover client-side event.\n            </summary>\n            <param name=\"onSeriesHoverHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.SeriesHover(\"onSeriesHover\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.AxisLabelClick(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the AxisLabelClick client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.AxisLabelClick(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.AxisLabelClick(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the AxisLabelClick client-side event.\n            </summary>\n            <param name=\"onAxisLabelClickHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.AxisLabelClick(\"onAxisLabelClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.LegendItemClick(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the LegendItemClick client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.LegendItemClick(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.LegendItemClick(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the LegendItemClick client-side event.\n            </summary>\n            <param name=\"onLegendLabelClickHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.LegendItemClick(\"onLegendItemClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.LegendItemHover(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the LegendItemHover client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.LegendItemHover(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.LegendItemHover(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the LegendItemHover client-side event.\n            </summary>\n            <param name=\"onLegendItemHoverHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.LegendItemHover(\"onLegendItemHover\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DragStart(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragStart client-side event.\n            </summary>\n            <param name=\"onDragStartHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.DragStart(\"onDragStart\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DragStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DragStart client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.DragStart(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Drag(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Drag client-side event.\n            </summary>\n            <param name=\"onDragHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.Drag(\"onDrag\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Drag(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Drag client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.Drag(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DragEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragEnd client-side event.\n            </summary>\n            <param name=\"onDragEndHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.DragEnd(\"onDragEnd\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.DragEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DragEnd client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.DragEnd(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.PlotAreaClick(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the PlotAreaClick client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.PlotAreaClick(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.PlotAreaClick(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the PlotAreaClick client-side event.\n            </summary>\n            <param name=\"onPlotAreaClickHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.PlotAreaClick(\"onPlotAreaClick\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.ZoomStart(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ZoomStart client-side event.\n            </summary>\n            <param name=\"onZoomStartHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.ZoomStart(\"onZoomStart\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.ZoomStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ZoomStart client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.ZoomStart(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Zoom(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Zoom client-side event.\n            </summary>\n            <param name=\"onZoomHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.Zoom(\"onZoom\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Zoom(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Zoom client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.Zoom(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.ZoomEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the ZoomEnd client-side event.\n            </summary>\n            <param name=\"onZoomEndHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.ZoomEnd(\"onZoomEnd\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.ZoomEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ZoomEnd client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.ZoomEnd(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SelectStart(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the SelectStart client-side event.\n            </summary>\n            <param name=\"onSelectStartHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.SelectStart(\"onSelectStart\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SelectStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the SelectStart client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.SelectStart(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.Select(\"onSelect\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.Select(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SelectEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the SelectEnd client-side event.\n            </summary>\n            <param name=\"onSelectEndHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                       .Name(\"Chart\")\n                       .Events(events => events.SelectEnd(\"onSelectEnd\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartEventBuilder.SelectEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the SelectEnd client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Chart()\n                      .Name(\"Chart\")\n                      .Events(events => events.SelectEnd(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.ChartEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Events(events => events\n                            .OnLoad(\"onLoad\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Theme(System.String)\">\n            <summary>\n            Sets the theme of the chart.\n            </summary>\n            <param name=\"theme\">The Chart theme.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Theme(\"Telerik\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.ChartArea(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaBuilder})\">\n            <summary>\n            Sets the Chart area.\n            </summary>\n            <param name=\"configurator\">The Chart area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .ChartArea(chartArea => chartArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.PlotArea(System.Action{Kendo.Mvc.UI.Fluent.PlotAreaBuilder})\">\n            <summary>\n            Sets the Plot area.\n            </summary>\n            <param name=\"configurator\">The Plot area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .PlotArea(plotArea => plotArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Title(System.String)\">\n            <summary>\n            Sets the title of the chart.\n            </summary>\n            <param name=\"title\">The Chart title.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Title(\"Yearly sales\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Title(System.Action{Kendo.Mvc.UI.Fluent.ChartTitleBuilder})\">\n            <summary>\n            Defines the title of the chart.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Title(title => title.Text(\"Yearly sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Legend(System.Boolean)\">\n            <summary>\n            Sets the legend visibility.\n            </summary>\n            <param name=\"visible\">A value indicating whether to show the legend.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Legend(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Legend(System.Action{Kendo.Mvc.UI.Fluent.ChartLegendBuilder})\">\n            <summary>\n            Configures the legend.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Legend(legend => legend.Visible(true).Position(ChartLegendPosition.Bottom))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Series(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesFactory{`0}})\">\n            <summary>\n            Defines the chart series.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Series(series =>\n                        {\n                            series.Bar(s => s.SalesAmount);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.SeriesDefaults(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart series of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .SeriesDefaults(series => series.Bar().Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Panes(System.Action{Kendo.Mvc.UI.Fluent.ChartPanesFactory})\">\n            <summary>\n            Defines the chart panes.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .Panes(panes =>\n                        {\n                            panes.Add(\"volume\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.AxisDefaults(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart axes of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .AxisDefaults(axisDefaults => axisDefaults.MinorTickSize(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.CategoryAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder{`0}})\">\n            <summary>\n            Configures the category axis\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .CategoryAxis(axis => axis\n                            .Categories(s => s.DateString)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.ValueAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Defines value axis options\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .ValueAxis(a => a.Numeric().TickSize(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.XAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Defines X-axis options for scatter charts\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .XAxis(a => a.Numeric().Max(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.YAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Configures Y-axis options for scatter charts.\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n                        .YAxis(a => a.Numeric().Max(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyAjaxDataSourceBuilder{`0}})\">\n            <summary>\n            Data Source configuration\n            </summary>\n            <param name=\"configurator\">Use the configurator to set different data binding options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Enables or disables automatic binding.\n            </summary>\n            <param name=\"autoBind\">\n            Gets or sets a value indicating if the chart\n            should be data bound during initialization.\n            The default value is true.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                        })\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.SeriesColors(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">A list of the series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .SeriesColors(new string[] { \"#f00\", \"#0f0\", \"#00f\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.SeriesColors(System.String[])\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">The series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .SeriesColors(\"#f00\", \"#0f0\", \"#00f\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartTooltipBuilder})\">\n            <summary>\n            Use it to configure the data point tooltip.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Tooltip(tooltip =>\n                        {\n                            tooltip.Visible(true).Format(\"{0:C}\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Tooltip(System.Boolean)\">\n            <summary>\n            Sets the data point tooltip visibility.\n            </summary>\n            <param name=\"visible\">\n            A value indicating if the data point tooltip should be displayed.\n            The tooltip is not visible by default.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Tooltip(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartBuilder`1.Transitions(System.Boolean)\">\n            <summary>\n            Enables or disabled animated transitions on initial load and refresh. \n            </summary>\n            <param name=\"transitions\">\n            A value indicating if transition animations should be played.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Transitions(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1\">\n            <summary>\n            Creates series for the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the chart is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.#ctor(Kendo.Mvc.UI.ISeriesContainer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bar``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bar``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bar(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bar(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bar(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bar series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Column``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Column``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Column(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Column(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Column(System.Collections.IEnumerable)\">\n            <summary>\n            Defines column series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Line``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Line``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Line(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Line(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Line(System.Collections.IEnumerable)\">\n            <summary>\n            Defines line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalLine``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound vertical line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalLine``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound vertical line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalLine(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound vertical line series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalLine(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound vertical line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalLine(System.Collections.IEnumerable)\">\n            <summary>\n            Defines vertical line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Area``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Area``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Area(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Area(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Area(System.Collections.IEnumerable)\">\n            <summary>\n            Defines area series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalArea``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound vertical area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalArea``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound vertical area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalArea(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound vertical area series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalArea(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound vertical area series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>       \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalArea(System.Collections.IEnumerable)\">\n            <summary>\n            Defines vertical area series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Scatter``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound scatter series.\n            </summary>\n            <param name=\"xValueExpression\">\n            The expression used to extract the X value from the chart model\n            </param>\n            <param name=\"yValueExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Scatter(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound scatter series.\n            </summary>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Scatter(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound scatter series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value members.\n            </param>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Scatter(System.Collections.IEnumerable)\">\n            <summary>\n            Defines scatter series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.ScatterLine``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound scatter line series.\n            </summary>\n            <param name=\"xValueExpression\">\n            The expression used to extract the X value from the chart model\n            </param>\n            <param name=\"yValueExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.ScatterLine(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound scatter line series.\n            </summary>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextExpression\">\n            The name of the Y value member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.ScatterLine(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound scatter line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value members.\n            </param>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextExpression\">\n            The name of the Y value member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.ScatterLine(System.Collections.IEnumerable)\">\n            <summary>\n            Defines scatter line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bubble``3(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,``2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bubble series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bubble(System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bubble series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bubble(System.Type,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bubble series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bubble(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bubble series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Pie``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Pie(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Pie(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Pie(System.Collections.IEnumerable)\">\n            <summary>\n            Defines pie series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Funnel``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Defines bound funnel series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Funnel(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound funnel series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Funnel(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound funnel series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Funnel(System.Collections.IEnumerable)\">\n            <summary>\n            Defines funnel series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Donut``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Defines bound Donut series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Donut(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound donut series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Donut(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound donut series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Donut(System.Collections.IEnumerable)\">\n            <summary>\n            Defines donut series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.OHLC``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound ohlc series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.OHLC``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound ohlc series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.OHLC(System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound ohlc series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.OHLC(System.Type,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound ohlc series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.OHLC(System.Collections.IEnumerable)\">\n            <summary>\n            Defines ohlc series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Candlestick``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound candlestick series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Candlestick``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound candlestick series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Candlestick(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound candlestick series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Candlestick(System.Type,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound candlestick series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Candlestick(System.Collections.IEnumerable)\">\n            <summary>\n            Defines candlestick series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bullet``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bullet``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bullet(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"currentMemberName\">\n            The name of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bullet(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentMemberType\">\n            The type of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextExpression\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Bullet(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bar series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalBullet``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound verticalBullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalBullet``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound verticalBullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalBullet(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound verticalBullet series.\n            </summary>\n            <param name=\"currentMemberName\">\n            The name of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the color member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalBullet(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound verticalBullet series.\n            </summary>\n            <param name=\"currentMemberType\">\n            The type of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the color member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.VerticalBullet(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bar series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarArea``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines bound radar area series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarArea``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound radar area series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarArea(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar area series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarArea(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar area series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarArea(System.Collections.IEnumerable)\">\n            <summary>\n            Defines radar area series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarColumn``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound radar column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarColumn``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound radar column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarColumn(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar column series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarColumn(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar column series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarColumn(System.Collections.IEnumerable)\">\n            <summary>\n            Defines radar column series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines bound radar line series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound radar line series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound radar line series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar line series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound radar line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.RadarLine(System.Collections.IEnumerable)\">\n            <summary>\n            Defines radar line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarArea``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound polar area series.\n            </summary>\n            <param name=\"xValueExpression\">\n            The expression used to extract the X value from the chart model\n            </param>\n            <param name=\"yValueExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarArea(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar area series.\n            </summary>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarArea(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar area series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value members.\n            </param>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarArea(System.Collections.IEnumerable)\">\n            <summary>\n            Defines polar area series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarLine``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound polar line series.\n            </summary>\n            <param name=\"xValueExpression\">\n            The expression used to extract the X value from the chart model\n            </param>\n            <param name=\"yValueExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarLine(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar line series.\n            </summary>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarLine(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value members.\n            </param>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarLine(System.Collections.IEnumerable)\">\n            <summary>\n            Defines polar line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarScatter``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound polar scatter series.\n            </summary>\n            <param name=\"xValueExpression\">\n            The expression used to extract the X value from the chart model\n            </param>\n            <param name=\"yValueExpression\">\n            The expression used to extract the Y value from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarScatter(System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar scatter series.\n            </summary>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarScatter(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound polar scatter series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value members.\n            </param>\n            <param name=\"xMemberName\">\n            The name of the X value member.\n            </param>\n            <param name=\"yMemberName\">\n            The name of the Y value member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.PolarScatter(System.Collections.IEnumerable)\">\n            <summary>\n            Defines polar scatter series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.BoxPlot``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.Collections.Generic.List{``0}}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound box plot series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.BoxPlot``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.Collections.Generic.List{``0}}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound box plot series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.BoxPlot(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound box plot series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.BoxPlot(System.Type,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound box plot series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.BoxPlot(System.Collections.IEnumerable)\">\n            <summary>\n            Defines box plot series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartSeriesFactory`1.Container\">\n            <summary>\n            The parent Chart\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1\">\n            <summary>\n            Configures the category axis for the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the chart is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.#ctor(Kendo.Mvc.UI.Chart{`0},Kendo.Mvc.UI.IChartCategoryAxis)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1\"/> class.\n            </summary>\n            <param name=\"chart\">The chart.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Categories``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines bound categories.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the categories value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Type(Kendo.Mvc.UI.ChartCategoryAxisType)\">\n            <summary>\n            Overrides the category axis type.\n            </summary>\n            <param name=\"type\">\n            The axis type. The default is determined by the category items type.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Categories(System.Collections.IEnumerable)\">\n            <summary>\n            Defines categories.\n            </summary>\n            <param name=\"categories\">\n            The list of categories\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Categories(System.String[])\">\n            <summary>\n            Defines categories.\n            </summary>\n            <param name=\"categories\">\n            The list of categories\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.AxisCrossingValue(System.Double)\">\n            <summary>\n            Sets value at which the first perpendicular axis crosses this axis.\n            </summary>\n            <param name=\"axisCrossingValue\">The value at which the first perpendicular axis crosses this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.AxisCrossingValue(4))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.AxisCrossingValue(System.Double[])\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.AxisCrossingValue(0, 10))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.AxisCrossingValue(System.Collections.Generic.IEnumerable{System.Double})\">\n            <summary>\n            Sets value at which perpendicular axes cross this axis.\n            </summary>\n            <param name=\"axisCrossingValues\">The values at which perpendicular axes cross this axis.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart(Model)\n                       .Name(\"Chart\")\n                       .CategoryAxis(axis => axis.AxisCrossingValue(new double[] { 0, 10 }))\n                       .ValueAxis(axis => axis.Numeric().Title(\"Axis 1\"))\n                       .ValueAxis(axis => axis.Numeric(\"secondary\").Title(\"Axis 2\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Justify(System.Boolean)\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n            <param name=\"justified\">\n            A boolean value that indicates if the empty space before and after the series should be removed.\n            The default value is false.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Justify\">\n            <summary>\n            Positions categories and series points on major ticks. This removes the empty space before and after the series.\n            This option will be ignored if either Bar, Column, OHLC or Candlestick series are plotted on the axis.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Select(System.Double,System.Double)\">\n            <summary>\n            Sets the selection range\n            </summary>\n            <param name=\"from\">The selection range start.</param>\n            <param name=\"to\">The selection range end.\n            *Note*: The category with the specified index is not included in the selected range\n            unless the axis is justified. In order to select all categories specify\n            a value larger than the last category index.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                      .Name(\"StockChart\")\n                      .CategoryAxis(axis => axis.Select(0, 3))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Select(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisSelectionBuilder})\">\n            <summary>\n            Configures the selection\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                      .Name(\"StockChart\")\n                      .CategoryAxis(axis => axis.Select(select =>\n                          select.Mousewheel(mw => mw.Reverse())\n                      ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Notes(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisNotesBuilder})\" -->\n        <member name=\"P:Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder`1.Container\">\n            <summary>\n            The parent Chart\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.ChartHtmlBuilder`1.#ctor(Kendo.Mvc.UI.Chart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.ChartHtmlBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The Chart component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.ChartHtmlBuilder`1.CreateChart\">\n            <summary>\n            Creates the chart top-level div.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.ChartHtmlBuilder`1.BuildCore\">\n            <summary>\n            Builds the Chart component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPieConnectors.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPieConnectors\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieConnectors.Width\">\n            <summary>\n            Defines the width of the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieConnectors.Color\">\n            <summary>\n            Defines the color of the line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieConnectors.Padding\">\n            <summary>\n            Defines the padding of the line.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPieLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPieLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieLabels.Align\">\n            <summary>\n            Defines the alignment of the pie labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieLabels.Distance\">\n            <summary>\n            Defines the distance between the pie chart and labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieLabels.Position\">\n            <summary>\n            Defines the position of the pie labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.ExplodeMember\">\n            <summary>\n            Gets the data explode member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.VisibleInLegendMember\">\n            <summary>\n            Gets the data visibleInLegend member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.ColorMember\">\n            <summary>\n            Gets the data color member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Labels\">\n            <summary>\n            Gets the pie chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Border\">\n            <summary>\n            Gets or sets the pie's border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Overlay\">\n            <summary>\n            Gets or sets the effects overlay\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Padding\">\n            <summary>\n            Gets or sets the padding of the pie chart\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.StartAngle\">\n            <summary>\n            Gets or sets the start angle of the first pie segment\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartPieSeries.Connectors\">\n            <summary>\n            Gets the pie chart connectors configuration\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPieSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPieSeries`2\"/> class.\n            </summary>\n            <param name=\"expressionValue\">The value expression.</param>\n            <param name=\"expressionCategory\">The category expression.</param>\n            <param name=\"expressionColor\">The color expression.</param>\n            <param name=\"expressionExplode\">The explode expression.</param>\n            <param name=\"expressionVisibleInLegend\">The visibleInLegend expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPieSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPieSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPieSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPieSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Member\">\n            <summary>\n            Gets the model data member name.\n            </summary>\n            <value>The model data member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.ExplodeMember\">\n            <summary>\n            Gets the model data explode member name.\n            </summary>\n            <value>The model data explode member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.ColorMember\">\n            <summary>\n            Gets the model data color member name.\n            </summary>\n            <value>The model data color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.VisibleInLegendMember\">\n            <summary>\n            Gets the model data visibleInLegend member name.\n            </summary>\n            <value>The model data visibleInLegend member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Explode\">\n            <summary>\n            Gets a function which returns the explode of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.VisibleInLegend\">\n            <summary>\n            Gets a function which returns the visibleInLegend of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Color\">\n            <summary>\n            Gets a function which returns the color of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Labels\">\n            <summary>\n            Gets the pie chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Border\">\n            <summary>\n            Gets or sets the pie border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Data\">\n            <summary>\n            The pie chart data configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Overlay\">\n            <summary>\n            Gets or sets the effects overlay.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Padding\">\n            <summary>\n            Gets or sets the padding of the chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.StartAngle\">\n            <summary>\n            Gets or sets the start angle of the first pie segment.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPieSeries`2.Connectors\">\n            <summary>\n            Gets the pie chart connectors configuration\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n            <param name=\"expression\">The expression used to extract the point value from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The series data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoundSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoundSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartSeriesOrientation\">\n            <summary>\n            Defines the possible series orientation.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Horizontal\">\n            <summary>\n            The series are horizontal (bar chart, line chart, etc.)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Vertical\">\n            <summary>\n            The series are vertical (column chart, vertical line chart, etc.)\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Bar\">\n            <summary>\n            The default settings for all bar series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Column\">\n            <summary>\n            The default settings for all column series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Line\">\n            <summary>\n            The default settings for all line series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.VerticalLine\">\n            <summary>\n            The default settings for all vertical line series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Area\">\n            <summary>\n            The default settings for all area series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.VerticalArea\">\n            <summary>\n            The default settings for all vertical area series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Pie\">\n            <summary>\n            The default settings for all pie series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Donut\">\n            <summary>\n            The default settings for all donut series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Funnel\">\n            <summary>\n            The default settings for all funnel series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Scatter\">\n            <summary>\n            The default settings for all scatter series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.ScatterLine\">\n            <summary>\n            The default settings for all scatter line series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.OHLC\">\n            <summary>\n            The default settings for all ohlc series\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.Bullet\">\n            <summary>\n            The default settings for all bullet series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.VerticalBullet\">\n            <summary>\n            The default settings for all vertical bullet series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.RadarArea\">\n            <summary>\n            The default settings for all radar area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.RadarColumn\">\n            <summary>\n            The default settings for all radar column series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.RadarLine\">\n            <summary>\n            The default settings for all radar line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.PolarArea\">\n            <summary>\n            The default settings for all polar area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.PolarLine\">\n            <summary>\n            The default settings for all polar line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartSeriesDefaults.PolarScatter\">\n            <summary>\n            The default settings for all polar scatter series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSeriesDefaults`1.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSeriesDefaults`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Bar\">\n            <summary>\n            The default settings for all bar series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Column\">\n            <summary>\n            The default settings for all column series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Area\">\n            <summary>\n            The default settings for all area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.VerticalArea\">\n            <summary>\n            The default settings for all vertical area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Line\">\n            <summary>\n            The default settings for all line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.VerticalLine\">\n            <summary>\n            The default settings for all vertical line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Pie\">\n            <summary>\n            The default settings for all pie series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Donut\">\n            <summary>\n            The default settings for all donut series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Scatter\">\n            <summary>\n            The default settings for all scatter series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.ScatterLine\">\n            <summary>\n            The default settings for all scatter line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.OHLC\">\n            <summary>\n            The default settings for all ohlc series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.Bullet\">\n            <summary>\n            The default settings for all bullet series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.VerticalBullet\">\n            <summary>\n            The default settings for all vertical bullet series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.RadarArea\">\n            <summary>\n            The default settings for all radar area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.RadarColumn\">\n            <summary>\n            The default settings for all radar column series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.RadarLine\">\n            <summary>\n            The default settings for all radar line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.PolarArea\">\n            <summary>\n            The default settings for all polar area series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.PolarLine\">\n            <summary>\n            The default settings for all polar line series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesDefaults`1.PolarScatter\">\n            <summary>\n            The default settings for all polar scatter series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartPointLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartPointLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartPointLabels.Position\">\n            <summary>\n            Gets or sets the label position.\n            </summary>\n            <remarks>\n            The default value is <see cref=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Above\"/> for clustered series and\n            <see cref=\"F:Kendo.Mvc.UI.ChartPointLabelsPosition.Above\"/> for stacked series.\n            </remarks>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ChartBarSeriesOverlay\">\n            <summary>\n            Defines the available bar series effects overlays\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarSeriesOverlay.None\">\n            <summary>\n            The bars have no effect overlay\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ChartBarSeriesOverlay.Glass\">\n            <summary>\n            The bars have glass effect overlay\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDonutSeries.Margin\">\n            <summary>\n            Gets or sets the margin of the donut series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDonutSeries.HoleSize\">\n            <summary>\n            Gets or sets the size of the donut hole.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartDonutSeries.Size\">\n            <summary>\n            Gets or sets the size of the donut series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartDonutSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartDonutSeries`2\"/> class.\n            </summary>\n            <param name=\"expressionValue\">The value expression.</param>\n            <param name=\"expressionCategory\">The category expression.</param>\n            <param name=\"expressionColor\">The color expression.</param>\n            <param name=\"expressionExplode\">The explode expression.</param>\n            <param name=\"expressionVisibleInLegend\">The visibleInLegend expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartDonutSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartDonutSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartDonutSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartDonutSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDonutSeries`2.Margin\">\n            <summary>\n            Gets or sets the margin of the donut series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDonutSeries`2.HoleSize\">\n            <summary>\n            Gets or sets the the size of the donut hole.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDonutSeries`2.Size\">\n            <summary>\n            Gets or sets the the size of the donut series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.SizeMember\">\n            <summary>\n            Gets the Size data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.CategoryMember\">\n            <summary>\n            Gets the Category data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.ColorMember\">\n            <summary>\n            Gets the Color data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.VisibleInLegendMember\">\n            <summary>\n            Gets the VisibleInLegend data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.MinSize\">\n            <summary>\n            Gets the minimum bubble size of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.MaxSize\">\n            <summary>\n            Gets the maximum bubble size of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.NegativeValues\">\n            <summary>\n            Gets the negative value bubbles options.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBubbleSeries.Border\">\n            <summary>\n            Gets or sets the bubble border.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBubbleSeries`4.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,`3}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBubbleSeries`4\"/> class.\n            </summary>\n            <param name=\"xValueExpression\">The X expression.</param>\n            <param name=\"yValueExpression\">The Y expression.</param>\n            <param name=\"sizeExpression\">The Size expression.</param>\n            <param name=\"categoryExpression\">The Category expression.</param>\n            <param name=\"colorExpression\">The Color expression.</param>\n            <param name=\"visibleInLegendExpression\">The VisibleInLegend expression.</param>\n            <param name=\"noteTextExpression\">The note text expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBubbleSeries`4.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBubbleSeries`4\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBubbleSeries`4.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBubbleSeries`4\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.SizeMember\">\n            <summary>\n            Gets the Size data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.CategoryMember\">\n            <summary>\n            Gets the Category data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.ColorMember\">\n            <summary>\n            Gets the Color data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.VisibleInLegendMember\">\n            <summary>\n            Gets the VisibleInLegend data member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.MinSize\">\n            <summary>\n            Gets the minimum bubble size of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.MaxSize\">\n            <summary>\n            Gets the maximum bubble size of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.NegativeValues\">\n            <summary>\n            Gets the negative value bubbles options.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBubbleSeries`4.Border\">\n            <summary>\n            Gets or sets the bubble border.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNegativeValueSettings.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNegativeValueSettings\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNegativeValueSettings.Color\">\n            <summary>\n            Gets or sets the negative value bubbles color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNegativeValueSettings.Visible\">\n            <summary>\n            Gets or sets the markers visibility.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Aggregates\">\n            <summary>\n            Aggregates function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Line\">\n            <summary>\n            The ohlc chart line configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Type\">\n            <summary>\n            The type of the chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Spacing\">\n            <summary>\n            Space between points.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.Border\">\n            <summary>\n            Gets or sets the point border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.NoteTextMember\">\n            <summary>\n            Gets the model note text member name.\n            </summary>\n            <value>The model note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.OpenMember\">\n            <summary>\n            Gets the model open member name.\n            </summary>\n            <value>The model open member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.HighMember\">\n            <summary>\n            Gets the model high member name.\n            </summary>\n            <value>The model high member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.LowMember\">\n            <summary>\n            Gets the model low member name.\n            </summary>\n            <value>The model low member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartOHLCSeries.CloseMember\">\n            <summary>\n            Gets the model close member name.\n            </summary>\n            <value>The model close member name.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartOHLCSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartOHLCSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"openExpression\">The open expression.</param>\n            <param name=\"highExpression\">The high expression.</param>\n            <param name=\"lowExpression\">The low expression.</param>\n            <param name=\"closeExpression\">The close expression.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"colorExpression\">The color expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartOHLCSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartOHLCSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartOHLCSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartOHLCSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.OpenMember\">\n            <summary>\n            Gets the model data open member name.\n            </summary>\n            <value>The model data open member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.HighMember\">\n            <summary>\n            Gets the model data high member name.\n            </summary>\n            <value>The model data high member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.LowMember\">\n            <summary>\n            Gets the model data low member name.\n            </summary>\n            <value>The model data low member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.CloseMember\">\n            <summary>\n            Gets the model data close member name.\n            </summary>\n            <value>The model data close member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.ColorMember\">\n            <summary>\n            Gets the model data color member name.\n            </summary>\n            <value>The model data color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Border\">\n            <summary>\n            Gets or sets the point border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Data\">\n            <summary>\n            The ohlc chart data configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Aggregates\">\n            <summary>\n            Aggregates function for date series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n            <value>\n            A value of 1 means that there is a total of 1 point width between categories. \n            The distance is distributed evenly on each side.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Spacing\">\n            <summary>\n            Space between points.\n            </summary>\n            <value>\n            Value of 1 means that the distance between points is equal to their width.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCSeries`3.Line\">\n            <summary>\n            The ohlc chart line configuration.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartOHLCAggregates.#ctor(System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartOHLCAggregates\"/> class.\n            </summary>\n            <param name=\"open\">The open aggregate.</param>\n            <param name=\"high\">The high aggregate.</param>\n            <param name=\"low\">The low aggregate.</param>\n            <param name=\"close\">The close aggregate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartOHLCAggregates.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartOHLCAggregates\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCAggregates.Open\">\n            <summary>\n            Gets or sets the open aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCAggregates.High\">\n            <summary>\n            Gets or sets the high aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCAggregates.Low\">\n            <summary>\n            Gets or sets the low aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartOHLCAggregates.Close\">\n            <summary>\n            Gets or sets the close aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCandlestickSeries.DownColorMember\">\n            <summary>\n            Gets the model down color member name.\n            </summary>\n            <value>The model down color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartCandlestickSeries.Overlay\">\n            <summary>\n            Gets or sets the effects overlay.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartCandlestickSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartCandlestickSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"openExpression\">The open expression.</param>\n            <param name=\"highExpression\">The high expression.</param>\n            <param name=\"lowExpression\">The low expression.</param>\n            <param name=\"closeExpression\">The close expression.</param>\n            <param name=\"colorExpression\">The color expression.</param>\n            <param name=\"downColorExpression\">The down color expression.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The down color expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartCandlestickSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartCandlestickSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartCandlestickSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:ChartCandlestickSeries&lt;TModel, TValue&gt;\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCandlestickSeries`3.DownColorMember\">\n            <summary>\n            Gets the model data down color member name.\n            </summary>\n            <value>The model data down color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartCandlestickSeries`3.Overlay\">\n            <summary>\n            Gets or sets the effects overlay\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartSeriesHighlight.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartSeriesHighlight\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesHighlight.Opacity\">\n            <summary>\n            Gets or sets the highlight opacity\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesHighlight.Color\">\n            <summary>\n            Gets or sets the highlight opacity\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesHighlight.Border\">\n            <summary>\n            Gets or sets the highlight border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesHighlight.Line\">\n            <summary>\n            Gets or sets the highlight line configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartSeriesHighlight.Visible\">\n            <summary>\n            Gets or sets a value indicating if the highlight is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Spacing\">\n            <summary>\n            Space between bullets.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Orientation\">\n            <summary>\n            The orientation of the bullets.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Border\">\n            <summary>\n            Gets or sets the bullet's border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Target\">\n            <summary>\n            Gets or sets the bullet's target\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.Overlay\">\n            <summary>\n            Gets or sets the effects overlay\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.NoteTextMember\">\n            <summary>\n            Gets the model note text member name.\n            </summary>\n            <value>The model note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.CurrentMember\">\n            <summary>\n            Gets the model current member name.\n            </summary>\n            <value>The model current member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartBulletSeries.TargetMember\">\n            <summary>\n            Gets the model target member name.\n            </summary>\n            <value>The model target member name.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBulletSeries`3.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,`2}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBulletSeries`3\"/> class.\n            </summary>\n            <param name=\"targetExpression\">The expression used to extract the point target from the chart model.</param>\n            <param name=\"currentExpression\">The expression used to extract the point current from the chart model.</param>\n            <param name=\"colorExpression\">The expression used to extract the point color from the chart model.</param>\n            <param name=\"categoryExpression\">The expression used to extract the point category from the chart model.</param>\n            <param name=\"noteTextExpression\">The expression used to extract the point note text from the chart model.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBulletSeries`3.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBulletSeries`3\"/> class.\n            </summary>\n            <param name=\"data\">The data to bind to.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBulletSeries`3.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBarSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Opacity\">\n            <summary>\n            Gets or sets the series opacity.\n            </summary>\n            <value>A value between 0 (transparent) and 1 (opaque).</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Color\">\n            <summary>\n            Gets or sets the series base color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Visible\">\n            <summary>\n            Gets or sets a value indicating if the series is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.ColorHandler\">\n            <summary>\n            Gets or sets the series color function\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Tooltip\">\n            <summary>\n            Gets or sets the data point tooltip options.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Target\">\n            <summary>\n            Gets or sets the data point target.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Axis\">\n            <summary>\n            Gets or sets the axis name to use for this series.\n            </summary>\n            <value>The axis name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Name\">\n            <summary>\n            Gets or sets the title of the series.\n            </summary>\n            <value>The title.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Gap\">\n            <summary>\n            The distance between category clusters.\n            </summary>\n            <value>\n            A value of 1 means that there is a total of 1 column width / bar height between categories. \n            The distance is distributed evenly on each side.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Spacing\">\n            <summary>\n            Space between bars.\n            </summary>\n            <value>\n            Value of 1 means that the distance between bars is equal to their width.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Orientation\">\n            <summary>\n            The orientation of the bullets.\n            </summary>\n            <value>\n            Can be either <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Horizontal\">horizontal</see>\n            or <see cref=\"F:Kendo.Mvc.UI.ChartSeriesOrientation.Vertical\">vertical</see>.\n            The default value is horizontal.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Border\">\n            <summary>\n            Gets or sets the bullet border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Overlay\">\n            <summary>\n            Gets or sets the effects overlay.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.ColorMember\">\n            <summary>\n            Gets the model color member name.\n            </summary>\n            <value>The model color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.NoteTextMember\">\n            <summary>\n            Gets the model note text member name.\n            </summary>\n            <value>The model note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.TargetMember\">\n            <summary>\n            Gets the model target member name.\n            </summary>\n            <value>The model target member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.CurrentMember\">\n            <summary>\n            Gets the model current member name.\n            </summary>\n            <value>The model current member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Data\">\n            <summary>\n            The data used for binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.GroupNameTemplate\">\n            <summary>\n            Name template for auto-generated series when binding to grouped data.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Highlight\">\n            <summary>\n            Gets or sets the series highlight options\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletSeries`3.Notes\">\n            <summary>\n            Gets or sets the series notes options\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBulletTarget.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBulletTarget\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletTarget.Width\">\n            <summary>\n            Gets or sets the target width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletTarget.Color\">\n            <summary>\n            Gets or sets the markers color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBulletTarget.Border\">\n            <summary>\n            Gets or sets the markers border.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNoteLabel.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNoteLabel\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNoteLabel.Position\">\n            <summary>\n            Gets or sets the label position.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNoteLabel.Text\">\n            <summary>\n            Gets or sets the label text.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoxPlotAggregates.#ctor(System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate},System.Nullable{Kendo.Mvc.UI.ChartSeriesAggregate})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoxPlotAggregates\"/> class.\n            </summary>\n            <param name=\"lower\">The lower aggregate.</param>\n            <param name=\"q1\">The q1 aggregate.</param>\n            <param name=\"median\">The median aggregate.</param>\n            <param name=\"q3\">The q3 aggregate.</param>\n            <param name=\"upper\">The upper aggregate.</param>\n            <param name=\"mean\">The mean aggregate.</param>\n            <param name=\"outliers\">The outliers aggregate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartBoxPlotAggregates.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartBoxPlotAggregates\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Lower\">\n            <summary>\n            Gets or sets the lower aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Q1\">\n            <summary>\n            Gets or sets the q1 aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Median\">\n            <summary>\n            Gets or sets the median aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Q3\">\n            <summary>\n            Gets or sets the q3 aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Upper\">\n            <summary>\n            Gets or sets the upper aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Mean\">\n            <summary>\n            Gets or sets the mean aggregate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartBoxPlotAggregates.Outliers\">\n            <summary>\n            Gets or sets the outliers aggregate.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartFunnelLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartFunnelLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelLabels.Align\">\n            <summary>\n            Defines the alignment of the funnel labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelLabels.Position\">\n            <summary>\n            Defines the position of the funnel labels.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.VisibleInLegendMember\">\n            <summary>\n            Gets the data visibleInLegend member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.NeckRatio\">\n            <summary>\n            Gets or sets the ratio top-base/bottom-base of the funnel chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.DynamicSlope\">\n            <summary>\n            Gets or sets dynamicSlope option of the funnel chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.DynamicHeight\">\n            <summary>\n            Gets or sets the dynamicHeight of the funnel chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.SegmentSpacing\">\n            <summary>\n            Gets or sets the space between the segments of the funnel chart.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.ColorMember\">\n            <summary>\n            Gets the data color member of the series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.Labels\">\n            <summary>\n            Gets or sets the funnel chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IChartFunnelSeries.Border\">\n            <summary>\n            Gets or sets the funnel segments border\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartFunnelSeries`2.#ctor(System.Linq.Expressions.Expression{System.Func{`0,`1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartFunnelSeries`2\"/> class.\n            </summary>\n            <param name=\"expressionValue\">The value expression.</param>\n            <param name=\"expressionCategory\">The category expression.</param>\n            <param name=\"expressionColor\">The color expression.</param>\n            <param name=\"expressionExplode\">The explode expression.</param>\n            <param name=\"expressionVisibleInLegend\">The visibleInLegend expression.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartFunnelSeries`2.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartFunnelSeries`2\"/> class.\n            </summary>\n            <param name=\"data\">The data.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartFunnelSeries`2.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartFunnelSeries`2\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Type\">\n            <summary>\n            Gets the series type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Member\">\n            <summary>\n            Gets the model data member name.\n            </summary>\n            <value>The model data member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.CategoryMember\">\n            <summary>\n            Gets the model data category member name.\n            </summary>\n            <value>The model data category member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.ColorMember\">\n            <summary>\n            Gets the model data color member name.\n            </summary>\n            <value>The model data color member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.VisibleInLegendMember\">\n            <summary>\n            Gets the model data visibleInLegend member name.\n            </summary>\n            <value>The model data visibleInLegend member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.NoteTextMember\">\n            <summary>\n            Gets the model data note text member name.\n            </summary>\n            <value>The model data note text member name.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Category\">\n            <summary>\n            Gets a function which returns the category of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.VisibleInLegend\">\n            <summary>\n            Gets a function which returns the visibleInLegend of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Color\">\n            <summary>\n            Gets a function which returns the color of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Labels\">\n            <summary>\n            Gets the funnel chart data labels configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Border\">\n            <summary>\n            Gets or sets the funnel border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.Data\">\n            <summary>\n            The funnel chart data configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.NeckRatio\">\n            <summary>\n            Get or set the funnel chart NeckRatio option\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.DynamicSlope\">\n            <summary>\n            Get or set the funnel chart DynamicSlope option\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.DynamicHeight\">\n            <summary>\n            Get or set the funnel chart DynamicHeight option\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartFunnelSeries`2.SegmentSpacing\">\n            <summary>\n            Get or set the funnel chart SegmentSpacing option\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePickerBase\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.#ctor(Kendo.Mvc.UI.ColorPalette)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .Events(events =>\n                            events.Select(\"select\").Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the picker input\n            </summary>\n            <param name=\"color\">The initially selected color</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .Value(\"#ff0000\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.Columns(System.Int32)\">\n            <summary>\n            Sets the amount of columns that should be shown\n            </summary>\n            <param name=\"columns\">The initially selected color</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .Columns(5)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.TileSize(System.Int32)\">\n            <summary>\n            Sets the size of the palette tiles\n            </summary>\n            <param name=\"tileSize\">The tile size (for square tiles)</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .TileSize(32)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.TileSize(System.Action{Kendo.Mvc.UI.Fluent.PaletteSizeBuilder})\">\n            <summary>\n            Sets the size of the palette tiles\n            </summary>\n            <param name=\"columns\">The tile size (for square tiles)</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .TileSize(s => s.Width(20).Height(10))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.Palette(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">A list of colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .Palette(new List&lt;string&gt; { \"#ff0000\", \"#00ff00\", \"#0000ff\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPaletteBuilder.Palette(Kendo.Mvc.UI.ColorPickerPalette)\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">One of the preset palettes of colors</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .Palette(ColorPickerPalette.WebSafe)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring ColorPicker client events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The events bag.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ColorPicker()\n                       .Name(\"ColorPicker\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                // event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PaletteSizeBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePickerBase\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PaletteSizeBuilder.#ctor(Kendo.Mvc.UI.ColorPaletteTileSize)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.PaletteSizeBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PaletteSizeBuilder.Width(System.Int32)\">\n            <summary>\n            Set the width of the tiles\n            </summary>\n            <param name=\"width\">The tile width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PaletteSizeBuilder.Height(System.Int32)\">\n            <summary>\n            Set the height of the tiles\n            </summary>\n            <param name=\"width\">The tile height.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ColorPickerPalette\">\n            <summary>\n            Defines the palettes that can be used in the color picker\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ColorPickerPalette.None\">\n            <summary>\n            Do not use a palette (allow selection of arbitrary colors)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ColorPickerPalette.Basic\">\n            <summary>\n            Use a palette of basic colors\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.ColorPickerPalette.WebSafe\">\n            <summary>\n            Use a palette of web-safe colors\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ColorPickerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePickerBase\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.#ctor(Kendo.Mvc.UI.ColorPicker)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ColorPickerBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events =>\n                            events.Select(\"select\").Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the picker input\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Opacity(System.Boolean)\">\n            <summary>\n            Indicates whether the picker will allow transparent colors to be picked.\n            </summary>\n            <param name=\"allowOpacity\">Whether the user is allowed to change the color opacity.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Opacity(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Palette(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">A list of colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Palette(new List&lt;string&gt; { \"#ff0000\", \"#00ff00\", \"#0000ff\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Palette(Kendo.Mvc.UI.ColorPickerPalette)\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">One of the preset palettes of colors</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Palette(ColorPickerPalette.WebSafe)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the picker.\n            </summary>\n            <param name=\"value\">Whether the picker is enabled</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Enable(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.Buttons(System.Boolean)\">\n            <summary>\n            Shows or hides the accept/cancel buttons.\n            </summary>\n            <param name=\"value\">Whether the buttons should be shown</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Buttons(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.ToolIcon(System.String)\">\n            <summary>\n            Shows a tool icon.\n            </summary>\n            <param name=\"cssClass\">The CSS class that will be used for styling</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .ToolIcon(\"k-foreColor\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.TileSize(System.Int32)\">\n            <summary>\n            Sets the size of the palette tiles\n            </summary>\n            <param name=\"tileSize\">The tile size (for square tiles)</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .TileSize(32)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerBuilder.TileSize(System.Action{Kendo.Mvc.UI.Fluent.PaletteSizeBuilder})\">\n            <summary>\n            Sets the size of the palette tiles\n            </summary>\n            <param name=\"columns\">The tile size (for square tiles)</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n                        .TileSize(s => s.Width(20).Height(10))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring ColorPicker client events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The events bag.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ColorPicker()\n                       .Name(\"ColorPicker\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                // event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ColorPicker()\n                       .Name(\"ColorPicker\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                // event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events => events.Select(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ColorPicker()\n                       .Name(\"ColorPicker\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                // event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ColorPicker()\n                       .Name(\"ColorPicker\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                // event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColorPickerEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ComboBoxBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ComboBox\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.#ctor(Kendo.Mvc.UI.ComboBox)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ComboBoxBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.AutoBind(System.Boolean)\">\n            <summary>\n            Controls whether to bind the widget to the DataSource on initialization.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.BindTo(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.DropDownListItem})\" -->\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.BindTo(System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.DataValueField(System.String)\">\n            <summary>\n            Sets the field of the data item that provides the value content of the list items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .DataTextField(\"Text\")\n                        .DataValueField(\"Value\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events =>\n                            events.Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Filter(System.String)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Filter(\"startswith\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Filter(Kendo.Mvc.UI.FilterType)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Filter(FilterType.Contains);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.DropDownListItemFactory})\">\n            <summary>\n            Defines the items in the ComboBox\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.HighlightFirst(System.Boolean)\">\n            <summary>\n            Use it to enable highlighting of first matched item.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .HighlightFirst(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.MinLength(System.Int32)\">\n            <summary>\n            Specifies the minimum number of characters that should be typed before the widget queries the dataSource.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .MinLength(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.SelectedIndex(System.Int32)\">\n            <summary>\n            Use it to set selected item index\n            </summary>\n            <param name=\"index\">Item index.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .SelectedIndex(0);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Suggest(System.Boolean)\">\n            <summary>\n            Controls whether the ComboBox should automatically auto-type the rest of text.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Suggest(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Placeholder(System.String)\">\n            <summary>\n            A string that appears in the textbox when it has no value.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Placeholder(\"Select country...\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.CascadeFrom(System.String)\">\n            <summary>\n            Use it to set the Id of the parent ComboBox.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().ComboBox()\n                        .Name(\"ComboBox2\")\n                        .CascadeFrom(\"ComboBox1\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.CascadeFromField(System.String)\">\n            <summary>\n            Use it to set the field used to filter the data source.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().ComboBox()\n                        .Name(\"ComboBox2\")\n                        .CascadeFrom(\"ComboBox1\")\n                        .CascadeFromField(\"ParentID\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxBuilder.Text(System.String)\">\n            <summary>\n            Define the text of the widget, when the autoBind is set to false.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Text(\"Chai\")\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.ClientHandlerDescriptor\">\n            <summary>\n            Represents a client-side event handler of a Kendo UI widget\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.ClientHandlerDescriptor.TemplateDelegate\">\n            <summary>\n            A Razor template delegate.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.ClientHandlerDescriptor.HandlerName\">\n            <summary>\n            The name of the JavaScript function which will be called as a handler.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI ComboBox events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder\"/> class.\n            </summary>\n            <param name=\"Events\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.Select(\"select\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DataBound client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.DataBound(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.DataBound(\"dataBound\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Cascade(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Cascade client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                       .Name(\"ComboBox\")\n                       .Events(events => events.Cascade(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ComboBoxEventBuilder.Cascade(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Cascade client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Events(events => events.Cascade(\"cascade\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> AJAX create/update/destroy operation bindings.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2\">\n            <summary>    \n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> options.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Events(System.Action{Kendo.Mvc.UI.Fluent.DataSourceEventBuilder})\">\n            <summary>\n            Configures the client-side events\n            </summary>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Read(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Read operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Read(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Read(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Total(System.Int32)\">\n            <summary>\n            Sets the total number of records in the data source. Required during Custom binding.\n            </summary>\n            <param name=\"total\">Number of records</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.PageSize(System.Int32)\">\n            <summary>\n            Sets the number of records displayed on a single page.\n            </summary>\n            <param name=\"pageSize\"></param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.ServerOperation(System.Boolean)\">\n            <summary>\n            Sets the operation mode of the DataSource. \n            By default the DataSource will make a request to the server when data for paging, sorting, \n            filtering or grouping is needed. If set to false all data will be requested through single request. \n            Any other paging, sorting, filtering or grouping will be performed client-side.\n            </summary>\n            <param name=\"enabled\">True(default) if server operation mode is enabled, otherwise false.</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Sort(System.Action{Kendo.Mvc.UI.Fluent.DataSourceSortDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial sorting.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Group(System.Action{Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial grouping.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Aggregates(System.Action{Kendo.Mvc.UI.Fluent.DataSourceAggregateDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial aggregates.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Filter(System.Action{Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial filter.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Model(System.Action{Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory{`0}})\">\n            <summary>\n            Configures Model properties\n            </summary>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Update(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Update operation.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Update(System.String,System.String)\">\n            <summary>\n            Sets controller and action for Update operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Update(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller, action and routeValues for Update operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Create(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Create operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Create(System.String,System.String)\">\n            <summary>\n            Sets controller and action for Create operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Create(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller, action and routeValues for Create operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Destroy(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Destroy operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Destroy(System.String,System.String)\">\n            <summary>\n            Sets controller and action for Destroy operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Destroy(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller, action and routeValues for Destroy operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.Batch(System.Boolean)\">\n            <summary>\n            Determines if modifications will be sent to the server in batches or as individually requests.\n            </summary>\n            <param name=\"enabled\">If true changes will be batched, otherwise false.</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder`1.AutoSync(System.Boolean)\">\n            <summary>\n            Determines if data source would automatically sync any changes to its data items. By default changes are not automatically sync-ed.\n            </summary>\n            <param name=\"enabled\">If true changes will be automatically synced, otherwise false.</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ReadOnlyAjaxDataSourceBuilder`1\">\n            <summary>\n            Defines the fluent API for configuring a readon-only AJAX data source.\n            </summary>\n            <typeparam name=\"TModel\"></typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceSchedulerModelDescriptorFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> Model definition.\n            </summary>\n            <typeparam name=\"TModel\">Type of the model</typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> Model definition.\n            </summary>\n            <typeparam name=\"TModel\">Type of the model</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1.Id``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specify the member used to identify an unique Model instance.\n            </summary>\n            <typeparam name=\"TValue\">Type of the field</typeparam>\n            <param name=\"expression\">Member access expression which describes the member</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1.Id(System.String)\">\n            <summary>\n            Specify the member used to identify an unique Model instance.\n            </summary>\n            <param name=\"fieldName\">The member name.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1.Field``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Describes a Model field\n            </summary>\n            <typeparam name=\"TValue\">Field type</typeparam>\n            <param name=\"expression\">Member access expression which describes the field</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1.Field(System.String,System.Type)\">\n            <summary>\n            Describes a Model field\n            </summary>\n            <param name=\"memberName\">Field name</param>\n            <param name=\"memberType\">Field type</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory`1.Field``1(System.String)\">\n            <summary>\n            Describes a Model field\n            </summary>\n            <typeparam name=\"TValue\">Field type</typeparam>\n            <param name=\"memberName\">Member name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceSchedulerModelDescriptorFactory`1.RecurrenceId``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specify the member used for recurrenceId.\n            </summary>\n            <typeparam name=\"TValue\">Type of the field</typeparam>\n            <param name=\"expression\">Member access expression which describes the member</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceSchedulerModelDescriptorFactory`1.RecurrenceId(System.String)\">\n            <summary>\n            Specify the member used for recurrenceId.\n            </summary>\n            <param name=\"fieldName\">The member name.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.CrudOperation\"/> options for server binding.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Route(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the operation.\n            </summary>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Action(System.String,System.String)\">\n            <summary>\n            Sets the action and contoller values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder.Route(System.String)\">\n            <summary>\n            Sets the route name for the operation.\n            </summary>\n            <param name=\"routeName\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Read(System.Action{Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Read operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Read(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>    \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Read(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Total(System.Int32)\">\n            <summary>\n            Sets the total number of records in the data source. Required during Custom binding.\n            </summary>\n            <param name=\"total\">Number of records</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Update(System.Action{Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Update operation.\n            </summary>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Update(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Update operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Update(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Update operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Create(System.Action{Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Create operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Create(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Create operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Create(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Create operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Destroy(System.Action{Kendo.Mvc.UI.Fluent.ServerCrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Destroy operation.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Destroy(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Destroy operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>    \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Destroy(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Destroy operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.PageSize(System.Int32)\">\n            <summary>\n            Sets the number of records displayed on a single page.\n            </summary>\n            <param name=\"pageSize\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Sort(System.Action{Kendo.Mvc.UI.Fluent.DataSourceSortDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial sorting.\n            </summary>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Group(System.Action{Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial grouping.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Aggregates(System.Action{Kendo.Mvc.UI.Fluent.DataSourceAggregateDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial aggregates.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Filter(System.Action{Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial filter.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ServerDataSourceBuilder`1.Model(System.Action{Kendo.Mvc.UI.Fluent.DataSourceModelDescriptorFactory{`0}})\">\n            <summary>\n            Configures Model properties\n            </summary> \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> component client-side events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Change(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>  \n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event.\n            </summary>                \n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Sync(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the Sync client-side event.\n            </summary>  \n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Sync(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Sync client-side event.\n            </summary>                \n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.RequestStart(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the RequestStart client-side event.\n            </summary> \n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.RequestStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the RequestStart client-side event.\n            </summary>                \n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.RequestEnd(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the RequestEnd client-side event.\n            </summary> \n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.RequestEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the RequestEnd client-side event.\n            </summary>                \n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Error(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the Error client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Error client-side event.\n            </summary>                \n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceModelFieldDescriptorBuilder`1\">\n            <summary>    \n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ModelFieldDescriptor\"/>.\n            </summary>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelFieldDescriptorBuilder`1.DefaultValue(`0)\">\n            <summary>\n            Sets the value which will be used to populate the field when new non-existing model is created.\n            </summary>\n            <param name=\"value\">The value</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelFieldDescriptorBuilder`1.DefaultValue(System.Object)\">\n            <summary>\n            Sets the value which will be used to populate the field when new non-existing model is created.\n            </summary>\n            <param name=\"value\">The value</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelFieldDescriptorBuilder`1.Editable\">\n            <summary>\n            Specifies if the field should be editable.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceModelFieldDescriptorBuilder`1.Editable(System.Boolean)\">\n            <summary>\n            Specifies if the field should be editable.\n            </summary>\n            <param name=\"enabled\">True is the field should be editable, otherwise false</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceAggregateDescriptorFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.AggregateDescriptor\"/>.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregateDescriptorFactory`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specifies member on which aggregates to be calculated.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregateDescriptorFactory`1.Add(System.String,System.Type)\">\n            <summary>\n            Specifies member on which aggregates to be calculated.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.CrudOperationBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.CrudOperation\"/> options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Route(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the operation.\n            </summary>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Action(System.String,System.String)\">\n            <summary>\n            Sets the action and contoller values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Route(System.String)\">\n            <summary>\n            Sets the route name for the operation.\n            </summary>\n            <param name=\"routeName\"></param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Data(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets JavaScript function which to return additional parameters which to be sent the server.\n            </summary>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Data(System.String)\">\n            <summary>\n            Sets JavaScript function which to return additional parameters which to be sent the server.\n            </summary>\n            <param name=\"handler\">JavaScript function name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Url(System.String)\">\n            <summary>\n            Specifies an absolute or relative URL for the operation.\n            </summary>\n            <param name=\"url\">Absolute or relative URL for the operation</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Type(System.Web.Mvc.HttpVerbs)\">\n            <summary>\n            Specifies the HTTP verb of the request. \n            </summary>\n            <param name=\"verb\">The HTTP verb</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> when in read-only mode.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.Read(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Read operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.Read(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.Read(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.ServerFiltering\">\n            <summary>\n            Specifies if filtering should be handled by the server.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.ServerFiltering(System.Boolean)\">\n            <summary>\n            Specifies if filtering should be handled by the server.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.DataSourceEventBuilder})\">\n            <summary>\n            Configures the client-side events\n            </summary>  \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DataSource\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceBuilder`1.Ajax\">\n            <summary>\n            Use it to configure Ajax binding.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceBuilder`1.Server\">\n            <summary>\n            Use it to configure Server binding.\n            </summary>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.CalendarView\">\n            <summary>\n            Represents available types of calendar views.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.CalendarView.Month\">\n            <summary>\n            Shows the days of the current month\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.CalendarView.Year\">\n            <summary>\n            Shows the months of the current year\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.CalendarView.Decade\">\n            <summary>\n            Shows the years of the current decade\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.CalendarView.Century\">\n            <summary>\n            Shows the decades of the current century\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase\">\n            <summary>\n            Defines the fluent interface for configuring datepicker client events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DatePicker()\n                       .Name(\"DatePicker\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DatePicker()\n                       .Name(\"DatePicker\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n              )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DatePicker()\n                       .Name(\"DatePicker\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI DropDownList events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder\"/> class.\n            </summary>\n            <param name=\"Events\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.Select(\"select\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DataBound client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.DataBound(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.DataBound(\"dataBound\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Cascade(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Cascade client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                       .Name(\"DropDownList\")\n                       .Events(events => events.Cascade(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListEventBuilder.Cascade(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Cascade client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events => events.Cascade(\"cascade\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Route(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the operation.\n            </summary>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, contoller and route values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Action(System.String,System.String)\">\n            <summary>\n            Sets the action and contoller values for the operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route name and values for the operation.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Route(System.String)\">\n            <summary>\n            Sets the route name for the operation.\n            </summary>\n            <param name=\"routeName\"></param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorImageBrowserOperationBuilder.Url(System.String)\">\n            <summary>\n            Specifies an absolute or relative URL for the operation.\n            </summary>\n            <param name=\"url\">Absolute or relative URL for the operation</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.EditorStyleSheetBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Editor stylesheets.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.AuthorizeRead(System.String)\">\n            <summary>\n            Determines if content of a given path can be browsed.\n            </summary>\n            <param name=\"path\">The path which will be browsed.</param>\n            <returns>true if browsing is allowed, otherwise false.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.Thumbnail(System.String)\">\n            <summary>\n            Serves an image's thumbnail by given path.\n            </summary>\n            <param name=\"path\">The path to the image.</param>\n            <returns>Thumbnail of an image.</returns>\n            <exception cref=\"T:System.Web.HttpException\">Throws 403 Forbidden if the <paramref name=\"path\"/> is outside of the valid paths.</exception>\n            <exception cref=\"T:System.Web.HttpException\">Throws 404 File Not Found if the <paramref name=\"path\"/> refers to a non existant image.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.Destroy(System.String,Kendo.Mvc.UI.ImageBrowserEntry)\">\n            <summary>\n            Deletes a entry.\n            </summary>\n            <param name=\"path\">The path to the entry.</param>\n            <param name=\"entry\">The entry.</param>\n            <returns>An empty <see cref=\"T:System.Web.Mvc.ContentResult\"/>.</returns>\n            <exception cref=\"T:System.Web.HttpException\">Forbidden</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.AuthorizeDeleteFile(System.String)\">\n            <summary>\n            Determines if a file can be deleted.\n            </summary>\n            <param name=\"path\">The path to the file.</param>\n            <returns>true if file can be deleted, otherwise false.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.AuthorizeDeleteDirectory(System.String)\">\n            <summary>\n            Determines if a folder can be deleted.\n            </summary>\n            <param name=\"path\">The path to the folder.</param>\n            <returns>true if folder can be deleted, otherwise false.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.AuthorizeCreateDirectory(System.String,System.String)\">\n            <summary>\n            Determines if a folder can be created. \n            </summary>\n            <param name=\"path\">The path to the parent folder in which the folder should be created.</param>\n            <param name=\"name\">Name of the folder.</param>\n            <returns>true if folder can be created, otherwise false.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.Create(System.String,Kendo.Mvc.UI.ImageBrowserEntry)\">\n            <summary>\n            Creates a folder with a given entry.\n            </summary>\n            <param name=\"path\">The path to the parent folder in which the folder should be created.</param>\n            <param name=\"entry\">The entry.</param>\n            <returns>An empty <see cref=\"T:System.Web.Mvc.ContentResult\"/>.</returns>\n            <exception cref=\"T:System.Web.HttpException\">Forbidden</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.AuthorizeUpload(System.String,System.Web.HttpPostedFileBase)\">\n            <summary>\n            Determines if a file can be uploaded to a given path.\n            </summary>\n            <param name=\"path\">The path to which the file should be uploaded.</param>\n            <param name=\"file\">The file which should be uploaded.</param>\n            <returns>true if the upload is allowed, otherwise false.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.EditorImageBrowserController.Upload(System.String,System.Web.HttpPostedFileBase)\">\n            <summary>\n            Uploads a file to a given path.\n            </summary>\n            <param name=\"path\">The path to which the file should be uploaded.</param>\n            <param name=\"file\">The file which should be uploaded.</param>\n            <returns>A <see cref=\"T:System.Web.Mvc.JsonResult\"/> containing the uploaded file's size and name.</returns>\n            <exception cref=\"T:System.Web.HttpException\">Forbidden</exception>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.EditorImageBrowserController.ContentPath\">\n            <summary>\n            Gets the base path from which content will be served.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.EditorImageBrowserController.Filter\">\n            <summary>\n            Gets the valid file extensions by which served files will be filtered.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ExpandableAnimationBuilder\">\n            <summary>\n            Defines the fluent API for configuring the <see cref=\"T:Kendo.Mvc.UI.ExpandableAnimation\"/> object.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PopupAnimationBuilder\">\n            <summary>\n            Defines the fluent API for configuring the <see cref=\"T:Kendo.Mvc.UI.PopupAnimation\"/> object.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePickerBase\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.#ctor(Kendo.Mvc.UI.FlatColorPicker)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.SimpleColorPickerEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Events(events =>\n                            events.Select(\"select\").Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the picker input\n            </summary>\n            <param name=\"color\">The initially selected color</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Value(\"#ff0000\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Opacity(System.Boolean)\">\n            <summary>\n            Indicates whether the picker will allow transparent colors to be picked.\n            </summary>\n            <param name=\"allowOpacity\">Whether the user is allowed to change the color opacity.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Opacity(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Input(System.Boolean)\">\n            <summary>\n            Indicates whether the picker will show an input for entering colors.\n            </summary>\n            <param name=\"showInput\">Whether the input field should be shown.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Input(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Preview(System.Boolean)\">\n            <summary>\n            Indicates whether the picker will show a preview of the selected color.\n            </summary>\n            <param name=\"showPreview\">Whether the preview area should be shown.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Preview(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FlatColorPickerBuilder.Buttons(System.Boolean)\">\n            <summary>\n            Indicates whether the picker will show apply / cancel buttons.\n            </summary>\n            <param name=\"showButtons\">Whether the buttons should be shown.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n                        .Buttons(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GaugeRadialScaleLabelsPosition\">\n            <summary>\n            Defines the position of the radial gauge labels.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GaugeRadialScaleLabelsPosition.Inside\">\n            <summary>\n            The labels are positioned inside.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GaugeRadialScaleLabelsPosition.Outside\">\n            <summary>\n            The labels are positioned outside.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLineBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"!:GaugeLine\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLineBuilder.#ctor(Kendo.Mvc.UI.ChartLine)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:GugeLineBuilder\"/> class.\n            </summary>\n            <param name=\"gaugeLine\">The chart line.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLineBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the line visibility\n            </summary>\n            <param name=\"visible\">The line visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.Line(line => line.Color(\"#f00\")))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearScaleLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the linear gauge labels.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the gauge labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.#ctor(Kendo.Mvc.UI.GaugeScaleLabelsBase)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1\"/> class.\n            </summary>\n            <param name=\"scaleLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Font(System.String)\">\n            <summary>\n            Sets the labels font\n            </summary>\n            <param name=\"font\">The labels font (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Font(\"14px Arial,Helvetica,sans-serif\")\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Visible(System.Boolean)\">\n            <summary>\n            Sets the labels visibility\n            </summary>\n            <param name=\"visible\">The labels visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Background(System.String)\">\n            <summary>\n            Sets the labels background color\n            </summary>\n            <param name=\"background\">The labels background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Background(\"Red\")\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Color(System.String)\">\n            <summary>\n            Sets the labels text color\n            </summary>\n            <param name=\"color\">The labels text color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Color(\"Red\")\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the labels margin\n            </summary>\n            <param name=\"top\">The labels top margin.</param>\n            <param name=\"right\">The labels right margin.</param>\n            <param name=\"bottom\">The labels bottom margin.</param>\n            <param name=\"left\">The labels left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Margin(0, 5, 5, 0)\n                           )\n                       )\n            %&gt;els\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Margin(System.Int32)\">\n            <summary>\n            Sets the labels margin\n            </summary>\n            <param name=\"margin\">The labels margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Margin(20)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Padding(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the labels padding\n            </summary>\n            <param name=\"top\">The labels top padding.</param>\n            <param name=\"right\">The labels right padding.</param>\n            <param name=\"bottom\">The labels bottom padding.</param>\n            <param name=\"left\">The labels left padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Padding(0, 5, 5, 0)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Padding(System.Int32)\">\n            <summary>\n            Sets the labels padding\n            </summary>\n            <param name=\"padding\">The labels padding.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Padding(20)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the labels border\n            </summary>\n            <param name=\"width\">The labels border width.</param>\n            <param name=\"color\">The labels border color (CSS syntax).</param>\n            <param name=\"dashType\">The labels border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Border(1, \"Red\", ChartDashType.Dot)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the label border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Format(System.String)\">\n            <summary>\n            Sets the labels format.\n            </summary>\n            <param name=\"format\">The labels format.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Format(\"{0:C}\")\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Template(System.String)\">\n            <summary>\n            Sets the labels template.\n            </summary>\n            <param name=\"template\">The labels template.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Template(\"#= value #\")\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLabelsBuilder`1.Opacity(System.Double)\">\n            <summary>\n            Sets the labels opacity.\n            </summary>\n            <param name=\"opacity\">\n            The series opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Opacity(0.5)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearScaleLabelsBuilder.#ctor(Kendo.Mvc.UI.GaugeLinearScaleLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearScaleLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"scaleLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialScaleLabelsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the radial gauge labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleLabelsBuilder.#ctor(Kendo.Mvc.UI.GaugeRadialScaleLabels)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialScaleLabelsBuilder\"/> class.\n            </summary>\n            <param name=\"scaleLabels\">The labels configuration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleLabelsBuilder.Position(Kendo.Mvc.UI.GaugeRadialScaleLabelsPosition)\">\n            <summary>\n            Sets the labels position\n            </summary>\n            <param name=\"position\">The labels position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Position(GaugeRadialScaleLabelsPosition.Inside)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.LinearGauge\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.#ctor(Kendo.Mvc.UI.LinearGauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.Theme(System.String)\">\n            <summary>\n            Sets the theme of the linear gauge.\n            </summary>\n            <param name=\"theme\">The linear gauge theme.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Theme(\"Black\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.GaugeArea(System.Action{Kendo.Mvc.UI.Fluent.GaugeAreaBuilder})\">\n            <summary>\n            Sets the linear gauge area.\n            </summary>\n            <param name=\"configurator\">The linear gauge area.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .ChartArea(chartArea => chartArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.Scale(System.Action{Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder})\">\n            <summary>\n            Configures the scale\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .Min(10)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.Pointer(System.Action{Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder})\">\n            <summary>\n            Configures the pointer\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Pointer(pointer => pointer\n                           .Value(10)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.LinearGaugeBuilder.Transitions(System.Boolean)\">\n            <summary>\n            Enables or disabled animated transitions on initial load and refresh. \n            </summary>\n            <param name=\"transitions\">\n            A value indicating if transition animations should be played.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialScale\")\n                       .Transitions(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.RadialGauge\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.#ctor(Kendo.Mvc.UI.RadialGauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.Theme(System.String)\">\n            <summary>\n            Sets the theme of the radial gauge.\n            </summary>\n            <param name=\"theme\">The radial gauge theme.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Theme(\"Black\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.GaugeArea(System.Action{Kendo.Mvc.UI.Fluent.GaugeAreaBuilder})\">\n            <summary>\n            Sets the radial gauge area.\n            </summary>\n            <param name=\"configurator\">The radial gauge area.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .ChartArea(chartArea => chartArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.Scale(System.Action{Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder})\">\n            <summary>\n            Configures the scale\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .Min(10)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.Pointer(System.Action{Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder})\">\n            <summary>\n            Configures the pointer\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Pointer(pointer => pointer\n                           .Value(10)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RadialGaugeBuilder.Transitions(System.Boolean)\">\n            <summary>\n            Enables or disabled animated transitions on initial load and refresh. \n            </summary>\n            <param name=\"transitions\">\n            A value indicating if transition animations should be played.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialScale\")\n                       .Transitions(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the gauge scale.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring scale.\n            </summary>\n            <typeparam name=\"TScale\"></typeparam>\n            <typeparam name=\"TScaleBuilder\">The type of the series builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"scale\">The scale.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.MinorTicks(System.Action{Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder})\">\n            <summary>\n            Configures the minor ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .MinorTicks(ticks => ticks\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.MajorTicks(System.Action{Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder})\">\n            <summary>\n            Configures the major ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .MajorTicks(ticks => ticks\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Ranges(System.Action{Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory{`0}})\">\n            <summary>\n            Defines the ranges items.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                            .Ranges.Add()\n                            .From(1)\n                            .To(2)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.MajorUnit(System.Double)\">\n            <summary>\n            Sets the scale major unit.\n            </summary>\n            <param name=\"majorUnit\">The major unit.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => sclae.MajorUnit(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.MinorUnit(System.Double)\">\n            <summary>\n            Sets the scale minor unit.\n            </summary>\n            <param name=\"minorUnit\">The minor unit.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => sclae.MinorUnit(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Min(System.Double)\">\n            <summary>\n            Sets the scale min value.\n            </summary>\n            <param name=\"min\">The min.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => sclae.Min(-20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Max(System.Double)\">\n            <summary>\n            Sets the scale max value.\n            </summary>\n            <param name=\"max\">The max.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => sclae.Max(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Reverse(System.Boolean)\">\n            <summary>\n            Sets the scale reverse.\n            </summary>\n            <param name=\"reverse\">The scale reverse.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => sclae.reverse(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Line(System.Action{Kendo.Mvc.UI.Fluent.GaugeLineBuilder})\">\n            <summary>\n            Configures the major ticks.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Line(line => line\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.GaugeScaleBuilderBase`2.Scale\">\n            <summary>\n            Gets or sets the scale.\n            </summary>\n            <value>The scale.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder.#ctor(Kendo.Mvc.UI.LinearGauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder\"/> class.\n            </summary>\n            <param name=\"gauge\">The gauge component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder.Mirror(System.Boolean)\">\n            <summary>\n            Sets the mirror of the gauge\n            </summary>\n            <param name=\"mirror\">The mirror.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"LinearGauge\")\n                       .Scale(scale => scale\n                           .Mirror(true)\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder.Vertical(System.Boolean)\">\n            <summary>\n            Sets the orientation of the gauge\n            </summary>\n            <param name=\"vertical\">The vertical.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"LinearGauge\")\n                       .Scale(scale => scale\n                           .Vertical(false)\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder.Labels(System.Action{Kendo.Mvc.UI.Fluent.GaugeLinearScaleLabelsBuilder})\">\n            <summary>\n            Configures the labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.GaugeLinearScaleBuilder.linearGauge\">\n            <summary>\n            The parent Guage\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the gauge scale.\n            </summary>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.#ctor(Kendo.Mvc.UI.RadialGauge)\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.EndAngle(System.Double)\">\n            <summary>\n            Sets the end angle of the gauge\n            </summary>\n            <param name=\"endAngle\">The end angle.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .EndAngle(10)\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.StartAngle(System.Double)\">\n            <summary>\n            Sets the start angle of the gauge\n            </summary>\n            <param name=\"startAngle\">The start Angle.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .StartAngle(220)\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.Labels(System.Action{Kendo.Mvc.UI.Fluent.GaugeRadialScaleLabelsBuilder})\">\n            <summary>\n            Configures the labels.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .Labels(labels => labels\n                               .Visible(false)\n                           )\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.RangeSize(System.Double)\">\n            <summary>\n            Sets the width of the range indicators.\n            </summary>\n            <param name=\"theme\">The width of the range indicators.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .RangeSize(4)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.RangeDistance(System.Double)\">\n            <summary>\n            Sets the distance from the range indicators to the ticks.\n            </summary>\n            <param name=\"theme\">The distance from the range indicators to the ticks.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n                       .Scale(scale => scale\n                           .RangeDistance(4)\n                       )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.GaugeRadialScaleBuilder.radialGauge\">\n            <summary>\n            The parent Guage\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeScaleLabelsBase.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeScaleLabelsBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeRadialScaleLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeRadialScaleLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScaleLabels.Position\">\n            <summary>\n            The radila scale lables position.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeLinearScaleLabels.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeLinearScaleLabels\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.Ranges\">\n            <summary>\n            The scale ranges.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.MajorUnit\">\n            <summary>\n            The scale major unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.MinorUnit\">\n            <summary>\n            The scale major unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.MajorTicks\">\n            <summary>\n            The scale major ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.MinorTicks\">\n            <summary>\n            The scale minor ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.Min\">\n            <summary>\n            The scale min value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.Max\">\n            <summary>\n            The scale max value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.Reverse\">\n            <summary>\n            The scale reverse.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGaugeScale.Line\">\n            <summary>\n            The line.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IRadialScale.EndAngle\">\n            <summary>\n            The scale end angle.s\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IRadialScale.StartAngle\">\n            <summary>\n            The scale start angle.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IRadialScale.RangeSize\">\n            <summary>\n            The width of the range indicators\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IRadialScale.RangeDistance\">\n            <summary>\n            The distance from the range indicators to the ticks\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IRadialScale.Labels\">\n            <summary>\n            The scale labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeScaleBase.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeScaleBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.MajorTicks\">\n            <summary>\n            The scale major ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.MinorTicks\">\n            <summary>\n            The scale minor ticks configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.Ranges\">\n            <summary>\n            The scale ranges.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.MajorUnit\">\n            <summary>\n            The scale major unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.MinorUnit\">\n            <summary>\n            The scale minor unit.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.Min\">\n            <summary>\n            The scale min value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.Max\">\n            <summary>\n            The scale max value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.Reverse\">\n            <summary>\n            The scale reverse.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleBase.Line\">\n            <summary>\n            The line reverse.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILinearScale.Mirror\">\n            <summary>\n            The scale mirror.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILinearScale.Vertical\">\n            <summary>\n            The scale vertical.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ILinearScale.Labels\">\n            <summary>\n            The scale labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeLinearScale.#ctor(Kendo.Mvc.UI.LinearGauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeLinearScale\"/> class.\n            </summary>\n            <value>The linear gauge.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearScale.lienarGauge\">\n            <summary>\n            Gets or sets the linear gauge.\n            </summary>\n            <value>The linear gauge.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearScale.Mirror\">\n            <summary>\n            The scale mirror.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearScale.Vertical\">\n            <summary>\n            The scale orientation.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearScale.Labels\">\n            <summary>\n            The scale labels.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeRadialScale.#ctor(Kendo.Mvc.UI.RadialGauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeRadialScale\"/> class.\n            </summary>\n            <value>The radial gauge.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.radialGauge\">\n            <summary>\n            Gets or sets the radial gauge.\n            </summary>\n            <value>The radial gauge.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.EndAngle\">\n            <summary>\n            The scale end angle.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.StartAngle\">\n            <summary>\n            The scale start angle.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.RangeSize\">\n            <summary>\n            The width of the range indicators\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.RangeDistance\">\n            <summary>\n            The distance from the range indicators to the ticks\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialScale.Labels\">\n            <summary>\n            The scale labels.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePickerBase\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Animation(System.Boolean)\">\n            <summary>\n            Use to enable or disable animation of the popup element.\n            </summary>\n            <param name=\"enable\">The boolean value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().DatePicker()\n                       .Name(\"DatePicker\")\n                       .Animation(false) //toggle effect\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Animation(System.Action{Kendo.Mvc.UI.Fluent.PopupAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the widget.\n            </summary>\n            <param name=\"animationAction\">The action which configures the animation effects.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().DatePicker()\n                       .Name(\"DatePicker\")\n                       .Animation(animation =>\n                       {\n            \t            animation.Open(open =>\n            \t            {\n            \t                open.SlideIn(SlideDirection.Down);\n            \t            })\n                       })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Culture(System.String)\">\n            <summary>\n            Specifies the culture info used by the widget.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Culture(\"de-DE\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Events(System.Action{Kendo.Mvc.UI.Fluent.DatePickerEventBuilderBase})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Events(events =>\n                            events.Open(\"open\").Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Format(System.String)\">\n            <summary>\n            Sets the date format, which will be used to parse and format the machine date.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.ParseFormats(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Specifies the formats, which are used to parse the value set with value() method or by direct input.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the picker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Min(System.DateTime)\">\n            <summary>\n            Sets the minimal date, which can be selected in picker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Max(System.DateTime)\">\n            <summary>\n            Sets the maximal date, which can be selected in picker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Value(System.Nullable{System.DateTime})\">\n            <summary>\n            Sets the value of the picker input\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilderBase`2.Value(System.String)\">\n            <summary>\n            Sets the value of the picker input\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.#ctor(Kendo.Mvc.UI.DateTimePicker)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TimePickerBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.ARIATemplate(System.String)\">\n            <summary>\n            Specifies a template used to populate aria-label attribute.\n            </summary>\n            <param name=\"template\">The string template.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .ARIATemplate(\"Date: #=kendo.toString(data.current, 'd')#\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Interval(System.Int32)\">\n            <summary>\n            Sets the interval between hours.\n            </summary>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.BindTo(System.Collections.Generic.IList{System.DateTime})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Footer(System.Boolean)\">\n            <summary>\n            Enables/disables footer of the calendar popup.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .Footer(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Footer(System.String)\">\n            <summary>\n            Footer template to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .Footer(\"#= kendo.toString(data, \"G\") #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.FooterId(System.String)\">\n            <summary>\n            FooterId to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .FooterId(\"widgetFooterId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Depth(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the navigation depth.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .Depth(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Start(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the start view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .Start(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.MonthTemplateId(System.String)\">\n            <summary>\n            MonthTemplateId to be used for rendering the cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .MonthTemplateId(\"widgetMonthTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.MonthTemplate(System.String)\">\n            <summary>\n            Templates for the cells rendered in the \"month\" view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .MonthTemplate(\"#= data.value #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.MonthTemplate(System.Action{Kendo.Mvc.UI.Fluent.MonthTemplateBuilder})\">\n            <summary>\n            Configures the content of cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n                        .MonthTemplate(month => month.Content(\"#= data.value #\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Min(System.String)\">\n            <summary>\n            Sets the minimal date, which can be selected in DatePicker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.Max(System.String)\">\n            <summary>\n            Sets the maximal date, which can be selected in DatePicker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateTimePickerBuilder.TimeFormat(System.String)\">\n            <summary>\n            Specifies the format, which is used to format the values in the time drop-down list.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DropDownListBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DropDownList\"/> component.\n            </summary>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.BindTo(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.DropDownListItem})\" -->\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.BindTo(System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.DataValueField(System.String)\">\n            <summary>\n            Sets the field of the data item that provides the value content of the list items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .DataTextField(\"Text\")\n                        .DataValueField(\"Value\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.DropDownListEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Events(events =>\n                            events.Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.DropDownListItemFactory})\">\n            <summary>\n            Defines the items in the DropDownList\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.OptionLabel(System.String)\">\n            <summary>\n            Define the text of the default empty item. If the value is an object, then the widget will use it directly.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .OptionLabel(\"Select country...\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.SelectedIndex(System.Int32)\">\n            <summary>\n            Use it to set selected item index\n            </summary>\n            <param name=\"index\">Item index.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .SelectedIndex(0);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.CascadeFrom(System.String)\">\n            <summary>\n            Use it to set the Id of the parent DropDownList.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().DropDownList()\n                        .Name(\"DropDownList2\")\n                        .CascadeFrom(\"DropDownList1\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.CascadeFromField(System.String)\">\n            <summary>\n            Use it to set the field used to filter the data source.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().DropDownList()\n                        .Name(\"DropDownList2\")\n                        .CascadeFrom(\"DropDownList1\")\n                        .CascadeFromField(\"ParentID\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListBuilder.Text(System.String)\">\n            <summary>\n            Define the text of the widget, when the autoBind is set to false.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Text(\"Chai\")\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child DropDonwList items.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder.#ctor(Kendo.Mvc.UI.DropDownListItem)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder.Text(System.String)\">\n            <summary>\n            Sets the value for the item.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Items(items => items.Add().Text(\"First item.\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder.Value(System.String)\">\n            <summary>\n            Sets the value for the item.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Items(items => items.Add().Value(\"1\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemBuilder.Selected(System.Boolean)\">\n            <summary>\n            Define when the item will be expanded on intial render.\n            </summary>\n            <param name=\"value\">If true the item will be selected.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\").Selected(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DropDownListItemFactory\">\n            <summary>\n            Creates items for the <see cref=\"T:Kendo.Mvc.UI.DropDownListItem\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemFactory.#ctor(System.Collections.Generic.IList{Kendo.Mvc.UI.DropDownListItem})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.DropDownListItemFactory\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DropDownListItemFactory.Add\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorColorPickerToolBuilder.Palette(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">A list of colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Palette(new List&lt;string&gt; { \"#ff0000\", \"#00ff00\", \"#0000ff\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorColorPickerToolBuilder.Palette(Kendo.Mvc.UI.ColorPickerPalette)\">\n            <summary>\n            Sets the range of colors that the user can pick from.\n            </summary>\n            <param name=\"palette\">One of the preset palettes of colors</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n                        .Palette(ColorPickerPalette.WebSafe)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.EditorEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Editor events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Value(System.Action)\">\n            <summary>\n            Sets the HTML content that will show initially in the editor.\n            </summary>\n            <param name=\"value\">The action which renders the HTML content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Editor()\n                       .Name(\"Editor\")\n                       .Value(() => { %&gt;\n                           &lt;blockquote&gt;\n                               According to Deep Thought, the answer to the ultimate question of\n                               life, the universe and everything is &lt;strong&gt;42&lt;/strong&gt;.\n                           &lt;/blockquote&gt;\n                        &lt;% })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Value(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content that will show initially in the editor.\n            </summary>\n            <param name=\"value\">The predicate which renders the HTML content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Editor()\n                       .Name(\"Editor\")\n                       .Value(@&lt;blockquote&gt;\n                               According to Deep Thought, the answer to the ultimate question of\n                               life, the universe and everything is &lt;strong&gt;42&lt;/strong&gt;.\n                           &lt;/blockquote&gt;)\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Value(System.String)\">\n            <summary>\n            Sets the HTML content which the item should display as a string.\n            </summary>\n            <param name=\"value\">An HTML string.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .Value(\"&lt;blockquote&gt;A towel has &lt;strong&gt;immense&lt;/strong&gt; psychological value&lt;/blockquote&gt;\")\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.EditorEventBuilder})\">\n            <summary>\n            Configure the client events.\n            </summary>\n            <param name=\"configurator\">An action that configures the events.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .Events(events => events\n                            .Change(\"onChange\")\n                        )\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Tools(System.Action{Kendo.Mvc.UI.Fluent.EditorToolFactory})\">\n            <summary>\n            Configure the available tools in the toolbar.\n            </summary>\n            <param name=\"configurator\">An action that configures the tools.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .Tools(tools => tools\n                            .Clear()\n                            .Bold()\n                            .Italic()\n                            .Underline()\n                        )\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Tag(System.String)\">\n            <summary>\n            Allow rendering of contentEditable elements instead of the default textarea editor.\n            Note: contentEditable elements are not posted to the server.\n            </summary>\n            <param name=\"tagName\">The tag that will be rendered as contentEditable</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .Tag(\"div\")\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.Encode(System.Boolean)\">\n            <summary>\n            Encode HTML content.\n            </summary>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .Value(\"&lt;blockquote&gt;A towel has &lt;strong&gt;immense&lt;/strong&gt; psychological value&lt;/blockquote&gt;\")\n                        .Encode(true)\n            %&gt;\n            </code>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.StyleSheets(System.Action{Kendo.Mvc.UI.Fluent.EditorStyleSheetBuilder})\">\n            <summary>\n            Sets the CSS files that will be registered in the Editor's iframe\n            </summary>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .StyleSheets(styleSheets => styleSheets.Add(\"editorStyles.css\"))\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EditorBuilder.ImageBrowser(System.Action{Kendo.Mvc.UI.Fluent.EditorImageBrowserSettingsBuilder})\">\n            <summary>\n            Configure the image browser dialog.\n            </summary>\n            <param name=\"configurator\">An action that configures the dialog.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\")\n                        .ImageBrowser(imageBrowser => imageBrowser\n                            .Image(\"~/Content/UserFiles/Images/{0}\")\n                            .Read(\"Read\", \"ImageBrowser\")\n                            .Create(\"Create\", \"ImageBrowser\")\n                            .Destroy(\"Destroy\", \"ImageBrowser\")\n                            .Upload(\"Upload\", \"ImageBrowser\")\n                            .Thumbnail(\"Thumbnail\", \"ImageBrowser\"))\n                        )\n            %&gt;\n            </code>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GaugeLinearPointerShape\">\n            <summary>\n            Defines the shape of the liner gauge pointer.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GaugeLinearPointerShape.BarIndicator\">\n            <summary>\n            Specifies a filling bar indicator.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GaugeLinearPointerShape.Arrow\">\n            <summary>\n            Specifies a arrow shape.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1\">\n            <summary>\n            Creates scale ranges for the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1\"/> class.\n            </summary>\n            <param name=\"scale\">The scale.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1.Add\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1.Add(System.Double,System.Double,System.String)\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.GaugeScaleRangesFactory`1.Scale\">\n            <summary>\n            The gauge scale\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring ranges.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder.#ctor(Kendo.Mvc.UI.GaugeScaleRanges)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The scale ranges.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder.From(System.Double)\">\n            <summary>\n            Sets the ranges start position.\n            </summary>\n            <param name=\"from\">The ranges start position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale\n                           .Ranges(ranges => ranges\n                                 .Add().From(1).Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder.To(System.Double)\">\n            <summary>\n            Sets the ranges end position.\n            </summary>\n            <param name=\"to\">The ranges end position.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale\n                           .Ranges(ranges => ranges\n                                .Add().To(2).Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder.Color(System.String)\">\n            <summary>\n            Sets the ranges color\n            </summary>\n            <param name=\"color\">The ranges color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale\n                           .Ranges(ranges => ranges\n                                .Add().Color(\"Red\");\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleRangesBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the ranges opacity\n            </summary>\n            <param name=\"opacity\">The ranges opacity.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale\n                           .Ranges(ranges => ranges\n                                .Add().Opacity(0.5);\n                           )\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.GaugeArea\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.#ctor(Kendo.Mvc.UI.GaugeArea)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder\"/> class.\n            </summary>\n            <param name=\"gaugeArea\">The gauge area.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.Background(System.String)\">\n            <summary>\n            Sets the chart area background color.\n            </summary>\n            <param name=\"background\">The background color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .GaugeArea(gaugeArea => gaugeArea.Background(\"red\"))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the gauge area margin.\n            </summary>\n            <param name=\"top\">The gauge area top margin.</param>\n            <param name=\"right\">The gauge area right margin.</param>\n            <param name=\"bottom\">The gauge area bottom margin.</param>\n            <param name=\"left\">The gauge area left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .GaugeArea(gaugeArea => gaugeArea.Margin(0, 5, 5, 0))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the gauge area margin.\n            </summary>\n            <param name=\"margin\">The gauge area margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .GaugeArea(gaugeArea => gaugeArea.Margin(5))\n                      .Render();\n            %&gt;\n            </code>\n            </example>          \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the gauge area border.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <param name=\"color\">The border color (CSS syntax).</param>\n            <param name=\"dashType\">The border dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .GaugeArea(gaugeArea => gaugeArea.Border(1, \"#000\", ChartDashType.Dot))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeAreaBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the gauge area border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the linear gauge track.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.#ctor(Kendo.Mvc.UI.GaugeLinearTrack)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder\"/> class.\n            </summary>\n            <param name=\"linearTrack\">The linear gauge track.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.Color(System.String)\">\n            <summary>\n            Sets the track color.\n            </summary>\n            <param name=\"color\">The track color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Track(track => track.Color(\"red\"))\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.Size(System.Double)\">\n            <summary>\n            Sets the track size.\n            </summary>\n            <param name=\"size\">The track size.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Track(track => track.Size(8))\n                      )         \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the track visibility.\n            </summary>\n            <param name=\"visible\">The track visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Track(track => track.Visible(true))\n                      )         \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the track border.\n            </summary>\n            <param name=\"width\">The pointer border width.</param>\n            <param name=\"color\">The pointer border color.</param>\n            <param name=\"dashType\">The pointer dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Track(track => track.Border(1, \"#000\", ChartDashType.Dot))\n                      )         \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the track border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.#ctor(Kendo.Mvc.UI.GaugeLinearPointer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder\"/> class.\n            </summary>\n            <param name=\"pointer\">The gauge pointer.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Color(System.String)\">\n            <summary>\n            Sets the pointer color.\n            </summary>\n            <param name=\"color\">The pointer color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Color(\"red\")\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Shape(Kendo.Mvc.UI.GaugeLinearPointerShape)\">\n            <summary>\n            Sets the pointer shape.\n            </summary>\n            <param name=\"shape\">The pointer shape.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Shape(LinearGaugePointerShape.Arrow)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Margin(System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Sets the pointer margin.\n            </summary>\n            <param name=\"top\">The pointer top margin.</param>\n            <param name=\"right\">The pointer right margin.</param>\n            <param name=\"bottom\">The pointer bottom margin.</param>\n            <param name=\"left\">The pointer left margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Margin(20, 20, 20, 20)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Margin(System.Int32)\">\n            <summary>\n            Sets the pointer margin.\n            </summary>\n            <param name=\"margin\">The pointer margin.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Margin(20)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Border(System.Int32,System.String,Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the pointer border\n            </summary>\n            <param name=\"width\">The pointer border width.</param>\n            <param name=\"color\">The pointer border color.</param>\n            <param name=\"dashType\">The pointer dash type.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Border(1, \"#000\", ChartDashType.Dot)\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.ChartBorderBuilder})\">\n            <summary>\n            Configures the pointer border\n            </summary>\n            <param name=\"configurator\">The border configuration action</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the pointer opacity.\n            </summary>\n            <param name=\"opacity\">\n            The pointer opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Opacity(0.5)\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Size(System.Double)\">\n            <summary>\n            Sets the pointer size.\n            </summary>\n            <param name=\"size\">The pointer size.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Size(8)\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Value(System.Double)\">\n            <summary>\n            Sets the pointer value.\n            </summary>\n            <param name=\"value\">The pointer value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Value(25)\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeLinearPointerBuilder.Track(System.Action{Kendo.Mvc.UI.Fluent.GaugeLinearTrackBuilder})\">\n            <summary>\n            Configures the pointer track.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Pointer(pointer => pointer\n                          .Track(track => track.Visible(true))\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder.#ctor(Kendo.Mvc.UI.GaugeRadialCap)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder\"/> class.\n            </summary>\n            <param name=\"cap\">The gauge cap.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder.Color(System.String)\">\n            <summary>\n            Sets the cap color.\n            </summary>\n            <param name=\"color\">The cap color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Cap(cap => cap.Color(\"red\"))\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the cap opacity.\n            </summary>\n            <param name=\"opacity\">\n            The cap opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Cap(cap => cap.Opacity(0.5))\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder.Size(System.Double)\">\n            <summary>\n            Sets the cap size in percents.\n            </summary>\n            <param name=\"size\">The cap size in percents.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Cap(cap => cap.Size(8))\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder.#ctor(Kendo.Mvc.UI.GaugeRadialPointer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder\"/> class.\n            </summary>\n            <param name=\"pointer\">The gauge pointer.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder.Color(System.String)\">\n            <summary>\n            Sets the pointer color.\n            </summary>\n            <param name=\"color\">The pointer color.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Color(\"red\")\n                      )\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder.Opacity(System.Double)\">\n            <summary>\n            Sets the pointer opacity.\n            </summary>\n            <param name=\"opacity\">\n            The pointer opacity in the range from 0 (transparent) to 1 (opaque).\n            The default value is 1.\n            </param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Opacity(0.5)\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder.Value(System.Double)\">\n            <summary>\n            Sets the pointer value.\n            </summary>\n            <param name=\"value\">The pointer value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Value(25)\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeRadialPointerBuilder.Cap(System.Action{Kendo.Mvc.UI.Fluent.GaugeRadialCapBuilder})\">\n            <summary>\n            Configures the pointer cap.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().RadialGauge()\n                      .Name(\"radialGauge\")\n                      .Pointer(pointer => pointer\n                          .Cap(cap => cap.Color(\"red\"))\n                      )        \n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeRadialCap.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeRadialCap\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialCap.Color\">\n            <summary>\n            Gets or sets cap color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialCap.Opacity\">\n            <summary>\n            Gets or sets the cap opacity\n            </summary>\n            <value>\n            The cap opacity\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialCap.Size\">\n            <summary>\n            Gets or sets the cap size in percents\n            </summary>\n            <value>\n            The cap size in percents\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeRadialPointer.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeRadialPointer\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialPointer.Color\">\n            <summary>\n            Gets or sets pointer color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialPointer.Opacity\">\n            <summary>\n            Gets or sets the pointer opacity\n            </summary>\n            <value>\n            The pointer opacity\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialPointer.Value\">\n            <summary>\n            Gets or sets the pointer value\n            </summary>\n            <value>\n            The pointer value\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeRadialPointer.Cap\">\n            <summary>\n            Gets or sets the pointer value\n            </summary>\n            <value>\n            The pointer value\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeLinearTrack.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeLinearTrack\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearTrack.Color\">\n            <summary>\n            Gets or sets track color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearTrack.Border\">\n            <summary>\n            Gets or sets the track border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearTrack.Size\">\n            <summary>\n            Gets or sets the track size\n            </summary>\n            <value>\n            The track size\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearTrack.Visible\">\n            <summary>\n            Gets or sets the visibility of the track\n            </summary>\n            <value>\n            The track visibility\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearTrack.Opacity\">\n            <summary>\n            Gets or sets the track opacity\n            </summary>\n            <value>\n            The track opacity\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeLinearPointer.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeLinearPointer\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Margin\">\n            <summary>\n            Gets or sets the pointer margin\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Color\">\n            <summary>\n            Gets or sets pointer color\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Border\">\n            <summary>\n            Gets or sets the pointer border\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Opacity\">\n            <summary>\n            Gets or sets the pointer opacity\n            </summary>\n            <value>\n            The pointer opacity\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Shape\">\n            <summary>\n            Gets or sets the pointer shape\n            </summary>\n            <value>\n            The pointer shape\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Size\">\n            <summary>\n            Gets or sets the pointer size\n            </summary>\n            <value>\n            The pointer size\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Value\">\n            <summary>\n            Gets or sets the pointer value\n            </summary>\n            <value>\n            The pointer value\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeLinearPointer.Track\">\n            <summary>\n            Gets or sets the pointer position\n            </summary>\n            <value>\n            The pointer position\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGauge.UrlGenerator\">\n            <summary>\n            The component UrlGenerator\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IGauge.ViewContext\">\n            <summary>\n            The component view context\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Gauge.#ctor(System.Web.Mvc.ViewContext,Kendo.Mvc.Infrastructure.IJavaScriptInitializer,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Gauge\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"initializer\">The javascript initializer.</param>\n            <param name=\"urlGenerator\">The URL Generator.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Gauge.UrlGenerator\">\n            <summary>\n            Gets or sets the URL generator.\n            </summary>\n            <value>The URL generator.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Gauge.GaugeArea\">\n            <summary>\n            Gets or sets the Gauge area.\n            </summary>\n            <value>\n            The Gauge area.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Gauge.Transitions\">\n            <summary>\n            Gets or sets the Gauge transitions.\n            </summary>\n            <value>\n            The Gauge Transitions.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Gauge.Theme\">\n            <summary>\n            Gets or sets the Gauge theme.\n            </summary>\n            <value>\n            The Gauge theme.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Gauge.RenderAs\">\n            <summary>\n            Gets or sets the render type.\n            </summary>\n            <value>The render type.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.RadialGauge.#ctor(System.Web.Mvc.ViewContext,Kendo.Mvc.Infrastructure.IJavaScriptInitializer,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.LinearGauge\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"initializer\">The javascript initializer.</param>\n            <param name=\"urlGenerator\">The URL Generator.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.RadialGauge.Scale\">\n            <summary>\n            Configuration for the default scale (if any)\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.RadialGauge.Pointer\">\n            <summary>\n            Configuration for the default pointer (if any)\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.LinearGauge.#ctor(System.Web.Mvc.ViewContext,Kendo.Mvc.Infrastructure.IJavaScriptInitializer,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.LinearGauge\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"initializer\">The javascript initializer.</param>\n            <param name=\"urlGenerator\">The URL Generator.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.LinearGauge.Scale\">\n            <summary>\n            Configuration for the default scale (if any)\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.LinearGauge.Pointer\">\n            <summary>\n            Configuration for the default pointer (if any)\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeArea.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeArea\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeArea.CreateSerializer\">\n            <summary>\n            Creates a serializer\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeArea.Background\">\n            <summary>\n            Gets or sets the gauge area background.\n            </summary>\n            <value>\n            The gauge area background.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeArea.Border\">\n            <summary>\n            Gets or sets the gauge area border.\n            </summary>\n            <value>\n            The gauge area border.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeArea.Margin\">\n            <summary>\n            Gets or sets the gauge area margin.\n            </summary>\n            <value>\n            The gauge area margin.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.GaugeHtmlBuilder.#ctor(Kendo.Mvc.UI.Gauge)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.GaugeHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The Gauge component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.GaugeHtmlBuilder.CreateGauge\">\n            <summary>\n            Creates the chart top-level div.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.GaugeHtmlBuilder.BuildCore\">\n            <summary>\n            Builds the Gauge component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.GaugeScaleTicks\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.#ctor(Kendo.Mvc.UI.GaugeScaleTicks)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder\"/> class.\n            </summary>\n            <param name=\"gaugeTicks\">The gauge scale ticks.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.Color(System.String)\">\n            <summary>\n            Sets the ticks color\n            </summary>\n            <param name=\"color\">The ticks color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.MajorTicks(ticks => ticks.Color(\"#f00\")))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the ticks width\n            </summary>\n            <param name=\"width\">The ticks width.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.MajorTicks(ticks => ticks.Width(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.Size(System.Int32)\">\n            <summary>\n            Sets the ticks size\n            </summary>\n            <param name=\"size\">The ticks size.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.MajorTicks(ticks => ticks.Size(2)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.DashType(Kendo.Mvc.UI.ChartDashType)\">\n            <summary>\n            Sets the ticks dashType\n            </summary>\n            <param name=\"dashType\">The ticks dashType.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.MajorTicks(ticks => ticks.DashType(ChartDashType.Dot)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GaugeScaleTicksBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the ticks visibility\n            </summary>\n            <param name=\"visible\">The ticks visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().LinearGauge()\n                      .Name(\"linearGauge\")\n                      .Scale(scale => scale.MajorTicks(ticks => ticks.Visible(false)))\n                      .Render();\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeScaleTicks.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeScaleTicks\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleTicks.Size\">\n            <summary>\n            Gets or sets the ticks size.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleTicks.Width\">\n            <summary>\n            Gets or sets the ticks width.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleTicks.Color\">\n            <summary>\n            Gets or sets the ticks color.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleTicks.DashType\">\n            <summary>\n            Gets or sets the ticks dash type.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GaugeScaleTicks.Visible\">\n            <summary>\n            Gets or sets the ticks visibility.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GaugeScaleRanges.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GaugeScaleRanges\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridColumnBase`1\">\n            <summary>\n            The base class for all columns in Kendo Grid for ASP.NET MVC.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Grid\">\n            <summary>\n            Gets or sets the grid.\n            </summary>\n            <value>The grid.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Member\">\n            <summary>\n            Gets the member of the column.\n            </summary>\n            <value>The member.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Template\">\n            <summary>\n            Gets the template of the column.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.HeaderTemplate\">\n            <summary>\n            Gets the header template of the column.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.FooterTemplate\">\n            <summary>\n            Gets the footer template of the column.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Title\">\n            <summary>\n            Gets or sets the title of the column.\n            </summary>\n            <value>The title.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Width\">\n            <summary>\n            Gets or sets the width of the column.\n            </summary>\n            <value>The width.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Hidden\">\n            <summary>\n            Gets or sets a value indicating whether this column is hidden.\n            </summary>\n            <value><c>true</c> if hidden; otherwise, <c>false</c>.</value>\n            <remarks>\n            Hidden columns are output as HTML but are not visible by the end-user.\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.HeaderHtmlAttributes\">\n            <summary>\n            Gets the header HTML attributes.\n            </summary>\n            <value>The header HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.FooterHtmlAttributes\">\n            <summary>\n            Gets the footer HTML attributes.\n            </summary>\n            <value>The footer HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.Visible\">\n            <summary>\n            Gets or sets a value indicating whether this column is visible.\n            </summary>\n            <value><c>true</c> if visible; otherwise, <c>false</c>. The default value is <c>true</c>.</value>\n            <remarks>\n            Invisible columns are not output in the HTML.\n            </remarks>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridColumnBase`1.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes of the cell rendered for the column\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.GridBoundColumn`2.#ctor(Kendo.Mvc.UI.Grid{`0},System.Linq.Expressions.Expression{System.Func{`0,`1}})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GridBoundColumn`2\"/> class.\n            </summary>\n            <param name=\"grid\"></param>\n            <param name=\"expression\"></param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridBoundColumn`2.MemberType\">\n            <summary>\n            Gets type of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridBoundColumn`2.Groupable\">\n            <summary>\n            Gets or sets a value indicating whether this column is groupable.\n            </summary>\n            <value><c>true</c> if groupable; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridBoundColumn`2.Value\">\n            <summary>\n            Gets a function which returns the value of the property to which the column is bound to.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridBoundColumn`2.Sortable\">\n            <summary>\n            Gets or sets a value indicating whether this <see cref=\"T:Kendo.Mvc.UI.GridColumnBase`1\"/> is sortable.\n            </summary>\n            <value><c>true</c> if sortable; otherwise, <c>false</c>. The default value is <c>true</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.GridBoundColumn`2.Filterable\">\n            <summary>\n            Gets or sets a value indicating whether this <see cref=\"T:Kendo.Mvc.UI.GridColumnBase`1\"/> is filterable.\n            </summary>\n            <value><c>true</c> if filterable; otherwise, <c>false</c>. The default value is <c>true</c>.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder\">\n            <summary>\n            Defines the fluent interface for configuring bound columns filterable options\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilderBase`1.#ctor(Kendo.Mvc.UI.GridFilterableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GridFilterableSettings\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilderBase`1.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables filtering\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Filterable(filtering => filtering.Enabled((bool)ViewData[\"enableFiltering\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable filtering based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilderBase`1.Operators(System.Action{Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder})\">\n            <summary>\n            Configures the Filter menu operators.\n            </summary>        \n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilderBase`1.Messages(System.Action{Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder})\">\n            <summary>\n            Configures Filter menu messages.\n            </summary>\n            <param name=\"configurator\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilderBase`1.Extra(System.Boolean)\">\n            <summary>\n            Specify if the extra input fields should be visible within the filter menu. Default is true.\n            </summary>\n            <param name=\"value\">True to show the extra inputs, otherwise false</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder.#ctor(Kendo.Mvc.UI.GridBoundColumnFilterableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder\"/> class.\n            </summary>\n            <param name=\"column\">The column.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder.UI(Kendo.Mvc.UI.GridFilterUIRole)\">\n            <summary>\n            Sets the type of the input element of the filter menu\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns =>\n                            columns.Bound(o => o.OrderDate)\n                                   .Filterable(filterable =>\n                                        filterable.UI(GridFilterUIRole.DatePicker)\n                                   )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder.UI(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets JavaScript function which to modify the UI of the filter input.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns =>\n                            columns.Bound(o => o.OrderDate)\n                                   .Filterable(filterable =>\n                                        filterable.UI(@&lt;text&gt;\n                                            JavaScript function goes here\n                                            &lt;/text&gt;)\n                                    )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnFilterableBuilder.UI(System.String)\">\n            <summary>\n            Sets JavaScript function which to modify the UI of the filter input.\n            </summary>\n            <param name=\"handler\">JavaScript function name</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the column menu messages.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.Filter(System.String)\">\n            <summary>\n            Sets the text displayed for filter menu option.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.Columns(System.String)\">\n            <summary>\n            Sets the text displayed for columns menu option.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.SortAscending(System.String)\">\n            <summary>\n            Sets the text displayed for sort ascending menu option.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.SortDescending(System.String)\">\n            <summary>\n            Sets the text displayed for sort descending menu option.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.Done(System.String)\">\n            <summary>\n            Sets the text displayed for done menu button.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder.ColumnSettings(System.String)\">\n            <summary>\n            Sets the text displayed for menu header.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.ColumnMenu\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.#ctor(Kendo.Mvc.UI.GridColumnMenuSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.GridColumnMenuSettings\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables/disables header column menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .ColumnMenu(menu => menu.Enabled((bool)ViewData[\"enableColumnMenu\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable column menu based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.Sortable(System.Boolean)\">\n            <summary>\n            Enables/disables sort section in header column menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .ColumnMenu(menu => menu.Sortable((bool)ViewData[\"enableSort\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable/disable sort section in column menu based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.Filterable(System.Boolean)\">\n            <summary>\n            Enables/disables filter section in header column menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .ColumnMenu(menu => menu.Filterable((bool)ViewData[\"enableFilter\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable/disable filter section in column menu based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.Columns(System.Boolean)\">\n            <summary>\n            Enables/disables columns section in header column menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .ColumnMenu(menu => menu.Columns((bool)ViewData[\"enableColumns\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable/disable columns section in column menu based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder.Messages(System.Action{Kendo.Mvc.UI.Fluent.ColumnMenuMessagesBuilder})\">\n            <summary>\n            Enables you to define custom messages in grid column menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .ColumnMenu(menu => menu.Messages(msg => msg.Filter(\"Custom filter message\")))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.EnumOperatorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu <see cref=\"T:Kendo.Mvc.UI.EnumOperators\"/> DropDownList options.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EnumOperatorsBuilder.Clear\">\n            <summary>\n            Clears the options. Supported only in conjunction with custom messages.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EnumOperatorsBuilder.IsEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.EnumOperatorsBuilder.IsNotEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsNotEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu <see cref=\"T:Kendo.Mvc.UI.DateOperators\"/> DropDownList options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.Clear\">\n            <summary>\n            Clears the options.\n            </summary>        \n            <remarks>Supported only in conjunction with custom messages.</remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsNotEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsNotEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsGreaterThanOrEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsGreaterThanOrEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsGreaterThan(System.String)\">\n            <summary>\n            Sets the text for IsGreaterThan operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsLessThanOrEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsLessThanOrEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DateOperatorsBuilder.IsLessThan(System.String)\">\n            <summary>\n            Sets the text for IsLessThan operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu <see cref=\"T:Kendo.Mvc.UI.NumberOperators\"/> DropDownList options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.Clear\">\n            <summary>\n            Clears the options.\n            </summary>\n            <remarks>Supported only in conjunction with custom messages.</remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsNotEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsNotEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>   \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsGreaterThanOrEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsGreaterThanOrEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>     \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsGreaterThan(System.String)\">\n            <summary>\n            Sets the text for IsGreaterThan operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsLessThanOrEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsLessThanOrEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder.IsLessThan(System.String)\">\n            <summary>\n            Sets the text for IsLessThan operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Info(System.String)\">\n            <summary>\n            Sets the info part of the filter menu\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.And(System.String)\">\n            <summary>\n            Sets the text for And option.\n            </summary>\n            <param name=\"message\">The text</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Or(System.String)\">\n            <summary>\n            Sets the text for Or option.\n            </summary>\n            <param name=\"message\">The text</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.IsTrue(System.String)\">\n            <summary>\n            Sets the text for Boolean IsTrue option value.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.IsFalse(System.String)\">\n            <summary>\n            Sets the text for Boolean IsFalse option value.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Filter(System.String)\">\n            <summary>\n            Sets the text for Filter button.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.SelectValue(System.String)\">\n            <summary>\n            Sets the text for SelectValue option.\n            </summary>\n            <param name=\"message\">The message</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Clear(System.String)\">\n            <summary>\n            Sets the text for Clear button.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Operator(System.String)\">\n            <summary>\n            Sets the text for Operator label.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Value(System.String)\">\n            <summary>\n            Sets the text for Value label.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableMessagesBuilder.Cancel(System.String)\">\n            <summary>\n            Sets the text for Cancel button.\n            </summary>\n            <param name=\"message\">The message</param> \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu <see cref=\"T:Kendo.Mvc.UI.FilterableOperators\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder.ForString(System.Action{Kendo.Mvc.UI.Fluent.StringOperatorsBuilder})\">\n            <summary>\n            Configures messages for string operators.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder.ForNumber(System.Action{Kendo.Mvc.UI.Fluent.NumberOperatorsBuilder})\">\n            <summary>\n            Configures messages for number operators.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder.ForDate(System.Action{Kendo.Mvc.UI.Fluent.DateOperatorsBuilder})\">\n            <summary>\n            Configures messages for date operators.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder.ForEnums(System.Action{Kendo.Mvc.UI.Fluent.EnumOperatorsBuilder})\">\n            <summary>\n            Configures messages for enums operators.\n            </summary>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Filter menu <see cref=\"T:Kendo.Mvc.UI.StringOperators\"/> DropDownList options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.Clear\">\n            <summary>\n            Clears the options.\n            </summary>\n            <remarks>Supported only in conjunction with custom messages.</remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.IsEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.IsNotEqualTo(System.String)\">\n            <summary>\n            Sets the text for IsNotEqualTo operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.StartsWith(System.String)\">\n            <summary>\n            Sets the text for StartsWith operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.EndsWith(System.String)\">\n            <summary>\n            Sets the text for EndsWith operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.Contains(System.String)\">\n            <summary>\n            Sets the text for Contains operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StringOperatorsBuilder.DoesNotContain(System.String)\">\n            <summary>\n            Sets the text for DoesNotContain operator filter menu item.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridNavigatableSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Navigatable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridNavigatableSettingsBuilder.#ctor(Kendo.Mvc.UI.GridNavigatableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridNavigatableSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridNavigatableSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables keyboard navigation.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Navigatable(setting => setting.Enabled((bool)ViewData[\"enableKeyBoardNavigation\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable keyboard navigation based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridToolBarSaveCommandBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring toolbar save command.\n            </summary>\n            <typeparam name=\"T\">The type of the model</typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridToolBarCommandBuilderBase`3\">\n            <summary>\n            Defines the fluent interface for configuring toolbar command.\n            </summary>\n            <typeparam name=\"TModel\">The type of the model</typeparam>\n            <typeparam name=\"TCommand\">The type of the command.</typeparam>\n            <typeparam name=\"TBuilder\">The type of the builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandBuilderBase`3.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandBuilderBase`3.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarSaveCommandBuilder`1.SaveText(System.String)\">\n            <summary>\n            Sets the text displayed by the \"save changes\" button. If not set a default value is used.\n            </summary>\n            <param name=\"text\">The text which should be displayed</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarSaveCommandBuilder`1.CancelText(System.String)\">\n            <summary>\n            Sets the text displayed by the \"cancel changes\" button. If not set a default value is used.\n            </summary>\n            <param name=\"text\">The text which should be displayed</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring command.\n            </summary>    \n            <typeparam name=\"TCommand\">The type of the command.</typeparam>\n            <typeparam name=\"TBuilder\">The type of the builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"command\">The command.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2.Text(System.String)\">\n            <summary>\n            Sets the text displayed by the command. If not set a default value is used.\n            </summary>\n            <param name=\"text\">The text which should be displayed</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandBuilderBase`2.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GroupingMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.GridGroupableSettings\"/> messages.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GroupingMessagesBuilder.Empty(System.String)\">\n            <summary>\n            Sets the text of the group panel when grid is not grouped.\n            </summary>\n            <param name=\"message\">The message</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridAggregateResult\">\n            <summary>\n            Represents an aggregate result.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory\">\n            <summary>\n            Defines the fluent interface for configuring aggregates for a given field.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory.Min\">\n            <summary>\n            Applies the Min aggregate function.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory.Max\">\n            <summary>\n            Applies the Max aggregate function.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory.Count\">\n            <summary>\n            Applies the Count aggregate function.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory.Average\">\n            <summary>\n            Applies the Average aggregate function.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceAggregatesFactory.Sum\">\n            <summary>\n            Applies the Sum aggregate function.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridGroupAggregateResult\">\n            <summary>\n            Represents the aggregate result when grouping is enabled\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridSelectionMode\">\n            <summary>\n            Represents the selection modes supported by Kendo UI Grid for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridSelectionType\">\n            <summary>\n            Represents the selection types supported by Kendo UI Grid for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.HierarchicalDataSource\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.Read(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Read operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.Read(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller, action and routeValues for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.Read(System.String,System.String)\">\n            <summary>\n            Sets controller and action for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.DataSourceEventBuilder})\">\n            <summary>\n            Configures the client-side events\n            </summary>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.Model(System.Action{Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder})\">\n            <summary>\n            Configures the model\n            </summary>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.ServerFiltering\">\n            <summary>\n            Specifies if filtering should be handled by the server.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder.ServerFiltering(System.Boolean)\">\n            <summary>\n            Specifies if filtering should be handled by the server.\n            </summary>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.HierarchicalModelDescriptor\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder.Id(System.String)\">\n            <summary>\n            Specify the model id member name.\n            </summary>\n            <param name=\"fieldName\">The member name.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder.Children(System.String)\">\n            <summary>\n            Specify the model children member name.\n            </summary>\n            <param name=\"fieldName\">The member name.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder.HasChildren(System.String)\">\n            <summary>\n            Specify the member name used to determine if the model has children.\n            </summary>\n            <param name=\"fieldName\">The member name.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.HierarchicalModelDescriptorBuilder.Field(System.String,System.Type)\">\n            <summary>\n            Describes a Model field\n            </summary>\n            <param name=\"memberName\">Field name</param>\n            <param name=\"memberType\">Field type</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GeoJsonDataSourceBuilder.Read(System.Action{Kendo.Mvc.UI.Fluent.CrudOperationBuilder})\">\n            <summary>\n            Configures the URL for Read operation.\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GeoJsonDataSourceBuilder.Read(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GeoJsonDataSourceBuilder.Read(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues for Read operation.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.MenuDirection\">\n            <summary>\n             Represents the menu item opening direction.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuDirection.Bottom\">\n            <summary>\n             Bottom direction\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuDirection.Left\">\n            <summary>\n             Left direction\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuDirection.Right\">\n            <summary>\n             Right direction\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuDirection.Top\">\n            <summary>\n             Top direction\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileListViewLinkItem settings.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2\">\n            <summary>\n            Defines the base fluent API for configuring the MobileListViewItem.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.Text(System.String)\">\n            <summary>\n            Sets the text of the item.\n            </summary>\n            <param name=\"value\">Sets the text of the item.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the item should display.\n            </summary>\n            <param name=\"value\">The action which renders the item content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileListViewView()\n                       .Name(\"View\")\n                       .Items(items => \n                       {\n                            items.Add().Content(() =>\n                                     {\n                                         %&gt;\n                                             &lt;strong&gt; Item Content &lt;/strong&gt;\n                                         &lt;%\n                                     });\n                        })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the item should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileListView()\n                  .Name(\"View\")  \n                  .Items(items => \n                  {\n                    items.Add().Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; Item Content &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n                  })\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilderBase`2.Icon(System.String)\">\n            <summary>\n            The icon of the link item. It can be either one of the built-in icons, or a custom one.\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.LinkHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes of the link.\n            </summary>\n            <param name=\"attributes\">The HTML attributes of the link.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.LinkHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes of the link.\n            </summary>\n            <param name=\"attributes\">The HTML attributes of the link.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Target(System.String)\">\n            <summary>\n            Specifies the id of target Pane or `_top` for application level Pane\n            </summary>\n            <param name=\"value\">The value that configures the target.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.ActionsheetContext(System.String)\">\n            <summary>\n            This value will be available when the action callback of ActionSheet item is executed\n            </summary>\n            <param name=\"value\">The value that configures the actionsheetcontext.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Rel(Kendo.Mvc.UI.MobileButtonRel)\">\n            <summary>\n            Specifies the widget to be open when is tapped (the href must be set too)\n            </summary>\n            <param name=\"value\">The value that configures the rel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Url(System.String)\">\n            <summary>\n            Specifies the url for remote view or id of the view to be loaded (prefixed with #, like an anchor)\n            </summary>\n            <param name=\"value\">The value that configures the url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Url(System.Action{Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder})\">\n            <summary>\n            Specifies the url for remote view to be loaded\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Url(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewLinkItemBuilder.Url(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileListViewItem settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewItemBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileListViewItemFactory})\">\n            <summary>\n            Builds nested MobileListView items.\n            </summary>\n            <param name=\"action\">Action for declaratively building MobileListView items.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileListViewView()\n                       .Name(\"View\")\n                       .Items(items => \n                       {\n                            items.Add().Text(\"Master Item\")\n                                .Items(masterItem => \n                                {\n                                    masterItem.Add().Text(\"Inner Item 1\");\n                                    masterItem.Add().Text(\"Inner Item 2\");\n                                });\n                        })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileListView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.LinkedObjectBase`1.Parent\">\n            <summary>\n            Gets or sets the T object that is the parent of the current node.\n            </summary>\n            <value>The parent.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.LinkedObjectBase`1.PreviousSibling\">\n            <summary>\n            Gets the previous T object on the same level as the current one, relative to the T.ParentNode object (if one exists).\n            </summary>\n            <value>The previous sibling.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.LinkedObjectBase`1.NextSibling\">\n            <summary>\n            Gets the next T node on the same hierarchical level as the current one, relative to the T.ParentNode property (if one exists).\n            </summary>\n            <value>The next sibling.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.MobileMode\">\n            <summary>\n            Mode of adaptive rendering \n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MobileMode.Disabled\">\n            <summary>\n            Disables the mobile adaptive rendering\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MobileMode.Auto\">\n            <summary>\n            Autodetect if rendered by a mobile browser\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MobileMode.Phone\">\n            <summary>\n            Force mobile phone rendering\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MobileMode.Tablet\">\n            <summary>\n            Force mobile tablet rendering\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.MobileNavigatableSettings\"/> options.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Route(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the settings.\n            </summary>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, contoller and route values for the settings.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, contoller and route values for the settings.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Action(System.String,System.String)\">\n            <summary>\n            Sets the action and contoller values for the settings.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route name and values for the settings.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route name and values for the settings.\n            </summary>\n            <param name=\"routeName\">Route name</param>\n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Route(System.String)\">\n            <summary>\n            Sets the route name for the settings.\n            </summary>\n            <param name=\"routeName\"></param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder.Url(System.String)\">\n            <summary>\n            Specifies an absolute or relative URL for the settings.\n            </summary>\n            <param name=\"url\">Absolute or relative URL for the settings</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileSplitViewPane for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneEventBuilder.Navigate(System.String)\">\n            <summary>\n            Triggered when pane navigates to a view.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the navigate event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneEventBuilder.ViewShow(System.String)\">\n            <summary>\n            Triggered after the pane displays a view.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the viewShow event.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI MultiSelect events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder\"/> class.\n            </summary>\n            <param name=\"Events\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                       .Name(\"MultiSelect\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events => events.Select(\"select\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                       .Name(\"MultiSelect\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the DataBound client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                       .Name(\"MultiSelect\")\n                       .Events(events => events.DataBound(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events => events.DataBound(\"dataBound\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events => events.Open(\"open\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                       .Name(\"MultiSelect\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                       .Name(\"MultiSelect\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events => events.Close(\"close\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MultiSelectBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.MultiSelect\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.#ctor(Kendo.Mvc.UI.MultiSelect)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.MultiSelectBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.AutoBind(System.Boolean)\">\n            <summary>\n            Controls whether to bind the widget to the DataSource on initialization.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.AutoClose(System.Boolean)\">\n            <summary>\n            Controls whether to close the widget suggestion list on item selection.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .AutoClose(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.BindTo(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.DropDownListItem})\" -->\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.BindTo(System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.DataValueField(System.String)\">\n            <summary>\n            Sets the field of the data item that provides the value content of the list items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .DataTextField(\"Text\")\n                        .DataValueField(\"Value\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MultiSelectEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Events(events =>\n                            events.Change(\"change\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Filter(System.String)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Filter(\"startswith\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Filter(Kendo.Mvc.UI.FilterType)\">\n            <summary>\n            Use it to enable filtering of items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Filter(FilterType.Contains);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.DropDownListItemFactory})\">\n            <summary>\n            Defines the items in the MultiSelect\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.HighlightFirst(System.Boolean)\">\n            <summary>\n            Use it to enable highlighting of first matched item.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .HighlightFirst(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.MaxSelectedItems(System.Int32)\">\n            <summary>\n            Specifies the limit of the selected items. If set to null widget will not limit number of the selected items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .MinLength(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.MinLength(System.Int32)\">\n            <summary>\n            Specifies the minimum number of characters that should be typed before the widget queries the dataSource.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .MinLength(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Placeholder(System.String)\">\n            <summary>\n            A string that appears in the textbox when it has no value.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Placeholder(\"Select country...\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.ItemTemplate(System.String)\">\n            <summary>\n            Template to be used for rendering the items in the list.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .ItemTemplate(\"#= data #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.ItemTemplateId(System.String)\">\n            <summary>\n            TemplateId to be used for rendering the items in the list.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .ItemTemplateId(\"widgetTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.TagTemplate(System.String)\">\n            <summary>\n            Template to be used for rendering the tags of the selected items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .TagTemplate(\"#= data #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.TagTemplateId(System.String)\">\n            <summary>\n            TemplateId to be used for rendering the tags of the selected items.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .TagTemplateId(\"widgetTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MultiSelectBuilder.Value(System.Collections.IEnumerable)\">\n            <summary>\n            Sets the value of the widget.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Value(new string[] { \"1\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Html.GridLinkButtonBuilder\">\n            <summary>\n            \n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.IGridCustomGroupingWrapper\">\n            <exclude/>\n            <excludetoc/>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridReorderingSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Reorderable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridReorderingSettingsBuilder.Columns(System.Boolean)\">\n            <summary>\n            Enables or disables column reordering.\n            </summary>\n            <param name=\"value\">True to enable column reordering, otherwise false</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceFilterComparisonDescriptorBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring filter operator.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterComparisonDescriptorBuilderBase`2.IsLessThan(`0)\">\n            <summary>\n            Includes only values which are less then the given value.\n            </summary>                \n            <param name=\"value\">The value which the result should be less then</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterComparisonDescriptorBuilderBase`2.IsLessThanOrEqualTo(`0)\">\n            <summary>\n            Includes only values which are less or equal to the given value.        \n            </summary>\n            <param name=\"value\">The value which the result should be less or equal to</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterComparisonDescriptorBuilderBase`2.IsGreaterThanOrEqualTo(`0)\">\n            <summary>\n            Includes only values which are greater then or equal to the given value.        \n            </summary>\n            <param name=\"value\">The value which the result should be greater then or equal to</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterComparisonDescriptorBuilderBase`2.IsGreaterThan(`0)\">\n            <summary>\n            Includes only values which are greater then the given value.        \n            </summary>\n            <param name=\"value\">The value which the result should be greater then</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring filter.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory`1.Add(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Specifies the member on which the filter should be applied.\n            </summary>\n            <param name=\"expression\">Member access expression which describes the member</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory`1.Add(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.Boolean}}})\">\n            <summary>\n            Specifies the member on which the filter should be applied.\n            </summary>\n            <param name=\"expression\">Member access expression which describes the member</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specifies the member on which the filter should be applied.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"expression\">Member access expression which describes the member</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory`1.Add(System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Specifies the member on which the filter should be applied.\n            </summary>\n            <param name=\"expression\">Member access expression which describes the member</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceFilterStringDescriptorBuilder\">\n            <summary>\n            Defines the fluent interface for configuring filter string operator.\n            </summary>  \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterStringDescriptorBuilder.StartsWith(System.String)\">\n            <summary>\n            Includes only values which are starting with the given string.\n            </summary>\n            <param name=\"value\">The string with which the result should start</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterStringDescriptorBuilder.EndsWith(System.String)\">\n            <summary>\n            Includes only values which end with the given string.\n            </summary>\n            <param name=\"value\">The string with which the result should end</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterStringDescriptorBuilder.Contains(System.String)\">\n            <summary>\n            Includes only values which contain the given string.\n            </summary>\n            <param name=\"value\">The string which the result should contain</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceFilterStringDescriptorBuilder.DoesNotContain(System.String)\">\n            <summary>\n            Includes only values which does not contain the given string.\n            </summary>\n            <param name=\"value\">The string which the result should not contain</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring grid editing.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.#ctor(Kendo.Mvc.UI.GridEditableSettings{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables grid editing.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Orders\")\n                        .Editable(settings => settings.Enabled(true))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable grid editing on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.TemplateName(System.String)\">\n            <summary>\n            Specify an editor template which to be used for InForm or PopUp modes\n            </summary>\n            <param name=\"templateName\">name of the editor template</param>\n            <remarks>This settings is applicable only when Mode is\n            <see cref=\"F:Kendo.Mvc.UI.GridEditMode.PopUp\"/></remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.AdditionalViewData(System.Object)\">\n            <summary>\n            Provides additional view data in the editor template.\n            </summary>\n            <remarks>\n            The additional view data will be provided if the editing mode is set to in-form or popup. For other editing modes \n            use <see cref=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.EditorViewData(System.Object)\"/> \n            </remarks>\n            <param name=\"additionalViewData\">An anonymous object which contains the additional data</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Editable(editing =&gt; editing.AdditionalViewData(new { customers = Model.Customers }))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.DisplayDeleteConfirmation(System.Boolean)\">\n            <summary>\n            Enables or disables delete confirmation.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Orders\")\n                        .Editable(settings => settings.DisplayDeleteConfirmation(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.ConfirmDelete(System.String)\">\n            <summary>\n            Change default text for confirm delete button. Note: Available only on mobile devices.\n            </summary>\n            <remarks>\n            Available only on mobile devices.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Orders\")\n                        .Editable(settings => settings.ConfirmDelete(\"Yes\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.CancelDelete(System.String)\">\n            <summary>\n            Change default text for cancel delete button. Note: Available only on mobile devices.\n            </summary>\n            <remarks>\n            Available only on mobile devices.\n            </remarks>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Orders\")\n                        .Editable(settings => settings.ConfirmDelete(\"No\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.CreateAt(Kendo.Mvc.UI.GridInsertRowPosition)\">\n            <summary>\n            Sets insert row position.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Orders\")\n                        .Editable(settings => settings.CreateAt(GridInsertRowPosition.Bottom))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridResizingSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Resizable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridResizingSettingsBuilder.Columns(System.Boolean)\">\n            <summary>\n            Enables or disables column resizing.\n            </summary>\n            <param name=\"value\">True to enable column resizing, otherwise false</param>   \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridTemplateColumnBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring template columns\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2\">\n            <summary>\n            Defines the fluent interface for configuring columns.\n            </summary>\n            <typeparam name=\"TColumn\"></typeparam>\n            <typeparam name=\"TColumnBuilder\">The type of the column builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2\"/> class.\n            </summary>\n            <param name=\"column\">The column.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Title(System.String)\">\n            <summary>\n            Sets the title displayed in the header of the column.\n            </summary>\n            <param name=\"text\">The text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).Title(\"ID\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HeaderHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes applied to the header cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).HeaderHtmlAttributes(new {@class=\"order-header\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HeaderHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes applied to the header cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).HeaderHtmlAttributes(new {@class=\"order-header\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.FooterHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes applied to the footer cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).FooterHtmlAttributes(new {@class=\"order-footer\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.FooterHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes applied to the footer cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).FooterHtmlAttributes(new {@class=\"order-footer\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes applied to the content cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).HtmlAttributes(new {@class=\"order-cell\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes applied to the content cell of the column.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).HtmlAttributes(new {@class=\"order-cell\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Width(System.Int32)\">\n            <summary>\n            Sets the width of the column in pixels.\n            </summary>\n            <param name=\"pixelWidth\">The width in pixels.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).Width(100))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Width(System.String)\">\n            <summary>\n            Sets the width of the column using CSS syntax.\n            </summary>\n            <param name=\"value\">The width to set.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Grid(Model)\n                       .Name(\"Grid\")\n                       .Columns(columns => columns.Bound(o =>\n                       {\n                           %&gt;\n                                &lt;%= Html.ActionLink(\"Edit\", \"Home\", new { id = o.OrderID}) %&gt;\n                           &lt;%\n                       }))\n                       .Width(\"30px\")\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Visible(System.Boolean)\">\n            <summary>\n            Makes the column visible or not. By default all columns are visible. Invisible columns are not rendered in the output HTML.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).Visible((bool)ViewData[\"visible\"]))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Hidden(System.Boolean)\">\n            <summary>\n            Makes the column hidden or not. By default all columns are not hidden. Hidden columns are rendered in the output HTML but are hidden.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).Hidden((bool)ViewData[\"hidden\"]))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Hidden\">\n            <summary>\n            Hides a column. By default all columns are not hidden. Hidden columns are rendered in the output HTML but are hidden.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).Hidden())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.IncludeInMenu(System.Boolean)\">\n            <summary>\n            Specifys whether the columns should be included in column header menu. By default all columns are included.\n            The column also need to have a Title set in order to be included in the menu.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderID).IncludeInMenu((bool)ViewData[\"hidden\"]))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HeaderTemplate(System.Action)\">\n            <summary>\n            Sets the header template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HeaderTemplate(System.String)\">\n            <summary>\n            Sets the header template for the column.\n            </summary>\n            <param name=\"template\">The string defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.HeaderTemplate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the header template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.FooterTemplate(System.Action)\">\n            <summary>\n            Sets the footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.FooterTemplate(System.String)\">\n            <summary>\n            Sets the footer template for the column.\n            </summary>\n            <param name=\"template\">The string defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.FooterTemplate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.GridColumnBuilderBase`2.Column\">\n            <summary>\n            Gets or sets the column.\n            </summary>\n            <value>The column.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridEditMode\">\n            <summary>\n            Represents the editing modes supported by Kendo UI Grid for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring toolbar custom command.\n            </summary>\n            <typeparam name=\"T\">The type of the model</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Route(System.String)\">\n            <summary>\n            Sets command route.\n            </summary>\n            <param name=\"routeName\">The route name</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Route(System.String,System.Object)\">\n            <summary>\n            Sets command route and route values.\n            </summary>\n            <param name=\"routeName\">The route name</param>\n            <param name=\"routeValues\">The route values</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets command route and route values.\n            </summary>\n            <param name=\"routeName\">The route name</param>\n            <param name=\"routeValues\">The route values</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Action(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets command action.\n            </summary>        \n            <param name=\"routeValues\">The route values</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Action(System.String,System.String)\">\n            <summary>\n            Sets command action and controller.\n            </summary>        \n            <param name=\"actionName\">The action name</param>\n            <param name=\"controllerName\">The controller name</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets command action and controller.\n            </summary>        \n            <param name=\"actionName\">The action name</param>\n            <param name=\"controllerName\">The controller name</param>\n            <param name=\"routeValues\">The route values</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets command action and controller.\n            </summary>        \n            <param name=\"actionName\">The action name</param>\n            <param name=\"controllerName\">The controller name</param>\n            <param name=\"routeValues\">The route values</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Url(System.String)\">\n            <summary>\n            Sets command absolute URL.\n            </summary>        \n            <param name=\"value\">The URL</param>        \n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCustomCommandBuilder`1.Name(System.String)\">\n            <summary>\n            Sets the command name.\n            </summary>\n            <param name=\"name\">The name of the command</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring group.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specifies the member by which the data should be grouped.\n            </summary>\n            <param name=\"expression\">Member access expression which describes the member</param>     \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.Add``1(System.String)\">\n            <summary>\n            Specifies the member by which the data should be grouped.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"memberName\">Member name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.Add(System.String,System.Type)\">\n            <summary>\n            Specifies the member by which the data should be grouped.\n            </summary>\n            <param name=\"memberName\">Member name</param>\n            <param name=\"memberType\">Member type</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.Add(System.String,System.Type,System.ComponentModel.ListSortDirection)\">\n            <summary>\n            Specifies the member by which the data should be grouped.\n            </summary>\n            <param name=\"memberName\">Member name</param>\n            <param name=\"memberType\">Member type</param>\n            <param name=\"sortDirection\">Sort order</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.Add``1(System.String,System.ComponentModel.ListSortDirection)\">\n            <summary>\n            Specifies the member by which the data should be grouped.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"memberName\">Member type</param>\n            <param name=\"sortDirection\">Sort order</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.AddDescending``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Specifies the member by which the data should be sorted in descending order and grouped.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"expression\">Member access expression which describes the member</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.AddDescending``1(System.String)\">\n            <summary>\n            Specifies the member by which the data should be sorted in descending order and grouped.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"memberName\">Member name</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DataSourceGroupDescriptorFactory`1.AddDescending(System.String,System.Type)\">\n            <summary>\n            Specifies the member by which the data should be sorted in descending order and grouped.\n            </summary>        \n            <param name=\"memberName\">Member name</param>\n            /// <param name=\"memberType\">Member type</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridGroupingSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.GridGroupableSettings\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridGroupingSettingsBuilder.Messages(System.Action{Kendo.Mvc.UI.Fluent.GroupingMessagesBuilder})\">\n            <summary>\n            Configures messages.\n            </summary>        \n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridGroupingSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables filtering\n            </summary>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1\">\n            <summary>\n            Defines the fluent interface for configuring toolbar command.\n            </summary>\n            <typeparam name=\"T\">The type of the model</typeparam>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Create\">\n            <summary>\n            Defines a create command.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Save\">\n            <summary>\n            Defines a save command.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Custom\">\n            <summary>\n            Defines a custom command.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Template(System.Action)\">\n            <summary>\n            Sets toolbar template.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Template(System.String)\">\n            <summary>\n            Sets toolbar template.\n            </summary>\n            <param name=\"template\">The template</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Template(System.Action{Kendo.Mvc.UI.Grid{`0}})\">\n            <summary>\n            Sets the toolbar template.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory`1.Template(System.Func{Kendo.Mvc.UI.Grid{`0},System.Object})\">\n            <summary>\n            Sets the toolbar template.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.Expressions.ExpressionBuilderOptions.LiftMemberAccessToNull\">\n            <summary>\n            Gets or sets a value indicating whether member access expression used\n            by this builder should be lifted to null. The default value is true;\n            </summary>\n            <value>\n            \t<c>true</c> if member access should be lifted to null; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.ExpressionFactory.LiftStringExpressionToEmpty(System.Linq.Expressions.Expression)\">\n            <exception cref=\"T:System.ArgumentException\">Provided expression should have string type</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.FilterExpressionBuilder.CreateFilterExpression\">\n            <exception cref=\"T:System.ArgumentException\"><c>ArgumentException</c>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.FilterDescriptorExpressionBuilder.CreateBodyExpression\">\n            <exception cref=\"T:System.ArgumentException\"><c>ArgumentException</c>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.AggregateFunctionExpressionBuilderBase.#ctor(System.Linq.Expressions.Expression,Kendo.Mvc.AggregateFunction)\">\n            <exception cref=\"T:System.ArgumentException\">\n            Provided <paramref name=\"enumerableExpression\"/>'s <see cref=\"P:System.Linq.Expressions.Expression.Type\"/> is not <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/>\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.AggregateFunctionExpressionBuilderBase.ExtractItemTypeFromEnumerableType(System.Type)\">\n            <exception cref=\"T:System.ArgumentException\">Provided type is not <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/></exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.EnumerableAggregateFunctionExpressionBuilder.#ctor(System.Linq.Expressions.Expression,Kendo.Mvc.EnumerableAggregateFunction)\">\n            <exception cref=\"T:System.ArgumentException\">\n            Provided <paramref name=\"enumerableExpression\"/>'s <see cref=\"P:System.Linq.Expressions.Expression.Type\"/> is not <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/>\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.EnumerableSelectorAggregateFunctionExpressionBuilder.#ctor(System.Linq.Expressions.Expression,Kendo.Mvc.EnumerableSelectorAggregateFunction)\">\n            <exception cref=\"T:System.ArgumentException\">\n            Provided <paramref name=\"enumerableExpression\"/>'s <see cref=\"P:System.Linq.Expressions.Expression.Type\"/> is not <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/>\n            </exception>\n        </member>\n        <member name=\"T:Kendo.Mvc.Infrastructure.Implementation.Expressions.CustomTypeDescriptorExtensions\">\n            <exclude/>\n            <excludeToc/>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.CustomTypeDescriptorExtensions.Property``1(System.ComponentModel.ICustomTypeDescriptor,System.String)\">\n            <exception cref=\"T:System.ArgumentException\"><c>ArgumentException</c>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.CustomTypeDescriptorPropertyAccessExpressionBuilder.#ctor(System.Type,System.Type,System.String)\">\n            <exception cref=\"T:System.ArgumentException\"><paramref name=\"elementType\"/> did not implement <see cref=\"T:System.ComponentModel.ICustomTypeDescriptor\"/>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.MemberAccessTokenExtensions.CreateMemberAccessExpression(Kendo.Mvc.Infrastructure.Implementation.Expressions.IMemberAccessToken,System.Linq.Expressions.Expression)\">\n            <exception cref=\"T:System.ArgumentException\">\n            Invalid name for property or field; or indexer with the specified arguments.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.MemberAccessTokenExtensions.GetMemberInfoForType(Kendo.Mvc.Infrastructure.Implementation.Expressions.IMemberAccessToken,System.Type)\">\n            <exception cref=\"T:System.InvalidOperationException\"><c>InvalidOperationException</c>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.UnboxT`1.ValueField(System.Object)\">\n            <exception cref=\"T:System.InvalidCastException\"><c>InvalidCastException</c>.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.XmlNodeExtensions.ChildElementInnerText(System.Xml.XmlNode,System.String)\">\n            <exception cref=\"T:System.ArgumentException\">\n            Child element with name specified by <paramref name=\"childName\"/> does not exists.\n            </exception>\n        </member>\n        <member name=\"T:Kendo.Mvc.CompositeFilterDescriptor\">\n            <summary>\n            Represents a filtering descriptor which serves as a container for one or more child filtering descriptors.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.FilterDescriptorBase\">\n            <summary>\n            Base class for all <see cref=\"T:Kendo.Mvc.IFilterDescriptor\"/> used for \n            handling the logic for property changed notifications.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.IFilterDescriptor\">\n            <summary>\n            Represents a filtering abstraction that knows how to create predicate filtering expression.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.IFilterDescriptor.CreateFilterExpression(System.Linq.Expressions.Expression)\">\n            <summary>\n            Creates a predicate filter expression used for collection filtering.\n            </summary>\n            <param name=\"instance\">The instance expression, which will be used for filtering.</param>\n            <returns>A predicate filter expression.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptorBase.CreateFilterExpression(System.Linq.Expressions.Expression)\">\n            <summary>\n            Creates a filter expression by delegating its creation to \n            <see cref=\"M:Kendo.Mvc.FilterDescriptorBase.CreateFilterExpression(System.Linq.Expressions.ParameterExpression)\"/>, if \n            <paramref name=\"instance\"/> is <see cref=\"T:System.Linq.Expressions.ParameterExpression\"/>, otherwise throws <see cref=\"T:System.ArgumentException\"/>\n            </summary>\n            <param name=\"instance\">The instance expression, which will be used for filtering.</param>\n            <returns>A predicate filter expression.</returns>\n            <exception cref=\"T:System.ArgumentException\">Parameter should be of type <see cref=\"T:System.Linq.Expressions.ParameterExpression\"/></exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptorBase.CreateFilterExpression(System.Linq.Expressions.ParameterExpression)\">\n            <summary>\n            Creates a predicate filter expression used for collection filtering.\n            </summary>\n            <param name=\"parameterExpression\">The parameter expression, which will be used for filtering.</param>\n            <returns>A predicate filter expression.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.CompositeFilterDescriptor.CreateFilterExpression(System.Linq.Expressions.ParameterExpression)\">\n            <summary>\n            Creates a predicate filter expression combining <see cref=\"P:Kendo.Mvc.CompositeFilterDescriptor.FilterDescriptors\"/> \n            expressions with <see cref=\"P:Kendo.Mvc.CompositeFilterDescriptor.LogicalOperator\"/>.\n            </summary>\n            <param name=\"parameterExpression\">The parameter expression, which will be used for filtering.</param>\n            <returns>A predicate filter expression.</returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.CompositeFilterDescriptor.LogicalOperator\">\n            <summary>\n            Gets or sets the logical operator used for composing of <see cref=\"P:Kendo.Mvc.CompositeFilterDescriptor.FilterDescriptors\"/>.\n            </summary>\n            <value>The logical operator used for composition.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.CompositeFilterDescriptor.FilterDescriptors\">\n            <summary>\n            Gets or sets the filter descriptors that will be used for composition.\n            </summary>\n            <value>The filter descriptors used for composition.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.FilterCompositionLogicalOperator\">\n            <summary>\n            Logical operator used for filter descriptor composition.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterCompositionLogicalOperator.And\">\n            <summary>\n            Combines filters with logical AND.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterCompositionLogicalOperator.Or\">\n            <summary>\n            Combines filters with logical OR.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.SatisfiesFilter(System.Object)\">\n            <summary>\n            The method checks whether the passed parameter satisfies filter criteria. \n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.CreateFilterExpression(System.Linq.Expressions.ParameterExpression)\">\n            <summary>\n            Creates a predicate filter expression that calls <see cref=\"M:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.SatisfiesFilter(System.Object)\"/>.\n            </summary>\n            <param name=\"parameterExpression\">The parameter expression, which parameter \n            will be passed to <see cref=\"M:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.SatisfiesFilter(System.Object)\"/> method.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.IsActive\">\n            <summary>\n            If false <see cref=\"M:Kendo.Mvc.Infrastructure.Implementation.FilterDescription.SatisfiesFilter(System.Object)\"/> will not execute.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.FilterDescriptor\">\n            <summary>\n            Represents declarative filtering.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.FilterDescriptor\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.#ctor(System.String,Kendo.Mvc.FilterOperator,System.Object)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.FilterDescriptor\"/> class.\n            </summary>\n            <param name=\"member\">The member.</param>\n            <param name=\"filterOperator\">The filter operator.</param>\n            <param name=\"filterValue\">The filter value.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.CreateFilterExpression(System.Linq.Expressions.ParameterExpression)\">\n            <summary>\n            Creates a predicate filter expression.\n            </summary>\n            <param name=\"parameterExpression\">The parameter expression, which will be used for filtering.</param>\n            <returns>A predicate filter expression.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.Equals(Kendo.Mvc.FilterDescriptor)\">\n            <summary>\n            Determines whether the specified <paramref name=\"other\"/> descriptor \n            is equal to the current one.\n            </summary>\n            <param name=\"other\">The other filter descriptor.</param>\n            <returns>\n            True if all members of the current descriptor are \n            equal to the ones of <paramref name=\"other\"/>, otherwise false.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.Equals(System.Object)\">\n            <summary>\n            Determines whether the specified <paramref name=\"obj\"/>\n            is equal to the current descriptor.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.FilterDescriptor.GetHashCode\">\n            <summary>\n            Serves as a hash function for a particular type.\n            </summary>\n            <returns>\n            A hash code for the current filter descriptor.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.FilterDescriptor.Member\">\n            <summary>\n            Gets or sets the member name which will be used for filtering.\n            </summary>\n            <filterValue>The member that will be used for filtering.</filterValue>\n        </member>\n        <member name=\"P:Kendo.Mvc.FilterDescriptor.MemberType\">\n            <summary>\n            Gets or sets the type of the member that is used for filtering.\n            Set this property if the member type cannot be resolved automatically.\n            Such cases are: items with ICustomTypeDescriptor, XmlNode or DataRow.\n            Changing this property did not raise         \n            </summary>\n            <value>The type of the member used for filtering.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.FilterDescriptor.Operator\">\n            <summary>\n            Gets or sets the filter operator.\n            </summary>\n            <filterValue>The filter operator.</filterValue>\n        </member>\n        <member name=\"P:Kendo.Mvc.FilterDescriptor.Value\">\n            <summary>\n            Gets or sets the target filter value.\n            </summary>\n            <filterValue>The filter value.</filterValue>\n        </member>\n        <member name=\"T:Kendo.Mvc.Infrastructure.Implementation.FilterDescriptorCollection\">\n            <summary>\n            Represents collection of <see cref=\"T:Kendo.Mvc.IFilterDescriptor\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.FilterOperator\">\n            <summary>\n            Operator used in <see cref=\"T:Kendo.Mvc.FilterDescriptor\"/>\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsLessThan\">\n            <summary>\n            Left operand must be smaller than the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsLessThanOrEqualTo\">\n            <summary>\n            Left operand must be smaller than or equal to the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsEqualTo\">\n            <summary>\n            Left operand must be equal to the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsNotEqualTo\">\n            <summary>\n            Left operand must be different from the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsGreaterThanOrEqualTo\">\n            <summary>\n            Left operand must be larger than the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsGreaterThan\">\n            <summary>\n            Left operand must be larger than or equal to the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.StartsWith\">\n            <summary>\n            Left operand must start with the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.EndsWith\">\n            <summary>\n            Left operand must end with the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.Contains\">\n            <summary>\n            Left operand must contain the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.IsContainedIn\">\n            <summary>\n            Left operand must be contained in the right one.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.FilterOperator.DoesNotContain\">\n            <summary>\n            Left operand must not contain the right one.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.Expressions.FilterOperatorExtensions.CreateExpression(Kendo.Mvc.FilterOperator,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean)\">\n            <exception cref=\"T:System.InvalidOperationException\"><c>InvalidOperationException</c>.</exception>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ListViewEditingSettingsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring ListView editing.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewEditingSettingsBuilder`1.#ctor(Kendo.Mvc.UI.ListViewEditingSettings{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ListViewEditingSettingsBuilder`1\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewEditingSettingsBuilder`1.TemplateName(System.String)\">\n            <summary>\n            Specify an editor template which to be used.\n            </summary>\n            <param name=\"templateName\">name of the editor template</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ListViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo ListView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ListViewSelectionSettingsBuilder\">\n            <summary>\n             Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.ListView`1.Selectable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewSelectionSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables selection.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView(Model)\n                        .Name(\"ListView\")\n                        .Selectable(selection => selection.Enabled((bool)ViewData[\"enableSelection\"]))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewSelectionSettingsBuilder.Mode(Kendo.Mvc.UI.ListViewSelectionMode)\">\n            <summary>\n            Specifies whether multiple or single selection is allowed.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView(Model)\n                        .Name(\"ListView\")\n                        .Selectable(selection => selection.Mode((bool)ViewData[\"selectionMode\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Mode method is useful to switch between different selection modes.\n            </remarks>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ListViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ListView`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.#ctor(Kendo.Mvc.UI.ListView{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ListView`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.BindTo(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Binds the ListView to a list of objects\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView&lt;Order&gt;()\n                        .Name(\"Orders\")        \n                        .BindTo((IEnumerable&lt;Order&gt;)ViewData[\"Orders\"]);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.BindTo(System.Collections.IEnumerable)\">\n            <summary>\n            Binds the ListView to a list of objects\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView&lt;Order&gt;()\n                        .Name(\"Orders\")        \n                        .BindTo((IEnumerable)ViewData[\"Orders\"]);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.ClientTemplateId(System.String)\">\n            <summary>\n            Specifies ListView item template.\n            </summary>      \n            <param name=\"templateId\">The Id of the element which contains the template.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView&lt;Order&gt;()\n                        .Name(\"Orders\")        \n                        .ClientTemplateId(\"listViewTemplate\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Pageable\">\n            <summary>\n            Allows paging of the data.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Ajax(ajax => ajax.Action(\"Orders\", \"ListView\"))        \n                        .Pageable();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Pageable(System.Action{Kendo.Mvc.UI.Fluent.PageableBuilder})\">\n            <summary>\n            Allows paging of the data.\n            </summary>\n            <param name=\"pagerAction\">Use builder to define paging settings.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"Grid\")\n                        .Ajax(ajax => ajax.Action(\"Orders\", \"ListView\"))        \n                        .Pageable(paging => paging.Enabled(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Navigatable\">\n            <summary>\n            Enables keyboard navigation.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Ajax(ajax => ajax.Action(\"Orders\", \"ListView\"))        \n                        .Navigatable();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Selectable\">\n            <summary>\n            Enables single item selection.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Selectable()\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Selectable(System.Action{Kendo.Mvc.UI.Fluent.ListViewSelectionSettingsBuilder})\">\n            <summary>\n            Enables item selection.\n            </summary>\n            <param name=\"selectionAction\">Use builder to define the selection mode.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Selectable(selection => {\n                            selection.Enabled(true);\n                            selection.Mode(ListViewSelectionMode.Multiple);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Specifies if the ListView should be automatically bound on initial load. \n            This is only possible if AJAX binding is used, and widget is not initialy populated on the server.\n            </summary>\n            <param name=\"value\">If true ListView will be automatically data bound, otherwise false</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.TagName(System.String)\">\n            <summary>\n            Specifies ListView wrapper element tag name.\n            </summary>       \n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .TagName(\"div\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Editable(System.Action{Kendo.Mvc.UI.Fluent.ListViewEditingSettingsBuilder{`0}})\">\n            <summary>\n            Configures the ListView editing settings.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Editable(settings => settings.Enabled(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Editable\">\n            <summary>\n            Enables ListView editing.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Editable()\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ListViewBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.ListViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView()\n                        .Name(\"ListView\")\n                        .Events(events => events\n                            .DataBound(\"onDataBound\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ListViewSelectionMode\">\n            <summary>\n            Represents the selection modes supported by Kendo UI ListView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ListViewHtmlBuilder`1.#ctor(Kendo.Mvc.UI.ListView{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ListViewHtmlBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The ListView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ListViewHtmlBuilder`1.Build\">\n            <summary>\n            Builds the ListView component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.IGroup.Key\">\n            <summary>\n            Gets the key for this group.\n            </summary>\n            <value>The key for this group.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.IGroup.Items\">\n            <summary>\n            Gets the items in this groups.\n            </summary>\n            <value>The items in this group.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.IGroup.HasSubgroups\">\n            <summary>\n            Gets a value indicating whether this instance has sub groups.\n            </summary>\n            <value>\n            \t<c>true</c> if this instance has sub groups; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.IGroup.ItemCount\">\n            <summary>\n            Gets the <see cref=\"P:Kendo.Mvc.Infrastructure.IGroup.Items\"/> count.\n            </summary>\n            <value>The <see cref=\"P:Kendo.Mvc.Infrastructure.IGroup.Items\"/> count.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.IGroup.Subgroups\">\n            <summary>\n            Gets the subgroups, if <see cref=\"P:Kendo.Mvc.Infrastructure.IGroup.HasSubgroups\"/> is true, otherwise empty collection.\n            </summary>\n            <value>The subgroups.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Group.HasSubgroups\">\n            <summary>\n            Gets a value indicating whether this instance has any sub groups.\n            </summary>\n            <value>\n            \t<c>true</c> if this instance has sub groups; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Group.ItemCount\">\n            <summary>\n            Gets the number of items in this group.\n            </summary>\n            <value>The items count.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Group.Subgroups\">\n            <summary>\n            Gets the subgroups, if <see cref=\"P:Kendo.Mvc.Infrastructure.Group.HasSubgroups\"/> is true, otherwise empty collection.\n            </summary>\n            <value>The subgroups.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Group.Items\">\n            <summary>\n            Gets the items in this groups.\n            </summary>\n            <value>The items in this group.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Group.Key\">\n            <summary>\n            Gets the key for this group.\n            </summary>\n            <value>The key for this group.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.AggregateFunctionsGroup.GetAggregateResults(System.Collections.Generic.IEnumerable{Kendo.Mvc.AggregateFunction})\">\n            <summary>\n            Gets the aggregate results generated for the given aggregate functions.\n            </summary>\n            <value>The aggregate results for the provided aggregate functions.</value>\n            <exception cref=\"T:System.ArgumentNullException\"><c>functions</c> is null.</exception>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateFunctionsGroup.AggregateFunctionsProjection\">\n            <summary>\n            Gets or sets the aggregate functions projection for this group. \n            This projection is used to generate aggregate functions results for this group.\n            </summary>\n            <value>The aggregate functions projection.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.AggregateFunction\">\n            <summary>\n             Represents an aggregate function.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.AggregateFunction.CreateAggregateExpression(System.Linq.Expressions.Expression,System.Boolean)\">\n            <summary>\n            Creates the aggregate expression that is used for constructing expression\n            tree that will calculate the aggregate result.\n            </summary>\n            <param name=\"enumerableExpression\">The grouping expression.</param>\n            <param name=\"liftMemberAccessToNull\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.AggregateFunction.GenerateFunctionName\">\n            <summary>\n            Generates default name for this function using this type's name.\n            </summary>\n            <returns>\n            Function name generated with the following pattern:\n            {<see cref=\"M:System.Object.GetType\"/>.<see cref=\"P:System.Reflection.MemberInfo.Name\"/>}_{<see cref=\"M:System.Object.GetHashCode\"/>}\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.AggregateFunction.Caption\">\n            <summary>\n            Gets or sets the informative message to display as an illustration of the aggregate function.\n            </summary>\n            <value>The caption to display as an illustration of the aggregate function.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.AggregateFunction.SourceField\">\n            <summary>\n            Gets or sets the name of the field, of the item from the set of items, which value is used as the argument of the aggregate function.\n            </summary>\n            <value>The name of the field to get the argument value from.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.AggregateFunction.FunctionName\">\n            <summary>\n            Gets or sets the name of the aggregate function, which appears as a property of the group record on which records the function works.\n            </summary>\n            <value>The name of the function as visible from the group record.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.AggregateFunction.ResultFormatString\">\n            <summary>\n            Gets or sets a string that is used to format the result value.\n            </summary>\n            <value>The format string.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.AggregateFunctionCollection.Item(System.String)\">\n            <summary>\n            Gets the <see cref=\"T:Kendo.Mvc.AggregateFunction\"/> with the specified function name.\n            </summary>\n            <value>\n            First <see cref=\"T:Kendo.Mvc.AggregateFunction\"/> with the specified function name \n            if any, otherwise null.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.AggregateResult.#ctor(System.Object,System.Int32,Kendo.Mvc.AggregateFunction)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/> class.\n            </summary>\n            <param name=\"value\">The value of the result.</param>\n            <param name=\"count\">The number of arguments used for the calculation of the result.</param>\n            <param name=\"function\">Function that generated the result.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><c>function</c> is null.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.AggregateResult.#ctor(Kendo.Mvc.AggregateFunction)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/> class.\n            </summary>\n            <param name=\"function\"><see cref=\"T:Kendo.Mvc.AggregateFunction\"/> that generated the result.</param>\n            <exception cref=\"T:System.ArgumentNullException\"><c>function</c> is null.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.AggregateResult.#ctor(System.Object,Kendo.Mvc.AggregateFunction)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/> class.\n            </summary>\n            <param name=\"value\">The value of the result.</param>\n            <param name=\"function\"><see cref=\"T:Kendo.Mvc.AggregateFunction\"/> that generated the result.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.AggregateResult.ToString\">\n            <summary>\n            Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:System.Object\"/>.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:System.Object\"/>.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResult.Value\">\n            <summary>\n            Gets or sets the value of the result.\n            </summary>\n            <value>The value of the result.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResult.FormattedValue\">\n            <summary>\n            Gets the formatted value of the result.\n            </summary>\n            <value>The formatted value of the result.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResult.ItemCount\">\n            <summary>\n            Gets or sets the number of arguments used for the calulation of the result.\n            </summary>\n            <value>The number of arguments used for the calulation of the result.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResult.Caption\">\n            <summary>\n            Gets or sets the text which serves as a caption for the result in a user interface..\n            </summary>\n            <value>The text which serves as a caption for the result in a user interface.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResult.FunctionName\">\n            <summary>\n            Gets the name of the function.\n            </summary>\n            <value>The name of the function.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.AggregateResultCollection.Item(System.String)\">\n            <summary>\n            Gets the first <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/> which\n            <see cref=\"P:Kendo.Mvc.Infrastructure.AggregateResult.FunctionName\"/> is equal to <paramref name=\"functionName\"/>.\n            </summary>\n            <value>\n            The <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/> for the specified function if any, otherwise null.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.Infrastructure.Implementation.EnumerableAggregateFunctionBase.ExtensionMethodsType\">\n            <summary>\n            Gets the type of the extension methods that holds the extension methods for\n            aggregation. For example <see cref=\"T:System.Linq.Enumerable\"/> or <see cref=\"T:System.Linq.Queryable\"/>.\n            </summary>\n            <value>\n            The type of that holds the extension methods. The default value is <see cref=\"T:System.Linq.Enumerable\"/>.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.EnumerableSelectorAggregateFunction.CreateAggregateExpression(System.Linq.Expressions.Expression,System.Boolean)\">\n            <summary>\n            Creates the aggregate expression using <see cref=\"T:Kendo.Mvc.Infrastructure.Implementation.Expressions.EnumerableSelectorAggregateFunctionExpressionBuilder\"/>.\n            </summary>\n            <param name=\"enumerableExpression\">The grouping expression.</param>\n            <param name=\"liftMemberAccessToNull\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.AverageFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.AverageFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.AverageFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Average method name.\n            </summary>\n            <value><c>Average</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.EnumerableAggregateFunction.CreateAggregateExpression(System.Linq.Expressions.Expression,System.Boolean)\">\n            <summary>\n            Creates the aggregate expression using <see cref=\"T:Kendo.Mvc.Infrastructure.Implementation.Expressions.EnumerableAggregateFunctionExpressionBuilder\"/>.\n            </summary>\n            <param name=\"enumerableExpression\">The grouping expression.</param>\n            <param name=\"liftMemberAccessToNull\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.CountFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.CountFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.CountFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Count method name.\n            </summary>\n            <value><c>Count</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.FirstFunction.AggregateMethodName\">\n            <summary>\n            Gets the the First method name.\n            </summary>\n            <value><c>First</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.LastFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.LastFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.LastFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Last method name.\n            </summary>\n            <value><c>Last</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.MaxFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.MaxFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.MaxFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Max method name.\n            </summary>\n            <value><c>Max</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.MinFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.MinFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.MinFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Min method name.\n            </summary>\n            <value><c>Min</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SumFunction.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SumFunction\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.SumFunction.AggregateMethodName\">\n            <summary>\n            Gets the the Min method name.\n            </summary>\n            <value><c>Min</c>.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.GroupDescriptor\">\n            <summary>\n            Represents grouping criteria.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.SortDescriptor\">\n            <summary>\n            Represents declarative sorting.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.SortDescriptor.Member\">\n            <summary>\n            Gets or sets the member name which will be used for sorting.\n            </summary>\n            <filterValue>The member that will be used for sorting.</filterValue>\n        </member>\n        <member name=\"P:Kendo.Mvc.SortDescriptor.SortDirection\">\n            <summary>\n            Gets or sets the sort direction for this sort descriptor. If the value is null\n            no sorting will be applied.\n            </summary>\n            <value>The sort direction. The default value is null.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.GroupDescriptor.CycleSortDirection\">\n            <summary>\n            Changes the <see cref=\"T:Kendo.Mvc.SortDescriptor\"/> to the next logical value.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.GroupDescriptor.MemberType\">\n            <summary>\n            Gets or sets the type of the member that is used for grouping.\n            Set this property if the member type cannot be resolved automatically.\n            Such cases are: items with ICustomTypeDescriptor, XmlNode or DataRow.\n            </summary>\n            <value>The type of the member used for grouping.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.GroupDescriptor.DisplayContent\">\n            <summary>\n            Gets or sets the content which will be used from UI.\n            </summary>\n            <filterValue>The content that will be used from UI.</filterValue>\n        </member>\n        <member name=\"P:Kendo.Mvc.GroupDescriptor.AggregateFunctions\">\n            <summary>\n            Gets or sets the aggregate functions used when grouping is executed.\n            </summary>\n            <value>The aggregate functions that will be used in grouping.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.GroupExtensions.GetGroupSequenceUniqueKey(System.Collections.Generic.IEnumerable{Kendo.Mvc.Infrastructure.IGroup})\">\n            <summary>\n            Calculates unique int for given group in a group sequence, \n            taking into account groups order, each group key and groups' count.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ProgressBarAnimationBuilder\">\n            <summary>\n            Defines the fluent API for configuring the <see cref=\"T:Kendo.Mvc.UI.ProgressBarAnimation\"/> object.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarAnimationBuilder.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the progress animation\n            </summary>\n            <param name=\"enable\">The boolean value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Animation(a => a.Enable(false))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarAnimationBuilder.Duration(System.Int32)\">\n            <summary>\n            Specifies the duration of the progress animation\n            </summary>\n            <param name=\"enable\">The boolean value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Animation(a => a.Duration(200))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ProgressBarBuilder\">\n            <summary>\n            Define the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ProgressBar\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.#ctor(Kendo.Mvc.UI.ProgressBar)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ProgressBarBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Animation(System.Boolean)\">\n            <summary>\n            Use to enable or disable the animation.\n            </summary>\n            <param name=\"enable\">The boolean value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Animation(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.ProgressBarAnimationBuilder})\">\n            <summary>\n            Configures the animation effects.\n            </summary>\n            <param name=\"animationAction\">The action which configures the animation effects.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Animation(a => a.Duration(200))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.ChunkCount(System.Int32)\">\n            <summary>\n            Sets the number of chunks to which the ProgressBar will be divided (applies only when type is \"chunk\")\n            </summary>\n            <param name=\"count\">The number of chunks</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Type(ProgressBarType.Chunk)\n                .ChunkCount(10)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the component\n            </summary>\n            <param name=\"value\">true if the component should be enabled, false otherwise; the default is true.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Enable(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder})\">\n            <summary>\n            Configures the client-side events\n            </summary>\n            <param name=\"configurator\">The client events configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Events(events => events\n                         .Change(\"onChange\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Max(System.Double)\">\n            <summary>\n            Sets the maximum value of the ProgressBar\n            </summary>\n            <param name=\"value\">Number specifying the maximum value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Max(200)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Min(System.Double)\">\n            <summary>\n            Sets the minimum value of the ProgressBar\n            </summary>\n            <param name=\"value\">Number specifying the minimum value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Min(50)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Orientation(Kendo.Mvc.UI.ProgressBarOrientation)\">\n            <summary>\n            Sets the orientation of the ProgressBar\n            </summary>\n            <param name=\"orientation\">ProgressBarOrientation enumeration specifying the orientation</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Orientation(ProgressBarOrientation.Vertical)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Reverse(System.Boolean)\">\n            <summary>\n            Specifies if the ProgressBar direction will be reversed\n            </summary>\n            <param name=\"value\">The boolean value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Reverse(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.ShowStatus(System.Boolean)\">\n            <summary>\n            Specifies if the Progress status will be displayed\n            </summary>\n            <param name=\"value\">The boolean value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .ShowStatus(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Type(Kendo.Mvc.UI.ProgressBarType)\">\n            <summary>\n            Specifies the type of the ProgressBar\n            </summary>\n            <param name=\"type\">ProgressBarType enumeration specifying the type</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Type(ProgressBarType.Percent)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Value(System.Double)\">\n            <summary>\n            Sets the initial value of the ProgressBar\n            </summary>\n            <param name=\"value\">Number specifying the value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Min(100)\n                .Max(200)\n                .Value(100)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarBuilder.Value(System.Boolean)\">\n            <summary>\n            Sets the initial value of the ProgressBar\n            </summary>\n            <param name=\"value\">Pass false to set indeterminate value</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                .Name(&quot;progressBar&quot;)\n                .Min(100)\n                .Max(200)\n                .Value(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of teh <see cref=\"T:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder\"/> class\n            </summary>\n            <param name=\"clientEvents\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().ProgressBar()\n                       .Name(&quot;progressBar&quot;)\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder.Change(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"onChangeHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                        .Name(&quot;progressBar&quot;)\n                        .Events(events => events.Change(\"onChange\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder.Complete(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Complete client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().ProgressBar()\n                       .Name(&quot;progressBar&quot;)\n                       .Events(events => events.Complete(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ProgressBarEventBuilder.Complete(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Complete client-side event.\n            </summary>\n            <param name=\"onCompleteHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().ProgressBar()\n                        .Name(&quot;progressBar&quot;)\n                        .Events(events => events.Complete(\"onComplete\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ProgressBar.#ctor(System.Web.Mvc.ViewContext,Kendo.Mvc.Infrastructure.IJavaScriptInitializer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ProgressBar\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"initializer\">The javascript initializer.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ProgressBar.WriteInitializationScript(System.IO.TextWriter)\">\n            <summary>\n            Writes the initialization script\n            </summary>\n            <param name=\"writer\">The writer object.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ProgressBar.WriteHtml(System.Web.UI.HtmlTextWriter)\">\n            <summary>\n            Writes the ProgressBar HTML.\n            </summary>\n            <param name=\"writer\">The writer object.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Animation\">\n            <summary>\n            Defines the ProgressBar animation\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.ChunkCount\">\n            <summary>\n            Gets or sets the number of chunks when the type of the Progressbar is set to \"chunk\"\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Enable\">\n            <summary>\n            Gets or sets a value indicating whether the component is enabled\n            </summary>\n            <value>\n            true if the component should be enabled, false otherwise; the default is true.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Max\">\n            <summary>\n            Gets or sets the maximum value of the ProgressBar\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Min\">\n            <summary>\n            Gets or sets the minimum value of the ProgressBar\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Orientation\">\n            <summary>\n            Gets or sets the orientation of the ProgressBar\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Reverse\">\n            <summary>\n            Specifies if the progress direction should be reversed\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.ShowStatus\">\n            <summary>\n            Specifies if the progress status should be displayed\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Value\">\n            <summary>\n            Gets or sets the current value of the ProgressBar \n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ProgressBar.Type\">\n            <summary>\n            Gets or sets the type of the ProgressBar\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ProgressBarOrientation\">\n            <summary>\n            Represents the orientation supported by Kendo UI ProgressBar for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.ProgressBarType\">\n            <summary>\n            Represents the progress types supported by Kendo UI ProgressBar for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.QRCodeHtmlBuilder.#ctor(Kendo.Mvc.UI.QRCode)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.QRCodeHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The QRCode component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.QRCodeHtmlBuilder.CreateQRCode\">\n            <summary>\n            Creates the QRCode top-level div.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.QRCodeHtmlBuilder.BuildCore\">\n            <summary>\n            Builds the QRCode component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.QREncoding\">\n            <summary>\n            Specifies a QR code encoding mode.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QREncoding.ISO_8859_1\">\n            <summary>\n            Specifies the default encoding - ISO/IEC 8859-1.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QREncoding.UTF_8\">\n            <summary>\n            Specifies a UTF-8 encoding.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.QRErrorCorrectionLevel\">\n            <summary>\n            Specifies a QR code error correction level.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QRErrorCorrectionLevel.L\">\n            <summary>\n            Specifies a Low error correction level. Approximately 7% of the codewords can be restored.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QRErrorCorrectionLevel.M\">\n            <summary>\n            Specifies a Medium error correction level. Approximately 15% of the codewords can be restored.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QRErrorCorrectionLevel.Q\">\n            <summary>\n            Specifies a Quartile error correction level. Approximately 25% of the codewords can be restored.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.QRErrorCorrectionLevel.H\">\n            <summary>\n            Specifies a High error correction level. Approximately 30% of the codewords can be restored.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.QRBorderBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"T:Kendo.Mvc.UI.QRBorder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRBorderBuilder.#ctor(Kendo.Mvc.UI.QRBorder)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.QRBorderBuilder\"/> class.\n            </summary>\n            <param name=\"border\">The qr code border.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRBorderBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the border width.\n            </summary>\n            <param name=\"width\">The border width.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt; border.Width(5))\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt; border.Width(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRBorderBuilder.Color(System.String)\">\n            <summary>\n            Sets the border color.\n            </summary>\n            <param name=\"color\">The border color.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt; border.Color(&quot;black&quot;))\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt; border.Color(&quot;black&quot;))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.QRCodeBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.QRCode\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.#ctor(Kendo.Mvc.UI.QRCode)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.QRCodeBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Background(System.String)\">\n            <summary>\n            Sets the background color of the QR code.\n            </summary>\n            <param name=\"color\">The QR code background color.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Background(&quot;red&quot;)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Background(&quot;red&quot;)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Border(System.String,System.Int32)\">\n            <summary>\n            Sets the border width and color of the QR code.\n            </summary>\n            <param name=\"color\">The QR code border color.</param>\n            <param name=\"width\">The QR code border width.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(&quot;black&quot;, 5)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(&quot;black&quot;, 5)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Border(System.Action{Kendo.Mvc.UI.Fluent.QRBorderBuilder})\">\n            <summary>\n            Sets the border configuration of the QRCode.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the border.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt;\n                    // configure the border\n                    border\n                        .Color(&quot;black&quot;)\n                        .Width(5)\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Border(border =&gt;\n                    // configure the border\n                    border\n                        .Color(&quot;black&quot;)\n                        .Width(5)\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Color(System.String)\">\n            <summary>\n            Sets the color of the QR code.\n            </summary>\n            <param name=\"color\">The QR code color.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Color(&quot;blue&quot;)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Color(&quot;blue&quot;)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Encoding(Kendo.Mvc.UI.QREncoding)\">\n            <summary>\n            Sets the encoding of the QR code.\n            </summary>\n            <param name=\"encoding\">The QR code encoding.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Encoding(QREncoding.UTF_8)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Encoding(QREncoding.UTF_8)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.ErrorCorrection(Kendo.Mvc.UI.QRErrorCorrectionLevel)\">\n            <summary>\n            Sets the error correction level of the QR code.\n            </summary>\n            <param name=\"errorCorrection\">The QR code error correction level.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .ErrorCorrection(QRErrorCorrectionLevel.Q)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .ErrorCorrection(QRErrorCorrectionLevel.Q)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Size(System.Int32)\">\n            <summary>\n            Sets the size of the QR code.\n            </summary>\n            <param name=\"size\">The QR code size.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Size(170)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Size(170)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the QR code.\n            </summary>\n            <param name=\"value\">The QR value.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Value(&quot;Hello world&quot;)\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().QRCode()\n                .Name(&quot;qrCode&quot;)\n                .Value(&quot;Hello world&quot;)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.QRCodeBuilder.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRBorder.Color\">\n            <summary>\n            Gets or sets the color of the border.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRBorder.Width\">\n            <summary>\n            Gets or sets the width of the border.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.QRCode\">\n            <summary>\n            The server side wrapper for the Kendo UI QRCode.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Value\">\n            <summary>\n            Gets or sets the QRCode value.\n            </summary>\n            <value>The QRCode value.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.RenderAs\">\n            <summary>\n            Gets or sets the render type.\n            </summary>\n            <value>The render type.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Border\">\n            <summary>\n            Gets the border configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Size\">\n            <summary>\n            Gets or sets the QRCode size.\n            </summary>\n            <value>The QRCode size.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Color\">\n            <summary>\n            Gets or sets the QRCode color.\n            </summary>\n            <value>The QRCode color.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Background\">\n            <summary>\n            Gets or sets the QRCode background.\n            </summary>\n            <value>The QRCode background.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.ErrorCorrection\">\n            <summary>\n            Gets or sets the QRCode error correction level.\n            </summary>\n            <value>The QRCode error correction level.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.QRCode.Encoding\">\n            <summary>\n            Gets or sets the QRCode encoding.\n            </summary>\n            <value>The QRCode encoding.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.RecurrenceEditor\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.#ctor(Kendo.Mvc.UI.RecurrenceEditor)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Start(System.DateTime)\">\n            <summary>\n            The current start of the RecurrenceEditor. Used to determine the start day. The minimum date available in the \"Until\" DatePicker.\n            </summary>\n            <param name=\"start\">The start</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .Start(new DateTime(2013, 6, 13))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.FirstWeekDay(System.Int32)\">\n            <summary>\n            The first week day (by index) of the RecurrenceEditor. Default is 0.\n            </summary>\n            <param name=\"firstWeekDay\">The firstWeekDay</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .FirstWeekDay(6)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Timezone(System.String)\">\n            <summary>\n            The timezone of the RecurrenceEditor.\n            </summary>\n            <param name=\"timezone\">The timezone</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .Timezone(\"Etc/UTC\")\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Value(System.String)\">\n            <summary>\n            The value of the RecurrenceEditor. Must be valid recurrence rule.\n            </summary>\n            <param name=\"value\">The value</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .Value(\"FREQ=WEEKLY;BYDAY=TU,TH\")\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Frequency(System.Action{Kendo.Mvc.UI.Fluent.RecurrenceEditorFrequencyBuilder})\">\n            <summary>\n            The Frequencies of the RecurrenceEditor.\n            </summary>\n            <param name=\"addFrequencyAction\">The addFrequencyAction</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .Frequency(frequency => frequency\n                    .Add(RecurrenceEditorFrequency.Never)\n                    .Add(RecurrenceEditorFrequency.Daily)\n                    .Add(RecurrenceEditorFrequency.Weekly)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Frequency(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.RecurrenceEditorFrequency})\">\n            <summary>\n            The IEnumerable collection of frequencies for the RecurrenceEditor.\n            </summary>\n            <param name=\"frequencies\">The frequencies</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().RecurrenceEditor()\n                .Name(&quot;recurrenceEditor&quot;)\n                .Frequency(new List&lt;RecurrenceEditorFrequency&gt;() {\n                    RecurrenceEditorFrequency.Never,\n                    RecurrenceEditorFrequency.Daily,\n                    RecurrenceEditorFrequency.Weekly,\n                }))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Messages(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder})\">\n            <summary>\n            Sets the messages of the recurrenceEditor.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder})\">\n            <summary>\n            Sets the events configuration of the recurrenceEditor.\n            </summary>\n            <param name=\"clientEventsAction\">The lambda which configures the recurrenceEditor events</param>\n            <example>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().RecurrenceEditor()\n                        .Name(&quot;RecurrenceEditor&quot;)\n                        .Events(events =&gt;\n                            events.Change(&quot;change&quot;)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI RecurrenceEditor events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the change event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().RecurrenceEditor()\n                       .Name(\"RecurrenceEditor\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the change event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().RecurrenceEditor()\n                        .Name(\"RecurrenceEditor\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorFrequencyBuilder\">\n            <summary>\n            Creates views for the <see cref=\"T:Kendo.Mvc.UI.Scheduler`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorFrequencyBuilder.#ctor(Kendo.Mvc.UI.RecurrenceEditor)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.RecurrenceEditorFrequencyBuilder\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RecurrenceEditorFrequencyBuilder.Add(Kendo.Mvc.UI.RecurrenceEditorFrequency)\">\n            <summary>\n            Adds RecurrenceEditorFrequency to the RecurrenceEditor.\n            </summary>\n            <param name=\"frequency\">The frequency</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.RecurrenceEditorFrequency\">\n            <summary>\n            Represents the frequency types supported by Kendo UI RecurrenceEditor for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerDataSourceBuilder`1.Filter(System.Action{Kendo.Mvc.UI.Fluent.DataSourceFilterDescriptorFactory{`0}})\">\n            <summary>\n            Configures the initial filter.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerDataSourceBuilder`1.Model(System.Action{Kendo.Mvc.UI.Fluent.DataSourceSchedulerModelDescriptorFactory{`0}})\">\n            <summary>\n            Configures Model properties\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerCustomViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerCustomView\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2\"/> class.\n            </summary>\n            <param name=\"view\">The resource</param>\n            \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Title(System.String)\">\n            <summary>\n            The user-friendly title of the view displayed by the scheduler.\n            </summary>\n            <param name=\"title\">The title</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                    });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Editable(System.Action{Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder})\">\n            <summary>\n            Sets the editing configuration of the current scheduler view.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the editing</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Editable(System.Boolean)\">\n            <summary>\n            If set to true the user would be able to create new scheduler events and modify or delete existing ones. Default value is true.\n            </summary>\n            <param name=\"isEditable\">The isEditable</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.Editable(false);\n                    });\n                    views.AgendaView();\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.EventTemplate(System.String)\">\n            <summary>\n            The template used by the view to render the scheduler events.\n            </summary>\n            <param name=\"eventTemplate\">The eventTemplate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.EventTemplateId(System.String)\">\n            <summary>\n            The Id of the template used by the view to render the scheduler events.\n            </summary>\n            <param name=\"eventTemplateId\">The eventTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.SelectedDateFormat(System.String)\">\n            <summary>\n            The format used to display the selected date. Uses kendo.format.\n            Contains two placeholders - \"{0}\" and \"{1}\" which represent the start and end date displayed by the view.\n            </summary>\n            <param name=\"selectedDateFormat\">The selectedDateFormat.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.Editable(false);\n                        dayView.SelectedDateFormat(&quot;{0:dd-MM-yyyy}&quot;);\n                    });\n                    views.AgendaView();\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Selected(System.Boolean)\">\n            <summary>\n            If set to true the view will be initially selected by the scheduler widget. Default value is false.\n            </summary>\n            <param name=\"isSelected\">The isSelected</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.Editable(false);\n                        dayView.SelectedDateFormat(&quot;{0:dd-MM-yyyy}&quot;);\n                        dayView.Selected(true);\n                    });\n                    views.AgendaView();\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Groups(Kendo.Mvc.UI.SchedulerGroupOrientation)\">\n            <summary>\n            Sets the orientation of the group headers\n            </summary>\n            <param name=\"orientation\">The orientation</param>        \n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.SchedulerBaseViewBuilder`2.Groups(System.Action{Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder})\" -->\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder\">\n            <summary>\n            Creates resources grouping for the <see cref=\"T:Kendo.Mvc.UI.Scheduler`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder.#ctor(Kendo.Mvc.UI.SchedulerGroupSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:SchedulerGroupBuilder&lt;TModel&gt;\"/> class.\n            </summary>\n            <param name=\"container\">The container</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder.Resources(System.String[])\">\n            <summary>\n            Sets the resources by which the scheduler will be grouped.\n            </summary>\n            <param name=\"names\">The names of the resources</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder.Orientation(Kendo.Mvc.UI.SchedulerGroupOrientation)\">\n            <summary>\n            The orientation of the group headers.\n            </summary>\n            <param name=\"value\">The orientation</param>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerEditorMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerEditorMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditorMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerEditorMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerEditorMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"messages\">The messages.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder.Views(System.Action{Kendo.Mvc.UI.Fluent.SchedulerViewMessagesBuilder})\">\n            <summary>\n            Sets the View messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler view messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder.Recurrence(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder.RecurrenceEditor(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder})\">\n            <summary>\n            Sets the Editor messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler editor messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder.Editor(System.Action{Kendo.Mvc.UI.Fluent.SchedulerEditorMessagesBuilder})\">\n            <summary>\n            Sets the Editor messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler editor messages</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorDailyMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorDailyMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorDailyMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorDailyMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorDailyMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorEndMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorEndMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorEndMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorEndMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorEndMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorFrequenciesMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorFrequenciesMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorFrequenciesMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorFrequenciesMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorFrequenciesMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Frequencies(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorFrequenciesMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Frequencies messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor frequencies messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Daily(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorDailyMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Daily messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor daily messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Weekly(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeeklyMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Weekly messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor weekly messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Monthly(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMonthlyMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Montly messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor montly messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Yearly(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorYearlyMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Yearly messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor yearly messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.End(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorEndMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor End messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor end messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.OffsetPositions(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorOffsetPositionsMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor OffsetPositions messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor offsetPositions messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMessagesBuilder.Weekdays(System.Action{Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeekdaysMessagesBuilder})\">\n            <summary>\n            Sets the Recurrence Editor Weekdays messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler recurrence editor weekdays messages</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMonthlyMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorMonthlyMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMonthlyMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorMonthlyMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorMonthlyMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorOffsetPositionsMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorOffsetPositionsMessagesBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorOffsetPositionsMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorOffsetPositionsMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorOffsetPositionsMessages\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeekdaysMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeekdaysMessagesBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeekdaysMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorWeekdaysMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorWeekdaysMessages\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeeklyMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorWeeklyMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeeklyMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorWeeklyMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorWeeklyMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorYearlyMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceEditorYearlyMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorYearlyMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceEditorYearlyMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceEditorYearlyMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"editorMessages\">The editorMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerRecurrenceMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerRecurrenceMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerRecurrenceMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"recurrenceMessages\">The recurrenceMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerAgendaView\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder`1.EventDateTemplate(System.String)\">\n            <summary>\n            The template used by the agenda view to render the date of the scheduler events.\n            </summary>\n            <param name=\"eventDateTemplate\">The eventDateTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder`1.EventDateTemplateId(System.String)\">\n            <summary>\n            The Id of the template used by the agenda view to render the date of the scheduler events.\n            </summary>\n            <param name=\"eventDateTemplateId\">The eventDateTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder`1.EventTimeTemplate(System.String)\">\n            <summary>\n            The template used by the agenda view to render the time of the scheduler events.\n            </summary>\n            <param name=\"eventTimeTemplate\">The eventTimeTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder`1.EventTimeTemplateId(System.String)\">\n            <summary>\n            The Id of the template used by the agenda view to render the time of the scheduler events.\n            </summary>\n            <param name=\"eventTimeTemplateId\">The eventTimeTemplateId</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerDayViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerDayView\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerMultiDayView\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.AllDayEventTemplate(System.String)\">\n            <summary>\n            The template used to render the \"all day\" scheduler events.\n            </summary>\n            <param name=\"allDayEventTemplate\">The allDayEventTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.AllDayEventTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the \"all day\" scheduler events.\n            </summary>\n            <param name=\"allDayEventTemplateId\">The allDayEventTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.AllDaySlot(System.Boolean)\">\n            <summary>\n            If set to true the scheduler will display a slot for \"all day\" events. Default value is true.\n            </summary>\n            <param name=\"allDaySlot\">The allDaySlot</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.DateHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the date header cells.\n            </summary>\n            <param name=\"dateHeaderTemplate\">The dateHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.DateHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the date header cells.\n            </summary>\n            <param name=\"dateHeaderTemplateId\">The dateHeaderTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MajorTick(System.Int32)\">\n            <summary>\n            The number of minutes represented by a major tick.\n            </summary>\n            <param name=\"majorTick\">The majorTick</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.AllDaySlotTemplate(System.String)\">\n            <summary>\n            The template used to render the all day slot content\n            </summary>\n            <param name=\"slotTemplate\">The slotTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.AllDaySlotTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the all day slot content.\n            </summary>\n            <param name=\"slotTemplateId\">The id of template</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.SlotTemplate(System.String)\">\n            <summary>\n            The template used to render the slot content\n            </summary>\n            <param name=\"slotTemplate\">The slotTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.SlotTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the slot content.\n            </summary>\n            <param name=\"slotTemplateId\">The id of template</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MajorTimeHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the major ticks.\n            </summary>\n            <param name=\"majorTimeHeaderTemplate\">The majorTimeHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MajorTimeHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the major ticks.\n            </summary>\n            <param name=\"majorTimeHeaderTemplateId\">The majorTimeHeaderTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MinorTickCount(System.Int32)\">\n            <summary>\n            The number of time slots to display per major tick.\n            </summary>\n            <param name=\"minorTickCount\">The minorTickCount</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MinorTimeHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the minor ticks.\n            </summary>\n            <param name=\"minorTimeHeaderTemplate\">The minorTimeHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.MinorTimeHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the minor ticks.\n            </summary>\n            <param name=\"minorTimeHeaderTemplateId\">The minorTimeHeaderTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.StartTime(System.DateTime)\">\n            <summary>\n            The start time of the view. The scheduler will display events starting after the startTime.\n            </summary>\n            <param name=\"startTime\">The startTime</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.StartTime(new DateTime(2013, 6, 13, 10, 00, 00));\n                        dayView.EndTime(new DateTime(2013, 6, 13, 23, 00, 00));\n                    });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.StartTime(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The start time of the view. The scheduler will display events starting after the startTime.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.StartTime(10,0,0);\n                        dayView.EndTime(new DateTime(2013, 6, 13, 23, 00, 00));\n                    });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.EndTime(System.DateTime)\">\n            <summary>\n            The end time of the view. The scheduler will display events ending before the endTime.\n            </summary>\n            <param name=\"endTime\">The endTime</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.StartTime(new DateTime(2013, 6, 13, 10, 00, 00));\n                        dayView.EndTime(new DateTime(2013, 6, 13, 23, 00, 00));\n                    });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.EndTime(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The end time of the view. The scheduler will display events ending before the endTime.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView(dayView =&gt; {\n                        dayView.Title(&quot;Day&quot;);\n                        dayView.StartTime(new DateTime(2013, 6, 13, 10, 00, 00));\n                        dayView.EndTime(23,0,0);\n                    });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkDayStart(System.DateTime)\">\n            <summary>\n            The start time of the business hours. The scheduler will display events after the workDayStart if \"WorkDayCommand\" button is clicked.\n            </summary>\n            <param name=\"workDayStart\">The WorkDayStart</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkDayStart(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The start time of the business hours. The scheduler will display events after the workDayStart if \"WorkDayCommand\" button is clicked.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkDayEnd(System.DateTime)\">\n            <summary>\n            The end time of the business hours. The scheduler will display events before the workDayEnd if \"WorkDayCommand\" button is clicked.\n            </summary>\n            <param name=\"workDayEnd\">The WorkDayEnd</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkDayEnd(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The end time of the business hours. The scheduler will display events before the workDayEnd if \"WorkDayCommand\" button is clicked.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkDayCommand(System.Boolean)\">\n            <summary>\n            If set to false the scheduler will not display the \"WorkDayCommand\" button. Default value is true.\n            </summary>\n            <param name=\"showWorkDayCommand\">The showWorkDayCommand</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.ShowWorkHours(System.Boolean)\">\n            <summary>\n            If set to true the view will be initially shown in business hours mode.\n            </summary>\n            <param name=\"value\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.ShowWorkHours\">\n            <summary>\n            If set the view will be initially shown in business hours mode.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.Footer(System.Boolean)\">\n            <summary>\n            If set to false the scheduler will not display the \"footer\" area. Default value is true.\n            </summary>\n            <param name=\"showFooter\">The footer</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkWeekStart(System.Int32)\">\n            <summary>\n            Sets the start day of work week by index.\n            </summary>\n            <param name=\"workWeekStartDay\">The workWeekStartDay</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMultiDayViewBuilder`1.WorkWeekEnd(System.Int32)\">\n            <summary>\n            Sets the end day of work week by index.\n            </summary>\n            <param name=\"workWeekEndDay\">The workWeekEndDay</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerEditableSettings`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.#ctor(Kendo.Mvc.UI.SchedulerEditableSettings{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Create(System.Boolean)\">\n            <summary>\n            If set to true the user can create new events. Creating is enabled by default.\n            </summary>\n            <param name=\"create\">The create</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Destroy(System.Boolean)\">\n            <summary>\n            If set to true the user can delete events from the view by clicking the \"destroy\" button. Deleting is enabled by default.\n            </summary>\n            <param name=\"destroy\">The destroy</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Update(System.Boolean)\">\n            <summary>\n            If set to true the user can update events. Updating is enabled by default.\n            </summary>\n            <param name=\"update\">The update</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Template(System.String)\">\n            <summary>\n            The template which renders the editor.\n            </summary>\n            <param name=\"template\">The template</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.TemplateId(System.String)\">\n            <summary>\n            The Id of the template which renders the editor.\n            </summary>\n            <param name=\"templateId\">The templateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.TemplateName(System.String)\">\n            <summary>\n            The EditorTemplate which to be rendered as editor.\n            </summary>\n            <param name=\"name\">The name of the EditorTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Confirmation(System.String)\">\n            <summary>\n            The text which the scheduler will display in a confirmation dialog when the user clicks the \"destroy\" button.\n            </summary>\n            <param name=\"message\">The message</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Resize(System.Boolean)\">\n            <summary>\n            If set to false the resizing of the events will be disabled. Resizing is enabled by default.\n            </summary>\n            <param name=\"enable\">The resize option</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder`1.Confirmation(System.Boolean)\">\n            <summary>\n            If set to true the scheduler will display a confirmation dialog when the user clicks the \"destroy\" button. Confirmation dialog is enabled by default.\n            </summary>\n            <param name=\"enable\">The confirmation</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewMessagesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerViewMessages\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewMessagesBuilder.#ctor(Kendo.Mvc.UI.SchedulerViewMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"viewMessages\">The viewMessages.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerMonthViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerMonthView\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMonthViewBuilder`1.DayTemplate(System.String)\">\n            <summary>\n            The template used to render the day slots in month view.\n            </summary>\n            <param name=\"dayTemplate\">The dayTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMonthViewBuilder`1.DayTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the day slots in month view.\n            </summary>\n            <param name=\"dayTemplateId\">The dayTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerMonthViewBuilder`1.EventHeight(System.Int32)\">\n            <summary>\n            The height of the scheduler event rendered in month view.\n            </summary>\n            <param name=\"eventHeight\">The eventHeight</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerViewEditableSettings\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder.#ctor(Kendo.Mvc.UI.SchedulerViewEditableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder.Create(System.Boolean)\">\n            <summary>\n            If set to true the user can create new events. Creating is enabled by default.\n            </summary>\n            <param name=\"create\">The create</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder.Destroy(System.Boolean)\">\n            <summary>\n            If set to true the user can delete events from the view by clicking the \"destroy\" button. Deleting is enabled by default.\n            </summary>\n            <param name=\"destroy\">The destroy</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewEditableSettingsBuilder.Update(System.Boolean)\">\n            <summary>\n            If set to true the user can update events. Updating is enabled by default.\n            </summary>\n            <param name=\"update\">The update</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerWeekViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerWeekView\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerWorkWeekViewBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerWorkWeekView\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Scheduler`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.#ctor(Kendo.Mvc.UI.Scheduler{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Date(System.DateTime)\">\n            <summary>\n            The current date of the scheduler. Used to determine the period which is displayed by the widget.\n            </summary>\n            <param name=\"date\">The Date</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Mobile\">\n            <summary>\n            Enables the adaptive rendering when viewed on mobile browser\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Mobile(Kendo.Mvc.UI.MobileMode)\">\n            <summary>\n            Used to determine if adaptive rendering should be used when viewed on mobile browser\n            </summary>\n            <param name=\"type\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.StartTime(System.DateTime)\">\n            <summary>\n            The start time of the week and day views. The scheduler will display events starting after the startTime.\n            </summary>\n            <param name=\"startTime\">The startTime.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .StartTime(new DateTime(2013, 6, 13, 10, 00, 00))\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.StartTime(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The start time of the week and day views. The scheduler will display events starting after the startTime.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .StartTime(10, 0, 0)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.EndTime(System.DateTime)\">\n            <summary>\n            The end time of the week and day views. The scheduler will display events ending before the endTime.\n            </summary>\n            <param name=\"endTime\">The endTime.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .EndTime(new DateTime(2013, 6, 13, 23, 00, 00))\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.EndTime(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The end time of the week and day views. The scheduler will display events ending before the endTime.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .EndTime(10,0,0)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkDayStart(System.DateTime)\">\n            <summary>\n            The start time of the business day. The scheduler will display events starting after the workDayStart when the \"Show Business Hours\" button is pressed.\n            </summary>\n            <param name=\"workDayStart\">The workDayStart.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkDayStart(new DateTime(2013, 6, 13, 10, 00, 00))\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkDayStart(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The start time of the business day. The scheduler will display events starting after the workDayStart when the \"Show Business Hours\" button is pressed.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkDayStart(10, 0, 0)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkDayEnd(System.DateTime)\">\n            <summary>\n            The end time of the business day. The scheduler will display events ending before the workDayEnd when the \"Show Business Hours\" button is pressed.\n            </summary>\n            <param name=\"workDayEnd\">The workDayEnd.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkDayEnd(new DateTime(2013, 6, 13, 10, 00, 00))\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkDayEnd(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            The end time of the business day. The scheduler will display events ending before the workDayEnd when the \"Show Business Hours\" button is pressed.\n            </summary>\n            <param name=\"hours\">The hours</param>\n            <param name=\"minutes\">The minutes</param>\n            <param name=\"seconds\">The seconds</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkDayEnd(16,0,0)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Height(System.Int32)\">\n            <summary>\n            The height of the widget.\n            </summary>\n            <param name=\"height\">The height.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Height(600)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.EventTemplate(System.String)\">\n            <summary>\n            The template used to render the scheduler events.\n            </summary>\n            <param name=\"eventTemplate\">The eventTemplate.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n            \t.Name(&quot;scheduler&quot;)\n            \t.Date(new DateTime(2013, 6, 13))\n            \t.StartTime(new DateTime(2013, 6, 13, 10, 00, 00))\n            \t.EndTime(new DateTime(2013, 6, 13, 23, 00, 00))\n            \t.Height(600)\n            \t.EventTemplate(\n            \t\t&quot;&lt;div style='color:white'&gt;&quot; +\n            \t\t\t&quot;&lt;img src='&quot; + Url.Content(&quot;~/Content/web/scheduler/&quot;) + &quot;#= Image #' style='float:left'&gt;&quot; +\n            \t\t\t&quot;&lt;p&gt;&quot; +\n            \t\t\t\t&quot;#: kendo.toString(Start, 'hh:mm') # - #: kendo.toString(End, 'hh:mm') #&quot; +\n            \t\t\t&quot;&lt;/p&gt;&quot; +\n            \t\t\t&quot;&lt;h3&gt;#: title #&lt;/h3&gt;&quot; +\n            \t\t\t\t&quot;&lt;a href='#= Imdb #' style='color:white'&gt;Movie in IMDB&lt;/a&gt;&quot; +\n            \t\t&quot;&lt;/div&gt;&quot;)\n            \t.Views(views =&gt;\n            \t\t{\n            \t\t\tviews.DayView();\n            \t\t\tviews.AgendaView();\n            \t\t})\n            \t.BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.EventTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the scheduler events.\n            </summary>\n            <param name=\"eventTemplateId\">The eventTemplateId</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n            \t.Name(&quot;scheduler&quot;)\n            \t.Date(new DateTime(2013, 6, 13))\n            \t.StartTime(new DateTime(2013, 6, 13, 10, 00, 00))\n            \t.EndTime(new DateTime(2013, 6, 13, 23, 00, 00))\n            \t.Height(600)\n            \t.EventTemplateId(\"customEventTemplate\")\n            \t.Views(views =&gt;\n            \t\t{\n            \t\t\tviews.DayView();\n            \t\t\tviews.AgendaView();\n            \t\t})\n            \t.BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.AllDayEventTemplate(System.String)\">\n            <summary>\n            The template used to render the \"all day\" scheduler events.\n            </summary>\n            <param name=\"allDayEventTemplate\">The allDayEventTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.AllDayEventTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the \"all day\" scheduler events.\n            </summary>\n            <param name=\"allDayEventTemplateId\">The allDayEventTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.AllDaySlot(System.Boolean)\">\n            <summary>\n            If set to true the scheduler will display a slot for \"all day\" events.\n            </summary>\n            <param name=\"allDaySlot\">The allDaySlot.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.ShowWorkHours(System.Boolean)\">\n            <summary>\n            If set to true day and week views will be initially shown in business hours mode.\n            </summary>\n            <remarks>This options is applicable only to work week, week and day views</remarks>\n            <param name=\"value\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.ShowWorkHours\">\n            <summary>\n            If set day and week views will be initially shown in business hours mode.\n            </summary>\n            <remarks>This options is applicable only to work week, week and day views</remarks>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Selectable(System.Boolean)\">\n            <summary>\n            If set to true the scheduler will enable the selection\n            </summary>\n            <param name=\"selectable\">The selectable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.DateHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the date header cells.\n            </summary>\n            <param name=\"dateHeaderTemplate\">The dateHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.DateHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the date header cells.\n            </summary>\n            <param name=\"dateHeaderTemplateId\">The dateHeaderTemplateId</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n            \t.Name(&quot;scheduler&quot;)\n            \t.Date(new DateTime(2013, 6, 13))\n            \t.StartTime(new DateTime(2013, 6, 13, 10, 00, 00))\n            \t.EndTime(new DateTime(2013, 6, 13, 23, 00, 00))\n            \t.Height(600)\n            \t.AllDayEventTemplateId(\"customAllDayTemplate\")\n            \t.Views(views =&gt;\n            \t\t{\n            \t\t\tviews.DayView();\n            \t\t\tviews.AgendaView();\n            \t\t})\n            \t.BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MajorTick(System.Int32)\">\n            <summary>\n            The number of minutes represented by a major tick.\n            </summary>\n            <param name=\"majorTick\">The majorTick</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Height(600)\n                .MajorTick(120)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MajorTimeHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the major ticks.\n            </summary>\n            <param name=\"majorTimeHeaderTemplate\">The majorTimeHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MajorTimeHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the major ticks.\n            </summary>\n            <param name=\"majorTimeHeaderTemplateId\">The majorTimeHeaderTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MinorTickCount(System.Int32)\">\n            <summary>\n            The number of time slots to display per major tick.\n            </summary>\n            <param name=\"minorTickCount\">The minorTickCount</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Screening&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 7, 23))\n                .Height(400)\n                .MinorTickCount(1)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MinorTimeHeaderTemplate(System.String)\">\n            <summary>\n            The template used to render the minor ticks.\n            </summary>\n            <param name=\"minorTimeHeaderTemplate\">The minorTimeHeaderTemplate</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.MinorTimeHeaderTemplateId(System.String)\">\n            <summary>\n            The Id of the template used to render the minor ticks.\n            </summary>\n            <param name=\"minorTimeHeaderTemplateId\">The minorTimeHeaderTemplateId</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Timezone(System.String)\">\n            <summary>\n            The timezone which the scheduler will use to display the scheduler appointment dates. By default the current system timezone is used. This is an acceptable default when the scheduler widget is bound to local array of events. It is advisable to specify a timezone if the scheduler is bound to a remote service. That way all users would see the same dates and times no matter their configured system timezone.\n            The complete list of the supported timezones is available in the List of IANA time zones Wikipedia page.\n            </summary>\n            <param name=\"timezone\">The timezone</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Timezone(&quot;Europe/London&quot;)\n                .Height(600)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Width(System.Int32)\">\n            <summary>\n            The width of the widget.\n            </summary>\n            <param name=\"width\">The width</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Width(800)\n                .Height(600)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Snap(System.Boolean)\">\n            <summary>\n            If set to false the events would not snap events to the nearest slot during dragging (resizing or moving). Set it to false to allow free moving and resizing of events.\n            </summary>\n            <param name=\"isSnapable\">The isSnapable</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Snap(false)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            If set to false the initial binding will be prevented.\n            </summary>\n            <param name=\"autoBind\">The autoBind</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .AutoBind(false)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkWeekStart(System.Int32)\">\n            <summary>\n            Sets the start day of work week by index.\n            </summary>\n            <param name=\"workWeekStartDay\">The workWeekStartDay</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkWeekStart(2)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.WorkWeekEnd(System.Int32)\">\n            <summary>\n            Sets the end day of work week by index.\n            </summary>\n            <param name=\"workWeekEndDay\">The workWeekEndDay</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .WorkWeekEnd(2)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Editable(System.Action{Kendo.Mvc.UI.Fluent.SchedulerEditableSettingsBuilder{`0}})\">\n            <summary>\n            Sets the editing configuration of the scheduler.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the editing</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Editable(editable =&gt;\n                {\n                    editable.Confirmation(false);\n                    editable.TemplateId(&quot;customEditTemplate&quot;);\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Editable(System.Boolean)\">\n            <summary>\n            If set to false the user would not be able to create new scheduler events and modify or delete existing ones.\n            </summary>\n            <param name=\"isEditable\">The isEditable</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Editable(false)\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Min(System.DateTime)\">\n            <summary>\n            Constraints the minimum date which can be selected via the scheduler navigation.\n            </summary>\n            <param name=\"date\">The min date</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Max(System.DateTime)\">\n            <summary>\n            Constraints the maximum date which can be selected via the scheduler navigation.\n            </summary>\n            <param name=\"date\">The max date</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Group(System.Action{Kendo.Mvc.UI.Fluent.SchedulerGroupBuilder})\">\n            <summary>\n            Sets the resources grouping configuration of the scheduler.\n            </summary>\n            <param name=\"configuration\">The lambda which configures the scheduler grouping</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Task&gt;()\n               .Name(&quot;Scheduler&quot;)\n               .Resources(resource =&gt;\n               {\n                   resource.Add(m =&gt; m.TaskID)\n                       .Title(&quot;Color&quot;)\n                       .Multiple(true)\n                       .DataTextField(&quot;Text&quot;)\n                       .DataValueField(&quot;Value&quot;)\n                       .DataSource(d =&gt; d.Read(&quot;Attendies&quot;, &quot;Scheduler&quot;));\n               })\n               .DataSource(dataSource =&gt; dataSource\n                   .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n               ))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Resources(System.Action{Kendo.Mvc.UI.Fluent.SchedulerResourceFactory{`0}})\">\n            <summary>\n            Sets the resources configuration of the scheduler.\n            </summary>\n            <param name=\"addResourceAction\">The lambda which configures the scheduler resources</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Task&gt;()\n               .Name(&quot;Scheduler&quot;)\n               .Resources(resource =&gt;\n               {\n                   resource.Add(m =&gt; m.TaskID)\n                       .Title(&quot;Color&quot;)\n                       .Multiple(true)\n                       .DataTextField(&quot;Text&quot;)\n                       .DataValueField(&quot;Value&quot;)\n                       .DataSource(d =&gt; d.Read(&quot;Attendies&quot;, &quot;Scheduler&quot;));\n               })\n               .DataSource(dataSource =&gt; dataSource\n                   .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n               ))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Views(System.Action{Kendo.Mvc.UI.Fluent.SchedulerViewFactory{`0}})\">\n            <summary>\n            Sets the views configuration of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler views</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt; {\n                    views.DayView();\n                    views.AgendaView();\n                })\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Messages(System.Action{Kendo.Mvc.UI.Fluent.SchedulerMessagesBuilder})\">\n            <summary>\n            Sets the messages of the scheduler.\n            </summary>\n            <param name=\"addViewAction\">The lambda which configures the scheduler messages</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.SchedulerEventBuilder})\">\n            <summary>\n            Sets the events configuration of the scheduler.\n            </summary>\n            <param name=\"clientEventsAction\">The lambda which configures the scheduler events</param>\n            <example>\n            <code lang=\"Razor\">\n             &lt;%= Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(&quot;Scheduler&quot;)\n                        .Events(events =&gt;\n                            events.Remove(&quot;remove&quot;)\n                        )\n                        .BindTo(Model)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.BindTo(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Binds the scheduler to a list of objects\n            </summary>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"ASPX\">\n            @model IEnumerable&lt;Task&gt;\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Task&gt;&gt;&quot; %&gt;\n            &lt;: Html.Kendo().Scheduler&lt;Task&gt;()\n               .Name(&quot;Scheduler&quot;)\n               .BindTo(Model)\n               .DataSource(dataSource =&gt; dataSource\n                   .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n               )&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Task&gt;\n            @(Html.Kendo().Scheduler&lt;Task&gt;()\n               .Name(&quot;Scheduler&quot;)\n               .BindTo(Model)\n               .DataSource(dataSource => dataSource\n                   .Model(m => m.Id(f => f.TaskID))\n               ))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.SchedulerDataSourceBuilder{`0}})\">\n            <summary>\n            Configures the DataSource options.\n            </summary>\n            <param name=\"configurator\">The DataSource configurator action.</param>\n            <example>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .DataSource(source =&gt;\n                        {\n                            source.Read(read =&gt;\n                            {\n                                read.Action(\"Read\", \"Scheduler\");\n                            });\n                        })\n            %&gt;\n            </code>\n            </example>\n            \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI Scheduler events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Remove(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the remove event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Remove(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Remove(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the remove event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Remove(\"remove\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Add(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the add event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Add(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Add(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the add event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Add(\"add\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Edit(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the edit event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Edit(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Edit(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the edit event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Edit(\"edit\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Cancel(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the cancel event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Cancel(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Cancel(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the cancel event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Cancel(\"cancel\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the change event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the change event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Change(\"change\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Save(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the save event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .Events(events => events.Save(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )            \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Save(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the save event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Save(\"save\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the dataBound event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.DataBound(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.DataBound(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the dataBound event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.DataBound(\"dataBound\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.DataBinding(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the dataBinding event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.DataBinding(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.DataBinding(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the dataBinding event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.DataBinding(\"dataBinding\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.MoveStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the moveStart event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.MoveStart(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.MoveStart(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the moveStart event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.MoveStart(\"moveStart\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Move(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the move event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Move(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Move(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the move event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Move(\"move\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.MoveEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the moveEnd event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.MoveEnd(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.MoveEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the moveEnd event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.MoveEnd(\"moveEnd\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.ResizeStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the resizeStart event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.ResizeStart(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.ResizeStart(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the resizeStart event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.ResizeStart(\"resizeStart\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Resize(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the resize event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Resize(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Resize(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the resize event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Resize(\"resize\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.ResizeEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the resizeEnd event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.ResizeEnd(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.ResizeEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the resizeEnd event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.ResizeEnd(\"resizeEnd\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Navigate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the navigate event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                       .Name(\"Scheduler\")\n                       .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n                       .Events(events => events.Navigate(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerEventBuilder.Navigate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the navigate event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Scheduler&lt;Task&gt;()\n                        .Name(\"Scheduler\")\n                        .Events(events => events.Navigate(\"navigate\"))\n                        .DataSource(d => d\n                            .Model(m => m.Id(f => f.TaskID))\n                                .Read(\"Read\", \"Scheduler\")\n                                .Create(\"Create\", \"Scheduler\")\n                                .Destroy(\"Destroy\", \"Scheduler\")\n                                .Update(\"Update\", \"Scheduler\")\n                        )  \n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.SchedulerResource`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.#ctor(Kendo.Mvc.UI.SchedulerResource{`0},System.Web.Mvc.ViewContext,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1\"/> class.\n            </summary>\n            <param name=\"resource\">The resource</param>\n            <param name=\"viewContext\">The viewContext</param>\n            <param name=\"urlGenerator\">The resource</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.Title(System.String)\">\n            <summary>\n            The user friendly title of the resource displayed in the scheduler edit form. If not set the value of the field option is used.\n            </summary>\n            <param name=\"title\">The title</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.Multiple(System.Boolean)\">\n            <summary>\n            If set to true the scheduler event can be assigned multiple instances of the resource. The scheduler event field specified via the field option will contain an array of resources. By default only one resource instance can be assigned to an event.\n            </summary>\n            <param name=\"isMultiple\">The isMultiple</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.Name(System.String)\">\n            <summary>\n            The name of the resource.\n            </summary>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.BindTo(System.Collections.IEnumerable)\">\n            <summary>\n            Binds the scheduler resource to a list of objects\n            </summary>\n            <param name=\"dataSource\">The dataSource</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView();\n                    views.AgendaView();\n                })\n                .Resources(resource =&gt;\n                {\n                    resource.Add(m =&gt; m.OwnerID)\n                        .Title(&quot;Owner&quot;)\n                        .Multiple(true)\n                        .DataTextField(&quot;Text&quot;)\n                        .DataValueField(&quot;Value&quot;)\n                        .BindTo(new[] { \n                            new { Text = &quot;Alex&quot;, Value = 1, color = &quot;red&quot; } ,\n                            new { Text = &quot;Bob&quot;, Value = 1, color = &quot;green&quot; } ,\n                            new { Text = &quot;Charlie&quot;, Value = 1, color = &quot;blue&quot; } \n                        });\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.DataValueField(System.String)\">\n            <summary>\n            The field of the resource data item which represents the resource value. The resource value is used to link a scheduler event with a resource.\n            </summary>\n            <param name=\"field\">The field</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.DataTextField(System.String)\">\n            <summary>\n            The field of the resource data item which represents the resource text.\n            </summary>\n            <param name=\"field\">The field</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.DataColorField(System.String)\">\n            <summary>\n            The field of the resource data item which contains the resource color.\n            </summary>\n            <param name=\"field\">The field</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.ValuePrimitive(System.Boolean)\">\n            <summary>\n            Set to false if the scheduler event field specified via the field option contains a resource data item. By default the scheduler expects that field to contain a primitive value (string, number) which corresponds to the \"value\" of the resource (specified via dataValueField).\n            </summary>\n            <param name=\"valuePrimitive\">The valuePrimitive</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder})\">\n            <summary>\n            Configures the DataSource options.\n            </summary>\n            <param name=\"configurator\">The DataSource configurator action.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Scheduler&lt;Kendo.Mvc.Examples.Models.Scheduler.Task&gt;()\n                .Name(&quot;scheduler&quot;)\n                .Date(new DateTime(2013, 6, 13))\n                .Views(views =&gt;\n                {\n                    views.DayView();\n                    views.AgendaView();\n                })\n                .Resources(resource =&gt;\n                {\n                    resource.Add(m =&gt; m.OwnerID)\n                        .Title(&quot;Owner&quot;)\n                        .Multiple(true)\n                        .DataTextField(&quot;Text&quot;)\n                        .DataValueField(&quot;Value&quot;)\n                        .DataSource(d =&gt; d.Read(&quot;Attendies&quot;, &quot;Scheduler&quot;));\n                })\n                .DataSource(d =&gt; d\n                    .Model(m =&gt; m.Id(f =&gt; f.TaskID))\n                        .Read(&quot;Read&quot;, &quot;Scheduler&quot;)\n                        .Create(&quot;Create&quot;, &quot;Scheduler&quot;)\n                        .Destroy(&quot;Destroy&quot;, &quot;Scheduler&quot;)\n                        .Update(&quot;Update&quot;, &quot;Scheduler&quot;)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerResourceFactory`1\">\n            <summary>\n            Creates resources for the <see cref=\"T:Kendo.Mvc.UI.Scheduler`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceFactory`1.#ctor(Kendo.Mvc.UI.Scheduler{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerResourceFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerResourceFactory`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines a Scheduler resource.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1\">\n            <summary>\n            Creates views for the <see cref=\"T:Kendo.Mvc.UI.Scheduler`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.#ctor(Kendo.Mvc.UI.Scheduler{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.DayView(System.Action{Kendo.Mvc.UI.Fluent.SchedulerDayViewBuilder{Kendo.Mvc.UI.SchedulerDayView}})\">\n            <summary>\n            Defines a Scheduler day view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.DayView\">\n            <summary>\n            Enables a Scheduler day view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.CustomView(System.String)\">\n            <summary>\n            Defines a custom view \n            </summary>\n            <param name=\"type\">The JavaScript type name</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.CustomView(System.String,System.Action{Kendo.Mvc.UI.Fluent.SchedulerCustomViewBuilder{Kendo.Mvc.UI.SchedulerCustomView}})\">\n            <summary>\n            Defines a custom view \n            </summary>\n            <param name=\"type\">The JavaScript type name</param>\n            <param name=\"addViewAction\">The action for configuring the custom view</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.WorkWeekView(System.Action{Kendo.Mvc.UI.Fluent.SchedulerWorkWeekViewBuilder{Kendo.Mvc.UI.SchedulerWorkWeekView}})\">\n            <summary>\n            Defines a Scheduler workWeek view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.WorkWeekView\">\n            <summary>\n            Enables a Scheduler workWeek view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.WeekView(System.Action{Kendo.Mvc.UI.Fluent.SchedulerWeekViewBuilder{Kendo.Mvc.UI.SchedulerWeekView}})\">\n            <summary>\n            Defines a Scheduler week view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.WeekView\">\n            <summary>\n            Enables a Scheduler week view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.MonthView(System.Action{Kendo.Mvc.UI.Fluent.SchedulerMonthViewBuilder{Kendo.Mvc.UI.SchedulerMonthView}})\">\n            <summary>\n            Defines a Scheduler month view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.MonthView\">\n            <summary>\n            Enables a Scheduler month view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.AgendaView(System.Action{Kendo.Mvc.UI.Fluent.SchedulerAgendaViewBuilder{Kendo.Mvc.UI.SchedulerAgendaView}})\">\n            <summary>\n            Defines a Scheduler agenda view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SchedulerViewFactory`1.AgendaView\">\n            <summary>\n            Enables a Scheduler agenda view.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Scheduler`1\">\n            <summary>\n            The server side wrapper for Kendo UI Scheduler\n            </summary>\n            <typeparam name=\"TModel\"></typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SchedulerViewType\">\n            <summary>\n            Represents the view types supported by Kendo UI Scheduler for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SecurityTrimmingBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the SecurityTrimming info.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.SecurityTrimmingBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables security trimming\n            </summary>\n            <remarks>\n            The Enabled method is useful when you need to enable security trimming based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.SecurityTrimmingBuilder.HideParent(System.Boolean)\">\n            <summary>\n            Enables or disables whether to hide parent item which does not have accessible childrens\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SliderTooltipBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Slider for ASP.NET MVC tooltip\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderTooltipBuilder.Format(System.String)\">\n            <summary>Gets or sets the format for displaying the value in the tooltip.</summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n                        .Tooltip(tooltip => tooltip.Format(\"{0:P}\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderTooltipBuilder.Enabled(System.Boolean)\">\n            <summary>Display tooltip while drag.</summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n                        .Tooltip(tooltip => tooltip.Enable(false))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderTooltipBuilder.Tempalte(System.String)\">\n            <summary>Gets or sets the template for displaying the value in the tooltip.</summary>\n            <param name=\"template\">The template.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n                        .Tooltip(tooltip => tooltip.template(\"${value}\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder\">\n            <summary>Defines the fluent interface for configuring the <see cref=\"!:Events\"/>.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handlerName\">The action defining the inline handler.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().RangeSlider()\n                       .Name(\"RangeSlider\")\n                       .Events(events => events.Change(() =>\n                       {\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;%\n                       }))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Kendo client-side event.\n            </summary>\n            <param name=\"handlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSlider()\n                        .Name(\"RangeSlider\")\n                        .Events(events => events.Change(\"change\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder.Slide(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Slide client-side event.\n            </summary>\n            <param name=\"handlerName\">The action defining the inline handler.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().RangeSlider()\n                       .Name(\"RangeSlider\")\n                       .Events(events => events.Slide(() =>\n                       {\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;%\n                       }))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder.Slide(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Slide client-side event.\n            </summary>\n            <param name=\"handlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSlider()\n                        .Name(\"RangeSlider\")\n                        .Events(events => events.Slide(\"slide\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SliderEventBuilder\">\n            <summary>Defines the fluent interface for configuring the <see cref=\"!:Events\"/>.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handlerName\">The action defining the inline handler.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Slider()\n                       .Name(\"Slider\")\n                       .Events(events => events.Change(() =>\n                       {\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;%\n                       }))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n                        .Events(events => events.Change(\"change\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderEventBuilder.Slide(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Slide client-side event.\n            </summary>\n            <param name=\"handlerName\">The action defining the inline handler.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Slider()\n                       .Name(\"Slider\")\n                       .Events(events => events.Slide(() =>\n                       {\n                            %&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;%\n                       }))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderEventBuilder.Slide(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Slide client-side event.\n            </summary>\n            <param name=\"handlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n                        .Events(events => events.Slide(\"slide\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1\">\n            <summary>Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.RangeSlider`1\"/>component.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.#ctor(Kendo.Mvc.UI.RangeSlider{`0})\">\n            <summary>Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1\"/>class.</summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Values(System.Nullable{`0},System.Nullable{`0})\">\n            <summary>Sets the value of the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Values(`0[])\">\n            <summary>Sets the value of the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Orientation(Kendo.Mvc.UI.SliderOrientation)\">\n            <summary>Sets orientation of the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.TickPlacement(Kendo.Mvc.UI.SliderTickPlacement)\">\n            <summary>Sets a value indicating how to display the tick marks on the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Min(`0)\">\n            <summary>Sets the minimum value of the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Max(`0)\">\n            <summary>Sets the maximum value of the range slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.SmallStep(`0)\">\n            <summary>Sets the step with which the range slider value will change.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.LargeStep(`0)\">\n            <summary>Sets the delta with which the value will change when user click on the track.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Tooltip(System.Boolean)\">\n            <summary>Display tooltip while drag.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.SliderTooltipBuilder})\">\n            <summary>\n            Use it to configure tooltip while drag.\n            </summary>\n            <param name=\"action\">Use builder to set different tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Slider()\n                       .Name(\"Slider\")\n                       .Tooltip(tooltip => tooltip\n                           .Enable(true)\n                           .Format(\"{0:P}\")\n                       );\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.RangeSliderEventBuilder})\">\n            <summary>Configures the client-side events.</summary>\n            <param name=\"events\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RangeSlider()\n                       .Name(\"RangeSlider\")\n                       .Events(events =>\n                           events.OnChange(\"onChange\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.LeftDragHandleTitle(System.String)\">\n            <summary>Sets the title of the slider draghandle.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.RangeSliderBuilder`1.RightDragHandleTitle(System.String)\">\n            <summary>Sets the title of the slider draghandle.</summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SliderBuilder`1\">\n            <summary>Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Slider`1\"/>component.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.#ctor(Kendo.Mvc.UI.Slider{`0})\">\n            <summary>Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SliderBuilder`1\"/>class.</summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Value(System.Nullable{`0})\">\n            <summary>Sets the value of the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.DragHandleTitle(System.String)\">\n            <summary>Sets the title of the slider draghandle.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.IncreaseButtonTitle(System.String)\">\n            <summary>Sets the title of the slider increase button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.ShowButtons(System.Nullable{System.Boolean})\">\n            <summary>Sets whether slider to be rendered with increase/decrease button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.DecreaseButtonTitle(System.String)\">\n            <summary>Sets the title of the slider decrease button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Orientation(Kendo.Mvc.UI.SliderOrientation)\">\n            <summary>Sets orientation of the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.TickPlacement(Kendo.Mvc.UI.SliderTickPlacement)\">\n            <summary>Sets a value indicating how to display the tick marks on the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Min(`0)\">\n            <summary>Sets the minimum value of the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Max(`0)\">\n            <summary>Sets the maximum value of the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.SmallStep(`0)\">\n            <summary>Sets the step with which the slider value will change.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.LargeStep(`0)\">\n            <summary>Sets the delta with which the value will change when user click on the slider.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Tooltip(System.Boolean)\">\n            <summary>Display tooltip while drag.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.SliderTooltipBuilder})\">\n            <summary>\n            Use it to configure tooltip.\n            </summary>\n            <param name=\"action\">Use builder to set different tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Slider()\n                       .Name(\"Slider\")\n                       .Tooltip(tooltip => tooltip\n                           .Enable(true)\n                           .Format(\"{0:P}\")\n                       );\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SliderBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.SliderEventBuilder})\">\n            <summary>Configures the client-side events.</summary>\n            <param name=\"events\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Slider()\n                       .Name(\"Slider\")\n                       .Events(events =>\n                           events.OnChange(\"onChange\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SliderOrientation\">\n            <summary>Specifies the general layout of the slider.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderOrientation.Horizontal\">\n            <summary>The slider is oriented horizontally.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderOrientation.Vertical\">\n            <summary>The slider is oriented vertically.</summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SliderTickPlacement\">\n            <summary>Specifies the location of tick marks in a component.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderTickPlacement.None\">\n            <summary>No tick marks appear in the component.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderTickPlacement.TopLeft\">\n            <summary>\n            Tick marks are located on the top of a horizontal component or on the\n            left of a vertical component.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderTickPlacement.BottomRight\">\n            <summary>\n            Tick marks are located on the bottom of a horizontal component or on the\n            right side of a vertical component.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SliderTickPlacement.Both\">\n            <summary>Tick marks are located on both sides of the component.</summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SparklineType\">\n            <summary>\n            Defines the possible series orientation.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Line\">\n            <summary>\n            Line series (default)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Area\">\n            <summary>\n            Area series\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Bar\">\n            <summary>\n            Bar Series (synonym for Column in sparklines)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Column\">\n            <summary>\n            Column Series\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Bullet\">\n            <summary>\n            Bullet series\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SparklineType.Pie\">\n            <summary>\n            Pie series\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1\">\n            <summary>\n            Defines the fluent API for configuring the sparkline series defaults.\n            </summary>\n            <typeparam name=\"TModel\"></typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1.Bar\">\n            <summary>\n            Defines the default settings for bar series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1.Column\">\n            <summary>\n            Defines the default settings for column series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1.Line\">\n            <summary>\n            Defines the default settings for line series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1.Area\">\n            <summary>\n            Defines the default settings for area series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder`1.Pie\">\n            <summary>\n            Defines the default settings for pie series.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1\">\n            <summary>\n            Creates series for the <see cref=\"T:Kendo.Mvc.UI.Sparkline`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the chart is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.#ctor(Kendo.Mvc.UI.ISeriesContainer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bar``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bar``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bar(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bar(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bar(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bar series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Column``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the point category from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Column``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound column series.\n            </summary>\n            <param name=\"valueExpression\">\n            The expression used to extract the point value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Column(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n            <param name=\"noteTextMemberName\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Column(System.Type,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"valueMemberName\">\n            The name of the value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Column(System.Collections.IEnumerable)\">\n            <summary>\n            Defines bar series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Line``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Line``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the series value from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Line(System.String,System.String)\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Line(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound line series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Line(System.Collections.IEnumerable)\">\n            <summary>\n            Defines line series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Area``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Area``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"expression\">\n            The expression used to extract the value from the chart model.\n            </param>\n            <param name=\"categoryExpression\">\n            The expression used to extract the category from the chart model.\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the note text from the chart model.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Area(System.String,System.String)\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Area(System.Type,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound area series.\n            </summary>\n            <param name=\"memberType\">\n            The type of the value member.\n            </param>\n            <param name=\"memberName\">\n            The name of the value member.\n            </param>\n            <param name=\"categoryMemberName\">\n            The name of the category member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Area(System.Collections.IEnumerable)\">\n            <summary>\n            Defines area series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Pie``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Pie(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Pie(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound pie series.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Pie(System.Collections.IEnumerable)\">\n            <summary>\n            Defines pie series bound to inline data.\n            </summary>\n            <param name=\"data\">\n            The data to bind to\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bullet``2(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,``1}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bullet``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Linq.Expressions.Expression{System.Func{`0,System.String}},System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentExpression\">\n            The expression used to extract the point current value from the chart model\n            </param>\n            <param name=\"targetExpression\">\n            The expression used to extract the point target value from the chart model\n            </param>\n            <param name=\"colorExpression\">\n            The expression used to extract the point color from the chart model\n            </param>\n            <param name=\"noteTextExpression\">\n            The expression used to extract the point note text from the chart model\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bullet(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bar series.\n            </summary>\n            <param name=\"currentMemberName\">\n            The name of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextExpression\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Bullet(System.Type,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Defines bound bullet series.\n            </summary>\n            <param name=\"currentMemberType\">\n            The type of the current value member.\n            </param>\n            <param name=\"targetMemberName\">\n            The name of the target value member.\n            </param>\n            <param name=\"colorMemberName\">\n            The name of the color member.\n            </param>\n            <param name=\"noteTextExpression\">\n            The name of the note text member.\n            </param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Fluent.SparklineSeriesFactory`1.Container\">\n            <summary>\n            The parent Sparkline\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SparklineBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Sparkline`1\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.#ctor(Kendo.Mvc.UI.Sparkline{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.SparklineBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Data(System.Collections.IEnumerable)\">\n            <summary>\n            Sets the Sparkline data.\n            </summary>\n            <param name=\"data\">The data for the default Sparkline series.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Data(new int[] { 1, 2 })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Data(System.Double)\">\n            <summary>\n            Sets the Sparkline data.\n            </summary>\n            <param name=\"data\">The data for the default Sparkline series.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Data(new int[] { 1, 2 })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Type(Kendo.Mvc.UI.SparklineType)\">\n            <summary>\n            Sets the type of the sparkline.\n            </summary>\n            <param name=\"theme\">The Sparkline type.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Type(SparklineType.Area)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.PointWidth(System.Double)\">\n            <summary>\n            Sets the per-point width of the sparkline.\n            </summary>\n            <param name=\"theme\">The Sparkline per-point width.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .PointWidth(2)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.ChartEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Events(events => events\n                            .OnLoad(\"onLoad\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Theme(System.String)\">\n            <summary>\n            Sets the theme of the chart.\n            </summary>\n            <param name=\"theme\">The Sparkline theme.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Theme(\"Telerik\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.ChartArea(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaBuilder})\">\n            <summary>\n            Sets the Chart area.\n            </summary>\n            <param name=\"configurator\">The Chart area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .ChartArea(chartArea => chartArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.PlotArea(System.Action{Kendo.Mvc.UI.Fluent.PlotAreaBuilder})\">\n            <summary>\n            Sets the Plot area.\n            </summary>\n            <param name=\"configurator\">The Plot area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .PlotArea(plotArea => plotArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Series(System.Action{Kendo.Mvc.UI.Fluent.SparklineSeriesFactory{`0}})\">\n            <summary>\n            Defines the chart series.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n                        .Series(series =>\n                        {\n                            series.Bar(s => s.SalesAmount);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.SeriesDefaults(System.Action{Kendo.Mvc.UI.Fluent.SparklineSeriesDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart series of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n                        .SeriesDefaults(series => series.Bar().Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.AxisDefaults(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart axes of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n                        .AxisDefaults(axisDefaults => axisDefaults.MinorTickSize(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.CategoryAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder{`0}})\">\n            <summary>\n            Configures the category axis\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n                        .CategoryAxis(axis => axis\n                            .Categories(s => s.DateString)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.ValueAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Defines value axis options\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n                        .ValueAxis(a => a.Numeric().TickSize(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyAjaxDataSourceBuilder{`0}})\">\n            <summary>\n            Data Source configuration\n            </summary>\n            <param name=\"configurator\">Use the configurator to set different data binding options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Sparkline\"));\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Enables or disables automatic binding.\n            </summary>\n            <param name=\"autoBind\">\n            Gets or sets a value indicating if the chart\n            should be data bound during initialization.\n            The default value is true.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Sparkline\"));\n                        })\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.SeriesColors(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">A list of the series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .SeriesColors(new string[] { \"#f00\", \"#0f0\", \"#00f\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.SeriesColors(System.String[])\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">The series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .SeriesColors(\"#f00\", \"#0f0\", \"#00f\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartTooltipBuilder})\">\n            <summary>\n            Use it to configure the data point tooltip.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Tooltip(tooltip =>\n                        {\n                            tooltip.Visible(true).Format(\"{0:C}\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Tooltip(System.Boolean)\">\n            <summary>\n            Sets the data point tooltip visibility.\n            </summary>\n            <param name=\"visible\">\n            A value indicating if the data point tooltip should be displayed.\n            The tooltip is not visible by default.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Tooltip(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SparklineBuilder`1.Transitions(System.Boolean)\">\n            <summary>\n            Enables or disabled animated transitions on initial load and refresh. \n            </summary>\n            <param name=\"transitions\">\n            A value indicating if transition animations should be played.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Transitions(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.SparklineHtmlBuilder`1.#ctor(Kendo.Mvc.UI.Sparkline{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.SparklineHtmlBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The Sparkline component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.SparklineHtmlBuilder`1.CreateSparkline\">\n            <summary>\n            Creates the chart top-level div.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.SparklineHtmlBuilder`1.BuildCore\">\n            <summary>\n            Builds the Sparkline component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Sparkline`1.SeriesData\">\n            <summary>\n            Gets or sets the default series data\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Sparkline`1.Type\">\n            <summary>\n            Gets or sets the default series type.\n            The default value is SparklineType.Line.\n            </summary>\n            <value>\n            The default series type.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Sparkline`1.PointWidth\">\n            <summary>\n            Gets or sets the width to allocate for each point.\n            The default value is 5.\n            </summary>\n            <value>\n            The width to allocate for each point.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Size(System.String)\">\n            <summary>\n            Sets the pane size.\n            </summary>\n            <param name=\"size\">The desired size. Only sizes in pixels and percentages are allowed.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().Size(\"220px\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.MinSize(System.String)\">\n            <summary>\n            Sets the minimum pane size.\n            </summary>\n            <param name=\"size\">The desired minimum size. Only sizes in pixels and percentages are allowed.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().MinSize(\"220px\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.MaxSize(System.String)\">\n            <summary>\n            Sets the maximum pane size.\n            </summary>\n            <param name=\"size\">The desired maximum size. Only sizes in pixels and percentages are allowed.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().MaxSize(\"220px\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Scrollable(System.Boolean)\">\n            <summary>\n            Sets whether the pane shows a scrollbar when its content overflows.\n            </summary>\n            <param name=\"isScrollable\">Whether the pane will be scrollable.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().Scrollable(false);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Resizable(System.Boolean)\">\n            <summary>\n            Sets whether the pane can be resized by the user.\n            </summary>\n            <param name=\"isResizable\">Whether the pane will be resizable.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().Resizable(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Collapsed(System.Boolean)\">\n            <summary>\n            Sets whether the pane is initially collapsed.\n            </summary>\n            <param name=\"isCollapsed\">Whether the pane will be initially collapsed.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().Collapsed(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Collapsible(System.Boolean)\">\n            <summary>\n            Sets whether the pane can be collapsed by the user.\n            </summary>\n            <param name=\"isCollapsible\">Whether the pane can be collapsed by the user.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().Collapsible(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes applied to the outer HTML element rendered for the item\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add().HtmlAttributes(new { style = \"background: red\" });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes applied to the outer HTML element rendered for the item\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content of the pane.\n            </summary>\n            <param name=\"content\">The action which renders the HTML content.</param>\n            <code lang=\"CS\">\n             &lt;%  Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes =>\n                        {\n                            panes.Add()\n                                .Content(() =&gt; { &gt;%\n                                    &lt;p&gt;Content&lt;/p&gt;\n                                %&lt;});\n                        })\n                        .Render();\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content of the pane.\n            </summary>\n            <param name=\"content\">The Razor template for the HTML content.</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().Splitter()\n                   .Name(\"Splitter\")\n                   .Panes(panes =>\n                   {\n                       panes.Add()\n                            .Content(@&lt;p&gt;Content&lt;/p&gt;);\n                   })\n                   .Render();)\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content of the pane.\n            </summary>\n            <param name=\"content\">The HTML content.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                     .Name(\"Splitter\")\n                     .Panes(panes =>\n                     {\n                         panes.Add()\n                              .Content(\"&lt;p&gt;Content&lt;/p&gt;\");\n                     })\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.LoadContentFrom(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the Url which will be requested to return the pane content. \n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                     .Name(\"Splitter\")\n                     .Panes(panes => {\n                          panes.Add()\n                                .LoadContentFrom(MVC.Home.Index().GetRouteValueDictionary());\n                     })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.LoadContentFrom(System.String,System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the pane content. \n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                     .Name(\"Splitter\")\n                     .Panes(panes => {\n                          panes.Add()\n                               .LoadContentFrom(\"AjaxView_OpenSource\", \"Splitter\");\n                     })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.LoadContentFrom(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the Url, which will be requested to return the content.\n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <param name=\"routeValues\">Route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                     .Name(\"Splitter\")\n                     .Panes(panes => {\n                          panes.Add()\n                               .LoadContentFrom(\"AjaxView_OpenSource\", \"Splitter\", new { id = 10 });\n                     })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterPaneBuilder.LoadContentFrom(System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the pane content.\n            </summary>\n            <param name=\"value\">The url.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                     .Name(\"Splitter\")\n                     .Panes(panes => {\n                          panes.Add()\n                               .LoadContentFrom(Url.Action(\"AjaxView_OpenSource\", \"Splitter\"));\n                     })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SplitterPaneFactory\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"P:Kendo.Mvc.UI.Splitter.Panes\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SplitterEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Splitter for ASP.NET MVC events\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Resize(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Resize client-side event\n            </summary>\n            <param name=\"onResizeInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Splitter()\n                       .Name(\"Splitter\")\n                       .Events(events => events.Resize(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Resize(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Resize client-side event.\n            </summary>\n            <param name=\"onResizeHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Events(events => events.Resize(\"onResize\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Expand(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Expand client-side event\n            </summary>\n            <param name=\"onExpandInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Splitter()\n                       .Name(\"Splitter\")\n                       .Events(events => events.Expand(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Expand(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Expand client-side event.\n            </summary>\n            <param name=\"onExpandHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Events(events => events.Expand(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Collapse(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Collapse client-side event\n            </summary>\n            <param name=\"onCollapseInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Splitter()\n                       .Name(\"Splitter\")\n                       .Events(events => events.Collapse(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.Collapse(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Collapse client-side event.\n            </summary>\n            <param name=\"onCollapseHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Events(events => events.Collapse(\"onCollapse\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.ContentLoad(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ContentLoad client-side event\n            </summary>\n            <param name=\"onContentLoadInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Splitter()\n                       .Name(\"Splitter\")\n                       .Events(events => events.ContentLoad(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterEventBuilder.ContentLoad(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the ContentLoad client-side event.\n            </summary>\n            <param name=\"onContentLoadHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Events(events => events.ContentLoad(\"onContentLoad\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.SplitterOrientation\">\n            <summary>\n            Specifies the orientation in which the splitter panes will be ordered\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SplitterOrientation.Horizontal\">\n            <summary>\n            Panes are oredered horizontally\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.SplitterOrientation.Vertical\">\n            <summary>\n            Panes are oredered vertically\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.SplitterBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Splitter\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterBuilder.Orientation(Kendo.Mvc.UI.SplitterOrientation)\">\n            <summary>\n            Sets the splitter orientation.\n            </summary>\n            <param name=\"value\">The desired orientation.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Orientation(SplitterOrientation.Vertical)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterBuilder.Panes(System.Action{Kendo.Mvc.UI.Fluent.SplitterPaneFactory})\">\n            <summary>\n            Defines the panes in the splitter.\n            </summary>\n            <param name=\"configurePanes\">The action that configures the panes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Panes(panes => {\n                            panes.Add().LoadContentFrom(\"Navigation\", \"Shared\");\n                            panes.Add().LoadContentFrom(\"Index\", \"Home\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.SplitterBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.SplitterEventBuilder})\">\n            <summary>\n            Configures the client events for the splitter.\n            </summary>\n            <param name=\"configurator\">The action that configures the client events.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\")\n                        .Events(events => events\n                            .OnLoad(\"onLoad\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IAsyncContentContainer.ContentUrl\">\n            <summary>\n            Url, which will be used as a destination for the Ajax request.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Size\">\n            <summary>\n            Specifies the size of the pane\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.MinSize\">\n            <summary>\n            Specifies the minimum size of the pane\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.MaxSize\">\n            <summary>\n            Specifies the maximum size of the pane\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Collapsed\">\n            <summary>\n            Specifies whether the pane is initially collapsed\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Collapsible\">\n            <summary>\n            Specifies whether the pane can be collapsed by the user\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Resizable\">\n            <summary>\n            Specifies whether the pane can be resized by the user\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Scrollable\">\n            <summary>\n            Specifies whether the pane shows a scrollbar when its content overflows\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.ContentUrl\">\n            <summary>\n            Specifies URL from which to load the pane content\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.HtmlAttributes\">\n            <summary>\n            Specifies HTML attributes for the pane\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.SplitterPane.Template\">\n            <summary>\n            Specifies the pane contents\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNavigator`1.#ctor(Kendo.Mvc.UI.Chart{`0},System.Web.Mvc.ViewContext,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNavigator`1\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Chart\">\n            <summary>\n            The parent widget\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Series\">\n            <summary>\n            Gets the navigator series.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Visible\">\n            <summary>\n            Gets or sets a value indicating if the navigator is visible.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Select\">\n            <summary>\n            Gets or sets the navigator selection.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Hint\">\n            <summary>\n            Gets or sets the navigator hint.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.ViewContext\">\n            <summary>\n            Gets or sets the view context to rendering a view.\n            </summary>\n            <value>The view context.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.UrlGenerator\">\n            <summary>\n            Gets or sets the URL generator.\n            </summary>\n            <value>The URL generator.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.DataSource\">\n            <summary>\n            Gets the data source configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.AutoBind\">\n            <summary>\n            Gets or sets a value indicating if the chart\n            should be data bound during initialization.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.DateField\">\n            <summary>\n            Gets or sets the date field.\n            </summary>\n            <value>\n            The date field.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.CategoryAxis\">\n            <summary>\n            Configuration for the navigator category axes\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigator`1.Pane\">\n            <summary>\n            Configuration for the navigator pane\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartDateSelection.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartDateSelection\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateSelection.From\">\n            <summary>\n            The lower boundary of the range.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartDateSelection.To\">\n            <summary>\n            The upper boundary of the range.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"!:ChartNavigatorhintBuilder\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder.#ctor(Kendo.Mvc.UI.ChartNavigatorHint)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.ChartNavigatorHint\"/> class.\n            </summary>\n            <param name=\"navigatorHint\">The navigator hint.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder.Format(System.String)\">\n            <summary>\n            Sets the border color.\n            </summary>\n            <param name=\"color\">The border color (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().StockChart(Model)\n                       .Name(\"Chart\")\n                       .Navigator(nav => nav\n                            .Series(series =>\n                            {\n                               series.Bar(s => s.SalesAmount);\n                            })\n                            .Hint(hint => hint\n                                .Format(\"{0:d} | {1:d}\")\n                            )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder.Template(System.String)\">\n            <summary>\n            Sets the border opacity\n            </summary>\n            <param name=\"opacity\">The border opacity (CSS format).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().StockChart(Model)\n                       .Name(\"Chart\")\n                       .Navigator(nav => nav\n                            .Series(series =>\n                            {\n                               series.Bar(s => s.SalesAmount);\n                            })\n                            .Hint(hint => hint\n                                .Template(\"From: #= from # To: #= to #\")\n                            )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the hint visibility.\n            </summary>\n            <param name=\"visible\">The hint visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().StockChart(Model)\n                       .Name(\"Chart\")\n                       .Navigator(nav => nav\n                            .Series(series =>\n                            {\n                               series.Bar(s => s.SalesAmount);\n                            })\n                            .Hint(hint => hint\n                                .Visible(false)\n                            )\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.ChartNavigator`1\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.#ctor(Kendo.Mvc.UI.ChartNavigator{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1\"/> class.\n            </summary>\n            <param name=\"chartNavigator\">The stock chart navigator.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.Select(System.Nullable{System.DateTime},System.Nullable{System.DateTime})\">\n            <summary>\n            Sets the selection range\n            </summary>\n            <param name=\"from\">The selection range start.</param>\n            <param name=\"to\">The selection range end.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                      .Name(\"StockChart\")\n                      .Navigator(nav => nav.Select(DateTime.Today.AddMonths(-1), DateTime.Today))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.Series(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesFactory{`0}})\">\n            <summary>\n            Defines the navigator series. At least one series should be configured.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .Navigator(nav =>\n                             nav.Series(series =>\n                            {\n                                series.Bar(s => s.SalesAmount);\n                            })\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.Visible(System.Boolean)\">\n            <summary>\n            Sets the navigator visibility\n            </summary>\n            <param name=\"visible\">The navigator visibility.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().StockChart(Model)\n                       .Name(\"Chart\")\n                       .Navigator(nav => nav\n                            .Series(series =>\n                            {\n                               series.Bar(s => s.SalesAmount);\n                            })\n                            .Visible(false)\n                       )\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.Hint(System.Action{Kendo.Mvc.UI.Fluent.ChartNavigatorHintBuilder})\">\n            <summary>\n            Defines the navigator hint.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .Navigator(nav =>\n                             nav.Series(series =>\n                            {\n                                series.Bar(s => s.SalesAmount);\n                            })\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyAjaxDataSourceBuilder{`0}})\">\n            <summary>\n            Data Source configuration for the Navigator.\n            When configured, the Navigator will filter the main StockChart data source to the selected range.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set different data binding options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Navigator(navi => navi\n                        .DataSource(ds =>\n                            {\n                                ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                            })\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.DateField(System.String)\">\n            <summary>\n            Sets the field used by the navigator date axes.\n            </summary>\n            <param name=\"dateField\">The date field.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .Navigator(navi => navi\n                            .DateField(\"Date\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Enables or disables automatic binding.\n            </summary>\n            <param name=\"autoBind\">\n            Gets or sets a value indicating if the navigator\n            should be data bound during initialization.\n            The default value is true.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Navigator(navi => navi\n                            .DataSource(ds =>\n                            {\n                                ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                            })\n                            .AutoBind(false)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.CategoryAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder{`0}})\">\n            <summary>\n            Configures the navigator category axis\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder`1.Pane(System.Action{Kendo.Mvc.UI.Fluent.ChartPaneBuilder})\">\n            <summary>\n            Configures the a navigator pane.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.StockChartBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.#ctor(Kendo.Mvc.UI.StockChart{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.ChartBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.DateField(System.String)\">\n            <summary>\n            Sets the field used by all date axes (including the navigator).\n            </summary>\n            <param name=\"dateField\">The date field.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .DateField(\"Date\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Enables or disables automatic binding.\n            </summary>\n            <param name=\"autoBind\">\n            Gets or sets a value indicating if the chart\n            should be data bound during initialization.\n            The default value is true.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                        })\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Navigator(System.Action{Kendo.Mvc.UI.Fluent.ChartNavigatorBuilder{`0}})\">\n            <summary>\n            Configures the stock chart navigator.\n            </summary>\n            <param name=\"configurator\">The navigator configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"StockChart\")\n                        .Navigator(nav => nav\n                            .Series(series =>\n                            {\n                                series.Line(s => s.Volume);\n                            })\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.ChartEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Events(events => events\n                            .OnLoad(\"onLoad\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Theme(System.String)\">\n            <summary>\n            Sets the theme of the chart.\n            </summary>\n            <param name=\"theme\">The Chart theme.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Theme(\"Telerik\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.RenderAs(Kendo.Mvc.UI.RenderingMode)\">\n            <summary>\n            Sets the preferred rendering engine.\n            If it is not supported by the browser, the Chart will switch to the first available mode.\n            </summary>\n            <param name=\"renderAs\">The preferred rendering engine.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.ChartArea(System.Action{Kendo.Mvc.UI.Fluent.ChartAreaBuilder})\">\n            <summary>\n            Sets the Chart area.\n            </summary>\n            <param name=\"configurator\">The Chart area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .ChartArea(chartArea => chartArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.PlotArea(System.Action{Kendo.Mvc.UI.Fluent.PlotAreaBuilder})\">\n            <summary>\n            Sets the Plot area.\n            </summary>\n            <param name=\"configurator\">The Plot area.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .PlotArea(plotArea => plotArea.margin(20))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Title(System.String)\">\n            <summary>\n            Sets the title of the chart.\n            </summary>\n            <param name=\"title\">The Chart title.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Title(\"Yearly sales\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Title(System.Action{Kendo.Mvc.UI.Fluent.ChartTitleBuilder})\">\n            <summary>\n            Defines the title of the chart.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Title(title => title.Text(\"Yearly sales\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Legend(System.Boolean)\">\n            <summary>\n            Sets the legend visibility.\n            </summary>\n            <param name=\"visible\">A value indicating whether to show the legend.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Legend(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Legend(System.Action{Kendo.Mvc.UI.Fluent.ChartLegendBuilder})\">\n            <summary>\n            Configures the legend.\n            </summary>\n            <param name=\"configurator\">The configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Legend(legend => legend.Visible(true).Position(ChartLegendPosition.Bottom))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Series(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesFactory{`0}})\">\n            <summary>\n            Defines the chart series.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .Series(series =>\n                        {\n                            series.Bar(s => s.SalesAmount);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.SeriesDefaults(System.Action{Kendo.Mvc.UI.Fluent.ChartSeriesDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart series of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .SeriesDefaults(series => series.Bar().Stack(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Panes(System.Action{Kendo.Mvc.UI.Fluent.ChartPanesFactory})\">\n            <summary>\n            Defines the chart panes.\n            </summary>\n            <param name=\"configurator\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .Panes(panes =>\n                        {\n                            panes.Add(\"volume\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.AxisDefaults(System.Action{Kendo.Mvc.UI.Fluent.ChartAxisDefaultsBuilder{`0}})\">\n            <summary>\n            Defines the options for all chart axes of the specified type.\n            </summary>\n            <param name=\"configurator\">The configurator.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .AxisDefaults(axisDefaults => axisDefaults.MinorTickSize(5))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.CategoryAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartCategoryAxisBuilder{`0}})\">\n            <summary>\n            Configures the category axis\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .CategoryAxis(axis => axis\n                            .Categories(s => s.DateString)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.ValueAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Defines value axis options\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .ValueAxis(a => a.Numeric().TickSize(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.XAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Defines X-axis options for scatter charts\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .XAxis(a => a.Numeric().Max(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.YAxis(System.Action{Kendo.Mvc.UI.Fluent.ChartValueAxisFactory{`0}})\">\n            <summary>\n            Configures Y-axis options for scatter charts.\n            </summary>\n            <param name=\"configurator\">The configurator</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"Chart\")\n                        .YAxis(a => a.Numeric().Max(4))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyAjaxDataSourceBuilder{`0}})\">\n            <summary>\n            Data Source configuration\n            </summary>\n            <param name=\"configurator\">Use the configurator to set different data binding options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .DataSource(ds =>\n                        {\n                            ds.Ajax().Read(r => r.Action(\"SalesData\", \"Chart\"));\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.SeriesColors(System.Collections.Generic.IEnumerable{System.String})\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">A list of the series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .SeriesColors(new string[] { \"#f00\", \"#0f0\", \"#00f\" })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.SeriesColors(System.String[])\">\n            <summary>\n            Sets the series colors.\n            </summary>\n            <param name=\"colors\">The series colors.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .SeriesColors(\"#f00\", \"#0f0\", \"#00f\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Tooltip(System.Action{Kendo.Mvc.UI.Fluent.ChartTooltipBuilder})\">\n            <summary>\n            Use it to configure the data point tooltip.\n            </summary>\n            <param name=\"configurator\">Use the configurator to set data tooltip options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Tooltip(tooltip =>\n                        {\n                            tooltip.Visible(true).Format(\"{0:C}\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Tooltip(System.Boolean)\">\n            <summary>\n            Sets the data point tooltip visibility.\n            </summary>\n            <param name=\"visible\">\n            A value indicating if the data point tooltip should be displayed.\n            The tooltip is not visible by default.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Tooltip(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.StockChartBuilder`1.Transitions(System.Boolean)\">\n            <summary>\n            Enables or disabled animated transitions on initial load and refresh.\n            </summary>\n            <param name=\"transitions\">\n            A value indicating if transition animations should be played.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"Chart\")\n                        .Transitions(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.ChartNavigatorHint.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"!:NavigatorHint\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigatorHint.Format\">\n            <summary>\n            Gets or sets the hint format.\n            </summary>\n            <value>\n            The hint format.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigatorHint.Template\">\n            <summary>\n            Gets or sets the hint template.\n            </summary>\n            <value>\n            The hint template.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.ChartNavigatorHint.Visible\">\n            <summary>\n            Gets or sets a value indicating if the hint is visible\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.StockChart`1.Navigator\">\n            <summary>\n            Gets or sets the stock chart navigator settings.\n            </summary>\n            <value>\n            The Stock Chart navigator settings.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.StockChart`1.DateField\">\n            <summary>\n            Gets or sets the date field.\n            </summary>\n            <value>\n            The date field.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.EnumerableExtensions.Each``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})\">\n            <summary>\n            Executes the provided delegate for each item.\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"action\">The action to be applied.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.EnumerableExtensions.ElementAt(System.Collections.IEnumerable,System.Int32)\">\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"><c>index</c> is out of range.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.EnumerableExtensions.GenericEnumerable`1.#ctor(System.Collections.IEnumerable)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.Extensions.EnumerableExtensions.GenericEnumerable`1\"/> class.\n            </summary>\n            <param name=\"source\">The source.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.Extensions.QueryableExtensions\">\n            <summary>\n            Provides extension methods to process DataSourceRequest.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Sort(System.Linq.IQueryable,System.Collections.Generic.IEnumerable{Kendo.Mvc.SortDescriptor})\">\n            <summary>\n            Sorts the elements of a sequence using the specified sort descriptors.\n            </summary>\n            <param name=\"source\">A sequence of values to sort.</param>\n            <param name=\"sortDescriptors\">The sort descriptors used for sorting.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are sorted according to a <paramref name=\"sortDescriptors\"/>.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Page(System.Linq.IQueryable,System.Int32,System.Int32)\">\n            <summary>\n            Pages through the elements of a sequence until the specified \n            <paramref name=\"pageIndex\"/> using <paramref name=\"pageSize\"/>.\n            </summary>\n            <param name=\"source\">A sequence of values to page.</param>\n            <param name=\"pageIndex\">Index of the page.</param>\n            <param name=\"pageSize\">Size of the page.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are at the specified <paramref name=\"pageIndex\"/>.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Select(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\">\n            <summary>\n            Projects each element of a sequence into a new form.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are the result of invoking a \n            projection selector on each element of <paramref name=\"source\"/>.\n            </returns>\n            <param name=\"source\"> A sequence of values to project. </param>\n            <param name=\"selector\"> A projection function to apply to each element. </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.GroupBy(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\">\n            <summary>\n            Groups the elements of a sequence according to a specified key selector function.\n            </summary>\n            <param name=\"source\"> An <see cref=\"T:System.Linq.IQueryable\"/> whose elements to group.</param>\n            <param name=\"keySelector\"> A function to extract the key for each element.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> with <see cref=\"T:System.Linq.IGrouping`2\"/> items, \n            whose elements contains a sequence of objects and a key.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.OrderBy(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\">\n            <summary>\n            Sorts the elements of a sequence in ascending order according to a key.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are sorted according to a key.\n            </returns>\n            <param name=\"source\">\n            A sequence of values to order.\n            </param>\n            <param name=\"keySelector\">\n            A function to extract a key from an element.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.OrderByDescending(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\">\n            <summary>\n            Sorts the elements of a sequence in descending order according to a key.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are sorted in descending order according to a key.\n            </returns>\n            <param name=\"source\">\n            A sequence of values to order.\n            </param>\n            <param name=\"keySelector\">\n            A function to extract a key from an element.\n            </param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.OrderBy(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Nullable{System.ComponentModel.ListSortDirection})\">\n            <summary>\n            Calls <see cref=\"M:Kendo.Mvc.Extensions.QueryableExtensions.OrderBy(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\"/> \n            or <see cref=\"M:Kendo.Mvc.Extensions.QueryableExtensions.OrderByDescending(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)\"/> depending on the <paramref name=\"sortDirection\"/>.\n            </summary>\n            <param name=\"source\">The source.</param>\n            <param name=\"keySelector\">The key selector.</param>\n            <param name=\"sortDirection\">The sort direction.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> whose elements are sorted according to a key.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.GroupBy(System.Linq.IQueryable,System.Collections.Generic.IEnumerable{Kendo.Mvc.GroupDescriptor})\">\n            <summary>\n            Groups the elements of a sequence according to a specified <paramref name=\"groupDescriptors\"/>.\n            </summary>\n            <param name=\"source\"> An <see cref=\"T:System.Linq.IQueryable\"/> whose elements to group. </param>\n            <param name=\"groupDescriptors\">The group descriptors used for grouping.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> with <see cref=\"T:Kendo.Mvc.Infrastructure.IGroup\"/> items, \n            whose elements contains a sequence of objects and a key.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Aggregate(System.Linq.IQueryable,System.Collections.Generic.IEnumerable{Kendo.Mvc.AggregateFunction})\">\n            <summary>\n            Calculates the results of given aggregates functions on a sequence of elements.\n            </summary>\n            <param name=\"source\"> An <see cref=\"T:System.Linq.IQueryable\"/> whose elements will \n            be used for aggregate calculation.</param>\n            <param name=\"aggregateFunctions\">The aggregate functions.</param>\n            <returns>Collection of <see cref=\"T:Kendo.Mvc.Infrastructure.AggregateResult\"/>s calculated for each function.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Where(System.Linq.IQueryable,System.Linq.Expressions.Expression)\">\n            <summary> \n            Filters a sequence of values based on a predicate. \n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> that contains elements from the input sequence \n            that satisfy the condition specified by <paramref name=\"predicate\"/>.\n            </returns>\n            <param name=\"source\"> An <see cref=\"T:System.Linq.IQueryable\"/> to filter.</param>\n            <param name=\"predicate\"> A function to test each element for a condition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Where(System.Linq.IQueryable,System.Collections.Generic.IEnumerable{Kendo.Mvc.IFilterDescriptor})\">\n            <summary> \n            Filters a sequence of values based on a collection of <see cref=\"T:Kendo.Mvc.IFilterDescriptor\"/>. \n            </summary>\n            <param name=\"source\">The source.</param>\n            <param name=\"filterDescriptors\">The filter descriptors.</param>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> that contains elements from the input sequence \n            that satisfy the conditions specified by each filter descriptor in <paramref name=\"filterDescriptors\"/>.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Take(System.Linq.IQueryable,System.Int32)\">\n            <summary>\n            Returns a specified number of contiguous elements from the start of a sequence.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> that contains the specified number \n            of elements from the start of <paramref name=\"source\"/>.\n            </returns>\n            <param name=\"source\"> The sequence to return elements from.</param>\n            <param name=\"count\"> The number of elements to return. </param>\n            <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"source\"/> is null. </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Skip(System.Linq.IQueryable,System.Int32)\">\n            <summary>\n            Bypasses a specified number of elements in a sequence \n            and then returns the remaining elements.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Linq.IQueryable\"/> that contains elements that occur \n            after the specified index in the input sequence.\n            </returns>\n            <param name=\"source\">\n            An <see cref=\"T:System.Linq.IQueryable\"/> to return elements from.\n            </param>\n            <param name=\"count\">\n            The number of elements to skip before returning the remaining elements.\n            </param>\n            <exception cref=\"T:System.ArgumentNullException\"> <paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.Count(System.Linq.IQueryable)\">\n            <summary> Returns the number of elements in a sequence.</summary>\n            <returns> The number of elements in the input sequence.</returns>\n            <param name=\"source\">\n            The <see cref=\"T:System.Linq.IQueryable\"/> that contains the elements to be counted.\n            </param>\n            <exception cref=\"T:System.ArgumentNullException\"> <paramref name=\"source\"/> is null.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.QueryableExtensions.ElementAt(System.Linq.IQueryable,System.Int32)\">\n            <summary> Returns the element at a specified index in a sequence.</summary>\n            <returns> The element at the specified position in <paramref name=\"source\"/>.</returns>\n            <param name=\"source\"> An <see cref=\"T:System.Linq.IQueryable\"/> to return an element from.</param>\n            <param name=\"index\"> The zero-based index of the element to retrieve.</param>\n            <exception cref=\"T:System.ArgumentNullException\"> <paramref name=\"source\"/> is null.</exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\"> <paramref name=\"index\"/> is less than zero.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.PopulateSiteMapAttribute.#ctor(Kendo.Mvc.SiteMapDictionary)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.PopulateSiteMapAttribute\"/> class.\n            </summary>\n            <param name=\"siteMaps\">The site maps.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.PopulateSiteMapAttribute.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.PopulateSiteMapAttribute\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.PopulateSiteMapAttribute.OnResultExecuting(System.Web.Mvc.ResultExecutingContext)\">\n            <summary>\n            Called before an action result executes.\n            </summary>\n            <param name=\"filterContext\">The filter context.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.PopulateSiteMapAttribute.OnResultExecuted(System.Web.Mvc.ResultExecutedContext)\">\n            <summary>\n            Called after an action result executes.\n            </summary>\n            <param name=\"filterContext\">The filter context.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.PopulateSiteMapAttribute.DefaultViewDataKey\">\n            <summary>\n            Gets or sets the default view data key.\n            </summary>\n            <value>The default view data key.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.PopulateSiteMapAttribute.SiteMapName\">\n            <summary>\n            Gets or sets the name of the site map.\n            </summary>\n            <value>The name of the site map.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.PopulateSiteMapAttribute.ViewDataKey\">\n            <summary>\n            Gets or sets the view data key.\n            </summary>\n            <value>The view data key.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.PopulateSiteMapAttribute.SiteMaps\">\n            <summary>\n            Gets or sets the site maps.\n            </summary>\n            <value>The site maps.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBase.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SiteMapBase\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBase.op_Implicit(Kendo.Mvc.SiteMapBase)~Kendo.Mvc.SiteMapBuilder\">\n            <summary>\n            Performs an implicit conversion from <see cref=\"T:Kendo.Mvc.SiteMapBase\"/> to <see cref=\"T:Kendo.Mvc.SiteMapBuilder\"/>.\n            </summary>\n            <param name=\"siteMap\">The site map.</param>\n            <returns>The result of the conversion.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBase.ToBuilder\">\n            <summary>\n            Returns a new builder.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBase.Reset\">\n            <summary>\n            Resets this instance.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.DefaultCacheDurationInMinutes\">\n            <summary>\n            Gets or sets the default cache duration in minutes.\n            </summary>\n            <value>The default cache duration in minutes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.DefaultCompress\">\n            <summary>\n            Gets or sets a value indicating whether [default compress].\n            </summary>\n            <value><c>true</c> if [default compress]; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.DefaultGenerateSearchEngineMap\">\n            <summary>\n            Gets or sets a value indicating whether [default generate search engine map].\n            </summary>\n            <value>\n            <c>true</c> if [default generate search engine map]; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.RootNode\">\n            <summary>\n            Gets or sets the root node.\n            </summary>\n            <value>The root node.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.CacheDurationInMinutes\">\n            <summary>\n            Gets or sets the cache duration in minutes.\n            </summary>\n            <value>The cache duration in minutes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.Compress\">\n            <summary>\n            Gets or sets a value indicating whether this <see cref=\"T:Kendo.Mvc.SiteMapBase\"/> is compress.\n            </summary>\n            <value><c>true</c> if compress; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBase.GenerateSearchEngineMap\">\n            <summary>\n            Gets or sets a value indicating whether [generate search engine map].\n            </summary>\n            <value>\n            \t<c>true</c> if [generate search engine map]; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.#ctor(Kendo.Mvc.SiteMapBase)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SiteMapBuilder\"/> class.\n            </summary>\n            <param name=\"siteMap\">The site map.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.op_Implicit(Kendo.Mvc.SiteMapBuilder)~Kendo.Mvc.SiteMapBase\">\n            <summary>\n            Performs an implicit conversion from <see cref=\"T:Kendo.Mvc.SiteMapBuilder\"/> to <see cref=\"T:Kendo.Mvc.SiteMapBase\"/>.\n            </summary>\n            <param name=\"builder\">The builder.</param>\n            <returns>The result of the conversion.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.ToSiteMap\">\n            <summary>\n            Returns the internal sitemap.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.CacheDurationInMinutes(System.Single)\">\n            <summary>\n            Caches the duration in minutes.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.Compress(System.Boolean)\">\n            <summary>\n            Compresses the specified value.\n            </summary>\n            <param name=\"value\">if set to <c>true</c> [value].</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapBuilder.GenerateSearchEngineMap(System.Boolean)\">\n            <summary>\n            Generates the search engine map.\n            </summary>\n            <param name=\"value\">if set to <c>true</c> [value].</param>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapBuilder.RootNode\">\n            <summary>\n            Gets the root node.\n            </summary>\n            <value>The root node.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Register``1(System.String,System.Action{``0})\">\n            <summary>\n            Registers the specified name.\n            </summary>\n            <typeparam name=\"TSiteMap\">The type of the site map.</typeparam>\n            <param name=\"name\">The name.</param>\n            <param name=\"configure\">The configure.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Add(System.Collections.Generic.KeyValuePair{System.String,Kendo.Mvc.SiteMapBase})\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <exception cref=\"T:System.NotSupportedException\">\n            The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Add(System.String,Kendo.Mvc.SiteMapBase)\">\n            <summary>\n            Adds an element with the provided key and value to the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </summary>\n            <param name=\"key\">The object to use as the key of the element to add.</param>\n            <param name=\"value\">The object to use as the value of the element to add.</param>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"key\"/> is null.\n            </exception>\n            <exception cref=\"T:System.ArgumentException\">\n            An element with the same key already exists in the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </exception>\n            <exception cref=\"T:System.NotSupportedException\">\n            The <see cref=\"T:System.Collections.Generic.IDictionary`2\"/> is read-only.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">\n            The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Contains(System.Collections.Generic.KeyValuePair{System.String,Kendo.Mvc.SiteMapBase})\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <returns>\n            true if <paramref name=\"item\"/> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.ContainsKey(System.String)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/> contains an element with the specified key.\n            </summary>\n            <param name=\"key\">The key to locate in the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.</param>\n            <returns>\n            true if the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/> contains an element with the key; otherwise, false.\n            </returns>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"key\"/> is null.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.CopyTo(System.Collections.Generic.KeyValuePair{System.String,Kendo.Mvc.SiteMapBase}[],System.Int32)\">\n            <summary>\n            Copies the elements of the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> to an <see cref=\"T:System.Array\"/>, starting at a particular <see cref=\"T:System.Array\"/> index.\n            </summary>\n            <param name=\"array\">The one-dimensional <see cref=\"T:System.Array\"/> that is the destination of the elements copied from <see cref=\"T:System.Collections.Generic.ICollection`1\"/>. The <see cref=\"T:System.Array\"/> must have zero-based indexing.</param>\n            <param name=\"arrayIndex\">The zero-based index in <paramref name=\"array\"/> at which copying begins.</param>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"array\"/> is null.\n            </exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">\n            <paramref name=\"arrayIndex\"/> is less than 0.\n            </exception>\n            <exception cref=\"T:System.ArgumentException\">\n            <paramref name=\"array\"/> is multidimensional.\n            -or-\n            <paramref name=\"arrayIndex\"/> is equal to or greater than the length of <paramref name=\"array\"/>.\n            -or-\n            The number of elements in the source <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is greater than the available space from <paramref name=\"arrayIndex\"/> to the end of the destination <paramref name=\"array\"/>.\n            -or-\n            Type <paramref name=\"T\"/> cannot be cast automatically to the type of the destination <paramref name=\"array\"/>\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> that can be used to iterate through the collection.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Remove(System.Collections.Generic.KeyValuePair{System.String,Kendo.Mvc.SiteMapBase})\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <returns>\n            true if <paramref name=\"item\"/> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>; otherwise, false. This method also returns false if <paramref name=\"item\"/> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </returns>\n            <exception cref=\"T:System.NotSupportedException\">\n            The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.Remove(System.String)\">\n            <summary>\n            Removes the element with the specified key from the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </summary>\n            <param name=\"key\">The key of the element to remove.</param>\n            <returns>\n            true if the element is successfully removed; otherwise, false.  This method also returns false if <paramref name=\"key\"/> was not found in the original <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </returns>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"key\"/> is null.\n            </exception>\n            <exception cref=\"T:System.NotSupportedException\">\n            The <see cref=\"T:System.Collections.Generic.IDictionary`2\"/> is read-only.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.TryGetValue(System.String,Kendo.Mvc.SiteMapBase@)\">\n            <summary>\n            Gets the value associated with the specified key.\n            </summary>\n            <param name=\"key\">The key whose value to get.</param>\n            <param name=\"value\">When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the <paramref name=\"value\"/> parameter. This parameter is passed uninitialized.</param>\n            <returns>\n            true if the object that implements <see cref=\"T:System.Collections.Generic.IDictionary`2\"/> contains an element with the specified key; otherwise, false.\n            </returns>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"key\"/> is null.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapDictionary.System#Collections#IEnumerable#GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through a collection.\n            </summary>\n            <returns>\n            An <see cref=\"T:System.Collections.IEnumerator\"/> object that can be used to iterate through the collection.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.DefaultSiteMapFactory\">\n            <summary>\n            Gets or sets the default site map factory.\n            </summary>\n            <value>The default site map factory.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.DefaultSiteMap\">\n            <summary>\n            Gets or sets the default site map.\n            </summary>\n            <value>The default site map.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.Count\">\n            <summary>\n            Gets the number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <value></value>\n            <returns>\n            The number of elements contained in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.IsReadOnly\">\n            <summary>\n            Gets a value indicating whether the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.\n            </summary>\n            <value></value>\n            <returns>true if the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.Keys\">\n            <summary>\n            Gets an <see cref=\"T:System.Collections.Generic.ICollection`1\"/> containing the keys of the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </summary>\n            <value></value>\n            <returns>\n            An <see cref=\"T:System.Collections.Generic.ICollection`1\"/> containing the keys of the object that implements <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.Values\">\n            <summary>\n            Gets an <see cref=\"T:System.Collections.Generic.ICollection`1\"/> containing the values in the <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </summary>\n            <value></value>\n            <returns>\n            An <see cref=\"T:System.Collections.Generic.ICollection`1\"/> containing the values in the object that implements <see cref=\"T:System.Collections.Generic.IDictionary`2\"/>.\n            </returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapDictionary.Item(System.String)\">\n            <summary>\n            Gets or sets the <see cref=\"T:Kendo.Mvc.SiteMapBase\"/> with the specified key.\n            </summary>\n            <value></value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapManager.SiteMaps\">\n            <summary>\n            Gets the site maps.\n            </summary>\n            <value>The site maps.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNode.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SiteMapNode\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNode.op_Implicit(Kendo.Mvc.SiteMapNode)~Kendo.Mvc.SiteMapNodeBuilder\">\n            <summary>\n            Performs an implicit conversion from <see cref=\"T:Kendo.Mvc.SiteMapNode\"/> to <see cref=\"T:Kendo.Mvc.SiteMapNodeBuilder\"/>.\n            </summary>\n            <param name=\"node\">The node.</param>\n            <returns>The result of the conversion.</returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.Title\">\n            <summary>\n            Gets or sets the title.\n            </summary>\n            <value>The title.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.Visible\">\n            <summary>\n            Gets or sets a value indicating whether this <see cref=\"T:Kendo.Mvc.SiteMapNode\"/> is visible.\n            </summary>\n            <value><c>true</c> if visible; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.LastModifiedAt\">\n            <summary>\n            Gets or sets the last modified at.\n            </summary>\n            <value>The last modified at.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.RouteName\">\n            <summary>\n            Gets or sets the name of the route.\n            </summary>\n            <value>The name of the route.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.ControllerName\">\n            <summary>\n            Gets or sets the name of the controller.\n            </summary>\n            <value>The name of the controller.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.ActionName\">\n            <summary>\n            Gets or sets the name of the action.\n            </summary>\n            <value>The name of the action.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.RouteValues\">\n            <summary>\n            Gets or sets the route values.\n            </summary>\n            <value>The route values.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.Url\">\n            <summary>\n            Gets or sets the URL.\n            </summary>\n            <value>The URL.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.IncludeInSearchEngineIndex\">\n            <summary>\n            Gets or sets a value indicating whether [include in search engine index].\n            </summary>\n            <value>\n            <c>true</c> if [include in search engine index]; otherwise, <c>false</c>.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.Attributes\">\n            <summary>\n            Gets or sets the attributes.\n            </summary>\n            <value>The attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.SiteMapNode.ChildNodes\">\n            <summary>\n            Gets or sets the child nodes.\n            </summary>\n            <value>The child nodes.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.#ctor(Kendo.Mvc.SiteMapNode)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SiteMapNodeBuilder\"/> class.\n            </summary>\n            <param name=\"siteMapNode\">The site map node.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.op_Implicit(Kendo.Mvc.SiteMapNodeBuilder)~Kendo.Mvc.SiteMapNode\">\n            <summary>\n            Performs an implicit conversion from <see cref=\"T:Kendo.Mvc.SiteMapNodeBuilder\"/> to <see cref=\"T:Kendo.Mvc.SiteMapNode\"/>.\n            </summary>\n            <param name=\"builder\">The builder.</param>\n            <returns>The result of the conversion.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.ToNode\">\n            <summary>\n            Returns the internal node.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Title(System.String)\">\n            <summary>\n            Sets the title.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets the visibility.\n            </summary>\n            <param name=\"value\">if set to <c>true</c> [value].</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.LastModifiedAt(System.DateTime)\">\n            <summary>\n            Sets the Lasts the modified date..\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Route(System.String)\">\n            <summary>\n            Sets the route.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Action(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action to which the date should navigate\n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller and route values.\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, controller and route values.\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Action(System.String,System.String)\">\n            <summary>\n            Sets the action and controller.\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Action``1(System.Linq.Expressions.Expression{System.Action{``0}})\">\n            <summary>\n            Expression based controllerAction.\n            </summary>\n            <typeparam name=\"TController\">The type of the controller.</typeparam>\n            <param name=\"controllerAction\">The action.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Url(System.String)\">\n            <summary>\n            Sets the url.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.IncludeInSearchEngineIndex(System.Boolean)\">\n            <summary>\n            Marks an item that it would be included in the search engine index.\n            </summary>\n            <param name=\"value\">if set to <c>true</c> [value].</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Attributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the attributes\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.Attributes(System.Object)\">\n            <summary>\n            Sets the attributes\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeBuilder.ChildNodes(System.Action{Kendo.Mvc.SiteMapNodeFactory})\">\n            <summary>\n            Executes the provided delegate to configure the child node.\n            </summary>\n            <param name=\"addActions\">The add actions.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeFactory.#ctor(Kendo.Mvc.SiteMapNode)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.SiteMapNodeFactory\"/> class.\n            </summary>\n            <param name=\"parent\">The parent.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.SiteMapNodeFactory.Add\">\n            <summary>\n            Adds this instance.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.XmlSiteMap.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.XmlSiteMap\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.XmlSiteMap.Load\">\n            <summary>\n            Loads from the default path.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.XmlSiteMap.LoadFrom(System.String)\">\n            <summary>\n            Loads from the specified path.\n            </summary>\n            <param name=\"relativeVirtualPath\">The relative virtual path.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.XmlSiteMap.DefaultPath\">\n            <summary>\n            Gets or sets the default path.\n            </summary>\n            <value>The default path.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.CalendarBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Calendar\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.#ctor(Kendo.Mvc.UI.Calendar)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Calendar\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Culture(System.String)\">\n            <summary>\n            Specifies the culture info used by the Calendar widget.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"calendar\")\n                        .Culture(\"de-DE\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.CalendarEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Events(events =>\n                            events.Select(\"onSelect\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Format(System.String)\">\n            <summary>\n            Sets the date format, which will be used to parse and format the machine date.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.FooterId(System.String)\">\n            <summary>\n            FooterId to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .FooterId(\"widgetFooterId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Footer(System.String)\">\n            <summary>\n            Footer template to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Footer(\"#= kendo.toString(data, \"G\") #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Footer(System.Boolean)\">\n            <summary>\n            Enable/disable footer.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Footer(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Depth(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the navigation depth.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Depth(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Start(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the start view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .Start(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.MonthTemplateId(System.String)\">\n            <summary>\n            MonthTemplateId to be used for rendering the cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .MonthTemplateId(\"widgetMonthTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.MonthTemplate(System.String)\">\n            <summary>\n            Templates for the cells rendered in the \"month\" view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .MonthTemplate(\"#= data.value #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.MonthTemplate(System.Action{Kendo.Mvc.UI.Fluent.MonthTemplateBuilder})\">\n            <summary>\n            Configures the content of cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n                        .MonthTemplate(month => month.Content(\"#= data.value #\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Min(System.String)\">\n            <summary>\n            Sets the minimal date, which can be selected in the calendar.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Max(System.String)\">\n            <summary>\n            Sets the maximal date, which can be selected in the calendar.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Min(System.DateTime)\">\n            <summary>\n            Sets the minimal date, which can be selected in the calendar\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Max(System.DateTime)\">\n            <summary>\n            Sets the maximal date, which can be selected in the calendar\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Value(System.Nullable{System.DateTime})\">\n            <summary>\n            Sets the value of the calendar\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Value(System.String)\">\n            <summary>\n            Sets the value of the calendar\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.CalendarBuilder.Selection(System.Action{Kendo.Mvc.UI.Fluent.CalendarSelectionSettingsBuilder})\">\n            <summary>\n            Configures the selection settings of the calendar.\n            </summary>\n            <param name=\"selectionAction\">SelectAction settings, which includes Action name and IEnumerable of DateTime objects.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridDestroyActionCommandBuilder\">\n            <summary>\n            Defines the fluent interface for configuring delete action command.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridDestroyActionCommandBuilder.#ctor(Kendo.Mvc.UI.GridDestroyActionCommand)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridDestroyActionCommandBuilder\"/> class.\n            </summary>\n            <param name=\"command\">The command.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridEditActionCommandBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the edit action command.\n            </summary>    \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditActionCommandBuilder.#ctor(Kendo.Mvc.UI.GridEditActionCommand)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridEditActionCommandBuilder\"/> class.\n            </summary>\n            <param name=\"command\">The command.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditActionCommandBuilder.UpdateText(System.String)\">\n            <summary>\n            Sets the text displayed by the \"update\" button. If not set a default value is used.\n            </summary>\n            <param name=\"text\">The text which should be displayed</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEditActionCommandBuilder.CancelText(System.String)\">\n            <summary>\n            Sets the text displayed by the \"cancel\" button. If not set a default value is used.\n            </summary>\n            <param name=\"text\">The text which should be displayed</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridDataKeyBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the data key.\n            </summary>\n            <typeparam name=\"TModel\">The type of the model</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridDataKeyBuilder`1.#ctor(Kendo.Mvc.UI.IGridDataKey{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridDataKeyBuilder`1\"/> class.\n            </summary>\n            <param name=\"dataKey\">The dataKey.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridDataKeyBuilder`1.RouteKey(System.String)\">\n            <summary>\n            Sets the RouteKey.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridDataKeyFactory`1\">\n            <summary>\n            Creates data key for the <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridDataKeyFactory`1.#ctor(System.Collections.Generic.IList{Kendo.Mvc.UI.IGridDataKey{`0}},System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridDataKeyFactory`1\"/> class.\n            </summary>\n            <param name=\"dataKeys\">dataKeys</param>\n            <param name=\"nameAsRouteKey\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridDataKeyFactory`1.Add``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines a data key.\n            </summary>\n            <typeparam name=\"TValue\"></typeparam>\n            <param name=\"expression\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.INavigationItemContainer`1.Items\">\n            <summary>\n            Child items collection.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Value(System.Nullable{`0})\">\n            <summary>\n            Sets the initial value of the NumericTextBox.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Step(`0)\">\n            <summary>\n            Sets the step, used ti increment/decrement the value of the textbox.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Min(System.Nullable{`0})\">\n            <summary>\n            Sets the minimal possible value allowed to the user.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Max(System.Nullable{`0})\">\n            <summary>\n            Sets the maximal possible value allowed to the user.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Placeholder(System.String)\">\n            <summary>\n            Sets the text which will be displayed if the textbox is empty.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Spinners(System.Boolean)\">\n            <summary>\n            Enables or disables the spin buttons.\n            </summary>\n            <param name=\"allowSpinner\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"EventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Events(events =>\n                            events.OnLoad(\"onLoad\").OnChange(\"onChange\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the textbox.\n            </summary>\n            <param name=\"allowSpinner\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Format(System.String)\">\n            <summary>\n            Stes the format of the NumericTextBox.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Format(\"c3\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Culture(System.String)\">\n            <summary>\n            Specifies the culture info used by the NumericTextBox widget.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Culture(\"de-DE\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.Decimals(System.Int32)\">\n            <summary>\n            Specifies the number precision. If not set precision defined by current culture is used.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Decimals(3)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.IncreaseButtonTitle(System.String)\">\n            <summary>Sets the title of the NumericTextBox increase button.</summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxBuilder`1.DecreaseButtonTitle(System.String)\">\n            <summary>Sets the title of the NumericTextBox decrease button.</summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the NumericTextBox events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Change client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().NumericTextBox()\n                       .Name(\"NumericTextBox\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Events(events => events.Change(\"change\"))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder.Spin(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Spin client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().NumericTextBox()\n                       .Name(\"NumericTextBox\")\n                       .Events(events => events.Spin(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NumericTextBoxEventBuilder.Spin(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Spin client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n                        .Events(events => events.Spin(\"spin\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TimePickerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.#ctor(Kendo.Mvc.UI.TimePicker)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TimePickerBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Value(System.Nullable{System.TimeSpan})\">\n            <summary>\n            Sets the value of the timepicker input\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Min(System.TimeSpan)\">\n            <summary>\n            Sets the minimum time, which can be selected in timepicker\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Min(System.String)\">\n            <summary>\n            Sets the minimum time, which can be selected in timepicker\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Max(System.TimeSpan)\">\n            <summary>\n            Sets the maximum time, which can be selected in timepicker\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Max(System.String)\">\n            <summary>\n            Sets the maximum time, which can be selected in timepicker\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.Interval(System.Int32)\">\n            <summary>\n            Sets the interval between hours.\n            </summary>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.TimePickerBuilder.BindTo(System.Collections.Generic.IList{System.DateTime})\" -->\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TimezoneEditorBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.TimezoneEditor\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorBuilder.#ctor(Kendo.Mvc.UI.TimezoneEditor)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TimezoneEditorBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorBuilder.Value(System.String)\">\n            <summary>\n            The value of the TimezoneEditor. Must be valid recurrence rule.\n            </summary>\n            <param name=\"value\">The value</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().TimezoneEditor()\n                .Name(&quot;timezoneEditor&quot;)\n                .Value(\"Etc/UTC\")\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder})\">\n            <summary>\n            Sets the events configuration of the scheduler.\n            </summary>\n            <param name=\"clientEventsAction\">The lambda which configures the timezoneEditor events</param>\n            <example>\n            <code lang=\"Razor\">\n             &lt;%= Html.Kendo().TimezoneEditor()\n                        .Name(&quot;TimezoneEditor&quot;)\n                        .Events(events =&gt;\n                            events.Change(&quot;change&quot;)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder\">\n            <summary>\n            The fluent API for subscribing to Kendo UI TimezoneEditor events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder\"/> class.\n            </summary>\n            <param name=\"events\">The events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the change event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().TimezoneEditor()\n                       .Name(\"TimezoneEditor\")\n                       .Events(events => events.Change(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TimezoneEditorEventBuilder.Change(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the change event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().TimezoneEditor()\n                        .Name(\"TimezoneEditor\")\n                        .Events(events => events.Change(\"change\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TooltipEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring tooltip client events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Show(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Show client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Tooltip()\n                       .For(\"#element\")\n                       .Events(events => events.Show(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Show(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Show client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Events(events => events.Show(\"show\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Hide(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Hide client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Tooltip()\n                       .For(\"#element\")\n                       .Events(events => events.Hide(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Hide(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Hide client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Events(events => events.Hide(\"hide\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.ContentLoad(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ContentLoad client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Tooltip()\n                       .For(\"#element\")\n                       .Events(events => events.ContentLoad(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.ContentLoad(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the ContentLoad client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Events(events => events.ContentLoad(\"contentLoad\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Error client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Tooltip()\n                       .For(\"#element\")\n                       .Events(events => events.Error(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.Error(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Events(events => events.Error(\"error\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.RequestStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the RequestStart client-side event\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Tooltip()\n                       .For(\"#element\")\n                       .Events(events => events.RequestStart(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n             )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipEventBuilder.RequestStart(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the RequestStart client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Events(events => events.RequestStart(\"requestStart\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TooltipBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Tooltip\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.#ctor(Kendo.Mvc.UI.Tooltip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TooltipBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.For(System.String)\">\n            <summary>\n            The selector which to match the DOM element to which the Tooltip widget will be instantiated\n            </summary>\n            <param name=\"selector\">jQuery selector</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Filter(System.String)\">\n            <summary>\n            The selector which to match target child elements for which the Tooltip will be shown\n            </summary>\n            <param name=\"selector\">jQuery selector</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Position(Kendo.Mvc.UI.TooltipPosition)\">\n            <summary>\n            The position (relative to the target) at which the Tooltip will be shown\n            </summary>\n            <param name=\"position\">The position</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.ShowAfter(System.Int32)\">\n            <summary>\n            The inverval in milliseconds, after which the Tooltip will be shown\n            </summary>\n            <param name=\"milliseconds\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Callout(System.Boolean)\">\n            <summary>\n            Determines if callout should be visible\n            </summary>\n            <param name=\"show\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.AutoHide(System.Boolean)\">\n            <summary>\n            Determines if tooltip should be automatically hidden, or a close button should be present\n            </summary>\n            <param name=\"value\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.LoadContentFrom(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the Url, which will be requested to return the content. \n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                    .For(\"#element\")\n                    .LoadContentFrom(MVC.Home.Index().GetRouteValueDictionary());\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.LoadContentFrom(System.String,System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the content. \n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .LoadContentFrom(\"AjaxView_OpenSource\", \"Tooltip\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.LoadContentFrom(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the Url, which will be requested to return the content.\n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <param name=\"routeValues\">Route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .LoadContentFrom(\"AjaxView_OpenSource\", \"Tooltip\", new { id = 10})\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.LoadContentFrom(System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the content.\n            </summary>\n            <param name=\"value\">The url.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .LoadContentFrom(Url.Action(\"AjaxView_OpenSource\", \"Tooltip\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the tooltip should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Content(\"&lt;strong&gt; First Item Content&lt;/strong&gt;\")\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.ContentTemplateId(System.String)\">\n            <summary>\n            Sets the id of kendo template which will be used as tooltip content.\n            </summary>\n            <param name=\"value\">The id of the template</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Content(\"template\")\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.ContentHandler(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets JavaScript function which to return the content for the tooltip.\n            </summary>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.ContentHandler(System.String)\">\n            <summary>\n            Sets JavaScript function which to return the content for the tooltip.\n            </summary>\n            <param name=\"handler\">JavaScript function name</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Animation(System.Boolean)\">\n            <summary>\n            Configures the animation effects of the window.\n            </summary>\n            <param name=\"enable\">Whether the component animation is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Animation(false)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.PopupAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the panelbar.\n            </summary>\n            <param name=\"animationAction\">The action that configures the animation.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Tooltip()\n                        .For(\"#element\")\n                        .Animation(animation => animation.Expand)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the width of the tooltip.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the tooltip.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Deferred\">\n            <summary>\n            Suppress initialization script rendering. Note that this options should be used in conjunction with <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DeferredScripts(System.Boolean)\"/>\n            </summary>        \n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.ToComponent\">\n            <summary>\n            Returns the internal view component.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TooltipBuilder.Render\">\n            <summary>\n            Renders the component.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.TooltipPosition\">\n            <summary>\n             Represents the tooltip position\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.TooltipPosition.Bottom\">\n            <summary>\n             Bottom position\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.TooltipPosition.Top\">\n            <summary>\n             Top position\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.TooltipPosition.Left\">\n            <summary>\n             Left position\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.TooltipPosition.Right\">\n            <summary>\n             Right position\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.TooltipPosition.Center\">\n            <summary>\n             Center position\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child TreeView items.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.#ctor(Kendo.Mvc.UI.TreeViewCheckboxesSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder\"/> class.\n            </summary>\n            <param name=\"settings\">The checkbox settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enable/disable rendering of checkboxes in the treeview.\n            </summary>\n            <param name=\"enabled\">Whether checkboxes should be rendered.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .Enabled(true)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.CheckChildren(System.Boolean)\">\n            <summary>\n            Enable/disable checking of child checkboxes in the treeview.\n            </summary>\n            <param name=\"enabled\">Whether checking of parent checkboxes should check child checkboxes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .CheckChildren(true)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.Template(System.String)\">\n            <summary>\n            Client-side template to be used for rendering the items in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .Template(\"#= data #\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.TemplateId(System.String)\">\n            <summary>\n            Id of the element that holds the client-side template to be used for rendering the items in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .TemplateId(\"widgetTemplateId\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder.Name(System.String)\">\n            <summary>\n            The name attribute of the checkbox fields. This will correlate to the name of the action method parameter that the nodes are posted to.\n            </summary>\n            <param name=\"name\">The string that will be used in the name attribute.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .Name(\"checkedNodes\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for building <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.#ctor(Kendo.Mvc.UI.TreeViewBindingSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables binding.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Index\", \"Home\").Enabled((bool)ViewData[\"ajax\"]);\n                        })\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable binding based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller and route values\n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(MVC.Home.Index(1).GetRouteValueDictionary());\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller and route values for the select operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Index\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, controller and route values for the select operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Index\", \"Home\", new { {\"id\", 1} });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String,System.String)\">\n            <summary>\n            Sets the action, controller and route values for the select operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Index\", \"Home\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route and values for the select operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Default\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String,System.Object)\">\n            <summary>\n            Sets the route and values for the select operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Default\", new {id=1});\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBindingSettingsBuilder.Select(System.String)\">\n            <summary>\n            Sets the route name for the select operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataBinding(dataBinding => \n                        {\n                            dataBinding.Ajax().Select(\"Default\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.TreeView\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.#ctor(Kendo.Mvc.UI.TreeView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.AutoBind(System.Boolean)\">\n            <summary>\n            Controls whether to bind the widget to the DataSource on initialization.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .AutoBind(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.CheckboxTemplate(System.String)\">\n            <summary>\n            Template to be used for rendering the item checkboxes in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .CheckboxTemplate(\"#= data #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.CheckboxTemplateId(System.String)\">\n            <summary>\n            Id of the template element to be used for rendering the item checkboxes in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .CheckboxTemplateId(\"widgetTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Template(System.String)\">\n            <summary>\n            Template to be used for rendering the items in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Template(\"#= data #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.TemplateId(System.String)\">\n            <summary>\n            Id of the template element to be used for rendering the items in the treeview.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .TemplateId(\"widgetTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Checkboxes(System.Boolean)\">\n            <summary>\n            Enable/disable rendering of checkboxes in the treeview.\n            </summary>\n            <param name=\"enabled\">Whether checkboxes should be rendered.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Checkboxes(System.Action{Kendo.Mvc.UI.Fluent.TreeViewCheckboxesBuilder})\">\n            <summary>\n            Configures rendering of checkboxes in the treeview.\n            </summary>\n            <param name=\"configure\">Builder of the treeview checkboxes configuration.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(config => config\n                            .CheckChildren(true)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.TreeViewItemFactory})\">\n            <summary>\n            Defines the items in the TreeView\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.TreeViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Events(events =>\n                            .OnDataBinding(\"onDataBinding\")\n                            .OnItemDataBound(\"onItemDataBound\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.BindTo(System.String,System.Action{Kendo.Mvc.UI.TreeViewItem,Kendo.Mvc.SiteMapNode})\">\n            <summary>\n            Binds the TreeView to a sitemap\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <param name=\"siteMapAction\">The action to configure the item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .BindTo(\"examples\", (item, siteMapNode) =>\n                        {\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.BindTo(System.String)\">\n            <summary>\n            Binds the TreeView to a sitemap.\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .BindTo(\"examples\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.BindTo(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.TreeViewItemModel})\">\n            <summary>\n            Binds the TreeView to a list of items.\n            Use if a hierarchy of items is being sent from the controller; to bind the TreeView declaratively, use the Items() method.\n            </summary>\n            <param name=\"items\">The list of items</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .BindTo(model)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.BindTo``1(System.Collections.Generic.IEnumerable{``0},System.Action{Kendo.Mvc.UI.TreeViewItem,``0})\">\n            <summary>\n            Binds the TreeView to a list of objects. The TreeView will be \"flat\" which means a TreeView item will be created for\n            every item in the data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"itemDataBound\">The action executed for every data bound item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .BindTo(new []{\"First\", \"Second\"}, (item, value) =>\n                        {\n                           item.Text = value;\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.BindTo(System.Collections.IEnumerable,System.Action{Kendo.Mvc.UI.Fluent.NavigationBindingFactory{Kendo.Mvc.UI.TreeViewItem}})\">\n            <summary>\n            Binds the TreeView to a list of objects. The TreeView will create a hierarchy of items using the specified mappings.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"factoryAction\">The action which will configure the mappings</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .BindTo(Model, mapping => mapping\n                                .For&lt;Customer&gt;(binding => binding\n                                    .Children(c => c.Orders) // The \"child\" items will be bound to the the \"Orders\" property\n                                    .ItemDataBound((item, c) => item.Text = c.ContactName) // Map \"Customer\" properties to TreeViewItem properties\n                                )\n                                .For&lt;Order&lt;(binding => binding\n                                    .Children(o => null) // \"Orders\" do not have child objects so return \"null\"\n                                    .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map \"Order\" properties to TreeViewItem properties\n                                )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.ItemAction(System.Action{Kendo.Mvc.UI.TreeViewItem})\">\n            <summary>\n            Callback for each item.\n            </summary>\n            <param name=\"action\">Action, which will be executed for each item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .ItemAction(item =>\n                        {\n                            item\n                                .Text(...)\n                                .HtmlAttributes(...);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.HighlightPath(System.Boolean)\">\n            <summary>\n            Select item depending on the current URL.\n            </summary>\n            <param name=\"value\">If true the item will be highlighted.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .HighlightPath(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Animation(System.Boolean)\">\n            <summary>\n            Use to enable or disable animation of the TreeView.\n            </summary>\n            <param name=\"enable\">The boolean value.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Animation(false) //toggle effect\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.ExpandableAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the widget.\n            </summary>\n            <param name=\"animationAction\">The action which configures the animation effects.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Animation(animation =>\n                       {\n            \t            animation.Expand(open =>\n            \t            {\n            \t                open.SlideIn(SlideDirection.Down);\n            \t            });\n                       })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.ExpandAll(System.Boolean)\">\n            <summary>\n            Expand all the items.\n            </summary>\n            <param name=\"value\">If true all the items will be expanded.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .ExpandAll(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DragAndDrop(System.Boolean)\">\n            <summary>\n            Enables drag &amp; drop between treeview nodes.\n            </summary>\n            <param name=\"value\">If true, drag &amp; drop is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n                        .DragAndDrop(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.SecurityTrimming(System.Boolean)\">\n            <summary>\n            Enable/disable security trimming functionality of the component.\n            </summary>\n            <param name=\"value\">If true security trimming is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .SecurityTrimming(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.SecurityTrimming(System.Action{Kendo.Mvc.UI.SecurityTrimmingBuilder})\">\n            <summary>\n            Defines the security trimming functionality of the component\n            </summary>\n            <param name=\"securityTrimmingAction\">The securityTrimming action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .SecurityTrimming(builder =>\n                        {\n                            builder.Enabled(true).HideParent(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataTextField(System.String)\">\n            <summary>\n            Sets the name of the field that will supply the item text.\n            </summary>\n            <param name=\"field\">The field name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataTextField(\"Name\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataUrlField(System.String)\">\n            <summary>\n            Sets the name of the field that will supply the item URL.\n            </summary>\n            <param name=\"field\">The field name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataUrlField(\"LinksTo\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataSpriteCssClassField(System.String)\">\n            <summary>\n            Sets the name of the field that will supply the CSS class for the item sprite image.\n            </summary>\n            <param name=\"field\">The field name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataSpriteCssClassField(\"IconSprite\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataImageUrlField(System.String)\">\n            <summary>\n            Sets the name of the field that will supply the URL for the item image.\n            </summary>\n            <param name=\"field\">The field name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .DataImageUrlField(\"ImageURL\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataSource(System.Action{Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder})\">\n            <summary>\n            Configure the DataSource of the component\n            </summary>\n            <param name=\"configurator\">The action that configures the <see cref=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.DataSource(System.Action{Kendo.Mvc.UI.Fluent.HierarchicalDataSourceBuilder})\"/>.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                .Name(\"TreeView\")\n                .DataSource(dataSource =&gt; dataSource\n                    .Read(read =&gt; read\n                        .Action(\"Employees\", \"TreeView\")\n                    )\n                )\n             %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewBuilder.LoadOnDemand(System.Boolean)\">\n            <summary>\n            Allows the treeview to fetch the entire datasource at initialization time.\n            </summary>\n            <param name=\"field\">Whether the datasource should be loaded on demand.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .LoadOnDemand(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the events of the Kendo TreeView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Collapse(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the collapse client-side event\n            </summary>\n            <param name=\"onCollapseAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Collapse(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Collapse(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the collapse client-side event.\n            </summary>\n            <param name=\"onCollapseHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Collapse(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the dataBound client-side event\n            </summary>\n            <param name=\"onDataBoundAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.DataBound(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the dataBound client-side event.\n            </summary>\n            <param name=\"onDataBoundHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.DataBound(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Drag(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the drag client-side event\n            </summary>\n            <param name=\"onDragAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Drag(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Drag(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the drag client-side event.\n            </summary>\n            <param name=\"onDragHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Drag(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DragEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the dragend client-side event\n            </summary>\n            <param name=\"onDragEndAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.DragEnd(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DragEnd(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the dragend client-side event.\n            </summary>\n            <param name=\"onDragEndHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.DragEnd(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DragStart(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the dragstart client-side event\n            </summary>\n            <param name=\"onDragStartAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.DragStart(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.DragStart(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the dragstart client-side event.\n            </summary>\n            <param name=\"onDragStartHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.DragStart(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Drop(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the drop client-side event\n            </summary>\n            <param name=\"onDropAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Drop(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Drop(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the drop client-side event.\n            </summary>\n            <param name=\"onDropHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Drop(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Expand(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the expand client-side event\n            </summary>\n            <param name=\"onExpandAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Expand(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Expand(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the expand client-side event.\n            </summary>\n            <param name=\"onExpandHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Expand(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the select client-side event\n            </summary>\n            <param name=\"onSelectAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Select(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Select(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the select client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Select(\"onExpand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the change client-side event\n            </summary>\n            <param name=\"onChangeAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().TreeView()\n                      .Name(\"TreeView\")\n                      .Events(events => events.Change(\n                           @&lt;text&gt;\n                           function(e) {\n                               // event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n                      .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewEventBuilder.Change(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the change client-side event.\n            </summary>\n            <param name=\"onChangeHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TreeView()\n                       .Name(\"TreeView\")\n                       .Events(events => events.Change(\"onChange\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child TreeView items.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2\">\n            <summary>\n            Defines the fluent interface for configuring navigation items\n            </summary>\n            <typeparam name=\"TItem\">The type of the item.</typeparam>\n            <typeparam name=\"TBuilder\">The type of the builder.</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.#ctor(Kendo.Mvc.UI.NavigationItem{`0},System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ToItem\">\n            <summary>\n            Returns the inner navigation item\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes applied to the outer HTML element rendered for the item\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Attributes(new {@class=\"first-item\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes applied to the outer HTML element rendered for the item\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Text(System.String)\">\n            <summary>\n            Sets the text displayed by the item.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Visible(System.Boolean)\">\n            <summary>\n            Makes the item visible or not. Invisible items are not rendered in the output HTML.\n            </summary>\n            <summary>\n            Sets the text displayed by the item.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Visible((bool)ViewData[\"visible\"]))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables the item. Disabled item cannot be clicked, expanded or open (depending on the item type - menu, tabstrip, panelbar).\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Enabled((bool)ViewData[\"enabled\"]))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Selected(System.Boolean)\">\n            <summary>\n            Selects or unselects the item. By default items are not selected.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Selected(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Route(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route to which the item should navigate.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Route(\"Default\", new RouteValueDictionary{{\"id\", 1}}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Route(System.String,System.Object)\">\n            <summary>\n            Sets the route to which the item should navigate.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Route(\"Default\", new {id, 1}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Route(System.String)\">\n            <summary>\n            Sets the route to which the item should navigate.\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").Route(\"Default\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Action(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action to which the item should navigate\n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"Index\").Action(MVC.Home.Index(3).GetRouteValueDictionary()))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action to which the item should navigate\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"Index\").Action(\"Index\", \"Home\", new RouteValueDictionary{{\"id\", 1}}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Action(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action to which the item should navigate\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"Index\").Action(\"Index\", \"Home\", new {id, 1}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Action(System.String,System.String)\">\n            <summary>\n            Sets the action to which the item should navigate\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"Index\").Action(\"Index\", \"Home\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Url(System.String)\">\n            <summary>\n            Sets the URL to which the item should navigate\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"www.example.com\").Url(\"http://www.example.com\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ImageUrl(System.String)\">\n            <summary>\n            Sets the URL of the image that should be displayed by the item.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"First Item\").ImageUrl(\"~/Content/first.png\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ImageHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes for the item image.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items\n                               .Add().Text(\"First Item\")\n                               .ImageUrl(\"~/Content/first.png\")\n                               .ImageHtmlAttributes(new {@class=\"first-item-image\"}))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ImageHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes for the item image.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.SpriteCssClasses(System.String[])\">\n            <summary>\n            Sets the sprite CSS class names.\n            </summary>\n            <param name=\"cssClasses\">The CSS classes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items\n                               .Add().Text(\"First Item\")\n                               .SpriteCssClasses(\"icon\", \"first-item\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the item should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Items(items => items\n                                .Add()\n                                .Text(\"First Item\")\n                                .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; First Item Content&lt;/strong&gt;\n                                    &lt;%\n                                }))\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the item should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().Menu()\n                  .Name(\"Menu\")\n                  .Items(items => items\n                           .Add()\n                           .Text(\"First Item\")\n                           .Content(\n                                @&lt;text&gt;\n                                        Some text\n                                        &lt;strong&gt; First Item Content&lt;/strong&gt;\n                                &lt;/text&gt;\n                           );\n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the item should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Items(items => items\n                                .Add()\n                                .Text(\"First Item\")\n                                .Content(\"&lt;strong&gt; First Item Content&lt;/strong&gt;\");\n                             )\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ContentHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes of the content element of the item.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items\n                               .Add().Text(\"First Item\")\n                               .Content(() => { %&gt; &lt;strong&gt;First Item Content&lt;/strong&gt; &lt;% })\n                               .ContentHtmlAttributes(new {@class=\"first-item-content\"})\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.ContentHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes of the content element of the item.\n            </summary>\n            <param name=\"attributes\">The attributes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Action``1(System.Linq.Expressions.Expression{System.Action{``0}})\">\n             <summary>\n             Makes the item navigate to the specified controllerAction method.\n             </summary>\n             <typeparam name=\"TController\">The type of the controller.</typeparam>\n             <param name=\"controllerAction\">The action.</param>\n             <example>\n             <code lang=\"CS\">\n              &lt;%= Html.Kendo().Menu()\n                         .Name(\"Menu\")\n                         .Items(items => items\n                                .Add().Text(\"First Item\")\n                                .Action&lt;HomeController&gt;(controller => controller.Index()))\n            \n             %&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.NavigationItemBuilder`2.Encoded(System.Boolean)\">\n            <summary>\n            Sets whether the Text property should be encoded when the item is rendered.\n            </summary>\n            <param name=\"isEncoded\">Whether the property should be encoded. Default: true.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items => items.Add().Text(\"&lt;strong&gt;First Item&lt;/strong&gt;\").Encoded(false))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.#ctor(Kendo.Mvc.UI.TreeViewItem,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.TreeViewItemFactory})\">\n            <summary>\n            Configures the child items of a <see cref=\"T:Kendo.Mvc.UI.TreeViewItem\"/>.\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren =&gt; \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.Id(System.String)\">\n            <summary>\n            Sets the id of the item.\n            </summary>\n            <param name=\"value\">The id.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items => items.Add().Id(\"42\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.Expanded(System.Boolean)\">\n            <summary>\n            Define when the item will be expanded on intial render.\n            </summary>\n            <param name=\"value\">If true the item will be expanded.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren => \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            })\n                            .Expanded(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.Checked(System.Boolean)\">\n            <summary>\n            Specify whether the item should be initially checked.\n            </summary>\n            <param name=\"value\">If true, the item will be checked.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().TreeView()\n                        .Name(\"TreeView\")\n                        .Checkboxes(true)\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"Item\").Checked(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemBuilder.HasChildren(System.Boolean)\">\n            <summary>\n            Sets the expand mode of the treeview item.\n            </summary>\n            <param name=\"value\">If true then item will be loaded on demand from client side, if the treeview DataSource is properly configured.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Telerik().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren => \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            })\n                            .HasChildren(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TreeViewItemFactory\">\n            <summary>\n            Creates items for the <see cref=\"T:Kendo.Mvc.UI.TreeView\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemFactory.#ctor(Kendo.Mvc.UI.INavigationItemContainer{Kendo.Mvc.UI.TreeViewItem},System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TreeViewItemFactory\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TreeViewItemFactory.Add\">\n            <summary>\n            Defines a item.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.TreeViewItemModel\">\n            <summary>\n            Used for serializing <see cref=\"T:Kendo.Mvc.UI.TreeViewItem\"/> objects.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.TreeView.Items\">\n            <summary>\n            Gets the items of the treeview.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.TreeView.ItemAction\">\n            <summary>\n            Gets or sets the item action.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.TreeView.Effects\">\n            <summary>\n            Gets or sets the effects.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.TreeView.ExpandAll\">\n            <summary>\n            Gets or sets a value indicating whether all the item is expanded.\n            </summary>\n            <value><c>true</c> if expand all is enabled; otherwise, <c>false</c>. The default value is <c>false</c></value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.TreeViewItem\">\n            <summary>\n            Represents an item from Kendo TreeView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IContentContainer.ContentHtmlAttributes\">\n            <summary>\n            The HtmlAttributes which will be added to the wrapper of the content.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IContentContainer.Content\">\n            <summary>\n            The action which will output the content.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.DatePickerBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.DatePicker\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.#ctor(Kendo.Mvc.UI.DatePicker)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.DatePickerBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.ARIATemplate(System.String)\">\n            <summary>\n            Specifies a template used to populate aria-label attribute.\n            </summary>\n            <param name=\"template\">The string template.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .ARIATemplate(\"Date: #=kendo.toString(data.current, 'd')#\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.BindTo(System.Collections.Generic.List{System.DateTime})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.FooterId(System.String)\">\n            <summary>\n            FooterId to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .FooterId(\"widgetFooterId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Footer(System.String)\">\n            <summary>\n            Footer template to be used for rendering the footer of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Footer(\"#= kendo.toString(data, \"G\") #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Footer(System.Boolean)\">\n            <summary>\n            Enables/disables footer of the calendar popup.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Footer(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Depth(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the navigation depth.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Depth(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Start(Kendo.Mvc.UI.CalendarView)\">\n            <summary>\n            Specifies the start view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .Start(CalendarView.Month)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.MonthTemplateId(System.String)\">\n            <summary>\n            MonthTemplateId to be used for rendering the cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .MonthTemplateId(\"widgetMonthTemplateId\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.MonthTemplate(System.String)\">\n            <summary>\n            Templates for the cells rendered in the \"month\" view.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .MonthTemplate(\"#= data.value #\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.MonthTemplate(System.Action{Kendo.Mvc.UI.Fluent.MonthTemplateBuilder})\">\n            <summary>\n            Configures the content of cells of the Calendar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n                        .MonthTemplate(month => month.Content(\"#= data.value #\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Min(System.String)\">\n            <summary>\n            Sets the minimal date, which can be selected in DatePicker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.DatePickerBuilder.Max(System.String)\">\n            <summary>\n            Sets the maximal date, which can be selected in DatePicker.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ContentNavigationItemBuilder`2.LoadContentFrom(System.Web.Routing.RouteValueDictionary)\">\n             <summary>\n             Sets the Url, which will be requested to return the content. \n             </summary>\n             <param name=\"routeValues\">The route values of the Action method.</param>\n             <example>\n             <code lang=\"CS\">\n              &lt;%= Html.Kendo().PanelBar()\n                     .Name(\"PanelBar\")\n                     .Items(parent => {\n            \n                          parent.Add()\n                                .LoadContentFrom(MVC.Home.Index().GetRouteValueDictionary());\n                      })\n             %&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ContentNavigationItemBuilder`2.LoadContentFrom(System.String,System.String)\">\n             <summary>\n             Sets the Url, which will be requested to return the content. \n             </summary>\n             <param name=\"actionName\">The action name.</param>\n             <param name=\"controllerName\">The controller name.</param>\n             <example>\n             <code lang=\"CS\">\n              &lt;%= Html.Kendo().PanelBar()\n                     .Name(\"PanelBar\")\n                     .Items(parent => {\n            \n                          parent.Add()\n                                .Text(\"Completely Open Source\")\n                                .LoadContentFrom(\"AjaxView_OpenSource\", \"PanelBar\");\n                      })\n             %&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ContentNavigationItemBuilder`2.LoadContentFrom(System.String,System.String,System.Object)\">\n             <summary>\n             Sets the Url, which will be requested to return the content.\n             </summary>\n             <param name=\"actionName\">The action name.</param>\n             <param name=\"controllerName\">The controller name.</param>\n             <param name=\"routeValues\">Route values.</param>\n             <example>\n             <code lang=\"CS\">\n              &lt;%= Html.Kendo().PanelBar()\n                     .Name(\"PanelBar\")\n                     .Items(parent => {\n            \n                          parent.Add()\n                                .Text(\"Completely Open Source\")\n                                .LoadContentFrom(\"AjaxView_OpenSource\", \"PanelBar\", new { id = 10});\n                      })\n             %&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.ContentNavigationItemBuilder`2.LoadContentFrom(System.String)\">\n             <summary>\n             Sets the Url, which will be requested to return the content.\n             </summary>\n             <param name=\"value\">The url.</param>\n             <example>\n             <code lang=\"CS\">\n              &lt;%= Html.Kendo().PanelBar()\n                     .Name(\"PanelBar\")\n                     .Items(parent => {\n            \n                          parent.Add()\n                                .Text(\"Completely Open Source\")\n                                .LoadContentFrom(Url.Action(\"AjaxView_OpenSource\", \"PanelBar\"));\n                      })\n             %&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring bound columns\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.#ctor(Kendo.Mvc.UI.IGridBoundColumn)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1\"/> class.\n            </summary>\n            <param name=\"column\">The column.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Format(System.String)\">\n            <summary>\n            Gets or sets the format for displaying the data.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderDate).Format(\"{0:dd/MM/yyyy}\"))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.EditorViewData(System.Object)\">\n            <summary>\n            Provides additional view data in the editor template for that column (if any).\n            </summary>\n            <remarks>\n            The additional view data will be provided if the editing mode is set to in-line or in-cell. Otherwise\n            use <see cref=\"M:Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder`1.AdditionalViewData(System.Object)\"/> \n            </remarks>\n            <param name=\"additionalViewData\">An anonymous object which contains the additional data</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns =&gt; {\n                            columns.Bound(o =&gt; o.Customer).EditorViewData(new { customers = Model.Customers });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.EditorTemplateName(System.String)\">\n            <summary>\n            Specify which editor template should be used for the column\n            </summary>\n            <param name=\"templateName\">name of the editor template</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Sortable(System.Boolean)\">\n            <summary>\n            Enables or disables sorting the column. All bound columns are sortable by default.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderDate).Sortable(false))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Groupable(System.Boolean)\">\n            <summary>\n            Enables or disables grouping by that column. All bound columns are groupable by default.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderDate).Groupable(false))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Filterable(System.Boolean)\">\n            <summary>\n            Enables or disables filtering the column. All bound columns are filterable by default.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderDate).Filterable(false))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Encoded(System.Boolean)\">\n            <summary>\n            Enables or disables HTML encoding the data of the column. All bound columns are encoded by default.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Columns(columns => columns.Bound(o => o.OrderDate).Encoded(false))\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Template(System.Action{`0})\">\n            <summary>\n            Sets the template for the column.\n            </summary>\n            <param name=\"templateAction\">The action defining the template.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Grid(Model)\n                       .Name(\"Grid\")\n                       .Columns(columns => columns\n                                .Add(c => c.CustomerID)\n                                .Template(() => \n                                { \n                                    %&gt;\n                                     &gt;img \n                                        alt=\"&lt;%= c.CustomerID %&gt;\" \n                                        src=\"&lt;%= Url.Content(\"~/Content/Grid/Customers/\" + c.CustomerID + \".jpg\") %&gt;\" \n                                     /&gt;\n                                    &lt;% \n                                }).Title(\"Picture\");)\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.Template(System.Func{`0,System.Object})\">\n            <summary>\n            Sets the template for the column.\n            </summary>\n            <param name=\"inlineTemplate\">The action defining the template.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.ClientTemplate(System.String)\">\n            <summary>\n            Sets the client template for the column.\n            </summary>\n            <param name=\"value\">The template</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.ClientGroupHeaderTemplate(System.String)\">\n            <summary>\n            Sets the client group template for the column.\n            </summary>\n            <param name=\"value\">The template</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.ClientGroupFooterTemplate(System.String)\">\n            <summary>\n            Sets the client group footer template for the column.\n            </summary>\n            <param name=\"value\">The template</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.FooterTemplate(System.Action{Kendo.Mvc.UI.GridAggregateResult})\">\n            <summary>\n            Sets the footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.FooterTemplate(System.Func{Kendo.Mvc.UI.GridAggregateResult,System.Object})\">\n            <summary>\n            Sets the footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.GroupFooterTemplate(System.Action{Kendo.Mvc.UI.GridAggregateResult})\">\n            <summary>\n            Sets the group footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.GroupFooterTemplate(System.Func{Kendo.Mvc.UI.GridAggregateResult,System.Object})\">\n            <summary>\n            Sets the group footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.GroupHeaderTemplate(System.Action{Kendo.Mvc.UI.GridGroupAggregateResult})\">\n            <summary>\n            Sets the group footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder`1.GroupHeaderTemplate(System.Func{Kendo.Mvc.UI.GridGroupAggregateResult,System.Object})\">\n            <summary>\n            Sets the group footer template for the column.\n            </summary>\n            <param name=\"template\">The action defining the template.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Grid for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Change(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.Change(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Change(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Change client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.Change(\"gridChange\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Cancel(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Cancel client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.Cancel(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Cancel(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Cancel client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.Cancel(\"gridCancel\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Edit(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Edit client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.Edit(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Edit(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Edit client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.Edit(\"gridEdit\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Save(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Save client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.Save(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Save(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Save client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.Save(\"gridSave\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.SaveChanges(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the SaveChanges client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.SaveChanges(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.SaveChanges(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the SaveChanges client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.SaveChanges(\"gridSaveChanges\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailExpand(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailExpand client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.DetailExpand(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailExpand(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailExpand client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.DetailExpand(\"gridDetailExpand\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailInit(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailInit client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.DetailInit(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailInit(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailInit client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.DetailInit(\"gridDetailInit\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailCollapse(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailCollapse client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.DetailCollapse(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DetailCollapse(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DetailCollapse client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.DetailCollapse(\"gridDetailCollapse\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Remove(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Remove client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.Remove(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.Remove(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the Remove client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.Remove(\"gridRemove\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DataBound(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.DataBound(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DataBound(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBound client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.DataBound(\"gridDataBound\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DataBinding(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBinding client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.DataBinding(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.DataBinding(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the DataBinding client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.DataBinding(\"gridDataBinding\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnResize(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnResize client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.ColumnResize(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnResize(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnResize client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.ColumnResize(\"gridColumnResize\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnReorder(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnReorder client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.ColumnReorder(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnReorder(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnReorder client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.ColumnReorder(\"gridColumnReorder\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnHide(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnHide client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.ColumnHide(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnHide(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnHide client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.ColumnHide(\"gridColumnHide\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnShow(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnShow client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.ColumnShow(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnShow(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the the ColumnShow client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.ColumnShow(\"gridColumnShow\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnMenuInit(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the ColumnMenuInit client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.ColumnMenuInit(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.ColumnMenuInit(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the ColumnMenuInit client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.ColumnMenuInit(\"gridColumnMenuInit\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.FilterMenuInit(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the FilterMenuInit client-side event.\n            </summary>\n            <param name=\"handler\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                      .Name(\"Grid\")\n                      .Events(events => events.FilterMenuInit(\n                           @&lt;text&gt;\n                           function(e) {\n                               //event handling code\n                           }\n                           &lt;/text&gt;\n                      ))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridEventBuilder.FilterMenuInit(System.String)\">\n            <summary>\n            Defines the name of the JavaScript function that will handle the FilterMenuInit client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            @(Html.Kendo().Grid()\n                       .Name(\"Grid\")\n                       .Events(events => events.FilterMenuInit(\"gridFilterMenuInit\"))\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridCell`1\">\n            <summary>\n            Represents a cell from Kendo Grid for ASP.NET MVC\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridActionColumnBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridActionColumnBuilder\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionColumnBuilder.#ctor(Kendo.Mvc.UI.IGridColumn)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridActionColumnBuilder\"/> class.\n            </summary>\n            <param name=\"column\">The column.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1\">\n            <summary>\n            Creates command for the <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/>.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1.#ctor(Kendo.Mvc.UI.GridActionColumn{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1\"/> class.\n            </summary>\n            <param name=\"column\">The column.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1.Edit\">\n            <summary>\n            Defines a edit command.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1.Destroy\">\n            <summary>\n            Defines a delete command.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1.Select\">\n            <summary>\n            Defines a select command.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridActionCommandFactory`1.Custom(System.String)\">\n            <summary>\n            Defines a custom command.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Filterable\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridRow`1\">\n            <summary>\n            Represents a row from Kendo Grid for ASP.NET MVC\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Scrollable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder.#ctor(Kendo.Mvc.UI.GridScrollableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables scrolling.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Scrollable(s => s.Enabled((bool)ViewData[\"enableScrolling\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable scrolling based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the scrollable area in pixels.\n            </summary>\n            <param name=\"pixelHeight\">The height in pixels.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Scrollable(s => s.Height(400))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder.Height(System.String)\">\n            <summary>\n            Sets the height of the scrollable.\n            </summary>\n            <param name=\"value\">The height in pixels.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Scrollable(s => s.Height(\"20em\")) // use \"auto\" to remove the default height and make the Grid expand automatically\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridSelectionSettingsBuilder\">\n            <summary>\n             Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Selectable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSelectionSettingsBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables selection.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Selectable(selection => selection.Enabled((bool)ViewData[\"enableSelection\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable scrolling based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSelectionSettingsBuilder.Mode(Kendo.Mvc.UI.GridSelectionMode)\">\n            <summary>\n            Specifies whether multiple or single selection is allowed.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Selectable(selection => selection.Mode((bool)ViewData[\"selectionMode\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Mode method is useful to switch between different selection modes.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSelectionSettingsBuilder.Type(Kendo.Mvc.UI.GridSelectionType)\">\n            <summary>\n            Specifies whether row or cell selection is allowed.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Selectable(selection => selection.Type((bool)ViewData[\"selectionType\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Type method is useful to switch between different selection types.\n            </remarks>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"P:Kendo.Mvc.UI.Grid`1.Sortable\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1.#ctor(Kendo.Mvc.UI.GridSortableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1\"/> class.\n            </summary>\n            <param name=\"settings\">The settings.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables sorting.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Sorting(sorting => sorting.Enabled((bool)ViewData[\"enableSorting\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable sorting based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1.SortMode(Kendo.Mvc.UI.GridSortMode)\">\n            <summary>\n            Sets the sort mode of the grid.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Sorting(sorting => sorting.SortMode(GridSortMode.MultipleColumns))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder`1.AllowUnsort(System.Boolean)\">\n            <summary>\n            Enables or disables unsorted mode.\n            </summary>\n            <param name=\"value\">The value.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Sorting(sorting => sorting.AllowUnsort(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.AnimationDuration\">\n            <summary>\n            Specifies the animation duration of item.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.AnimationDuration.Fast\">\n            <summary>\n            Fast animation, duration is set to 200.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.AnimationDuration.Normal\">\n            <summary>\n            Normal animation, duration is set to 400.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.AnimationDuration.Slow\">\n            <summary>\n            Slow animation, duration is set to 600.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.GridSortMode\">\n            <summary>\n            Defines the sort modes supported by Kendo UI Grid for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GridSortMode.SingleColumn\">\n            <summary>\n            The user can sort only by one column at the same time.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.GridSortMode.MultipleColumn\">\n            <summary>\n            The user can sort by more than one column at the same time.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Grid`1\">\n            <summary>\n            The server side wrapper for Kendo UI Grid\n            </summary>\n            <typeparam name=\"T\"></typeparam>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Selectable\">\n            <summary>\n            Gets the selection configuration\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.RowTemplate\">\n            <summary>\n            Gets the template which the grid will use to render a row\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Filterable\">\n            <summary>\n            Gets the filtering configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.ColumnMenu\">\n            <summary>\n            Gets the column menu configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Scrollable\">\n            <summary>\n            Gets the scrolling configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Navigatable\">\n            <summary>\n            Gets the keyboard navigation configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.EnableCustomBinding\">\n            <summary>\n            Gets or sets a value indicating whether custom binding is enabled.\n            </summary>\n            <value><c>true</c> if custom binding is enabled; otherwise, <c>false</c>. The default value is <c>false</c></value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Pageable\">\n            <summary>\n            Gets the paging configuration.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Columns\">\n            <summary>\n            Gets the columns of the grid.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.PageSize\">\n            <summary>\n            Gets the page size of the grid.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.Sortable\">\n            <summary>\n            Gets the sorting configuration.\n            </summary>\n            <value>The sorting.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.PrefixUrlParameters\">\n            <summary>\n            Gets or sets a value indicating whether to add the <see cref=\"P:Kendo.Mvc.UI.WidgetBase.Name\"/> property of the grid as a prefix in url parameters.\n            </summary>\n            <value><c>true</c> if prefixing is enabled; otherwise, <c>false</c>. The default value is <c>true</c></value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.RowAction\">\n            <summary>\n            Gets or sets the action executed when rendering a row.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Grid`1.CellAction\">\n            <summary>\n            Gets or sets the action executed when rendering a cell.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridBuilder`1\">\n            <summary>\n            The fluent API for configuring Kendo UI Grid for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.#ctor(Kendo.Mvc.UI.Grid{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.DataSourceBuilder{`0}})\">\n            <summary>\n            Sets the data source configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the data source</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.DetailTemplate(System.Action{`0})\">\n            <summary>\n            Sets the server-side detail template of the grid in ASPX views.\n            </summary>\n            <param name=\"codeBlockTemplate\">The template as a code block</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Product&gt;&gt;&quot; %&gt;\n            &lt;% Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .DetailTemplate(product =&gt; {\n                    %&gt;\n                       Product Details:\n                       &lt;div&gt;Product Name: &lt;%: product.ProductName %&gt;&lt;/div&gt;\n                       &lt;div&gt;Units In Stock: &lt;%: product.UnitsInStock %&gt;&lt;/div&gt;\n                    &lt;%\n                })\n                .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.DetailTemplate(System.Func{`0,System.Object})\">\n            <summary>\n            Sets the server-side detail template of the grid in Razor views.\n            </summary>\n            <param name=\"inlineTemplate\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .DetailTemplate(@&lt;text&gt;\n                   Product Details:\n                   &lt;div&gt;Product Name: @product.ProductName&lt;/div&gt;\n                   &lt;div&gt;Units In Stock: @product.UnitsInStock&lt;/div&gt;\n                &lt;/text&gt;)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ClientDetailTemplateId(System.String)\">\n            <summary>\n            Sets the id of the script element which contains the client-side detail template of the grid.\n            </summary>\n            <param name=\"id\">The id</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientDetailTemplateId(&quot;detail-template&quot;)\n            )\n            &lt;script id=&quot;detail-template&quot; type=&quot;text/x-kendo-template&quot;&gt;\n                Product Details:\n                &lt;div&gt;Product Name: #: ProductName # &lt;/div&gt;\n                &lt;div&gt;Units In Stock: #: UnitsInStock #&lt;/div&gt;\n            &lt;/script&gt;\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientDetailTemplateId(&quot;detail-template&quot;)\n            %&gt;\n            &lt;script id=&quot;detail-template&quot; type=&quot;text/x-kendo-template&quot;&gt;\n                Product Details:\n                &lt;div&gt;Product Name: #: ProductName # &lt;/div&gt;\n                &lt;div&gt;Units In Stock: #: UnitsInStock #&lt;/div&gt;\n            &lt;/script&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.RowTemplate(System.Action{`0,Kendo.Mvc.UI.Grid{`0}})\">\n            <summary>\n            Sets the server-side row template of the grid in ASPX views.\n            </summary>\n            <param name=\"codeBlockTemplate\">The template as a code block</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Product&gt;&gt;&quot; %&gt;\n             &lt;%: Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowTemplate((product, grid) =&gt;\n                {\n                    %&gt;\n                        &lt;div&gt;Product Name: &lt;%: product.ProductName %&gt;&lt;/div&gt;\n                        &lt;div&gt;Units In Stock: &lt;%: product.UnitsInStock %&gt;&lt;/div&gt;\n                    &lt;%\n                })\n             %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.RowTemplate(System.Action{`0})\">\n            <summary>\n            Sets the server-side row template of the grid in ASPX views.\n            </summary>\n            <param name=\"codeBlockTemplate\">The template as a code block</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Product&gt;&gt;&quot; %&gt;\n             &lt;%: Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowTemplate(product =&gt;\n                {\n                    %&gt;\n                        &lt;div&gt;Product Name: &lt;%: product.ProductName %&gt;&lt;/div&gt;\n                        &lt;div&gt;Units In Stock: &lt;%: product.UnitsInStock %&gt;&lt;/div&gt;\n                    &lt;%\n                })\n             %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.RowTemplate(System.Func{`0,System.Object})\">\n            <summary>\n            Sets the server-side row template of the grid in Razor views.\n            </summary>\n            <param name=\"inlineTemplate\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowTemplate(@&lt;text&gt;\n                   &lt;div&gt;Product Name: @product.ProductName&lt;/div&gt;\n                   &lt;div&gt;Units In Stock: @product.UnitsInStock&lt;/div&gt;\n                &lt;/text&gt;)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.RowTemplate(System.Func{Kendo.Mvc.UI.Grid{`0},System.Func{`0,System.Object}})\">\n            <summary>\n            Sets the server-side row template of the grid in Razor views.\n            </summary>\n            <param name=\"inlineTemplate\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowTemplate(grid => @&lt;text&gt;\n                   &lt;div&gt;Product Name: @product.ProductName&lt;/div&gt;\n                   &lt;div&gt;Units In Stock: @product.UnitsInStock&lt;/div&gt;\n                &lt;/text&gt;)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ClientRowTemplate(System.String)\">\n            <summary>\n            Sets the client-side row template of the grid. The client-side row template must contain a table row element (tr).\n            </summary>\n            <param name=\"template\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientRowTemplate(\n                &quot;&lt;tr&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientRowTemplate(\n                &quot;&lt;tr&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ClientAltRowTemplate(System.String)\">\n            <summary>\n            Sets the client-side alt row template of the grid. The client-side alt row template must contain a table row element (tr).\n            </summary>\n            <param name=\"template\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientAltRowTemplate(\n                &quot;&lt;tr class='k-alt'&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientAltRowTemplate(\n                &quot;&lt;tr class='k-alt'&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ClientRowTemplate(System.Func{Kendo.Mvc.UI.Grid{`0},System.String})\">\n            <summary>\n            Sets the client-side row template of the grid. The client-side row template must contain a table row element (tr).\n            </summary>\n            <param name=\"template\">The template</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientRowTemplate(grid =&gt;\n                &quot;&lt;tr&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n                .ClientRowTemplate(grid =&gt;\n                &quot;&lt;tr&gt;&quot; +\n                    &quot;&lt;td&gt;#: ProductName #&lt;/td&gt;&quot; +\n                    &quot;&lt;td&gt;#: UnitsInStock #&lt;/td&gt;&quot; +\n                &quot;&lt;/tr&gt;&quot;\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            If set to <c>false</c> the widget will not bind to the data source during initialization; the default value is <c>true</c>.\n            Setting AutoBind to <c>false</c> is supported in ajax-bound mode.\n            </summary>\n            <param name=\"value\">If true the grid will be automatically data bound, otherwise false</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .AutoBind(false)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .AutoBind(false)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Resizable(System.Action{Kendo.Mvc.UI.Fluent.GridResizingSettingsBuilder})\">\n            <summary>\n            Sets the resizing configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the resizing</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Resizable(resizing => resizing.Columns(true))\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Resizable(resizing => resizing.Columns(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ColumnResizeHandleWidth(System.Int32)\">\n            <summary>\n            Sets the width of the column resize handle. Apply a larger value for easier grasping.\n            </summary>\n            <param name=\"width\">width in pixels</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .ColumnResizeHandleWidth(8)\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .ColumnResizeHandleWidth(8)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Reorderable(System.Action{Kendo.Mvc.UI.Fluent.GridReorderingSettingsBuilder})\">\n            <summary>\n            Sets the reordering configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the reordering</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Reorderable(reordering => reordering.Columns(true))\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Reorderable(reordering => reordering.Columns(true))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Editable(System.Action{Kendo.Mvc.UI.Fluent.GridEditingSettingsBuilder{`0}})\">\n            <summary>\n            Sets the editing configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the editing</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Editable(editing => editing.Mode(GridEditMode.PopUp))\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Editable(editing => editing.Mode(GridEditMode.PopUp))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Editable\">\n            <summary>\n            Enables grid editing.\n            </summary>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Editable()\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .Editable()\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ToolBar(System.Action{Kendo.Mvc.UI.Fluent.GridToolBarCommandFactory{`0}})\">\n            <summary>\n            Sets the toolbar configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures the toolbar</param>\n            <example>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .ToolBar(commands => commands.Create())\n            )\n            </code>\n            <code lang=\"ASPX\">\n             &lt;%= Html.Kendo().Grid&lt;Product&gt;()\n                .Name(\"Grid\")\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                     .Ajax()\n                     .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n               .ToolBar(commands => commands.Create())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.BindTo(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Binds the grid to a list of objects\n            </summary>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Product&gt;&gt;&quot; %&gt;\n            &amp;lt;%: Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .BindTo(Model)\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.BindTo(System.Collections.IEnumerable)\">\n            <summary>\n            Binds the grid to a list of objects\n            </summary>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&gt;&quot; %&gt;\n            &amp;lt;%: Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .BindTo(Model)\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable;\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .BindTo(Model)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.RowAction(System.Action{Kendo.Mvc.UI.GridRow{`0}})\">\n            <summary>\n            Sets a lambda which is executed for every table row rendered server-side by the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which will be executed for every table row</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&gt;&quot; %&gt;\n            &amp;lt;%: Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowAction(row =&gt;\n                {\n                    // &quot;DataItem&quot; is the Product instance to which the current row is bound\n                    if (row.DataItem.UnitsInStock &gt; 10)\n                    {\n                        //Set the background of the entire row\n                        row.HtmlAttributes[&quot;style&quot;] = &quot;background:red;&quot;;\n                    }\n                });\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .RowAction(row =&gt;\n                {\n                    // &quot;DataItem&quot; is the Product instance to which the current row is bound\n                    if (row.DataItem.UnitsInStock &gt; 10)\n                    {\n                        //Set the background of the entire row\n                        row.HtmlAttributes[&quot;style&quot;] = &quot;background:red;&quot;;\n                    }\n                });\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.CellAction(System.Action{Kendo.Mvc.UI.GridCell{`0}})\">\n            <summary>\n            Sets a lambda which is executed for every table cell rendered server-side by the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which will be executed for every table cell</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&gt;&quot; %&gt;\n            &amp;lt;%: Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .CellAction(cell =&gt;\n                {\n                   if (cell.Column.Name == &quot;UnitsInStock&quot;)\n                   {\n                       if (cell.DataItem.UnitsInStock &gt; 10)\n                       {\n                           //Set the background of this cell only\n                           cell.HtmlAttributes[&quot;style&quot;] = &quot;background:red;&quot;;\n                       }\n                   }\n                })\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .CellAction(cell =&gt;\n                {\n                   if (cell.Column.Name == &quot;UnitsInStock&quot;)\n                   {\n                       if (cell.DataItem.UnitsInStock &gt; 10)\n                       {\n                           //Set the background of this cell only\n                           cell.HtmlAttributes[&quot;style&quot;] = &quot;background:red;&quot;;\n                       }\n                   }\n                })\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.EnableCustomBinding(System.Boolean)\">\n            <summary>\n            If set to <c>true</c> the grid will perform custom binding.\n            </summary>\n            <param name=\"value\">If true enables custom binding.</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .EnableCustomBinding(true)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .EnableCustomBinding(true)\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Columns(System.Action{Kendo.Mvc.UI.Fluent.GridColumnFactory{`0}})\">\n            <summary>\n            Sets the column configuration of the grid.\n            </summary>\n            <param name=\"configurator\">The lambda which configures columns</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .Columns(columns =&gt;\n                {\n                    columns.Bound(product =&gt; product.ProductName).Title(&quot;Product Name&quot;);\n                    columns.Command(command =&gt; command.Destroy());\n                })\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Destroy(destroy =&gt; destroy.Action(&quot;Products_Destroy&quot;, &quot;Home&quot;))\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Grid&lt;Product&gt;()\n                .Name(&quot;grid&quot;)\n                .Columns(columns =&gt;\n                {\n                    columns.Bound(product =&gt; product.ProductName).Title(&quot;Product Name&quot;);\n                    columns.Command(command =&gt; command.Destroy());\n                })\n                .DataSource(dataSource =&gt;\n                    // configure the data source\n                    dataSource\n                        .Ajax()\n                        .Destroy(destroy =&gt; destroy.Action(&quot;Products_Destroy&quot;, &quot;Home&quot;))\n                        .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Sortable\">\n             <summary>\n             Enables grid column sorting.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Sortable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Sortable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Sortable(System.Action{Kendo.Mvc.UI.Fluent.GridSortSettingsBuilder{`0}})\">\n             <summary>\n             Sets the sorting configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the sorting</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Sortable(sorting =&gt; sorting.SortMode(GridSortMode.MultipleColumn))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Sortable(sorting =&gt; sorting.SortMode(GridSortMode.MultipleColumn))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Selectable\">\n             <summary>\n             Enables grid row selection.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Selectable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Selectable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Selectable(System.Action{Kendo.Mvc.UI.Fluent.GridSelectionSettingsBuilder})\">\n             <summary>\n             Sets the selection configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the selection</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Selectable(selection =&gt; selection.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Selectable(selection =&gt; selection.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.PrefixUrlParameters(System.Boolean)\">\n            <summary>\n            If set to <c>true</c> the grid will prefix the query string parameters with its name during server binding.\n            By default the grid will prefix the query string parameters.\n            </summary>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%@Page Inherits=&quot;System.Web.Mvc.ViewPage&lt;IEnumerable&lt;Product&gt;&gt;&quot; %&gt;\n            &lt;%: Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .PrefixUrlParameters(false)\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @model IEnumerable&lt;Product&gt;\n            @(Html.Kendo().Grid(Model)\n                .Name(&quot;grid&quot;)\n                .PrefixUrlParameters(false)\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Pageable\">\n             <summary>\n             Enables grid paging.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Pageable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Pageable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Pageable(System.Action{Kendo.Mvc.UI.Fluent.PageableBuilder})\">\n             <summary>\n             Sets the paging configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the paging</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Pageable(paging =>\n                     paging.Refresh(true)\n                 )\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Pageable(paging =>\n                     paging.Refresh(true)\n                 )\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Filterable\">\n             <summary>\n             Enables grid filtering.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Filterable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Filterable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Filterable(System.Action{Kendo.Mvc.UI.Fluent.GridFilterableSettingsBuilder})\">\n             <summary>\n             Sets the filtering configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the filtering</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Filterable(filtering =&gt; filtering.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Filterable(filtering =&gt; filtering.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ColumnMenu\">\n             <summary>\n             Enables the grid column menu.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .ColumnMenu()\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .ColumnMenu()\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.ColumnMenu(System.Action{Kendo.Mvc.UI.Fluent.GridColumnMenuSettingsBuilder})\">\n             <summary>\n             Sets the column menu configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the column menu</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .ColumnMenu(columnMenu =&gt; columnMenu.Enabled(true))\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .ColumnMenu(columnMenu =&gt; columnMenu.Enabled(true))\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Scrollable\">\n             <summary>\n             Enables grid scrolling.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Scrollable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Scrollable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Scrollable(System.Action{Kendo.Mvc.UI.Fluent.GridScrollSettingsBuilder})\">\n             <summary>\n             Sets the scrolling configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the scrolling</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Scrollable(scrolling =&gt; scrolling.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Scrollable(scrolling =&gt; scrolling.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Navigatable\">\n             <summary>\n             Enables grid keyboard navigation.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Navigatable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Navigatable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Navigatable(System.Action{Kendo.Mvc.UI.Fluent.GridNavigatableSettingsBuilder})\">\n             <summary>\n             Sets the keyboard navigation configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the keyboard navigation</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Navigatable(navigation =&gt; navigation.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Navigatable(navigation =&gt; navigation.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.GridEventBuilder})\">\n             <summary>\n             Sets the event configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the events</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .Events(events =&gt; events.DataBound(&quot;grid_dataBound&quot;))\n             %&gt;\n             &lt;script&gt;\n             function grid_dataBound(e) {\n                 // handle the dataBound event\n             }\n             &lt;/script&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n                 .Events(events =&gt; events.DataBound(&quot;grid_dataBound&quot;))\n             )\n             &lt;script&gt;\n             function grid_dataBound(e) {\n                 // handle the dataBound event\n             }\n             &lt;/script&gt;\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Groupable(System.Action{Kendo.Mvc.UI.Fluent.GridGroupingSettingsBuilder})\">\n             <summary>\n             Sets the grouping configuration of the grid.\n             </summary>\n             <param name=\"configurator\">The lambda which configures the grouping</param>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Groupable(grouping =&gt; grouping.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Groupable(grouping =&gt; grouping.Enabled(true))\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Groupable\">\n             <summary>\n             Enables grid grouping.\n             </summary>\n             <example>\n             <code lang=\"ASPX\">\n             &lt;%:Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Groupable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             %&gt;\n             </code>\n            <code lang=\"Razor\">\n             @(Html.Kendo().Grid&lt;Product&gt;()\n                 .Name(&quot;grid&quot;)\n                 .Groupable()\n                 .DataSource(dataSource =&gt;\n                     // configure the data source\n                     dataSource\n                         .Ajax()\n                         .Read(read =&gt; read.Action(&quot;Products_Read&quot;, &quot;Home&quot;))\n                 )\n             )\n             </code>\n             </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Mobile\">\n            <summary>\n            Enables the adaptive rendering when viewed on mobile browser\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridBuilder`1.Mobile(Kendo.Mvc.UI.MobileMode)\">\n            <summary>\n            Used to determine if adaptive rendering should be used when viewed on mobile browser\n            </summary>\n            <remarks>\n            Currently the Grid widget doesn't distinguish between phone and tablet option.\n            </remarks>\n            <param name=\"type\"></param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.GridColumnFactory`1\">\n            <summary>\n            Creates columns for the <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/>.\n            </summary>\n            <typeparam name=\"TModel\">The type of the data item to which the grid is bound to</typeparam>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.#ctor(Kendo.Mvc.UI.Grid{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.GridColumnFactory`1\"/> class.\n            </summary>\n            <param name=\"container\">The container.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.Bound``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Defines a bound column.\n            </summary>\n            <typeparam name=\"TValue\"></typeparam>\n            <param name=\"expression\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.Bound(System.String)\">\n            <summary>\n            Defines a bound column.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.Bound(System.Type,System.String)\">\n            <summary>\n            Defines a bound column.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.ForeignKey``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Collections.IEnumerable,System.String,System.String)\">\n            <summary>\n            Defines a foreign key column.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"expression\">The member which matches the selected item</param>\n            <param name=\"data\">The foreign data</param>\n            <param name=\"dataFieldValue\">The data value field</param>\n            <param name=\"dataFieldText\">The data text field</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.ForeignKey``1(System.Linq.Expressions.Expression{System.Func{`0,``0}},System.Web.Mvc.SelectList)\">\n            <summary>\n            Defines a foreign key column.\n            </summary>\n            <typeparam name=\"TValue\">Member type</typeparam>\n            <param name=\"expression\">The member which matches the selected item</param>\n            <param name=\"data\">The foreign data</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.AutoGenerate(System.Boolean)\">\n            <summary>\n            Determines if columns should be automatically generated.\n            </summary>\n            <param name=\"shouldGenerate\">If true columns should be generated, otherwise false.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.AutoGenerate(System.Action{Kendo.Mvc.UI.GridColumnBase{`0}})\">\n            <summary>\n            Determines if columns should be automatically generated.\n            </summary>\n            <param name=\"columnAction\">Action which will be executed for each generated column.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.Template(System.Action{`0})\">\n            <summary>\n            Defines a template column.\n            </summary>\n            <param name=\"templateAction\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.GridColumnFactory`1.Command(System.Action{Kendo.Mvc.UI.Fluent.GridActionCommandFactory{`0}})\">\n            <summary>\n            Defines a command column.\n            </summary>\n            <param name=\"commandAction\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PageableBuilder\">\n            <summary>\n            Defines the fluent interface for configuring <see cref=\"P:Kendo.Mvc.UI.Grid`1.Pageable\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PageableBuilder.#ctor(Kendo.Mvc.UI.PageableSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.PageableBuilder\"/> class.\n            </summary>\n            <param name=\"pager\">The pager.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PageableBuilder.PageSizes(System.Int32[])\">\n            <summary>\n            Sets the page sizes of the grid.\n            </summary>\n            <param name=\"pageSizes\">The values shown in the pageSize dropdown</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PageableBuilder.PageSizes(System.Boolean)\">\n            <summary>\n            Sets the page sizes of the grid.\n            </summary>\n            <param name=\"enabled\">A value indicating whether to enable the page sizes dropdown</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PageableBuilder.ButtonCount(System.Int32)\">\n            <summary>\n            Sets the number of buttons displayed in the numeric pager. Default is 10.\n            </summary>\n            <param name=\"pageSizes\">The value</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PageableBuilder.Enabled(System.Boolean)\">\n            <summary>\n            Enables or disables paging.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n                        .Pageable(paging => paging.Enabled((bool)ViewData[\"enablePaging\"]))\n            %&gt;\n            </code>\n            </example>\n            <remarks>\n            The Enabled method is useful when you need to enable paging based on certain conditions.\n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.#ctor(`0)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.LinkedObjectCollection`1\"/> class.\n            </summary>\n            <param name=\"parent\">The parent.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.Add(`0)\">\n            <summary>\n            Adds an item to the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <param name=\"item\">The object to add to the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <exception cref=\"T:System.NotSupportedException\">The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.Clear\">\n            <summary>\n            Removes all items from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <exception cref=\"T:System.NotSupportedException\">The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only. </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.Contains(`0)\">\n            <summary>\n            Determines whether the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> contains a specific value.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <returns>\n            true if <paramref name=\"item\"/> is found in the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>; otherwise, false.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.CopyTo(`0[],System.Int32)\">\n            <summary>\n            Copies the elements of the <see cref=\"T:System.Collections.Generic.ICollection`1\"/> to an <see cref=\"T:System.Array\"/>, starting at a particular <see cref=\"T:System.Array\"/> index.\n            </summary>\n            <param name=\"array\">The one-dimensional <see cref=\"T:System.Array\"/> that is the destination of the elements copied from <see cref=\"T:System.Collections.Generic.ICollection`1\"/>. The <see cref=\"T:System.Array\"/> must have zero-based indexing.</param>\n            <param name=\"arrayIndex\">The zero-based index in <paramref name=\"array\"/> at which copying begins.</param>\n            <exception cref=\"T:System.ArgumentNullException\">\n            <paramref name=\"array\"/> is null.\n            </exception>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">\n            <paramref name=\"arrayIndex\"/> is less than 0.\n            </exception>\n            <exception cref=\"T:System.ArgumentException\">\n            <paramref name=\"array\"/> is multidimensional.\n            -or-\n            <paramref name=\"arrayIndex\"/> is equal to or greater than the length of <paramref name=\"array\"/>.\n            -or-\n            The number of elements in the source <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is greater than the available space from <paramref name=\"arrayIndex\"/> to the end of the destination <paramref name=\"array\"/>.\n            -or-\n            Type <paramref name=\"T\"/> cannot be cast automatically to the type of the destination <paramref name=\"array\"/>.\n            </exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.GetEnumerator\">\n            <summary>\n            Returns an enumerator that iterates through the collection.\n            </summary>\n            <returns>\n            A <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> that can be used to iterate through the collection.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.IndexOf(`0)\">\n            <summary>\n            Determines the index of a specific item in the <see cref=\"T:System.Collections.Generic.IList`1\"/>.\n            </summary>\n            <param name=\"item\">The object to locate in the <see cref=\"T:System.Collections.Generic.IList`1\"/>.</param>\n            <returns>\n            The index of <paramref name=\"item\"/> if found in the list; otherwise, -1.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.Insert(System.Int32,`0)\">\n            <summary>\n            Inserts an item to the <see cref=\"T:System.Collections.Generic.IList`1\"/> at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index at which <paramref name=\"item\"/> should be inserted.</param>\n            <param name=\"item\">The object to insert into the <see cref=\"T:System.Collections.Generic.IList`1\"/>.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">\n            <paramref name=\"index\"/> is not a valid index in the <see cref=\"T:System.Collections.Generic.IList`1\"/>.</exception>\n            <exception cref=\"T:System.NotSupportedException\">The <see cref=\"T:System.Collections.Generic.IList`1\"/> is read-only.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.Remove(`0)\">\n            <summary>\n            Removes the first occurrence of a specific object from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </summary>\n            <param name=\"item\">The object to remove from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.</param>\n            <returns>\n            true if <paramref name=\"item\"/> was successfully removed from the <see cref=\"T:System.Collections.Generic.ICollection`1\"/>; otherwise, false. This method also returns false if <paramref name=\"item\"/> is not found in the original <see cref=\"T:System.Collections.Generic.ICollection`1\"/>.\n            </returns>\n            <exception cref=\"T:System.NotSupportedException\">The <see cref=\"T:System.Collections.Generic.ICollection`1\"/> is read-only.</exception>\n        </member>\n        <member name=\"M:Kendo.Mvc.LinkedObjectCollection`1.RemoveAt(System.Int32)\">\n            <summary>\n            Removes the <see cref=\"T:System.Collections.Generic.IList`1\"/> item at the specified index.\n            </summary>\n            <param name=\"index\">The zero-based index of the item to remove.</param>\n            <exception cref=\"T:System.ArgumentOutOfRangeException\">\n            <paramref name=\"index\"/> is not a valid index in the <see cref=\"T:System.Collections.Generic.IList`1\"/>.</exception>\n            <exception cref=\"T:System.NotSupportedException\">The <see cref=\"T:System.Collections.Generic.IList`1\"/> is read-only.</exception>\n        </member>\n        <member name=\"P:Kendo.Mvc.LinkedObjectCollection`1.Parent\">\n            <summary>\n            Gets or sets the T object that is the parent of the current node.\n            </summary>\n            <value>The parent.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MenuBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Menu\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.#ctor(Kendo.Mvc.UI.Menu)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.MenuBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MenuItemFactory})\">\n            <summary>\n            Defines the items in the menu\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MenuEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events =>\n                            events.Open(\"onOpen\").OnClose(\"onClose\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.Direction(Kendo.Mvc.UI.MenuDirection)\">\n            <summary>\n            Specifies Menu opening direction.\n            </summary>\n            <param name=\"value\">The desired direction.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Direction(MenuDirection.Left)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.Direction(System.String)\">\n            <summary>\n            Specifies Menu opening direction.\n            </summary>\n            <param name=\"value\">The desired direction.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Direction(\"top\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.Orientation(Kendo.Mvc.UI.MenuOrientation)\">\n            <summary>\n            Sets the menu orientation.\n            </summary>\n            <param name=\"value\">The desired orientation.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Orientation(MenuOrientation.Vertical)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.OpenOnClick(System.Boolean)\">\n            <summary>\n            Enables or disables the \"open-on-click\" feature.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .OpenOnClick(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.CloseOnClick(System.Boolean)\">\n            <summary>\n            Specifies that sub menus should close after item selection (provided they won't navigate).\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .CloseOnClick(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.HoverDelay(System.Int32)\">\n            <summary>\n            Specifies the delay in ms before the menu is opened/closed - used to avoid accidental closure on leaving.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .HoverDelay(300)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.BindTo(System.String,System.Action{Kendo.Mvc.UI.MenuItem,Kendo.Mvc.SiteMapNode})\">\n            <summary>\n            Binds the menu to a sitemap\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <param name=\"siteMapAction\">The action to configure the item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .BindTo(\"examples\", (item, siteMapNode) =>\n                        {\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.BindTo(System.String)\">\n            <summary>\n            Binds the menu to a sitemap.\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .BindTo(\"examples\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.BindTo``1(System.Collections.Generic.IEnumerable{``0},System.Action{Kendo.Mvc.UI.MenuItem,``0})\">\n            <summary>\n            Binds the menu to a list of objects. The menu will be \"flat\" which means a menu item will be created for\n            every item in the data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"itemDataBound\">The action executed for every data bound item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .BindTo(new []{\"First\", \"Second\"}, (item, value) =>\n                        {\n                           item.Text = value;\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.BindTo(System.Collections.IEnumerable,System.Action{Kendo.Mvc.UI.Fluent.NavigationBindingFactory{Kendo.Mvc.UI.MenuItem}})\">\n            <summary>\n            Binds the menu to a list of objects. The menu will create a hierarchy of items using the specified mappings.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"factoryAction\">The action which will configure the mappings</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .BindTo(Model, mapping => mapping\n                                .For&lt;Customer&gt;(binding => binding\n                                    .Children(c => c.Orders) // The \"child\" items will be bound to the the \"Orders\" property\n                                    .ItemDataBound((item, c) => item.Text = c.ContactName) // Map \"Customer\" properties to MenuItem properties\n                                )\n                                .For&lt;Order&lt;(binding => binding\n                                    .Children(o => null) // \"Orders\" do not have child objects so return \"null\"\n                                    .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map \"Order\" properties to MenuItem properties\n                                )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.MenuBuilder.BindTo(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.MenuItem})\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.ItemAction(System.Action{Kendo.Mvc.UI.MenuItem})\">\n            <summary>\n            Callback for each item.\n            </summary>\n            <param name=\"action\">Action, which will be executed for each item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .ItemAction(item =>\n                        {\n                            item\n                                .Text(...)\n                                .HtmlAttributes(...);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.HighlightPath(System.Boolean)\">\n            <summary>\n            Select item depending on the current URL.\n            </summary>\n            <param name=\"value\">If true the item will be highlighted.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .HighlightPath(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.SecurityTrimming(System.Boolean)\">\n            <summary>\n            Enable/disable security trimming functionality of the component.\n            </summary>\n            <param name=\"value\">If true security trimming is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .SecurityTrimming(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuBuilder.SecurityTrimming(System.Action{Kendo.Mvc.UI.SecurityTrimmingBuilder})\">\n            <summary>\n            Defines the security trimming functionality of the component\n            </summary>\n            <param name=\"securityTrimmingAction\">The securityTrimming action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .SecurityTrimming(builder =>\n                        {\n                            builder.Enabled(true).HideParent(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.MenuItem\">\n            <summary>\n            Represents an item from Kendo Menu for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MenuItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child menu items.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuItemBuilder.#ctor(Kendo.Mvc.UI.MenuItem,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.MenuItemBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuItemBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MenuItemFactory})\">\n            <summary>\n            Configures the child items of a <see cref=\"T:Kendo.Mvc.UI.MenuItem\"/>.\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren =&gt; \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"M:Kendo.Mvc.UI.Fluent.MenuItemBuilder.Items(System.Collections.Generic.IEnumerable{Kendo.Mvc.UI.MenuItem})\" -->\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MenuItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo Menu for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.MenuOrientation\">\n            <summary>\n            Specifies the orientation in which the menu items will be ordered\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuOrientation.Horizontal\">\n            <summary>\n            Items are oredered horizontally\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.MenuOrientation.Vertical\">\n            <summary>\n            Items are oredered vertically\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MenuEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Menu events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Open client-side event\n            </summary>\n            <param name=\"onOpenAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Events(events => events.Open(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"onOpenHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events => events.Open(\"onOpen\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Close client-side event\n            </summary>\n            <param name=\"onCloseAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Events(events => events.Close(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"onCloseHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events => events.Close(\"onClose\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Activate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Activate client-side event\n            </summary>\n            <param name=\"onActivateAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Events(events => events.Activate(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Activate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Activate client-side event.\n            </summary>\n            <param name=\"onActivateHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events => events.Activate(\"onActivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Deactivate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Deactivate client-side event\n            </summary>\n            <param name=\"onDeactivateAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Events(events => events.Deactivate(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Deactivate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Deactivate client-side event.\n            </summary>\n            <param name=\"onDeactivateHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events => events.Deactivate(\"onDeactivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"onSelectAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Menu()\n                       .Name(\"Menu\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MenuEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Events(events => events.Select(\"onSelect\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Action(Kendo.Mvc.INavigatable,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller name and route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Action(Kendo.Mvc.INavigatable,System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action and controller name, along with Route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"actionName\">Action name.</param>\n            <param name=\"controllerName\">Controller name.</param>\n            <param name=\"routeValues\">Route values as an object</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Action(Kendo.Mvc.INavigatable,System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller name and route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"actionName\">Action name.</param>\n            <param name=\"controllerName\">Controller name.</param>\n            <param name=\"routeValues\">Route values as <see cref=\"T:System.Web.Routing.RouteValueDictionary\"/></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Action``1(Kendo.Mvc.INavigatable,System.Linq.Expressions.Expression{System.Action{``0}})\">\n            <summary>\n            Sets the action and route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"item\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"controllerAction\">The controller action.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Url(Kendo.Mvc.INavigatable,System.String)\">\n            <summary>\n            Sets the url property of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"actionName\">The Url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Route(Kendo.Mvc.INavigatable,System.String,System.Object)\">\n            <summary>\n            Sets the route name and route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"routeName\">Route name.</param>\n            <param name=\"routeValues\">Route values as an object.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.Route(Kendo.Mvc.INavigatable,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route name and route values of <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"routeName\">Route name.</param>\n            <param name=\"routeValues\">Route values as <see cref=\"T:System.Web.Routing.RouteValueDictionary\"/>.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.GenerateUrl(Kendo.Mvc.INavigatable,System.Web.Mvc.ViewContext,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Generating url depending on the ViewContext and the <see cref=\"T:Kendo.Mvc.IUrlGenerator\"/> generator.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"viewContext\">The <see cref=\"T:System.Web.Mvc.ViewContext\"/> object</param>\n            <param name=\"urlGenerator\">The <see cref=\"T:Kendo.Mvc.IUrlGenerator\"/> generator.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.IsCurrent(Kendo.Mvc.INavigatable,System.Web.Mvc.ViewContext,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Determines whether the specified navigatable matches the current request URL.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"viewContext\">The <see cref=\"T:System.Web.Mvc.ViewContext\"/> object.</param>\n            <param name=\"urlGenerator\">The <see cref=\"T:Kendo.Mvc.IUrlGenerator\"/> generator.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.GenerateUrl(Kendo.Mvc.INavigatable,System.Web.Mvc.ViewContext,Kendo.Mvc.IUrlGenerator,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Generating url depending on the ViewContext and the <see cref=\"T:Kendo.Mvc.IUrlGenerator\"/> generator.\n            </summary>\n            <param name=\"navigatable\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"viewContext\">The <see cref=\"T:System.Web.Mvc.ViewContext\"/> object</param>\n            <param name=\"urlGenerator\">The <see cref=\"T:Kendo.Mvc.IUrlGenerator\"/> generator.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.IsAccessible(Kendo.Mvc.INavigatable,Kendo.Mvc.Infrastructure.INavigationItemAuthorization,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Verify whether the <see cref=\"T:Kendo.Mvc.INavigatable\"/> object is accessible.\n            </summary>\n            <param name=\"item\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"authorization\">The <see cref=\"T:Kendo.Mvc.Infrastructure.INavigationItemAuthorization\"/> object.</param>\n            <param name=\"viewContext\">The <see cref=\"T:System.Web.Mvc.ViewContext\"/> object</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.IsAccessible``1(System.Collections.Generic.IEnumerable{``0},Kendo.Mvc.Infrastructure.INavigationItemAuthorization,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Verifies whether collection of <see cref=\"T:Kendo.Mvc.INavigatable\"/> objects is accessible.\n            </summary>\n            <typeparam name=\"T\">Object of <see cref=\"T:Kendo.Mvc.INavigatable\"/> type.</typeparam>\n            <param name=\"item\">The <see cref=\"T:Kendo.Mvc.INavigatable\"/> object.</param>\n            <param name=\"authorization\">The <see cref=\"T:Kendo.Mvc.Infrastructure.INavigationItemAuthorization\"/> object.</param>\n            <param name=\"viewContext\">The <see cref=\"T:System.Web.Mvc.ViewContext\"/> object</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.NavigatableExtensions.HasValue(Kendo.Mvc.INavigatable)\">\n            <summary>\n            Determines whether this instance has value.\n            </summary>\n            <returns>true if either ActionName and ControllerName, RouteName or Url are set; false otherwise</returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.NavigationBindingFactory`1\">\n            <summary>\n            Defines the fluent API for creating bindings for Kendo Menu, TreeView and PanelBar\n            </summary>\n            <typeparam name=\"TNavigationItem\"></typeparam>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PanelBarBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.PanelBar\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.#ctor(Kendo.Mvc.UI.PanelBar)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.PanelBarBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.PanelBarItemFactory})\">\n            <summary>\n            Defines the items in the panelbar\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.PanelBarEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events =>\n                            events.Expand(\"expand\").Collapse(\"collapse\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.BindTo(System.String,System.Action{Kendo.Mvc.UI.PanelBarItem,Kendo.Mvc.SiteMapNode})\">\n            <summary>\n            Binds the panelbar to a sitemap\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <param name=\"siteMapAction\">The action to configure the item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .BindTo(\"examples\", (item, siteMapNode) =>\n                        {\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.BindTo(System.String)\">\n            <summary>\n            Binds the panelbar to a sitemap.\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .BindTo(\"examples\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.BindTo``1(System.Collections.Generic.IEnumerable{``0},System.Action{Kendo.Mvc.UI.PanelBarItem,``0})\">\n            <summary>\n            Binds the panelbar to a list of objects\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"itemDataBound\">The action executed for every data bound item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .BindTo(new []{\"First\", \"Second\"}, (item, value) =>\n                        {\n                           item.Text = value;\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.BindTo(System.Collections.IEnumerable,System.Action{Kendo.Mvc.UI.Fluent.NavigationBindingFactory{Kendo.Mvc.UI.PanelBarItem}})\">\n            <summary>\n            Binds the panelbar to a list of objects. The panelbar will create a hierarchy of items using the specified mappings.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"factoryAction\">The action which will configure the mappings</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .BindTo(Model, mapping => mapping\n                                .For&lt;Customer&gt;(binding => binding\n                                    .Children(c => c.Orders) // The \"child\" items will be bound to the the \"Orders\" property\n                                    .ItemDataBound((item, c) => item.Text = c.ContactName) // Map \"Customer\" properties to PanelBarItem properties\n                                )\n                                .For&lt;Order&lt;(binding => binding\n                                    .Children(o => null) // \"Orders\" do not have child objects so return \"null\"\n                                    .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map \"Order\" properties to PanelBarItem properties\n                                )\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.Animation(System.Boolean)\">\n            <summary>\n            Configures the animation effects of the panelbar.\n            </summary>\n            <param name=\"enable\">Whether the component animation is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Animation(false)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.ExpandableAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the panelbar.\n            </summary>\n            <param name=\"animationAction\">The action that configures the animation.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Animation(animation => animation.Expand(config => config.Fade(FadeDirection.In)))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.ItemAction(System.Action{Kendo.Mvc.UI.PanelBarItem})\">\n            <summary>\n            Callback for each item.\n            </summary>\n            <param name=\"itemAction\">Action, which will be executed for each item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .ItemAction(item =>\n                        {\n                            item\n                                .Text(...)\n                                .HtmlAttributes(...);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.HighlightPath(System.Boolean)\">\n            <summary>\n            Select item depending on the current URL.\n            </summary>\n            <param name=\"value\">If true the item will be highlighted.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .HighlightPath(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.ExpandAll(System.Boolean)\">\n            <summary>\n            Renders the panelbar with expanded items.\n            </summary>\n            <param name=\"value\">If true the panelbar will be expanded.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .ExpandAll(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.ExpandMode(Kendo.Mvc.UI.PanelBarExpandMode)\">\n            <summary>\n            Sets the expand mode of the panelbar.\n            </summary>\n            <param name=\"value\">The desired expand mode.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .ExpandMode(PanelBarExpandMode.Multiple)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.SelectedIndex(System.Int32)\">\n            <summary>\n            Selects the item at the specified index.\n            </summary>\n            <param name=\"index\">The index.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n                        .SelectedIndex(1)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.SecurityTrimming(System.Boolean)\">\n            <summary>\n            Enable/disable security trimming functionality of the component.\n            </summary>\n            <param name=\"value\">If true security trimming is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .SecurityTrimming(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarBuilder.SecurityTrimming(System.Action{Kendo.Mvc.UI.SecurityTrimmingBuilder})\">\n            <summary>\n            Defines the security trimming functionality of the component\n            </summary>\n            <param name=\"securityTrimmingAction\">The securityTrimming action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .SecurityTrimming(builder =>\n                        {\n                            builder.Enabled(true).HideParent(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the PanelBar events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Expand(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Expand client-side event\n            </summary>\n            <param name=\"expandInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().PanelBar()\n                       .Name(\"PanelBar\")\n                       .Events(events => events.Expand(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Expand(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Expand client-side event.\n            </summary>\n            <param name=\"expandHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events => events.Expand(\"expand\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.ContentLoad(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ContentLoad client-side event\n            </summary>\n            <param name=\"contentLoadInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().PanelBar()\n                       .Name(\"PanelBar\")\n                       .Events(events => events.ContentLoad(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.ContentLoad(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the ContentLoad client-side event.\n            </summary>\n            <param name=\"contentLoadHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events => events.ContentLoad(\"contentLoad\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Collapse(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Collapse client-side event\n            </summary>\n            <param name=\"collapseInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().PanelBar()\n                       .Name(\"PanelBar\")\n                       .Events(events => events.Collapse(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Collapse(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Collapse client-side event.\n            </summary>\n            <param name=\"collapseHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events => events.Collapse(\"collapse\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"selectInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().PanelBar()\n                       .Name(\"PanelBar\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"selectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events => events.Select(\"select\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Error client-side event\n            </summary>\n            <param name=\"errorInlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().PanelBar()\n                       .Name(\"PanelBar\")\n                       .Events(events => events.Error(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarEventBuilder.Error(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"errorHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Events(events => events.Error(\"onError\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.PanelBarExpandMode\">\n            <summary>\n            Specifies the expand mode in which the panelbar will expand its items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.PanelBarExpandMode.Single\">\n            <summary>\n            Only one item can be expanded.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.PanelBarExpandMode.Multiple\">\n            <summary>\n            All items can be expanded\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.PanelBarItem\">\n            <summary>\n            Represents an item from Kendo PanelBar for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PanelBarItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child panelbar items.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarItemBuilder.#ctor(Kendo.Mvc.UI.PanelBarItem,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.PanelBarItemBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <param name=\"viewContext\">The context of the View.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarItemBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.PanelBarItemFactory})\">\n            <summary>\n            Configures the child items of a <see cref=\"T:Kendo.Mvc.UI.PanelBarItem\"/>.\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren =&gt; \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            });\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.PanelBarItemBuilder.Expanded(System.Boolean)\">\n            <summary>\n            Define when the item will be expanded on intial render.\n            </summary>\n            <param name=\"value\">If true the item will be expanded.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\").Items(firstItemChildren => \n                            {\n                                firstItemChildren.Add().Text(\"Child Item 1\");\n                                firstItemChildren.Add().Text(\"Child Item 2\");\n                            })\n                            .Expanded(true);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.PanelBarItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo PanelBar for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TabStripEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the TabStrip events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Activate(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Activate client-side event\n            </summary>\n            <param name=\"onSelectAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().TabStrip()\n                       .Name(\"TabStrip\")\n                       .Events(events => events.Activate(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Activate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Activate client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Events(events => events.Activate(\"onActivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"onSelectAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().TabStrip()\n                       .Name(\"TabStrip\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Events(events => events.Select(\"onSelect\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.ContentLoad(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the ContentLoad client-side event\n            </summary>\n            <param name=\"onSelectAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().TabStrip()\n                       .Name(\"TabStrip\")\n                       .Events(events => events.ContentLoad(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.ContentLoad(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the ContentLoad client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Events(events => events.ContentLoad(\"onContentLoad\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Error client-side event\n            </summary>\n            <param name=\"onErrorAction\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().TabStrip()\n                       .Name(\"TabStrip\")\n                       .Events(events => events.Error(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripEventBuilder.Error(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"onErrorHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Events(events => events.Error(\"onError\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TabStripBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.TabStrip\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.#ctor(Kendo.Mvc.UI.TabStrip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TabStripBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.TabStripItemFactory})\">\n            <summary>\n            Defines the items in the tabstrip\n            </summary>\n            <param name=\"addAction\">The add action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.TabStripEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Events(events =>\n                            events.Select(\"onSelect\").OnLoad(\"onLoad\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.Animation(System.Boolean)\">\n            <summary>\n            Configures the animation effects of the tabstrip.\n            </summary>\n            <param name=\"enable\">Whether the component animation is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"PanelBar\")\n                        .Animation(false)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.PopupAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the tabstrip.\n            </summary>\n            <param name=\"animationAction\">The action that configures the animation.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"PanelBar\")\n                        .Animation(animation => animation.Open(config => config.Fade(FadeDirection.In)))\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.BindTo(System.String,System.Action{Kendo.Mvc.UI.TabStripItem,Kendo.Mvc.SiteMapNode})\">\n            <summary>\n            Binds the tabstrip to a sitemap\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <param name=\"siteMapAction\">The action to configure the item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .BindTo(\"examples\", (item, siteMapNode) =>\n                        {\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.BindTo(System.String)\">\n            <summary>\n            Binds the tabstrip to a sitemap.\n            </summary>\n            <param name=\"viewDataKey\">The view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .BindTo(\"examples\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.BindTo``1(System.Collections.Generic.IEnumerable{``0},System.Action{Kendo.Mvc.UI.TabStripItem,``0})\">\n            <summary>\n            Binds the tabstrip to a list of objects\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <param name=\"itemDataBound\">The action executed for every data bound item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .BindTo(new []{\"First\", \"Second\"}, (item, value) =>\n                        {\n                           item.Text = value;\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.SelectedIndex(System.Int32)\">\n            <summary>\n            Selects the item at the specified index.\n            </summary>\n            <param name=\"index\">The index.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Items(items =>\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n                        .SelectedIndex(1)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.ItemAction(System.Action{Kendo.Mvc.UI.TabStripItem})\">\n            <summary>\n            Callback for each item.\n            </summary>\n            <param name=\"action\">Action, which will be executed for each item.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .ItemAction(item =>\n                        {\n                            item\n                                .Text(...)\n                                .HtmlAttributes(...);\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.HighlightPath(System.Boolean)\">\n            <summary>\n            Select item depending on the current URL.\n            </summary>\n            <param name=\"value\">If true the item will be highlighted.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .HighlightPath(true)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripBuilder.SecurityTrimming(System.Boolean)\">\n            <summary>\n            Enable/disable security trimming functionality of the component.\n            </summary>\n            <param name=\"value\">If true security trimming is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .SecurityTrimming(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.TabStripItem\">\n            <summary>\n            Represents an item from Kendo TabStrip for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TabStripItemBuilder\">\n            <summary>\n            Defines the fluent interface for configuring child tabstrip items.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.TabStripItemBuilder.#ctor(Kendo.Mvc.UI.TabStripItem,System.Web.Mvc.ViewContext)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.TabStripItemBuilder\"/> class.\n            </summary>\n            <param name=\"item\">The item.</param>\n            <param name=\"viewContext\">The context of the View.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.TabStripItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo TabStrip for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ActiveState\">\n            <summary>\n            Active state of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Button\">\n            <summary>\n            Button with plain text content\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ButtonIconText\">\n            <summary>\n            Button with an icon and text content\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ButtonIcon\">\n            <summary>\n            Button with an icon only\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ButtonBare\">\n            <summary>\n            Bare button with an icon only (no background and borders)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Content\">\n            <summary>\n            Content - rendered around custom content\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.DefaultState\">\n            <summary>\n            Default state of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.DisabledState\">\n            <summary>\n            Disabled state of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Group\">\n            <summary>\n            Group - rendered around grouped items (children)\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Header\">\n            <summary>\n            Header - rendered on headers or header items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.HoverState\">\n            <summary>\n            Hovered state of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icon\">\n            <summary>\n            Icon - icon from default icon set\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Image\">\n            <summary>\n            Image - image rendered through ImageUrl\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Item\">\n            <summary>\n            Item - rendered on items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.First\">\n            <summary>\n            First in list of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Last\">\n            <summary>\n            Last in list of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Top\">\n            <summary>\n            Top in list of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Bottom\">\n            <summary>\n            Bottom in list of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Middle\">\n            <summary>\n            Middle in list of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.LastHeader\">\n            <summary>\n            Last in list of headers\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Link\">\n            <summary>\n            Link - rendered on all links\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ResetStyle\">\n            <summary>\n            Reset - removes inherited styles\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.SelectedState\">\n            <summary>\n            Selected state of items\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Sprite\">\n            <summary>\n            Sprite - sprite rendered in the begging of the item.\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Widget\">\n            <summary>\n            Widget - rendered always on the outmost HTML element of a UI component\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Input\">\n            <summary>\n            Input - input rendered in the div wrapper\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.CheckBox\">\n            <summary>\n            CheckBox - rendered on all checkbox\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.ToolBar\">\n            <summary>\n            ToolBar - rendered on all toolbars\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Alt\">\n            <summary>\n            Alternating class for zebra stripes\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Scrollable\">\n            <summary>\n            Scrollable - rendered on all elements that wish to be scrollable on touch devices\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.UIPrimitives.Icons\">\n            <summary>\n            Contains CSS classes for icons\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Delete\">\n            <summary>\n            \"Delete\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.GroupDelete\">\n            <summary>\n            \"Delete Group\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Refresh\">\n            <summary>\n            \"Refresh\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Maximize\">\n            <summary>\n            \"Maximize\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Minimize\">\n            <summary>\n            \"Minimize\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Pin\">\n            <summary>\n            \"Pin\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Close\">\n            <summary>\n            \"Close\" icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Icons.Custom\">\n            <summary>\n            \"Custom\" icon\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.UIPrimitives.Grid\">\n            <summary>\n            Contains CSS classes, used in the grid\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Grid.ActionForm\">\n            <summary>\n            Grid action\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Grid.EditingContainer\">\n            <summary>\n            Container element for editing / inserting form\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Grid.EditingForm\">\n            <summary>\n            Container element for editing / inserting form\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Grid.ToolBar\">\n            <summary>\n            Toolbar which contains different commands\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Grid.PagerNavigation\">\n            <summary>\n            Pager navigation icon\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.UIPrimitives.TreeView\">\n            <summary>\n            Contains CSS classes, used in the treeview\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.TreeView.Lines\">\n            <summary>\n            Class that shows treeview lines\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.UIPrimitives.Editor\">\n            <summary>\n            Contains CSS classes, used in the editor\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Editor.ToolbarButton\">\n            <summary>\n            Button in editor toolbar\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Editor.ToolbarColorPicker\">\n            <summary>\n            Color picker in editor toolbar\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Editor.ToolIcon\">\n            <summary>\n            Editor tool icon\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Editor.Custom\">\n            <summary>\n            Editor custom tool\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Editor.RawContent\">\n            <summary>\n            Editor textarea element\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Slider.IncreaseButton\">\n            <summary>Slider increase button.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Slider.DecreaseButton\">\n            <summary>Slider decrease button.</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Splitter.Horizontal\">\n            <summary>Horizontal splitter</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Splitter.Vertical\">\n            <summary>Vertical splitter</summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Splitter.Pane\">\n            <summary>Splitter pane</summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.UIPrimitives.Window\">\n            <summary>\n            Contains CSS classes, used in the window\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Window.Content\">\n            <summary>\n            Window content area\n            </summary>\n        </member>\n        <member name=\"F:Kendo.Mvc.UI.UIPrimitives.Window.TitleBar\">\n            <summary>\n            Window title bar\n            </summary>\n        </member>\n        <!-- Badly formed XML comment ignored for member \"T:Kendo.Mvc.UI.Fluent.UploadFileBuilder\" -->\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadFileBuilder.Name(System.String)\">\n            <summary>\n            Specifies the name of the file\n            </summary>\n            <param name=\"name\">The file name</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .Files(files =&gt; files.Add().Name(&quot;file.txt&quot;).Size(500).Extension(&quot;.txt&quot;))\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadFileBuilder.Size(System.Int64)\">\n            <summary>\n            Specifies the size of the file in bytes\n            </summary>\n            <param name=\"size\">The file size</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .Files(files =&gt; files.Add().Name(&quot;file.txt&quot;).Size(500).Extension(&quot;.txt&quot;))\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadFileBuilder.Extension(System.String)\">\n            <summary>\n            Specifies the extension of the file\n            </summary>\n            <param name=\"extension\">The file extension</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .Files(files =&gt; files.Add().Name(&quot;file.txt&quot;).Size(500).Extension(&quot;.txt&quot;))\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder\">\n            <summary>\n            A builder class for <see cref=\"T:Kendo.Mvc.UI.UploadMessages\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.#ctor(Kendo.Mvc.UI.IUploadMessages)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder\"/> class.\n            </summary>\n            <param name=\"messages\">The messages.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs =&gt; msgs\n                            .Retry(\"retry\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.Cancel(System.String)\">\n            <summary>\n            Sets the Cancel button text\n            </summary>\n            <param name=\"cancelMessage\">New cancel button text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .Cancel(\"cancel\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.DropFilesHere(System.String)\">\n            <summary>\n            Sets the Drag and Drop hint text\n            </summary>\n            <param name=\"dropFilesHereMessage\">New Drag and Drop hint text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .DropFilesHere(\"drop files here\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.Remove(System.String)\">\n            <summary>\n            Sets the Remove button text\n            </summary>\n            <param name=\"removeMessage\">New Remove button text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .Remove(\"drop files here\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.Retry(System.String)\">\n            <summary>\n            Sets the Retry button text\n            </summary>\n            <param name=\"retryMessage\">New Retry button text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .Retry(\"retry\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.Select(System.String)\">\n            <summary>\n            Sets the Select button text\n            </summary>\n            <param name=\"selectMessage\">New Select button text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .Select(\"select\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.StatusFailed(System.String)\">\n            <summary>\n            Sets the \"failed\" status text accessible by screen readers\n            </summary>\n            <param name=\"statusFailedMessage\">New \"failed\" status text accessible by screen readers.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .StatusFailed(\"failed\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.StatusUploaded(System.String)\">\n            <summary>\n            Sets the \"uploaded\" status text accessible by screen readers\n            </summary>\n            <param name=\"statusUploadedMessage\">New \"uploaded\" status text accessible by screen readers.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .StatusUploaded(\"uploaded\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.StatusUploading(System.String)\">\n            <summary>\n            Sets the \"uploading\" status text accessible by screen readers\n            </summary>\n            <param name=\"statusUploadingMessage\">New \"uploading\" status text accessible by screen readers.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .StatusUploading(\"uploading\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.HeaderStatusUploading(System.String)\">\n            <summary>\n            Sets the \"uploading\" header status text accessible by screen readers\n            </summary>\n            <param name=\"headerStatusUploadingMessage\">New \"header uploading\" status text accessible by screen readers.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .HeaderStatusUploading(\"header uploading\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.HeaderStatusUploaded(System.String)\">\n            <summary>\n            Sets the \"uploaded\" header status text accessible by screen readers\n            </summary>\n            <param name=\"headerStatusUploadedMessage\">New \"header uploaded\" status text accessible by screen readers.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .HeaderStatusUploaded(\"header uploaded\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadMessagesBuilder.UploadSelectedFiles(System.String)\">\n            <summary>\n            Sets Upload button (visible when AutoUpload is set to false) text\n            </summary>\n            <param name=\"uploadSelectedFilesMessage\">New Upload button text.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Messages(msgs => msgs\n                            .UploadSelectedFiles(\"uploading\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder\">\n            <summary>\n            A builder class for <see cref=\"T:Kendo.Mvc.UI.IUploadAsyncSettings\"/>\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.#ctor(Kendo.Mvc.UI.IUploadAsyncSettings)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder\"/> class.\n            </summary>\n            <param name=\"asyncSettings\">The async settings.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async =&gt; async\n                            .Save(\"Save\", \"Home\", new RouteValueDictionary{ {\"id\", 1} })\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.AutoUpload(System.Boolean)\">\n             <summary>\n             Sets a value indicating whether to start the upload immediately after selecting a file\n             </summary>\n             <param name=\"value\">true if the upload should start immediately after selecting a file, false otherwise; true by default</param>\n             <remarks>\n            \n             </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Batch(System.Boolean)\">\n            <summary>\n            Sets a value indicating whether to upload selected files in one batch (request)\n            </summary>\n            <param name=\"value\">true if the files should be uploaded in a single request, false otherwise; false by default</param>\n            <remarks>\n            \n            </remarks>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller and route values for the save operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Save\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, controller and route values for the save operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Save\", \"Home\", new { id = 1 });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String,System.String)\">\n            <summary>\n            Sets the action and controller for the save operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Save\", \"Home\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String)\">\n            <summary>\n            Sets the route name for the save operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Default\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the save operation\n            </summary>\n            <param name=\"routeValues\">The route values of the action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(MVC.Home.Save(1).GetRouteValueDictionary());\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route and values for the save operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Default\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save(System.String,System.Object)\">\n            <summary>\n            Sets the route and values for the save operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Default\", new { id = 1 });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Save``1(System.Linq.Expressions.Expression{System.Action{``0}})\">\n            <summary>\n            Sets the action for the save operation\n            </summary>\n            <typeparam name=\"TController\">The type of the controller.</typeparam>\n            <param name=\"controllerAction\">The action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save&lt;HomeController&gt;(controller => controller.Save())\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.SaveField(System.String)\">\n            <summary>\n            Sets the field name for the save operation\n            </summary>\n            <param name=\"fieldName\">\n                The form field name to use for submiting the files.\n                The Upload name is used if not set.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .SaveField(\"attachment\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.SaveUrl(System.String)\">\n            <summary>\n            Sets an absolute or relative Save action URL.\n            Note that the URL must be in the same domain for the upload to succeed.\n            </summary>\n            <param name=\"url\">The Save action URL.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .SaveUrl(\"/save\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String,System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the action, controller and route values for the remove operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Remove\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the action, controller and route values for the remove operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Remove\", \"Home\", new { id = 1 });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String,System.String)\">\n            <summary>\n            Sets the action and controller for the remove operation\n            </summary>\n            <param name=\"actionName\">Name of the action.</param>\n            <param name=\"controllerName\">Name of the controller.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Remove\", \"Home\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String)\">\n            <summary>\n            Sets the route name for the remove operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Default\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route values for the remove operation\n            </summary>\n            <param name=\"routeValues\">The route values of the action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(MVC.Home.Remove(1).GetRouteValueDictionary());\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String,System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the route and values for the remove operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Default\", \"Home\", new RouteValueDictionary{ {\"id\", 1} });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove(System.String,System.Object)\">\n            <summary>\n            Sets the route and values for the remove operation\n            </summary>\n            <param name=\"routeName\">Name of the route.</param>\n            <param name=\"routeValues\">The route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove(\"Default\", new { id = 1 });\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.Remove``1(System.Linq.Expressions.Expression{System.Action{``0}})\">\n            <summary>\n            Sets the action for the remove operation\n            </summary>\n            <typeparam name=\"TController\">The type of the controller.</typeparam>\n            <param name=\"controllerAction\">The action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Remove&lt;HomeController&gt;(controller => controller.Remove())\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.RemoveUrl(System.String)\">\n            <summary>\n            Sets an absolute or relative Remove action URL.\n            Note that the URL must be in the same domain for the operation to succeed.\n            </summary>\n            <param name=\"url\">The Remove action URL.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .RemoveUrl(\"/remove\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder.RemoveField(System.String)\">\n            <summary>\n            Sets the field name for the remove operation\n            </summary>\n            <param name=\"fieldName\">\n                The form field name to use for submiting the files.\n                \"fileNames\" is used if not set.\n            </param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .RemoveField(\"attachments\");\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.UploadBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Upload\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.#ctor(Kendo.Mvc.UI.Upload)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.UploadBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.UploadEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events\n                            .Upload(\"onUpload\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Enable(System.Boolean)\">\n            <summary>\n            Enables or disables the component.\n            </summary>\n            <param name=\"value\">true if the component should be enabled, false otherwise; the default is true.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Enable(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Multiple(System.Boolean)\">\n            <summary>\n            Enables or disables multiple file selection.\n            </summary>\n            <param name=\"value\">true if multiple file selection should be enabled, false otherwise; the default is true.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Multiple(false)\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.ShowFileList(System.Boolean)\">\n            <summary>\n            Sets a value indicating whether to show the list of uploaded files\n            </summary>\n            <param name=\"value\">true if the list of uploaded files should be visible, false otherwise; true by default</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Async(System.Action{Kendo.Mvc.UI.Fluent.UploadAsyncSettingsBuilder})\">\n            <summary>\n            Use it to configure asynchronous uploading.\n            </summary>\n            <param name=\"configurator\">Use builder to set different asynchronous uploading options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Save\", \"Compose\")\n                            .Remove(\"Remove\", \"Compose\")\n                        );\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Messages(System.Action{Kendo.Mvc.UI.Fluent.UploadMessagesBuilder})\">\n            <summary>\n            Use it to configure asynchronous uploading.\n            </summary>\n            <param name=\"configurator\">Use builder to set different asynchronous uploading options.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async => async\n                            .Save(\"Save\", \"Compose\")\n                            .Remove(\"Remove\", \"Compose\")\n                        );\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.TemplateId(System.String)\">\n            <summary>\n            The template element to be used for rendering the files in the list\n            </summary>\n            <param name=\"templateId\">The id of the template</param>\n            <example>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .TemplateId(&quot;fileTemplate&quot;)\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            )\n            </code>\n            <code lang=\"ASPX\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(&quot;Upload&quot;)\n                        .TemplateId(&quot;fileTemplate&quot;)\n                        .Async(async =&gt; async\n                            .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                            .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadBuilder.Files(System.Action{Kendo.Mvc.UI.Fluent.UploadFileFactory})\">\n            <summary>\n            Sets the initially rendered files\n            </summary>\n            <param name=\"configurator\">The lambda which configures initial files</param>\n            <example>\n            <code lang=\"ASPX\">\n            &lt;%= Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .Files(files =&gt; files.Add().Name(&quot;file.txt&quot;).Size(500).Extension(&quot;.txt&quot;))\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            %&gt;\n            </code>\n            <code lang=\"Razor\">\n            @(Html.Kendo().Upload()\n                .Name(&quot;files&quot;)\n                .Files(files =&gt; files.Add().Name(&quot;file.txt&quot;).Size(500).Extension(&quot;.txt&quot;))\n                .Async(a =&gt; a\n                    .Save(&quot;Save&quot;, &quot;Compose&quot;)\n                    .Remove(&quot;Remove&quot;, &quot;Compose&quot;)\n                    .AutoUpload(true)\n                )\n            )\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.UploadEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Upload events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.#ctor(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.UploadEventBuilder\"/> class.\n            </summary>\n            <param name=\"clientEvents\">The client events.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Select(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Select client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Select(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Select(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Select client-side event.\n            </summary>\n            <param name=\"onSelectHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Select(\"onSelect\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Upload(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Upload client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Upload(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Upload(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Upload client-side event.\n            </summary>\n            <param name=\"onUploadHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Upload(\"onUpload\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Success(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Success client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Success(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Success(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Success client-side event.\n            </summary>\n            <param name=\"onSuccessHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Success(\"onSuccess\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Error client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Error(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Error(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"onErrorHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Error(\"onError\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Complete(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Complete client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Complete(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Complete(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Complete client-side event.\n            </summary>\n            <param name=\"onCompleteHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Complete(\"onComplete\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Cancel(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Cancel client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Cancel(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Cancel(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Cancel client-side event.\n            </summary>\n            <param name=\"onCancelHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Cancel(\"onCancel\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Remove(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Remove client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Remove(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Remove(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Remove client-side event.\n            </summary>\n            <param name=\"onRemoveHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Remove(\"onRemove\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Progress(System.Func{System.Object,System.Object})\">\n            <summary>\n            Defines the inline handler of the Progress client-side event\n            </summary>\n            <param name=\"inlineCodeBlock\">The handler code wrapped in a text tag (Razor syntax).</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;% Html.Kendo().Upload()\n                       .Name(\"Upload\")\n                       .Events(events => events.Progress(\n                            @&lt;text&gt;\n                            function(e) {\n                                //event handling code\n                            }\n                            &lt;/text&gt;\n                       ))\n                       .Render();\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.UploadEventBuilder.Progress(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Progress client-side event.\n            </summary>\n            <param name=\"onProgressHandlerName\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Events(events => events.Progress(\"onProgress\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.UploadHtmlBuilder.#ctor(Kendo.Mvc.UI.Upload)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Html.UploadHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The Upload component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Html.UploadHtmlBuilder.BuildCore\">\n            <summary>\n            Builds the Upload component markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.Save\">\n            <summary>\n            Defines the Save action\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.SaveField\">\n            <summary>\n            Defines the name of the form field submitted to the Save action.\n            The default value is the Upload name.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.Remove\">\n            <summary>\n            Defines the Remove action\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.RemoveField\">\n            <summary>\n            Defines the name of the form field submitted to the Remove action.\n            The default value is \"fileNames\".\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.AutoUpload\">\n            <summary>\n            Gets or sets a value indicating whether to start the upload immediately after selecting a file\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.IUploadAsyncSettings.Batch\">\n            <summary>\n            Gets or sets a value indicating whether to upload selected files in one batch (request)\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.UploadAsyncSettings.#ctor(Kendo.Mvc.UI.Upload)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.UploadAsyncSettings\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.UploadAsyncSettings.SerializeTo(System.String,System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Serializes the asynchronous uploading settings to the writer.\n            </summary>\n            <param name=\"key\">The serialization key.</param>\n            <param name=\"options\">The target dictionary.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.Save\">\n            <summary>\n            Defines the Save action\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.SaveField\">\n            <summary>\n            Defines the name of the form field submitted to the Save action.\n            The default value is the Upload name.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.Remove\">\n            <summary>\n            Defines the Remove action\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.RemoveField\">\n            <summary>\n            Defines the name of the form field submitted to the Remove action.\n            The default value is \"removeField\".\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.AutoUpload\">\n            <summary>\n            Gets or sets a value indicating whether to start the upload immediately after selecting a file\n            </summary>\n            <value>\n            true if the upload should start immediately after selecting a file, false otherwise; true by default\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.UploadAsyncSettings.Batch\">\n            <summary>\n            Gets or sets a value indicating whether to upload selected files in one batch (request)\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Upload.#ctor(System.Web.Mvc.ViewContext,Kendo.Mvc.Infrastructure.IJavaScriptInitializer,Kendo.Mvc.IUrlGenerator)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Upload\"/> class.\n            </summary>\n            <param name=\"viewContext\">The view context.</param>\n            <param name=\"initializer\">The javascript initializer.</param>\n            <param name=\"urlGenerator\">The URL Generator.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Upload.WriteInitializationScript(System.IO.TextWriter)\">\n            <summary>\n            Writes the initialization script.\n            </summary>\n            <param name=\"writer\">The writer object.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Upload.WriteHtml(System.Web.UI.HtmlTextWriter)\">\n            <summary>\n            Writes the Upload HTML.\n            </summary>\n            <param name=\"writer\">The writer object.</param>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.Enabled\">\n            <summary>\n            Gets or sets a value indicating if the component is enabled.\n            </summary>\n            <value>\n            true if the component should be enabled, false otherwise; the default is true.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.Multiple\">\n            <summary>\n            Gets or sets a value indicating if multiple file selection is enabled.\n            </summary>\n            <value>\n            true if multiple file selection should be enabled, false otherwise; the default is true.\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.ShowFileList\">\n            <summary>\n            Gets or sets a value indicating whether to show the list of uploaded files\n            </summary>\n            <value>\n            true if the list of uploaded files should be visible, false otherwise; true by default\n            </value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.Async\">\n            <summary>\n            Defines the asynchronous uploading settings\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.UrlGenerator\">\n            <summary>\n            Gets or sets the URL generator.\n            </summary>\n            <value>The URL generator.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.Messages\">\n            <summary>\n            Gets or sets the Upload messages.\n            </summary>\n            <value>The Upload messages.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.TemplateId\">\n            <summary>\n            Gets or sets the template Id for the files\n            </summary>\n            <value>The template for the files list</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.Upload.Files\">\n            <summary>\n            Gets the initially rendered files\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WidgetFactory\">\n            <summary>\n            Creates the fluent API builders of the Kendo UI widgets\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Menu\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Menu\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Menu()\n                        .Name(\"Menu\")\n                        .Items(items =&gt; { /* add items here */ });\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Editor\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Editor\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Editor()\n                        .Name(\"Editor\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Grid``1\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/> bound to the specified data item type.\n            </summary>\n            <example>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;()\n                        .Name(\"Grid\")\n                        .BindTo(Model)\n            %&gt;\n            </code>\n            </example>      \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Grid``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid(Model)\n                        .Name(\"Grid\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Grid(System.Data.DataTable)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/> bound to a DataTable.\n            </summary>\n            <param name=\"dataSource\">DataTable from which the grid instance will be bound</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Grid(System.Data.DataView)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/> bound to a DataView.\n            </summary>\n            <param name=\"dataSource\">DataView from which the grid instance will be bound</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Grid``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Grid`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataSourceViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Grid&lt;Order&gt;(\"orders\")\n                        .Name(\"Grid\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ListView``1\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.ListView`1\"/> bound to the specified data item type.\n            </summary>\n            <example>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView&lt;Order&gt;()\n                        .Name(\"ListView\")\n                        .BindTo(Model)\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ListView``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.ListView`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView(Model)\n                        .Name(\"ListView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ListView``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.ListView`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataSourceViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ListView&lt;Order&gt;(\"orders\")\n                        .Name(\"ListView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileListView``1\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.MobileListView`1\"/> bound to the specified data item type.\n            </summary>\n            <example>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView&lt;Order&gt;()\n                        .Name(\"MobileListView\")\n                        .BindTo(Model)\n            %&gt;\n            </code>\n            </example>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileListView\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileListView\"/>.\n            </summary>\n            <example>        \n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView()\n                        .Name(\"MobileListView\")\n                        .Items(items =&gt; \n                        {\n                            items.Add().Text(\"Item\");\n                            items.AddLink().Text(\"Link Item\");\n                        })\n            %&gt;\n            </code>\n            </example> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileListView``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.MobileListView`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView(Model)\n                        .Name(\"MobileListView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileListView``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.MobileListView`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataSourceViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView&lt;Order&gt;(\"orders\")\n                        .Name(\"MobileListView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Splitter\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Splitter\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Splitter()\n                        .Name(\"Splitter\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TabStrip\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TabStrip\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TabStrip()\n                        .Name(\"TabStrip\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First\");\n                            items.Add().Text(\"Second\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DateTimePicker\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DateTimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePicker()\n                        .Name(\"DateTimePicker\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DatePicker\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DatePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePicker()\n                        .Name(\"DatePicker\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TimePicker\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimePicker()\n                        .Name(\"TimePicker\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Barcode\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Barcode\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Barcode()\n                        .For(\"Container\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Tooltip\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Tooltip\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Tooltip()\n                        .For(\"Container\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ColorPicker\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ColorPicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPicker()\n                        .Name(\"ColorPicker\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ColorPalette\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ColorPalette\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPalette()\n                        .Name(\"ColorPalette\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.FlatColorPicker\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.FlatColorPicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().FlatColorPicker()\n                        .Name(\"FlatColorPicker\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Calendar\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Calendar\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Calendar()\n                        .Name(\"Calendar\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.PanelBar\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.PanelBar\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PanelBar()\n                        .Name(\"PanelBar\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First\");\n                            items.Add().Text(\"Second\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RecurrenceEditor\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RecurrenceEditor\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RecurrenceEditor()\n                        .Name(\"recurrenceEditor\")\n                        .FirstWeekDay(0)\n                        .Timezone(\"Etc/UTC\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TimezoneEditor\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TimezoneEditor\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimezoneEditor()\n                        .Name(\"timezoneEditor\")\n                        .Value(\"Etc/UTC\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Scheduler``1\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Scheduler``1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Scheduler()\n                        .Name(\"Scheduler\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TreeView\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.TreeView\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TreeView()\n                        .Name(\"TreeView\")\n                        .Items(items =&gt; { /* add items here */ });\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.NumericTextBox\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.NumericTextBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox()\n                        .Name(\"NumericTextBox\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.NumericTextBox``1\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.NumericTextBox``1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBox&lt;double&gt;()\n                        .Name(\"NumericTextBox\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.CurrencyTextBox\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.CurrencyTextBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().CurrencyTextBox()\n                        .Name(\"CurrencyTextBox\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.PercentTextBox\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.PercentTextBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PercentTextBox()\n                        .Name(\"PercentTextBox\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.IntegerTextBox\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.IntegerTextBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().IntegerTextBox()\n                        .Name(\"IntegerTextBox\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Window\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Window\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.LinearGauge\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.LinearGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().LinearGauge()\n                       .Name(\"linearGauge\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RadialGauge\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RadialGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().RadialGauge()\n                       .Name(\"radialGauge\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DropDownList\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DropDownList\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownList()\n                        .Name(\"DropDownList\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ComboBox\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ComboBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBox()\n                        .Name(\"ComboBox\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.AutoComplete\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.AutoComplete\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoComplete()\n                        .Name(\"AutoComplete\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MultiSelect\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MultiSelect\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelect()\n                        .Name(\"MultiSelect\")\n                        .Items(items =&gt;\n                        {\n                            items.Add().Text(\"First Item\");\n                            items.Add().Text(\"Second Item\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Slider``1\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Slider\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Slider\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Slider\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Slider()\n                        .Name(\"Slider\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RangeSlider``1\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RangeSlider\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSlider()\n                        .Name(\"RangeSlider\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RangeSlider\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.RangeSlider\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSlider()\n                        .Name(\"RangeSlider\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ProgressBar\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.ProgressBar\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ProgressBar()\n                  .Name(\"progressBar\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Upload\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Upload\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Upload()\n                        .Name(\"Upload\")\n                        .Async(async =&gt; async\n                            .Save(\"ProcessAttachments\", \"Home\")\n                            .Remove(\"RemoveAttachment\", \"Home\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Button\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Button\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Button()\n                        .Name(\"Button1\");\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Chart``1\">\n            <summary>\n            Creates a <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Chart``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"data\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart(Model)\n                        .Name(\"Chart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Chart``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Chart`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Chart&lt;SalesData&gt;(\"sales\")\n                        .Name(\"Chart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Chart\">\n            <summary>\n            Creates a new unbound <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Chart\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Chart()\n                        .Name(\"Chart\")\n                        .Series(series =&gt; {\n                            series.Bar(new int[] { 1, 2, 3 }).Name(\"Total Sales\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.StockChart``1\">\n            <summary>\n            Creates a <see cref=\"T:Kendo.Mvc.UI.StockChart`1\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart()\n                        .Name(\"StockChart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.StockChart``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.StockChart`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"data\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart(Model)\n                        .Name(\"StockChart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.StockChart``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.StockChart`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().StockChart&lt;SalesData&gt;(\"sales\")\n                        .Name(\"StockChart\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.StockChart\">\n            <summary>\n            Creates a new unbound <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.StockChart\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().StockChart()\n                        .Name(\"StockChart\")\n                        .Series(series =&gt; {\n                            series.Bar(new int[] { 1, 2, 3 }).Name(\"Total Sales\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Sparkline``1\">\n            <summary>\n            Creates a <see cref=\"T:Kendo.Mvc.UI.Sparkline`1\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Sparkline``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Sparkline`1\"/> bound to the specified data source.\n            </summary>\n            <typeparam name=\"T\">The type of the data item</typeparam>\n            <param name=\"data\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline(Model)\n                        .Name(\"Sparkline\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Sparkline``1(System.String)\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Sparkline`1\"/> bound an item in ViewData.\n            </summary>\n            <typeparam name=\"T\">Type of the data item</typeparam>\n            <param name=\"dataViewDataKey\">The data source view data key.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Sparkline&lt;SalesData&gt;(\"sales\")\n                        .Name(\"Sparkline\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Sparkline\">\n            <summary>\n            Creates a new unbound <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Sparkline\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Sparkline()\n                        .Name(\"Sparkline\")\n                        .Series(series =&gt; {\n                            series.Bar(new int[] { 1, 2, 3 }).Name(\"Total Sales\");\n                        })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.QRCode\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.QRCode\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().QRCode()\n                        .Name(\"qrCode\")\n                        .Value(\"Hello World\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DeferredScripts(System.Boolean)\">\n            <summary>\n            Returns the initialization scripts for widgets set as deferred\n            </summary>\n            <param name=\"renderScriptTags\">Determines if the script should be rendered within a script tag</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.DeferredScriptsFor(System.String,System.Boolean)\">\n            <summary>\n            Returns the initialization scripts for the specified widget.\n            </summary>\n            <param name=\"name\">The name of the widget.</param>\n            <param name=\"renderScriptTags\">Determines if the script should be rendered within a script tag</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Map\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.Map\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Map()\n                        .Name(\"Map\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileActionSheet\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileActionSheet\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileActionSheet()\n                        .Name(\"MobileActionSheet\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileApplication\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileApplication\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileApplication()\n                        .Name(\"MobileApplication\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileBackButton\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileBackButton\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileBackButton()\n                        .Name(\"MobileBackButton\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileButton\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileButton\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileButton()\n                        .Name(\"MobileButton\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileButtonGroup\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileButtonGroup\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileButtonGroup()\n                        .Name(\"MobileButtonGroup\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileDetailButton\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileDetailButton\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileDetailButton()\n                        .Name(\"MobileDetailButton\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileDrawer\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileDrawer\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileDrawer()\n                        .Name(\"MobileDrawer\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileLayout\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileLayout\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileLayout()\n                        .Name(\"MobileLayout\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileModalView\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileModalView\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileModalView()\n                        .Name(\"MobileModalView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileNavBar\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileNavBar\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileNavBar()\n                        .Name(\"MobileNavBar\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobilePopOver\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobilePopOver\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobilePopOver()\n                        .Name(\"MobilePopOver\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileScrollView\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileScrollView\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileScrollView()\n                        .Name(\"MobileScrollView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileSplitView\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileSplitView\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileSplitView()\n                        .Name(\"MobileSplitView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileSwitch\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileSwitch\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileSwitch()\n                        .Name(\"MobileSwitch\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileTabStrip\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileTabStrip\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileTabStrip()\n                        .Name(\"MobileTabStrip\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileView\">\n            <summary>\n            Creates a <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory.MobileView\"/>\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileView()\n                        .Name(\"MobileView\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.EditorFor(System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Editor\"/> UI component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.NumericTextBoxFor``1(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{``0}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.NumericTextBoxFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().NumericTextBoxFor(m=&gt;m.NullableProperty) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.IntegerTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.Int32}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().IntegerTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.IntegerTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Int32}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().IntegerTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.CurrencyTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.Decimal}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().CurrencyTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.CurrencyTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Decimal}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().CurrencyTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.PercentTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.Double}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PercentTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.PercentTextBoxFor(System.Linq.Expressions.Expression{System.Func{`0,System.Double}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.NumericTextBox`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().PercentTextBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.DateTimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.DateTime}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.DateTimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.DateTimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.DateTime}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.DateTimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DateTimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.ColorPickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.String}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.ColorPicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ColorPickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.DatePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.DateTime}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.DatePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.DatePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.DateTime}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.DatePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DatePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.TimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.DateTime}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.TimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.DateTime}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.TimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.TimeSpan}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.TimePickerFor(System.Linq.Expressions.Expression{System.Func{`0,System.TimeSpan}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.TimePicker\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimePickerFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.DropDownListFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.DropDownList\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().DropDownListFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.ComboBoxFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.ComboBox\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().ComboBoxFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.AutoCompleteFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.AutoComplete\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().AutoCompleteFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.MultiSelectFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.MultiSelect\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MultiSelectFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.Slider`1\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().SliderFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{``0}}})\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor(System.Linq.Expressions.Expression{System.Func{`0,System.Double}})\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().SliderFor(m=&gt;m.NullableProperty) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor(System.Linq.Expressions.Expression{System.Func{`0,System.Double}})\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().SliderFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{System.Double}}})\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.SliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().SliderFor(m=&gt;m.NullableProperty) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RangeSliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0[]}})\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RangeSliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0[]}})\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSliderFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RangeSliderFor(System.Linq.Expressions.Expression{System.Func{`0,System.Double[]}})\">\n            <summary>\n            Creates a new <see cref=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RangeSliderFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0[]}})\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RangeSliderFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.LinearGaugeFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.LinearGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().LinearGaugeFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.LinearGaugeFor``1(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{``0}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.LinearGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().LinearGaugeFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RadialGaugeFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.RadialGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RadialGaugeFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RadialGaugeFor``1(System.Linq.Expressions.Expression{System.Func{`0,System.Nullable{``0}}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.RadialGauge\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RadialGaugeFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.RecurrenceEditorFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.RecurrenceEditor\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().RecurrenceEditorFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WidgetFactory`1.TimezoneEditorFor``1(System.Linq.Expressions.Expression{System.Func{`0,``0}})\">\n            <summary>\n            Creates a new <see cref=\"T:Kendo.Mvc.UI.TimezoneEditor\"/>.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().TimezoneEditorFor(m=&gt;m.Property) %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WindowPositionSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Window position settings\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowPositionSettingsBuilder.Top(System.Int32)\">\n            <summary>\n             Sets the top position.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowPositionSettingsBuilder.Left(System.Int32)\">\n            <summary>\n             Sets the left position.\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WindowActionsBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"P:Kendo.Mvc.UI.Window.Actions\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.#ctor(Kendo.Mvc.UI.IWindowButtonsContainer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Fluent.WindowActionsBuilder\"/> class.\n            </summary>\n            <param name=\"container\">The <see cref=\"T:Kendo.Mvc.UI.IWindowButton\"/> instance that is to be configured</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Close\">\n            <summary>\n            Configures the window to show a close button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Close())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Maximize\">\n            <summary>\n            Configures the window to show a maximize button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Maximize())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Minimize\">\n            <summary>\n            Configures the window to show a minimize button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Maximize())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Refresh\">\n            <summary>\n            Configures the window to show a refresh button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Refresh())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Pin\">\n            <summary>\n            Configures the window to show a pin button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Pin())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Custom(System.String)\">\n            <summary>\n            Configures the window to show a refresh button.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Custom(\"menu\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowActionsBuilder.Clear\">\n            <summary>\n            Configures the window to show no buttons in its titlebar.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions => actions.Clear())\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WindowResizingSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Window resizing settings\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WindowEventBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the Window events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Open(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Open(\"onOpen\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Open(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Open client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Open(\"onOpen\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Activate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Activate client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Activate(\"onActivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Activate(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Activate client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Activate(\"onActivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Deactivate(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Deactivate client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Deactivate(\"onDeactivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Deactivate(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Deactivate client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Deactivate(\"onDeactivate\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Close(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Close(\"onClose\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Close(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Close client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Close(\"onClose\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.DragStart(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragStart client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.DragStart(\"onDragStart\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.DragStart(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragStart client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.DragStart(\"onDragStart\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.DragEnd(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragEnd client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.DragEnd(\"onDragEnd\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.DragEnd(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the DragEnd client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.DragEnd(\"onDragEnd\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Resize(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Resize client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Resize(\"onResize\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Resize(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Resize client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Resize(\"onResize\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Refresh(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Refresh client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Refresh(\"onRefresh\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Refresh(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Refresh client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Refresh(\"onRefresh\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Error(System.String)\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Error(\"onError\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowEventBuilder.Error(System.Func{System.Object,System.Object})\">\n            <summary>\n             Defines the name of the JavaScript function that will handle the the Error client-side event.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the event.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events => events.Error(\"onError\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.WindowBuilder\">\n            <summary>\n            Defines the fluent interface for configuring the <see cref=\"T:Kendo.Mvc.UI.Window\"/> component.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Title(System.Boolean)\">\n            <summary>\n            Allows title to be shown / hidden\n            </summary>\n            <param name=\"show\">Whether the window title will be visible</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Title(System.String)\">\n            <summary>\n            Sets title, which appears in the header of the window.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.AppendTo(System.String)\">\n            <summary>\n            Defines a selector for the element to which the Window will be appended. By default this is the page body.\n            </summary>\n            <param name=\"selector\">A selector of the Window container</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the window should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().Window()\n                       .Name(\"Window\")\n                       .Content(() => \n                       { \n                          %&gt;\n                                &lt;strong&gt;Window content&lt;/strong&gt;\n                          &lt;% \n                       })\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the window should display\n            </summary>\n            <param name=\"value\">The Razor inline template</param>\n            <example>\n            <code lang=\"CS\">\n             @(Html.Kendo().Window()\n                       .Name(\"Window\")\n                       .Content(@&lt;strong&gt; Hello World!&lt;/strong&gt;))\n            </code>        \n            </example>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the item should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Content(\"&lt;strong&gt; First Item Content&lt;/strong&gt;\")\n            %&gt;\n            </code>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.LoadContentFrom(System.Web.Routing.RouteValueDictionary)\">\n            <summary>\n            Sets the Url, which will be requested to return the content. \n            </summary>\n            <param name=\"routeValues\">The route values of the Action method.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                    .Name(\"Window\")\n                    .LoadContentFrom(MVC.Home.Index().GetRouteValueDictionary());\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.LoadContentFrom(System.String,System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the content. \n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .LoadContentFrom(\"AjaxView_OpenSource\", \"Window\")\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.LoadContentFrom(System.String,System.String,System.Object)\">\n            <summary>\n            Sets the Url, which will be requested to return the content.\n            </summary>\n            <param name=\"actionName\">The action name.</param>\n            <param name=\"controllerName\">The controller name.</param>\n            <param name=\"routeValues\">Route values.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .LoadContentFrom(\"AjaxView_OpenSource\", \"Window\", new { id = 10})\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.LoadContentFrom(System.String)\">\n            <summary>\n            Sets the Url, which will be requested to return the content.\n            </summary>\n            <param name=\"value\">The url.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .LoadContentFrom(Url.Action(\"AjaxView_OpenSource\", \"Window\"))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.WindowEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"clientEventsAction\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Events(events =>\n                            events.Open(\"onOpen\").Close(\"onClose\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Resizable\">\n            <summary>\n            Enables windows resizing.\n            </summary>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Resizable()\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Resizable(System.Action{Kendo.Mvc.UI.Fluent.WindowResizingSettingsBuilder})\">\n            <summary>\n            Configures the resizing ability of the window.\n            </summary>\n            <param name=\"resizingSettingsAction\">Resizing settings action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Resizable(settings =>\n                            settings.Enabled(true).MaxHeight(500).MaxWidth(500)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Actions(System.Action{Kendo.Mvc.UI.Fluent.WindowActionsBuilder})\">\n            <summary>\n            Configures the window buttons.\n            </summary>\n            <param name=\"actionsBuilderAction\">The buttons configuration action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Actions(actions =>\n                            actions.Close()\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Width(System.Int32)\">\n            <summary>\n            Sets the width of the window.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Height(System.Int32)\">\n            <summary>\n            Sets the height of the window.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Position(System.Action{Kendo.Mvc.UI.Fluent.WindowPositionSettingsBuilder})\">\n            <summary>\n            Configures the position of the window.\n            </summary>\n            <param name=\"positionSettingsAction\">Position settings action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Position(settings =>\n                            settings.Top(100).Left(100)\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Visible(System.Boolean)\">\n            <summary>\n            Sets whether the window should be rendered visible.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Scrollable(System.Boolean)\">\n            <summary>\n            Sets whether the window should have scrollbars.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Animation(System.Boolean)\">\n            <summary>\n            Configures the animation effects of the window.\n            </summary>\n            <param name=\"enable\">Whether the component animation is enabled.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Animation(false)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Animation(System.Action{Kendo.Mvc.UI.Fluent.PopupAnimationBuilder})\">\n            <summary>\n            Configures the animation effects of the panelbar.\n            </summary>\n            <param name=\"animationAction\">The action that configures the animation.</param>\n            <example>\n            <code lang=\"CS\">\n            &lt;%= Html.Kendo().Window()\n                        .Name(\"Window\")\n                        .Animation(animation => animation.Expand)\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Modal(System.Boolean)\">\n            <summary>\n            Sets whether the window should be modal or not.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Draggable\">\n            <summary>\n            Sets whether the window can be moved.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Draggable(System.Boolean)\">\n            <summary>\n            Sets whether the window can be moved.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Pinned\">\n            <summary>\n            Sets whether the window is pinned.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.AutoFocus(System.Boolean)\">\n            <summary>\n            Sets whether the window automatically gains focus when opened.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Pinned(System.Boolean)\">\n            <summary>\n            Sets whether the window is pinned.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.WindowBuilder.Iframe(System.Boolean)\">\n            <summary>\n            Explicitly specifies whether the loaded window content will be rendered as an iframe or in-line\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.IPathResolver.Resolve(System.String)\">\n            <summary>\n            Returns the physical path for the specified virtual path.\n            </summary>\n            <param name=\"virtualPath\">The virtual path.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.Merge(System.Collections.Generic.IDictionary{System.String,System.Object},System.String,System.Object,System.Boolean)\">\n            <summary>\n            Merges the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n            <param name=\"replaceExisting\">if set to <c>true</c> [replace existing].</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.AppendInValue(System.Collections.Generic.IDictionary{System.String,System.Object},System.String,System.String,System.Object)\">\n            <summary>\n            Appends the in value.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"key\">The key.</param>\n            <param name=\"separator\">The separator.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.PrependInValue(System.Collections.Generic.IDictionary{System.String,System.Object},System.String,System.String,System.Object)\">\n            <summary>\n            Appends the specified value at the beginning of the existing value\n            </summary>\n            <param name=\"instance\"></param>\n            <param name=\"key\"></param>\n            <param name=\"separator\"></param>\n            <param name=\"value\"></param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.ToAttributeString(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Toes the attribute string.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.Merge(System.Collections.Generic.IDictionary{System.String,System.Object},System.Collections.Generic.IDictionary{System.String,System.Object},System.Boolean)\">\n            <summary>\n            Merges the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"from\">From.</param>\n            <param name=\"replaceExisting\">if set to <c>true</c> [replace existing].</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.Merge(System.Collections.Generic.IDictionary{System.String,System.Object},System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Merges the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"from\">From.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.Merge(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object,System.Boolean)\">\n            <summary>\n            Merges the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"values\">The values.</param>\n            <param name=\"replaceExisting\">if set to <c>true</c> [replace existing].</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.DictionaryExtensions.Merge(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object)\">\n            <summary>\n            Merges the specified instance.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <param name=\"values\">The values.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.HttpContextBaseExtensions.RequestContext(System.Web.HttpContextBase)\">\n            <summary>\n            Requests the context.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.HttpContextBaseExtensions.IsMono(System.Web.HttpContextBase)\">\n            <summary>\n            Gets a value indicating whether we're running under Mono.\n            </summary>\n            <value><c>true</c> if Mono; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.HttpContextBaseExtensions.IsLinux(System.Web.HttpContextBase)\">\n            <summary>\n            Gets a value indicating whether we're running under Linux or a Unix variant.\n            </summary>\n            <value><c>true</c> if Linux/Unix; otherwise, <c>false</c>.</value>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.PathResolver.Resolve(System.String)\">\n            <summary>\n            Returns the physical path for the specified virtual path.\n            </summary>\n            <param name=\"virtualPath\">The virtual path.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.ReaderWriterLockSlimExtensions.ReadAndWrite(System.Threading.ReaderWriterLockSlim)\">\n            <summary>\n            Starts thread safe read write code block.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.ReaderWriterLockSlimExtensions.Read(System.Threading.ReaderWriterLockSlim)\">\n            <summary>\n            Starts thread safe read code block.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.ReaderWriterLockSlimExtensions.Write(System.Threading.ReaderWriterLockSlim)\">\n            <summary>\n            Starts thread safe write code block.\n            </summary>\n            <param name=\"instance\">The instance.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.StringExtensions.FormatWith(System.String,System.Object[])\">\n            <summary>\n            Replaces the format item in a specified System.String with the text equivalent of the value of a corresponding System.Object instance in a specified array.\n            </summary>\n            <param name=\"instance\">A string to format.</param>\n            <param name=\"args\">An System.Object array containing zero or more objects to format.</param>\n            <returns>A copy of format in which the format items have been replaced by the System.String equivalent of the corresponding instances of System.Object in args.</returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.StringExtensions.IsCaseSensitiveEqual(System.String,System.String)\">\n            <summary>\n            Determines whether this instance and another specified System.String object have the same value.\n            </summary>\n            <param name=\"instance\">The string to check equality.</param>\n            <param name=\"comparing\">The comparing with string.</param>\n            <returns>\n            <c>true</c> if the value of the comparing parameter is the same as this string; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Extensions.StringExtensions.IsCaseInsensitiveEqual(System.String,System.String)\">\n            <summary>\n            Determines whether this instance and another specified System.String object have the same value.\n            </summary>\n            <param name=\"instance\">The string to check equality.</param>\n            <param name=\"comparing\">The comparing with string.</param>\n            <returns>\n            <c>true</c> if the value of the comparing parameter is the same as this string; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.Resources.Exceptions\">\n            <summary>\n              A strongly-typed resource class, for looking up localized strings, etc.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ResourceManager\">\n            <summary>\n              Returns the cached ResourceManager instance used by this class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.Culture\">\n            <summary>\n              Overrides the current thread's CurrentUICulture property for all\n              resource lookups using this strongly typed resource class.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ArrayCannotBeEmpty\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; array cannot be empty..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.BatchUpdatesRequireInCellMode\">\n            <summary>\n              Looks up a localized string similar to You must use InCell edit mode for batch updates..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.BatchUpdatesRequireUpdate\">\n            <summary>\n              Looks up a localized string similar to The Update data binding setting is required for batch updates. Please specify the Update action or url in the DataBinding configuration..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotBeNegative\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; cannot be negative..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotBeNegativeOrZero\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; cannot be negative or zero..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotBeNull\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; cannot be null..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotBeNullOrEmpty\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; cannot be null or empty..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotFindPropertyToSortBy\">\n            <summary>\n              Looks up a localized string similar to Cannot find a public property of primitive type to sort by..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotHaveMoreOneColumnInOrderWhenSortModeIsSetToSingleColumn\">\n            <summary>\n              Looks up a localized string similar to Cannot have more one column in order when sort mode is set to single column..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotRouteToClassNamedController\">\n            <summary>\n              Looks up a localized string similar to Cannot route to class named &apos;Controller&apos;..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotSetAutoBindIfBoundDuringInitialization\">\n            <summary>\n              Looks up a localized string similar to Cannot set AutoBind if widget is populated during initialization.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotUseAjaxAndWebServiceAtTheSameTime\">\n            <summary>\n              Looks up a localized string similar to Cannot use Ajax and WebService binding at the same time..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotUsePushStateWithServerNavigation\">\n            <summary>\n              Looks up a localized string similar to Cannot use PushState with server navigation..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotUseTemplatesInAjaxOrWebService\">\n            <summary>\n              Looks up a localized string similar to Cannot use only server templates in Ajax or WebService binding mode. Please specify a client template as well..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CannotUseVirtualScrollWithServerBinding\">\n            <summary>\n              Looks up a localized string similar to Cannot use Virtual Scroll with Server binding..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CollectionCannotBeEmpty\">\n            <summary>\n              Looks up a localized string similar to &quot;{0}&quot; collection cannot be empty..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ControllerNameAmbiguousWithoutRouteUrl\">\n             <summary>\n               Looks up a localized string similar to Multiple types were found that match the controller named &apos;{0}&apos;. This can happen if the route that services this request does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the &apos;MapRoute&apos; method that takes a &apos;namespaces&apos; parameter.\n            \n            The request for &apos;{0}&apos; has found the following matching controllers:{1}.\n             </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ControllerNameAmbiguousWithRouteUrl\">\n             <summary>\n               Looks up a localized string similar to Multiple types were found that match the controller named &apos;{0}&apos;. This can happen if the route that services this request (&apos;{1}&apos;) does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the &apos;MapRoute&apos; method that takes a &apos;namespaces&apos; parameter.\n            \n            The request for &apos;{0}&apos; has found the following matching controllers:{2}.\n             </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ControllerNameMustEndWithController\">\n            <summary>\n              Looks up a localized string similar to Controller name must end with &apos;Controller&apos;..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.CustomCommandRoutesWithAjaxBinding\">\n            <summary>\n              Looks up a localized string similar to Custom command routes is available only for server binding..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.DataKeysEmpty\">\n            <summary>\n              Looks up a localized string similar to There is no DataSource Model Id property specified..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.DataTableInLineEditingWithCustomEditorTemplates\">\n            <summary>\n              Looks up a localized string similar to DataTable InLine editing and custom EditorTemplate per column is not supported.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.DataTablePopUpTemplate\">\n            <summary>\n              Looks up a localized string similar to You must specify TemplateName when PopUp edit mode is enabled with DataTable binding.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.DeleteCommandRequiresDelete\">\n            <summary>\n              Looks up a localized string similar to The Delete data binding setting is required by the delete command. Please specify the Delete action or url in the DataBinding configuration..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.EditCommandRequiresUpdate\">\n            <summary>\n              Looks up a localized string similar to The Update data binding setting is required by the edit command. Please specify the Update action or url in the DataBinding configuration..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.FirstPropertyShouldNotBeBiggerThenSecondProperty\">\n            <summary>\n              Looks up a localized string similar to {0} should not be bigger then {1}..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.GroupWithSpecifiedNameAlreadyExists\">\n            <summary>\n              Looks up a localized string similar to Group with specified name already exists..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.GroupWithSpecifiedNameAlreadyExistsPleaseSpecifyADifferentName\">\n            <summary>\n              Looks up a localized string similar to Group with specified name &quot;{0}&quot; already exists. Please specify a different name..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.GroupWithSpecifiedNameDoesNotExistInAssetTypeOfSharedWebAssets\">\n            <summary>\n              Looks up a localized string similar to Group with &quot;{0}&quot; does not exist in {1} SharedWebAssets..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.GroupWithSpecifiedNameDoesNotExistPleaseMakeSureYouHaveSpecifiedACorrectName\">\n            <summary>\n              Looks up a localized string similar to Group with specified name &quot;{0}&quot; does not exist. Please make sure you have specified a correct name..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.InCellModeNotSupportedInServerBinding\">\n            <summary>\n              Looks up a localized string similar to InCell editing mode is not supported in server binding mode.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.InCellModeNotSupportedWithRowTemplate\">\n            <summary>\n              Looks up a localized string similar to InCell editing mode is not supported when ClientRowTemplate is used.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.IndexOutOfRange\">\n            <summary>\n              Looks up a localized string similar to Provided index is out of range..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.InsertCommandRequiresInsert\">\n            <summary>\n              Looks up a localized string similar to The Insert data binding setting is required by the insert command. Please specify the Insert action or url in the DataBinding configuration..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ItemWithSpecifiedSourceAlreadyExists\">\n            <summary>\n              Looks up a localized string similar to Item with specified source already exists..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.LocalGroupWithSpecifiedNameAlreadyExists\">\n            <summary>\n              Looks up a localized string similar to Local group with name &quot;{0}&quot; already exists..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.LocalizationKeyNotFound\">\n            <summary>\n              Looks up a localized string similar to The key with the following name &quot;{0}&quot; was not found. Please update all localization files..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.MemberExpressionRequired\">\n            <summary>\n              Looks up a localized string similar to Bound columns require a field or property access expression..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.MinPropertyMustBeLessThenMaxProperty\">\n            <summary>\n              Looks up a localized string similar to {0} should be less than {1}..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.NameCannotBeBlank\">\n            <summary>\n              Looks up a localized string similar to Name cannot be blank..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.NameCannotContainSpaces\">\n            <summary>\n              Looks up a localized string similar to Name cannot contain spaces..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.NoneIsOnlyUsedForInternalPurpose\">\n            <summary>\n              Looks up a localized string similar to &quot;None&quot; is only used for internal purpose..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.OnlyOneScriptRegistrarIsAllowedInASingleRequest\">\n            <summary>\n              Looks up a localized string similar to Only one ScriptRegistrar is allowed in a single request..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.OnlyOneStyleSheetRegistrarIsAllowedInASingleRequest\">\n            <summary>\n              Looks up a localized string similar to Only one StyleSheetRegistrar is allowed in a single request..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.OnlyPropertyAndFieldExpressionsAreSupported\">\n            <summary>\n              Looks up a localized string similar to Only property and field expressions are supported.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.Pager_Of\">\n            <summary>\n              Looks up a localized string similar to of {0}.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.PagingMustBeEnabledToUsePageOnScroll\">\n            <summary>\n              Looks up a localized string similar to Paging must be enabled to use PageOnScroll..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.PropertyMustBeBiggerThenZero\">\n            <summary>\n              Looks up a localized string similar to The {0} must be bigger then 0..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.PropertyMustBePositiveNumber\">\n            <summary>\n              Looks up a localized string similar to {0} must be positive number..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.PropertyShouldBeInRange\">\n            <summary>\n              Looks up a localized string similar to {0} should be bigger than {1} and less then {2}.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.Rtl\">\n            <summary>\n              Looks up a localized string similar to The &quot;{0}&quot; class is no longer supported. To enable RTL support you must include telerik.rtl.css and apply the &quot;t-rtl&quot; class to a parent HTML element or the &lt;body&gt;..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ScrollingMustBeEnabledToUsePageOnScroll\">\n            <summary>\n              Looks up a localized string similar to Scrolling must be enabled to use PageOnScroll..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.SiteMapShouldBeDefinedInViewData\">\n            <summary>\n              Looks up a localized string similar to You must have SiteMap defined with key &quot;{0}&quot; in ViewData dictionary..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.SourceMustBeAVirtualPathWhichShouldStartsWithTileAndSlash\">\n            <summary>\n              Looks up a localized string similar to Source must be a virtual path which should starts with &quot;~/&quot;.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.SpecifiedFileDoesNotExist\">\n            <summary>\n              Looks up a localized string similar to Specified file does not exist: &quot;{0}&quot;..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.StringNotCorrectDate\">\n            <summary>\n              Looks up a localized string similar to Passed string cannot be parsed to DateTime object..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.StringNotCorrectTimeSpan\">\n            <summary>\n              Looks up a localized string similar to Passed string cannot be parsed to TimeSpan object..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.TheSpecifiedMethodIsNotAnActionMethod\">\n            <summary>\n              Looks up a localized string similar to The specified method is not an action method..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.TimeOutOfRange\">\n            <summary>\n              Looks up a localized string similar to Time should be bigger than MinTime and less than MaxTime..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.TooltipContainerShouldBeSet\">\n            <summary>\n              Looks up a localized string similar to You should set Tooltip container. Tooltip.For(container).\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.UrlAndContentUrlCannotBeSet\">\n            <summary>\n              Looks up a localized string similar to You cannot set Url and ContentUrl at the same time..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.ValueNotValidForProperty\">\n            <summary>\n              Looks up a localized string similar to The value &apos;{0}&apos; is invalid..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.WebServiceUrlRequired\">\n            <summary>\n              Looks up a localized string similar to The Url of the WebService must be set.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouCannotAddMoreThanOnceColumnWhenSortModeIsSetToSingle\">\n            <summary>\n              Looks up a localized string similar to You cannot add more than once column when sort mode is set to single column..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouCannotCallBindToWithoutCustomBinding\">\n            <summary>\n              Looks up a localized string similar to You cannot use non generic BindTo overload without EnableCustomBinding set to true.\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouCannotCallRenderMoreThanOnce\">\n            <summary>\n              Looks up a localized string similar to You cannot call render more than once..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouCannotCallStartMoreThanOnce\">\n            <summary>\n              Looks up a localized string similar to You cannot call Start more than once..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouCannotConfigureASharedWebAssetGroup\">\n            <summary>\n              Looks up a localized string similar to You cannot configure a shared web asset group..\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.Resources.Exceptions.YouMustHaveToCallStartPriorCallingThisMethod\">\n            <summary>\n              Looks up a localized string similar to You must have to call Start prior calling this method..\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.IUrlResolver.Resolve(System.String)\">\n            <summary>\n            Returns the relative path for the specified virtual path.\n            </summary>\n            <param name=\"url\">The URL.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.Infrastructure.Implementation.UrlResolver.Resolve(System.String)\">\n            <summary>\n            Returns the relative path for the specified virtual path.\n            </summary>\n            <param name=\"url\">The URL.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileActionSheet for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.#ctor(Kendo.Mvc.UI.MobileActionSheet)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileActionSheet\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.Cancel(System.String)\">\n            <summary>\n            The text of the cancel button.\n            </summary>\n            <param name=\"value\">The value that configures the cancel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.Title(System.String)\">\n            <summary>\n            Specifies the title of the actionsheet\n            </summary>\n            <param name=\"value\">The value that configures the title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.Popup(System.Action{Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder})\">\n            <summary>\n            The popup configuration options (tablet only)\n            </summary>\n            <param name=\"configurator\">The action that configures the popup.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileActionSheetItemFactory})\">\n            <summary>\n            Contains the items of the actionsheet widget\n            </summary>\n            <param name=\"configurator\">The action that configures the items.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileActionSheetEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileActionSheet()\n                        .Name(\"MobileActionSheet\")\n                        .Events(events => events\n                            .Open(\"onOpen\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileActionSheetItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileActionSheet for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileActionSheetPopupSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder.Height(System.String)\">\n            <summary>\n            The height of the popup in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder.Width(System.String)\">\n            <summary>\n            The width of the popup in pixels\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder.Height(System.Int32)\">\n            <summary>\n            The height of the popup in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder.Width(System.Int32)\">\n            <summary>\n            The width of the popup in pixels\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetPopupSettingsBuilder.Direction(Kendo.Mvc.UI.MobilePopupDirection)\">\n            <summary>\n            The direction to which the popup will expand, relative to the target that opened it\n            </summary>\n            <param name=\"value\">The value that configures the direction.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileActionSheetEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileActionSheet for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetEventBuilder.Close(System.String)\">\n            <summary>\n            Fires when the ActionSheet is closed.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the close event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetEventBuilder.Open(System.String)\">\n            <summary>\n            Fires when the ActionSheet is opened.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the open event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileActionSheetHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileActionSheet)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileActionSheetHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileActionSheet component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileActionSheetHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileActionSheet markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileActionSheetItem.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileActionSheetItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileActionSheetItem settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetItemBuilder.Action(System.String)\">\n            <summary>\n            Specifies the name of the handler that will be executed when the item is clicked\n            </summary>\n            <param name=\"value\">The value that configures the action.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetItemBuilder.Text(System.String)\">\n            <summary>\n            Specifies the text of the item\n            </summary>\n            <param name=\"value\">The value that configures the text.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetItemBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileActionSheetItemBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileButton for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.#ctor(Kendo.Mvc.UI.MobileButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileButton\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Enable(System.Boolean)\">\n            <summary>\n            If set to false the widget will be disabled and will not allow the user to click it. The widget is enabled by default.\n            </summary>\n            <param name=\"value\">The value that configures the enable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Icon(System.String)\">\n            <summary>\n            The icon of the button. It can be either one of the built-in icons, or a custom one.\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Url(System.String)\">\n            <summary>\n            Specifies the url for remote view or id of the view to be loaded (prefixed with #, like an anchor)\n            </summary>\n            <param name=\"value\">The value that configures the url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Text(System.String)\">\n            <summary>\n            Specifies the text of the button\n            </summary>\n            <param name=\"value\">The value that configures the text.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Transition(System.String)\">\n            <summary>\n            Specifies the Pane transition\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Target(System.String)\">\n            <summary>\n            Specifies the id of target Pane or `_top` for application level Pane\n            </summary>\n            <param name=\"value\">The value that configures the target.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.ActionsheetContext(System.String)\">\n            <summary>\n            This value will be available when the action callback of ActionSheet item is executed\n            </summary>\n            <param name=\"value\">The value that configures the actionsheetcontext.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Align(Kendo.Mvc.UI.MobileButtonAlign)\">\n            <summary>\n            Use the align data attribute to specify the elements position inside the NavBar. By default, elements without any align are centered.\n            </summary>\n            <param name=\"value\">The value that configures the align.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Rel(Kendo.Mvc.UI.MobileButtonRel)\">\n            <summary>\n            Specifies the widget to be open when is tapped (the href must be set too)\n            </summary>\n            <param name=\"value\">The value that configures the rel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Badge(System.String)\">\n            <summary>\n            Specifies the value shown in badge icon\n            </summary>\n            <param name=\"value\">The value that configures the badge.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Url(System.Action{Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder})\">\n            <summary>\n            Specifies the url for remote view to be loaded\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Url(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Url(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileButtonEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileButton()\n                        .Name(\"MobileButton\")\n                        .Events(events => events\n                            .Click(\"onClick\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileButton for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonEventBuilder.Click(System.String)\">\n            <summary>\n            Fires when the user taps the button.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the click event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileButtonHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileButtonHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileButton component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileButtonHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileButton markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileButtonGroup for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder.#ctor(Kendo.Mvc.UI.MobileButtonGroup)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileButtonGroup\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder.Index(System.Int32)\">\n            <summary>\n            Defines the initially selected Button (zero based index).\n            </summary>\n            <param name=\"value\">The value that configures the index.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder.SelectOn(System.String)\">\n            <summary>\n            Sets the DOM event used to select the button. Accepts \"up\" as an alias for touchend, mouseup and MSPointerUp vendor specific events.By default, buttons are selected immediately after the user presses the button (on touchstart or mousedown or MSPointerDown, depending on the mobile device).\n            However, if the widget is placed in a scrollable view, the user may accidentally press the button when scrolling. In such cases, it is recommended to set this option to \"up\".\n            </summary>\n            <param name=\"value\">The value that configures the selecton.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileButtonGroupItemFactory})\">\n            <summary>\n            Contains the items of the button group widget\n            </summary>\n            <param name=\"configurator\">The action that configures the items.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileButtonGroupEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileButtonGroup()\n                        .Name(\"MobileButtonGroup\")\n                        .Events(events => events\n                            .Select(\"onSelect\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonGroupEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileButtonGroup for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupEventBuilder.Select(System.String)\">\n            <summary>\n            Fires when a Button is selected.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the select event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileButtonGroupHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileButtonGroup)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileButtonGroupHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileButtonGroup component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileButtonGroupHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileButtonGroup markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileButtonGroup for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileButtonGroupItem.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileButtonGroupItem settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder.Icon(System.String)\">\n            <summary>\n            The icon of the button. It can be either one of the built-in icons, or a custom one\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder.Text(System.String)\">\n            <summary>\n            Specifies the text of the item\n            </summary>\n            <param name=\"value\">The value that configures the text.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder.Badge(System.String)\">\n            <summary>\n            Specifies the value shown in badge icon\n            </summary>\n            <param name=\"value\">The value that configures the badge.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileButtonGroupItemBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileBackButton for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.#ctor(Kendo.Mvc.UI.MobileBackButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileBackButton\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Icon(System.String)\">\n            <summary>\n            The icon of the button. It can be either one of the built-in icons, or a custom one\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Text(System.String)\">\n            <summary>\n            Specifies the text of the button\n            </summary>\n            <param name=\"value\">The value that configures the text.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Url(System.String)\">\n            <summary>\n            Specifies the url for remote view or id of the view to be loaded (prefixed with #, like an anchor)\n            </summary>\n            <param name=\"value\">The value that configures the url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Target(System.String)\">\n            <summary>\n            Specifies the id of target Pane or `_top` for application level Pane\n            </summary>\n            <param name=\"value\">The value that configures the target.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Align(Kendo.Mvc.UI.MobileButtonAlign)\">\n            <summary>\n            Use the align data attribute to specify the elements position inside the NavBar. By default, elements without any align are centered.\n            </summary>\n            <param name=\"value\">The value that configures the align.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Url(System.Action{Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder})\">\n            <summary>\n            Specifies the url for remote view to be loaded\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Url(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Url(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileBackButtonEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileBackButton()\n                        .Name(\"MobileBackButton\")\n                        .Events(events => events\n                            .Click(\"onClick\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileBackButtonEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileBackButton for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileBackButtonEventBuilder.Click(System.String)\">\n            <summary>\n            Fires when the user taps the button.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the click event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileBackButtonHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileBackButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileBackButtonHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileBackButton component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileBackButtonHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileBackButton markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileSwitch for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.#ctor(Kendo.Mvc.UI.MobileSwitch)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileSwitch\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.Checked(System.Boolean)\">\n            <summary>\n            The checked state of the widget.\n            </summary>\n            <param name=\"value\">The value that configures the checked.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.Enable(System.Boolean)\">\n            <summary>\n            If set to false the widget will be disabled and will not allow the user to change its checked state. The widget is enabled by default.\n            </summary>\n            <param name=\"value\">The value that configures the enable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.OffLabel(System.String)\">\n            <summary>\n            The OFF label.\n            </summary>\n            <param name=\"value\">The value that configures the offlabel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.OnLabel(System.String)\">\n            <summary>\n            The ON label.\n            </summary>\n            <param name=\"value\">The value that configures the onlabel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileSwitchEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileSwitch()\n                        .Name(\"MobileSwitch\")\n                        .Events(events => events\n                            .Change(\"onChange\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSwitchEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileSwitch for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSwitchEventBuilder.Change(System.String)\">\n            <summary>\n            Fires when the state of the widget changes\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the change event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileSwitchHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileSwitch)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileSwitchHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileSwitch component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileSwitchHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileSwitch markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileTabStripBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileTabStrip for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripBuilder.#ctor(Kendo.Mvc.UI.MobileTabStrip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileTabStrip\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripBuilder.SelectedIndex(System.Int32)\">\n            <summary>\n            The index of the initially selected tab.\n            </summary>\n            <param name=\"value\">The value that configures the selectedindex.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileTabStripItemFactory})\">\n            <summary>\n            Contains the items of the tabstrip widget\n            </summary>\n            <param name=\"configurator\">The action that configures the items.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileTabStripEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileTabStrip()\n                        .Name(\"MobileTabStrip\")\n                        .Events(events => events\n                            .Select(\"onSelect\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileTabStripItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileTabStrip for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileTabStripItem.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileTabStripItem settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Url(System.String)\">\n            <summary>\n            Specifies the url or id of the view which will be loaded\n            </summary>\n            <param name=\"value\">The value that configures the url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Icon(System.String)\">\n            <summary>\n            The icon of the button. It can be either one of the built-in icons, or a custom one\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Text(System.String)\">\n            <summary>\n            Specifies the text of the item\n            </summary>\n            <param name=\"value\">The value that configures the text.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Target(System.String)\">\n            <summary>\n            Specifies the id of target Pane or `_top` for application level Pane\n            </summary>\n            <param name=\"value\">The value that configures the target.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.ActionsheetContext(System.String)\">\n            <summary>\n            This value will be available when the action callback of ActionSheet item is executed\n            </summary>\n            <param name=\"value\">The value that configures the actionsheetcontext.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Badge(System.String)\">\n            <summary>\n            Specifies the value shown in badge icon\n            </summary>\n            <param name=\"value\">The value that configures the badge.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Rel(Kendo.Mvc.UI.MobileButtonRel)\">\n            <summary>\n            Specifies the widget to be open when is tapped (the href must be set too)\n            </summary>\n            <param name=\"value\">The value that configures the rel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Url(System.Action{Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder})\">\n            <summary>\n            Specifies the url for remote view to be loaded\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Url(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripItemBuilder.Url(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileTabStripEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileTabStrip for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileTabStripEventBuilder.Select(System.String)\">\n            <summary>\n            Fires when tab is selected.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the select event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileTabStripHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileTabStrip)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileTabStripHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileTabStrip component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileTabStripHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileTabStrip markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileViewBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileView for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.#ctor(Kendo.Mvc.UI.MobileView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileView\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Reload(System.Boolean)\">\n            <summary>\n            Applicable to remote views only. If set to true, the remote view contents will be reloaded from the server (using Ajax) each time the view is navigated to.\n            </summary>\n            <param name=\"value\">The value that configures the reload.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Stretch(System.Boolean)\">\n            <summary>\n            If set to true, the view will stretch its child contents to occupy the entire view, while disabling kinetic scrolling.\n            Useful if the view contains an image or a map.\n            </summary>\n            <param name=\"value\">The value that configures the stretch.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Title(System.String)\">\n            <summary>\n            The text to display in the NavBar title (if present) and the browser title.\n            </summary>\n            <param name=\"value\">The value that configures the title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.UseNativeScrolling(System.Boolean)\">\n            <summary>\n            If set to true, the view will use the native scrolling available in the current platform. This should help with form issues on some platforms (namely Android and WP8).\n            Native scrolling is only enabled on platforms that support it: iOS &gt; 5+, Android &gt; 3+, WP8. BlackBerry devices do support it, but the native scroller is flaky.\n            </summary>\n            <param name=\"value\">The value that configures the usenativescrolling.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Zoom(System.Boolean)\">\n            <summary>\n            If set to true, the user can zoom in/out the contents of the view using the pinch/zoom gesture.\n            </summary>\n            <param name=\"value\">The value that configures the zoom.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Layout(System.String)\">\n            <summary>\n            Specifies the id of the default layout\n            </summary>\n            <param name=\"value\">The value that configures the layout.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Transition(System.String)\">\n            <summary>\n            Specifies the Pane transition\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Header(System.Action)\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Header(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Header &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Header(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileView()\n                  .Name(\"View\")        \n                   .Header(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Header &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Header(System.String)\">\n            <summary>\n            Sets the HTML content which the header should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Header(\"&lt;strong&gt; View Header &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Content &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileView()\n                  .Name(\"View\")        \n                   .Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Content &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the view content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Content(\"&lt;strong&gt; View Content &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Footer(System.Action)\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Footer(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Footer &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Footer(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileView()\n                  .Name(\"View\")        \n                   .Footer(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Footer &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Footer(System.String)\">\n            <summary>\n            Sets the HTML content which the footer should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileView()\n                       .Name(\"View\")\n                       .Footer(\"&lt;strong&gt; View Footer &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileView()\n                        .Name(\"MobileView\")\n                        .Events(events => events\n                            .AfterShow(\"onAfterShow\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.AfterShow(System.String)\">\n            <summary>\n            Fires after the mobile View becomes visible. If the view is displayed with transition, the event is triggered after the transition is complete.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the afterShow event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.BeforeHide(System.String)\">\n            <summary>\n            Fires before the mobile View becomes hidden.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the beforeHide event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.BeforeShow(System.String)\">\n            <summary>\n            Fires before the mobile View becomes visible. The event can be prevented by calling the preventDefault method of the event parameter, in case a redirection should happen.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the beforeShow event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.Hide(System.String)\">\n            <summary>\n            Fires when the mobile View becomes hidden.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the hide event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.Init(System.String)\">\n            <summary>\n            Fires after the mobile View and its child widgets are initialized.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileViewEventBuilder.Show(System.String)\">\n            <summary>\n            Fires when the mobile View becomes visible.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the show event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileViewHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileViewHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileViewHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileView markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileModalView for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.#ctor(Kendo.Mvc.UI.MobileModalView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileModalView\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Modal(System.Boolean)\">\n            <summary>\n            When set to false, the ModalView will close when the user taps outside of its element.\n            </summary>\n            <param name=\"value\">The value that configures the modal.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Height(System.String)\">\n            <summary>\n            The height of the ModalView container in pixels. If not set, the element style is used.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Width(System.String)\">\n            <summary>\n            The width of the ModalView container in pixels. If not set, the element style is used.\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Zoom(System.Boolean)\">\n            <summary>\n            If set to true, the user can zoom in/out the contents of the view using the pinch/zoom gesture.\n            </summary>\n            <param name=\"value\">The value that configures the zoom.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Stretch(System.Boolean)\">\n            <summary>\n            If set to true, the view will stretch its child contents to occupy the entire view, while disabling kinetic scrolling. Useful if the view contains an image or a map.\n            </summary>\n            <param name=\"value\">The value that configures the stretch.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.UseNativeScrolling(System.Boolean)\">\n            <summary>\n            (available since Q1 2013) If set to true, the view will use the native scrolling available in the current platform. This should help with form issues on some platforms (namely Android and WP8). Native scrolling is only enabled on platforms that support it: iOS &gt; 4, Android &gt; 2, WP8. BlackBerry devices do support it, but the native scroller is flaky.\n            </summary>\n            <param name=\"value\">The value that configures the usenativescrolling.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Title(System.String)\">\n            <summary>\n            The text to display in the navbar title (if present) and the browser title.\n            </summary>\n            <param name=\"value\">The value that configures the title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Layout(System.String)\">\n            <summary>\n            Specifies the id of the default layout\n            </summary>\n            <param name=\"value\">The value that configures the layout.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Height(System.Int32)\">\n            <summary>\n            The height of the ModalView in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Width(System.Int32)\">\n            <summary>\n            The width of the ModalView in pixels\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Header(System.Action)\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Header(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Header &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Header(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileModalView()\n                  .Name(\"View\")        \n                   .Header(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Header &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Header(System.String)\">\n            <summary>\n            Sets the HTML content which the header should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Header(\"&lt;strong&gt; View Header &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Content &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileModalView()\n                  .Name(\"View\")        \n                   .Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Content &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the view content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Content(\"&lt;strong&gt; View Content &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Footer(System.Action)\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Footer(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Footer &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Footer(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileModalView()\n                  .Name(\"View\")        \n                   .Footer(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Footer &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Footer(System.String)\">\n            <summary>\n            Sets the HTML content which the footer should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileModalView()\n                       .Name(\"View\")\n                       .Footer(\"&lt;strong&gt; View Footer &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileModalViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileModalView()\n                        .Name(\"MobileModalView\")\n                        .Events(events => events\n                            .Close(\"onClose\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileModalViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileModalView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewEventBuilder.Close(System.String)\">\n            <summary>\n            Fired when the mobile ModalView is closed by the user.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the close event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewEventBuilder.Init(System.String)\">\n            <summary>\n            Fired when the mobile ModalView and its child widgets are initialized.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileModalViewEventBuilder.Open(System.String)\">\n            <summary>\n            Fires when the ModalView is shown.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the open event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileModalViewHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileModalView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileModalViewHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileModalView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileModalViewHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileModalView markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSplitViewBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileSplitView for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewBuilder.#ctor(Kendo.Mvc.UI.MobileSplitView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileSplitView\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewBuilder.Style(Kendo.Mvc.UI.MobileSplitViewStyle)\">\n            <summary>\n            Defines the SplitView style - horizontal or vertical.\n            </summary>\n            <param name=\"value\">The value that configures the style.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewBuilder.Panes(System.Action{Kendo.Mvc.UI.Fluent.MobileSplitViewPaneFactory})\">\n            <summary>\n            Contains the panes of the splitview widget\n            </summary>\n            <param name=\"configurator\">The action that configures the panes.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileSplitViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileSplitView()\n                        .Name(\"MobileSplitView\")\n                        .Events(events => events\n                            .Init(\"onInit\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileSplitView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileSplitViewPane.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileSplitViewPane.Events\">\n            <summary>\n            Gets the client events of the grid.\n            </summary>\n            <value>The client events.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileSplitViewPane settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Id(System.String)\">\n            <summary>\n            The id of tha pane.\n            </summary>\n            <param name=\"value\">The value that configures the id.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Initial(System.String)\">\n            <summary>\n            The value that configures the initial.\n            </summary>\n            <param name=\"value\">The value that configures the initial.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Layout(System.String)\">\n            <summary>\n            The value that configures the layout.\n            </summary>\n            <param name=\"value\">The value that configures the layout.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Loading(System.String)\">\n            <summary>\n            The text displayed in the loading popup. Setting this value to false will disable the loading popup.\n            </summary>\n            <param name=\"value\">The value that configures the loading.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Transition(System.String)\">\n            <summary>\n            The default View transition.\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Collapsible(System.Boolean)\">\n            <summary>\n            Defines whether the pane is collapsible. Collapsible panes are automatically hidden when the device is in portrait orientation.\n            </summary>\n            <param name=\"value\">The value that configures the collapsible.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.PortraitWidth(System.String)\">\n            <summary>\n            Defines the width of the pane in portrait orientation.\n            </summary>\n            <param name=\"value\">The value that configures the portraitwidth.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.PortraitWidth(System.Int32)\">\n            <summary>\n            Defines the width of the pane in portrait orientation (in pixels).\n            </summary>\n            <param name=\"value\">The value that configures the portraitwidth.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the pane should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileSplitView()\n                       .Name(\"View\")\n                       .Panes(panes => panes.Add()\n                            .Content(() =>\n                                     {\n                                         %&gt;\n                                             &lt;strong&gt; View Content &lt;/strong&gt;\n                                         &lt;%\n                                     })\n                            )\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the pane should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileSplitView()\n                  .Name(\"View\")\n                  .Panes(panes => panes.Add()\n                    .Content(\n                          @&lt;text&gt;\n                                  Some text\n                                  &lt;strong&gt; View Content &lt;/strong&gt;\n                          &lt;/text&gt;        \n                    ))\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the pane should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileSplitView()\n                       .Name(\"View\")\n                       .Panes(panes => panes.Add().Content(\"&lt;strong&gt; View Content &lt;/strong&gt;\"))\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewPaneBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileSplitViewPaneEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileSplitView()\n                        .Name(\"MobileSplitView\")\n                        .Panes(panes => panes.Add()\n                            .Events(events => events\n                                .Navigate(\"onNavigate\")\n                            ))\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileSplitViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileSplitView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewEventBuilder.Init(System.String)\">\n            <summary>\n            Fires after the mobile SplitView and its child widgets are initialized.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileSplitViewEventBuilder.Show(System.String)\">\n            <summary>\n            Fires when the mobile SplitView becomes visible.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the show event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileSplitViewHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileSplitView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileSplitViewHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileSplitView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileSplitViewHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileSplitView markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobilePopOver for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.#ctor(Kendo.Mvc.UI.MobilePopOver)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobilePopOver\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Pane(System.Action{Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder})\">\n            <summary>\n            The pane configuration options.\n            </summary>\n            <param name=\"configurator\">The action that configures the pane.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Popup(System.Action{Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder})\">\n            <summary>\n            The popup configuration options (tablet only)\n            </summary>\n            <param name=\"configurator\">The action that configures the popup.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobilePopOver()\n                       .Name(\"PopOver\")\n                       .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; PopOver Content &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobilePopOver()\n                  .Name(\"PopOver\")        \n                   .Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; PopOver Content &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the popover content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobilePopOver()\n                       .Name(\"PopOver\")\n                       .Content(\"&lt;strong&gt; PopOver Content &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobilePopOverEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobilePopOver()\n                        .Name(\"MobilePopOver\")\n                        .Events(events => events\n                            .Close(\"onClose\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobilePopOverPaneSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder.Initial(System.String)\">\n            <summary>\n            The id of the initial mobile View to display.\n            </summary>\n            <param name=\"value\">The value that configures the initial.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder.Layout(System.String)\">\n            <summary>\n            The id of the default Pane Layout.\n            </summary>\n            <param name=\"value\">The value that configures the layout.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder.Loading(System.String)\">\n            <summary>\n            The text displayed in the loading popup. Setting this value to false will disable the loading popup.\n            </summary>\n            <param name=\"value\">The value that configures the loading.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPaneSettingsBuilder.Transition(System.String)\">\n            <summary>\n            The default View transition.\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobilePopOverPopupSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder.Height(System.String)\">\n            <summary>\n            The height of the popup in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder.Width(System.String)\">\n            <summary>\n            The width of the popup in pixels\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder.Height(System.Int32)\">\n            <summary>\n            The height of the popup in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the height.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder.Width(System.Int32)\">\n            <summary>\n            The width of the popup in pixels\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverPopupSettingsBuilder.Direction(Kendo.Mvc.UI.MobilePopupDirection)\">\n            <summary>\n            The direction to which the popup will expand, relative to the target that opened it\n            </summary>\n            <param name=\"value\">The value that configures the direction.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobilePopOverEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobilePopOver for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverEventBuilder.Close(System.String)\">\n            <summary>\n            Fires when popover is closed.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the close event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobilePopOverEventBuilder.Open(System.String)\">\n            <summary>\n            Fires when popover is opened.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the open event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobilePopOverHtmlBuilder.#ctor(Kendo.Mvc.UI.MobilePopOver)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobilePopOverHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobilePopOver component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobilePopOverHtmlBuilder.Build\">\n            <summary>\n            Builds the MobilePopOver markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileLayout.HeaderHtmlAttributes\">\n            <summary>\n            Gets the Header HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileLayout.FooterHtmlAttributes\">\n            <summary>\n            Gets the Footer HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileLayout for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.#ctor(Kendo.Mvc.UI.MobileLayout)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileLayout\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Platform(System.String)\">\n            <summary>\n            The specific platform this layout targets. By default, layouts are displayed\n            on all platforms.\n            </summary>\n            <param name=\"value\">The value that configures the platform.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Header(System.Action)\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileLayout()\n                       .Name(\"Layout\")\n                       .Header(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Header &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Header(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileLayout()\n                  .Name(\"Layout\")        \n                   .Header(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Header &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Header(System.String)\">\n            <summary>\n            Sets the HTML content which the header should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileLayout()\n                       .Name(\"Layout\")\n                       .Header(\"&lt;strong&gt; View Header &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Footer(System.Action)\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileLayout()\n                       .Name(\"Layout\")\n                       .Footer(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Footer &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Footer(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileLayout()\n                  .Name(\"Layout\")        \n                   .Footer(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Footer &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Footer(System.String)\">\n            <summary>\n            Sets the HTML content which the footer should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileLayout()\n                       .Name(\"Layout\")\n                       .Footer(\"&lt;strong&gt; View Footer &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.HeaderHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the Header HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.FooterHtmlAttributes(System.Object)\">\n            <summary>\n            Sets the Footer HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.HeaderHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the Header HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.FooterHtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the Footer HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileLayoutEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileLayout()\n                        .Name(\"MobileLayout\")\n                        .Events(events => events\n                            .Hide(\"onHide\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileLayoutEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileLayout for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutEventBuilder.Hide(System.String)\">\n            <summary>\n            Fires when a mobile View using the layout becomes hidden.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the hide event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutEventBuilder.Init(System.String)\">\n            <summary>\n            Fires after a mobile Layout and its child widgets is initialized.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileLayoutEventBuilder.Show(System.String)\">\n            <summary>\n            Fires when a mobile View using the layout becomes visible.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the show event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileLayoutHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileLayout)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileLayoutHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileLayout component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileLayoutHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileLayout markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileNavBar.ViewTitle(System.String)\">\n            <summary>\n            Creates a HTML element used as a view title.\n            </summary>\n            <param name=\"text\">The text for the content.</param>\n            <returns>Returns HTML element representing default view title.</returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileNavBar for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.#ctor(Kendo.Mvc.UI.MobileNavBar)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileNavBar\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileNavBar()\n                       .Name(\"NavBar\")\n                       .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; View Title &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.Content(System.Action{Kendo.Mvc.UI.MobileNavBar})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileNavBar()\n                       .Name(\"NavBar\")\n                       .Content((navbar) =>\n                                {\n                                    %&gt;\n                                        &lt;= navbar.ViewTitle(\"View Title\")&gt;        \n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileNavBar()\n                  .Name(\"NavBar\")        \n                   .Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; View Title &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.Content(System.Func{Kendo.Mvc.UI.MobileNavBar,System.Func{System.Object,System.Object}})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileNavBar()\n                  .Name(\"NavBar\")        \n                   .Content(@navbar => \n                        @&lt;text&gt;\n                                Some text\n                                @navbar.ViewTitle(\"View Title\")\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileNavBarBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the view content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileNavBar()\n                       .Name(\"NavBar\")\n                       .Content(\"&lt;strong&gt; View Title &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileNavBarHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileNavBar)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileNavBarHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileNavBar component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileNavBarHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileNavBar markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileScrollView for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.#ctor(Kendo.Mvc.UI.MobileScrollView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileScrollView\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.AutoBind(System.Boolean)\">\n            <summary>\n            If set to false the widget will not bind to the DataSource during initialization. In this case data binding will occur when the change event of the data source is fired. By default the widget will bind to the DataSource specified in the configuration.Applicable only in data bound mode.\n            </summary>\n            <param name=\"value\">The value that configures the autobind.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.Duration(System.Int32)\">\n            <summary>\n            The milliseconds that take the ScrollView to snap to the current page after released.\n            </summary>\n            <param name=\"value\">The value that configures the duration.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.EmptyTemplateId(System.String)\">\n            <summary>\n            The template which is used to render the pages without content. By default the ScrollView renders a blank page.Applicable only in data bound mode.\n            </summary>\n            <param name=\"value\">The value that configures the emptytemplateid.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.EnablePager(System.Boolean)\">\n            <summary>\n            If set to true the ScrollView will display a pager. By default pager is enabled.\n            </summary>\n            <param name=\"value\">The value that configures the enablepager.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.ItemsPerPage(System.Int32)\">\n            <summary>\n            Determines how many data items will be passed to the page template.Applicable only in data bound mode.\n            </summary>\n            <param name=\"value\">The value that configures the itemsperpage.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.Page(System.Int32)\">\n            <summary>\n            The initial page to display.\n            </summary>\n            <param name=\"value\">The value that configures the page.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.TemplateId(System.String)\">\n            <summary>\n            The template which is used to render the content of pages. By default the ScrollView renders a div element for every page.Applicable only in data bound mode.\n            </summary>\n            <param name=\"value\">The value that configures the templateid.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.ItemTagName(System.String)\">\n            <summary>\n            Specifies the tag name of the item element. By default it will be `div` element\n            </summary>\n            <param name=\"value\">The value that configures the itemtagname.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.FitItemPerPage(System.Boolean)\">\n            <summary>\n            Specifies whether exactly one item per page must be shown\n            </summary>\n            <param name=\"value\">The value that configures the fititemperpage.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.ContentHeight(System.String)\">\n            <summary>\n            The height of the ScrollView content.\n            </summary>\n            <param name=\"value\">The value that configures the contentheight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.BounceVelocityThreshold(System.Double)\">\n            <summary>\n            The velocity threshold after which a swipe will result in a bounce effect.\n            </summary>\n            <param name=\"value\">The value that configures the bouncevelocitythreshold.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.PageSize(System.Double)\">\n            <summary>\n            Multiplier applied to the snap amount of the ScrollView. By default, the widget scrolls to the next screen when swipe. If the pageSize property is set to 0.5, the ScrollView will scroll by half of the widget width.\n            </summary>\n            <param name=\"value\">The value that configures the pagesize.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.VelocityThreshold(System.Double)\">\n            <summary>\n            The velocity threshold after which a swipe will navigate to the next page (as opposed to snapping back to the current page).\n            </summary>\n            <param name=\"value\">The value that configures the velocitythreshold.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileScrollViewItemFactory})\">\n            <summary>\n            Contains the items of the ScrollView widget\n            </summary>\n            <param name=\"configurator\">The action that configures the items.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.ContentHeight(System.Int32)\">\n            <summary>\n            The height of the ScrollView content.\n            </summary>\n            <param name=\"value\">The value that configures the contentheight.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.DataSource(System.Action{Kendo.Mvc.UI.Fluent.ReadOnlyDataSourceBuilder})\">\n            <summary>\n            Instance of DataSource or the data that the mobile ScrollView will be bound to.\n            </summary>\n            <param name=\"configurator\">The value that configures the datasource.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileScrollViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileScrollView()\n                        .Name(\"MobileScrollView\")\n                        .Events(events => events\n                            .Change(\"onChange\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileScrollViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileScrollView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewEventBuilder.Changing(System.String)\">\n            <summary>\n            Fires before the widget page is changed. The change can be prevented by calling the preventDefault method of the event parameter, in which case the widget will snap back to the current page.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the changing event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewEventBuilder.Change(System.String)\">\n            <summary>\n            Fires when the widget page is changed.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the change event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewEventBuilder.Refresh(System.String)\">\n            <summary>\n            Fires when widget refreshes\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the refresh event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileScrollViewHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileScrollView)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileScrollViewHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileScrollView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileScrollViewHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileScrollView markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileScrollViewItemFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo MobileScrollView for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileScrollViewItem.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MobileScrollViewItem.Content\">\n            <summary>\n            Gets the content of the item\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileScrollViewItem settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileScrollView()\n                       .Name(\"View\")\n                       .Items(items => items.Add()\n                            .Content(() =>\n                                     {\n                                         %&gt;\n                                             &lt;strong&gt; View Content &lt;/strong&gt;\n                                         &lt;%\n                                     })\n                        )\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileScrollView()\n                  .Name(\"View\") \n                  .Items(items => items.Add()\n                         .Content(\n                              @&lt;text&gt;\n                                      Some text\n                                      &lt;strong&gt; View Content &lt;/strong&gt;\n                              &lt;/text&gt;      \n                        )\n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileScrollViewItemBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the view content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileScrollView()\n                       .Name(\"View\")\n                       .Items(items => items.Add()\n                            .Content(\"&lt;strong&gt; View Content &lt;/strong&gt;\"))\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileDetailButton for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.#ctor(Kendo.Mvc.UI.MobileDetailButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileDetailButton\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Url(System.String)\">\n            <summary>\n            Specifies the url for remote view or id of the view to be loaded (prefixed with #, like an anchor)\n            </summary>\n            <param name=\"value\">The value that configures the url.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Transition(System.String)\">\n            <summary>\n            Specifies the Pane transition\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Target(System.String)\">\n            <summary>\n            Specifies the id of target Pane or `_top` for application level Pane\n            </summary>\n            <param name=\"value\">The value that configures the target.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.ActionsheetContext(System.String)\">\n            <summary>\n            This value will be available when the action callback of ActionSheet item is executed\n            </summary>\n            <param name=\"value\">The value that configures the actionsheetcontext.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Icon(System.String)\">\n            <summary>\n            The icon of the button. It can be either one of the built-in icons, or a custom one.\n            </summary>\n            <param name=\"value\">The value that configures the icon.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Style(Kendo.Mvc.UI.MobileDetailButtonStyle)\">\n            <summary>\n            Specifies predefined button style\n            </summary>\n            <param name=\"value\">The value that configures the style.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Align(Kendo.Mvc.UI.MobileButtonAlign)\">\n            <summary>\n            Use the align data attribute to specify the elements position inside the NavBar. By default, elements without any align are centered.\n            </summary>\n            <param name=\"value\">The value that configures the align.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Rel(Kendo.Mvc.UI.MobileButtonRel)\">\n            <summary>\n            Specifies the widget to be open when is tapped (the href must be set too)\n            </summary>\n            <param name=\"value\">The value that configures the rel.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Url(System.Action{Kendo.Mvc.UI.Fluent.MobileNavigatableSettingsBuilder})\">\n            <summary>\n            Specifies the url for remote view to be loaded\n            </summary> \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Url(System.String,System.String,System.Object)\">\n            <summary>\n            Sets controller and action from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>        \n            <param name=\"routeValues\">Route values</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Url(System.String,System.String)\">\n            <summary>\n            Sets controller, action and routeValues from where the remove view to be loaded.\n            </summary>\n            <param name=\"actionName\">Action name</param>\n            <param name=\"controllerName\">Controller Name</param>                \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileDetailButtonEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileDetailButton()\n                        .Name(\"MobileDetailButton\")\n                        .Events(events => events\n                            .Click(\"onClick\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileDetailButtonEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileDetailButton for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDetailButtonEventBuilder.Click(System.String)\">\n            <summary>\n            Fires when the user taps the button.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the click event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileDetailButtonHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileDetailButton)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileDetailButtonHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileDetailButton component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileDetailButtonHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileDetailButton markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileApplication for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.#ctor(Kendo.Mvc.UI.MobileApplication)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileApplication\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.HideAddressBar(System.Boolean)\">\n            <summary>\n            Whether to hide the browser address bar. Supported only in iPhone and iPod. Doesn't affect standalone mode as there the address bar is always hidden.\n            </summary>\n            <param name=\"value\">The value that configures the hideaddressbar.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.UpdateDocumentTitle(System.Boolean)\">\n            <summary>\n            Whether to update the document title.\n            </summary>\n            <param name=\"value\">The value that configures the updatedocumenttitle.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Initial(System.String)\">\n            <summary>\n            The id of the initial mobile View to display.\n            </summary>\n            <param name=\"value\">The value that configures the initial.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Layout(System.String)\">\n            <summary>\n            The id of the default Application layout.\n            </summary>\n            <param name=\"value\">The value that configures the layout.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Loading(System.String)\">\n            <summary>\n            The text displayed in the loading popup. Setting this value to false will disable the loading popup.Note: The text should be wrapped inside &lt;h1&gt; tag.\n            </summary>\n            <param name=\"value\">The value that configures the loading.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Platform(System.String)\">\n            <summary>\n            Which platform look to force on the application. Supported values are \"ios6\", \"ios7\",\"android\", \"blackberry\" and \"wp8\".\n            </summary>\n            <param name=\"value\">The value that configures the platform.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.ServerNavigation(System.Boolean)\">\n            <summary>\n            If set to true, the application will not use AJAX to load remote views.\n            </summary>\n            <param name=\"value\">The value that configures the servernavigation.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Skin(System.String)\">\n            <summary>\n            The skin to apply to the application. Currently, Kendo UI Mobile ships with a flat skin in addition to the native looking ones.\n            </summary>\n            <param name=\"value\">The value that configures the skin.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.StatusBarStyle(System.String)\">\n            <summary>\n            Set the status bar style meta tag in iOS used to control the styling of the status bar in a pinned to the Home Screen app. Available as of Q2 2013 SP.\n            </summary>\n            <param name=\"value\">The value that configures the statusbarstyle.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Transition(System.String)\">\n            <summary>\n            The default View transition.\n            </summary>\n            <param name=\"value\">The value that configures the transition.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.WebAppCapable(System.Boolean)\">\n            <summary>\n            Disables the default behavior of Kendo UI Mobile apps to be web app capable (open in a chromeless browser). Introduced in Q2 2013.\n            </summary>\n            <param name=\"value\">The value that configures the webappcapable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.PushState(System.Boolean)\">\n            <summary>\n            Specifies how history should be handled\n            </summary>\n            <param name=\"value\">The value that configures the pushstate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileApplicationEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileApplication()        \n                        .Events(events => events\n                            .Init(\"onInit\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileListView for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.#ctor(Kendo.Mvc.UI.MobileListView{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileListView`1\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.BindTo(System.Collections.Generic.IEnumerable{`0})\">\n            <summary>\n            Binds the MobileListView to a list of objects\n            </summary>        \n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView&lt;Order&gt;()\n                        .Name(\"Orders\")        \n                        .BindTo((IEnumerable&lt;Order&gt;)ViewData[\"Orders\"]);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.BindTo(System.Collections.IEnumerable)\">\n            <summary>\n            Binds the MobileListView to a list of objects\n            </summary>        \n            <param name=\"dataSource\">The data source.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView&lt;Order&gt;()\n                        .Name(\"Orders\")        \n                        .BindTo((IEnumerable)ViewData[\"Orders\"]);\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.AppendOnRefresh(System.Boolean)\">\n            <summary>\n            Used in combination with pullToRefresh. If set to true, newly loaded data will be appended on top when refershing.\n            </summary>\n            <param name=\"value\">The value that configures the appendonrefresh.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.AutoBind(System.Boolean)\">\n            <summary>\n            Indicates whether the listview will call read on the DataSource initially.\n            </summary>\n            <param name=\"value\">The value that configures the autobind.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.DataSource(System.Action{Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilder{`0}})\">\n            <summary>\n            Instance of DataSource or the data that the mobile ListView will be bound to.\n            </summary>\n            <param name=\"configurator\">The value that configures the datasource.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.EndlessScroll(System.Boolean)\">\n            <summary>\n            If set to true, the listview gets the next page of data when the user scrolls near the bottom of the view.\n            </summary>\n            <param name=\"value\">The value that configures the endlessscroll.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.FixedHeaders(System.Boolean)\">\n            <summary>\n            If set to true, the group headers will persist their position when the user scrolls through the listview. Applicable only when the type is set to group, or when binding to grouped datasource.\n            </summary>\n            <param name=\"value\">The value that configures the fixedheaders.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.HeaderTemplateId(System.String)\">\n            <summary>\n            The header item template (applicable when the type is set to group).\n            </summary>\n            <param name=\"value\">The value that configures the headertemplate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.LoadMore(System.Boolean)\">\n            <summary>\n            If set to true, a button is rendered at the bottom of the listview, which fetch the next page of data when tapped.\n            </summary>\n            <param name=\"value\">The value that configures the loadmore.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.LoadMoreText(System.String)\">\n            <summary>\n            The text of the rendered load-more button (applies only if loadMore is set to true).\n            </summary>\n            <param name=\"value\">The value that configures the loadmoretext.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.PullTemplateId(System.String)\">\n            <summary>\n            The message template displayed when the user pulls the listView. Applicable only when pullToRefresh is set to true.\n            </summary>\n            <param name=\"value\">The value that configures the pulltemplate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.PullToRefresh(System.Boolean)\">\n            <summary>\n            If set to true, the listview will reload its data when the user pulls the view over the top limit.\n            </summary>\n            <param name=\"value\">The value that configures the pulltorefresh.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.RefreshTemplateId(System.String)\">\n            <summary>\n            The message template displayed during the refresh. Applicable only when pullToRefresh is set to true.\n            </summary>\n            <param name=\"value\">The value that configures the refreshtemplate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.ReleaseTemplateId(System.String)\">\n            <summary>\n            The message template indicating that pullToRefresh will occur. Applicable only when pullToRefresh is set to true.\n            </summary>\n            <param name=\"value\">The value that configures the releasetemplate.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.ScrollTreshold(System.String)\">\n            <summary>\n            The distance to the bottom in pixels, after which the listview will start fetching the next page. Applicable only when endlessScroll is set to true.\n            </summary>\n            <param name=\"value\">The value that configures the scrolltreshold.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.ScrollTreshold(System.Int32)\">\n            <summary>\n            The distance to the bottom in pixels, after which the listview will start fetching the next page. Applicable only when endlessScroll is set to true.\n            </summary>\n            <param name=\"value\">The value that configures the scrolltreshold.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.Style(System.String)\">\n            <summary>\n            The style of the control. Can be either empty string(\"\"), or inset.\n            </summary>\n            <param name=\"value\">The value that configures the style.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.TemplateId(System.String)\">\n            <summary>\n            The item template.\n            </summary>\n            <param name=\"value\">The value that configures the template.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.Type(System.String)\">\n            <summary>\n            The type of the control. Can be either flat (default) or group. Determined automatically in databound mode.\n            </summary>\n            <param name=\"value\">The value that configures the type.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.Filterable(System.Action{Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder})\">\n            <summary>\n            Indicates whether the filter input must be visible or not.\n            </summary>\n            <param name=\"configurator\">The action that configures the filterable.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileListView&lt;Order&gt;()\n                        .Name(\"MobileListView\")\n                        .Events(events => events\n                            .Click(\"onClick\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewBuilder`1.Items(System.Action{Kendo.Mvc.UI.Fluent.MobileListViewItemFactory})\">\n            <summary>\n            Builds MobileListView items.\n            </summary>\n            <param name=\"action\">Action for declaratively building MobileListView items.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileListViewView()\n                       .Name(\"View\")\n                       .Items(items => \n                       {\n                            items.Add().Text(\"Item\");\n                            items.AddLink().Text(\"Link Item\");    \n                        })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MobileListViewFilterableSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder.Placeholder(System.String)\">\n            <summary>\n            Placeholder text for search input.\n            </summary>\n            <param name=\"value\">The value that configures the placeholder.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder.AutoFilter(System.Boolean)\">\n            <summary>\n            Indicates whether filtering should be performed on every key up event or not.\n            </summary>\n            <param name=\"value\">The value that configures the autofilter.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder.Field(System.String)\">\n            <summary>\n            Specifies the field which will be used in the filter expression.\n            </summary>\n            <param name=\"value\">The value that configures the field.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder.IgnoreCase(System.Boolean)\">\n            <summary>\n            Specifies whether the filter expression must be case sensitive or not.\n            </summary>\n            <param name=\"value\">The value that configures the ignorecase.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewFilterableSettingsBuilder.Operator(System.String)\">\n            <summary>\n            Specifies the comparison operator used in the filter expression.\n            </summary>\n            <param name=\"value\">The value that configures the operator.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileListView for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder.Click(System.String)\">\n            <summary>\n            Fires when item is tapped.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the click event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder.DataBound(System.String)\">\n            <summary>\n            Fires when the ListView has received data from the data source.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the dataBound event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder.DataBinding(System.String)\">\n            <summary>\n            Fires when the ListView is about to be rendered.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the dataBinding event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileListViewEventBuilder.LastPageReached(System.String)\">\n            <summary>\n            Fires when the last page of the ListView is reached. Event will be raised only if the 'endless scroll' or 'load more' option is enabled.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the lastPageReached event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileListViewHtmlBuilder`1.#ctor(Kendo.Mvc.UI.MobileListView{`0})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileListViewHtmlBuilder`1\"/> class.\n            </summary>\n            <param name=\"component\">The MobileListView component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileListViewHtmlBuilder`1.Build\">\n            <summary>\n            Builds the MobileListView markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileDrawer for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.#ctor(Kendo.Mvc.UI.MobileDrawer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileDrawer\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.SwipeToOpen(System.Boolean)\">\n            <summary>\n            If set to false, swiping the view will not activate the drawer. In this case, the drawer will only be open by a designated button\n            </summary>\n            <param name=\"value\">The value that configures the swipetoopen.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Title(System.String)\">\n            <summary>\n            The text to display in the Navbar title (if present).\n            </summary>\n            <param name=\"value\">The value that configures the title.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Position(Kendo.Mvc.UI.MobileDrawerPosition)\">\n            <summary>\n            The position of the drawer. Can be left (default) or right.\n            </summary>\n            <param name=\"value\">The value that configures the position.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Header(System.Action)\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Header(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; Drawer Header &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Header(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the header should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileDrawer()\n                  .Name(\"Drawer\")        \n                   .Header(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; Drawer Header &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Header(System.String)\">\n            <summary>\n            Sets the HTML content which the header should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the header.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Header(\"&lt;strong&gt; Drawer Header &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Content(System.Action)\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The action which renders the content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Content(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; Drawer Content &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Content(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the content should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileDrawer()\n                  .Name(\"Drawer\")        \n                   .Content(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; Drawer Content &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Content(System.String)\">\n            <summary>\n            Sets the HTML content which the view content should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the view content.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Content(\"&lt;strong&gt; Drawer Content &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Footer(System.Action)\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Footer(() =>\n                                {\n                                    %&gt;\n                                        &lt;strong&gt; Drawer Footer &lt;/strong&gt;\n                                    &lt;%\n                                })\n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Footer(System.Func{System.Object,System.Object})\">\n            <summary>\n            Sets the HTML content which the footer should display.\n            </summary>\n            <param name=\"value\">The content wrapped in a regular HTML tag or text tag (Razor syntax).</param>\n            <code lang=\"CS\">\n             @(Html.Kendo().MobileDrawer()\n                  .Name(\"Drawer\")        \n                   .Footer(\n                        @&lt;text&gt;\n                                Some text\n                                &lt;strong&gt; Drawer Footer &lt;/strong&gt;\n                        &lt;/text&gt;        \n                  )\n             )\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Footer(System.String)\">\n            <summary>\n            Sets the HTML content which the footer should display as a string.\n            </summary>\n            <param name=\"value\">The action which renders the footer.</param>\n            <code lang=\"CS\">\n             &lt;% Html.Kendo().MobileDrawer()\n                       .Name(\"Drawer\")\n                       .Footer(\"&lt;strong&gt; Drawer Footer &lt;/strong&gt;\");        \n                       .Render();\n            %&gt;\n            </code>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Views(System.String[])\">\n            <summary>\n            A list of the view ids on which the drawer will appear. If omitted, the drawer can be revealed on any view in the application.\n            </summary>\n            <param name=\"names\">The list of view ids on which the drawer will appear.</param>        \n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().MobileDrawer()\n                        .Name(\"MobileDrawer\")\n                        .Events(events => events\n                            .BeforeShow(\"onBeforeShow\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileDrawer for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder.BeforeShow(System.String)\">\n            <summary>\n            Fires before the mobile Drawer is revealed. The event can be prevented by calling the preventDefault method of the event parameter.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the beforeShow event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder.Hide(System.String)\">\n            <summary>\n            Fired when the mobile Drawer is closed by the user.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the hide event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder.Init(System.String)\">\n            <summary>\n            Fired when the mobile Drawer and its child widgets are initialized.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileDrawerEventBuilder.Show(System.String)\">\n            <summary>\n            Fires when the Drawer is shown.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the show event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileDrawerHtmlBuilder.#ctor(Kendo.Mvc.UI.MobileDrawer)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MobileDrawerHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The MobileDrawer component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MobileDrawerHtmlBuilder.Build\">\n            <summary>\n            Builds the MobileDrawer markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MobileApplicationEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo MobileApplication for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MobileApplicationEventBuilder.Init(System.String)\">\n            <summary>\n            Fires after the mobile application is instantiated.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the init event.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Map for ASP.NET MVC.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.#ctor(Kendo.Mvc.UI.Map)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.Map\"/> class.\n            </summary>\n            <param name=\"component\">The component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Center(System.Double,System.Double)\">\n            <summary>\n            Configures the center of the map.\n            </summary>\n            <param name=\"latitude\">The latitude</param>\n            <param name=\"longtitude\">The longtitude</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Controls(System.Action{Kendo.Mvc.UI.Fluent.MapControlsSettingsBuilder})\">\n            <summary>\n            The configuration of built-in map controls.\n            </summary>\n            <param name=\"configurator\">The action that configures the controls.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.LayerDefaults(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsSettingsBuilder})\">\n            <summary>\n            The default configuration for map layers by type.\n            </summary>\n            <param name=\"configurator\">The action that configures the layerdefaults.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Layers(System.Action{Kendo.Mvc.UI.Fluent.MapLayerFactory})\">\n            <summary>\n            The configuration of the map layers.\n            The layer type is determined by the value of the type field.\n            </summary>\n            <param name=\"configurator\">The action that configures the layers.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.MarkerDefaults(System.Action{Kendo.Mvc.UI.Fluent.MapMarkerDefaultsSettingsBuilder})\">\n            <summary>\n            The default options for all markers.\n            </summary>\n            <param name=\"configurator\">The action that configures the markerdefaults.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Markers(System.Action{Kendo.Mvc.UI.Fluent.MapMarkerFactory})\">\n            <summary>\n            The initial markers to display on the map.\n            </summary>\n            <param name=\"configurator\">The action that configures the markers.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.MinZoom(System.Double)\">\n            <summary>\n            The minimum zoom level.\n            </summary>\n            <param name=\"value\">The value that configures the minzoom.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.MaxZoom(System.Double)\">\n            <summary>\n            The maximum zoom level.\n            </summary>\n            <param name=\"value\">The value that configures the maxzoom.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.MinSize(System.Double)\">\n            <summary>\n            The size of the map in pixels at zoom level 0.\n            </summary>\n            <param name=\"value\">The value that configures the minsize.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Theme(System.String)\">\n            <summary>\n            The map theme name.The built-in themes are:\n            </summary>\n            <param name=\"value\">The value that configures the theme.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Zoom(System.Double)\">\n            <summary>\n            The initial zoom level.Typical web maps use zoom levels from 0 (whole world) to 19 (sub-meter features).The map size is derived from the zoom level and minScale options: size = (2 ^ zoom) * minSize\n            </summary>\n            <param name=\"value\">The value that configures the zoom.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapBuilder.Events(System.Action{Kendo.Mvc.UI.Fluent.MapEventBuilder})\">\n            <summary>\n            Configures the client-side events.\n            </summary>\n            <param name=\"configurator\">The client events action.</param>\n            <example>\n            <code lang=\"CS\">\n             &lt;%= Html.Kendo().Map()\n                        .Name(\"Map\")\n                        .Events(events => events\n                            .Click(\"onClick\")\n                        )\n            %&gt;\n            </code>\n            </example>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapControlsSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapControlsSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapControlsSettingsBuilder.Attribution(System.Boolean)\">\n            <summary>\n            Enables or disables the built-in attribution control.\n            </summary>\n            <param name=\"value\">The value that configures the attribution.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapControlsSettingsBuilder.Navigator(System.Action{Kendo.Mvc.UI.Fluent.MapControlsNavigatorSettingsBuilder})\">\n            <summary>\n            Enables or disables the built-in navigator control (directional pad).\n            </summary>\n            <param name=\"configurator\">The action that configures the navigator.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapControlsSettingsBuilder.Zoom(System.Action{Kendo.Mvc.UI.Fluent.MapControlsZoomSettingsBuilder})\">\n            <summary>\n            Enables or disables the built-in zoom control (+/- button).\n            </summary>\n            <param name=\"configurator\">The action that configures the zoom.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapControlsNavigatorSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapControlsNavigatorSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapControlsNavigatorSettingsBuilder.Position(System.String)\">\n            <summary>\n            The position of the navigator control. Possible values include:\n            </summary>\n            <param name=\"value\">The value that configures the position.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapControlsZoomSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapControlsZoomSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapControlsZoomSettingsBuilder.Position(System.String)\">\n            <summary>\n            The position of the zoom control. Possible values include:\n            </summary>\n            <param name=\"value\">The value that configures the position.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsSettingsBuilder.Shape(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeSettingsBuilder})\">\n            <summary>\n            The default configuration for shape layers.\n            </summary>\n            <param name=\"configurator\">The action that configures the shape.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsSettingsBuilder.Tile(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsTileSettingsBuilder})\">\n            <summary>\n            The default configuration for tile layers.\n            </summary>\n            <param name=\"configurator\">The action that configures the tile.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsShapeSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeSettingsBuilder.Attribution(System.String)\">\n            <summary>\n            The attribution for all shape layers.\n            </summary>\n            <param name=\"value\">The value that configures the attribution.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeSettingsBuilder.Style(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleSettingsBuilder})\">\n            <summary>\n            The default style for shapes.\n            </summary>\n            <param name=\"configurator\">The action that configures the style.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsTileSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsTileSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsTileSettingsBuilder.UrlTemplateId(System.String)\">\n            <summary>\n            The URL template for tile layers. Template variables:\n            </summary>\n            <param name=\"value\">The value that configures the urltemplateid.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsTileSettingsBuilder.Attribution(System.String)\">\n            <summary>\n            The attribution of all tile layers.\n            </summary>\n            <param name=\"value\">The value that configures the attribution.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsTileSettingsBuilder.Opacity(System.String)\">\n            <summary>\n            The the opacity of all tile layers.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo Map for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayer settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.DataSource(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDataSourceBuilder})\">\n            <summary>\n            Configures the data source of the map layer.\n            </summary>\n            <param name=\"configurator\">The configuration of the data source.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.Subdomains(System.String[])\">\n            <summary>\n            Configures of the subdomains.\n            </summary>\n            <param name=\"subdomains\">The subdomains</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.AutoBind(System.Boolean)\">\n            <summary>\n            If set to false the layer will not bind to the data source during initialization. In this case data binding will occur when the change event of the\n            data source is fired. By default the widget will bind to the data source specified in the configuration.\n            </summary>\n            <param name=\"value\">The value that configures the autobind.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.Attribution(System.String)\">\n            <summary>\n            The attribution for the layer.\n            </summary>\n            <param name=\"value\">The value that configures the attribution.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.Opacity(System.String)\">\n            <summary>\n            The the opacity for the layer.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.Style(System.Action{Kendo.Mvc.UI.Fluent.MapLayerStyleSettingsBuilder})\">\n            <summary>\n            The default style for shapes.\n            </summary>\n            <param name=\"configurator\">The action that configures the style.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.UrlTemplateId(System.String)\">\n            <summary>\n            The URL template for tile layers. Template variables:\n            </summary>\n            <param name=\"value\">The value that configures the urltemplateid.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerBuilder.Type(Kendo.Mvc.UI.MapLayerType)\">\n            <summary>\n            The layer type. Supported types are \"tile\" and \"shape\".\n            </summary>\n            <param name=\"value\">The value that configures the type.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerFillSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerFillSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerFillSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default fill color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerFillSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default fill opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerStrokeSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerStrokeSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStrokeSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default stroke color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStrokeSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default stroke opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapMarkerDefaultsSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapMarkerDefaultsSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerDefaultsSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default marker color. Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerDefaultsSettingsBuilder.Size(System.Double)\">\n            <summary>\n            The default marker size in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the size.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerDefaultsSettingsBuilder.Shape(System.String)\">\n            <summary>\n            The default marker shape. Supported shapes:\n            </summary>\n            <param name=\"value\">The value that configures the shape.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapMarkerFactory\">\n            <summary>\n            Defines the fluent API for adding items to Kendo Map for ASP.NET MVC\n            </summary>\n        </member>\n        <member name=\"P:Kendo.Mvc.UI.MapMarker.HtmlAttributes\">\n            <summary>\n            Gets the HTML attributes.\n            </summary>\n            <value>The HTML attributes.</value>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapMarkerBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapMarker settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.Color(System.String)\">\n            <summary>\n            The marker color. Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.Size(System.Double)\">\n            <summary>\n            The marker size in pixels.\n            </summary>\n            <param name=\"value\">The value that configures the size.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.Shape(Kendo.Mvc.UI.MapMarkerShape)\">\n            <summary>\n            The marker shape. Supported shapes are \"pin\" and \"circle\".\n            </summary>\n            <param name=\"value\">The value that configures the shape.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.Position(System.Double,System.Double)\">\n            <summary>\n            Configures the position of the marker.\n            </summary>\n            <param name=\"latitude\">The latitude</param>\n            <param name=\"longtitude\">The longtitude</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.HtmlAttributes(System.Object)\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapMarkerBuilder.HtmlAttributes(System.Collections.Generic.IDictionary{System.String,System.Object})\">\n            <summary>\n            Sets the HTML attributes.\n            </summary>\n            <param name=\"attributes\">The HTML attributes.</param>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapEventBuilder\">\n            <summary>\n            Defines the fluent API for configuring the Kendo Map for ASP.NET MVC events.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.Click(System.String)\">\n            <summary>\n            Fired when the user clicks on the map.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the click event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.Reset(System.String)\">\n            <summary>\n            Fired when the map is reset, e.g. on initial load or during zoom.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the reset event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.Pan(System.String)\">\n            <summary>\n            Fired while the map viewport is being moved.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the pan event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.PanEnd(System.String)\">\n            <summary>\n            Fires after the map viewport has been moved.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the panEnd event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ShapeClick(System.String)\">\n            <summary>\n            Fired when a shape is clicked or tapped.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the shapeClick event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ShapeCreated(System.String)\">\n            <summary>\n            Fired when a shape is created, but is not rendered yet.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the shapeCreated event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ShapeMouseEnter(System.String)\">\n            <summary>\n            Fired when the mouse enters a shape.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the shapeMouseEnter event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ShapeMouseLeave(System.String)\">\n            <summary>\n            Fired when the mouse leaves a shape.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the shapeMouseLeave event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ZoomStart(System.String)\">\n            <summary>\n            Fired when the map zoom level is about to change.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the zoomStart event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapEventBuilder.ZoomEnd(System.String)\">\n            <summary>\n            Fired when the map zoom level has changed.\n            </summary>\n            <param name=\"handler\">The name of the JavaScript function that will handle the zoomEnd event.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MapHtmlBuilder.#ctor(Kendo.Mvc.UI.Map)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Kendo.Mvc.UI.MapHtmlBuilder\"/> class.\n            </summary>\n            <param name=\"component\">The Map component.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.MapHtmlBuilder.Build\">\n            <summary>\n            Builds the Map markup.\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsShapeStyleSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleSettingsBuilder.Fill(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleFillSettingsBuilder})\">\n            <summary>\n            The default fill for layer shapes.\n            Accepts a valid CSS color string or object with detailed configuration.\n            </summary>\n            <param name=\"configurator\">The action that configures the fill.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleSettingsBuilder.Stroke(System.Action{Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder})\">\n            <summary>\n            The default stroke for layer shapes.\n            Accepts a valid CSS color string or object with detailed configuration.\n            </summary>\n            <param name=\"configurator\">The action that configures the stroke.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleFillSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsShapeStyleFillSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleFillSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default fill color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleFillSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default fill opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerDefaultsShapeStyleStrokeSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default stroke color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder.DashType(System.String)\">\n            <summary>\n            The default dash type for layer shapes.\n            The following dash types are supported:\n            </summary>\n            <param name=\"value\">The value that configures the dashtype.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default stroke opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerDefaultsShapeStyleStrokeSettingsBuilder.Width(System.Double)\">\n            <summary>\n            The default stroke width for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerStyleSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerStyleSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleSettingsBuilder.Fill(System.Action{Kendo.Mvc.UI.Fluent.MapLayerStyleFillSettingsBuilder})\">\n            <summary>\n            The default fill for layer shapes.\n            Accepts a valid CSS color string or object with detailed configuration.\n            </summary>\n            <param name=\"configurator\">The action that configures the fill.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleSettingsBuilder.Stroke(System.Action{Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder})\">\n            <summary>\n            The default stroke for layer shapes.\n            Accepts a valid CSS color string or object with detailed configuration.\n            </summary>\n            <param name=\"configurator\">The action that configures the stroke.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerStyleFillSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerStyleFillSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleFillSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default fill color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleFillSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default fill opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"T:Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder\">\n            <summary>\n            Defines the fluent API for configuring the MapLayerStyleStrokeSettings settings.\n            </summary>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder.Color(System.String)\">\n            <summary>\n            The default stroke color for layer shapes.\n            Accepts a valid CSS color string, including hex and rgb.\n            </summary>\n            <param name=\"value\">The value that configures the color.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder.DashType(System.Double)\">\n            <summary>\n            The default dash type for layer shapes.\n            The following dash types are supported:\n            </summary>\n            <param name=\"value\">The value that configures the dashtype.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder.Opacity(System.Double)\">\n            <summary>\n            The default stroke opacity (0 to 1) for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the opacity.</param>\n        </member>\n        <member name=\"M:Kendo.Mvc.UI.Fluent.MapLayerStyleStrokeSettingsBuilder.Width(System.Double)\">\n            <summary>\n            The default stroke width for layer shapes.\n            </summary>\n            <param name=\"value\">The value that configures the width.</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Attributes/LocalizedDescriptionAttribute.cs",
    "content": "﻿namespace OJS.Common.Attributes\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reflection;\n\n    public class LocalizedDescriptionAttribute : DescriptionAttribute\n    {\n        public LocalizedDescriptionAttribute(string resourceName, Type resourceType = null)\n        {\n            var resourceProperty = resourceType?.GetProperty(resourceName, BindingFlags.Static | BindingFlags.Public);\n            if (resourceProperty != null)\n            {\n                this.DescriptionValue = (string)resourceProperty.GetValue(resourceProperty.DeclaringType, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Attributes/LocalizedDisplayFormatAttribute.cs",
    "content": "﻿namespace OJS.Common.Attributes\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Reflection;\n\n    public class LocalizedDisplayFormatAttribute : DisplayFormatAttribute\n    {\n        public LocalizedDisplayFormatAttribute()\n        {\n            var resourceProperty = this.NullDisplayTextResourceType?.GetProperty(this.NullDisplayTextResourceName, BindingFlags.Static | BindingFlags.Public);\n            if (resourceProperty != null)\n            {\n                this.NullDisplayText = (string)resourceProperty.GetValue(resourceProperty.DeclaringType, null);\n            }\n        }\n\n        public Type NullDisplayTextResourceType { get; set; }\n\n        public string NullDisplayTextResourceName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Calculator.cs",
    "content": "﻿namespace OJS.Common\n{\n    using System;\n\n    public class Calculator\n    {\n        public static byte? Age(DateTime? date)\n        {\n            if (!date.HasValue)\n            {\n                return null;\n            }\n\n            var birthDate = date.Value;\n            var now = DateTime.Now;\n\n            var age = now.Year - birthDate.Year;\n            if (now.Month < birthDate.Month || (now.Month == birthDate.Month && now.Day < birthDate.Day))\n            {\n                age--;\n            }\n\n            return (byte)age;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/DataAnnotations/DatabasePropertyAttribute.cs",
    "content": "﻿namespace OJS.Common.DataAnnotations\n{\n    using System;\n\n    public class DatabasePropertyAttribute : Attribute\n    {\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/DataAnnotations/ExcludeFromExcelAttribute.cs",
    "content": "﻿namespace OJS.Common.DataAnnotations\n{\n    using System;\n\n    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]\n    public class ExcludeFromExcelAttribute : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/ExpressionBuilder.cs",
    "content": "﻿namespace OJS.Common\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    public static class ExpressionBuilder\n    {\n        public static Expression<Func<TElement, bool>> BuildOrExpression<TElement, TValue>(\n            IEnumerable<TValue> values,\n            Expression<Func<TElement, TValue>> valueSelector)\n        {\n            if (valueSelector == null)\n            {\n                throw new ArgumentNullException(nameof(valueSelector));\n            }\n\n            if (values == null)\n            {\n                throw new ArgumentNullException(nameof(values));\n            }\n\n            var parameterExpression = valueSelector.Parameters.Single();\n\n            if (!values.Any())\n            {\n                return e => false;\n            }\n\n            var equals =\n                values.Select(\n                    value =>\n                    (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));\n\n            var body = equals.Aggregate(Expression.Or);\n\n            return Expression.Lambda<Func<TElement, bool>>(body, parameterExpression);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/CompilerTypeExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using OJS.Common.Models;\n\n    public static class CompilerTypeExtensions\n    {\n        public static string GetFileExtension(this CompilerType compilerType)\n        {\n            switch (compilerType)\n            {\n                case CompilerType.None:\n                    return null;\n                case CompilerType.CSharp:\n                    return \"cs\";\n                case CompilerType.MsBuild:\n                    return \"zip\";\n                case CompilerType.CPlusPlusGcc:\n                    return \"cpp\";\n                case CompilerType.Java:\n                    return \"java\";\n                default:\n                    return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/CompressStringExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System.IO;\n    using System.IO.Compression;\n    using System.Text;\n\n    public static class CompressStringExtensions\n    {\n        public static byte[] Compress(this string stringToCompress)\n        {\n            if (stringToCompress == null)\n            {\n                return null;\n            }\n\n            var bytes = Encoding.UTF8.GetBytes(stringToCompress);\n\n            using (var memoryStreamInput = new MemoryStream(bytes))\n            {\n                using (var memoryStreamOutput = new MemoryStream())\n                {\n                    using (var deflateStream = new DeflateStream(memoryStreamOutput, CompressionMode.Compress))\n                    {\n                        memoryStreamInput.CopyTo(deflateStream);\n                    }\n\n                    return memoryStreamOutput.ToArray();\n                }\n            }\n        }\n\n        public static string Decompress(this byte[] bytes)\n        {\n            if (bytes == null)\n            {\n                return null;\n            }\n\n            using (var memoryStreamInput = new MemoryStream(bytes))\n            {\n                using (var memoryStreamOutput = new MemoryStream())\n                {\n                    using (var deflateStream = new DeflateStream(memoryStreamInput, CompressionMode.Decompress))\n                    {\n                        deflateStream.CopyTo(memoryStreamOutput);\n                    }\n\n                    return Encoding.UTF8.GetString(memoryStreamOutput.ToArray());\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/DirectoryHelpers.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System.IO;\n\n    public static class DirectoryHelpers\n    {\n        public static string CreateTempDirectory()\n        {\n            while (true)\n            {\n                var randomDirectoryName = Path.GetRandomFileName();\n                var path = Path.Combine(Path.GetTempPath(), randomDirectoryName);\n                if (!Directory.Exists(path))\n                {\n                    Directory.CreateDirectory(path);\n                    return path;\n                }\n            }\n        }\n\n        public static void SafeDeleteDirectory(string path, bool recursive = false)\n        {\n            if (Directory.Exists(path))\n            {\n                var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;\n                Directory.EnumerateFileSystemEntries(path, \"*\", searchOption).ForEach(x => File.SetAttributes(x, FileAttributes.Normal));\n\n                Directory.Delete(path, recursive);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/EnumExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common.Attributes;\n\n    public static class EnumExtensions\n    {\n        public static string GetDisplayName<T>(this T enumerationValue)\n        {\n            return GetDisplayName(enumerationValue, typeof(DisplayAttribute));\n        }\n\n        /// <summary>\n        /// Extends the enumeration so that if it has Description attribute on top of the value, it can be taken as a friendly text instead of the basic ToString method\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the enumeration.</typeparam>\n        /// <returns>Enum description</returns>\n        public static string GetDescription<T>(this T enumerationValue)\n            where T : struct\n        {\n            return GetEnumDescription(enumerationValue, typeof(DescriptionAttribute));\n        }\n\n        public static string GetLocalizedDescription<T>(this T enumerationValue)\n            where T : struct\n        {\n            return GetEnumDescription(enumerationValue, typeof(LocalizedDescriptionAttribute));\n        }\n\n        private static string GetEnumDescription<T>(this T enumerationValue, Type descriptionType)\n        {\n            var type = enumerationValue.GetType();\n            if (!type.IsEnum)\n            {\n                throw new ArgumentException(\"EnumerationValue must be of Enum type\", nameof(enumerationValue));\n            }\n\n            // Tries to find a DescriptionAttribute for a potential friendly name for the enum\n            var memberInfo = type.GetMember(enumerationValue.ToString());\n            if (memberInfo.Length > 0)\n            {\n                var customAttributes = memberInfo[0].GetCustomAttributes(descriptionType, false);\n\n                if (customAttributes.Length > 0)\n                {\n                    // Pull out the description value\n                    return ((DescriptionAttribute)customAttributes[0]).Description;\n                }\n            }\n\n            // If we have no description attribute, just return the ToString of the enum\n            return enumerationValue.ToString();\n        }\n\n        private static string GetDisplayName<T>(this T value, Type descriptionType)\n        {\n            var type = value.GetType();\n\n            var memberInfo = type.GetMember(value.ToString());\n            if (memberInfo.Length > 0)\n            {\n                var customAttributes = memberInfo[0].GetCustomAttributes(descriptionType, false);\n\n                if (customAttributes.Length > 0)\n                {\n                    // Pull out the name value\n                    return ((DisplayAttribute)customAttributes[0]).Name;\n                }\n            }\n\n            return value.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/ExecutionStrategyTypeExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using OJS.Common.Models;\n\n    public static class ExecutionStrategyTypeExtensions\n    {\n        public static string GetFileExtension(this ExecutionStrategyType executionStrategyType)\n        {\n            switch (executionStrategyType)\n            {\n                case ExecutionStrategyType.CompileExecuteAndCheck:\n                    return null; // The file extension depends on the compiler.\n                case ExecutionStrategyType.NodeJsPreprocessExecuteAndCheck:\n                    return \"js\";\n                case ExecutionStrategyType.PythonExecuteAndCheck:\n                    return \"py\";\n                default:\n                    return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/FileHelpers.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System.IO;\n\n    // TODO: Unit test\n    public static class FileHelpers\n    {\n        public static string SaveStringToTempFile(string stringToWrite)\n        {\n            var tempFilePath = Path.GetTempFileName();\n            File.WriteAllText(tempFilePath, stringToWrite);\n            return tempFilePath;\n        }\n\n        public static string SaveByteArrayToTempFile(byte[] dataToWrite)\n        {\n            var tempFilePath = Path.GetTempFileName();\n            File.WriteAllBytes(tempFilePath, dataToWrite);\n            return tempFilePath;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/IEnumerableExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System;\n    using System.Collections.Generic;\n\n    public static class IEnumerableExtensions\n    {\n        public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)\n        {\n            foreach (var item in enumerable)\n            {\n                action(item);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/ObjectExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System;\n\n    public static class ObjectExtensions\n    {\n        public static T CastTo<T>(this object obj)\n        {\n            var result = Activator.CreateInstance(typeof(T));\n\n            foreach (var property in obj.GetType().GetProperties())\n            {\n                try\n                {\n                    result.GetType().GetProperty(property.Name).SetValue(result, property.GetValue(obj));\n                }\n                catch\n                {\n                }\n            }\n\n            return (T)result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/PlagiarismDetectorTypeExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System;\n\n    using OJS.Common.Models;\n\n    public static class PlagiarismDetectorTypeExtensions\n    {\n        public static CompilerType[] GetCompatibleCompilerTypes(this PlagiarismDetectorType plagiarismDetectorType)\n        {\n            switch (plagiarismDetectorType)\n            {\n                case PlagiarismDetectorType.CSharpCompileDisassemble:\n                    return new[] { CompilerType.CSharp };\n                case PlagiarismDetectorType.JavaCompileDisassemble:\n                    return new[] { CompilerType.Java };\n                case PlagiarismDetectorType.PlainText:\n                    return new[]\n                    {\n                        CompilerType.None,\n                        CompilerType.CSharp,\n                        CompilerType.CPlusPlusGcc,\n                        CompilerType.Java,\n                    };\n                default:\n                    throw new ArgumentOutOfRangeException(\n                        nameof(plagiarismDetectorType),\n                        plagiarismDetectorType,\n                        null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/StreamExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System.IO;\n\n    public static class StreamExtensions\n    {\n        public static byte[] ToByteArray(this Stream input)\n        {\n            var buffer = new byte[16 * 1024];\n            using (var memoryStream = new MemoryStream())\n            {\n                int read;\n                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)\n                {\n                    memoryStream.Write(buffer, 0, read);\n                }\n\n                return memoryStream.ToArray();\n            }\n        }\n\n        public static Stream ToStream(this byte[] input)\n        {\n            var fileStream = new MemoryStream(input) { Position = 0 };\n            return fileStream;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Extensions/StringExtensions.cs",
    "content": "﻿namespace OJS.Common.Extensions\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n    using System.Text;\n    using System.Text.RegularExpressions;\n\n    public static class StringExtensions\n    {\n        public static DateTime TryGetDate(this string date)\n        {\n            try\n            {\n                return DateTime.ParseExact(date, \"dd/MM/yyyy\", null);\n            }\n            catch (Exception)\n            {\n                return new DateTime(2010, 1, 1);\n            }\n        }\n\n        public static byte[] ToByteArray(this string sourceString)\n        {\n            var encoding = new UTF8Encoding();\n            return encoding.GetBytes(sourceString);\n        }\n\n        public static int ToInteger(this string input)\n        {\n            int integerValue;\n            int.TryParse(input, out integerValue);\n            return integerValue;\n        }\n\n        public static string ToUrl(this string uglyString)\n        {\n            var resultString = new StringBuilder(uglyString.Length);\n            bool isLastCharacterDash = false;\n\n            uglyString = uglyString.Replace(\"C#\", \"CSharp\");\n            uglyString = uglyString.Replace(\"C++\", \"CPlusPlus\");\n\n            foreach (var character in uglyString)\n            {\n                if (char.IsLetterOrDigit(character))\n                {\n                    resultString.Append(character);\n                    isLastCharacterDash = false;\n                }\n                else if (!isLastCharacterDash)\n                {\n                    resultString.Append('-');\n                    isLastCharacterDash = true;\n                }\n            }\n\n            return resultString.ToString().Trim('-');\n        }\n\n        public static string Repeat(this string input, int count)\n        {\n            var builder = new StringBuilder((input?.Length ?? 0) * count);\n\n            for (int i = 0; i < count; i++)\n            {\n                builder.Append(input);\n            }\n\n            return builder.ToString();\n        }\n\n        public static string GetFileExtension(this string fileName)\n        {\n            if (string.IsNullOrWhiteSpace(fileName))\n            {\n                return string.Empty;\n            }\n\n            string[] fileParts = fileName.Split(new[] { \".\" }, StringSplitOptions.None);\n            if (fileParts.Length == 1 || string.IsNullOrEmpty(fileParts.Last()))\n            {\n                return string.Empty;\n            }\n\n            return fileParts.Last().Trim().ToLower();\n        }\n\n        public static string MaxLength(this string stringToTrim, int maxLength)\n        {\n            if (stringToTrim == null || stringToTrim.Length <= maxLength)\n            {\n                return stringToTrim;\n            }\n\n            return stringToTrim.Substring(0, maxLength);\n        }\n\n        // TODO: Unit test\n        public static string MaxLengthWithEllipsis(this string stringToTrim, int maxLength)\n        {\n            if (stringToTrim == null || stringToTrim.Length <= maxLength)\n            {\n                return stringToTrim;\n            }\n\n            return stringToTrim.Substring(0, maxLength) + \"...\";\n        }\n\n        // TODO: Test\n        public static IEnumerable<string> GetStringsBetween(this string stringToParse, string beforeString, string afterString)\n        {\n            var regEx = new Regex(Regex.Escape(beforeString) + \"(.*?)\" + Regex.Escape(afterString), RegexOptions.Singleline | RegexOptions.Compiled);\n            var matches = regEx.Matches(stringToParse);\n            foreach (Match match in matches)\n            {\n                yield return match.Groups[1].Value;\n            }\n        }\n\n        // TODO: Test\n        public static string GetStringBetween(this string stringToParse, string beforeString, string afterString)\n        {\n            var strings = stringToParse.GetStringsBetween(beforeString, afterString).ToList();\n            if (!strings.Any())\n            {\n                return null;\n            }\n\n            return strings[0];\n        }\n\n        public static string GetStringWithEllipsisBetween(this string input, int startIndex, int endIndex)\n        {\n            string result = null;\n\n            if (input != null)\n            {\n                if (startIndex == endIndex)\n                {\n                    result = string.Empty;\n                }\n                else\n                {\n                    const string Ellipsis = \"...\";\n\n                    result = string.Format(\n                        \"{0}{1}{2}\",\n                        startIndex > Ellipsis.Length ? Ellipsis : string.Empty,\n                        input.Substring(startIndex, endIndex - startIndex),\n                        input.Length - endIndex > Ellipsis.Length ? Ellipsis : string.Empty);\n                }\n            }\n\n            return result;\n        }\n\n        public static int GetFirstDifferenceIndexWith(this string input, string other, bool ignoreCase = false)\n        {\n            var firstDifferenceIndex = -1;\n\n            if (input != null && other != null)\n            {\n                var maxIndex = Math.Min(input.Length, other.Length);\n                for (var i = 0; i < maxIndex; i++)\n                {\n                    var areEqualChars = ignoreCase ?\n                        char.ToUpperInvariant(input[i]) == char.ToUpperInvariant(other[i]) :\n                        input[i] == other[i];\n                    if (!areEqualChars)\n                    {\n                        firstDifferenceIndex = i;\n                        break;\n                    }\n                }\n\n                if (firstDifferenceIndex < 0 && input.Length != other.Length)\n                {\n                    firstDifferenceIndex = maxIndex;\n                }\n            }\n\n            if (input == null ^ other == null)\n            {\n                firstDifferenceIndex = 0;\n            }\n\n            return firstDifferenceIndex;\n        }\n\n        // TODO: Test\n        public static string ToValidFileName(this string input)\n        {\n            var invalidCharacters = Path.GetInvalidFileNameChars();\n            var fixedString = new StringBuilder(input);\n            foreach (var ch in invalidCharacters)\n            {\n                fixedString.Replace(ch, '_');\n            }\n\n            return fixedString.ToString();\n        }\n\n        // TODO: Test\n        public static string ToValidFilePath(this string input)\n        {\n            var invalidCharacters = Path.GetInvalidPathChars();\n            var fixedString = new StringBuilder(input);\n            foreach (var ch in invalidCharacters)\n            {\n                fixedString.Replace(ch, '_');\n            }\n\n            return fixedString.ToString();\n        }\n\n        public static string PascalCaseToText(this string input)\n        {\n            if (input == null)\n            {\n                return null;\n            }\n\n            const char WhiteSpace = ' ';\n\n            var result = new StringBuilder();\n            var currentWord = new StringBuilder();\n            var abbreviation = new StringBuilder();\n\n            char previous = WhiteSpace;\n            bool inWord = false;\n            bool isAbbreviation = false;\n\n            for (int i = 0; i < input.Length; i++)\n            {\n                char symbolToAdd = input[i];\n\n                if (char.IsUpper(symbolToAdd) && previous == WhiteSpace && !inWord)\n                {\n                    inWord = true;\n                    isAbbreviation = true;\n                    abbreviation.Append(symbolToAdd);\n                }\n                else if (char.IsUpper(symbolToAdd) && inWord)\n                {\n                    abbreviation.Append(symbolToAdd);\n                    currentWord.Append(WhiteSpace);\n                    symbolToAdd = char.ToLower(symbolToAdd);\n                }\n                else if (char.IsLower(symbolToAdd) && inWord)\n                {\n                    isAbbreviation = false;\n                }\n                else if (symbolToAdd == WhiteSpace)\n                {\n                    result.Append(isAbbreviation && abbreviation.Length > 1 ? abbreviation.ToString() : currentWord.ToString());\n                    currentWord.Clear();\n                    abbreviation.Clear();\n\n                    if (result.Length > 0)\n                    {\n                        abbreviation.Append(WhiteSpace);\n                    }\n\n                    inWord = false;\n                    isAbbreviation = false;\n                }\n\n                previous = symbolToAdd;\n                currentWord.Append(symbolToAdd);\n            }\n\n            if (currentWord.Length > 0)\n            {\n                result.Append(isAbbreviation && abbreviation.Length > 1 ? abbreviation.ToString() : currentWord.ToString());\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/GlobalConstants.cs",
    "content": "﻿namespace OJS.Common\n{\n    public static class GlobalConstants\n    {\n        // TempData dictionary keys\n        public const string InfoMessage = \"InfoMessage\";\n        public const string DangerMessage = \"DangerMessage\";\n\n        // ModelState dictionary keys\n        public const string DateTimeError = \"DateTimeError\";\n\n        // Action names\n        public const string Index = \"Index\";\n\n        // Partial views\n        public const string QuickContestsGrid = \"_QuickContestsGrid\";\n\n        // Other\n        public const string ExcelMimeType = \"application/vnd.ms-excel\";\n        public const string JsonMimeType = \"application/json\";\n        public const string ZipMimeType = \"application/zip\";\n        public const string BinaryFileMimeType = \"application/octet-stream\";\n\n        public const string ZipFileExtension = \".zip\";\n        public const string ExecutableFileExtension = \".exe\";\n\n        public const string AdministratorRoleName = \"Administrator\";\n\n        public const string EmailRegEx = \"^[A-Za-z0-9]+[\\\\._A-Za-z0-9-]+@([A-Za-z0-9]+[-\\\\.]?[A-Za-z0-9]+)+(\\\\.[A-Za-z0-9]+[-\\\\.]?[A-Za-z0-9]+)*(\\\\.[A-Za-z]{2,})$\";\n\n        public const int FileExtentionMaxLength = 4;\n\n        public const int IpAdressMaxLength = 45;\n\n        public const int MinimumSearchTermLength = 3;\n\n        public const int FeedbackContentMinLength = 10;\n\n        public const int DefaultProcessExitTimeOutMilliseconds = 5000; // ms\n\n        // Account\n        public const int UserNameMaxLength = 15;\n        public const int UserNameMinLength = 5;\n        public const string UserNameRegEx = @\"^[a-zA-Z]([/._]?[a-zA-Z0-9]+)+$\";\n\n        public const int PasswordMinLength = 6;\n        public const int PasswordMaxLength = 100;\n\n        public const int EmailMaxLength = 80;\n\n        public const int FirstNameMaxLength = 30;\n        public const int LastNameMaxLength = 30;\n        public const int CityNameMaxLength = 30;\n        public const int EducationalInstitutionMaxLength = 50;\n        public const int FacultyNumberMaxLength = 30;\n        public const int CompanyNameMaxLength = 30;\n        public const int JobTitleMaxLenth = 30;\n\n        // News\n        public const int NewsTitleMaxLength = 200;\n        public const int NewsTitleMinLength = 1;\n\n        public const int NewsAuthorNameMaxLength = 25;\n        public const int NewsAuthorNameMinLength = 2;\n\n        public const int NewsSourceMaxLength = 50;\n        public const int NewsSourceMinLength = 6;\n\n        public const int NewsContentMinLength = 10;\n\n        // Contests\n        public const int ContestNameMaxLength = 100;\n        public const int ContestNameMinLength = 4;\n\n        public const int ContestPasswordMaxLength = 20;\n\n        public const int ContestCategoryNameMaxLength = 100;\n        public const int ContestCategoryNameMinLength = 6;\n\n        public const int ContestQuestionMaxLength = 100;\n        public const int ContestQuestionMinLength = 1;\n\n        public const int ContestQuestionAnswerMaxLength = 100;\n        public const int ContestQuestionAnswerMinLength = 1;\n\n        // Administration\n        public const int CheckerNameMaxLength = 100;\n        public const int CheckerNameMinLength = 1;\n\n        public const int ProblemNameMaxLength = 50;\n\n        public const int ProblemDefaultMaximumPoints = 100;\n        public const int ProblemDefaultTimeLimit = 1000;\n        public const int ProblemDefaultMemoryLimit = 32 * 1024 * 1024;\n\n        public const int ProblemResourceNameMaxLength = 50;\n        public const int ProblemResourceNameMinLength = 3;\n\n        public const int SubmissionTypeNameMaxLength = 100;\n        public const int SubmissionTypeNameMinLength = 1;\n\n        public const int TestInputMinLength = 1;\n        public const int TestOutputMinLength = 1;\n\n        // Submission\n        public const string ContentAsStringErrorMessage = \"This is a binary file (not a text submission).\";\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/MailSender.cs",
    "content": "﻿namespace OJS.Common\n{\n    using System.Collections.Generic;\n    using System.Net.Mail;\n    using System.Text;\n\n    public sealed class MailSender\n    {\n        // TODO: Extract user, address and password as app.config settings\n        private const string SendFrom = \"telerikacademy@telerik.com\";\n        private const string SendFromName = \"BGCoder.com\";\n        private const string Password = \"__YOUR_PASSWORD_HERE__\";\n\n        private const string ServerAddress = \"127.0.0.1\";\n        private const int ServerPort = 25;\n\n        private static readonly object SyncRoot = new object();\n\n        private static MailSender instance;\n        private readonly SmtpClient mailClient;\n\n        private MailSender()\n        {\n            this.mailClient = new SmtpClient\n            {\n                Host = \"127.0.0.1\",\n                Port = 25,\n                DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,\n                PickupDirectoryLocation = @\"C:\\inetpub\\mailroot\\Pickup\"\n            };\n        }\n\n        public static MailSender Instance\n        {\n            get\n            {\n                if (instance == null)\n                {\n                    lock (SyncRoot)\n                    {\n                        if (instance == null)\n                        {\n                            instance = new MailSender();\n                        }\n                    }\n                }\n\n                return instance;\n            }\n        }\n\n        public void SendMailAsync(string recipient, string subject, string messageBody, IEnumerable<string> bccRecipients = null)\n        {\n            var message = this.PrepareMessage(recipient, subject, messageBody, bccRecipients);\n            this.mailClient.SendAsync(message, null);\n        }\n\n        public void SendMail(string recipient, string subject, string messageBody, IEnumerable<string> bccRecipients = null)\n        {\n            var message = this.PrepareMessage(recipient, subject, messageBody, bccRecipients);\n            this.mailClient.Send(message);\n        }\n\n        private MailMessage PrepareMessage(string recipient, string subject, string messageBody, IEnumerable<string> bccRecipients)\n        {\n            var mailTo = new MailAddress(recipient);\n            var mailFrom = new MailAddress(SendFrom, SendFromName);\n            var message = new MailMessage(mailFrom, mailTo)\n            {\n                Body = messageBody,\n                BodyEncoding = Encoding.UTF8,\n                IsBodyHtml = true,\n                Subject = subject,\n                SubjectEncoding = Encoding.UTF8,\n            };\n\n            if (bccRecipients != null)\n            {\n                foreach (var bccRecipient in bccRecipients)\n                {\n                    message.Bcc.Add(bccRecipient);\n                }\n            }\n\n            return message;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/CompilerType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    public enum CompilerType\n    {\n        None = 0,\n        CSharp = 1,\n        MsBuild = 2,\n        CPlusPlusGcc = 3,\n        Java = 4,\n        JavaZip = 5,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/ContestQuestionType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    using OJS.Common.Attributes;\n\n    using Resource = Resources.Enums.EnumTranslations;\n\n    public enum ContestQuestionType\n    {\n        [LocalizedDescription(\"Default\", typeof(Resource))]\n        Default = 0, // If possible answers available then DropDown, else text box\n\n        [LocalizedDescription(\"DropDown\", typeof(Resource))]\n        DropDown = 1,\n\n        [LocalizedDescription(\"TextBox\", typeof(Resource))]\n        TextBox = 2,\n\n        [LocalizedDescription(\"MultiLineTextBox\", typeof(Resource))]\n        MultiLineTextBox = 3,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/ExecutionStrategyType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    public enum ExecutionStrategyType\n    {\n        DoNothing = 0,\n        CompileExecuteAndCheck = 1,\n        CSharpTestRunner = 9,\n        NodeJsPreprocessExecuteAndCheck = 2,\n        NodeJsPreprocessExecuteAndRunUnitTestsWithMocha = 7,\n        IoJsPreprocessExecuteAndRunJsDomUnitTests = 8,\n        RemoteExecution = 3,\n        JavaPreprocessCompileExecuteAndCheck = 4,\n        JavaZipFileCompileExecuteAndCheck = 10,\n        PythonExecuteAndCheck = 11,\n        PhpCgiExecuteAndCheck = 5,\n        PhpCliExecuteAndCheck = 6\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/PlagiarismDetectorType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    using OJS.Common.Attributes;\n\n    using Resource = Resources.Enums.EnumTranslations;\n\n    public enum PlagiarismDetectorType\n    {\n        [LocalizedDescription(\"CSharpCompileDisassemble\", typeof(Resource))]\n        CSharpCompileDisassemble = 1,\n\n        [LocalizedDescription(\"JavaCompileDisassemble\", typeof(Resource))]\n        JavaCompileDisassemble = 2,\n\n        [LocalizedDescription(\"PlainText\", typeof(Resource))]\n        PlainText = 3,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/ProblemResourceType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    using OJS.Common.Attributes;\n\n    using Resource = Resources.Enums.EnumTranslations;\n\n    public enum ProblemResourceType\n    {\n        [LocalizedDescription(\"ProblemDescription\", typeof(Resource))]\n        ProblemDescription = 1,\n\n        [LocalizedDescription(\"AuthorsSolution\", typeof(Resource))]\n        AuthorsSolution = 2,\n\n        [LocalizedDescription(\"Video\", typeof(Resource))]\n        Video = 3,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Models/TestRunResultType.cs",
    "content": "﻿namespace OJS.Common.Models\n{\n    public enum TestRunResultType\n    {\n        CorrectAnswer = 0,\n        WrongAnswer = 1,\n        TimeLimit = 2,\n        MemoryLimit = 3,\n        RunTimeError = 4,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/OJS.Common.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Common</RootNamespace>\n    <AssemblyName>OJS.Common</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Calculator.cs\" />\n    <Compile Include=\"Attributes\\LocalizedDescriptionAttribute.cs\" />\n    <Compile Include=\"Attributes\\LocalizedDisplayFormatAttribute.cs\" />\n    <Compile Include=\"DataAnnotations\\DatabasePropertyAttribute.cs\" />\n    <Compile Include=\"ExpressionBuilder.cs\" />\n    <Compile Include=\"Extensions\\CompilerTypeExtensions.cs\" />\n    <Compile Include=\"Extensions\\CompressStringExtensions.cs\" />\n    <Compile Include=\"DataAnnotations\\ExcludeFromExcelAttribute.cs\" />\n    <Compile Include=\"Extensions\\DirectoryHelpers.cs\" />\n    <Compile Include=\"Extensions\\EnumExtensions.cs\" />\n    <Compile Include=\"Extensions\\ExecutionStrategyTypeExtensions.cs\" />\n    <Compile Include=\"Extensions\\IEnumerableExtensions.cs\" />\n    <Compile Include=\"Extensions\\ObjectExtensions.cs\" />\n    <Compile Include=\"Extensions\\FileHelpers.cs\" />\n    <Compile Include=\"Extensions\\PlagiarismDetectorTypeExtensions.cs\" />\n    <Compile Include=\"Extensions\\StreamExtensions.cs\" />\n    <Compile Include=\"GlobalConstants.cs\" />\n    <Compile Include=\"MailSender.cs\" />\n    <Compile Include=\"Models\\CompilerType.cs\" />\n    <Compile Include=\"Models\\ContestQuestionType.cs\" />\n    <Compile Include=\"Models\\ExecutionStrategyType.cs\" />\n    <Compile Include=\"Models\\PlagiarismDetectorType.cs\" />\n    <Compile Include=\"Models\\TestRunResultType.cs\" />\n    <Compile Include=\"Models\\ProblemResourceType.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"Resources\\Enums\\EnumTranslations.bg.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>EnumTranslations.bg.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Resources\\Enums\\EnumTranslations.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>EnumTranslations.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"SynchronizedHashtable.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\Enums\\EnumTranslations.bg.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>EnumTranslations.bg.Designer.cs</LastGenOutput>\n      <CustomToolNamespace>Resources.Enums</CustomToolNamespace>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Resources\\Enums\\EnumTranslations.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>EnumTranslations.Designer.cs</LastGenOutput>\n      <CustomToolNamespace>Resources.Enums</CustomToolNamespace>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/OJS.Common/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Common\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Common\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"db703e57-8e0e-4f24-ab82-6b76e106304f\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Resources/Enums/EnumTranslations.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Enums {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class EnumTranslations {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal EnumTranslations() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Common.Resources.Enums.EnumTranslations\", typeof(EnumTranslations).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Authors Solution.\n        /// </summary>\n        public static string AuthorsSolution {\n            get {\n                return ResourceManager.GetString(\"AuthorsSolution\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to C# code.\n        /// </summary>\n        public static string CSharpCompileDisassemble {\n            get {\n                return ResourceManager.GetString(\"CSharpCompileDisassemble\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Default.\n        /// </summary>\n        public static string Default {\n            get {\n                return ResourceManager.GetString(\"Default\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DropDown.\n        /// </summary>\n        public static string DropDown {\n            get {\n                return ResourceManager.GetString(\"DropDown\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Java code.\n        /// </summary>\n        public static string JavaCompileDisassemble {\n            get {\n                return ResourceManager.GetString(\"JavaCompileDisassemble\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MultiLine TextBox.\n        /// </summary>\n        public static string MultiLineTextBox {\n            get {\n                return ResourceManager.GetString(\"MultiLineTextBox\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Plain text.\n        /// </summary>\n        public static string PlainText {\n            get {\n                return ResourceManager.GetString(\"PlainText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem Description.\n        /// </summary>\n        public static string ProblemDescription {\n            get {\n                return ResourceManager.GetString(\"ProblemDescription\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to TextBox.\n        /// </summary>\n        public static string TextBox {\n            get {\n                return ResourceManager.GetString(\"TextBox\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Video.\n        /// </summary>\n        public static string Video {\n            get {\n                return ResourceManager.GetString(\"Video\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/Resources/Enums/EnumTranslations.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/OJS.Common/Resources/Enums/EnumTranslations.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AuthorsSolution\" xml:space=\"preserve\">\n    <value>Авторско решение</value>\n  </data>\n  <data name=\"CSharpCompileDisassemble\" xml:space=\"preserve\">\n    <value>C# код</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>По подразбиране</value>\n  </data>\n  <data name=\"DropDown\" xml:space=\"preserve\">\n    <value>Dropdown лист</value>\n  </data>\n  <data name=\"JavaCompileDisassemble\" xml:space=\"preserve\">\n    <value>Java код</value>\n  </data>\n  <data name=\"MultiLineTextBox\" xml:space=\"preserve\">\n    <value>Многоредов текст</value>\n  </data>\n  <data name=\"PlainText\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n  <data name=\"ProblemDescription\" xml:space=\"preserve\">\n    <value>Условие</value>\n  </data>\n  <data name=\"TextBox\" xml:space=\"preserve\">\n    <value>Едноредов текст</value>\n  </data>\n  <data name=\"Video\" xml:space=\"preserve\">\n    <value>Видео</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/OJS.Common/Resources/Enums/EnumTranslations.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AuthorsSolution\" xml:space=\"preserve\">\n    <value>Authors Solution</value>\n  </data>\n  <data name=\"CSharpCompileDisassemble\" xml:space=\"preserve\">\n    <value>C# code</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>Default</value>\n  </data>\n  <data name=\"DropDown\" xml:space=\"preserve\">\n    <value>DropDown</value>\n  </data>\n  <data name=\"JavaCompileDisassemble\" xml:space=\"preserve\">\n    <value>Java code</value>\n  </data>\n  <data name=\"MultiLineTextBox\" xml:space=\"preserve\">\n    <value>MultiLine TextBox</value>\n  </data>\n  <data name=\"PlainText\" xml:space=\"preserve\">\n    <value>Plain text</value>\n  </data>\n  <data name=\"ProblemDescription\" xml:space=\"preserve\">\n    <value>Problem Description</value>\n  </data>\n  <data name=\"TextBox\" xml:space=\"preserve\">\n    <value>TextBox</value>\n  </data>\n  <data name=\"Video\" xml:space=\"preserve\">\n    <value>Video</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/OJS.Common/SynchronizedHashtable.cs",
    "content": "﻿namespace OJS.Common\n{\n    using System;\n    using System.Collections;\n\n    public class SynchronizedHashtable\n    {\n        private readonly Hashtable hashtable;\n\n        public SynchronizedHashtable()\n        {\n            var unsynchronizedHashtable = new Hashtable();\n            this.hashtable = Hashtable.Synchronized(unsynchronizedHashtable);\n        }\n\n        public bool Contains(object value)\n        {\n            return this.hashtable.ContainsKey(value);\n        }\n\n        public bool Add(object value)\n        {\n            if (this.hashtable.ContainsKey(value))\n            {\n                return false;\n            }\n\n            try\n            {\n                this.hashtable.Add(value, true);\n                return true;\n            }\n            catch (ArgumentException)\n            {\n                // The item is already in the hashtable.\n                return false;\n            }\n        }\n\n        public void Remove(object value)\n        {\n            this.hashtable.Remove(value);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/OJS.Common/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Open Judge System.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.25420.1\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Web\", \"Web\", \"{93034417-0AAA-4E72-84EA-767DB4EF5283}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Workers\", \"Workers\", \"{BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{9DAC057C-7607-48F0-B961-70BAAF4C368A}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Data\", \"Data\", \"{699277CE-89E7-4F00-A8BF-96A8450529E9}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Data.Models\", \"Data\\OJS.Data.Models\\OJS.Data.Models.csproj\", \"{341CA732-D483-4487-923E-27ED2A6E9A4F}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Web\", \"Web\\OJS.Web\\OJS.Web.csproj\", \"{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Data\", \"Data\\OJS.Data\\OJS.Data.csproj\", \"{1807194C-9E25-4365-B3BE-FE1DF627612B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Data.Contracts\", \"Data\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\", \"{8C4BF453-24EF-46F3-B947-31505FB905DE}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"External Libraries\", \"External Libraries\", \"{3003E3B3-84A6-48E8-8252-B532A5086EB1}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\tExternal Libraries\\Kendo.Mvc.dll = External Libraries\\Kendo.Mvc.dll\r\n\t\tExternal Libraries\\Kendo.Mvc.README = External Libraries\\Kendo.Mvc.README\r\n\t\tExternal Libraries\\Kendo.Mvc.xml = External Libraries\\Kendo.Mvc.xml\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Tests.Common\", \"Tests\\OJS.Tests.Common\\OJS.Tests.Common.csproj\", \"{01CC0B02-529E-4D5F-B345-0B92F6920854}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tools\", \"Tools\", \"{B0824D7E-8597-4CC2-AEB2-EED1CDBFD007}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Common\", \"Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\", \"{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Checkers\", \"Workers\\OJS.Workers.Checkers\\OJS.Workers.Checkers.csproj\", \"{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Common.Tests\", \"Tests\\OJS.Common.Tests\\OJS.Common.Tests.csproj\", \"{F4AD07BC-B932-4D09-82D8-9800C9260B33}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Controller\", \"Workers\\OJS.Workers.Controller\\OJS.Workers.Controller.csproj\", \"{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Agent\", \"Workers\\OJS.Workers.Agent\\OJS.Workers.Agent.csproj\", \"{CE54BB68-B790-47F4-8412-58C2BAC900BD}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Checkers.Tests\", \"Tests\\OJS.Workers.Checkers.Tests\\OJS.Workers.Checkers.Tests.csproj\", \"{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Executors\", \"Workers\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\", \"{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Compilers\", \"Workers\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\", \"{8570183B-9D7A-408D-9EA6-F86F59B05A10}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SandboxExecutorProofOfConcept\", \"Tools\\SandboxExecutorProofOfConcept\\SandboxExecutorProofOfConcept.csproj\", \"{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SandboxTarget\", \"Tools\\SandboxTarget\\SandboxTarget.csproj\", \"{D51F7D60-421C-44B2-9422-2610066CB82D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Executors.Tests\", \"Tests\\OJS.Workers.Executors.Tests\\OJS.Workers.Executors.Tests.csproj\", \"{5054FE58-791D-41EA-9ED9-911788A7E631}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Web.Common\", \"Web\\OJS.Web.Common\\OJS.Web.Common.csproj\", \"{2E08E0AF-0E51-47CA-947B-4C66086FA030}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Common\", \"OJS.Common\\OJS.Common.csproj\", \"{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.LocalWorker\", \"Workers\\OJS.Workers.LocalWorker\\OJS.Workers.LocalWorker.csproj\", \"{5D3361F8-F50B-415F-826A-724DCDAA4A89}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.ExecutionStrategies\", \"Workers\\OJS.Workers.ExecutionStrategies\\OJS.Workers.ExecutionStrategies.csproj\", \"{69966098-E5B2-46CD-88E9-1F79B245ADE0}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Compilers.Tests\", \"Tests\\OJS.Workers.Compilers.Tests\\OJS.Workers.Compilers.Tests.csproj\", \"{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Tools\", \"Workers\\OJS.Workers.Tools\\OJS.Workers.Tools.csproj\", \"{A1F48412-495A-434C-BDD0-E70AEDAD6897}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.Tools.Tests\", \"Tests\\OJS.Workers.Tools.Tests\\OJS.Workers.Tools.Tests.csproj\", \"{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OJS.Workers.ExecutionStrategies.Tests\", \"Tests\\OJS.Workers.ExecutionStrategies.Tests\\OJS.Workers.ExecutionStrategies.Tests.csproj\", \"{1A12AF9D-5BD6-455E-924E-54E686A2F270}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SqlTestingPoC\", \"Tools\\SqlTestingPoC\\SqlTestingPoC.csproj\", \"{2AE356DA-FCD4-4601-A533-85042648D7F8}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{341CA732-D483-4487-923E-27ED2A6E9A4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{341CA732-D483-4487-923E-27ED2A6E9A4F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{341CA732-D483-4487-923E-27ED2A6E9A4F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{341CA732-D483-4487-923E-27ED2A6E9A4F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1807194C-9E25-4365-B3BE-FE1DF627612B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1807194C-9E25-4365-B3BE-FE1DF627612B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1807194C-9E25-4365-B3BE-FE1DF627612B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1807194C-9E25-4365-B3BE-FE1DF627612B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{8C4BF453-24EF-46F3-B947-31505FB905DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8C4BF453-24EF-46F3-B947-31505FB905DE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8C4BF453-24EF-46F3-B947-31505FB905DE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8C4BF453-24EF-46F3-B947-31505FB905DE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{01CC0B02-529E-4D5F-B345-0B92F6920854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{01CC0B02-529E-4D5F-B345-0B92F6920854}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{01CC0B02-529E-4D5F-B345-0B92F6920854}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{01CC0B02-529E-4D5F-B345-0B92F6920854}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F4AD07BC-B932-4D09-82D8-9800C9260B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F4AD07BC-B932-4D09-82D8-9800C9260B33}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F4AD07BC-B932-4D09-82D8-9800C9260B33}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F4AD07BC-B932-4D09-82D8-9800C9260B33}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{CE54BB68-B790-47F4-8412-58C2BAC900BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CE54BB68-B790-47F4-8412-58C2BAC900BD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CE54BB68-B790-47F4-8412-58C2BAC900BD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CE54BB68-B790-47F4-8412-58C2BAC900BD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{8570183B-9D7A-408D-9EA6-F86F59B05A10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8570183B-9D7A-408D-9EA6-F86F59B05A10}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8570183B-9D7A-408D-9EA6-F86F59B05A10}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8570183B-9D7A-408D-9EA6-F86F59B05A10}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{D51F7D60-421C-44B2-9422-2610066CB82D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D51F7D60-421C-44B2-9422-2610066CB82D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D51F7D60-421C-44B2-9422-2610066CB82D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D51F7D60-421C-44B2-9422-2610066CB82D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5054FE58-791D-41EA-9ED9-911788A7E631}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5054FE58-791D-41EA-9ED9-911788A7E631}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5054FE58-791D-41EA-9ED9-911788A7E631}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5054FE58-791D-41EA-9ED9-911788A7E631}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{2E08E0AF-0E51-47CA-947B-4C66086FA030}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2E08E0AF-0E51-47CA-947B-4C66086FA030}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2E08E0AF-0E51-47CA-947B-4C66086FA030}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2E08E0AF-0E51-47CA-947B-4C66086FA030}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5D3361F8-F50B-415F-826A-724DCDAA4A89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5D3361F8-F50B-415F-826A-724DCDAA4A89}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5D3361F8-F50B-415F-826A-724DCDAA4A89}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5D3361F8-F50B-415F-826A-724DCDAA4A89}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{69966098-E5B2-46CD-88E9-1F79B245ADE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{69966098-E5B2-46CD-88E9-1F79B245ADE0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{69966098-E5B2-46CD-88E9-1F79B245ADE0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{69966098-E5B2-46CD-88E9-1F79B245ADE0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A1F48412-495A-434C-BDD0-E70AEDAD6897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A1F48412-495A-434C-BDD0-E70AEDAD6897}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A1F48412-495A-434C-BDD0-E70AEDAD6897}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A1F48412-495A-434C-BDD0-E70AEDAD6897}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1A12AF9D-5BD6-455E-924E-54E686A2F270}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1A12AF9D-5BD6-455E-924E-54E686A2F270}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1A12AF9D-5BD6-455E-924E-54E686A2F270}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1A12AF9D-5BD6-455E-924E-54E686A2F270}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{2AE356DA-FCD4-4601-A533-85042648D7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2AE356DA-FCD4-4601-A533-85042648D7F8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2AE356DA-FCD4-4601-A533-85042648D7F8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2AE356DA-FCD4-4601-A533-85042648D7F8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{341CA732-D483-4487-923E-27ED2A6E9A4F} = {699277CE-89E7-4F00-A8BF-96A8450529E9}\r\n\t\t{C2EF4F1B-A694-4E52-935C-7872F6CAD37C} = {93034417-0AAA-4E72-84EA-767DB4EF5283}\r\n\t\t{1807194C-9E25-4365-B3BE-FE1DF627612B} = {699277CE-89E7-4F00-A8BF-96A8450529E9}\r\n\t\t{8C4BF453-24EF-46F3-B947-31505FB905DE} = {699277CE-89E7-4F00-A8BF-96A8450529E9}\r\n\t\t{01CC0B02-529E-4D5F-B345-0B92F6920854} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{93EC1D66-2CE1-4682-AC09-C8C40178A9AD} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{F4AD07BC-B932-4D09-82D8-9800C9260B33} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{CE54BB68-B790-47F4-8412-58C2BAC900BD} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{8570183B-9D7A-408D-9EA6-F86F59B05A10} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E} = {B0824D7E-8597-4CC2-AEB2-EED1CDBFD007}\r\n\t\t{D51F7D60-421C-44B2-9422-2610066CB82D} = {B0824D7E-8597-4CC2-AEB2-EED1CDBFD007}\r\n\t\t{5054FE58-791D-41EA-9ED9-911788A7E631} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{2E08E0AF-0E51-47CA-947B-4C66086FA030} = {93034417-0AAA-4E72-84EA-767DB4EF5283}\r\n\t\t{5D3361F8-F50B-415F-826A-724DCDAA4A89} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{69966098-E5B2-46CD-88E9-1F79B245ADE0} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{A1F48412-495A-434C-BDD0-E70AEDAD6897} = {BCDBCB6C-55D6-40E7-83FB-9A678E203A9E}\r\n\t\t{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{1A12AF9D-5BD6-455E-924E-54E686A2F270} = {9DAC057C-7607-48F0-B961-70BAAF4C368A}\r\n\t\t{2AE356DA-FCD4-4601-A533-85042648D7F8} = {B0824D7E-8597-4CC2-AEB2-EED1CDBFD007}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Open Judge System/Rules.ruleset",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RuleSet Name=\"Code analysis rules for OpenJudgeSystem\" Description=\"Code analysis rules for OpenJudgeSystem.\" ToolsVersion=\"14.0\">\n  <Rules AnalyzerId=\"Microsoft.Analyzers.ManagedCodeAnalysis\" RuleNamespace=\"Microsoft.Rules.Managed\">\n    <Rule Id=\"CA1001\" Action=\"Warning\" />\n    <Rule Id=\"CA1009\" Action=\"Warning\" />\n    <Rule Id=\"CA1016\" Action=\"Warning\" />\n    <Rule Id=\"CA1033\" Action=\"Warning\" />\n    <Rule Id=\"CA1049\" Action=\"Warning\" />\n    <Rule Id=\"CA1060\" Action=\"Warning\" />\n    <Rule Id=\"CA1061\" Action=\"Warning\" />\n    <Rule Id=\"CA1063\" Action=\"Warning\" />\n    <Rule Id=\"CA1065\" Action=\"Warning\" />\n    <Rule Id=\"CA1301\" Action=\"Warning\" />\n    <Rule Id=\"CA1400\" Action=\"Warning\" />\n    <Rule Id=\"CA1401\" Action=\"Warning\" />\n    <Rule Id=\"CA1403\" Action=\"Warning\" />\n    <Rule Id=\"CA1404\" Action=\"Warning\" />\n    <Rule Id=\"CA1405\" Action=\"Warning\" />\n    <Rule Id=\"CA1410\" Action=\"Warning\" />\n    <Rule Id=\"CA1415\" Action=\"Warning\" />\n    <Rule Id=\"CA1821\" Action=\"Warning\" />\n    <Rule Id=\"CA1900\" Action=\"Warning\" />\n    <Rule Id=\"CA1901\" Action=\"Warning\" />\n    <Rule Id=\"CA2002\" Action=\"Warning\" />\n    <Rule Id=\"CA2100\" Action=\"Warning\" />\n    <Rule Id=\"CA2101\" Action=\"Warning\" />\n    <Rule Id=\"CA2108\" Action=\"Warning\" />\n    <Rule Id=\"CA2111\" Action=\"Warning\" />\n    <Rule Id=\"CA2112\" Action=\"Warning\" />\n    <Rule Id=\"CA2114\" Action=\"Warning\" />\n    <Rule Id=\"CA2116\" Action=\"Warning\" />\n    <Rule Id=\"CA2117\" Action=\"Warning\" />\n    <Rule Id=\"CA2122\" Action=\"Warning\" />\n    <Rule Id=\"CA2123\" Action=\"Warning\" />\n    <Rule Id=\"CA2124\" Action=\"Warning\" />\n    <Rule Id=\"CA2126\" Action=\"Warning\" />\n    <Rule Id=\"CA2131\" Action=\"Warning\" />\n    <Rule Id=\"CA2132\" Action=\"Warning\" />\n    <Rule Id=\"CA2133\" Action=\"Warning\" />\n    <Rule Id=\"CA2134\" Action=\"Warning\" />\n    <Rule Id=\"CA2137\" Action=\"Warning\" />\n    <Rule Id=\"CA2138\" Action=\"Warning\" />\n    <Rule Id=\"CA2140\" Action=\"Warning\" />\n    <Rule Id=\"CA2141\" Action=\"Warning\" />\n    <Rule Id=\"CA2146\" Action=\"Warning\" />\n    <Rule Id=\"CA2147\" Action=\"Warning\" />\n    <Rule Id=\"CA2149\" Action=\"Warning\" />\n    <Rule Id=\"CA2200\" Action=\"Warning\" />\n    <Rule Id=\"CA2202\" Action=\"Warning\" />\n    <Rule Id=\"CA2204\" Action=\"Warning\" />\n    <Rule Id=\"CA2207\" Action=\"Warning\" />\n    <Rule Id=\"CA2211\" Action=\"Warning\" />\n    <Rule Id=\"CA2212\" Action=\"Warning\" />\n    <Rule Id=\"CA2213\" Action=\"Warning\" />\n    <Rule Id=\"CA2214\" Action=\"Warning\" />\n    <Rule Id=\"CA2216\" Action=\"Warning\" />\n    <Rule Id=\"CA2220\" Action=\"Warning\" />\n    <Rule Id=\"CA2223\" Action=\"Warning\" />\n    <Rule Id=\"CA2229\" Action=\"Warning\" />\n    <Rule Id=\"CA2231\" Action=\"Warning\" />\n    <Rule Id=\"CA2232\" Action=\"Warning\" />\n    <Rule Id=\"CA2235\" Action=\"Warning\" />\n    <Rule Id=\"CA2236\" Action=\"Warning\" />\n    <Rule Id=\"CA2237\" Action=\"Warning\" />\n    <Rule Id=\"CA2238\" Action=\"Warning\" />\n    <Rule Id=\"CA2240\" Action=\"Warning\" />\n    <Rule Id=\"CA2241\" Action=\"Warning\" />\n    <Rule Id=\"CA2242\" Action=\"Warning\" />\n  </Rules>\n  <Rules AnalyzerId=\"StyleCop.Analyzers\" RuleNamespace=\"StyleCop.Analyzers\">\n    <Rule Id=\"SA0001\" Action=\"None\" />\n    <Rule Id=\"SA0002\" Action=\"None\" />\n    <Rule Id=\"SA1412\" Action=\"Warning\" />\n    <Rule Id=\"SA1413\" Action=\"None\" />\n    <Rule Id=\"SA1600\" Action=\"None\" />\n    <Rule Id=\"SA1604\" Action=\"None\" />\n    <Rule Id=\"SA1611\" Action=\"None\" />\n    <Rule Id=\"SA1615\" Action=\"None\" />\n    <Rule Id=\"SA1629\" Action=\"Warning\" />\n    <Rule Id=\"SA1633\" Action=\"None\" />\n    <Rule Id=\"SA1639\" Action=\"Warning\" />\n    <Rule Id=\"SA1644\" Action=\"Warning\" />\n    <Rule Id=\"SA1652\" Action=\"None\" />\n  </Rules>\n</RuleSet>"
  },
  {
    "path": "Open Judge System/Settings.StyleCop",
    "content": "<StyleCopSettings Version=\"105\">\n  <Analyzers>\n    <Analyzer AnalyzerId=\"StyleCop.CSharp.DocumentationRules\">\n      <Rules>\n        <Rule Name=\"ElementsMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"PartialElementsMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"EnumerationItemsMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"DocumentationMustContainValidXml\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementDocumentationMustHaveSummary\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"PartialElementDocumentationMustHaveSummary\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementDocumentationMustHaveSummaryText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"PartialElementDocumentationMustHaveSummaryText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementDocumentationMustNotHaveDefaultSummary\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementParametersMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementParameterDocumentationMustDeclareParameterName\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementParameterDocumentationMustHaveText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementReturnValueMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementReturnValueDocumentationMustHaveText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"GenericTypeParametersMustBeDocumented\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"GenericTypeParametersMustBeDocumentedPartialClass\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"GenericTypeParameterDocumentationMustMatchTypeParameters\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"GenericTypeParameterDocumentationMustDeclareParameterName\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"GenericTypeParameterDocumentationMustHaveText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"PropertySummaryDocumentationMustMatchAccessors\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementDocumentationMustNotBeCopiedAndPasted\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"SingleLineCommentsMustNotUseDocumentationStyleSlashes\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"DocumentationTextMustNotBeEmpty\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"DocumentationTextMustContainWhitespace\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"DocumentationMustMeetCharacterPercentage\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ConstructorSummaryDocumentationMustBeginWithStandardText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"DestructorSummaryDocumentationMustBeginWithStandardText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"IncludedDocumentationXPathDoesNotExist\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"IncludeNodeDoesNotContainValidFileAndPath\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"InheritDocMustBeUsedWithInheritingClass\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"ElementDocumentationMustBeSpelledCorrectly\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileMustHaveHeader\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderMustShowCopyright\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderMustHaveCopyrightText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderMustContainFileName\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderFileNameDocumentationMustMatchFileName\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderMustHaveValidCompanyText\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n        <Rule Name=\"FileHeaderFileNameDocumentationMustMatchTypeName\">\n          <RuleSettings>\n            <BooleanProperty Name=\"Enabled\">False</BooleanProperty>\n          </RuleSettings>\n        </Rule>\n      </Rules>\n      <AnalyzerSettings />\n    </Analyzer>\n    <Analyzer AnalyzerId=\"StyleCop.CSharp.NamingRules\">\n      <AnalyzerSettings>\n        <CollectionProperty Name=\"Hungarian\">\n          <Value>at</Value>\n          <Value>db</Value>\n          <Value>or</Value>\n          <Value>up</Value>\n          <Value>iq</Value>\n          <Value>it</Value>\n          <Value>un</Value>\n          <Value>bg</Value>\n        </CollectionProperty>\n      </AnalyzerSettings>\n    </Analyzer>\n  </Analyzers>\n</StyleCopSettings>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/OJS.Common.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props\" Condition=\"Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" />\n  <Import Project=\"..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props\" Condition=\"Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{F4AD07BC-B932-4D09-82D8-9800C9260B33}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Common.Tests</RootNamespace>\n    <AssemblyName>OJS.Common.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnit.3.11.0\\lib\\net45\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"StringExtensions\\CompressDecompressTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"StringExtensions\\GetFileExtensionTests.cs\" />\n    <Compile Include=\"StringExtensions\\GetFirstDifferenceIndexWithTests.cs\" />\n    <Compile Include=\"StringExtensions\\GetStringBetweenTests.cs\" />\n    <Compile Include=\"StringExtensions\\GetStringWithEllipsisBetweenTests.cs\" />\n    <Compile Include=\"StringExtensions\\MaxLengthTests.cs\" />\n    <Compile Include=\"StringExtensions\\PascalCaseToTextTests.cs\" />\n    <Compile Include=\"StringExtensions\\StringToUrlTests.cs\" />\n    <Compile Include=\"StringExtensions\\ToIntegerTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Common.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Common.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"9ce751cc-bd52-4f04-8e07-4463596c6d93\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/CompressDecompressTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class CompressDecompressTests\n    {\n        [Test]\n        public void DecompressShouldProduceTheOriginallyCompressedString()\n        {\n            const string InputString = \"Николай\";\n            var compressed = InputString.Compress();\n            var decompressed = compressed.Decompress();\n\n            Assert.That(InputString, Is.EqualTo(decompressed));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/GetFileExtensionTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class GetFileExtensionTests\n    {\n        [Test]\n        public void GetFileExtensionShouldReturnEmptyStringWhenEmptyStringIsPassed()\n        {\n            string expected = string.Empty;\n            string value = string.Empty;\n            string actual = value.GetFileExtension();\n\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnEmptyStringWhenNullIsPassed()\n        {\n            string expected = string.Empty;\n            string actual = ((string)null).GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnJpgWhenValidImageIsPassed()\n        {\n            string expected = \"jpg\";\n            string value = \"pic.jpg\";\n            string actual = value.GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnPngWhenValidImageWithManyDotsIsPassed()\n        {\n            string expected = \"png\";\n            string value = \"pic.test.value.jpg.png\";\n            string actual = value.GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnEmptyStringWhenFileDoesNotHaveExtension()\n        {\n            string expected = string.Empty;\n            string value = \"testing\";\n            string actual = value.GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnEmptyStringWhenFileEndsInADot()\n        {\n            string expected = string.Empty;\n            string value = \"testing.\";\n            string actual = value.GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void GetFileExtensionShouldReturnEmptyStringWhenFileContainsManyDotsAndEndsInADot()\n        {\n            string expected = string.Empty;\n            string value = \"testing.jpg.value.gosho.\";\n            string actual = value.GetFileExtension();\n            Assert.AreEqual(expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/GetFirstDifferenceIndexWithTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class GetFirstDifferenceIndexWithTests\n    {\n        [Test]\n        public void ShouldReturnMinusOneWhenBothStringsAreNull()\n        {\n            const string First = null;\n            const string Second = null;\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(-1, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnZeroWhenParameterStringIsNull()\n        {\n            const string First = \"test\";\n            const string Second = null;\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(0, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnZeroWhenInstanceStringIsNull()\n        {\n            const string First = null;\n            const string Second = \"test\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(0, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnZeroWhenStringsHaveDifferentFirstLetter()\n        {\n            const string First = \"string\";\n            const string Second = \"test\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(0, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectIndexWhenStringsAreDifferent()\n        {\n            const string First = \"testing string\";\n            const string Second = \"ten strings\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(2, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnMinusOneWhenStringsAreDifferentAndIgnoresCase()\n        {\n            const string First = \"testing string\";\n            const string Second = \"teStInG strING\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second, true);\n\n            Assert.AreEqual(-1, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnMinusOneWhenStringsAreEqual()\n        {\n            const string First = \"testing string\";\n            const string Second = \"testing string\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(-1, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectIndexWhenFirstInstanceStringIsLongerThanParameterString()\n        {\n            const string First = \"testing string and more\";\n            const string Second = \"testing string\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(Second.Length, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectIndexWhenParameterStringIsLongerThanInstanceString()\n        {\n            const string First = \"testing string\";\n            const string Second = \"testing string and more\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second);\n\n            Assert.AreEqual(First.Length, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnMinusOneWhenBothStringsAreNullAndIgnoresCase()\n        {\n            const string First = null;\n            const string Second = null;\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second, true);\n\n            Assert.AreEqual(-1, firstDifferenceIndex);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectIndexWhenStringsAreDifferentAndIgnoresCase()\n        {\n            const string First = \"Testing String\";\n            const string Second = \"teStihg string\";\n\n            var firstDifferenceIndex = First.GetFirstDifferenceIndexWith(Second, true);\n\n            Assert.AreEqual(5, firstDifferenceIndex);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/GetStringBetweenTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class GetStringBetweenTests\n    {\n        [Test]\n        public void GetStringBetweenShouldReturnProperValueWhenCalledWithSingleCharacters()\n        {\n            const string Value = \"Test №10 execution successful!\";\n            const string Expected = \"10\";\n            var actual = Value.GetStringBetween(\"№\", \" \");\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [Test]\n        public void GetStringBetweenShouldReturnProperValueWhenCalledWithMultilineText()\n        {\n            const string Value = @\"Answer incorrect!\nExpected output:\n1\n\nYour output:\n2\n\nTime used (in milliseconds): 21.4844\nMemory used (in bytes): 1024000\";\n            const string Expected = @\"\nExpected output:\n1\n\nYour output:\n2\n\n\";\n            var actual = Value.GetStringBetween(\"Answer incorrect!\", \"Time used\");\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [Test]\n        public void GetStringBetweenShouldReturnProperValueWhenCalledWithNewLineAsSecondArgument()\n        {\n            const string Value = @\"Answer correct!!!\nTime used (in milliseconds): 26.3672\nMemory used (in bytes): 94208\n\";\n            const string Expected = \"94208\";\n            var actual = Value.GetStringBetween(\"Memory used (in bytes): \", \"\\r\\n\");\n            Assert.AreEqual(Expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/GetStringWithEllipsisBetweenTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using System;\n\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class GetStringWithEllipsisBetweenTests\n    {\n        [Test]\n        public void ShouldThrowExceptionWhenValueIsNotNullAndStartIndexIsNegative()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = -2;\n            const int EndIndex = 2;\n\n            Assert.Throws(\n                Is.InstanceOf<ArgumentException>(),\n                () => { var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex); });\n        }\n\n        [Test]\n        public void ShouldThrowExceptionWhenValueIsNotNullAndStartIndexIsEqualToStringLength()\n        {\n            const string Value = \"vladislav\";\n            var startIndex = Value.Length;\n            const int EndIndex = 2;\n\n            Assert.Throws(\n                Is.InstanceOf<ArgumentException>(),\n                () => { var result = Value.GetStringWithEllipsisBetween(startIndex, EndIndex); });\n        }\n\n        [Test]\n        public void ShouldThrowExceptionWhenValueIsNotNullAndStartIndexIsGreaterThanStringLength()\n        {\n            const string Value = \"vladislav\";\n            var startIndex = Value.Length + 1;\n            const int EndIndex = 2;\n\n            Assert.Throws(\n                Is.InstanceOf<ArgumentException>(),\n                () => { var result = Value.GetStringWithEllipsisBetween(startIndex, EndIndex); });\n        }\n\n        [Test]\n        public void ShouldReturnNullWhenValueIsNullAndStartAndEndIndicesAreValid()\n        {\n            const string Value = null;\n            const int StartIndex = 1;\n            const int EndIndex = 2;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.IsNull(result);\n        }\n\n        [Test]\n        public void ShouldThrowExceptionWhenValueIsNotNullAndStartIndexIsGreaterThanEndIndex()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 5;\n            const int EndIndex = 2;\n\n            Assert.Throws(\n                Is.InstanceOf<ArgumentException>(),\n                () => { var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex); });\n        }\n\n        [Test]\n        public void ShouldReturnEmptyStringWhenValueIsNotNullAndStartIndexIsEqualToValueLength()\n        {\n            const string Value = \"vladislav\";\n            var startIndex = Value.Length;\n            var endIndex = Value.Length;\n\n            var result = Value.GetStringWithEllipsisBetween(startIndex, endIndex);\n\n            Assert.AreEqual(string.Empty, result);\n        }\n\n        [Test]\n        public void ShouldReturnEmptyStringWhenValueIsNotNullAndStartIndexIsEqualToEndIndex()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 2;\n            const int EndIndex = 2;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.AreEqual(string.Empty, result);\n        }\n\n        [Test]\n        public void ShouldReturnNullWhenValueIsNullAndStartIndexIsEqualToEndIndex()\n        {\n            const string Value = null;\n            const int StartIndex = 2;\n            const int EndIndex = 2;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.IsNull(result);\n        }\n\n        [Test]\n        public void ShouldReturnValueWhenValueIsNotNullAndStartIndexIsEqualToZeroAndEndIndexIsEqualToStringLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 0;\n            var endIndex = Value.Length;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(Value, result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithoutEllipsisWhenValueIsNotNullAndStartIndexIsLessThanEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 2;\n            var endIndex = Value.Length;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"adislav\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithoutEllipsisWhenValueIsNotNullAndStartIndexIsEqualToEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 3;\n            var endIndex = Value.Length;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"dislav\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithEllipsisWhenValueIsNotNullAndStartIndexIsGreaterThanEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 5;\n            var endIndex = Value.Length;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"...slav\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithoutEllipsisWhenValueIsNotNullAndEndIndexIsLessThanLengthMinusEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 0;\n            var endIndex = Value.Length - 2;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"vladisl\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithoutEllipsisWhenValueIsNotNullAndEndIndexIsEqualToLengthMinusEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 0;\n            var endIndex = Value.Length - 3;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"vladis\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithEllipsisWhenValueIsNotNullAndEndIndexIsGreaterThanLengthMinusEllipsisLength()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 0;\n            var endIndex = Value.Length - 4;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"vladi...\", result);\n        }\n\n        [Test]\n        public void ShouldReturnCorrectSubstringWithEllipsisOnBothSidesWhenStartIndexAndEndIndexAreAppropriate()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 4;\n            var endIndex = Value.Length - 4;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, endIndex);\n\n            Assert.AreEqual(\"...i...\", result);\n        }\n\n        [Test]\n        public void ShouldReturnEmptyStringWhenStartIndexWhenStartIndexAndEndIndexAreEqualAndAppropriate()\n        {\n            const string Value = \"vladislav\";\n            const int StartIndex = 4;\n            const int EndIndex = StartIndex;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.AreEqual(string.Empty, result);\n        }\n\n        [Test]\n        public void ShouldReturnEmptyStringWhenValueIsEmptyString()\n        {\n            var value = string.Empty;\n            const int StartIndex = 0;\n            const int EndIndex = 0;\n\n            var result = value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.AreEqual(value, result);\n        }\n\n        [Test]\n        public void ShouldReturnSingleWhitespaceStringWhenValueIsSingleWhitespace()\n        {\n            const string Value = \" \";\n            const int StartIndex = 0;\n            const int EndIndex = 1;\n\n            var result = Value.GetStringWithEllipsisBetween(StartIndex, EndIndex);\n\n            Assert.AreEqual(Value, result);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/MaxLengthTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class MaxLengthTests\n    {\n        [Test]\n        public void MaxLengthShouldReturnEmptyStringWhenEmptyStringIsPassed()\n        {\n            string expected = string.Empty;\n            string value = string.Empty;\n            string actual = value.MaxLength(0);\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void MaxLengthShouldReturnProperStringWhenLongerStringIsPassed()\n        {\n            string expected = \"12345\";\n            string value = \"1234567890\";\n            string actual = value.MaxLength(5);\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void MaxLengthShouldReturnProperStringWhenShorterStringIsPassed()\n        {\n            string expected = \"123\";\n            string value = \"123\";\n            string actual = value.MaxLength(5);\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void MaxLengthShouldReturnProperStringWhenStringWithTheSameLengthIsPassed()\n        {\n            string expected = \"123\";\n            string value = \"123\";\n            string actual = value.MaxLength(3);\n            Assert.AreEqual(expected, actual);\n        }\n\n        [Test]\n        public void MaxLengthShouldReturnProperStringWhenZeroLengthIsPassed()\n        {\n            string expected = string.Empty;\n            string value = \"123\";\n            string actual = value.MaxLength(0);\n            Assert.AreEqual(expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/PascalCaseToTextTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class PascalCaseToTextTests\n    {\n        [Test]\n        public void FewWordsStringShouldReturnProperResult()\n        {\n            const string Input = \"PascalCaseExample\";\n            const string Expected = \"Pascal case example\";\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n\n        [Test]\n        public void OneWordStringShouldReturnProperResult()\n        {\n            const string Input = \"Pascal\";\n            const string Expected = \"Pascal\";\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n\n        [Test]\n        public void MethodShouldNotChangeTheOtherPartsOfTheString()\n        {\n            const string Input = \"  PascalCase a A OtherWord Word2 \";\n            const string Expected = \"  Pascal case a A Other word Word2 \";\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n\n        [Test]\n        public void AbbreviationsShouldBeKept()\n        {\n            const string Input = \"Ivo knows SOLID\";\n            const string Expected = \"Ivo knows SOLID\";\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n\n        [Test]\n        public void AbbreviationsShouldBeKeptIfNoOtherWords()\n        {\n            const string Input = \"SOLID\";\n            const string Expected = \"SOLID\";\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n\n        [Test]\n        public void NullStringShouldReturnNull()\n        {\n            const string Input = null;\n            const string Expected = null;\n            var result = Input.PascalCaseToText();\n            Assert.AreEqual(Expected, result);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/StringToUrlTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class StringToUrlTests\n    {\n        [Test]\n        public void ToUrlMethodShouldReturnProperCSharpText()\n        {\n            var original = \"SomeUrlWithC#InIt\";\n\n            var result = original.ToUrl();\n            var expected = \"SomeUrlWithCSharpInIt\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldReturnProperCPlusPlusText()\n        {\n            var original = \"SomeUrlWithC++InIt\";\n\n            var result = original.ToUrl();\n            var expected = \"SomeUrlWithCPlusPlusInIt\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldConvertUglySymbolsToDashInMiddle()\n        {\n            var original = \"Some%Url&With!Ugly)Symbol\";\n\n            var result = original.ToUrl();\n            var expected = \"Some-Url-With-Ugly-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldConvertUglySymbolsToDashInMiddleWithRepeatitions()\n        {\n            var original = \"Some%$Url&!With!^^^Ugly**)Symbol\";\n\n            var result = original.ToUrl();\n            var expected = \"Some-Url-With-Ugly-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldRemoveUglySymbolsInTheStartOfString()\n        {\n            var original = \"###Some%$Url&!With!^^^Ugly**)Symbol\";\n\n            var result = original.ToUrl();\n            var expected = \"Some-Url-With-Ugly-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldConvertUglySymbolsToDashInTheEndOfString()\n        {\n            var original = \"Some%$Url&!With!^^^Ugly**)Symbol*&*\";\n\n            var result = original.ToUrl();\n            var expected = \"Some-Url-With-Ugly-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldConvertSpacesToDash()\n        {\n            var original = \"  Some  Url  With  Ugly  Symbol  \";\n\n            var result = original.ToUrl();\n            var expected = \"Some-Url-With-Ugly-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldConvertCSharpAndCPlusPlus()\n        {\n            var original = \"  Some  C++UrlC++  With  UglyC#C#  Symbol  \";\n\n            var result = original.ToUrl();\n            var expected = \"Some-CPlusPlusUrlCPlusPlus-With-UglyCSharpCSharp-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n\n        [Test]\n        public void ToUrlMethodShouldRemoveUglySymbolsAtBeginningAndEnd()\n        {\n            var original = \"% Some  C++UrlC++  With  UglyC#C#  Symbol #\";\n\n            var result = original.ToUrl();\n            var expected = \"Some-CPlusPlusUrlCPlusPlus-With-UglyCSharpCSharp-Symbol\";\n\n            Assert.AreEqual(expected, result);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/ToInteger.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using Microsoft.VisualStudio.TestTools.UnitTesting;\n\n    using OJS.Common.Extensions;\n\n    [TestClass]\n    public class ToInteger\n    {\n        [TestMethod]\n        public void ZeroStringShouldReturnZero()\n        {\n            const int Expected = 0;\n            const string Input = \"0\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [TestMethod]\n        public void InvalidInputShouldReturnZero()\n        {\n            const int Expected = 0;\n            const string Input = \"invalid\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [TestMethod]\n        public void ValidInputShouldReturnSameValue()\n        {\n            const int Expected = 1234567890;\n            const string Input = \"1234567890\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/StringExtensions/ToIntegerTests.cs",
    "content": "﻿namespace OJS.Common.Tests.StringExtensions\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class ToIntegerTests\n    {\n        [Test]\n        public void ZeroStringShouldReturnZero()\n        {\n            const int Expected = 0;\n            const string Input = \"0\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [Test]\n        public void InvalidInputShouldReturnZero()\n        {\n            const int Expected = 0;\n            const string Input = \"invalid\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n\n        [Test]\n        public void ValidInputShouldReturnSameValue()\n        {\n            const int Expected = 1234567890;\n            const string Input = \"1234567890\";\n            int actual = Input.ToInteger();\n            Assert.AreEqual(Expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Common.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnit\" version=\"3.11.0\" targetFramework=\"net45\" />\n  <package id=\"NUnit3TestAdapter\" version=\"3.13.0\" targetFramework=\"net45\" />\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n  </configSections>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"System.Data.SqlServerCe.4.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n      <provider invariantName=\"System.Data.SqlServerCe.4.0\" type=\"System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact\" />\n    </providers>\n  </entityFramework>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework.MappingAPI\" publicKeyToken=\"7ee2e825d201459e\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.9\" newVersion=\"6.1.0.9\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <system.data>\n    <DbProviderFactories>\n      <remove invariant=\"System.Data.SqlServerCe.4.0\" />\n      <add name=\"Microsoft SQL Server Compact Data Provider 4.0\" invariant=\"System.Data.SqlServerCe.4.0\" description=\".NET Framework Data Provider for Microsoft SQL Server Compact\" type=\"System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91\" />\n    </DbProviderFactories>\n  </system.data>\n</configuration>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/DataFakes/DatabaseConfiguration.cs",
    "content": "﻿namespace OJS.Tests.Common.DataFakes\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Data.Entity.Migrations;\n\n    using OJS.Data;\n    using OJS.Data.Models;\n\n    internal sealed class DatabaseConfiguration : DbMigrationsConfiguration<FakeOjsDbContext>\n    {\n        public DatabaseConfiguration()\n        {\n            this.AutomaticMigrationsEnabled = true;\n            this.AutomaticMigrationDataLossAllowed = true;\n        }\n\n        protected override void Seed(FakeOjsDbContext context)\n        {\n            context.ClearDatabase();\n            this.SeedContests(context);\n        }\n\n        private void SeedContests(IOjsDbContext context)\n        {\n            // active contests\n            var visibleActiveContest = new Contest\n            {\n                Name = \"Active-Visible\",\n                IsVisible = true,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(2),\n            };\n\n            var nonVisibleActiveContest = new Contest\n            {\n                Name = \"Active-Non-Visible\",\n                IsVisible = false,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var visibleDeletedActiveContest = new Contest\n            {\n                Name = \"Active-Visible-Deleted\",\n                IsVisible = true,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var nonVisibleDeletedActiveContest = new Contest\n            {\n                Name = \"Active-Non-Visible-Deleted\",\n                IsVisible = false,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            // past contests\n            var visiblePastContest = new Contest\n            {\n                Name = \"Past-Visible\",\n                IsVisible = true,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(-1)\n            };\n\n            var nonVisiblePastContest = new Contest\n            {\n                Name = \"Past-Non-Visible\",\n                IsVisible = false,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(-1)\n            };\n\n            var visiblePastDeletedContest = new Contest\n            {\n                Name = \"Past-Visible-Deleted\",\n                IsVisible = true,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(-1)\n            };\n\n            var nonVisiblePastDeletedContest = new Contest\n            {\n                Name = \"Past-Non-Visible-Deleted\",\n                IsVisible = false,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(-2),\n                EndTime = DateTime.Now.AddHours(-1)\n            };\n\n            // future contests\n            var visibleFutureContest = new Contest\n            {\n                Name = \"Future-Visible\",\n                IsVisible = true,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(1),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var nonVisibleFutureContest = new Contest\n            {\n                Name = \"Future-Non-Visible\",\n                IsVisible = false,\n                IsDeleted = false,\n                StartTime = DateTime.Now.AddHours(1),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var visibleFutureDeletedContest = new Contest\n            {\n                Name = \"Future-Visible-Deleted\",\n                IsVisible = true,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(1),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var nonVisibleFutureDeletedContest = new Contest\n            {\n                Name = \"Future-Non-Visible-Deleted\",\n                IsVisible = false,\n                IsDeleted = true,\n                StartTime = DateTime.Now.AddHours(1),\n                EndTime = DateTime.Now.AddHours(2)\n            };\n\n            var contests = new List<Contest>()\n                {\n                    // active contests in list\n                    (Contest)visibleActiveContest.ObjectClone(),\n                    (Contest)visibleActiveContest.ObjectClone(),\n                    (Contest)nonVisibleActiveContest.ObjectClone(),\n                    (Contest)nonVisibleActiveContest.ObjectClone(),\n                    (Contest)nonVisibleActiveContest.ObjectClone(),\n                    (Contest)visibleDeletedActiveContest.ObjectClone(),\n                    (Contest)visibleDeletedActiveContest.ObjectClone(),\n                    (Contest)visibleDeletedActiveContest.ObjectClone(),\n                    (Contest)visibleDeletedActiveContest.ObjectClone(),\n                    (Contest)nonVisibleDeletedActiveContest.ObjectClone(),\n\n                    // past contest in list\n                    (Contest)visiblePastContest.ObjectClone(),\n                    (Contest)visiblePastContest.ObjectClone(),\n                    (Contest)visiblePastContest.ObjectClone(),\n                    (Contest)nonVisiblePastContest.ObjectClone(),\n                    (Contest)nonVisiblePastContest.ObjectClone(),\n                    (Contest)nonVisiblePastContest.ObjectClone(),\n                    (Contest)nonVisiblePastContest.ObjectClone(),\n                    (Contest)visiblePastDeletedContest.ObjectClone(),\n                    (Contest)visiblePastDeletedContest.ObjectClone(),\n                    (Contest)visiblePastDeletedContest.ObjectClone(),\n                    (Contest)visiblePastDeletedContest.ObjectClone(),\n                    (Contest)nonVisiblePastDeletedContest.ObjectClone(),\n\n                    // future contests in list\n                    (Contest)visibleFutureContest.ObjectClone(),\n                    (Contest)visibleFutureContest.ObjectClone(),\n                    (Contest)visibleFutureContest.ObjectClone(),\n                    (Contest)visibleFutureContest.ObjectClone(),\n                    (Contest)nonVisibleFutureContest.ObjectClone(),\n                    (Contest)nonVisibleFutureContest.ObjectClone(),\n                    (Contest)nonVisibleFutureContest.ObjectClone(),\n                    (Contest)visibleFutureDeletedContest.ObjectClone(),\n                    (Contest)visibleFutureDeletedContest.ObjectClone(),\n                    (Contest)visibleFutureDeletedContest.ObjectClone(),\n                    (Contest)visibleFutureDeletedContest.ObjectClone(),\n                    (Contest)visibleFutureDeletedContest.ObjectClone(),\n                    (Contest)nonVisibleFutureDeletedContest.ObjectClone(),\n                };\n\n            foreach (var contest in contests)\n            {\n                context.Contests.Add(contest);\n            }\n\n            context.SaveChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/DataFakes/FakeEmptyOjsDbContext.cs",
    "content": "﻿namespace OJS.Tests.Common.DataFakes\n{\n    using OJS.Data;\n\n    public class FakeEmptyOjsDbContext : OjsDbContext\n    {\n        public FakeEmptyOjsDbContext()\n            : base(\"FakeEmptyOjsDbContext\")\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/DataFakes/FakeOjsDbContext.cs",
    "content": "﻿namespace OJS.Tests.Common.DataFakes\n{\n    using OJS.Data;\n\n    public class FakeOjsDbContext : OjsDbContext\n    {\n        public FakeOjsDbContext()\n            : base(\"FakeOjsDbContext\")\n        {\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/DataFakes/ObjectExtensions.cs",
    "content": "﻿namespace OJS.Tests.Common.DataFakes\n{\n    using System;\n    using System.Reflection;\n\n    public static class ObjectExtensions\n    {\n        public static object ObjectClone(this object obj)\n        {\n            var type = obj.GetType();\n            var copy = Activator.CreateInstance(type);\n\n            var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy);\n            foreach (var field in fields)\n            {\n                field.SetValue(copy, field.GetValue(obj));\n            }\n\n            var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy);\n            foreach (var property in props)\n            {\n                if (property.CanWrite)\n                {\n                    property.SetValue(copy, property.GetValue(obj));\n                }\n            }\n\n            return copy;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/OJS.Tests.Common.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props\" Condition=\"Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" />\n  <Import Project=\"..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props\" Condition=\"Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{01CC0B02-529E-4D5F-B345-0B92F6920854}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Tests.Common</RootNamespace>\n    <AssemblyName>OJS.Tests.Common</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.SqlServerCompact.6.1.3\\lib\\net45\\EntityFramework.SqlServerCompact.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnit.3.11.0\\lib\\net45\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\lib\\net40\\System.Data.SqlServerCe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"DataFakes\\DatabaseConfiguration.cs\" />\n    <Compile Include=\"DataFakes\\FakeEmptyOjsDbContext.cs\" />\n    <Compile Include=\"DataFakes\\FakeOjsDbContext.cs\" />\n    <Compile Include=\"DataFakes\\ObjectExtensions.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TestClassBase.cs\" />\n    <Compile Include=\"WebStubs\\StubHttpContextForRouting.cs\" />\n    <Compile Include=\"WebStubs\\StubHttpRequestForRouting.cs\" />\n    <Compile Include=\"WebStubs\\StubHttpResponseForRouting.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\n      <Name>OJS.Data.Contracts</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Models\\OJS.Data.Models.csproj\">\n      <Project>{341ca732-d483-4487-923e-27ed2a6e9a4f}</Project>\n      <Name>OJS.Data.Models</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data\\OJS.Data.csproj\">\n      <Project>{1807194c-9e25-4365-b3be-fe1df627612b}</Project>\n      <Name>OJS.Data</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>\n    if not exist \"$(TargetDir)x86\" md \"$(TargetDir)x86\"\n    xcopy /s /y \"$(SolutionDir)packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\x86\\*.*\" \"$(TargetDir)x86\"\n    if not exist \"$(TargetDir)amd64\" md \"$(TargetDir)amd64\"\n    xcopy /s /y \"$(SolutionDir)packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\amd64\\*.*\" \"$(TargetDir)amd64\"</PostBuildEvent>\n  </PropertyGroup>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Tests.Common\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Tests.Common\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"963edbf1-56ae-43fd-ac6a-23c27246218c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/TestClassBase.cs",
    "content": "﻿namespace OJS.Tests.Common\n{\n    using System.Data.Entity;\n\n    using OJS.Data;\n    using OJS.Tests.Common.DataFakes;\n\n    public abstract class TestClassBase\n    {\n        protected TestClassBase()\n        {\n            Database.SetInitializer(new MigrateDatabaseToLatestVersion<FakeOjsDbContext, DatabaseConfiguration>());\n            this.OjsData = new OjsData(new FakeOjsDbContext());\n            this.InitializeEmptyOjsData();\n        }\n\n        protected IOjsData EmptyOjsData { get; private set; }\n\n        protected IOjsData OjsData { get; private set; }\n\n        protected void InitializeEmptyOjsData()\n        {\n            Database.SetInitializer(new DropCreateDatabaseAlways<FakeEmptyOjsDbContext>());\n            var fakeEmptyOjsDbContext = new FakeEmptyOjsDbContext();\n            fakeEmptyOjsDbContext.Database.Initialize(true);\n            this.EmptyOjsData = new OjsData(fakeEmptyOjsDbContext);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/WebStubs/StubHttpContextForRouting.cs",
    "content": "﻿namespace OJS.Tests.Common.WebStubs\n{\n    using System.Web;\n\n    public class StubHttpContextForRouting : HttpContextBase\n    {\n        private readonly StubHttpRequestForRouting request;\n\n        private readonly StubHttpResponseForRouting response;\n\n        public StubHttpContextForRouting(string appPath = \"/\", string requestUrl = \"~/\")\n        {\n            this.request = new StubHttpRequestForRouting(appPath, requestUrl);\n            this.response = new StubHttpResponseForRouting();\n        }\n\n        public override HttpRequestBase Request => this.request;\n\n        public override HttpResponseBase Response => this.response;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/WebStubs/StubHttpRequestForRouting.cs",
    "content": "﻿namespace OJS.Tests.Common.WebStubs\n{\n    using System.Collections.Specialized;\n    using System.Web;\n\n    public class StubHttpRequestForRouting : HttpRequestBase\n    {\n        public StubHttpRequestForRouting(string appPath, string requestUrl)\n        {\n            this.ApplicationPath = appPath;\n            this.AppRelativeCurrentExecutionFilePath = requestUrl;\n        }\n\n        public override string ApplicationPath { get; }\n\n        public override string AppRelativeCurrentExecutionFilePath { get; }\n\n        public override string PathInfo => string.Empty;\n\n        public override NameValueCollection ServerVariables => new NameValueCollection();\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/WebStubs/StubHttpResponseForRouting.cs",
    "content": "﻿namespace OJS.Tests.Common.WebStubs\n{\n    using System.Web;\n\n    public class StubHttpResponseForRouting : HttpResponseBase\n    {\n        public override string ApplyAppPathModifier(string virtualPath)\n        {\n            return virtualPath;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Tests.Common/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework.SqlServerCompact\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.SqlServer.Compact\" version=\"4.0.8876.1\" targetFramework=\"net45\" />\n  <package id=\"NUnit\" version=\"3.11.0\" targetFramework=\"net45\" />\n  <package id=\"NUnit3TestAdapter\" version=\"3.13.0\" targetFramework=\"net45\" />\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/CSharpCodeCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System;\n\n    using NUnit.Framework;\n\n    [TestFixture]\n    public class CSharpCodeCheckerTests\n    {\n        [Test]\n        public void CallingCheckMethodBeforeSetParameterShouldThrowAnException()\n        {\n            // Arrange\n            var checker = new CSharpCodeChecker();\n            string expectedErrorMessage = \"Please call SetParameter first with non-null string.\";\n\n            // Act\n            var exception = Assert.Throws<InvalidOperationException>(() => checker.Check(string.Empty, string.Empty, string.Empty, false));\n\n            // Assert\n            Assert.AreEqual(expectedErrorMessage, exception.Message);\n        }\n\n        [Test]\n        public void SetParameterThrowsExceptionWhenGivenInvalidCode()\n        {\n            // Arrange\n            var checker = new CSharpCodeChecker();\n\n            // Act and Assert\n            Assert.Throws<Exception>(() => checker.SetParameter(@\".\"));\n        }\n\n        [Test]\n        public void SetParameterThrowsExceptionWhenNotGivenICheckerImplementation()\n        {\n            // Arragne\n            var checker = new CSharpCodeChecker();\n            string expectedErrorMessage = \"Implementation of OJS.Workers.Common.IChecker not found!\";\n\n            // Act\n            var exception = Assert.Throws<Exception>(() => checker.SetParameter(@\"public class MyChecker { }\"));\n\n            // Assert\n            Assert.AreEqual(expectedErrorMessage, exception.Message);\n        }\n\n        [Test]\n        public void SetParameterThrowsExceptionWhenGivenMoreThanOneICheckerImplementation()\n        {\n            // Arrange\n            var checker = new CSharpCodeChecker();\n            var SetParameter = @\"\n                using OJS.Workers.Common;\n                public class MyChecker1 : IChecker\n                {\n                    public CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n                    {\n                        return new CheckerResult\n                                    {\n                                        IsCorrect = true,\n                                        ResultType = CheckerResultType.Ok,\n                                        CheckerDetails = new CheckerDetails(),\n                                    };\n                    }\n                    public void SetParameter(string parameter)\n                    {\n                    }\n                }\n                public class MyChecker2 : IChecker\n                {\n                    public CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n                    {\n                        return new CheckerResult\n                                    {\n                                        IsCorrect = true,\n                                        ResultType = CheckerResultType.Ok,\n                                        CheckerDetails = new CheckerDetails(),\n                                    };\n                    }\n                    public void SetParameter(string parameter)\n                    {\n                    }\n                }\";\n\n            string expectedErrorMessage = \"More than one implementation of OJS.Workers.Common.IChecker was found!\";\n\n            // Act\n            var exception = Assert.Throws<Exception>(() => checker.SetParameter(SetParameter), \"Hola\", null);\n\n            // Assert\n            Assert.AreEqual(expectedErrorMessage, exception.Message);\n        }\n\n        [Test]\n        public void CheckMethodWorksCorrectlyWithSomeCheckerCode()\n        {\n            var checker = new CSharpCodeChecker();\n            checker.SetParameter(@\"\n                using OJS.Workers.Common;\n                public class MyChecker : IChecker\n                {\n                    public CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n                    {\n                        return new CheckerResult\n                                    {\n                                        IsCorrect = true,\n                                        ResultType = CheckerResultType.Ok,\n                                        CheckerDetails = new CheckerDetails { Comment = \"\"It was me\"\" },\n                                    };\n                    }\n                    public void SetParameter(string parameter)\n                    {\n                    }\n                }\");\n\n            var checkerResult = checker.Check(string.Empty, string.Empty, string.Empty, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.AreEqual(\"It was me\", checkerResult.CheckerDetails.Comment);\n        }\n\n        [Test]\n        public void CheckMethodReceivesCorrectParameters()\n        {\n            var checker = new CSharpCodeChecker();\n            checker.SetParameter(@\"\n                using OJS.Workers.Common;\n                public class MyChecker : IChecker\n                {\n                    public CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n                    {\n                        bool isCorrect = true;\n\n                        if (inputData != \"\"One\"\") isCorrect = false;\n                        if (receivedOutput != \"\"Two\"\") isCorrect = false;\n                        if (expectedOutput != \"\"Three\"\") isCorrect = false;\n\n                        return new CheckerResult\n                                    {\n                                        IsCorrect = isCorrect,\n                                        ResultType = CheckerResultType.Ok,\n                                        CheckerDetails = new CheckerDetails(),\n                                    };\n                    }\n                    public void SetParameter(string parameter)\n                    {\n                    }\n                }\");\n\n            var checkerResult = checker.Check(\"One\", \"Two\", \"Three\", false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/CaseInsensitiveCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class CaseInsensitiveCheckerTests\n    {\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnTrueWhenGivenCaseInsensitiveStrings()\n        {\n            string receivedOutput = \"НиколАй\";\n            string expectedOutput = \"НикОлай\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnTrueWhenGivenCaseInsensitiveStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"НикоЛай\\n\";\n            string expectedOutput = \"ниКолай\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnTrueWhenGivenCaseInsensitiveMultiLineStrings()\n        {\n            string receivedOutput = \"НикОлай\\nFoo\\nBAr\";\n            string expectedOutput = \"николай\\nFoO\\nBar\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnTrueWhenGivenCaseInsensitiveMultiLineStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Николай\\nFOo\\nBar\";\n            string expectedOutput = \"Николай\\nFoo\\nBAr\\n\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldNotRespectsTextCasing()\n        {\n            string receivedOutput = \"Николай\";\n            string expectedOutput = \"николай\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldRespectsDecimalSeparators()\n        {\n            string receivedOutput = \"1,1\";\n            string expectedOutput = \"1.1\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnFalseWhenGivenDifferentStrings()\n        {\n            string receivedOutput = \"Foo\";\n            string expectedOutput = \"Bar\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnInvalidNumberOfLinesWhenReceivedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\";\n            string expectedOutput = \"Bar\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnInvalidNumberOfLinesWhenExpectedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnInvalidNumberOfLinesWhenGivenDifferentMultiLineStringsWithSameText()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnWrongAnswerWhenGivenDifferentMultiLineStringsWithSameTextDifferentBlankLines()\n        {\n            string receivedOutput = \"BAr\\nFoo\\n\\n\";\n            string expectedOutput = \"\\n\\nBar\\nFOo\";\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckShouldReturnCorrectAnswerInBiggerSameTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnWrongAnswerInBiggerDifferentTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 100000; i > 0; i--)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnInvalidNumberOfLinesInBiggerDifferentNumberOfLinesTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 10000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckerShouldReturnWrongAnswerInBiggerTextsWithLastLineDifferentTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            receivedOutput.Append(1);\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            expectedOutput.Append(2);\n\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void CaseInsensitiveCheckShouldReturnCorrectAnswerInBiggerSameTextsDifferentCaseTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 128; i++)\n            {\n                receivedOutput.AppendLine(((char)i).ToString().ToLower());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 128; i++)\n            {\n                expectedOutput.AppendLine(((char)i).ToString().ToUpper());\n            }\n\n            var checker = new CaseInsensitiveChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/ExactCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class ExactCheckerTests\n    {\n        [Test]\n        public void ExactCheckerShouldReturnTrueWhenGivenExactStrings()\n        {\n            string receivedOutput = \"Николай\";\n            string expectedOutput = \"Николай\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnTrueWhenGivenExactStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Николай\\n\";\n            string expectedOutput = \"Николай\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnTrueWhenGivenExactMultiLineStrings()\n        {\n            string receivedOutput = \"Николай\\nFoo\\nBar\";\n            string expectedOutput = \"Николай\\nFoo\\nBar\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnTrueWhenGivenExactMultiLineStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Николай\\nFoo\\nBar\";\n            string expectedOutput = \"Николай\\nFoo\\nBar\\n\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void ExactCheckerShouldRespectsTextCasing()\n        {\n            string receivedOutput = \"Николай\";\n            string expectedOutput = \"николай\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void ExactCheckerShouldRespectsDecimalSeparators()\n        {\n            string receivedOutput = \"1,1\";\n            string expectedOutput = \"1.1\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnFalseWhenGivenDifferentStrings()\n        {\n            string receivedOutput = \"Foo\";\n            string expectedOutput = \"Bar\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnInvalidNumberOfLinesWhenReceivedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\";\n            string expectedOutput = \"Bar\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnInvalidNumberOfLinesWhenExpectedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnInvalidNumberOfLinesWhenGivenDifferentMultiLineStringsWithSameText()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnWrongAnswerWhenGivenDifferentMultiLineStringsWithSameTextDifferentBlankLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"\\n\\nBar\\nFoo\";\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void ExacterCheckShouldReturnCorrectAnswerInBiggerSameTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnWrongAnswerInBiggerDifferentTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 100000; i > 0; i--)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnInvalidNumberOfLinesInBiggerDifferentNumberOfLinesTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 10000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void ExactCheckerShouldReturnWrongAnswerInBiggerTextsWithLastLineDifferentTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            receivedOutput.Append(1);\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            expectedOutput.Append(2);\n\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/OJS.Workers.Checkers.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props\" Condition=\"Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" />\n  <Import Project=\"..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props\" Condition=\"Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{73B7CEF9-1843-4EFB-B9BF-E2A0492613A8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Checkers.Tests</RootNamespace>\n    <AssemblyName>OJS.Workers.Checkers.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnit.3.11.0\\lib\\net45\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"CSharpCodeCheckerTests.cs\" />\n    <Compile Include=\"ExactCheckerTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TrimCheckerTests.cs\" />\n    <Compile Include=\"SortCheckerTests.cs\" />\n    <Compile Include=\"CaseInsensitiveCheckerTests.cs\" />\n    <Compile Include=\"PrecisionCheckerTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Checkers\\OJS.Workers.Checkers.csproj\">\n      <Project>{93ec1d66-2ce1-4682-ac09-c8c40178a9ad}</Project>\n      <Name>OJS.Workers.Checkers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/PrecisionCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System.Globalization;\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class PrecisionCheckerTests\n    {\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueWhenGivenExactDecimalWithDefaultPrecision()\n        {\n            string receivedOutput = \"1.11111111111111111111111111\";\n            string expectedOutput = \"1.11111111111111111111111112\";\n            var checker = new PrecisionChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueWhenGivenExactDecimalWithPrecisionOfFive()\n        {\n            string receivedOutput = \"1.000004\";\n            string expectedOutput = \"1.000003\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"5\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnWrongAnswerWhenGivenExactDecimalWithPrecisionOfSixAndDifferentDigitsBeforeTheSixthOne()\n        {\n            string receivedOutput = \"1.000004\";\n            string expectedOutput = \"1.000003\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"6\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnFalseIfNoNumberIsEntered()\n        {\n            string receivedOutput = \"Foobar\";\n            string expectedOutput = \"1.000003\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"6\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnCorrectIfTheAnswerRoundUp()\n        {\n            string receivedOutput = \"1.00\";\n            string expectedOutput = \"1.009\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"2\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfTheAnswerRoundUpClose()\n        {\n            string receivedOutput = \"1.00\";\n            string expectedOutput = \"0.999999\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"2\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfTheAnswersAreSame()\n        {\n            string receivedOutput = \"0.999999\";\n            string expectedOutput = \"0.999999\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"2\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnFalseIfTheAnswersAreDifferent()\n        {\n            string receivedOutput = \"0.123456\";\n            string expectedOutput = \"0.999999\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"2\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfTheAnswersAreSameAndPrecisionIsBiggerThanTheNumbers()\n        {\n            string receivedOutput = \"0.999999\";\n            string expectedOutput = \"0.999999\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"15\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfTheAnswersAreHugeNumbersSameAndLowPrecision()\n        {\n            string receivedOutput = \"1234567.99\";\n            string expectedOutput = \"1234567.9\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"1\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfAllLinesAreCorrect()\n        {\n            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(\"bg-BG\");\n\n            string receivedOutput = \"1.00\\n15.89955\\n9999.87\";\n            string expectedOutput = \"0.999999\\n15.8995555\\n9999.87000002\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnTrueIfAllLinesAreCorrectWithOneExtraEmptyLine()\n        {\n            string receivedOutput = \"1.00\\n15.89955\\n9999.87\";\n            string expectedOutput = \"0.999999\\n15.8995555\\n9999.87000002\\n\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldNotRespectsDecimalSeparators()\n        {\n            string receivedOutput = \"1,1\";\n            string expectedOutput = \"1.1\";\n            var checker = new PrecisionChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnCorrectAnswerIfCultureIsBulgarian()\n        {\n            string receivedOutput = \"1,00\\n15,89955\\n9999,87\\n\";\n            string expectedOutput = \"1.00\\n15.89955\\n9999.87\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnInvalidLineNumberIfAllLinesAreCorrectWithOneExtraFullLineOnReceivedOutput()\n        {\n            string receivedOutput = \"1.00\\n15.89955\\n9999.87\\n99.56\";\n            string expectedOutput = \"1.00\\n15.89955\\n9999.87\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnInvalidLineNumberIfAllLinesAreCorrectWithOneExtraFullLineOnExpectedOutput()\n        {\n            string receivedOutput = \"1.00\\n15.89955\\n9999.87\";\n            string expectedOutput = \"1.00\\n15.89955\\n9999.87\\n99.56\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnInvalidLineNumberIfAllLinesAreCorrectWithALotOfExtraLine()\n        {\n            string receivedOutput = \"1.00\\n15.89955\\n9999.87\";\n            string expectedOutput = \"1.00\\n15.89955\\n9999.87\\n\\n\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void PrecisionCheckerShouldReturnWrongAnsweIfAllLinesAreCorrectWithALotOfExtraLinesAtTheBeginningAndEnd()\n        {\n            string receivedOutput = \"\\n\\n1.00\\n15.89955\\n9999.87\";\n            string expectedOutput = \"1.00\\n15.89955\\n9999.87\\n\\n\";\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckShouldReturnCorrectAnswerInBiggerSameTextsTest()\n        {\n            var receivedOutput = new StringBuilder();\n\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                receivedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            var expectedOutput = new StringBuilder();\n\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                expectedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void PrecisionCheckShouldReturnWrongAnswerInBiggerSameTextsWithOneDifferentLineTest()\n        {\n            var receivedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                receivedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            receivedOutput.AppendFormat(\"{0}\", 5.5554m);\n\n            var expectedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                expectedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            expectedOutput.AppendFormat(\"{0}\", 5.5553m);\n\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckShouldReturnWrongAnswerInBiggerSameTextsWithTotallyDifferentLinesTest()\n        {\n            var receivedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                receivedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            receivedOutput.AppendFormat(\"{0}\", 5.5554m);\n\n            var expectedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000002m)\n            {\n                expectedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            expectedOutput.AppendFormat(\"{0}\", 5.5553m);\n\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void PrecisionCheckShouldReturnCorrectAnswerInBiggerSameTextsWithDifferentPrecisionTest()\n        {\n            var receivedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                receivedOutput.AppendLine(i.ToString(CultureInfo.InvariantCulture));\n            }\n\n            var expectedOutput = new StringBuilder();\n            for (decimal i = 0.000001m; i < 1; i += 0.000001m)\n            {\n                expectedOutput.AppendLine((i + 0.0000001m).ToString(CultureInfo.InvariantCulture));\n            }\n\n            var checker = new PrecisionChecker();\n            checker.SetParameter(\"4\");\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Checkers.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Checkers.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"9bf84249-4133-465d-be15-3bdef0445e30\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/SortCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class SortCheckerTests\n    {\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenGivenExactStrings()\n        {\n            string receivedOutput = \"Ивайло\";\n            string expectedOutput = \"Ивайло\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenGivenExactStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Ивайло\\n\";\n            string expectedOutput = \"Ивайло\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenGivenExactMultiLineStrings()\n        {\n            string receivedOutput = \"Ивайло\\nFoo\\nBar\";\n            string expectedOutput = \"Ивайло\\nFoo\\nBar\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenGivenExactMultiLineStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Ивайло\\nFoo\\nBar\";\n            string expectedOutput = \"Ивайло\\nFoo\\nBar\\n\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldRespectsTextCasing()\n        {\n            string receivedOutput = \"Ивайло\";\n            string expectedOutput = \"ивайло\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void SortCheckerShouldRespectsDecimalSeparators()\n        {\n            string receivedOutput = \"1,1\";\n            string expectedOutput = \"1.1\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnFalseWhenGivenDifferentStrings()\n        {\n            string receivedOutput = \"Foo\";\n            string expectedOutput = \"Bar\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void SortCheckershouldReturnInvalidNumberOfLinesWhenReceivedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\";\n            string expectedOutput = \"Bar\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnInvalidNumberOfLinesWhenExpectedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnIncorrectNumberOfLinesWhenGivenDifferentMultiLineStringsWithSameText()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnInvalidNumberOfLinesWhenGivenDifferentMultiLineStringsWithSameTextDifferentBlankLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"\\n\\nBar\\nFoo\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnCorrectAnswerInBiggerSameTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnWrongAnswerInBiggerDifferentTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 10; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 10; i > 0; i--)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnInvalidNumberOfLinesInBiggerDifferentNumberOfLinesTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 10000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnCorrectAnswerInBiggerReversedTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 1; i <= 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 100000; i >= 1; i--)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenGivenSameResultsUnsortedMultiLineStrings()\n        {\n            string receivedOutput = \"Ивайло\\nFoo\\nBar\";\n            string expectedOutput = \"Ивайло\\nBar\\nFoo\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenReceivedIsSortedAndExpectedIsNotStrings()\n        {\n            string receivedOutput = \"1\\n2\\n3\";\n            string expectedOutput = \"2\\n3\\n1\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenReceivedIsUnSortedAndExpectedIsSortedStrings()\n        {\n            string receivedOutput = \"2\\n1\\n3\";\n            string expectedOutput = \"1\\n2\\n3\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenBothTextsAreUnsortedStrings()\n        {\n            string receivedOutput = \"2\\n1\\n3\";\n            string expectedOutput = \"3\\n1\\n2\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenReceivedIsSortedAndExpectedIsAlmostStrings()\n        {\n            string receivedOutput = \"1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\";\n            string expectedOutput = \"1\\n2\\n3\\n4\\n6\\n5\\n7\\n8\\n9\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenReceivedIsAlmostSortedAndExpectedIsFullSortedStrings()\n        {\n            string receivedOutput = \"1\\n2\\n3\\n4\\n6\\n5\\n7\\n8\\n9\";\n            string expectedOutput = \"1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void SortCheckerShouldReturnTrueWhenBothAreTotallyUnsortedStrings()\n        {\n            string receivedOutput = \"9\\n2\\n3\\n4\\n5\\n8\\n6\\n1\\n7\";\n            string expectedOutput = \"1\\n6\\n3\\n9\\n5\\n2\\n8\\n7\\n4\";\n            var checker = new SortChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/TrimCheckerTests.cs",
    "content": "﻿namespace OJS.Workers.Checkers.Tests\n{\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class TrimCheckerTests\n    {\n        [Test]\n        public void TrimCheckerShouldReturnTrueWhenGivenExactStrings()\n        {\n            string receivedOutput = \"Ивайло\";\n            string expectedOutput = \"Ивайло\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnTrueWhenGivenExactStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Ивайло\\n\";\n            string expectedOutput = \"Ивайло\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnTrueWhenGivenExactMultiLineStrings()\n        {\n            string receivedOutput = \"Ивайло\\nFoo\\nBar\";\n            string expectedOutput = \"Ивайло\\nFoo\\nBar\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnTrueWhenGivenExactMultiLineStringsWithDifferentNewLineEndings()\n        {\n            string receivedOutput = \"Ивайло\\nFoo\\nBar\";\n            string expectedOutput = \"Ивайло\\nFoo\\nBar\\n\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldRespectsTextCasing()\n        {\n            string receivedOutput = \"Ивайло\";\n            string expectedOutput = \"ивайло\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldRespectsDecimalSeparators()\n        {\n            string receivedOutput = \"1,1\";\n            string expectedOutput = \"1.1\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnFalseWhenGivenDifferentStrings()\n        {\n            string receivedOutput = \"Foo\";\n            string expectedOutput = \"Bar\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckershouldReturnInvalidNumberOfLinesWhenReceivedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\";\n            string expectedOutput = \"Bar\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnInvalidNumberOfLinesWhenExpectedOutputHasMoreLines()\n        {\n            string receivedOutput = \"Bar\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenGivenDifferentMultiLineStringsWithSameText()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"Bar\\nFoo\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenGivenDifferentMultiLineStringsWithSameTextDifferentBlankLines()\n        {\n            string receivedOutput = \"Bar\\nFoo\\n\\n\";\n            string expectedOutput = \"\\n\\nBar\\nFoo\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerInBiggerSameTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnWrongAnswerInBiggerDifferentTextsTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 100000; i > 0; i--)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerInBiggerDifferentNumberOfLinesTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 10000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenWhitespaceIsDifferentAtTheEndOfStrings()\n        {\n            string receivedOutput = \"Ивайло \";\n            string expectedOutput = \"Ивайло   \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenWhitespaceIsDifferentAtTheStartOfStrings()\n        {\n            string receivedOutput = \"   Ивайло\";\n            string expectedOutput = \"    Ивайло\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenWhitespaceIsDifferentAtTheStartAndEndOfStrings()\n        {\n            string receivedOutput = \"   Ивайло  \";\n            string expectedOutput = \"    Ивайло    \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenWhitespaceIsDifferentAtTheStartAndEndOfStringsAndDifferentEndLines()\n        {\n            string receivedOutput = \"   Ивайло  \\n\";\n            string expectedOutput = \"    Ивайло    \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenWhitespaceIsDifferentAtTheStartAndEndOfStringsAndTwoDifferentEndLines()\n        {\n            string receivedOutput = \"   Ивайло     \";\n            string expectedOutput = \"    Ивайло    \\n   \\n\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenEveryLineHasDifferentWhiteSpace()\n        {\n            string receivedOutput = \"   Ивайло   \\n      Кенов   \\n   Е \\n     Пич     \\n\";\n            string expectedOutput = \"     Ивайло      \\n        Кенов     \\n     Е   \\n       Пич       \\n\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenLastLineHasDifferentWhiteSpace()\n        {\n            string receivedOutput = \"   Ивайло   \\n      Кенов   \\n   Е \\n     Пич     \\n      \";\n            string expectedOutput = \"     Ивайло      \\n        Кенов     \\n     Е   \\n       Пич       \\n\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenLastExpectedLineHasDifferentWhiteSpace()\n        {\n            string receivedOutput = \"   Ивайло   \\n      Кенов   \\n   Е \\n     Пич     \\n      \";\n            string expectedOutput = \"     Ивайло      \\n        Кенов     \\n     Е   \\n       Пич       \\n     \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldRespectsTextCasingWithWhiteSpace()\n        {\n            string receivedOutput = \" Николай   \";\n            string expectedOutput = \"   николай  \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldRespectsDecimalSeparatorsWithSpacing()\n        {\n            string receivedOutput = \"  1,1  \";\n            string expectedOutput = \"    1.1 \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnFalseWhenGivenDifferentStringsWithSpacing()\n        {\n            string receivedOutput = \"   Foo  \";\n            string expectedOutput = \" Bar \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnInvalidNumberOfLinesWhenReceivedOutputHasMoreLinesWithSpacing()\n        {\n            string receivedOutput = \"Bar  \\n   Foo \";\n            string expectedOutput = \" Bar       \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.InvalidNumberOfLines));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenGivenDifferentMultiLineStringsWithSameTextWithSpacing()\n        {\n            string receivedOutput = \"Bar   \\n     Foo \\n   \\n  \\n \\n\\n\";\n            string expectedOutput = \"Bar \\n Foo   \";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnCorrectAnswerWhenGivenDifferentMultiLineStringsWithSameTextDifferentBlankLinesTest()\n        {\n            string receivedOutput = \"   Bar   \\n   Foo   \\n  \\n  \";\n            string expectedOutput = \"\\n \\n Bar \\n Foo\";\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput, expectedOutput, false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckShouldReturnCorrectAnswerInBiggerSameTextsWithDifferentWhiteSpaceTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 1000; i++)\n            {\n                receivedOutput.Append(new string(' ', i));\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 1000; i++)\n            {\n                expectedOutput.Append(i.ToString());\n                expectedOutput.AppendLine(new string(' ', 1000 - i));\n            }\n\n            var checker = new TrimChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsTrue(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.Ok));\n        }\n\n        [Test]\n        public void TrimCheckerShouldReturnWrongAnswerInBiggerTextsWithLastLineDifferentTest()\n        {\n            StringBuilder receivedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                receivedOutput.AppendLine(i.ToString());\n            }\n\n            receivedOutput.Append(1);\n\n            StringBuilder expectedOutput = new StringBuilder();\n\n            for (int i = 0; i < 100000; i++)\n            {\n                expectedOutput.AppendLine(i.ToString());\n            }\n\n            expectedOutput.Append(2);\n\n            var checker = new ExactChecker();\n\n            var checkerResult = checker.Check(string.Empty, receivedOutput.ToString(), expectedOutput.ToString(), false);\n\n            Assert.IsNotNull(checkerResult);\n            Assert.IsFalse(checkerResult.IsCorrect);\n            Assert.IsTrue(checkerResult.ResultType.HasFlag(CheckerResultType.WrongAnswer));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Checkers.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnit\" version=\"3.11.0\" targetFramework=\"net45\" />\n  <package id=\"NUnit3TestAdapter\" version=\"3.13.0\" targetFramework=\"net45\" />\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Compilers.Tests/CSharpCompilerTests.cs",
    "content": "﻿namespace OJS.Workers.Compilers.Tests\n{\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class CSharpCompilerTests\n    {\n        private const string CSharpCompilerPath = @\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\csc.exe\";\n\n        [Test]\n        public void CSharpCompilerShouldWorkWhenGivenValidSourceCode()\n        {\n            const string Source = @\"using System;\nclass Program\n{\n    static void Main()\n    {\n        Console.WriteLine(\"\"It works!\"\");\n    }\n}\";\n\n            var compiler = new CSharpCompiler();\n            var result = compiler.Compile(CSharpCompilerPath, FileHelpers.SaveStringToTempFile(Source), string.Empty);\n\n            Assert.IsTrue(result.IsCompiledSuccessfully, \"Compilation is not successful\");\n            Assert.IsFalse(string.IsNullOrWhiteSpace(result.OutputFile), \"Output file is null\");\n            Assert.IsTrue(result.OutputFile.EndsWith(\".exe\"), \"Output file does not ends with .exe\");\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Compilers.Tests/MsBuildCompilerTests.cs",
    "content": "﻿namespace OJS.Workers.Compilers.Tests\n{\n    using System;\n\n    using NUnit.Framework;\n\n    using OJS.Common.Extensions;\n\n    [TestFixture]\n    public class MsBuildCompilerTests\n    {\n        private const string MsBuildCompilerPath = @\"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\MSBuild.exe\";\n\n        [Test]\n        public void MsBuildCompilerShouldWorkWhenGivenValidZippedSolution()\n        {\n            var compiler = new MsBuildCompiler();\n            var result = compiler.Compile(MsBuildCompilerPath, FileHelpers.SaveByteArrayToTempFile(this.GetSampleSolutionFile()), string.Empty);\n\n            Assert.IsTrue(result.IsCompiledSuccessfully, \"Compilation is not successful\");\n            Assert.IsFalse(string.IsNullOrWhiteSpace(result.OutputFile), \"Output file is null\");\n            Assert.IsTrue(result.OutputFile.EndsWith(\".exe\"), \"Output file does not ends with .exe\");\n        }\n\n        [Test]\n        public void MsBuildCompilerShouldWorkWhenGivenValidZippedProjectInSingleFolder()\n        {\n            var compiler = new MsBuildCompiler();\n            var result = compiler.Compile(MsBuildCompilerPath, FileHelpers.SaveByteArrayToTempFile(this.GetSampleSolutionWhereTheProjectIsLocatedInSingleFolder()), string.Empty);\n\n            Assert.IsTrue(result.IsCompiledSuccessfully, \"Compilation is not successful\");\n            Assert.IsFalse(string.IsNullOrWhiteSpace(result.OutputFile), \"Output file is null\");\n            Assert.IsTrue(result.OutputFile.EndsWith(\".exe\"), \"Output file does not ends with .exe\");\n        }\n\n        private byte[] GetSampleSolutionFile()\n        {\n                return\n                    Convert.FromBase64String(\n@\"UEsDBAoAAAAAANSJWUQAAAAAAAAAAAAAAAAPAAAAU2FtcGxlU29sdXRpb24vUEsDBBQAAAAIALKJ\nWUTDeUDOigAAALsAAAAZAAAAU2FtcGxlU29sdXRpb24vQXBwLmNvbmZpZ3u/e7+NfUVujkJZalFx\nZn6erZKhnoGSQmpecn5KZl66rVJpSZquhZKCvR0vl01yfl5aZnppUWJJZn4eUEABCGyKSxKLSkoL\n7BQgfIhYaUFBflFJakpQaV5JZm4qwvQyE5Dxxdmltkp6fq4hbkWJuanl+UXZOmFQFUAFpkoK+jDT\n9WHGA63XR7UfAFBLAwQUAAAACADLiVlExM5Do40AAADKAAAAGQAAAFNhbXBsZVNvbHV0aW9uL1By\nb2dyYW0uY3NVizEKwlAMhvdC7xA6tUsv0NFJUBA6OIcaSvC9pLykFRFP5uCRvIKVCtWPQH7+fHk9\nnoKRbMCOoMU4BGo1jM4qeXbLM5gZjaWH9mpOscmzpWRxSoIBuoBmcEjaJ4zL7fv3p5mjcweT8gn2\nyFJWq/Tjf9iomAaqj4mddixUFluHi6az1UXVrPJ9ifOa5w1QSwMECgAAAAAAsolZRAAAAAAAAAAA\nAAAAABoAAABTYW1wbGVTb2x1dGlvbi9Qcm9wZXJ0aWVzL1BLAwQUAAAACACyiVlEirAaq3gCAACg\nBQAAKQAAAFNhbXBsZVNvbHV0aW9uL1Byb3BlcnRpZXMvQXNzZW1ibHlJbmZvLmNzjVRLbhNBEN1H\nyh1K3sRE2HFiJyhhBY6IvAigOERCiEXPTLXdSU/XqD82cyTOwAKJC3EFqtvjjC1igr1wu/rVq1dT\nr+b3j5/BKTODae08lv0blBpzr8i83t/bvgnGqxL7YyorpdFO0S5Ujm4XbmI8Wqo2YPt7R0dwhQat\n0DAxkmwpYiUQGQUPgg/OYZnpGpSDnIy3pDUW4OeWwmzOvwiSQ7SM9RKdQw8kQXhvVRY8uj6M58LM\nMIIdthewEDqgA09QUqFkndhUqyLRsQDKlfBcdKn8fFNTf3/vy/p8AW+a063yGrudqSgrjVPSIVJ1\nXnx9EnyJLreqipBuZxdoTEaqWbDiOVhZCVPvBny0VITc/6+2MVW1VbM5Jzwe4dd3gJPB8WhX0q0V\nBZbCPvxDZ9A+WGwA6SFP0fs4QG7hTjmVaYxTkULzvErxgC6NxtcVn5ThP8q1zjDkYdFkJTZOHX+4\nZruUFRk0nh0AEwk1BTAYzUMgcjYgcyTOvymlpXLFxUQvk6WigA15rYuYzduAQJFE+MS47Yw2rZta\nemz7dsu9V58ml9Hm7L9UbXIZfbxuXKsMlFzprCzd80pGMH6ryK16YqlbZa+CKrqdfJSNhsVw1Ds7\neSV7ozMc9rIRDnpyMBydn5+eDU4L0Q7iDq2L+7exBUnPhuvjGjrlvFurazuQFGyzVReRLlGmz7W4\nJ7tm3wgr04ahjb8NShfwPpQZ2jZ6gwu1zk/RzzzRnKW5CvO4v0LrpKhZbKauG0SBUrDt0u2KXJji\nkbCp5FYKshpWr68IPjg84M7BzWlpIENuNHUGT/i6aaPbOe4P+ofpmT6H4u8u3Dt+oz6J/QNQSwME\nFAAAAAgAtYlZRFF8qgaLAwAACgoAACQAAABTYW1wbGVTb2x1dGlvbi9TYW1wbGVTb2x1dGlvbi5j\nc3Byb2q1Vt1u2zYUvh+wd+CEAW6ASkzcpKg3WYUi20GAtjFsd9uFb2jpyObKH42k0njrnmwXe6S9\nwkhJ9iR7SY1h1YUAnn+e7/Cc89cff4avHzhD96A0lWLoXQTnHgKRyoyK9dArTe6/8l5HX38VTpX8\nGVKDFlIy/cNevu8URpCTkpkFUWsweuhdl5RlHrKWhT1tjCm+w1inG+BEB5ymSmqZmyCVHGdwD0wW\noDDXK6eG++fnLzzrEaHwlhdSGdS4HnrfPns7r2yPHwwIF4GeErM5W+4Z7ejOlm/3rhLJuRRBoWSh\nPZRIkVFTXWD8QLXRz3r/zfSh6d6Zh3Ad+1S5W5ntjZJlUZEs0TrO6bpUxDlvh4FsAB3mWQ8Nh6jX\nQ140glW5DnGHvTM4ZcTkUvFDWzt6y0wstsn0fYh3rL2JOrs3Jc2i3y6S8dWknwz86+t44F+OBon/\najLo+/3LOHn5MnkRn08Gv4e4rdOYuStNUZrFtoBo/AAhbp0bibgoRqDpWoCaSJaBiqaqyhEFHeJj\nbqM2k9K8Ixx0QVKI5oQXDOaSle6yIe5yd560Br5iW8c40ugwG4W6cifKkj5K9aFBObq/DK5C/Aiz\nUZ1QBjGzcXMQJrq66Ie4S6qqAR+XQ7dCni6GT0eIVkXxKRYOU4fuQT3UMR9h3pAb4crGfMtXtrAj\no0qLWofUFquAzEvGGpk2sHeFoZz+avmEaQf97twpDfecohUVy0p/GeIWee8ppwLs1bUhwuhoNL5+\nf/P9YhYn4xAfMhudsVJSzcA1isi+QV6YELdpjdiPRAnb0t64dhNdhnh/ducvA9EMGBAN/wdIVbaL\nbCUF2z4FQA3iZ/LfxHUSAifk/kvl/tYA7zTPGeSg7GwCdCtSVmYw9OZbbaV2PfcpGdumFZwk+BNn\nwRsqfjlJeEQMqX5zMP9MjqdVW6NjviGqONnRqeHvZxDu5vA4pXZ2FZS1jFgc1rbRBWn7Dv8m1fTt\n5a6b3opctrQ+7/qdFC2LtvsHafWeHrfw2DKwcIO5HtaHqQ1MvZLsjX7j+3aDQVxmNN+irSwVqrYO\nZMs3Ba2fI5JlNd0Q/QFRC2gGyMUqc2Q2gBqLaGXXlo+IiAyVdl3irtUjagLk3FTfnZVWSNuXyIhC\nsCsOVEhqnxACt3g8RxoAHe0SjY+gCrluB8iNK7tZge0QUO9XTZpa7aIrG+cG1GOivu+Wut0gj/4G\nUEsDBBQAAAAIALWJWUTO/PzSfAEAAPMDAAASAAAAU2FtcGxlU29sdXRpb24uc2xupZJPT4MwGMbP\nI+l3IHiZyWhahlMOHqCjelCzSPTkBaEsNYUS/piYuU/mwY/kV7C4MQdOY7Yb79Pnfd5f3/Lx9g60\nax4VspRJpd/zsg6FHlR1zKUeSFFXXGY65YKNdCqLNFQeVpSNiC2IENCOek0WwmOgrbSV1Dacf7XA\nMcIYQdSMzXhap79YlQXayMIOxECbFfKJRdXQWFDXR7ZPkKliqInxdGx61PZMhAiy6anjU48sjWOV\nYARhmgvWXsIY9ZWHbgmjMldjGt8CE/+EWsQxPc91THvqEPOMOpZp2S6ZTMjYRdRZGkDzs3iNBrQL\nIR9DAbTB6iNgUZM6bOOJzBI+r4uwKWYirBK1zrIBzYsNg+oeTNljPX91sxedzO7UcaduDLdMsLBk\nW5aeokwKrIPxA2uN/QeVLKttrP/tBHZooauGPTOSzHfdY69Er+YihuiAvN6yOoy9swNSvzn3eJx2\n7+qRclZUnO36Ty55vKlvZMyUg7pXgb9zwEYB2idQSwMEFAAAAAgA0YlZRPu9+A3lCAAAAEwAABYA\nAABTYW1wbGVTb2x1dGlvbi52MTIuc3Vv7Vt9bFvVFT9OaZemQPrBSlvazAshFKiD47hunBboy4tN\ngYRGdfoxZAm5tuM5cWzLH/1QU2mbNm1/jE1jf6xCVOqmTUCF+PhrAyTEh4RUCSn9B03sH2jF/mLS\ngEl8STj73eNr59mO7fdsl7TJO0/H77777nu/cz/Ouefed3x5bsPHf3512xUqowdpFeXm19IaTZ4F\n3Fa4WE90k8zLzc/Pi6xV4HmTbig6RAkcGbKSh+I4p+g0GaHNtLrY57fWKfvKlx2P7XPMWXaIiw35\nvHEgJmiKHgH6JFIeOkVGaDO1WQT2Vjn29Dyj5ocv0wQFKE3TNEpRnDN0GL9hShXz03Xe1QP8bTj/\n0AD+MLhdpo8CN04h1PwkjQEzDo6wBH00zvfiuAqRFzkBmqFwmUQu4N+C880G8BVZnrj9iL6bby0J\neyDaZDtY9Mvt4DvAW6St6ML5R2Ar+MfgbvCd3JZEd8kyJi0//b/87f4F/d/YMv0vmXP0PPOwqf9F\n/S+022ppBwq6+wOph1tboI9rpP63S7xa+r92hfkQS025MhbjYI2m/wV3yLQYM2Ks3Sqv18tpXKQ3\n4Xyb1IPN0uZvkfZ/m+x/MR/skOVr2f9e8N3gneB7wPeC79PI0yfTdpz7wQ7wANgJ3s06QbQHPAh2\ng4c0zz7Avu3CtZZHkO8BezX3lzuNwKIcpyxFpNU5CiuToSD9tMLSLE5W2J+tsu/nddqfh2R5QeX4\nw+AwZJimJGxilOekWnLsBH67xm6QDtoHfqYKvph/gkglgRuFBPE6rdAL/HVSX/Ti75W2cDF8r5wP\nfMDOUoplqUW90v9dbQD/fvBVuZA7CJQMxRhVcATIGR4DYcgWhQT15z9hA7oM4It14/syPcz+xzRm\ntgCwpjXo+mg78C2aOUPPM6ukbaFF5n8fRn6CUqwD2Tpjj/L1N+x/tGn634vZ2EN22C4P1iX9ZIMl\ns+PsRaofxwiunyx6SZWtM9QAvkX2AenGn8D1GO4HKFnpfxjGJw3+EbxvgsdADHqQgPb5WA9OoD+C\nOkZBN/A3yrlGL/5+DX6t8S9sQf816H+x/vyEWkdG8bV0EK0+hb6NoM1Vtnei5nmre4Rn0Lrtb7lJ\nzut68TvBv5BplWKsgQItCuSTFVLUpkbaP6cpdxgoMSAGKMR+dkHTwhh9GR0zYLe0v9cKv956qLfJ\n+jdLN0t70ih9pq6lZuhNSxA20E9ZuW5Lk581eZotSgCrWT+vroQ1nymOKT/blzTyAihlZcufpRDP\n+FZysAUcIH9Fb/jJx6uwJJ4K8xwdo2zRU6h3N/+2iFzJ9eGdaTp+/ldXH/8q/Mtjf9j8a8dzf/wJ\nLbL+qVX/Tz+NTr68b/R/9h07p+Y+cr5HBmmp7X8rqBH8VtKNjN/o+q9T7qGI/I3yrHf91yXLG13/\n7dLIdL9M613/7dU8+6Bcgyy2Blxp5BnzTlAT5FF949QEHZvroGaop2IFkYYFP0J2tmJ9/FvPF3+L\nbuw5pJkZuNn5G+3XQZe++Pf2F954duz3T/e8OPnuhW8KLxSG5Eom9xf175c3vLSNLlzqnH+3DKxZ\negS8Ll8HC22v1XZ1bn+YfwnzxWvqVCQrBkRaI1e6TK56d4W8NSt2WFbqgJ1KD5vOVPlRQj7qWfed\nct9Tbx949V8X5zb97WjnKF1+/fNjv+l+zfPi0AfBc1+d2lEoOTh52zu5d7pG/3o+9NKfuv7rrlbS\nCIm9hzHUNsb1za/dUtzwyaLmET3Aa34xC4g54gw6QoW/sxtejQMpNyo7jEPhlBM+jxu5NswfXqQc\nSDmQqyDPhUNFJypk53tnoYEhOlmGe5B3j7SonURVZMsPAlG2nXpbLNteUlpe20OQOMY7dEI1ZnEv\nDnWwotw4RlofTdJwcQdxGCVDJe3wUMvlWdg/MypLfiQoeLsX0uxhD7ifZRHpgaL/K1RB4XuKVAqB\nL+QWUohDyKR3JHTw95cgj9YTkF2FlBHZ/7cQ1ajP3kXH/9iqvB9moQ8tI0N2HGf6Vc9ur0N124aH\nFbfNOeJWbYNet8PmcCqqy6UOKHav++ysLzCTjIV9iVg2E03E/aWXfcF0MpWYmg0O+bPpcCrtj0en\nE7HAaX8oEczOhOOZtP9ENJ0NxKzpTDYUTVgd9v4Bv3gkHMS9NL8sLV9WfolikVRgBhizs2cUl7rH\n6VQGbXaPU7E5varLNjjoUmx2l9MxOGDf7XTtcZ4Vxr0wb0T3L+uKjizj2nWMFx950phI4wWRalbX\nv/D+cjXZQpa26g5QGzVMrXBn2lqcZ4QKJNZ9P+P9uKEKL9PKXyXy7ocVq7JTsM0urMz8NMa7tKKs\ncEwmOY7gSIkT5CtxgvrJwT65H6VU/AbZUgoXR3zp8AP/6SWX4QR+g/wNQOwKH2epfve9SxXgXekZ\nPBnUyFa4vn4kyucKiX67xBKJ3fsge74hHd8NWrUPZZF9cT2tIL9P+7XU+7/N7n+udGp0/y+3DOM/\nVuL+XyviPyxm/EfD8R/LIP7D8PeHFsd/GMY34z/yfbBMvv/z+DcS/5Ezv/8Xyx1Aq4cYO47RFcOv\nl/3JkPRj61F3k/hihy4I/YtwvbNs+0Zle4zwWA+0vP5rec84T+Xec2H0pTj/YN15oK8B/HaN/pf2\n9wSusmyHCvHwKbaMBRkqyd5k+1eff04D+Ti3gp75Z1OD+leOP4bfGa736ZLY+GojcZfE7zSAb2O7\nb8T/0EpSSk7g387zkH78XYv0v9DzJFuCFMtRaemr27/1ck7Riy/8la/zScbNMGKcV6ELa/XSkVnN\nKg/J9r+j4f4vXRVrW3qcdwaiNTUQ498i1hsdBvC75L65oFr4hf+C1LJD0H/LGs1/H8lg/Re3P5O4\nirD/V0v3iceScf0X8Rr/aVte8Z8bGoz/bAU1Un+6TvDN+A8z/sOM/8DtJzTxHz21CvahxWMU11/w\nmgZg6I2/GKXUpUeVe85NPfb8Py/8/FDuHxeNRWVUe75ZMuM3Vnb8hhm/YcZvmPEbN0btrqv4jQ4Z\ntGDGbzCZ8Rtm/IYZv2GcVnr8xv8BUEsBAh8ACgAAAAAA1IlZRAAAAAAAAAAAAAAAAA8AJAAAAAAA\nAAAQAAAAAAAAAFNhbXBsZVNvbHV0aW9uLwoAIAAAAAAAAQAYAMClP048Ms8BwKU/TjwyzwHnLV0n\nPDLPAVBLAQIfABQAAAAIALKJWUTDeUDOigAAALsAAAAZACQAAAAAAAAAIAAAAC0AAABTYW1wbGVT\nb2x1dGlvbi9BcHAuY29uZmlnCgAgAAAAAAABABgAqyq+JzwyzwGOA74nPDLPAY4Dvic8Ms8BUEsB\nAh8AFAAAAAgAy4lZRMTOQ6ONAAAAygAAABkAJAAAAAAAAAAgAAAA7gAAAFNhbXBsZVNvbHV0aW9u\nL1Byb2dyYW0uY3MKACAAAAAAAAEAGAAs75VDPDLPASzvlUM8Ms8BxVG+JzwyzwFQSwECHwAKAAAA\nAACyiVlEAAAAAAAAAAAAAAAAGgAkAAAAAAAAABAAAACyAQAAU2FtcGxlU29sdXRpb24vUHJvcGVy\ndGllcy8KACAAAAAAAAEAGABegs4nPDLPAV6Czic8Ms8BEEC9JzwyzwFQSwECHwAUAAAACACyiVlE\nirAaq3gCAACgBQAAKQAkAAAAAAAAACAAAADqAQAAU2FtcGxlU29sdXRpb24vUHJvcGVydGllcy9B\nc3NlbWJseUluZm8uY3MKACAAAAAAAAEAGAAfDc4nPDLPAR8Nzic8Ms8BW7W9JzwyzwFQSwECHwAU\nAAAACAC1iVlEUXyqBosDAAAKCgAAJAAkAAAAAAAAACAAAACpBAAAU2FtcGxlU29sdXRpb24vU2Ft\ncGxlU29sdXRpb24uY3Nwcm9qCgAgAAAAAAABABgA2WqJKzwyzwEVx74nPDLPARXHvic8Ms8BUEsB\nAh8AFAAAAAgAtYlZRM78/NJ8AQAA8wMAABIAJAAAAAAAAAAgAAAAdggAAFNhbXBsZVNvbHV0aW9u\nLnNsbgoAIAAAAAAAAQAYANrxiis8Ms8BzY+nJzwyzwHNj6cnPDLPAVBLAQIfABQAAAAIANGJWUT7\nvfgN5QgAAABMAAAWACQAAAAAAAAAIgAAACIKAABTYW1wbGVTb2x1dGlvbi52MTIuc3VvCgAgAAAA\nAAABABgA0PpASzwyzwH0GIsrPDLPAfQYiys8Ms8BUEsFBgAAAAAIAAgAYAMAADsTAAAAAA==\");\n        }\n\n        private byte[] GetSampleSolutionWhereTheProjectIsLocatedInSingleFolder()\n        {\n            return Convert.FromBase64String(\n@\"UEsDBAoAAAAAAAxiY0QAAAAAAAAAAAAAAAAPAAAAU2FtcGxlU29sdXRpb24vUEsDBBQAAAAIALKJ\nWUTDeUDOigAAALsAAAAZAAAAU2FtcGxlU29sdXRpb24vQXBwLmNvbmZpZ3u/e7+NfUVujkJZalFx\nZn6erZKhnoGSQmpecn5KZl66rVJpSZquhZKCvR0vl01yfl5aZnppUWJJZn4eUEABCGyKSxKLSkoL\n7BQgfIhYaUFBflFJakpQaV5JZm4qwvQyE5Dxxdmltkp6fq4hbkWJuanl+UXZOmFQFUAFpkoK+jDT\n9WHGA63XR7UfAFBLAwQUAAAACADLiVlExM5Do40AAADKAAAAGQAAAFNhbXBsZVNvbHV0aW9uL1By\nb2dyYW0uY3NVizEKwlAMhvdC7xA6tUsv0NFJUBA6OIcaSvC9pLykFRFP5uCRvIKVCtWPQH7+fHk9\nnoKRbMCOoMU4BGo1jM4qeXbLM5gZjaWH9mpOscmzpWRxSoIBuoBmcEjaJ4zL7fv3p5mjcweT8gn2\nyFJWq/Tjf9iomAaqj4mddixUFluHi6az1UXVrPJ9ifOa5w1QSwMECgAAAAAAsolZRAAAAAAAAAAA\nAAAAABoAAABTYW1wbGVTb2x1dGlvbi9Qcm9wZXJ0aWVzL1BLAwQUAAAACACyiVlEirAaq3gCAACg\nBQAAKQAAAFNhbXBsZVNvbHV0aW9uL1Byb3BlcnRpZXMvQXNzZW1ibHlJbmZvLmNzjVRLbhNBEN1H\nyh1K3sRE2HFiJyhhBY6IvAigOERCiEXPTLXdSU/XqD82cyTOwAKJC3EFqtvjjC1igr1wu/rVq1dT\nr+b3j5/BKTODae08lv0blBpzr8i83t/bvgnGqxL7YyorpdFO0S5Ujm4XbmI8Wqo2YPt7R0dwhQat\n0DAxkmwpYiUQGQUPgg/OYZnpGpSDnIy3pDUW4OeWwmzOvwiSQ7SM9RKdQw8kQXhvVRY8uj6M58LM\nMIIdthewEDqgA09QUqFkndhUqyLRsQDKlfBcdKn8fFNTf3/vy/p8AW+a063yGrudqSgrjVPSIVJ1\nXnx9EnyJLreqipBuZxdoTEaqWbDiOVhZCVPvBny0VITc/6+2MVW1VbM5Jzwe4dd3gJPB8WhX0q0V\nBZbCPvxDZ9A+WGwA6SFP0fs4QG7hTjmVaYxTkULzvErxgC6NxtcVn5ThP8q1zjDkYdFkJTZOHX+4\nZruUFRk0nh0AEwk1BTAYzUMgcjYgcyTOvymlpXLFxUQvk6WigA15rYuYzduAQJFE+MS47Yw2rZta\nemz7dsu9V58ml9Hm7L9UbXIZfbxuXKsMlFzprCzd80pGMH6ryK16YqlbZa+CKrqdfJSNhsVw1Ds7\neSV7ozMc9rIRDnpyMBydn5+eDU4L0Q7iDq2L+7exBUnPhuvjGjrlvFurazuQFGyzVReRLlGmz7W4\nJ7tm3wgr04ahjb8NShfwPpQZ2jZ6gwu1zk/RzzzRnKW5CvO4v0LrpKhZbKauG0SBUrDt0u2KXJji\nkbCp5FYKshpWr68IPjg84M7BzWlpIENuNHUGT/i6aaPbOe4P+ofpmT6H4u8u3Dt+oz6J/QNQSwME\nFAAAAAgAtYlZRFF8qgaLAwAACgoAACQAAABTYW1wbGVTb2x1dGlvbi9TYW1wbGVTb2x1dGlvbi5j\nc3Byb2q1Vt1u2zYUvh+wd+CEAW6ASkzcpKg3WYUi20GAtjFsd9uFb2jpyObKH42k0njrnmwXe6S9\nwkhJ9iR7SY1h1YUAnn+e7/Cc89cff4avHzhD96A0lWLoXQTnHgKRyoyK9dArTe6/8l5HX38VTpX8\nGVKDFlIy/cNevu8URpCTkpkFUWsweuhdl5RlHrKWhT1tjCm+w1inG+BEB5ymSmqZmyCVHGdwD0wW\noDDXK6eG++fnLzzrEaHwlhdSGdS4HnrfPns7r2yPHwwIF4GeErM5W+4Z7ejOlm/3rhLJuRRBoWSh\nPZRIkVFTXWD8QLXRz3r/zfSh6d6Zh3Ad+1S5W5ntjZJlUZEs0TrO6bpUxDlvh4FsAB3mWQ8Nh6jX\nQ140glW5DnGHvTM4ZcTkUvFDWzt6y0wstsn0fYh3rL2JOrs3Jc2i3y6S8dWknwz86+t44F+OBon/\najLo+/3LOHn5MnkRn08Gv4e4rdOYuStNUZrFtoBo/AAhbp0bibgoRqDpWoCaSJaBiqaqyhEFHeJj\nbqM2k9K8Ixx0QVKI5oQXDOaSle6yIe5yd560Br5iW8c40ugwG4W6cifKkj5K9aFBObq/DK5C/Aiz\nUZ1QBjGzcXMQJrq66Ie4S6qqAR+XQ7dCni6GT0eIVkXxKRYOU4fuQT3UMR9h3pAb4crGfMtXtrAj\no0qLWofUFquAzEvGGpk2sHeFoZz+avmEaQf97twpDfecohUVy0p/GeIWee8ppwLs1bUhwuhoNL5+\nf/P9YhYn4xAfMhudsVJSzcA1isi+QV6YELdpjdiPRAnb0t64dhNdhnh/ducvA9EMGBAN/wdIVbaL\nbCUF2z4FQA3iZ/LfxHUSAifk/kvl/tYA7zTPGeSg7GwCdCtSVmYw9OZbbaV2PfcpGdumFZwk+BNn\nwRsqfjlJeEQMqX5zMP9MjqdVW6NjviGqONnRqeHvZxDu5vA4pXZ2FZS1jFgc1rbRBWn7Dv8m1fTt\n5a6b3opctrQ+7/qdFC2LtvsHafWeHrfw2DKwcIO5HtaHqQ1MvZLsjX7j+3aDQVxmNN+irSwVqrYO\nZMs3Ba2fI5JlNd0Q/QFRC2gGyMUqc2Q2gBqLaGXXlo+IiAyVdl3irtUjagLk3FTfnZVWSNuXyIhC\nsCsOVEhqnxACt3g8RxoAHe0SjY+gCrluB8iNK7tZge0QUO9XTZpa7aIrG+cG1GOivu+Wut0gj/4G\nUEsBAh8ACgAAAAAADGJjRAAAAAAAAAAAAAAAAA8AJAAAAAAAAAAQAAAAAAAAAFNhbXBsZVNvbHV0\naW9uLwoAIAAAAAAAAQAYAPbhgqHJNs8B9uGCock2zwHnLV0nPDLPAVBLAQIfABQAAAAIALKJWUTD\neUDOigAAALsAAAAZACQAAAAAAAAAIAAAAC0AAABTYW1wbGVTb2x1dGlvbi9BcHAuY29uZmlnCgAg\nAAAAAAABABgAqyq+JzwyzwGOA74nPDLPAY4Dvic8Ms8BUEsBAh8AFAAAAAgAy4lZRMTOQ6ONAAAA\nygAAABkAJAAAAAAAAAAgAAAA7gAAAFNhbXBsZVNvbHV0aW9uL1Byb2dyYW0uY3MKACAAAAAAAAEA\nGAAs75VDPDLPASzvlUM8Ms8BxVG+JzwyzwFQSwECHwAKAAAAAACyiVlEAAAAAAAAAAAAAAAAGgAk\nAAAAAAAAABAAAACyAQAAU2FtcGxlU29sdXRpb24vUHJvcGVydGllcy8KACAAAAAAAAEAGABegs4n\nPDLPAV6Czic8Ms8BEEC9JzwyzwFQSwECHwAUAAAACACyiVlEirAaq3gCAACgBQAAKQAkAAAAAAAA\nACAAAADqAQAAU2FtcGxlU29sdXRpb24vUHJvcGVydGllcy9Bc3NlbWJseUluZm8uY3MKACAAAAAA\nAAEAGAAfDc4nPDLPAR8Nzic8Ms8BW7W9JzwyzwFQSwECHwAUAAAACAC1iVlEUXyqBosDAAAKCgAA\nJAAkAAAAAAAAACAAAACpBAAAU2FtcGxlU29sdXRpb24vU2FtcGxlU29sdXRpb24uY3Nwcm9qCgAg\nAAAAAAABABgA2WqJKzwyzwEVx74nPDLPARXHvic8Ms8BUEsFBgAAAAAGAAYAlAIAAHYIAAAAAA==\");\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Compilers.Tests/OJS.Workers.Compilers.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{A6A4AB27-2B67-4E8D-BAA6-2FDBB8366CCE}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Compilers.Tests</RootNamespace>\n    <AssemblyName>OJS.Workers.Compilers.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.framework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"CSharpCompilerTests.cs\" />\n    <Compile Include=\"MsBuildCompilerTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\">\n      <Project>{8570183B-9D7A-408D-9EA6-F86F59B05A10}</Project>\n      <Name>OJS.Workers.Compilers</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Compilers.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Compilers.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Compilers.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"f46c097b-0515-43ca-9e19-a6fa05ffe1c8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Compilers.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.ExecutionStrategies.Tests/JsonExecutionResultTests.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies.Tests\n{\n    using NUnit.Framework;\n\n    [TestFixture]\n    public class JsonExecutionResultTests\n    {\n        private const string ParseErrorMessage = \"Invalid console output!\";\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnPassedWithCorrectPassesJSONString()\n        {\n            var jsonString = \"{stats: {passes: 1}}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsTrue(result.Passed);\n            Assert.IsNullOrEmpty(result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorWithCorrectNoPassesJSONString()\n        {\n            var jsonString = \"{stats: {passes: 0}}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(ParseErrorMessage, result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorWithCorrectNoPassesAndFailiureJSONString()\n        {\n            var jsonString = \"{stats: {passes: 0}, failures: [{ err: { message: \\\"Custom error\\\" } }]}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(\"Custom error\", result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorInvalidJSONString()\n        {\n            var jsonString = \"{stats: {passes: 1}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(ParseErrorMessage, result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorInvalidTwoObjectsInJSONString()\n        {\n            var jsonString = \"{stats: {passes: 1}} {stats: {passes: 1}}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(ParseErrorMessage, result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorCommentInJSONString()\n        {\n            var jsonString = \"{stats: {passes: 1}} /* comment */ {stats: {passes: 1}}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(ParseErrorMessage, result.Error);\n        }\n\n        [Test]\n        public void MochaExecutionResultParseShouldReturnNotPassedWithCorrectErrorDoubleCommentInJSONString()\n        {\n            var jsonString = \"{stats: {passes: 1}} //** comment **// {stats: {passes: 1}}\";\n\n            var result = JsonExecutionResult.Parse(jsonString);\n\n            Assert.IsFalse(result.Passed);\n            Assert.AreEqual(ParseErrorMessage, result.Error);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.ExecutionStrategies.Tests/OJS.Workers.ExecutionStrategies.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1A12AF9D-5BD6-455E-924E-54E686A2F270}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.ExecutionStrategies.Tests</RootNamespace>\n    <AssemblyName>OJS.Workers.ExecutionStrategies.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.framework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"JsonExecutionResultTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.ExecutionStrategies\\OJS.Workers.ExecutionStrategies.csproj\">\n      <Project>{69966098-e5b2-46cd-88e9-1f79b245ade0}</Project>\n      <Name>OJS.Workers.ExecutionStrategies</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.ExecutionStrategies.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.ExecutionStrategies.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.ExecutionStrategies.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"13f1a05e-fa2a-4e2f-ab45-55e01017c76b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.ExecutionStrategies.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/BaseExecutorsTestClass.cs",
    "content": "﻿namespace OJS.Workers.Executors.Tests\n{\n    using System;\n    using System.CodeDom.Compiler;\n    using System.IO;\n\n    using Microsoft.CSharp;\n    using NUnit.Framework;\n\n    public abstract class BaseExecutorsTestClass\n    {\n        private readonly string exeDirectory = string.Format(@\"{0}\\Exe\\\", Environment.CurrentDirectory);\n\n        public string CreateExe(string exeName, string sourceString)\n        {\n            Directory.CreateDirectory(this.exeDirectory);\n            var outputExePath = this.exeDirectory + exeName;\n            if (File.Exists(outputExePath))\n            {\n                File.Delete(outputExePath);\n            }\n\n            var codeProvider = new CSharpCodeProvider();\n            var parameters = new CompilerParameters\n                                 {\n                                     GenerateExecutable = true,\n                                     OutputAssembly = outputExePath,\n                                 };\n            parameters.ReferencedAssemblies.Add(\"System.dll\");\n            parameters.ReferencedAssemblies.Add(\"System.Windows.Forms.dll\");\n            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceString);\n            foreach (var error in results.Errors)\n            {\n                Console.WriteLine(error.ToString());\n            }\n\n            Assert.IsFalse(results.Errors.HasErrors, \"Code compilation contains errors!\");\n            return outputExePath;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/OJS.Workers.Executors.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props\" Condition=\"Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" />\n  <Import Project=\"..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props\" Condition=\"Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{5054FE58-791D-41EA-9ED9-911788A7E631}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Executors.Tests</RootNamespace>\n    <AssemblyName>OJS.Workers.Executors.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnit.3.11.0\\lib\\net45\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"BaseExecutorsTestClass.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RestrictedProcessSecurityTests.cs\" />\n    <Compile Include=\"RestrictedProcessTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\">\n      <Project>{cda78d62-7210-45ca-b3e5-9f6a5dea5734}</Project>\n      <Name>OJS.Workers.Executors</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit.3.11.0\\build\\NUnit.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\NUnit3TestAdapter.3.13.0\\build\\net35\\NUnit3TestAdapter.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Executors.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Executors.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"22c18b85-f57d-401f-aed5-9137a35cf195\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/RestrictedProcessSecurityTests.cs",
    "content": "﻿namespace OJS.Workers.Executors.Tests\n{\n    using System;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Threading;\n    using System.Windows.Forms;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class RestrictedProcessSecurityTests : BaseExecutorsTestClass\n    {\n        [Test]\n        public void RestrictedProcessShouldNotBeAbleToCreateFiles()\n        {\n            const string CreateFileSourceCode = @\"using System;\nusing System.IO;\nclass Program\n{\n    public static void Main()\n    {\n        File.OpenWrite(\"\"test.txt\"\");\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldNotBeAbleToCreateFiles.exe\", CreateFileSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 1000, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.RunTimeError, \"No exception is thrown!\");\n        }\n\n        [Test]\n        [Apartment(ApartmentState.STA)]\n        public void RestrictedProcessShouldNotBeAbleToReadClipboard()\n        {\n            const string ReadClipboardSourceCode = @\"using System;\nusing System.Windows.Forms;\nclass Program\n{\n    public static void Main()\n    {\n        if (string.IsNullOrEmpty(Clipboard.GetText()))\n        {\n            throw new Exception(\"\"Clipboard empty!\"\");\n        }\n    }\n}\";\n            Clipboard.SetText(\"clipboard test\");\n            var exePath = this.CreateExe(\"RestrictedProcessShouldNotBeAbleToReadClipboard.exe\", ReadClipboardSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 1500, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.RunTimeError, \"No exception is thrown!\");\n        }\n\n        [Test]\n        public void RestrictedProcessShouldNotBeAbleToWriteToClipboard()\n        {\n            const string WriteToClipboardSourceCode = @\"using System;\nusing System.Windows.Forms;\nclass Program\n{\n    public static void Main()\n    {\n        Clipboard.SetText(\"\"i did it\"\");\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldNotBeAbleToWriteToClipboard.exe\", WriteToClipboardSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 1500, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.RunTimeError, \"No exception is thrown!\");\n            Assert.AreNotEqual(\"i did it\", Clipboard.GetText());\n        }\n\n        [Test]\n        public void RestrictedProcessShouldNotBeAbleToStartProcess()\n        {\n            const string StartNotepadProcessSourceCode = @\"using System;\nusing System.Diagnostics;\nclass Program\n{\n    public static void Main()\n    {\n        Process.Start(string.Format(\"\"{0}\\\\notepad.exe\"\", Environment.SystemDirectory));\n    }\n}\";\n            var notepadsBefore = Process.GetProcessesByName(\"notepad.exe\").Count();\n            var exePath = this.CreateExe(\"RestrictedProcessShouldNotBeAbleToStartProcess.exe\", StartNotepadProcessSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 1500, 32 * 1024 * 1024);\n\n            var notepadsAfter = Process.GetProcessesByName(\"notepad.exe\").Count();\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.RunTimeError, \"No exception is thrown!\");\n            Assert.AreEqual(notepadsBefore, notepadsAfter);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/RestrictedProcessTests.cs",
    "content": "﻿namespace OJS.Workers.Executors.Tests\n{\n    using System;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Common;\n\n    [TestFixture]\n    public class RestrictedProcessTests : BaseExecutorsTestClass\n    {\n        private const string ReadInputAndThenOutputSourceCode = @\"using System;\nclass Program\n{\n    public static void Main()\n    {\n        var line = Console.ReadLine();\n        Console.WriteLine(line);\n    }\n}\";\n\n        private const string Consuming50MbOfMemorySourceCode = @\"using System;\nusing System.Windows.Forms;\nclass Program\n{\n    public static void Main()\n    {\n        var array = new int[50 * 1024 * 1024 / 4];\n        for (int i = 0; i < array.Length; i++)\n        {\n            array[i] = i;\n        }\n        Console.WriteLine(array[12345]);\n    }\n}\";\n\n        [Test]\n        public void RestrictedProcessShouldStopProgramAfterTimeIsEnded()\n        {\n            const string TimeLimitSourceCode = @\"using System;\nusing System.Threading;\nclass Program\n{\n    public static void Main()\n    {\n        Thread.Sleep(150);\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldStopProgramAfterTimeIsEnded.exe\", TimeLimitSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 100, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.TimeLimit);\n        }\n\n        [Test]\n        public void RestrictedProcessShouldSendInputDataToProcess()\n        {\n            var exePath = this.CreateExe(\"RestrictedProcessShouldSendInputDataToProcess.exe\", ReadInputAndThenOutputSourceCode);\n\n            const string InputData = \"SomeInputData!!@#$%^&*(\\n\";\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, InputData, 2000, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.AreEqual(InputData.Trim(), result.ReceivedOutput.Trim());\n        }\n\n        [Test]\n        public void RestrictedProcessShouldWorkWithCyrillic()\n        {\n            var exePath = this.CreateExe(\"RestrictedProcessShouldWorkWithCyrillic.exe\", ReadInputAndThenOutputSourceCode);\n\n            const string InputData = \"Николай\\n\";\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, InputData, 2000, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.AreEqual(InputData.Trim(), result.ReceivedOutput.Trim());\n        }\n\n        [Test]\n        public void RestrictedProcessShouldOutputProperLengthForCyrillicText()\n        {\n            const string ReadInputAndThenOutputTheLengthSourceCode = @\"using System;\nclass Program\n{\n    public static void Main()\n    {\n        var line = Console.ReadLine();\n        Console.WriteLine(line.Length);\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldOutputProperLengthForCyrillicText.exe\", ReadInputAndThenOutputTheLengthSourceCode);\n\n            const string InputData = \"Николай\\n\";\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, InputData, 2000, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.AreEqual(\"7\", result.ReceivedOutput.Trim());\n        }\n\n        [Test]\n        public void RestrictedProcessShouldReceiveCyrillicText()\n        {\n            const string ReadInputAndThenCheckTheTextToContainCyrillicLettersSourceCode = @\"using System;\nclass Program\n{\n    public static void Main()\n    {\n        var line = Console.ReadLine();\n        Console.WriteLine((line.Contains(\"\"а\"\") || line.Contains(\"\"е\"\")));\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldReceiveCyrillicText.exe\", ReadInputAndThenCheckTheTextToContainCyrillicLettersSourceCode);\n\n            const string InputData = \"абвгдежзийклмнопрстуфхцчшщъьюя\\n\";\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, InputData, 2000, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.AreEqual(\"True\", result.ReceivedOutput.Trim());\n        }\n\n        [Test]\n        public void RestrictedProcessShouldNotBlockWhenEnterEndlessLoop()\n        {\n            const string EndlessLoopSourceCode = @\"using System;\nclass Program\n{\n    public static void Main()\n    {\n        while(true) { }\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldNotBlockWhenEnterEndlessLoop.exe\", EndlessLoopSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 50, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.TimeLimit);\n        }\n\n        [Test]\n        public void RestrictedProcessStandardErrorContentShouldContainExceptions()\n        {\n            const string ThrowExceptionSourceCode = @\"using System;\nusing System.Windows.Forms;\nclass Program\n{\n    public static void Main()\n    {\n        throw new Exception(\"\"Exception message!\"\");\n    }\n}\";\n            var exePath = this.CreateExe(\"RestrictedProcessShouldStandardErrorContentShouldContainExceptions.exe\", ThrowExceptionSourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 500, 32 * 1024 * 1024);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.RunTimeError, \"No exception is thrown!\");\n            Assert.IsTrue(result.ErrorOutput.Contains(\"Exception message!\"));\n        }\n\n        [Test]\n        public void RestrictedProcessShouldReturnCorrectAmountOfUsedMemory()\n        {\n            var exePath = this.CreateExe(\"RestrictedProcessShouldReturnCorrectAmountOfUsedMemory.exe\", Consuming50MbOfMemorySourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 5000, 100 * 1024 * 1024);\n\n            Console.WriteLine(result.MemoryUsed);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.MemoryUsed > 50 * 1024 * 1024);\n        }\n\n        [Test]\n        public void RestrictedProcessShouldReturnMemoryLimitWhenNeeded()\n        {\n            var exePath = this.CreateExe(\"RestrictedProcessShouldReturnMemoryLimitWhenNeeded.exe\", Consuming50MbOfMemorySourceCode);\n\n            var process = new RestrictedProcessExecutor();\n            var result = process.Execute(exePath, string.Empty, 5000, 30 * 1024 * 1024);\n\n            Console.WriteLine(result.MemoryUsed);\n\n            Assert.IsNotNull(result);\n            Assert.IsTrue(result.Type == ProcessExecutionResultType.MemoryLimit);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Executors.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnit\" version=\"3.11.0\" targetFramework=\"net45\" />\n  <package id=\"NUnit3TestAdapter\" version=\"3.13.0\" targetFramework=\"net45\" />\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Tools.Tests/AntiCheat/SortAndTrimLinesVisitorTests.cs",
    "content": "﻿namespace OJS.Workers.Tools.Tests.AntiCheat\n{\n    using System;\n    using System.Linq;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Tools.AntiCheat;\n\n    [TestFixture]\n    public class SortAndTrimLinesVisitorTests\n    {\n        [Test]\n        public void TestWith9LinesInRevertedOrder()\n        {\n            var data = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };\n            var input = string.Join(Environment.NewLine, data.Reverse());\n            var expectedOutput = string.Join(Environment.NewLine, data) + Environment.NewLine;\n            var visitor = new SortAndTrimLinesVisitor();\n            var result = visitor.Visit(input);\n            Assert.AreEqual(expectedOutput, result);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Tools.Tests/OJS.Workers.Tools.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{EE0CE0F5-BAF8-4AA9-83E8-84881CDABFB1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Tools.Tests</RootNamespace>\n    <AssemblyName>OJS.Workers.Tools.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.core.interfaces, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.core.interfaces.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.framework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\nunit.util.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"NUnit.VisualStudio.TestAdapter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4cb40d35494691ac, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NUnitTestAdapter.WithFramework.2.0.0\\lib\\NUnit.VisualStudio.TestAdapter.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"AntiCheat\\SortAndTrimLinesVisitorTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Similarity\\SimilarityFinderDiffTextTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Tools\\OJS.Workers.Tools.csproj\">\n      <Project>{a1f48412-495a-434c-bdd0-e70aedad6897}</Project>\n      <Name>OJS.Workers.Tools</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Tools.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Tools.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Tools.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"214c40d8-a030-40c5-98e8-8057c596f7c5\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Tools.Tests/Similarity/SimilarityFinderDiffTextTests.cs",
    "content": "﻿namespace OJS.Workers.Tools.Tests.Similarity\n{\n    using System.Collections.Generic;\n    using System.Text;\n\n    using NUnit.Framework;\n\n    using OJS.Workers.Tools.Similarity;\n\n    /// <summary>\n    /// Tests are adapted from the original code (http://www.mathertel.de/Diff/)\n    /// </summary>\n    [TestFixture]\n    public class SimilarityFinderDiffTextTests\n    {\n        [Test]\n        public void TestWhenAllLinesAreDifferent()\n        {\n            var firstText = \"a,b,c,d,e,f,g,h,i,j,k,l\".Replace(',', '\\n');\n            var secondText = \"0,1,2,3,4,5,6,7,8,9\".Replace(',', '\\n');\n            Assert.AreEqual(\"12.10.0.0*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestWhenAllLinesAreTheSame()\n        {\n            const string TextForSplit = \"a,b,c,d,e,f,g,h,i,j,k,l\";\n            var firstText = TextForSplit.Replace(',', '\\n');\n            var secondText = TextForSplit.Replace(',', '\\n');\n            Assert.AreEqual(string.Empty, TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestWhenSnakeCase()\n        {\n            var firstText = \"a,b,c,d,e,f\".Replace(',', '\\n');\n            var secondText = \"b,c,d,e,f,x\".Replace(',', '\\n');\n            Assert.AreEqual(\"1.0.0.0*0.1.6.5*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestOneChangeWithinLongChainOfRepeats()\n        {\n            var firstText = \"a,a,a,a,a,a,a,a,a,a\".Replace(',', '\\n');\n            var secondText = \"a,a,a,a,-,a,a,a,a,a\".Replace(',', '\\n');\n            Assert.AreEqual(\"0.1.4.4*1.0.9.10*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestSomeDifferences()\n        {\n            var firstText = \"a,b,-,c,d,e,f,f\".Replace(',', '\\n');\n            var secondText = \"a,b,x,c,e,f\".Replace(',', '\\n');\n            Assert.AreEqual(\"1.1.2.2*1.0.4.4*1.0.7.6*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestReproduceScenario20020920()\n        {\n            var firstText = \"c1,a,c2,b,c,d,e,g,h,i,j,c3,k,l\".Replace(',', '\\n');\n            var secondText = \"C1,a,C2,b,c,d,e,I1,e,g,h,i,j,C3,k,I2,l\".Replace(',', '\\n');\n            Assert.AreEqual(\"1.1.0.0*1.1.2.2*0.2.7.7*1.1.11.13*0.1.13.15*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestReproduceScenario20030207()\n        {\n            var firstText = \"F\".Replace(',', '\\n');\n            var secondText = \"0,F,1,2,3,4,5,6,7\".Replace(',', '\\n');\n            Assert.AreEqual(\"0.1.0.0*0.7.1.2*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestReproduceScenarioMuegel()\n        {\n            var firstText = \"HELLO\\nWORLD\".Replace(',', '\\n');\n            var secondText = \"\\n\\nhello\\n\\n\\n\\nworld\\n\".Replace(',', '\\n');\n            Assert.AreEqual(\"2.8.0.0*\", TestHelper(new SimilarityFinder().DiffText(firstText, secondText, false, false, false)));\n        }\n\n        [Test]\n        public void TestCaseInsensitiveWithTrimLines()\n        {\n            var firstText = \"HELLO\\nWORLD \".Replace(',', '\\n');\n            var secondText = \" hello \\n world \".Replace(',', '\\n');\n            Assert.AreEqual(string.Empty, TestHelper(new SimilarityFinder().DiffText(firstText, secondText, true, true, true)));\n        }\n\n        private static string TestHelper(IEnumerable<Difference> differences)\n        {\n            var ret = new StringBuilder();\n            foreach (var difference in differences)\n            {\n                ret.Append(difference.DeletedA + \".\" + difference.InsertedB + \".\" + difference.StartA + \".\" + difference.StartB + \"*\");\n            }\n\n            return ret.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tests/OJS.Workers.Tools.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NUnitTestAdapter.WithFramework\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <configSections>\n    <section name=\"log4net\" type=\"log4net.Config.Log4NetConfigurationSectionHandler, log4net\" />\n  </configSections>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <log4net>\n    <appender name=\"ConsoleAppender\" type=\"log4net.Appender.ConsoleAppender\">\n      <layout type=\"log4net.Layout.PatternLayout\">\n        <conversionPattern value=\"[%t] %-5p %c %m%n\" />\n      </layout>\n    </appender>\n    <appender name=\"LogFileAppender\" type=\"log4net.Appender.FileAppender\">\n      <param name=\"File\" value=\"Log_OJS.Workers.Executors.txt\" />\n      <param name=\"AppendToFile\" value=\"true\" />\n      <layout type=\"log4net.Layout.PatternLayout\">\n        <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %c %m%n\" />\n      </layout>\n    </appender>\n    <root>\n      <level value=\"WARN\" />\n      <appender-ref ref=\"ConsoleAppender\" />\n      <appender-ref ref=\"LogFileAppender\" />\n    </root>\n  </log4net>\n</configuration>"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/GlobalConstants.cs",
    "content": "﻿namespace SandboxExecutorProofOfConcept\n{\n    internal class GlobalConstants\n    {\n        public const string SampleJavaScriptCode = @\"\nvar EOL = require('os').EOL;\n\nDataView = undefined;\nDTRACE_NET_SERVER_CONNECTION = undefined;\n// DTRACE_NET_STREAM_END = undefined;\nDTRACE_NET_SOCKET_READ = undefined;\nDTRACE_NET_SOCKET_WRITE = undefined;\nDTRACE_HTTP_SERVER_REQUEST = undefined;\nDTRACE_HTTP_SERVER_RESPONSE = undefined;\nDTRACE_HTTP_CLIENT_REQUEST = undefined;\nDTRACE_HTTP_CLIENT_RESPONSE = undefined;\nCOUNTER_NET_SERVER_CONNECTION = undefined;\nCOUNTER_NET_SERVER_CONNECTION_CLOSE = undefined;\nCOUNTER_HTTP_SERVER_REQUEST = undefined;\nCOUNTER_HTTP_SERVER_RESPONSE = undefined;\nCOUNTER_HTTP_CLIENT_REQUEST = undefined;\nCOUNTER_HTTP_CLIENT_RESPONSE = undefined;\nglobal = undefined;\nprocess.argv = undefined;\nprocess.versions = undefined;\nprocess.env = { NODE_DEBUG: false };\nprocess.addListener = undefined;\nprocess.EventEmitter = undefined;\nprocess.mainModule = undefined;\nprocess.removeListener = undefined;\nprocess.config = undefined;\nprocess.on = undefined;\nprocess.openStdin = undefined;\nprocess.chdir = undefined;\nprocess.cwd = undefined;\nprocess.umask = undefined;\nGLOBAL = undefined;\nroot = undefined;\nsetTimeout = undefined;\nsetInterval = undefined;\nclearTimeout = undefined;\nclearInterval = undefined;\nsetImmediate = undefined;\nclearImmediate = undefined;\nmodule = undefined;\nrequire = undefined;\nmsg = undefined;\n\ndelete DataView;\ndelete DTRACE_NET_SERVER_CONNECTION;\n// delete DTRACE_NET_STREAM_END;\ndelete DTRACE_NET_SOCKET_READ;\ndelete DTRACE_NET_SOCKET_WRITE;\ndelete DTRACE_HTTP_SERVER_REQUEST;\ndelete DTRACE_HTTP_SERVER_RESPONSE;\ndelete DTRACE_HTTP_CLIENT_REQUEST;\ndelete DTRACE_HTTP_CLIENT_RESPONSE;\ndelete COUNTER_NET_SERVER_CONNECTION;\ndelete COUNTER_NET_SERVER_CONNECTION_CLOSE;\ndelete COUNTER_HTTP_SERVER_REQUEST;\ndelete COUNTER_HTTP_SERVER_RESPONSE;\ndelete COUNTER_HTTP_CLIENT_REQUEST;\ndelete COUNTER_HTTP_CLIENT_RESPONSE;\ndelete global;\ndelete process.argv;\ndelete process.versions;\ndelete GLOBAL;\ndelete root;\ndelete setTimeout;\ndelete setInterval;\ndelete clearTimeout;\ndelete clearInterval;\ndelete setImmediate;\ndelete clearImmediate;\ndelete module;\ndelete require;\ndelete msg;\n\nvar content = '';\nprocess.stdin.resume();\nprocess.stdin.on('data', function(buf) { content += buf.toString(); });\nprocess.stdin.on('end', function() {\n    var inputData = content.trim().split(EOL);\n    console.log(code.f(inputData));\n});\n\n\nvar code = {\n    f:function solve(content) {\n        // !!! User code starts here\n        var answer = '';\n        for(var i = 0; i < content.length; i++) {\n            answer += content[i];\n        }\n        return answer + 'new';\n        // !!! User code ends here\n    }\n};\n\nfunction x()\n{\n    console.log(this);\n}\nx();\";\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"SandboxExecutorProofOfConcept\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"SandboxExecutorProofOfConcept\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"f5ad29b1-15fe-456e-a4c9-cf622ec22c96\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/SandboxExecutorProofOfConcept.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{EB599E35-73C7-4FD7-BA38-BE6FB6E60C8E}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SandboxExecutorProofOfConcept</RootNamespace>\n    <AssemblyName>SandboxExecutorProofOfConcept</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Management\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"GlobalConstants.cs\" />\n    <Compile Include=\"SandboxExecutorProofOfConceptProgram.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\">\n      <Project>{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}</Project>\n      <Name>OJS.Workers.Executors</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\SandboxTarget\\SandboxTarget.csproj\">\n      <Project>{d51f7d60-421c-44b2-9422-2610066cb82d}</Project>\n      <Name>SandboxTarget</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/SandboxExecutorProofOfConceptProgram.cs",
    "content": "﻿namespace SandboxExecutorProofOfConcept\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Threading;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Executors;\n    using OJS.Workers.Executors.Process;\n\n    internal class SandboxExecutorProofOfConceptProgram\n    {\n        private const string ProcessInfoFormat = \"{0,-25} {1}\";\n        private const string ProcessInfoTimeFormat = \"{0,-25} {1:O}\";\n        private static readonly string SandboxTargetExecutablePath = Environment.CurrentDirectory + @\"\\SandboxTarget.exe\";\n\n        private static void Main()\n        {\n            // TODO: Agents should be run with ProcessPriorityClass.RealTime\n            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;\n            Console.WriteLine(Process.GetCurrentProcess().PriorityClass);\n\n            // RunNodeJs();\n            // ThreadWork();\n            for (int i = 0; i < 1; i++)\n            {\n                var thread = new Thread(ThreadWork);\n                thread.Start();\n                Thread.Sleep(100);\n            }\n\n            //// ExecuteProcessWithDifferentUser(SandboxTargetExecutablePath, (\"Ю\".Repeat(1024) + \"\").Repeat(20 * 1024) + \"\\n\", 2000, 256 * 1024 * 1024);\n\n            Console.ReadLine();\n        }\n\n        private static void RunNodeJs()\n        {\n            const string NodeJsExe = @\"C:\\Program Files\\nodejs\\node.exe\";\n            const string JsFilePath = @\"C:\\Temp\\code.js\";\n            const string JsFileWorkingDirectory = @\"C:\\Temp\";\n            File.WriteAllText(JsFilePath, GlobalConstants.SampleJavaScriptCode);\n\n            var process = new RestrictedProcess(NodeJsExe, JsFileWorkingDirectory, new List<string>() { JsFilePath });\n            process.StandardInput.WriteLine(\"Vasko\" + Environment.NewLine + \"Niki2\" + Environment.NewLine + \"Niki3\");\n            process.Start(1000, 100 * 1024 * 1024);\n            process.StandardInput.Close();\n            var output = process.StandardOutput.ReadToEnd();\n            var error = process.StandardError.ReadToEnd();\n            Console.WriteLine(output);\n            Console.WriteLine(error);\n            Console.WriteLine(process.ExitCode);\n        }\n\n        private static void ThreadWork()\n        {\n            StartRestrictedProcess(SandboxTargetExecutablePath, \"Ю\".Repeat(1024).Repeat(25 * 1024) + \"\\n\", 5000, 256 * 1024 * 1024);\n        }\n\n        private static void StartRestrictedProcess(string applicationPath, string textToWrite, int timeLimit, int memoryLimit)\n        {\n            var restrictedProcessExecutor = new RestrictedProcessExecutor();\n            Console.WriteLine(\"-------------------- Starting RestrictedProcess... --------------------\");\n            var result = restrictedProcessExecutor.Execute(applicationPath, textToWrite, timeLimit, memoryLimit);\n            Console.WriteLine(\"------------ Process output: {0} symbols. First 2048 symbols: ------------ \", result.ReceivedOutput.Length);\n            Console.WriteLine(result.ReceivedOutput.Substring(0, Math.Min(2048, result.ReceivedOutput.Length)));\n            if (!string.IsNullOrWhiteSpace(result.ErrorOutput))\n            {\n                Console.WriteLine(\n                    \"------------ Process error: {0} symbols. First 2048 symbols: ------------ \",\n                    result.ErrorOutput.Length);\n                Console.WriteLine(result.ErrorOutput.Substring(0, Math.Min(2048, result.ErrorOutput.Length)));\n            }\n\n            Console.WriteLine(\"------------ Process info ------------ \");\n            Console.WriteLine(ProcessInfoFormat, \"Type:\", result.Type);\n            Console.WriteLine(ProcessInfoFormat, \"ExitCode:\", string.Format(\"{0} ({1})\", result.ExitCode, new Win32Exception(result.ExitCode).Message));\n            Console.WriteLine(ProcessInfoFormat, \"Total time:\", result.TimeWorked);\n            Console.WriteLine(ProcessInfoFormat, \"PrivilegedProcessorTime:\", result.PrivilegedProcessorTime);\n            Console.WriteLine(ProcessInfoFormat, \"UserProcessorTime:\", result.UserProcessorTime);\n            Console.WriteLine(ProcessInfoFormat, \"Memory:\", string.Format(\"{0:0.00}MB\", result.MemoryUsed / 1024.0 / 1024.0));\n            Console.WriteLine(new string('-', 79));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxExecutorProofOfConcept/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n    </startup>\n</configuration>"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"SandboxTarget\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"SandboxTarget\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ad096ced-92f2-4d6b-99c2-ed99a8bc2775\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/SandboxTarget.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D51F7D60-421C-44B2-9422-2610066CB82D}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SandboxTarget</RootNamespace>\n    <AssemblyName>SandboxTarget</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"SandboxTargetProgram.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TryToExecuteParams.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.5\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/SandboxTargetProgram.cs",
    "content": "﻿namespace SandboxTarget\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Linq;\n    using System.Net;\n    using System.Net.Sockets;\n    using System.Threading;\n    using System.Windows.Forms;\n\n    internal class SandboxTargetProgram\n    {\n        [STAThread]\n        private static void Main()\n        {\n            // JustDoSomeCpuWork();\n\n            //// TODO: Console.OutputEncoding = Encoding.UTF8;\n\n            WriteLine(\"Hi, I am an instance of SandboxTargetProgram!\");\n            WriteLine(string.Format(\"Environment.UserName: {0}\", Environment.UserName));\n            WriteLine(string.Format(\"Environment.CurrentDirectory: {0}\", Environment.CurrentDirectory));\n            WriteLine(string.Format(\"Environment.OSVersion: {0}\", Environment.OSVersion));\n            WriteLine(string.Format(\"Environment.Version: {0}\", Environment.Version));\n            WriteLine(string.Format(\"Process.GetCurrentProcess().Id: {0}\", Process.GetCurrentProcess().Id));\n            WriteLine(string.Format(\"Process.GetCurrentProcess().PriorityClass: {0}\", Process.GetCurrentProcess().PriorityClass));\n\n            //// ThreadStart();\n\n            ReadWriteConsole();\n\n            var actions = new[]\n                              {\n                                  new TryToExecuteParams(x => File.OpenWrite(x), \"create file\", \"file.txt\"),\n                                  new TryToExecuteParams(x => File.OpenWrite(x), \"create file\", @\"C:\\file.txt\"),\n                                  new TryToExecuteParams(x => File.OpenWrite(x), \"create file\", @\"C:\\Windows\\file.txt\"),\n                                  new TryToExecuteParams(x => File.OpenWrite(x), \"create file\", string.Format(\"C:\\\\Users\\\\{0}\\\\AppData\\\\LocalLow\\\\{1}\", Environment.UserName, @\"file.txt\")),\n                                  new TryToExecuteParams(x => File.OpenRead(x), \"read file\", @\"C:\\Windows\\win.ini\"),\n                                  //// TODO: new TryToExecuteParams(x => Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@\"\\Software\\AppDataLow\\\").CreateSubKey(\"asd\"), \"create registry key\", \"\"),\n                                  new TryToExecuteParams(x => Process.Start(x), \"start process\", string.Format(\"{0}\\\\notepad.exe\", Environment.SystemDirectory)), // Unit tested\n                                  new TryToExecuteParams(x => Process.Start(\"shutdown\", x), \"run shutdown\", \"\\\\?\"),\n                                  new TryToExecuteParams(x => Console.Write(Process.GetProcesses().Count()), \"count processes\", \"\\\\?\"),\n                                  new TryToExecuteParams(x => new TcpClient().Connect(x, 80), \"open socket\", \"google.com\"),\n                                  new TryToExecuteParams(x => new WebClient().DownloadString(x), \"access http resource\", \"http://google.com\"),\n                                  new TryToExecuteParams(Clipboard.SetText, \"write to clipboard\", \"data\"), // Unit tested\n                                  new TryToExecuteParams(\n                                      x =>\n                                          {\n                                              if (string.IsNullOrEmpty(Clipboard.GetText()))\n                                              {\n                                                  throw new Exception(\"Clipboard empty!\");\n                                              }\n                                          },\n                                      \"read from clipboard\",\n                                      null), // Unit tested\n                              };\n\n            int tests = 0;\n            int passed = 0;\n            foreach (var action in actions)\n            {\n                tests++;\n                var result = TryToExecute(action);\n                if (!result)\n                {\n                    passed++;\n                }\n            }\n\n            Console.WriteLine(\"*** {0} tests run. {1} tests passed. {2} tests failed!!!\", tests, passed, tests - passed);\n\n            // ReadWrite10000LinesFromConsole();\n            // Write10000SymbolsOnSingleLine();\n\n            // for (int i = 0; i < 70; i++)\n            // {\n            //    Sleep(1);\n            // }\n\n            // RecursivelyCheckFileSystemPermissions(@\"C:\\\", 0);\n            // CreateInfiniteAmountOfMemory();\n\n            // ThrowException();\n            // InfiniteLoop();\n        }\n\n        private static void JustDoSomeCpuWork()\n        {\n            var data = new long[512];\n\n            for (int i = 0; i < data.Length; i++)\n            {\n                for (int j = 0; j < data.Length; j++)\n                {\n                    for (int k = 0; k < data.Length; k++)\n                    {\n                        data[i] += j * k;\n                    }\n                }\n            }\n\n            Console.WriteLine(data[data.Length - 1]);\n\n            Environment.Exit(0);\n        }\n\n        private static void ThreadStart()\n        {\n            var threads = new List<Thread>();\n            for (int i = 1; i < 100000; i++)\n            {\n                var thread = new Thread(() => Thread.Sleep(100000));\n                threads.Add(thread);\n                thread.Start();\n                Console.WriteLine(\"Thread {0} started\", i);\n            }\n        }\n\n        private static void RecursivelyCheckFileSystemPermissions(string currentDirectory, int level)\n        {\n            Console.Write(\"{0}\\\\{1}\\\\ \", new string(' ', level * 4), new DirectoryInfo(currentDirectory).Name);\n\n            try\n            {\n                Directory.GetFiles(currentDirectory);\n                Console.Write(\"++FILES\");\n            }\n            catch\n            {\n                Console.Write(\"--FILES\");\n            }\n\n            try\n            {\n                var directories = Directory.GetDirectories(currentDirectory);\n                Console.WriteLine(\"++DIRS\");\n                foreach (var directory in directories)\n                {\n                    RecursivelyCheckFileSystemPermissions(directory, level + 1);\n                }\n            }\n            catch\n            {\n                Console.WriteLine(\"--DIRS\");\n            }\n        }\n\n        private static void InfiniteLoop()\n        {\n            WriteLine(\"Going to infinite loop... bye...\");\n            while (true)\n            {\n            }\n        }\n\n        private static bool TryToExecute(TryToExecuteParams tryToExecuteParams)\n        {\n            Write(string.Format(\"* {0} ({1}): \", tryToExecuteParams.Name, tryToExecuteParams.Parameter));\n            try\n            {\n                tryToExecuteParams.Action(tryToExecuteParams.Parameter);\n                WriteLine(\" !!!Success!!!\", ConsoleColor.Yellow);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                WriteLine(string.Format(\" Exception: {0}\", ex.Message), ConsoleColor.Red);\n                return false;\n            }\n        }\n\n        private static void ReadWriteConsole()\n        {\n            var startTime = DateTime.Now;\n            var line = Console.ReadLine();\n            var endTime = DateTime.Now;\n            Console.WriteLine(\"ReadWriteConsole time: {0}\", endTime - startTime);\n            Console.WriteLine(\"Memory consumption: {0:0.000} MB\", GC.GetTotalMemory(false) / 1024.0 / 1024.0);\n            WriteLine(string.Format(\"Input size: {0}. First 5 chars: {1}\", line.Length, line.Substring(0, 5)), ConsoleColor.White);\n        }\n\n        private static void ReadWrite10000LinesFromConsole()\n        {\n            var startTime = DateTime.Now;\n            for (int i = 0; i < 10000; i++)\n            {\n                var line = Console.ReadLine();\n                Console.WriteLine(line);\n            }\n\n            var endTime = DateTime.Now;\n            Console.WriteLine(\"Read10000LinesFromConsole time: {0}\", endTime - startTime);\n            Console.WriteLine(\"Memory consumption: {0:0.000} MB\", GC.GetTotalMemory(false) / 1024.0 / 1024.0);\n        }\n\n        private static void Write10000SymbolsOnSingleLine()\n        {\n            Console.Write(new string('Я', 10 * 1024 * 1024));\n        }\n\n        private static void Sleep(double seconds)\n        {\n            Write(string.Format(\"Going to sleep for {0} seconds... \", seconds));\n            Thread.Sleep((int)(1000.0 * seconds));\n            WriteLine(string.Format(\"Slept {0} seconds!\", seconds), ConsoleColor.Yellow);\n        }\n\n        private static void CreateInfiniteAmountOfMemory()\n        {\n            Console.WriteLine(\"Start to infinite memory allocation...\");\n            var references = new List<object>();\n            while (true)\n            {\n                Console.WriteLine(\"Using: {0:0.000} MB.\", GC.GetTotalMemory(false) / 1024M / 1024M);\n                references.Add(new int[250000]);\n            }\n        }\n\n        private static void ThrowException()\n        {\n            Write(\"Throwing exception...\", ConsoleColor.DarkGray);\n            throw new Win32Exception(\"This text should be hidden for the user.\");\n        }\n\n        private static void Write(string text = \"\", ConsoleColor foregroundColor = ConsoleColor.Gray, ConsoleColor backgroundColor = ConsoleColor.Black)\n        {\n            Console.ForegroundColor = foregroundColor;\n            Console.BackgroundColor = backgroundColor;\n            Console.Write(text);\n        }\n\n        private static void WriteLine(string text = \"\", ConsoleColor foregroundColor = ConsoleColor.Gray, ConsoleColor backgroundColor = ConsoleColor.Black)\n        {\n            Console.ForegroundColor = foregroundColor;\n            Console.BackgroundColor = backgroundColor;\n            Console.WriteLine(text);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/TryToExecuteParams.cs",
    "content": "﻿namespace SandboxTarget\n{\n    using System;\n\n    internal class TryToExecuteParams\n    {\n        public TryToExecuteParams(Action<string> action, string name, string parameter)\n        {\n            this.Action = action;\n            this.Name = name;\n            this.Parameter = parameter;\n        }\n\n        public Action<string> Action { get; }\n\n        public string Name { get; }\n\n        public string Parameter { get; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SandboxTarget/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n  </configSections>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5.2\" />\n  </startup>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"System.Data.SqlServerCe.4.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n      <provider invariantName=\"System.Data.SqlServerCe.4.0\" type=\"System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact\" />\n    </providers>\n  </entityFramework>\n  <system.data>\n    <DbProviderFactories>\n      <remove invariant=\"System.Data.SqlServerCe.4.0\" />\n      <add name=\"Microsoft SQL Server Compact Data Provider 4.0\" invariant=\"System.Data.SqlServerCe.4.0\" description=\".NET Framework Data Provider for Microsoft SQL Server Compact\" type=\"System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91\" />\n    </DbProviderFactories>\n  </system.data>\n</configuration>"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/Program.cs",
    "content": "﻿namespace SqlTestingPoC\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Data.SqlServerCe;\n    using System.IO;\n\n    using MissingFeatures;\n\n    public static class Program\n    {\n        public static void Main()\n        {\n            var databaseFileName = $\"{Guid.NewGuid()}.sdf\";\n            var connectionString = $\"DataSource=\\\"{databaseFileName}\\\"; Password=\\\"{Guid.NewGuid()}\\\";\";\n            using (var en = new SqlCeEngine(connectionString))\n            {\n                en.CreateDatabase();\n            }\n\n            using (var connection = new SqlCeConnection(connectionString))\n            {\n                connection.Open();\n\n                var command = connection.CreateCommand().MultiQuery();\n                command.CommandText = @\"\nCREATE TABLE [Cities]([Id] [int] NOT NULL, [Name] [ntext] NULL);\nINSERT [Cities] ([Id], [Name]) VALUES (1, N'Sofia');\nINSERT [Cities] ([Id], [Name]) VALUES (2, N'SofiaS');\nINSERT [Cities] ([Id], [Name]) VALUES (3, N'NSo;fia');\nINSERT [Cities] ([Id], [Name]) VALUES (4, N'NSofiaS');\nINSERT [Cities] ([Id], [Name]) VALUES (5, N'Kyustendil');\nINSERT [Cities] ([Id], [Name]) VALUES (6, N'S');\";\n                command.ExecuteNonQuery();\n\n                var userCommand = connection.CreateCommand().MultiQuery();\n\n                userCommand.CommandText = @\"SELECT * FROM [Cities]\nCROSS JOIN [Cities] c1\nCROSS JOIN [Cities] c2\nCROSS JOIN [Cities] c3\nCROSS JOIN [Cities] c4\nCROSS JOIN [Cities] c5\nCROSS JOIN [Cities] c6\nCROSS JOIN [Cities] c7\nCROSS JOIN [Cities] c8\nCROSS JOIN [Cities] c9\nCROSS JOIN [Cities] c10\nCROSS JOIN [Cities] c11\";\n                var userResult = new List<string>();\n\n                // TODO: Abort on timeout\n                var completed = Code.ExecuteWithTimeLimit(\n                    TimeSpan.FromMilliseconds(1000),\n                    () =>\n                        {\n                            var reader = userCommand.ExecuteReader();\n                            using (reader)\n                            {\n                                while (reader.Read())\n                                {\n                                    for (var i = 0; i < reader.FieldCount; i++)\n                                    {\n                                        // TODO: doubles? comma or dot?\n                                        userResult.Add(reader.GetValue(i).ToString());\n                                    }\n                                }\n                            }\n                        });\n\n                if (completed)\n                {\n                    foreach (var userItem in userResult)\n                    {\n                        Console.WriteLine(userItem);\n                    }\n                }\n                else\n                {\n                    Console.WriteLine(\"Timeout!\");\n                }\n            }\n\n            File.Delete(databaseFileName);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"SqlTestingPoC\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"SqlTestingPoC\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"2ae356da-fcd4-4601-a533-85042648d7f8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/SqlPrepareDatabaseAndRunUserQueryExecutionStrategy.cs",
    "content": "﻿namespace SqlTestingPoC\n{\n    using System;\n\n    using OJS.Workers.ExecutionStrategies;\n\n    public class SqlPrepareDatabaseAndRunUserQueryExecutionStrategy : IExecutionStrategy\n    {\n        public ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            // Test input = prepare database (first queries)\n            // User code = query to execute\n            // Test output = expected result from user query\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/SqlRunUserQueryAndCheckDatabaseExecutionStrategy.cs",
    "content": "﻿namespace SqlTestingPoC\n{\n    using System;\n\n    using OJS.Workers.ExecutionStrategies;\n\n    public class SqlRunUserQueryAndCheckDatabaseExecutionStrategy : IExecutionStrategy\n    {\n        public ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            // User code = user queries - prepare database\n            // Test input = query to execute\n            // Test output = expected result from the query\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/SqlTestingPoC.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{2AE356DA-FCD4-4601-A533-85042648D7F8}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SqlTestingPoC</RootNamespace>\n    <AssemblyName>SqlTestingPoC</AssemblyName>\n    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.SqlServerCompact.6.1.3\\lib\\net45\\EntityFramework.SqlServerCompact.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Lyare.SqlServerCe.MultiQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0881216c5cfb26e9, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Lyare.SqlServerCe.MultiQuery.1.0.0\\lib\\net40\\Lyare.SqlServerCe.MultiQuery.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"MissingFeatures, Version=1.1.0.0, Culture=neutral\">\n      <HintPath>..\\..\\packages\\MissingFeatures.NET.1.1\\lib\\MissingFeatures.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\lib\\net40\\System.Data.SqlServerCe.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SqlPrepareDatabaseAndRunUserQueryExecutionStrategy.cs\" />\n    <Compile Include=\"SqlRunUserQueryAndCheckDatabaseExecutionStrategy.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.ExecutionStrategies\\OJS.Workers.ExecutionStrategies.csproj\">\n      <Project>{69966098-E5B2-46CD-88E9-1F79B245ADE0}</Project>\n      <Name>OJS.Workers.ExecutionStrategies</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>\n    if not exist \"$(TargetDir)x86\" md \"$(TargetDir)x86\"\n    xcopy /s /y \"$(SolutionDir)packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\x86\\*.*\" \"$(TargetDir)x86\"\n    if not exist \"$(TargetDir)amd64\" md \"$(TargetDir)amd64\"\n    xcopy /s /y \"$(SolutionDir)packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\amd64\\*.*\" \"$(TargetDir)amd64\"</PostBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Tools/SqlTestingPoC/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net452\" />\n  <package id=\"EntityFramework.SqlServerCompact\" version=\"6.1.3\" targetFramework=\"net452\" />\n  <package id=\"Lyare.SqlServerCe.MultiQuery\" version=\"1.0.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.SqlServer.Compact\" version=\"4.0.8876.1\" targetFramework=\"net452\" />\n  <package id=\"MissingFeatures.NET\" version=\"1.1\" targetFramework=\"net452\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net452\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Code/ContestsHelper.cshtml",
    "content": "﻿@using OJS.Common.Extensions;\n\n@helper GetUrl(int contestId, string contestName)\n{\n    <text>/Contests/@contestId/@contestName.ToUrl()</text>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/AccountEmails.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AccountEmails {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AccountEmails() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.AccountEmails\", typeof(AccountEmails).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Hi &lt;strong&gt;{0}&lt;/strong&gt;, &lt;br/&gt;To reset your password please click &lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt; or copy and paste the url in your browser..\n        /// </summary>\n        public static string Forgotten_password_body {\n            get {\n                return ResourceManager.GetString(\"Forgotten_password_body\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Forgotten password for {0}.\n        /// </summary>\n        public static string Forgotten_password_title {\n            get {\n                return ResourceManager.GetString(\"Forgotten_password_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/AccountEmails.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/AccountEmails.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Forgotten_password_body\" xml:space=\"preserve\">\n    <value>Здравей &lt;strong&gt;{0}&lt;/strong&gt;, &lt;br/&gt;За да промените паролата си, моля посетете &lt;a href=\"{1}\"&gt;{1}&lt;/a&gt; или копирайте адреса и го отворете в нов прозорец.</value>\n  </data>\n  <data name=\"Forgotten_password_title\" xml:space=\"preserve\">\n    <value>Забравена парола за {0}</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/AccountEmails.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Forgotten_password_body\" xml:space=\"preserve\">\n    <value>Hi &lt;strong&gt;{0}&lt;/strong&gt;, &lt;br/&gt;To reset your password please click &lt;a href=\"{1}\"&gt;{1}&lt;/a&gt; or copy and paste the url in your browser.</value>\n  </data>\n  <data name=\"Forgotten_password_title\" xml:space=\"preserve\">\n    <value>Forgotten password for {0}</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/ViewModels/AccountViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AccountViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AccountViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.ViewModels.AccountViewModels\", typeof(AccountViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Current password.\n        /// </summary>\n        public static string Current_password {\n            get {\n                return ResourceManager.GetString(\"Current_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Email address.\n        /// </summary>\n        public static string Email {\n            get {\n                return ResourceManager.GetString(\"Email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This email has already been registered.\n        /// </summary>\n        public static string Email_already_registered {\n            get {\n                return ResourceManager.GetString(\"Email_already_registered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Confirm your email.\n        /// </summary>\n        public static string Email_confirm {\n            get {\n                return ResourceManager.GetString(\"Email_confirm\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please double check the email address that you entered.\n        /// </summary>\n        public static string Email_confirmation_invalid {\n            get {\n                return ResourceManager.GetString(\"Email_confirmation_invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please confirm your email.\n        /// </summary>\n        public static string Email_confirmation_required {\n            get {\n                return ResourceManager.GetString(\"Email_confirmation_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid email address.\n        /// </summary>\n        public static string Email_invalid {\n            get {\n                return ResourceManager.GetString(\"Email_invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your email address.\n        /// </summary>\n        public static string Email_required {\n            get {\n                return ResourceManager.GetString(\"Email_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please confirm your new password.\n        /// </summary>\n        public static string Enter_new_password_confirmation {\n            get {\n                return ResourceManager.GetString(\"Enter_new_password_confirmation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your new password.\n        /// </summary>\n        public static string Enter_new_password_validation {\n            get {\n                return ResourceManager.GetString(\"Enter_new_password_validation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your password.\n        /// </summary>\n        public static string Enter_password {\n            get {\n                return ResourceManager.GetString(\"Enter_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your current password.\n        /// </summary>\n        public static string Enter_password_validation {\n            get {\n                return ResourceManager.GetString(\"Enter_password_validation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect password.\n        /// </summary>\n        public static string Incorrect_password {\n            get {\n                return ResourceManager.GetString(\"Incorrect_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid username or password.\n        /// </summary>\n        public static string Invalid_username_or_password {\n            get {\n                return ResourceManager.GetString(\"Invalid_username_or_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to New password.\n        /// </summary>\n        public static string New_password {\n            get {\n                return ResourceManager.GetString(\"New_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The new password and confirmation password do not match.\n        /// </summary>\n        public static string New_password_confirm_password_not_matching_validation {\n            get {\n                return ResourceManager.GetString(\"New_password_confirm_password_not_matching_validation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Confirm new password.\n        /// </summary>\n        public static string New_password_confirmation {\n            get {\n                return ResourceManager.GetString(\"New_password_confirmation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Password.\n        /// </summary>\n        public static string Password {\n            get {\n                return ResourceManager.GetString(\"Password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Confirm your password.\n        /// </summary>\n        public static string Password_confirm {\n            get {\n                return ResourceManager.GetString(\"Password_confirm\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect password.\n        /// </summary>\n        public static string Password_incorrect {\n            get {\n                return ResourceManager.GetString(\"Password_incorrect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The password must be at least {2} characters long..\n        /// </summary>\n        public static string Password_length_validation_message {\n            get {\n                return ResourceManager.GetString(\"Password_length_validation_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your password.\n        /// </summary>\n        public static string Password_required {\n            get {\n                return ResourceManager.GetString(\"Password_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The passwords don&apos;t match.\n        /// </summary>\n        public static string Passwords_dont_match {\n            get {\n                return ResourceManager.GetString(\"Passwords_dont_match\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remember me?.\n        /// </summary>\n        public static string Remember_me {\n            get {\n                return ResourceManager.GetString(\"Remember_me\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This username is not available.\n        /// </summary>\n        public static string User_already_registered {\n            get {\n                return ResourceManager.GetString(\"User_already_registered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username.\n        /// </summary>\n        public static string Username {\n            get {\n                return ResourceManager.GetString(\"Username\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Confirm the new username.\n        /// </summary>\n        public static string Username_confirmation {\n            get {\n                return ResourceManager.GetString(\"Username_confirmation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The usernames do not match.\n        /// </summary>\n        public static string Username_confirmation_incorrect {\n            get {\n                return ResourceManager.GetString(\"Username_confirmation_incorrect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The username can contain only latin characters, numbers and the symbols &apos;.&apos; or &apos;_&apos;. The username must start with a letter and end with a letter or number..\n        /// </summary>\n        public static string Username_regex_validation {\n            get {\n                return ResourceManager.GetString(\"Username_regex_validation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username is required.\n        /// </summary>\n        public static string Username_required {\n            get {\n                return ResourceManager.GetString(\"Username_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The username must be between {2} and {1} characters long.\n        /// </summary>\n        public static string Username_validation {\n            get {\n                return ResourceManager.GetString(\"Username_validation\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/ViewModels/AccountViewModels.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/ViewModels/AccountViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Current_password\" xml:space=\"preserve\">\n    <value>Парола</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Имейл адрес</value>\n  </data>\n  <data name=\"Email_invalid\" xml:space=\"preserve\">\n    <value>Невалиден имейл адрес</value>\n  </data>\n  <data name=\"Email_required\" xml:space=\"preserve\">\n    <value>Моля въвете имейл адрес</value>\n  </data>\n  <data name=\"Enter_new_password_confirmation\" xml:space=\"preserve\">\n    <value>Моля потвърдете новата си парола</value>\n  </data>\n  <data name=\"Enter_new_password_validation\" xml:space=\"preserve\">\n    <value>Моля въведете новата си парола</value>\n  </data>\n  <data name=\"Enter_password\" xml:space=\"preserve\">\n    <value>Моля въведете парола</value>\n  </data>\n  <data name=\"Enter_password_validation\" xml:space=\"preserve\">\n    <value>Моля въведете текущата си парола</value>\n  </data>\n  <data name=\"Invalid_username_or_password\" xml:space=\"preserve\">\n    <value>Невалидно име или парола</value>\n  </data>\n  <data name=\"New_password\" xml:space=\"preserve\">\n    <value>Нова парола</value>\n  </data>\n  <data name=\"New_password_confirmation\" xml:space=\"preserve\">\n    <value>Потвърдете новата парола</value>\n  </data>\n  <data name=\"New_password_confirm_password_not_matching_validation\" xml:space=\"preserve\">\n    <value>Новата парола не съвпада с потвърдената нова парола</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Парола</value>\n  </data>\n  <data name=\"Passwords_dont_match\" xml:space=\"preserve\">\n    <value>Паролите не съвпадат</value>\n  </data>\n  <data name=\"Password_confirm\" xml:space=\"preserve\">\n    <value>Потвърдете паролата</value>\n  </data>\n  <data name=\"Password_length_validation_message\" xml:space=\"preserve\">\n    <value>Паролата трябва да бъде поне {2} символа</value>\n  </data>\n  <data name=\"Remember_me\" xml:space=\"preserve\">\n    <value>Запомни ме</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Потребителско име</value>\n  </data>\n  <data name=\"Username_required\" xml:space=\"preserve\">\n    <value>Потребителското име е задължително</value>\n  </data>\n  <data name=\"Username_validation\" xml:space=\"preserve\">\n    <value>Потребителското име трябва да бъде между {2} и {1} символа</value>\n  </data>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>Този имейл е вече регистриран</value>\n  </data>\n  <data name=\"User_already_registered\" xml:space=\"preserve\">\n    <value>Това потребителско име е заето</value>\n  </data>\n  <data name=\"Password_incorrect\" xml:space=\"preserve\">\n    <value>Грешна парола</value>\n  </data>\n  <data name=\"Email_confirm\" xml:space=\"preserve\">\n    <value>Потвърди имейла</value>\n  </data>\n  <data name=\"Email_confirmation_invalid\" xml:space=\"preserve\">\n    <value>Моля проверете дали сте въвели правилно имейла си и в двете полета</value>\n  </data>\n  <data name=\"Email_confirmation_required\" xml:space=\"preserve\">\n    <value>Моля потвърдете имейла си</value>\n  </data>\n  <data name=\"Password_required\" xml:space=\"preserve\">\n    <value>Моля въвете паролата си</value>\n  </data>\n  <data name=\"Incorrect_password\" xml:space=\"preserve\">\n    <value>Грешна парола</value>\n  </data>\n  <data name=\"Username_regex_validation\" xml:space=\"preserve\">\n    <value>Потребителското име може да съдържа само латински букви, цифри и знаците точка и долна черта. Потребителското име трябва да започва с буква и да завършва с буква или цифра.</value>\n  </data>\n  <data name=\"Username_confirmation\" xml:space=\"preserve\">\n    <value>Потвърдете новото си потребителско име</value>\n  </data>\n  <data name=\"Username_confirmation_incorrect\" xml:space=\"preserve\">\n    <value>Потребителските имена не съвпадат</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/ViewModels/AccountViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Current_password\" xml:space=\"preserve\">\n    <value>Current password</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email address</value>\n  </data>\n  <data name=\"Email_invalid\" xml:space=\"preserve\">\n    <value>Invalid email address</value>\n  </data>\n  <data name=\"Email_required\" xml:space=\"preserve\">\n    <value>Please enter your email address</value>\n  </data>\n  <data name=\"Enter_new_password_confirmation\" xml:space=\"preserve\">\n    <value>Please confirm your new password</value>\n  </data>\n  <data name=\"Enter_new_password_validation\" xml:space=\"preserve\">\n    <value>Please enter your new password</value>\n  </data>\n  <data name=\"Enter_password\" xml:space=\"preserve\">\n    <value>Please enter your password</value>\n  </data>\n  <data name=\"Enter_password_validation\" xml:space=\"preserve\">\n    <value>Please enter your current password</value>\n  </data>\n  <data name=\"Invalid_username_or_password\" xml:space=\"preserve\">\n    <value>Invalid username or password</value>\n  </data>\n  <data name=\"New_password\" xml:space=\"preserve\">\n    <value>New password</value>\n  </data>\n  <data name=\"New_password_confirmation\" xml:space=\"preserve\">\n    <value>Confirm new password</value>\n  </data>\n  <data name=\"New_password_confirm_password_not_matching_validation\" xml:space=\"preserve\">\n    <value>The new password and confirmation password do not match</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Password</value>\n  </data>\n  <data name=\"Passwords_dont_match\" xml:space=\"preserve\">\n    <value>The passwords don't match</value>\n  </data>\n  <data name=\"Password_confirm\" xml:space=\"preserve\">\n    <value>Confirm your password</value>\n  </data>\n  <data name=\"Password_length_validation_message\" xml:space=\"preserve\">\n    <value>The password must be at least {2} characters long.</value>\n  </data>\n  <data name=\"Remember_me\" xml:space=\"preserve\">\n    <value>Remember me?</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Username</value>\n  </data>\n  <data name=\"Username_required\" xml:space=\"preserve\">\n    <value>Username is required</value>\n  </data>\n  <data name=\"Username_validation\" xml:space=\"preserve\">\n    <value>The username must be between {2} and {1} characters long</value>\n  </data>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>This email has already been registered</value>\n  </data>\n  <data name=\"User_already_registered\" xml:space=\"preserve\">\n    <value>This username is not available</value>\n  </data>\n  <data name=\"Password_incorrect\" xml:space=\"preserve\">\n    <value>Incorrect password</value>\n  </data>\n  <data name=\"Email_confirm\" xml:space=\"preserve\">\n    <value>Confirm your email</value>\n  </data>\n  <data name=\"Email_confirmation_invalid\" xml:space=\"preserve\">\n    <value>Please double check the email address that you entered</value>\n  </data>\n  <data name=\"Email_confirmation_required\" xml:space=\"preserve\">\n    <value>Please confirm your email</value>\n  </data>\n  <data name=\"Password_required\" xml:space=\"preserve\">\n    <value>Please enter your password</value>\n  </data>\n  <data name=\"Incorrect_password\" xml:space=\"preserve\">\n    <value>Incorrect password</value>\n  </data>\n  <data name=\"Username_regex_validation\" xml:space=\"preserve\">\n    <value>The username can contain only latin characters, numbers and the symbols '.' or '_'. The username must start with a letter and end with a letter or number.</value>\n  </data>\n  <data name=\"Username_confirmation\" xml:space=\"preserve\">\n    <value>Confirm the new username</value>\n  </data>\n  <data name=\"Username_confirmation_incorrect\" xml:space=\"preserve\">\n    <value>The usernames do not match</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeEmailView.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ChangeEmailView {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ChangeEmailView() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ChangeEmailView\", typeof(ChangeEmailView).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cancel.\n        /// </summary>\n        public static string Cancel {\n            get {\n                return ResourceManager.GetString(\"Cancel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save.\n        /// </summary>\n        public static string Save {\n            get {\n                return ResourceManager.GetString(\"Save\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change your email address.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeEmailView.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeEmailView.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Отказ</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Запази</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Промяна на имейл адрес</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeEmailView.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Change your email address</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangePasswordView.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ChangePasswordView {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ChangePasswordView() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ChangePasswordView\", typeof(ChangePasswordView).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Password updated successfully..\n        /// </summary>\n        public static string Password_updated {\n            get {\n                return ResourceManager.GetString(\"Password_updated\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save.\n        /// </summary>\n        public static string Submit {\n            get {\n                return ResourceManager.GetString(\"Submit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Update your password.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangePasswordView.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangePasswordView.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Password_updated\" xml:space=\"preserve\">\n    <value>Паролата беше успешно обновена.</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Запази</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Промяна на паролата</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangePasswordView.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Password_updated\" xml:space=\"preserve\">\n    <value>Password updated successfully.</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Update your password</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeUsernameView.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeUsernameView.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Промени потребителско име</value>\n  </data>\n  <data name=\"Username_changed\" xml:space=\"preserve\">\n    <value>Потребителското име беше променено. Моля, влезте с новото потребителско име.</value>\n  </data>\n  <data name=\"Username_not_available\" xml:space=\"preserve\">\n    <value>Това потребителско име е заето</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeUsernameView.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ChangeUsernameView {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ChangeUsernameView() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ChangeUsernameView\", typeof(ChangeUsernameView).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Update username.\n        /// </summary>\n        public static string Update {\n            get {\n                return ResourceManager.GetString(\"Update\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username was successfully changed. Please log in using your new username..\n        /// </summary>\n        public static string Username_changed {\n            get {\n                return ResourceManager.GetString(\"Username_changed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This username is not available.\n        /// </summary>\n        public static string Username_not_available {\n            get {\n                return ResourceManager.GetString(\"Username_not_available\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ChangeUsernameView.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Update username</value>\n  </data>\n  <data name=\"Username_changed\" xml:space=\"preserve\">\n    <value>Username was successfully changed. Please log in using your new username.</value>\n  </data>\n  <data name=\"Username_not_available\" xml:space=\"preserve\">\n    <value>This username is not available</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Disassociate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Disassociate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Disassociate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Disassociate\", typeof(Disassociate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to An error occured.\n        /// </summary>\n        public static string Error {\n            get {\n                return ResourceManager.GetString(\"Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The external login was removed.\n        /// </summary>\n        public static string External_login_removed {\n            get {\n                return ResourceManager.GetString(\"External_login_removed\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Disassociate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Disassociate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Възникна грешка</value>\n  </data>\n  <data name=\"External_login_removed\" xml:space=\"preserve\">\n    <value>Външния логин беше премахнат</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Disassociate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>An error occured</value>\n  </data>\n  <data name=\"External_login_removed\" xml:space=\"preserve\">\n    <value>The external login was removed</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginCallback.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginCallback.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>Този имейл адрес е вече регистриран. Моля използвайте &lt;a href=\"/Account/ForgottenPassword\"&gt;\"Забравена парола\"&lt;/a&gt; за да получите детайлите за своя акаунт.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginCallback.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ExternalLoginCallback {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ExternalLoginCallback() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ExternalLoginCallback\", typeof(ExternalLoginCallback).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You have already registered with this email address. Please log in or use the &lt;a href=&quot;/Account/ForgottenPassword&quot;&gt;forgotten password&lt;/a&gt; feature..\n        /// </summary>\n        public static string Email_already_registered {\n            get {\n                return ResourceManager.GetString(\"Email_already_registered\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginCallback.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>You have already registered with this email address. Please log in or use the &lt;a href=\"/Account/ForgottenPassword\"&gt;forgotten password&lt;/a&gt; feature.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginConfirmation.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ExternalLoginConfirmation {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ExternalLoginConfirmation() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ExternalLoginConfirmation\", typeof(ExternalLoginConfirmation).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Your email has already been registered. Please use the forgot your details feature to obtain your login details..\n        /// </summary>\n        public static string Email_already_registered {\n            get {\n                return ResourceManager.GetString(\"Email_already_registered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter a username and click on Register to log into the system.\n        /// </summary>\n        public static string Enter_username_and_register {\n            get {\n                return ResourceManager.GetString(\"Enter_username_and_register\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to An error occured.\n        /// </summary>\n        public static string Error {\n            get {\n                return ResourceManager.GetString(\"Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Link you account with your {0} account..\n        /// </summary>\n        public static string Link_account {\n            get {\n                return ResourceManager.GetString(\"Link_account\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Register.\n        /// </summary>\n        public static string Register {\n            get {\n                return ResourceManager.GetString(\"Register\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You will log in using.\n        /// </summary>\n        public static string Successfully_logged_in {\n            get {\n                return ResourceManager.GetString(\"Successfully_logged_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This username is not available.\n        /// </summary>\n        public static string User_already_registered {\n            get {\n                return ResourceManager.GetString(\"User_already_registered\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginConfirmation.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginConfirmation.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>Вашият имейл е вече регистриран. Моля използвайте услугата \"Забравена парола\"</value>\n  </data>\n  <data name=\"Enter_username_and_register\" xml:space=\"preserve\">\n    <value>Моля въведете потребителско име за сайта и натиснете бутона \"Регистрация\" за да влезнете в системата.</value>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Възникна грешка</value>\n  </data>\n  <data name=\"Link_account\" xml:space=\"preserve\">\n    <value>Свържете акаунта си, използвайки своя {0} акаунт.</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Регистрация</value>\n  </data>\n  <data name=\"Successfully_logged_in\" xml:space=\"preserve\">\n    <value>Ще влезете чрез</value>\n  </data>\n  <data name=\"User_already_registered\" xml:space=\"preserve\">\n    <value>Това потребителско име е заето</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginConfirmation.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_already_registered\" xml:space=\"preserve\">\n    <value>Your email has already been registered. Please use the forgot your details feature to obtain your login details.</value>\n  </data>\n  <data name=\"Enter_username_and_register\" xml:space=\"preserve\">\n    <value>Please enter a username and click on Register to log into the system</value>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>An error occured</value>\n  </data>\n  <data name=\"Link_account\" xml:space=\"preserve\">\n    <value>Link you account with your {0} account.</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n  <data name=\"Successfully_logged_in\" xml:space=\"preserve\">\n    <value>You will log in using</value>\n  </data>\n  <data name=\"User_already_registered\" xml:space=\"preserve\">\n    <value>This username is not available</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginFailure.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ExternalLoginFailure {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ExternalLoginFailure() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ExternalLoginFailure\", typeof(ExternalLoginFailure).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error.\n        /// </summary>\n        public static string Error {\n            get {\n                return ResourceManager.GetString(\"Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Login was unsuccessful..\n        /// </summary>\n        public static string Unsuccessful_login {\n            get {\n                return ResourceManager.GetString(\"Unsuccessful_login\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginFailure.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginFailure.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Грешка</value>\n  </data>\n  <data name=\"Unsuccessful_login\" xml:space=\"preserve\">\n    <value>Неуспешен логин.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ExternalLoginFailure.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Error</value>\n  </data>\n  <data name=\"Unsuccessful_login\" xml:space=\"preserve\">\n    <value>Login was unsuccessful.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ForgottenPassword.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ForgottenPassword {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ForgottenPassword() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.ForgottenPassword\", typeof(ForgottenPassword).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This email or username is not registered.\n        /// </summary>\n        public static string Email_or_username_not_registered {\n            get {\n                return ResourceManager.GetString(\"Email_or_username_not_registered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your email or username.\n        /// </summary>\n        public static string Email_or_username_required {\n            get {\n                return ResourceManager.GetString(\"Email_or_username_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This email is registered more than once.\n        /// </summary>\n        public static string Email_registered_more_than_once {\n            get {\n                return ResourceManager.GetString(\"Email_registered_more_than_once\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Instructions on how to obtain your password were sent to your email address..\n        /// </summary>\n        public static string Email_sent {\n            get {\n                return ResourceManager.GetString(\"Email_sent\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your email to reset your password..\n        /// </summary>\n        public static string EnterYourEmail {\n            get {\n                return ResourceManager.GetString(\"EnterYourEmail\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username or email.\n        /// </summary>\n        public static string Label {\n            get {\n                return ResourceManager.GetString(\"Label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submit.\n        /// </summary>\n        public static string Submit {\n            get {\n                return ResourceManager.GetString(\"Submit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Forgotten password.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ForgottenPassword.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ForgottenPassword.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_or_username_not_registered\" xml:space=\"preserve\">\n    <value>Въведеното потребителско име или имейл не е регистрирано</value>\n  </data>\n  <data name=\"Email_or_username_required\" xml:space=\"preserve\">\n    <value>Моля въведете имейл или потребителско име</value>\n  </data>\n  <data name=\"Email_registered_more_than_once\" xml:space=\"preserve\">\n    <value>Този имейл е регистриран повече от веднъж</value>\n  </data>\n  <data name=\"Email_sent\" xml:space=\"preserve\">\n    <value>Изпратихме инструкции как да си промените паролата на имейла, който сте регистрирали.</value>\n  </data>\n  <data name=\"EnterYourEmail\" xml:space=\"preserve\">\n    <value>Въведете имейл адреса си.</value>\n  </data>\n  <data name=\"Label\" xml:space=\"preserve\">\n    <value>Потребителско име или имейл</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Изпрати</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Забравена парола</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/ForgottenPassword.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email_or_username_not_registered\" xml:space=\"preserve\">\n    <value>This email or username is not registered</value>\n  </data>\n  <data name=\"Email_or_username_required\" xml:space=\"preserve\">\n    <value>Please enter your email or username</value>\n  </data>\n  <data name=\"Email_registered_more_than_once\" xml:space=\"preserve\">\n    <value>This email is registered more than once</value>\n  </data>\n  <data name=\"Email_sent\" xml:space=\"preserve\">\n    <value>Instructions on how to obtain your password were sent to your email address.</value>\n  </data>\n  <data name=\"EnterYourEmail\" xml:space=\"preserve\">\n    <value>Please enter your email to reset your password.</value>\n  </data>\n  <data name=\"Label\" xml:space=\"preserve\">\n    <value>Username or email</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Submit</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Forgotten password</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/General.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class General {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal General() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.General\", typeof(General).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The captcha is invalid.\n        /// </summary>\n        public static string Captcha_invalid {\n            get {\n                return ResourceManager.GetString(\"Captcha_invalid\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/General.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/General.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Captcha_invalid\" xml:space=\"preserve\">\n    <value>Невалиден код за валидация</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/General.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Captcha_invalid\" xml:space=\"preserve\">\n    <value>The captcha is invalid</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Login.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Login {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Login() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Login\", typeof(Login).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Forgot your password?.\n        /// </summary>\n        public static string Forgotten_password {\n            get {\n                return ResourceManager.GetString(\"Forgotten_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to if you are not already registered..\n        /// </summary>\n        public static string If_not_already_registered {\n            get {\n                return ResourceManager.GetString(\"If_not_already_registered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Log in.\n        /// </summary>\n        public static string Log_in {\n            get {\n                return ResourceManager.GetString(\"Log_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Log in using your username and password..\n        /// </summary>\n        public static string Login_using_username_and_password {\n            get {\n                return ResourceManager.GetString(\"Login_using_username_and_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Register.\n        /// </summary>\n        public static string Register {\n            get {\n                return ResourceManager.GetString(\"Register\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Login.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Login.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"If_not_already_registered\" xml:space=\"preserve\">\n    <value>ако още не си се регистрирал.</value>\n  </data>\n  <data name=\"Login_using_username_and_password\" xml:space=\"preserve\">\n    <value>Влезте с потребителско име и парола</value>\n  </data>\n  <data name=\"Log_in\" xml:space=\"preserve\">\n    <value>Вход</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Регистрирай се</value>\n  </data>\n  <data name=\"Forgotten_password\" xml:space=\"preserve\">\n    <value>Забравена парола</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Login.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"If_not_already_registered\" xml:space=\"preserve\">\n    <value>if you are not already registered.</value>\n  </data>\n  <data name=\"Login_using_username_and_password\" xml:space=\"preserve\">\n    <value>Log in using your username and password.</value>\n  </data>\n  <data name=\"Log_in\" xml:space=\"preserve\">\n    <value>Log in</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n  <data name=\"Forgotten_password\" xml:space=\"preserve\">\n    <value>Forgot your password?</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Manage.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Manage {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Manage() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Manage\", typeof(Manage).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change your password.\n        /// </summary>\n        public static string Change_password {\n            get {\n                return ResourceManager.GetString(\"Change_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The password was updated.\n        /// </summary>\n        public static string Password_updated {\n            get {\n                return ResourceManager.GetString(\"Password_updated\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Manage.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Manage.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Промени паролата</value>\n  </data>\n  <data name=\"Password_updated\" xml:space=\"preserve\">\n    <value>Паролата беше обновена</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Manage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Change your password</value>\n  </data>\n  <data name=\"Password_updated\" xml:space=\"preserve\">\n    <value>The password was updated</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ChangePassword.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views.Partial {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ChangePassword {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ChangePassword() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Partial.ChangePassword\", typeof(ChangePassword).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change password.\n        /// </summary>\n        public static string Change_password {\n            get {\n                return ResourceManager.GetString(\"Change_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You are currently logged in as.\n        /// </summary>\n        public static string Currently_logged_in_as {\n            get {\n                return ResourceManager.GetString(\"Currently_logged_in_as\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ChangePassword.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ChangePassword.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Промяна на парола</value>\n  </data>\n  <data name=\"Currently_logged_in_as\" xml:space=\"preserve\">\n    <value>В момента сте логнати като</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ChangePassword.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Change password</value>\n  </data>\n  <data name=\"Currently_logged_in_as\" xml:space=\"preserve\">\n    <value>You are currently logged in as</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ExternalLoginsList.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views.Partial {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ExternalLoginsList {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ExternalLoginsList() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Partial.ExternalLoginsList\", typeof(ExternalLoginsList).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Use another method to log in.\n        /// </summary>\n        public static string Alternate_login_method {\n            get {\n                return ResourceManager.GetString(\"Alternate_login_method\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Log in with your {0} account.\n        /// </summary>\n        public static string External_login_message {\n            get {\n                return ResourceManager.GetString(\"External_login_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to External login services are currently unavailable.\n        /// </summary>\n        public static string External_login_unavailable {\n            get {\n                return ResourceManager.GetString(\"External_login_unavailable\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ExternalLoginsList.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ExternalLoginsList.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Alternate_login_method\" xml:space=\"preserve\">\n    <value>Използвай друг начин за вход</value>\n  </data>\n  <data name=\"External_login_message\" xml:space=\"preserve\">\n    <value>Вход с вашия {0} акаунт</value>\n  </data>\n  <data name=\"External_login_unavailable\" xml:space=\"preserve\">\n    <value>В момента не може да се влезне с външни услуги</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/ExternalLoginsList.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Alternate_login_method\" xml:space=\"preserve\">\n    <value>Use another method to log in</value>\n  </data>\n  <data name=\"External_login_message\" xml:space=\"preserve\">\n    <value>Log in with your {0} account</value>\n  </data>\n  <data name=\"External_login_unavailable\" xml:space=\"preserve\">\n    <value>External login services are currently unavailable</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/RemoveAccount.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views.Partial {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class RemoveAccount {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal RemoveAccount() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Partial.RemoveAccount\", typeof(RemoveAccount).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Registered login methods.\n        /// </summary>\n        public static string Registered_login_methods {\n            get {\n                return ResourceManager.GetString(\"Registered_login_methods\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remove.\n        /// </summary>\n        public static string Remove_login_button {\n            get {\n                return ResourceManager.GetString(\"Remove_login_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remove logging in with {0} from your account.\n        /// </summary>\n        public static string Remove_login_title {\n            get {\n                return ResourceManager.GetString(\"Remove_login_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/RemoveAccount.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/RemoveAccount.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Registered_login_methods\" xml:space=\"preserve\">\n    <value>Регистрирани методи за вход</value>\n  </data>\n  <data name=\"Remove_login_button\" xml:space=\"preserve\">\n    <value>Премахни</value>\n  </data>\n  <data name=\"Remove_login_title\" xml:space=\"preserve\">\n    <value>Премахни влизането с {0} акаунт</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/RemoveAccount.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Registered_login_methods\" xml:space=\"preserve\">\n    <value>Registered login methods</value>\n  </data>\n  <data name=\"Remove_login_button\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"Remove_login_title\" xml:space=\"preserve\">\n    <value>Remove logging in with {0} from your account</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/SetPassword.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views.Partial {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SetPassword {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SetPassword() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Partial.SetPassword\", typeof(SetPassword).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create an account.\n        /// </summary>\n        public static string Create_account {\n            get {\n                return ResourceManager.GetString(\"Create_account\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You do not have a password for the website. Please add a password for added security..\n        /// </summary>\n        public static string No_username_or_password {\n            get {\n                return ResourceManager.GetString(\"No_username_or_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save password.\n        /// </summary>\n        public static string Save_password {\n            get {\n                return ResourceManager.GetString(\"Save_password\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/SetPassword.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/SetPassword.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Create_account\" xml:space=\"preserve\">\n    <value>Създай парола</value>\n  </data>\n  <data name=\"No_username_or_password\" xml:space=\"preserve\">\n    <value>Нямате парола за вход в уебсайта. Моля добавете парола за да по-голяма сигурност.</value>\n  </data>\n  <data name=\"Save_password\" xml:space=\"preserve\">\n    <value>Запази паролата</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Partial/SetPassword.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Create_account\" xml:space=\"preserve\">\n    <value>Create an account</value>\n  </data>\n  <data name=\"No_username_or_password\" xml:space=\"preserve\">\n    <value>You do not have a password for the website. Please add a password for added security.</value>\n  </data>\n  <data name=\"Save_password\" xml:space=\"preserve\">\n    <value>Save password</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Register.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Account.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Register {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Register() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Account.Views.Register\", typeof(Register).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Register.\n        /// </summary>\n        public static string Register_button {\n            get {\n                return ResourceManager.GetString(\"Register_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Register.\n        /// </summary>\n        public static string Register_title {\n            get {\n                return ResourceManager.GetString(\"Register_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Register.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Register.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Register_button\" xml:space=\"preserve\">\n    <value>Регистрация</value>\n  </data>\n  <data name=\"Register_title\" xml:space=\"preserve\">\n    <value>Регистрация</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Account/Views/Register.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Register_button\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n  <data name=\"Register_title\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/ViewModels/AccessLogGridViewModel.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.AccessLogs.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AccessLogGridViewModel {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AccessLogGridViewModel() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.AccessLogs.ViewModels.AccessLogG\" +\n                            \"ridViewModel\", typeof(AccessLogGridViewModel).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to IP.\n        /// </summary>\n        public static string Ip {\n            get {\n                return ResourceManager.GetString(\"Ip\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to POST params.\n        /// </summary>\n        public static string Post_params {\n            get {\n                return ResourceManager.GetString(\"Post_params\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Request.\n        /// </summary>\n        public static string Request_type {\n            get {\n                return ResourceManager.GetString(\"Request_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to URL.\n        /// </summary>\n        public static string Url {\n            get {\n                return ResourceManager.GetString(\"Url\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to UserName.\n        /// </summary>\n        public static string UserName {\n            get {\n                return ResourceManager.GetString(\"UserName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/ViewModels/AccessLogGridViewModel.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/ViewModels/AccessLogGridViewModel.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Ip\" xml:space=\"preserve\">\n    <value>IP</value>\n  </data>\n  <data name=\"Post_params\" xml:space=\"preserve\">\n    <value>POST параметри</value>\n  </data>\n  <data name=\"Request_type\" xml:space=\"preserve\">\n    <value>Заявка</value>\n  </data>\n  <data name=\"Url\" xml:space=\"preserve\">\n    <value>URL</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/ViewModels/AccessLogGridViewModel.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Ip\" xml:space=\"preserve\">\n    <value>IP</value>\n  </data>\n  <data name=\"Post_params\" xml:space=\"preserve\">\n    <value>POST params</value>\n  </data>\n  <data name=\"Request_type\" xml:space=\"preserve\">\n    <value>Request</value>\n  </data>\n  <data name=\"Url\" xml:space=\"preserve\">\n    <value>URL</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>UserName</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/Views/AccessLogsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.AccessLogs.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AccessLogsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AccessLogsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.AccessLogs.Views.AccessLogsIndex\" +\n                            \"\", typeof(AccessLogsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Access logs.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/Views/AccessLogsIndex.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/Views/AccessLogsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Логове за достъп</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AccessLogs/Views/AccessLogsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Access logs</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AdministrationGeneral.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AdministrationGeneral {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AdministrationGeneral() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.AdministrationGeneral\", typeof(AdministrationGeneral).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back to navigation.\n        /// </summary>\n        public static string Back_to_navigation {\n            get {\n                return ResourceManager.GetString(\"Back_to_navigation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cancel.\n        /// </summary>\n        public static string Cancel {\n            get {\n                return ResourceManager.GetString(\"Cancel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change.\n        /// </summary>\n        public static string Change {\n            get {\n                return ResourceManager.GetString(\"Change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Created on.\n        /// </summary>\n        public static string Created_on {\n            get {\n                return ResourceManager.GetString(\"Created_on\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to delete this item?.\n        /// </summary>\n        public static string Delete_prompt {\n            get {\n                return ResourceManager.GetString(\"Delete_prompt\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Export To Excel.\n        /// </summary>\n        public static string Export_to_excel {\n            get {\n                return ResourceManager.GetString(\"Export_to_excel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Drag and drop here the title of the column you wish to group by.\n        /// </summary>\n        public static string Group_by_message {\n            get {\n                return ResourceManager.GetString(\"Group_by_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Modified on.\n        /// </summary>\n        public static string Modified_on {\n            get {\n                return ResourceManager.GetString(\"Modified_on\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AdministrationGeneral.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AdministrationGeneral.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back_to_navigation\" xml:space=\"preserve\">\n    <value>Обратно към навигацията</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Отказ</value>\n  </data>\n  <data name=\"Change\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Created_on\" xml:space=\"preserve\">\n    <value>Дата на създаване</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтриване</value>\n  </data>\n  <data name=\"Delete_prompt\" xml:space=\"preserve\">\n    <value>Наистина ли искате да изтриете елемента?</value>\n  </data>\n  <data name=\"Export_to_excel\" xml:space=\"preserve\">\n    <value>Експортиране в Ексел</value>\n  </data>\n  <data name=\"Group_by_message\" xml:space=\"preserve\">\n    <value>Хванете заглавието на колона и го преместете тук, за да групирате по тази колона.</value>\n  </data>\n  <data name=\"Modified_on\" xml:space=\"preserve\">\n    <value>Дата на промяна</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AdministrationGeneral.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back_to_navigation\" xml:space=\"preserve\">\n    <value>Back to navigation</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Change\" xml:space=\"preserve\">\n    <value>Change</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Created_on\" xml:space=\"preserve\">\n    <value>Created on</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Delete_prompt\" xml:space=\"preserve\">\n    <value>Do you want to delete this item?</value>\n  </data>\n  <data name=\"Export_to_excel\" xml:space=\"preserve\">\n    <value>Export To Excel</value>\n  </data>\n  <data name=\"Group_by_message\" xml:space=\"preserve\">\n    <value>Drag and drop here the title of the column you wish to group by</value>\n  </data>\n  <data name=\"Modified_on\" xml:space=\"preserve\">\n    <value>Modified on</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AntiCheat/Views/AntiCheatViews.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.AntiCheat.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AntiCheatViews {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AntiCheatViews() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.AntiCheat.Views.AntiCheatViews\", typeof(AntiCheatViews).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to By IP.\n        /// </summary>\n        public static string By_ip_page_title {\n            get {\n                return ResourceManager.GetString(\"By_ip_page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to By submission similarity.\n        /// </summary>\n        public static string By_submission_page_title {\n            get {\n                return ResourceManager.GetString(\"By_submission_page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose or enter contest....\n        /// </summary>\n        public static string Choose_or_enter_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_or_enter_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Differences.\n        /// </summary>\n        public static string Differences {\n            get {\n                return ResourceManager.GetString(\"Differences\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to First Participant.\n        /// </summary>\n        public static string First_participant {\n            get {\n                return ResourceManager.GetString(\"First_participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to IP Addresses.\n        /// </summary>\n        public static string Ip_addresses {\n            get {\n                return ResourceManager.GetString(\"Ip_addresses\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No similarities.\n        /// </summary>\n        public static string No_similarities {\n            get {\n                return ResourceManager.GetString(\"No_similarities\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participant Id.\n        /// </summary>\n        public static string Participant_id {\n            get {\n                return ResourceManager.GetString(\"Participant_id\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Percentage.\n        /// </summary>\n        public static string Percentage {\n            get {\n                return ResourceManager.GetString(\"Percentage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Points.\n        /// </summary>\n        public static string Points {\n            get {\n                return ResourceManager.GetString(\"Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Second Participant.\n        /// </summary>\n        public static string Second_participant {\n            get {\n                return ResourceManager.GetString(\"Second_participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username.\n        /// </summary>\n        public static string Username {\n            get {\n                return ResourceManager.GetString(\"Username\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AntiCheat/Views/AntiCheatViews.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AntiCheat/Views/AntiCheatViews.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"By_ip_page_title\" xml:space=\"preserve\">\n    <value>По IP</value>\n  </data>\n  <data name=\"By_submission_page_title\" xml:space=\"preserve\">\n    <value>По прилика на решенията</value>\n  </data>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Изберете или въведете състезание...</value>\n  </data>\n  <data name=\"Differences\" xml:space=\"preserve\">\n    <value>Разлики</value>\n  </data>\n  <data name=\"First_participant\" xml:space=\"preserve\">\n    <value>Първи участник</value>\n  </data>\n  <data name=\"Ip_addresses\" xml:space=\"preserve\">\n    <value>IP Адрес</value>\n  </data>\n  <data name=\"No_similarities\" xml:space=\"preserve\">\n    <value>Няма прилики</value>\n  </data>\n  <data name=\"Participant_id\" xml:space=\"preserve\">\n    <value>Участник Id</value>\n  </data>\n  <data name=\"Percentage\" xml:space=\"preserve\">\n    <value>Процент</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Точки</value>\n  </data>\n  <data name=\"Second_participant\" xml:space=\"preserve\">\n    <value>Втори участник</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Потребителско име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/AntiCheat/Views/AntiCheatViews.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"By_ip_page_title\" xml:space=\"preserve\">\n    <value>By IP</value>\n  </data>\n  <data name=\"By_submission_page_title\" xml:space=\"preserve\">\n    <value>By submission similarity</value>\n  </data>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Choose or enter contest...</value>\n  </data>\n  <data name=\"Differences\" xml:space=\"preserve\">\n    <value>Differences</value>\n  </data>\n  <data name=\"First_participant\" xml:space=\"preserve\">\n    <value>First Participant</value>\n  </data>\n  <data name=\"Ip_addresses\" xml:space=\"preserve\">\n    <value>IP Addresses</value>\n  </data>\n  <data name=\"No_similarities\" xml:space=\"preserve\">\n    <value>No similarities</value>\n  </data>\n  <data name=\"Participant_id\" xml:space=\"preserve\">\n    <value>Participant Id</value>\n  </data>\n  <data name=\"Percentage\" xml:space=\"preserve\">\n    <value>Percentage</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Points</value>\n  </data>\n  <data name=\"Second_participant\" xml:space=\"preserve\">\n    <value>Second Participant</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Username</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/ViewModels/CheckerAdministrationViewModel.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Checkers.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class CheckerAdministrationViewModel {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal CheckerAdministrationViewModel() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Checkers.ViewModels.CheckerAdmin\" +\n                            \"istrationViewModel\", typeof(CheckerAdministrationViewModel).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Class name.\n        /// </summary>\n        public static string Class_name {\n            get {\n                return ResourceManager.GetString(\"Class_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The class name is required!.\n        /// </summary>\n        public static string Class_name_required {\n            get {\n                return ResourceManager.GetString(\"Class_name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Description.\n        /// </summary>\n        public static string Description {\n            get {\n                return ResourceManager.GetString(\"Description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DLL file.\n        /// </summary>\n        public static string Dll_file {\n            get {\n                return ResourceManager.GetString(\"Dll_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The DLL file is required!.\n        /// </summary>\n        public static string Dll_file_required {\n            get {\n                return ResourceManager.GetString(\"Dll_file_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name must be between {2} and {1} symbols.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Param.\n        /// </summary>\n        public static string Param {\n            get {\n                return ResourceManager.GetString(\"Param\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/ViewModels/CheckerAdministrationViewModel.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/ViewModels/CheckerAdministrationViewModel.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Class_name\" xml:space=\"preserve\">\n    <value>Име на клас</value>\n  </data>\n  <data name=\"Class_name_required\" xml:space=\"preserve\">\n    <value>Името на класа е задължително!</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Описание</value>\n  </data>\n  <data name=\"Dll_file\" xml:space=\"preserve\">\n    <value>DLL файл</value>\n  </data>\n  <data name=\"Dll_file_required\" xml:space=\"preserve\">\n    <value>DLL файла е задължителен!</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Името трябва да е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Param\" xml:space=\"preserve\">\n    <value>Параметър</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/ViewModels/CheckerAdministrationViewModel.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Class_name\" xml:space=\"preserve\">\n    <value>Class name</value>\n  </data>\n  <data name=\"Class_name_required\" xml:space=\"preserve\">\n    <value>The class name is required!</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Dll_file\" xml:space=\"preserve\">\n    <value>DLL file</value>\n  </data>\n  <data name=\"Dll_file_required\" xml:space=\"preserve\">\n    <value>The DLL file is required!</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Name must be between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"Param\" xml:space=\"preserve\">\n    <value>Param</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/Views/CheckersIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Checkers.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class CheckersIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal CheckersIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Checkers.Views.CheckersIndex\", typeof(CheckersIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Checkers.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/Views/CheckersIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/Views/CheckersIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Чекери</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Checkers/Views/CheckersIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Checkers</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/ViewModels/ContestCategoryAdministrationViewModel.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.ContestCategories.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestCategoryAdministrationViewModel {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestCategoryAdministrationViewModel() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.ContestCategories.ViewModels.Con\" +\n                            \"testCategoryAdministrationViewModel\", typeof(ContestCategoryAdministrationViewModel).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is betweeb {2} and {1} symbols.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order.\n        /// </summary>\n        public static string Order_by {\n            get {\n                return ResourceManager.GetString(\"Order_by\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order is required!.\n        /// </summary>\n        public static string Order_by_required {\n            get {\n                return ResourceManager.GetString(\"Order_by_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visibility.\n        /// </summary>\n        public static string Visibility {\n            get {\n                return ResourceManager.GetString(\"Visibility\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/ViewModels/ContestCategoryAdministrationViewModel.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/ViewModels/ContestCategoryAdministrationViewModel.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Order_by\" xml:space=\"preserve\">\n    <value>Подредба</value>\n  </data>\n  <data name=\"Order_by_required\" xml:space=\"preserve\">\n    <value>Подредбата е задължителна!</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Видимост</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/ViewModels/ContestCategoryAdministrationViewModel.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Accepted length is betweeb {2} and {1} symbols</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Name is required!</value>\n  </data>\n  <data name=\"Order_by\" xml:space=\"preserve\">\n    <value>Order</value>\n  </data>\n  <data name=\"Order_by_required\" xml:space=\"preserve\">\n    <value>Order is required!</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/Views/ContestCategoriesViews.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.ContestCategories.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestCategoriesViews {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestCategoriesViews() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.ContestCategories.Views.ContestC\" +\n                            \"ategoriesViews\", typeof(ContestCategoriesViews).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to delete this category? All subcategories will be deleted!.\n        /// </summary>\n        public static string Delete_prompt {\n            get {\n                return ResourceManager.GetString(\"Delete_prompt\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest categories heirarchy.\n        /// </summary>\n        public static string Heirarchy_page_title {\n            get {\n                return ResourceManager.GetString(\"Heirarchy_page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest categories.\n        /// </summary>\n        public static string Index_page_title {\n            get {\n                return ResourceManager.GetString(\"Index_page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/Views/ContestCategoriesViews.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/Views/ContestCategoriesViews.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Delete_prompt\" xml:space=\"preserve\">\n    <value>Наистина ли искате да изтриете категорията? Всичките подкатегории също ще бъдат изтрити!</value>\n  </data>\n  <data name=\"Heirarchy_page_title\" xml:space=\"preserve\">\n    <value>Йерархия на категориите състезания</value>\n  </data>\n  <data name=\"Index_page_title\" xml:space=\"preserve\">\n    <value>Категории състезания</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/ContestCategories/Views/ContestCategoriesViews.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Delete_prompt\" xml:space=\"preserve\">\n    <value>Do you want to delete this category? All subcategories will be deleted!</value>\n  </data>\n  <data name=\"Heirarchy_page_title\" xml:space=\"preserve\">\n    <value>Contest categories heirarchy</value>\n  </data>\n  <data name=\"Index_page_title\" xml:space=\"preserve\">\n    <value>Contest categories</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ContestsControllers.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsControllers {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsControllers() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.ContestsControllers\", typeof(ContestsControllers).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to contest.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest added successfully.\n        /// </summary>\n        public static string Contest_added {\n            get {\n                return ResourceManager.GetString(\"Contest_added\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest edited successfully.\n        /// </summary>\n        public static string Contest_edited {\n            get {\n                return ResourceManager.GetString(\"Contest_edited\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest not found.\n        /// </summary>\n        public static string Contest_not_found {\n            get {\n                return ResourceManager.GetString(\"Contest_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest start date must be before the contest end date.\n        /// </summary>\n        public static string Contest_start_date_before_end {\n            get {\n                return ResourceManager.GetString(\"Contest_start_date_before_end\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No active contests.\n        /// </summary>\n        public static string No_active_contests {\n            get {\n                return ResourceManager.GetString(\"No_active_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No future contests.\n        /// </summary>\n        public static string No_future_contests {\n            get {\n                return ResourceManager.GetString(\"No_future_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No latest contests.\n        /// </summary>\n        public static string No_latest_contests {\n            get {\n                return ResourceManager.GetString(\"No_latest_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question could not be found by given Id.\n        /// </summary>\n        public static string No_question_by_id {\n            get {\n                return ResourceManager.GetString(\"No_question_by_id\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice start date must be before the practice end date.\n        /// </summary>\n        public static string Practice_start_date_before_end {\n            get {\n                return ResourceManager.GetString(\"Practice_start_date_before_end\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ranking for {0} {1}.xls.\n        /// </summary>\n        public static string Report_excel_format {\n            get {\n                return ResourceManager.GetString(\"Report_excel_format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {1} submissions for {0}.zip.\n        /// </summary>\n        public static string Report_zip_format {\n            get {\n                return ResourceManager.GetString(\"Report_zip_format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose at least one submission type!.\n        /// </summary>\n        public static string Select_one_submission_type {\n            get {\n                return ResourceManager.GetString(\"Select_one_submission_type\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ContestsControllers.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ContestsControllers.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>състезание</value>\n  </data>\n  <data name=\"Contest_added\" xml:space=\"preserve\">\n    <value>Състезанието беше добавено успешно</value>\n  </data>\n  <data name=\"Contest_edited\" xml:space=\"preserve\">\n    <value>Състезанието беше променено успешно</value>\n  </data>\n  <data name=\"Contest_not_found\" xml:space=\"preserve\">\n    <value>Състезанието не е намерено</value>\n  </data>\n  <data name=\"Contest_start_date_before_end\" xml:space=\"preserve\">\n    <value>Началната дата на състезанието не може да бъде след крайната дата на състезанието</value>\n  </data>\n  <data name=\"No_active_contests\" xml:space=\"preserve\">\n    <value>Няма активни състезания</value>\n  </data>\n  <data name=\"No_future_contests\" xml:space=\"preserve\">\n    <value>Няма бъдещи състезания</value>\n  </data>\n  <data name=\"No_latest_contests\" xml:space=\"preserve\">\n    <value>Нямa последни състезaния</value>\n  </data>\n  <data name=\"No_question_by_id\" xml:space=\"preserve\">\n    <value>Не може да се намери въпрос по зададеното Id</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>практика</value>\n  </data>\n  <data name=\"Practice_start_date_before_end\" xml:space=\"preserve\">\n    <value>Началната дата за упражнения не може да бъде след крайната дата за упражнения</value>\n  </data>\n  <data name=\"Report_excel_format\" xml:space=\"preserve\">\n    <value>Класиране за {0} {1}.xls</value>\n  </data>\n  <data name=\"Report_zip_format\" xml:space=\"preserve\">\n    <value>{1} решения за {0}.zip</value>\n  </data>\n  <data name=\"Select_one_submission_type\" xml:space=\"preserve\">\n    <value>Изберете поне един вид решение!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ContestsControllers.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>contest</value>\n  </data>\n  <data name=\"Contest_added\" xml:space=\"preserve\">\n    <value>Contest added successfully</value>\n  </data>\n  <data name=\"Contest_edited\" xml:space=\"preserve\">\n    <value>Contest edited successfully</value>\n  </data>\n  <data name=\"Contest_not_found\" xml:space=\"preserve\">\n    <value>Contest not found</value>\n  </data>\n  <data name=\"Contest_start_date_before_end\" xml:space=\"preserve\">\n    <value>Contest start date must be before the contest end date</value>\n  </data>\n  <data name=\"No_active_contests\" xml:space=\"preserve\">\n    <value>No active contests</value>\n  </data>\n  <data name=\"No_future_contests\" xml:space=\"preserve\">\n    <value>No future contests</value>\n  </data>\n  <data name=\"No_latest_contests\" xml:space=\"preserve\">\n    <value>No latest contests</value>\n  </data>\n  <data name=\"No_question_by_id\" xml:space=\"preserve\">\n    <value>Question could not be found by given Id</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>practice</value>\n  </data>\n  <data name=\"Practice_start_date_before_end\" xml:space=\"preserve\">\n    <value>Practice start date must be before the practice end date</value>\n  </data>\n  <data name=\"Report_excel_format\" xml:space=\"preserve\">\n    <value>Ranking for {0} {1}.xls</value>\n  </data>\n  <data name=\"Report_zip_format\" xml:space=\"preserve\">\n    <value>{1} submissions for {0}.zip</value>\n  </data>\n  <data name=\"Select_one_submission_type\" xml:space=\"preserve\">\n    <value>Choose at least one submission type!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.ViewModels.ContestAdmin\" +\n                            \"istration\", typeof(ContestAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category.\n        /// </summary>\n        public static string Category {\n            get {\n                return ResourceManager.GetString(\"Category\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The category is required!.\n        /// </summary>\n        public static string Category_required {\n            get {\n                return ResourceManager.GetString(\"Category_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest password.\n        /// </summary>\n        public static string Contest_password {\n            get {\n                return ResourceManager.GetString(\"Contest_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Description.\n        /// </summary>\n        public static string Description {\n            get {\n                return ResourceManager.GetString(\"Description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to End.\n        /// </summary>\n        public static string End_time {\n            get {\n                return ResourceManager.GetString(\"End_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length for the name is between {2} and {1} symbols.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order.\n        /// </summary>\n        public static string Order {\n            get {\n                return ResourceManager.GetString(\"Order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The order is required!.\n        /// </summary>\n        public static string Order_required {\n            get {\n                return ResourceManager.GetString(\"Order_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice end.\n        /// </summary>\n        public static string Practice_end_time {\n            get {\n                return ResourceManager.GetString(\"Practice_end_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice password.\n        /// </summary>\n        public static string Practice_password {\n            get {\n                return ResourceManager.GetString(\"Practice_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice start.\n        /// </summary>\n        public static string Practice_start_time {\n            get {\n                return ResourceManager.GetString(\"Practice_start_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Start.\n        /// </summary>\n        public static string Start_time {\n            get {\n                return ResourceManager.GetString(\"Start_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submision types.\n        /// </summary>\n        public static string Submision_types {\n            get {\n                return ResourceManager.GetString(\"Submision_types\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions limit.\n        /// </summary>\n        public static string Submissions_limit {\n            get {\n                return ResourceManager.GetString(\"Submissions_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is visible?.\n        /// </summary>\n        public static string Visibility {\n            get {\n                return ResourceManager.GetString(\"Visibility\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestAdministration.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category\" xml:space=\"preserve\">\n    <value>Категория</value>\n  </data>\n  <data name=\"Category_required\" xml:space=\"preserve\">\n    <value>Категорията е задължителна!</value>\n  </data>\n  <data name=\"Contest_password\" xml:space=\"preserve\">\n    <value>Парола за състезание</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Описание</value>\n  </data>\n  <data name=\"End_time\" xml:space=\"preserve\">\n    <value>Край</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Подредба</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>Подредбата е задължителна!</value>\n  </data>\n  <data name=\"Practice_end_time\" xml:space=\"preserve\">\n    <value>Край упражнение</value>\n  </data>\n  <data name=\"Practice_password\" xml:space=\"preserve\">\n    <value>Парола за упражнение</value>\n  </data>\n  <data name=\"Practice_start_time\" xml:space=\"preserve\">\n    <value>Начало упражнение</value>\n  </data>\n  <data name=\"Start_time\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Submision_types\" xml:space=\"preserve\">\n    <value>Тип решения</value>\n  </data>\n  <data name=\"Submissions_limit\" xml:space=\"preserve\">\n    <value>Време между събмисии</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Видимост</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category\" xml:space=\"preserve\">\n    <value>Category</value>\n  </data>\n  <data name=\"Category_required\" xml:space=\"preserve\">\n    <value>The category is required!</value>\n  </data>\n  <data name=\"Contest_password\" xml:space=\"preserve\">\n    <value>Contest password</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"End_time\" xml:space=\"preserve\">\n    <value>End</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Accepted length for the name is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Order</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>The order is required!</value>\n  </data>\n  <data name=\"Practice_end_time\" xml:space=\"preserve\">\n    <value>Practice end</value>\n  </data>\n  <data name=\"Practice_password\" xml:space=\"preserve\">\n    <value>Practice password</value>\n  </data>\n  <data name=\"Practice_start_time\" xml:space=\"preserve\">\n    <value>Practice start</value>\n  </data>\n  <data name=\"Start_time\" xml:space=\"preserve\">\n    <value>Start</value>\n  </data>\n  <data name=\"Submision_types\" xml:space=\"preserve\">\n    <value>Submision types</value>\n  </data>\n  <data name=\"Submissions_limit\" xml:space=\"preserve\">\n    <value>Submissions limit</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Is visible?</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestion.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestQuestion {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestQuestion() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.ViewModels.ContestQuest\" +\n                            \"ion\", typeof(ContestQuestion).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ask in contests.\n        /// </summary>\n        public static string Ask_in_contest {\n            get {\n                return ResourceManager.GetString(\"Ask_in_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ask in practices.\n        /// </summary>\n        public static string Ask_in_practice {\n            get {\n                return ResourceManager.GetString(\"Ask_in_practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        public static string Question_type {\n            get {\n                return ResourceManager.GetString(\"Question_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reg-Ex for validation.\n        /// </summary>\n        public static string Regex_validation {\n            get {\n                return ResourceManager.GetString(\"Regex_validation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text.\n        /// </summary>\n        public static string Text {\n            get {\n                return ResourceManager.GetString(\"Text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The text must be between {2} and {1} symbols.\n        /// </summary>\n        public static string Text_length {\n            get {\n                return ResourceManager.GetString(\"Text_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The text is required!.\n        /// </summary>\n        public static string Text_required {\n            get {\n                return ResourceManager.GetString(\"Text_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestion.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestion.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Ask_in_contest\" xml:space=\"preserve\">\n    <value>Задаване към състезанията</value>\n  </data>\n  <data name=\"Ask_in_practice\" xml:space=\"preserve\">\n    <value>Задаване към упражненията</value>\n  </data>\n  <data name=\"Question_type\" xml:space=\"preserve\">\n    <value>Тип въпрос</value>\n  </data>\n  <data name=\"Regex_validation\" xml:space=\"preserve\">\n    <value>Reg-Ex валидация</value>\n  </data>\n  <data name=\"Text\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n  <data name=\"Text_length\" xml:space=\"preserve\">\n    <value>Текста трябва да е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Text_required\" xml:space=\"preserve\">\n    <value>Текста е задължителен!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestion.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Ask_in_contest\" xml:space=\"preserve\">\n    <value>Ask in contests</value>\n  </data>\n  <data name=\"Ask_in_practice\" xml:space=\"preserve\">\n    <value>Ask in practices</value>\n  </data>\n  <data name=\"Question_type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"Regex_validation\" xml:space=\"preserve\">\n    <value>Reg-Ex for validation</value>\n  </data>\n  <data name=\"Text\" xml:space=\"preserve\">\n    <value>Text</value>\n  </data>\n  <data name=\"Text_length\" xml:space=\"preserve\">\n    <value>The text must be between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Text_required\" xml:space=\"preserve\">\n    <value>The text is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestionAnswer.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestQuestionAnswer {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestQuestionAnswer() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.ViewModels.ContestQuest\" +\n                            \"ionAnswer\", typeof(ContestQuestionAnswer).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question.\n        /// </summary>\n        public static string Question {\n            get {\n                return ResourceManager.GetString(\"Question\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text.\n        /// </summary>\n        public static string Text {\n            get {\n                return ResourceManager.GetString(\"Text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The text must be between {2} and {1} symbols.\n        /// </summary>\n        public static string Text_length {\n            get {\n                return ResourceManager.GetString(\"Text_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The text is required!.\n        /// </summary>\n        public static string Text_required {\n            get {\n                return ResourceManager.GetString(\"Text_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestionAnswer.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestionAnswer.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Въпрос</value>\n  </data>\n  <data name=\"Text\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n  <data name=\"Text_length\" xml:space=\"preserve\">\n    <value>Текста трябва да е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Text_required\" xml:space=\"preserve\">\n    <value>Текста е задължителен!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ContestQuestionAnswer.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Question</value>\n  </data>\n  <data name=\"Text\" xml:space=\"preserve\">\n    <value>Text</value>\n  </data>\n  <data name=\"Text_length\" xml:space=\"preserve\">\n    <value>The text must be between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Text_required\" xml:space=\"preserve\">\n    <value>The text is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ShortContestAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ShortContestAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ShortContestAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.ViewModels.ShortContest\" +\n                            \"Administration\", typeof(ShortContestAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category name.\n        /// </summary>\n        public static string Category_name {\n            get {\n                return ResourceManager.GetString(\"Category_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to End time.\n        /// </summary>\n        public static string End_time {\n            get {\n                return ResourceManager.GetString(\"End_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Start time.\n        /// </summary>\n        public static string Start_time {\n            get {\n                return ResourceManager.GetString(\"Start_time\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ShortContestAdministration.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ShortContestAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_name\" xml:space=\"preserve\">\n    <value>Категория</value>\n  </data>\n  <data name=\"End_time\" xml:space=\"preserve\">\n    <value>Край</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Start_time\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/ViewModels/ShortContestAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_name\" xml:space=\"preserve\">\n    <value>Category name</value>\n  </data>\n  <data name=\"End_time\" xml:space=\"preserve\">\n    <value>End time</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required</value>\n  </data>\n  <data name=\"Start_time\" xml:space=\"preserve\">\n    <value>Start time</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestCreate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestCreate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Създаване на състезание</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestCreate.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestCreate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestCreate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.ContestCreate\", typeof(ContestCreate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest creation.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestCreate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Contest creation</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestEdit.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestEdit {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestEdit() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.ContestEdit\", typeof(ContestEdit).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit contest.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestEdit.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestEdit.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Промяна на състезание</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestEdit.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Edit contest</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.ContestIndex\", typeof(ContestIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add answer.\n        /// </summary>\n        public static string Add_answer {\n            get {\n                return ResourceManager.GetString(\"Add_answer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add question.\n        /// </summary>\n        public static string Add_question {\n            get {\n                return ResourceManager.GetString(\"Add_question\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copy from....\n        /// </summary>\n        public static string Copy_from {\n            get {\n                return ResourceManager.GetString(\"Copy_from\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copy form contest.\n        /// </summary>\n        public static string Copy_from_contest {\n            get {\n                return ResourceManager.GetString(\"Copy_from_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete all.\n        /// </summary>\n        public static string Delete_all {\n            get {\n                return ResourceManager.GetString(\"Delete_all\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to For contest.\n        /// </summary>\n        public static string For_contest {\n            get {\n                return ResourceManager.GetString(\"For_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to For practice.\n        /// </summary>\n        public static string For_practice {\n            get {\n                return ResourceManager.GetString(\"For_practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The selected question type, can not have preselected answers.\n        /// </summary>\n        public static string No_possible_answers {\n            get {\n                return ResourceManager.GetString(\"No_possible_answers\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Other.\n        /// </summary>\n        public static string Other {\n            get {\n                return ResourceManager.GetString(\"Other\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participants.\n        /// </summary>\n        public static string Participants {\n            get {\n                return ResourceManager.GetString(\"Participants\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ranking.\n        /// </summary>\n        public static string Ranking {\n            get {\n                return ResourceManager.GetString(\"Ranking\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resuls.\n        /// </summary>\n        public static string Results {\n            get {\n                return ResourceManager.GetString(\"Results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tasks.\n        /// </summary>\n        public static string Tasks {\n            get {\n                return ResourceManager.GetString(\"Tasks\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_answer\" xml:space=\"preserve\">\n    <value>Добави отговор</value>\n  </data>\n  <data name=\"Add_question\" xml:space=\"preserve\">\n    <value>Добави въпрос</value>\n  </data>\n  <data name=\"Copy_from\" xml:space=\"preserve\">\n    <value>Копирай от...</value>\n  </data>\n  <data name=\"Copy_from_contest\" xml:space=\"preserve\">\n    <value>Копирай от друго състезание</value>\n  </data>\n  <data name=\"Delete_all\" xml:space=\"preserve\">\n    <value>Изтрий всички</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"For_contest\" xml:space=\"preserve\">\n    <value>На състезанието</value>\n  </data>\n  <data name=\"For_practice\" xml:space=\"preserve\">\n    <value>На упражненията</value>\n  </data>\n  <data name=\"No_possible_answers\" xml:space=\"preserve\">\n    <value>Избраният тип въпрос няма възможни отговори!</value>\n  </data>\n  <data name=\"Other\" xml:space=\"preserve\">\n    <value>Други</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Състезания</value>\n  </data>\n  <data name=\"Participants\" xml:space=\"preserve\">\n    <value>Участници</value>\n  </data>\n  <data name=\"Ranking\" xml:space=\"preserve\">\n    <value>Класиране</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Решения</value>\n  </data>\n  <data name=\"Tasks\" xml:space=\"preserve\">\n    <value>Задачи</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/ContestIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_answer\" xml:space=\"preserve\">\n    <value>Add answer</value>\n  </data>\n  <data name=\"Add_question\" xml:space=\"preserve\">\n    <value>Add question</value>\n  </data>\n  <data name=\"Copy_from\" xml:space=\"preserve\">\n    <value>Copy from...</value>\n  </data>\n  <data name=\"Copy_from_contest\" xml:space=\"preserve\">\n    <value>Copy form contest</value>\n  </data>\n  <data name=\"Delete_all\" xml:space=\"preserve\">\n    <value>Delete all</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"For_contest\" xml:space=\"preserve\">\n    <value>For contest</value>\n  </data>\n  <data name=\"For_practice\" xml:space=\"preserve\">\n    <value>For practice</value>\n  </data>\n  <data name=\"No_possible_answers\" xml:space=\"preserve\">\n    <value>The selected question type, can not have preselected answers</value>\n  </data>\n  <data name=\"Other\" xml:space=\"preserve\">\n    <value>Other</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Contests</value>\n  </data>\n  <data name=\"Participants\" xml:space=\"preserve\">\n    <value>Participants</value>\n  </data>\n  <data name=\"Ranking\" xml:space=\"preserve\">\n    <value>Ranking</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Resuls</value>\n  </data>\n  <data name=\"Tasks\" xml:space=\"preserve\">\n    <value>Tasks</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/CategoryDropDown.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views.EditorTemplates {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class CategoryDropDown {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal CategoryDropDown() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.EditorTemplates.C\" +\n                            \"ategoryDropDown\", typeof(CategoryDropDown).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose a category.\n        /// </summary>\n        public static string Choose_category {\n            get {\n                return ResourceManager.GetString(\"Choose_category\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/CategoryDropDown.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/CategoryDropDown.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Изберете категория</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/CategoryDropDown.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Choose a category</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/SubmissionTypeCheckBoxes.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views.EditorTemplates {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionTypeCheckBoxes {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionTypeCheckBoxes() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.EditorTemplates.S\" +\n                            \"ubmissionTypeCheckBoxes\", typeof(SubmissionTypeCheckBoxes).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allow submission with.\n        /// </summary>\n        public static string Allow_submission {\n            get {\n                return ResourceManager.GetString(\"Allow_submission\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/SubmissionTypeCheckBoxes.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/SubmissionTypeCheckBoxes.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allow_submission\" xml:space=\"preserve\">\n    <value>Позволете решения с</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/EditorTemplates/SubmissionTypeCheckBoxes.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allow_submission\" xml:space=\"preserve\">\n    <value>Allow submission with</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/Partials/ContestEditor.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Contests.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestEditor {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestEditor() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Contests.Views.Partials.ContestE\" +\n                            \"ditor\", typeof(ContestEditor).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the category of the contest.\n        /// </summary>\n        public static string Choose_category {\n            get {\n                return ResourceManager.GetString(\"Choose_category\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter contest end time.\n        /// </summary>\n        public static string Contest_end {\n            get {\n                return ResourceManager.GetString(\"Contest_end\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the contest order.\n        /// </summary>\n        public static string Contest_order {\n            get {\n                return ResourceManager.GetString(\"Contest_order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter contest password.\n        /// </summary>\n        public static string Contest_password {\n            get {\n                return ResourceManager.GetString(\"Contest_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter contest start time.\n        /// </summary>\n        public static string Contest_start {\n            get {\n                return ResourceManager.GetString(\"Contest_start\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose if the contest is visible.\n        /// </summary>\n        public static string Contest_visibility {\n            get {\n                return ResourceManager.GetString(\"Contest_visibility\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Duration information.\n        /// </summary>\n        public static string Duration_info {\n            get {\n                return ResourceManager.GetString(\"Duration_info\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the description of the contest.\n        /// </summary>\n        public static string Enter_description {\n            get {\n                return ResourceManager.GetString(\"Enter_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the title of the contest.\n        /// </summary>\n        public static string Enter_title {\n            get {\n                return ResourceManager.GetString(\"Enter_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to General information.\n        /// </summary>\n        public static string General_info {\n            get {\n                return ResourceManager.GetString(\"General_info\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Options.\n        /// </summary>\n        public static string Options {\n            get {\n                return ResourceManager.GetString(\"Options\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Passwords.\n        /// </summary>\n        public static string Passowords_info {\n            get {\n                return ResourceManager.GetString(\"Passowords_info\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter practice end time.\n        /// </summary>\n        public static string Practice_end {\n            get {\n                return ResourceManager.GetString(\"Practice_end\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter practice password.\n        /// </summary>\n        public static string Practice_password {\n            get {\n                return ResourceManager.GetString(\"Practice_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter practice start time.\n        /// </summary>\n        public static string Practice_start {\n            get {\n                return ResourceManager.GetString(\"Practice_start\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission types.\n        /// </summary>\n        public static string Submission_types {\n            get {\n                return ResourceManager.GetString(\"Submission_types\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter a time limit between two consecutive submissions.\n        /// </summary>\n        public static string Submissions_limit {\n            get {\n                return ResourceManager.GetString(\"Submissions_limit\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/Partials/ContestEditor.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/Partials/ContestEditor.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Изберете категория на състезанието</value>\n  </data>\n  <data name=\"Contest_end\" xml:space=\"preserve\">\n    <value>Въведете край на състезанието</value>\n  </data>\n  <data name=\"Contest_order\" xml:space=\"preserve\">\n    <value>Въведете подредба на състезанието</value>\n  </data>\n  <data name=\"Contest_password\" xml:space=\"preserve\">\n    <value>Въведете парола на състезанието</value>\n  </data>\n  <data name=\"Contest_start\" xml:space=\"preserve\">\n    <value>Въведете начало на състезанието</value>\n  </data>\n  <data name=\"Contest_visibility\" xml:space=\"preserve\">\n    <value>Изберете дали състезанието да бъде видимо</value>\n  </data>\n  <data name=\"Duration_info\" xml:space=\"preserve\">\n    <value>Времетраене</value>\n  </data>\n  <data name=\"Enter_description\" xml:space=\"preserve\">\n    <value>Въведете описание на състезанието</value>\n  </data>\n  <data name=\"Enter_title\" xml:space=\"preserve\">\n    <value>Въведете заглавие на състезанието</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>Основна информация</value>\n  </data>\n  <data name=\"Options\" xml:space=\"preserve\">\n    <value>Опции</value>\n  </data>\n  <data name=\"Passowords_info\" xml:space=\"preserve\">\n    <value>Пароли</value>\n  </data>\n  <data name=\"Practice_end\" xml:space=\"preserve\">\n    <value>Въведете край за упражнения</value>\n  </data>\n  <data name=\"Practice_password\" xml:space=\"preserve\">\n    <value>Въведете парола за упражнения</value>\n  </data>\n  <data name=\"Practice_start\" xml:space=\"preserve\">\n    <value>Въведете начало за упражнение</value>\n  </data>\n  <data name=\"Submissions_limit\" xml:space=\"preserve\">\n    <value>Въведете лимит между изпращане на две последователни решения</value>\n  </data>\n  <data name=\"Submission_types\" xml:space=\"preserve\">\n    <value>Видове решения</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Contests/Views/Partials/ContestEditor.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Enter the category of the contest</value>\n  </data>\n  <data name=\"Contest_end\" xml:space=\"preserve\">\n    <value>Enter contest end time</value>\n  </data>\n  <data name=\"Contest_order\" xml:space=\"preserve\">\n    <value>Enter the contest order</value>\n  </data>\n  <data name=\"Contest_password\" xml:space=\"preserve\">\n    <value>Enter contest password</value>\n  </data>\n  <data name=\"Contest_start\" xml:space=\"preserve\">\n    <value>Enter contest start time</value>\n  </data>\n  <data name=\"Contest_visibility\" xml:space=\"preserve\">\n    <value>Choose if the contest is visible</value>\n  </data>\n  <data name=\"Duration_info\" xml:space=\"preserve\">\n    <value>Duration information</value>\n  </data>\n  <data name=\"Enter_description\" xml:space=\"preserve\">\n    <value>Enter the description of the contest</value>\n  </data>\n  <data name=\"Enter_title\" xml:space=\"preserve\">\n    <value>Enter the title of the contest</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>General information</value>\n  </data>\n  <data name=\"Options\" xml:space=\"preserve\">\n    <value>Options</value>\n  </data>\n  <data name=\"Passowords_info\" xml:space=\"preserve\">\n    <value>Passwords</value>\n  </data>\n  <data name=\"Practice_end\" xml:space=\"preserve\">\n    <value>Enter practice end time</value>\n  </data>\n  <data name=\"Practice_password\" xml:space=\"preserve\">\n    <value>Enter practice password</value>\n  </data>\n  <data name=\"Practice_start\" xml:space=\"preserve\">\n    <value>Enter practice start time</value>\n  </data>\n  <data name=\"Submissions_limit\" xml:space=\"preserve\">\n    <value>Enter a time limit between two consecutive submissions</value>\n  </data>\n  <data name=\"Submission_types\" xml:space=\"preserve\">\n    <value>Submission types</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/ViewModels/FeedbackReport.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Feedback.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class FeedbackReport {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal FeedbackReport() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Feedback.ViewModels.FeedbackRepo\" +\n                            \"rt\", typeof(FeedbackReport).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Anonymous.\n        /// </summary>\n        public static string Anonymous {\n            get {\n                return ResourceManager.GetString(\"Anonymous\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Content.\n        /// </summary>\n        public static string Contet {\n            get {\n                return ResourceManager.GetString(\"Contet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The content is required.\n        /// </summary>\n        public static string Contet_required {\n            get {\n                return ResourceManager.GetString(\"Contet_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Fixed.\n        /// </summary>\n        public static string Is_fixed {\n            get {\n                return ResourceManager.GetString(\"Is_fixed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to E-mail.\n        /// </summary>\n        public static string Mail {\n            get {\n                return ResourceManager.GetString(\"Mail\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid email address.\n        /// </summary>\n        public static string Mail_invalid {\n            get {\n                return ResourceManager.GetString(\"Mail_invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The email is requried!.\n        /// </summary>\n        public static string Mail_required {\n            get {\n                return ResourceManager.GetString(\"Mail_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User.\n        /// </summary>\n        public static string UserName {\n            get {\n                return ResourceManager.GetString(\"UserName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/ViewModels/FeedbackReport.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/ViewModels/FeedbackReport.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Anonymous\" xml:space=\"preserve\">\n    <value>Анонимен</value>\n  </data>\n  <data name=\"Contet\" xml:space=\"preserve\">\n    <value>Съдържание</value>\n  </data>\n  <data name=\"Contet_required\" xml:space=\"preserve\">\n    <value>Съдържанието е задължително</value>\n  </data>\n  <data name=\"Is_fixed\" xml:space=\"preserve\">\n    <value>Поправен</value>\n  </data>\n  <data name=\"Mail\" xml:space=\"preserve\">\n    <value>E-mail</value>\n  </data>\n  <data name=\"Mail_invalid\" xml:space=\"preserve\">\n    <value>Невалиден имейл адрес</value>\n  </data>\n  <data name=\"Mail_required\" xml:space=\"preserve\">\n    <value>Имейла е задължителен</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/ViewModels/FeedbackReport.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Anonymous\" xml:space=\"preserve\">\n    <value>Anonymous</value>\n  </data>\n  <data name=\"Contet\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Contet_required\" xml:space=\"preserve\">\n    <value>The content is required</value>\n  </data>\n  <data name=\"Is_fixed\" xml:space=\"preserve\">\n    <value>Fixed</value>\n  </data>\n  <data name=\"Mail\" xml:space=\"preserve\">\n    <value>E-mail</value>\n  </data>\n  <data name=\"Mail_invalid\" xml:space=\"preserve\">\n    <value>Invalid email address</value>\n  </data>\n  <data name=\"Mail_required\" xml:space=\"preserve\">\n    <value>The email is requried!</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>User</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/Views/FeedbackIndexAdmin.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Feedback.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class FeedbackIndexAdmin {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal FeedbackIndexAdmin() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Feedback.Views.FeedbackIndexAdmi\" +\n                            \"n\", typeof(FeedbackIndexAdmin).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Feedback.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/Views/FeedbackIndexAdmin.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/Views/FeedbackIndexAdmin.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Обратна връзка</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Feedback/Views/FeedbackIndexAdmin.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Feedback</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/ViewModels/NewsAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.News.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class NewsAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal NewsAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.News.ViewModels.NewsAdministrati\" +\n                            \"on\", typeof(NewsAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Author.\n        /// </summary>\n        public static string Author {\n            get {\n                return ResourceManager.GetString(\"Author\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Author_length {\n            get {\n                return ResourceManager.GetString(\"Author_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The author is required!.\n        /// </summary>\n        public static string Author_required {\n            get {\n                return ResourceManager.GetString(\"Author_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Content.\n        /// </summary>\n        public static string Content {\n            get {\n                return ResourceManager.GetString(\"Content\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Content_length {\n            get {\n                return ResourceManager.GetString(\"Content_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The content is required!.\n        /// </summary>\n        public static string Content_required {\n            get {\n                return ResourceManager.GetString(\"Content_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source.\n        /// </summary>\n        public static string Source {\n            get {\n                return ResourceManager.GetString(\"Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Source_length {\n            get {\n                return ResourceManager.GetString(\"Source_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The source is required!.\n        /// </summary>\n        public static string Source_required {\n            get {\n                return ResourceManager.GetString(\"Source_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Title.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Title_length {\n            get {\n                return ResourceManager.GetString(\"Title_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The title is required.\n        /// </summary>\n        public static string Title_required {\n            get {\n                return ResourceManager.GetString(\"Title_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is visible?.\n        /// </summary>\n        public static string Visibility {\n            get {\n                return ResourceManager.GetString(\"Visibility\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/ViewModels/NewsAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/ViewModels/NewsAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Автор</value>\n  </data>\n  <data name=\"Author_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Author_required\" xml:space=\"preserve\">\n    <value>Авторът е задължителен!</value>\n  </data>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Съдържание</value>\n  </data>\n  <data name=\"Content_length\" xml:space=\"preserve\">\n    <value>Съдържанието трябва да бъде поне {2} символа</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>Съдържанието е задължително!</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Източник</value>\n  </data>\n  <data name=\"Source_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Source_required\" xml:space=\"preserve\">\n    <value>Източникът е задължителен!</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Заглавие</value>\n  </data>\n  <data name=\"Title_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Title_required\" xml:space=\"preserve\">\n    <value>Заглавието е задължително!</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Видимост</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/ViewModels/NewsAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Author_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Author_required\" xml:space=\"preserve\">\n    <value>The author is required!</value>\n  </data>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Content_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>The content is required!</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"Source_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Source_required\" xml:space=\"preserve\">\n    <value>The source is required!</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"Title_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Title_required\" xml:space=\"preserve\">\n    <value>The title is required</value>\n  </data>\n  <data name=\"Visibility\" xml:space=\"preserve\">\n    <value>Is visible?</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/Views/NewsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.News.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class NewsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal NewsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.News.Views.NewsIndex\", typeof(NewsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Download news.\n        /// </summary>\n        public static string Download_news {\n            get {\n                return ResourceManager.GetString(\"Download_news\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to News.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/Views/NewsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/Views/NewsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Download_news\" xml:space=\"preserve\">\n    <value>Изтегли новини</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Новини</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/News/Views/NewsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Download_news\" xml:space=\"preserve\">\n    <value>Download news</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>News</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/ViewModels/ParticipantViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Participants.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ParticipantViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ParticipantViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Participants.ViewModels.Particip\" +\n                            \"antViewModels\", typeof(ParticipantViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Answer.\n        /// </summary>\n        public static string Answer {\n            get {\n                return ResourceManager.GetString(\"Answer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The answer is required!.\n        /// </summary>\n        public static string Answer_required {\n            get {\n                return ResourceManager.GetString(\"Answer_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest.\n        /// </summary>\n        public static string Contest_name {\n            get {\n                return ResourceManager.GetString(\"Contest_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The contest is required!.\n        /// </summary>\n        public static string Contest_required {\n            get {\n                return ResourceManager.GetString(\"Contest_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is offical?.\n        /// </summary>\n        public static string Is_official {\n            get {\n                return ResourceManager.GetString(\"Is_official\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question.\n        /// </summary>\n        public static string Question {\n            get {\n                return ResourceManager.GetString(\"Question\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User.\n        /// </summary>\n        public static string User {\n            get {\n                return ResourceManager.GetString(\"User\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The user is required!.\n        /// </summary>\n        public static string User_required {\n            get {\n                return ResourceManager.GetString(\"User_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User.\n        /// </summary>\n        public static string UserName {\n            get {\n                return ResourceManager.GetString(\"UserName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/ViewModels/ParticipantViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/ViewModels/ParticipantViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer\" xml:space=\"preserve\">\n    <value>Отговор</value>\n  </data>\n  <data name=\"Answer_required\" xml:space=\"preserve\">\n    <value>Отговорът е задължителен!</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Contest_name\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Contest_required\" xml:space=\"preserve\">\n    <value>Състезанието е задължително!</value>\n  </data>\n  <data name=\"Is_official\" xml:space=\"preserve\">\n    <value>Официално участие</value>\n  </data>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Въпрос</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n  <data name=\"User_required\" xml:space=\"preserve\">\n    <value>Потребителят е задължителен!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/ViewModels/ParticipantViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer\" xml:space=\"preserve\">\n    <value>Answer</value>\n  </data>\n  <data name=\"Answer_required\" xml:space=\"preserve\">\n    <value>The answer is required!</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Contest</value>\n  </data>\n  <data name=\"Contest_name\" xml:space=\"preserve\">\n    <value>Contest</value>\n  </data>\n  <data name=\"Contest_required\" xml:space=\"preserve\">\n    <value>The contest is required!</value>\n  </data>\n  <data name=\"Is_official\" xml:space=\"preserve\">\n    <value>Is offical?</value>\n  </data>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Question</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>User</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>User</value>\n  </data>\n  <data name=\"User_required\" xml:space=\"preserve\">\n    <value>The user is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/EditorTemplates/ParticipantEditorTemplates.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Participants.Views.EditorTemplates {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ParticipantEditorTemplates {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ParticipantEditorTemplates() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Participants.Views.EditorTemplat\" +\n                            \"es.ParticipantEditorTemplates\", typeof(ParticipantEditorTemplates).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose contest.\n        /// </summary>\n        public static string Choose_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose user.\n        /// </summary>\n        public static string Choose_user {\n            get {\n                return ResourceManager.GetString(\"Choose_user\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/EditorTemplates/ParticipantEditorTemplates.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/EditorTemplates/ParticipantEditorTemplates.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Изберете състезание</value>\n  </data>\n  <data name=\"Choose_user\" xml:space=\"preserve\">\n    <value>Изберете потребител</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/EditorTemplates/ParticipantEditorTemplates.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Choose contest</value>\n  </data>\n  <data name=\"Choose_user\" xml:space=\"preserve\">\n    <value>Choose user</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/Partials/Participants.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Participants.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Participants {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Participants() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Participants.Views.Partials.Part\" +\n                            \"icipants\", typeof(Participants).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add paticipant.\n        /// </summary>\n        public static string Add_participant {\n            get {\n                return ResourceManager.GetString(\"Add_participant\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/Partials/Participants.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/Partials/Participants.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_participant\" xml:space=\"preserve\">\n    <value>Добавяне на участник</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/Partials/Participants.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_participant\" xml:space=\"preserve\">\n    <value>Add paticipant</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsContest.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsContest.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Участници</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsContest.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Participants.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ParticipantsContest {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ParticipantsContest() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Participants.Views.ParticipantsC\" +\n                            \"ontest\", typeof(ParticipantsContest).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participants.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsContest.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Participants</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Participants.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ParticipantsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ParticipantsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Participants.Views.ParticipantsI\" +\n                            \"ndex\", typeof(ParticipantsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose or enter a contest.\n        /// </summary>\n        public static string Choose_or_enter_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_or_enter_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Clear.\n        /// </summary>\n        public static string Clear {\n            get {\n                return ResourceManager.GetString(\"Clear\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participants.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Изберете или напишете състезание</value>\n  </data>\n  <data name=\"Clear\" xml:space=\"preserve\">\n    <value>Изчистване</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Участници</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Participants/Views/ParticipantsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Choose or enter a contest</value>\n  </data>\n  <data name=\"Clear\" xml:space=\"preserve\">\n    <value>Clear</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Participants</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ProblemsControllers.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsControllers {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsControllers() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.ProblemsControllers\", typeof(ProblemsControllers).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid contest.\n        /// </summary>\n        public static string Invalid_contest {\n            get {\n                return ResourceManager.GetString(\"Invalid_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid problem.\n        /// </summary>\n        public static string Invalid_problem {\n            get {\n                return ResourceManager.GetString(\"Invalid_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid tests.\n        /// </summary>\n        public static string Invalid_tests {\n            get {\n                return ResourceManager.GetString(\"Invalid_tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid user.\n        /// </summary>\n        public static string Invalid_user {\n            get {\n                return ResourceManager.GetString(\"Invalid_user\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests must be in a zip file..\n        /// </summary>\n        public static string Must_be_zip_file {\n            get {\n                return ResourceManager.GetString(\"Must_be_zip_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem added successfully..\n        /// </summary>\n        public static string Problem_added {\n            get {\n                return ResourceManager.GetString(\"Problem_added\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem deleted successfully..\n        /// </summary>\n        public static string Problem_deleted {\n            get {\n                return ResourceManager.GetString(\"Problem_deleted\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem edited successfully..\n        /// </summary>\n        public static string Problem_edited {\n            get {\n                return ResourceManager.GetString(\"Problem_edited\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem retested successfully..\n        /// </summary>\n        public static string Problem_retested {\n            get {\n                return ResourceManager.GetString(\"Problem_retested\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems deleted successfully..\n        /// </summary>\n        public static string Problems_deleted {\n            get {\n                return ResourceManager.GetString(\"Problems_deleted\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resources must be fully entered..\n        /// </summary>\n        public static string Resources_not_complete {\n            get {\n                return ResourceManager.GetString(\"Resources_not_complete\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ProblemsControllers.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ProblemsControllers.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_contest\" xml:space=\"preserve\">\n    <value>Невалидно състезание</value>\n  </data>\n  <data name=\"Invalid_problem\" xml:space=\"preserve\">\n    <value>Невалидна задача</value>\n  </data>\n  <data name=\"Invalid_tests\" xml:space=\"preserve\">\n    <value>Невалидни тестове</value>\n  </data>\n  <data name=\"Invalid_user\" xml:space=\"preserve\">\n    <value>Невалиден потребител</value>\n  </data>\n  <data name=\"Must_be_zip_file\" xml:space=\"preserve\">\n    <value>Тестовете трябва да бъдат в .ZIP файл</value>\n  </data>\n  <data name=\"Problems_deleted\" xml:space=\"preserve\">\n    <value>Задачите бяха изтрити успешно</value>\n  </data>\n  <data name=\"Problem_added\" xml:space=\"preserve\">\n    <value>Задачата беше добавена успешно</value>\n  </data>\n  <data name=\"Problem_deleted\" xml:space=\"preserve\">\n    <value>Задачата беше изтрита успешно</value>\n  </data>\n  <data name=\"Problem_edited\" xml:space=\"preserve\">\n    <value>Задачата беше променена успешно</value>\n  </data>\n  <data name=\"Problem_retested\" xml:space=\"preserve\">\n    <value>Задачата беше ретествана успешно</value>\n  </data>\n  <data name=\"Resources_not_complete\" xml:space=\"preserve\">\n    <value>Ресурсите трябва да бъдат попълнени изцяло!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ProblemsControllers.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_contest\" xml:space=\"preserve\">\n    <value>Invalid contest</value>\n  </data>\n  <data name=\"Invalid_problem\" xml:space=\"preserve\">\n    <value>Invalid problem</value>\n  </data>\n  <data name=\"Invalid_tests\" xml:space=\"preserve\">\n    <value>Invalid tests</value>\n  </data>\n  <data name=\"Invalid_user\" xml:space=\"preserve\">\n    <value>Invalid user</value>\n  </data>\n  <data name=\"Must_be_zip_file\" xml:space=\"preserve\">\n    <value>Tests must be in a zip file.</value>\n  </data>\n  <data name=\"Problems_deleted\" xml:space=\"preserve\">\n    <value>Problems deleted successfully.</value>\n  </data>\n  <data name=\"Problem_added\" xml:space=\"preserve\">\n    <value>Problem added successfully.</value>\n  </data>\n  <data name=\"Problem_deleted\" xml:space=\"preserve\">\n    <value>Problem deleted successfully.</value>\n  </data>\n  <data name=\"Problem_edited\" xml:space=\"preserve\">\n    <value>Problem edited successfully.</value>\n  </data>\n  <data name=\"Problem_retested\" xml:space=\"preserve\">\n    <value>Problem retested successfully.</value>\n  </data>\n  <data name=\"Resources_not_complete\" xml:space=\"preserve\">\n    <value>Resources must be fully entered.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/DetailedProblem.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class DetailedProblem {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal DetailedProblem() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.ViewModels.DetailedProb\" +\n                            \"lem\", typeof(DetailedProblem).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Checker.\n        /// </summary>\n        public static string Checker {\n            get {\n                return ResourceManager.GetString(\"Checker\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compete tests.\n        /// </summary>\n        public static string Compete_tests {\n            get {\n                return ResourceManager.GetString(\"Compete_tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max points.\n        /// </summary>\n        public static string Max_points {\n            get {\n                return ResourceManager.GetString(\"Max_points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The max points are required!.\n        /// </summary>\n        public static string Max_points_required {\n            get {\n                return ResourceManager.GetString(\"Max_points_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory limit.\n        /// </summary>\n        public static string Memory_limit {\n            get {\n                return ResourceManager.GetString(\"Memory_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory limit required!.\n        /// </summary>\n        public static string Memory_limit_required {\n            get {\n                return ResourceManager.GetString(\"Memory_limit_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max length is {1} symbols!.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order.\n        /// </summary>\n        public static string Order {\n            get {\n                return ResourceManager.GetString(\"Order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The order is required!.\n        /// </summary>\n        public static string Order_required {\n            get {\n                return ResourceManager.GetString(\"Order_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Show detailed feedback.\n        /// </summary>\n        public static string Show_detailed_feedback {\n            get {\n                return ResourceManager.GetString(\"Show_detailed_feedback\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Show results.\n        /// </summary>\n        public static string Show_results {\n            get {\n                return ResourceManager.GetString(\"Show_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source code size limit.\n        /// </summary>\n        public static string Source_code_size_limit {\n            get {\n                return ResourceManager.GetString(\"Source_code_size_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time limit.\n        /// </summary>\n        public static string Time_limit {\n            get {\n                return ResourceManager.GetString(\"Time_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The time limit is required!.\n        /// </summary>\n        public static string Time_limit_required {\n            get {\n                return ResourceManager.GetString(\"Time_limit_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Trial tests.\n        /// </summary>\n        public static string Trial_tests {\n            get {\n                return ResourceManager.GetString(\"Trial_tests\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/DetailedProblem.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/DetailedProblem.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Checker\" xml:space=\"preserve\">\n    <value>Чекер</value>\n  </data>\n  <data name=\"Compete_tests\" xml:space=\"preserve\">\n    <value>Състезателни тестове</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Max_points\" xml:space=\"preserve\">\n    <value>Максимум точки</value>\n  </data>\n  <data name=\"Max_points_required\" xml:space=\"preserve\">\n    <value>Максимум точките са задължителни!</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Лимит на памет</value>\n  </data>\n  <data name=\"Memory_limit_required\" xml:space=\"preserve\">\n    <value>Лимита на памет е задължителен!</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Максималната дължина е {1} символа!</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Подредба</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>Подредбата е задължителна!</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Покажи пълния feedback</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Видими резултати</value>\n  </data>\n  <data name=\"Source_code_size_limit\" xml:space=\"preserve\">\n    <value>Размер на сорс кода</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Лимит на време</value>\n  </data>\n  <data name=\"Time_limit_required\" xml:space=\"preserve\">\n    <value>Лимита на време е задължителен!</value>\n  </data>\n  <data name=\"Trial_tests\" xml:space=\"preserve\">\n    <value>Пробни тестове</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/DetailedProblem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Checker\" xml:space=\"preserve\">\n    <value>Checker</value>\n  </data>\n  <data name=\"Compete_tests\" xml:space=\"preserve\">\n    <value>Compete tests</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Contest</value>\n  </data>\n  <data name=\"Max_points\" xml:space=\"preserve\">\n    <value>Max points</value>\n  </data>\n  <data name=\"Max_points_required\" xml:space=\"preserve\">\n    <value>The max points are required!</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Memory limit</value>\n  </data>\n  <data name=\"Memory_limit_required\" xml:space=\"preserve\">\n    <value>Memory limit required!</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Max length is {1} symbols!</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Order</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>The order is required!</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Show detailed feedback</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Show results</value>\n  </data>\n  <data name=\"Source_code_size_limit\" xml:space=\"preserve\">\n    <value>Source code size limit</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Time limit</value>\n  </data>\n  <data name=\"Time_limit_required\" xml:space=\"preserve\">\n    <value>The time limit is required!</value>\n  </data>\n  <data name=\"Trial_tests\" xml:space=\"preserve\">\n    <value>Trial tests</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/ProblemResources.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/ProblemResources.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Link\" xml:space=\"preserve\">\n    <value>Линк</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името на ресурса е задължително!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Подредба</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>Подредбата е задължителна!</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n  <data name=\"Type_required\" xml:space=\"preserve\">\n    <value>Типа е задължителен!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/ProblemResources.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemResources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemResources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.ViewModels.ProblemResou\" +\n                            \"rces\", typeof(ProblemResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Link.\n        /// </summary>\n        public static string Link {\n            get {\n                return ResourceManager.GetString(\"Link\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The resource name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order.\n        /// </summary>\n        public static string Order {\n            get {\n                return ResourceManager.GetString(\"Order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The order is required!.\n        /// </summary>\n        public static string Order_required {\n            get {\n                return ResourceManager.GetString(\"Order_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        public static string Type {\n            get {\n                return ResourceManager.GetString(\"Type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The type is required!.\n        /// </summary>\n        public static string Type_required {\n            get {\n                return ResourceManager.GetString(\"Type_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/ViewModels/ProblemResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Link\" xml:space=\"preserve\">\n    <value>Link</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The resource name is required!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Order</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>The order is required!</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"Type_required\" xml:space=\"preserve\">\n    <value>The type is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/Partials/ProblemsPartials.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsPartials {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsPartials() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.Partials.Problems\" +\n                            \"Partials\", typeof(ProblemsPartials).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Download.\n        /// </summary>\n        public static string Download {\n            get {\n                return ResourceManager.GetString(\"Download\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Retest.\n        /// </summary>\n        public static string Retest {\n            get {\n                return ResourceManager.GetString(\"Retest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Video.\n        /// </summary>\n        public static string Video {\n            get {\n                return ResourceManager.GetString(\"Video\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/Partials/ProblemsPartials.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/Partials/ProblemsPartials.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтриване</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>Свали</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Ретест</value>\n  </data>\n  <data name=\"Video\" xml:space=\"preserve\">\n    <value>Видео</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/Partials/ProblemsPartials.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>Download</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Retest</value>\n  </data>\n  <data name=\"Video\" xml:space=\"preserve\">\n    <value>Video</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsCreate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsCreate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsCreate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsCreate\", typeof(ProblemsCreate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add.\n        /// </summary>\n        public static string Add {\n            get {\n                return ResourceManager.GetString(\"Add\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add or remove resource for this problem - problem description, solution or video. Every resource has a name, type and a file/llink..\n        /// </summary>\n        public static string Add_remove_resource {\n            get {\n                return ResourceManager.GetString(\"Add_remove_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system does uses case insensitive comparison when comparing symbol by symbol..\n        /// </summary>\n        public static string Case_insensitive_checker_description {\n            get {\n                return ResourceManager.GetString(\"Case_insensitive_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose a source code checker for this problem. The basic options are:.\n        /// </summary>\n        public static string Choose_code_checker {\n            get {\n                return ResourceManager.GetString(\"Choose_code_checker\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file.\n        /// </summary>\n        public static string Choose_file {\n            get {\n                return ResourceManager.GetString(\"Choose_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose the .zip file with expected input and output for the current problem.\n        ///    &lt;br /&gt;\n        ///    You can download a sample zip file from\n        ///    &lt;a href=&quot;/Content/Demos/DemoTests.zip&quot;&gt;here&lt;/a&gt;..\n        /// </summary>\n        public static string Choose_zip_file {\n            get {\n                return ResourceManager.GetString(\"Choose_zip_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the max points for the problem.\n        /// </summary>\n        public static string Enter_max_points {\n            get {\n                return ResourceManager.GetString(\"Enter_max_points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the memory limit (in bytes) for this problem.\n        /// </summary>\n        public static string Enter_memory_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_memory_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the name of the problem.\n        /// </summary>\n        public static string Enter_name {\n            get {\n                return ResourceManager.GetString(\"Enter_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the order for the current problem.\n        /// </summary>\n        public static string Enter_order {\n            get {\n                return ResourceManager.GetString(\"Enter_order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the source code size limit (in bytes) for this problem.\n        /// </summary>\n        public static string Enter_sorce_code_size_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_sorce_code_size_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the time limit (in miliseconds) for this problem.\n        /// </summary>\n        public static string Enter_time_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_time_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system compares the results of the participants with the expected output symbol by symbol..\n        /// </summary>\n        public static string Exact_checker_description {\n            get {\n                return ResourceManager.GetString(\"Exact_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to for.\n        /// </summary>\n        public static string For {\n            get {\n                return ResourceManager.GetString(\"For\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to General information.\n        /// </summary>\n        public static string General_info {\n            get {\n                return ResourceManager.GetString(\"General_info\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create problem.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system compares only N digits after the decimal separator. Works only for problems where the answers are floating point numbers positioned on new lines..\n        /// </summary>\n        public static string Precision_checker_description {\n            get {\n                return ResourceManager.GetString(\"Precision_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remove.\n        /// </summary>\n        public static string Remove {\n            get {\n                return ResourceManager.GetString(\"Remove\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resources.\n        /// </summary>\n        public static string Resources {\n            get {\n                return ResourceManager.GetString(\"Resources\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Settings {\n            get {\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose if the participants can see a full feedback for thier submissions (like administrators).\n        /// </summary>\n        public static string Show_detailed_feedback {\n            get {\n                return ResourceManager.GetString(\"Show_detailed_feedback\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose if the participants can see their result in real time.\n        /// </summary>\n        public static string Show_results {\n            get {\n                return ResourceManager.GetString(\"Show_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system first sorts the results of the participants and the expected output, line by line and  then compares them both symbol by symbol..\n        /// </summary>\n        public static string Sort_checker_description {\n            get {\n                return ResourceManager.GetString(\"Sort_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests.\n        /// </summary>\n        public static string Tests {\n            get {\n                return ResourceManager.GetString(\"Tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests (.zip file).\n        /// </summary>\n        public static string Tests_label {\n            get {\n                return ResourceManager.GetString(\"Tests_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system first removes the white spaces in front and in the end of the participant results and then compare them with the expected output symbol by symbol..\n        /// </summary>\n        public static string Trim_checker_description {\n            get {\n                return ResourceManager.GetString(\"Trim_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Yes.\n        /// </summary>\n        public static string Yes {\n            get {\n                return ResourceManager.GetString(\"Yes\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsCreate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsCreate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Добави</value>\n  </data>\n  <data name=\"Add_remove_resource\" xml:space=\"preserve\">\n    <value>Добавете или премахнете ресурс към задачата - условие, авторско решение или видео. Всеки ресурс има име, тип и файл/линк.</value>\n  </data>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- системата не отчита разлика между главна и малка буква като сравнява символ по символ;</value>\n  </data>\n  <data name=\"Choose_code_checker\" xml:space=\"preserve\">\n    <value>Изберете тип проверка на сорс кода на състезателите. Базовите варианти са:</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Избери файл</value>\n  </data>\n  <data name=\"Choose_zip_file\" xml:space=\"preserve\">\n    <value>Изберете .zip файл с тестове за вход и изход към задачата.\n    &lt;br /&gt;\n    Можете да изтеглите примерен файл с тестове\n    &lt;a href=\"/Content/Demos/DemoTests.zip\"&gt;тук&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Enter_max_points\" xml:space=\"preserve\">\n    <value>Въведете максимален брой точки, които състезателят може да получи от задачата</value>\n  </data>\n  <data name=\"Enter_memory_limit\" xml:space=\"preserve\">\n    <value>Въведете максималнa памет в байтове, която състезателят може да достигне с решението си върху задачата</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Въведете заглавие на задачата</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Въведете номер под ред на задачата в текущото състезание</value>\n  </data>\n  <data name=\"Enter_sorce_code_size_limit\" xml:space=\"preserve\">\n    <value>Въведете максимален размер на сорс код в байтове, която състезателят може да изпрати като решение на задачата</value>\n  </data>\n  <data name=\"Enter_time_limit\" xml:space=\"preserve\">\n    <value>Въведете максимално време в милисекунди, които състезателят може да достигне с решението си върху задачата</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value>- системата проверява резултатите на състезателя с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>към</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>Основна информация</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Създаване на задача</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- само за задачи с резултати съдържащи числа с плаваща запетая на всеки нов ред - системата се съобразява само с първите N на брой цифри след плаващата запетая.</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Премахни</value>\n  </data>\n  <data name=\"Resources\" xml:space=\"preserve\">\n    <value>Ресурси</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Изберете дали участниците ще могат да си виждат пълен feedback на решенията си, както го виждат администраторите</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Изберете дали участниците ще могат да си виждат резултатите в реално време</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо сортира по линии резултатите на състезателя и очаквания изход и след това ги сравнява символ по символ;</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Тестове</value>\n  </data>\n  <data name=\"Tests_label\" xml:space=\"preserve\">\n    <value>Тестове (.zip файл)</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо премахва празните интервали в началото и края на резултатите на състезателя и след това ги сравнява с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"Yes\" xml:space=\"preserve\">\n    <value>Да</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsCreate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Add</value>\n  </data>\n  <data name=\"Add_remove_resource\" xml:space=\"preserve\">\n    <value>Add or remove resource for this problem - problem description, solution or video. Every resource has a name, type and a file/llink.</value>\n  </data>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- the system does uses case insensitive comparison when comparing symbol by symbol.</value>\n  </data>\n  <data name=\"Choose_code_checker\" xml:space=\"preserve\">\n    <value>Choose a source code checker for this problem. The basic options are:</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Choose file</value>\n  </data>\n  <data name=\"Choose_zip_file\" xml:space=\"preserve\">\n    <value>Choose the .zip file with expected input and output for the current problem.\n    &lt;br /&gt;\n    You can download a sample zip file from\n    &lt;a href=\"/Content/Demos/DemoTests.zip\"&gt;here&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Enter_max_points\" xml:space=\"preserve\">\n    <value>Enter the max points for the problem</value>\n  </data>\n  <data name=\"Enter_memory_limit\" xml:space=\"preserve\">\n    <value>Enter the memory limit (in bytes) for this problem</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Enter the name of the problem</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Enter the order for the current problem</value>\n  </data>\n  <data name=\"Enter_sorce_code_size_limit\" xml:space=\"preserve\">\n    <value>Enter the source code size limit (in bytes) for this problem</value>\n  </data>\n  <data name=\"Enter_time_limit\" xml:space=\"preserve\">\n    <value>Enter the time limit (in miliseconds) for this problem</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value>- the system compares the results of the participants with the expected output symbol by symbol.</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>for</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>General information</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Create problem</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- the system compares only N digits after the decimal separator. Works only for problems where the answers are floating point numbers positioned on new lines.</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"Resources\" xml:space=\"preserve\">\n    <value>Resources</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Choose if the participants can see a full feedback for thier submissions (like administrators)</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Choose if the participants can see their result in real time</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- the system first sorts the results of the participants and the expected output, line by line and  then compares them both symbol by symbol.</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Tests</value>\n  </data>\n  <data name=\"Tests_label\" xml:space=\"preserve\">\n    <value>Tests (.zip file)</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- the system first removes the white spaces in front and in the end of the participant results and then compare them with the expected output symbol by symbol.</value>\n  </data>\n  <data name=\"Yes\" xml:space=\"preserve\">\n    <value>Yes</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDelete.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsDelete {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsDelete() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsDelete\", typeof(ProblemsDelete).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Назад.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Изтрий.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete problem.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDelete.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDelete.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтрий</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Изтриване на задача</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDelete.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтрий</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Delete problem</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDeleteAll.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsDeleteAll {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsDeleteAll() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsDeleteAll\" +\n                            \"\", typeof(ProblemsDeleteAll).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Назад.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Потвърди.\n        /// </summary>\n        public static string Confirm {\n            get {\n                return ResourceManager.GetString(\"Confirm\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Сигурни ли сте, че искате да изтриете всички задачи на.\n        /// </summary>\n        public static string Confirm_message {\n            get {\n                return ResourceManager.GetString(\"Confirm_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Изтриване на всички задачи.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDeleteAll.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDeleteAll.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Confirm\" xml:space=\"preserve\">\n    <value>Confirm</value>\n  </data>\n  <data name=\"Confirm_message\" xml:space=\"preserve\">\n    <value>Do you want to delete all problems for</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Delete all problems</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDeleteAll.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Confirm\" xml:space=\"preserve\">\n    <value>Потвърди</value>\n  </data>\n  <data name=\"Confirm_message\" xml:space=\"preserve\">\n    <value>Сигурни ли сте, че искате да изтриете всички задачи на</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Изтриване на всички задачи</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDetails.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsDetails {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsDetails() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsDetails\", typeof(ProblemsDetails).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Full feedback is invisible.\n        /// </summary>\n        public static string Full_feedback_invisible {\n            get {\n                return ResourceManager.GetString(\"Full_feedback_invisible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Full feedback is visible.\n        /// </summary>\n        public static string Full_feedback_visible {\n            get {\n                return ResourceManager.GetString(\"Full_feedback_visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem details.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions are invisible.\n        /// </summary>\n        public static string Results_invisible {\n            get {\n                return ResourceManager.GetString(\"Results_invisible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions are visible.\n        /// </summary>\n        public static string Results_visible {\n            get {\n                return ResourceManager.GetString(\"Results_visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Show resources.\n        /// </summary>\n        public static string Show_resources {\n            get {\n                return ResourceManager.GetString(\"Show_resources\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Show submissions.\n        /// </summary>\n        public static string Show_submissions {\n            get {\n                return ResourceManager.GetString(\"Show_submissions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests.\n        /// </summary>\n        public static string Tests {\n            get {\n                return ResourceManager.GetString(\"Tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unlimited.\n        /// </summary>\n        public static string Unlimited {\n            get {\n                return ResourceManager.GetString(\"Unlimited\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDetails.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDetails.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"Full_feedback_invisible\" xml:space=\"preserve\">\n    <value>Пълният feedback е невидим</value>\n  </data>\n  <data name=\"Full_feedback_visible\" xml:space=\"preserve\">\n    <value>Пълният feedback е видим</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Детайли за задача</value>\n  </data>\n  <data name=\"Results_invisible\" xml:space=\"preserve\">\n    <value>Резултатите не са видими</value>\n  </data>\n  <data name=\"Results_visible\" xml:space=\"preserve\">\n    <value>Резултатите са видими</value>\n  </data>\n  <data name=\"Show_resources\" xml:space=\"preserve\">\n    <value>Покажи ресурсите</value>\n  </data>\n  <data name=\"Show_submissions\" xml:space=\"preserve\">\n    <value>Покажи решенията</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Тестове</value>\n  </data>\n  <data name=\"Unlimited\" xml:space=\"preserve\">\n    <value>Неограничен</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsDetails.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Full_feedback_invisible\" xml:space=\"preserve\">\n    <value>Full feedback is invisible</value>\n  </data>\n  <data name=\"Full_feedback_visible\" xml:space=\"preserve\">\n    <value>Full feedback is visible</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Problem details</value>\n  </data>\n  <data name=\"Results_invisible\" xml:space=\"preserve\">\n    <value>Submissions are invisible</value>\n  </data>\n  <data name=\"Results_visible\" xml:space=\"preserve\">\n    <value>Submissions are visible</value>\n  </data>\n  <data name=\"Show_resources\" xml:space=\"preserve\">\n    <value>Show resources</value>\n  </data>\n  <data name=\"Show_submissions\" xml:space=\"preserve\">\n    <value>Show submissions</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Tests</value>\n  </data>\n  <data name=\"Unlimited\" xml:space=\"preserve\">\n    <value>Unlimited</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsEdit.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsEdit {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsEdit() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsEdit\", typeof(ProblemsEdit).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add or remove resource for this problem - problem description, solution or video. Every resource has a name, type and a file/llink..\n        /// </summary>\n        public static string Add_remove_resource {\n            get {\n                return ResourceManager.GetString(\"Add_remove_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system does uses case insensitive comparison when comparing symbol by symbol..\n        /// </summary>\n        public static string Case_insensitive_checker_description {\n            get {\n                return ResourceManager.GetString(\"Case_insensitive_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose a source code checker for this problem. The basic options are:.\n        /// </summary>\n        public static string Choose_code_checker {\n            get {\n                return ResourceManager.GetString(\"Choose_code_checker\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file.\n        /// </summary>\n        public static string Choose_file {\n            get {\n                return ResourceManager.GetString(\"Choose_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose the .zip file with expected input and output for the current problem.\n        ///    &lt;br /&gt;\n        ///    You can download a sample zip file from\n        ///    &lt;a href=&quot;/Content/Demos/DemoTests.zip&quot;&gt;here&lt;/a&gt;..\n        /// </summary>\n        public static string Choose_zip_file {\n            get {\n                return ResourceManager.GetString(\"Choose_zip_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the max points for the problem.\n        /// </summary>\n        public static string Enter_max_points {\n            get {\n                return ResourceManager.GetString(\"Enter_max_points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the memory limit (in bytes) for this problem.\n        /// </summary>\n        public static string Enter_memory_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_memory_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the name of the problem.\n        /// </summary>\n        public static string Enter_name {\n            get {\n                return ResourceManager.GetString(\"Enter_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the order for the current problem.\n        /// </summary>\n        public static string Enter_order {\n            get {\n                return ResourceManager.GetString(\"Enter_order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the source code size limit (in bytes) for this problem.\n        /// </summary>\n        public static string Enter_sorce_code_size_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_sorce_code_size_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter the time limit (in miliseconds) for this problem.\n        /// </summary>\n        public static string Enter_time_limit {\n            get {\n                return ResourceManager.GetString(\"Enter_time_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system compares the results of the participants with the expected output symbol by symbol..\n        /// </summary>\n        public static string Exact_checker_description {\n            get {\n                return ResourceManager.GetString(\"Exact_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to for.\n        /// </summary>\n        public static string For {\n            get {\n                return ResourceManager.GetString(\"For\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to General information.\n        /// </summary>\n        public static string General_info {\n            get {\n                return ResourceManager.GetString(\"General_info\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create problem.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system compares only N digits after the decimal separator. Works only for problems where the answers are floating point numbers positioned on new lines..\n        /// </summary>\n        public static string Precision_checker_description {\n            get {\n                return ResourceManager.GetString(\"Precision_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remove.\n        /// </summary>\n        public static string Remove {\n            get {\n                return ResourceManager.GetString(\"Remove\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resources.\n        /// </summary>\n        public static string Resources {\n            get {\n                return ResourceManager.GetString(\"Resources\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Settings {\n            get {\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose if the participants can see a full feedback for thier submissions (like administrators).\n        /// </summary>\n        public static string Show_detailed_feedback {\n            get {\n                return ResourceManager.GetString(\"Show_detailed_feedback\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose if the participants can see their result in real time.\n        /// </summary>\n        public static string Show_results {\n            get {\n                return ResourceManager.GetString(\"Show_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system first sorts the results of the participants and the expected output, line by line and  then compares them both symbol by symbol..\n        /// </summary>\n        public static string Sort_checker_description {\n            get {\n                return ResourceManager.GetString(\"Sort_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests.\n        /// </summary>\n        public static string Tests {\n            get {\n                return ResourceManager.GetString(\"Tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests (.zip file).\n        /// </summary>\n        public static string Tests_label {\n            get {\n                return ResourceManager.GetString(\"Tests_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system first removes the white spaces in front and in the end of the participant results and then compare them with the expected output symbol by symbol..\n        /// </summary>\n        public static string Trim_checker_description {\n            get {\n                return ResourceManager.GetString(\"Trim_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Yes.\n        /// </summary>\n        public static string Yes {\n            get {\n                return ResourceManager.GetString(\"Yes\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsEdit.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsEdit.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_remove_resource\" xml:space=\"preserve\">\n    <value>Добавете или премахнете ресурс към задачата - условие, авторско решение или видео. Всеки ресурс има име, тип и файл/линк.</value>\n  </data>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- системата не отчита разлика между главна и малка буква като сравнява символ по символ;</value>\n  </data>\n  <data name=\"Choose_code_checker\" xml:space=\"preserve\">\n    <value>Изберете тип проверка на сорс кода на състезателите. Базовите варианти са:</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Избери файл</value>\n  </data>\n  <data name=\"Choose_zip_file\" xml:space=\"preserve\">\n    <value>Изберете .zip файл с тестове за вход и изход към задачата.\n    &lt;br /&gt;\n    Можете да изтеглите примерен файл с тестове\n    &lt;a href=\"/Content/Demos/DemoTests.zip\"&gt;тук&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Enter_max_points\" xml:space=\"preserve\">\n    <value>Промяна на максималния брой точки, които състезателят може да получи от задачата</value>\n  </data>\n  <data name=\"Enter_memory_limit\" xml:space=\"preserve\">\n    <value>Промяна на максималнaта памет в байтове, която състезателят може да достигне с решението си върху задачата</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Промяна на заглавието на задачата</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Промяна на номер под ред на задачата в текущото състезание</value>\n  </data>\n  <data name=\"Enter_sorce_code_size_limit\" xml:space=\"preserve\">\n    <value>Промяна на максималния размер на сорс код в байтове, която състезателят може да изпрати като решение на задачата</value>\n  </data>\n  <data name=\"Enter_time_limit\" xml:space=\"preserve\">\n    <value>Промяна на максимално време в милисекунди, които състезателят може да достигне с решението си върху задачата</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value>- системата проверява резултатите на състезателя с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>към</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>Основна информация</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Промяна на задача</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- само за задачи с резултати съдържащи числа с плаваща запетая на всеки нов ред - системата се съобразява само с първите N на брой цифри след плаващата запетая.</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Премахни</value>\n  </data>\n  <data name=\"Resources\" xml:space=\"preserve\">\n    <value>Ресурси</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Изберете дали участниците ще могат да си виждат пълен feedback на решенията си, както го виждат администраторите</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Изберете дали участниците ще могат да си виждат резултатите в реално време</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо сортира по линии резултатите на състезателя и очаквания изход и след това ги сравнява символ по символ;</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Тестове</value>\n  </data>\n  <data name=\"Tests_label\" xml:space=\"preserve\">\n    <value>Тестове (.zip файл)</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо премахва празните интервали в началото и края на резултатите на състезателя и след това ги сравнява с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"Yes\" xml:space=\"preserve\">\n    <value>Да</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsEdit.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_remove_resource\" xml:space=\"preserve\">\n    <value>Add or remove resource for this problem - problem description, solution or video. Every resource has a name, type and a file/llink.</value>\n  </data>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- the system does uses case insensitive comparison when comparing symbol by symbol.</value>\n  </data>\n  <data name=\"Choose_code_checker\" xml:space=\"preserve\">\n    <value>Choose a source code checker for this problem. The basic options are:</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Choose file</value>\n  </data>\n  <data name=\"Choose_zip_file\" xml:space=\"preserve\">\n    <value>Choose the .zip file with expected input and output for the current problem.\n    &lt;br /&gt;\n    You can download a sample zip file from\n    &lt;a href=\"/Content/Demos/DemoTests.zip\"&gt;here&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Enter_max_points\" xml:space=\"preserve\">\n    <value>Enter the max points for the problem</value>\n  </data>\n  <data name=\"Enter_memory_limit\" xml:space=\"preserve\">\n    <value>Enter the memory limit (in bytes) for this problem</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Enter the name of the problem</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Enter the order for the current problem</value>\n  </data>\n  <data name=\"Enter_sorce_code_size_limit\" xml:space=\"preserve\">\n    <value>Enter the source code size limit (in bytes) for this problem</value>\n  </data>\n  <data name=\"Enter_time_limit\" xml:space=\"preserve\">\n    <value>Enter the time limit (in miliseconds) for this problem</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value>- the system compares the results of the participants with the expected output symbol by symbol.</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>for</value>\n  </data>\n  <data name=\"General_info\" xml:space=\"preserve\">\n    <value>General information</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Create problem</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- the system compares only N digits after the decimal separator. Works only for problems where the answers are floating point numbers positioned on new lines.</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"Resources\" xml:space=\"preserve\">\n    <value>Resources</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Show_detailed_feedback\" xml:space=\"preserve\">\n    <value>Choose if the participants can see a full feedback for thier submissions (like administrators)</value>\n  </data>\n  <data name=\"Show_results\" xml:space=\"preserve\">\n    <value>Choose if the participants can see their result in real time</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- the system first sorts the results of the participants and the expected output, line by line and  then compares them both symbol by symbol.</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Tests</value>\n  </data>\n  <data name=\"Tests_label\" xml:space=\"preserve\">\n    <value>Tests (.zip file)</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- the system first removes the white spaces in front and in the end of the participant results and then compare them with the expected output symbol by symbol.</value>\n  </data>\n  <data name=\"Yes\" xml:space=\"preserve\">\n    <value>Yes</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Problems.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Problems.Views.ProblemsIndex\", typeof(ProblemsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Active.\n        /// </summary>\n        public static string Active {\n            get {\n                return ResourceManager.GetString(\"Active\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category:.\n        /// </summary>\n        public static string Category {\n            get {\n                return ResourceManager.GetString(\"Category\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose category....\n        /// </summary>\n        public static string Choose_category {\n            get {\n                return ResourceManager.GetString(\"Choose_category\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose contest....\n        /// </summary>\n        public static string Choose_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest:.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter contest....\n        /// </summary>\n        public static string Enter_contest {\n            get {\n                return ResourceManager.GetString(\"Enter_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Future.\n        /// </summary>\n        public static string Future {\n            get {\n                return ResourceManager.GetString(\"Future\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Latest.\n        /// </summary>\n        public static string Latest {\n            get {\n                return ResourceManager.GetString(\"Latest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems loading....\n        /// </summary>\n        public static string Problems_loading {\n            get {\n                return ResourceManager.GetString(\"Problems_loading\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest quick access:.\n        /// </summary>\n        public static string Qucik_access_contest {\n            get {\n                return ResourceManager.GetString(\"Qucik_access_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Search by contest.\n        /// </summary>\n        public static string Search_by_contest {\n            get {\n                return ResourceManager.GetString(\"Search_by_contest\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Active\" xml:space=\"preserve\">\n    <value>Активни</value>\n  </data>\n  <data name=\"Category\" xml:space=\"preserve\">\n    <value>Категория:</value>\n  </data>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Избери категория...</value>\n  </data>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Избери състезание...</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Състезание:</value>\n  </data>\n  <data name=\"Enter_contest\" xml:space=\"preserve\">\n    <value>Въведи състезание...</value>\n  </data>\n  <data name=\"Future\" xml:space=\"preserve\">\n    <value>Бъдещи</value>\n  </data>\n  <data name=\"Latest\" xml:space=\"preserve\">\n    <value>Последни</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Задача</value>\n  </data>\n  <data name=\"Problems_loading\" xml:space=\"preserve\">\n    <value>Задачите се зареждат...</value>\n  </data>\n  <data name=\"Qucik_access_contest\" xml:space=\"preserve\">\n    <value>Бърз достъп до състезания:</value>\n  </data>\n  <data name=\"Search_by_contest\" xml:space=\"preserve\">\n    <value>Търсене по състезание:</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Problems/Views/ProblemsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Active\" xml:space=\"preserve\">\n    <value>Active</value>\n  </data>\n  <data name=\"Category\" xml:space=\"preserve\">\n    <value>Category:</value>\n  </data>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Choose category...</value>\n  </data>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Choose contest...</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Contest:</value>\n  </data>\n  <data name=\"Enter_contest\" xml:space=\"preserve\">\n    <value>Enter contest...</value>\n  </data>\n  <data name=\"Future\" xml:space=\"preserve\">\n    <value>Future</value>\n  </data>\n  <data name=\"Latest\" xml:space=\"preserve\">\n    <value>Latest</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Problems</value>\n  </data>\n  <data name=\"Problems_loading\" xml:space=\"preserve\">\n    <value>Problems loading...</value>\n  </data>\n  <data name=\"Qucik_access_contest\" xml:space=\"preserve\">\n    <value>Contest quick access:</value>\n  </data>\n  <data name=\"Search_by_contest\" xml:space=\"preserve\">\n    <value>Search by contest</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/ResourcesControllers.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ResourcesControllers {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ResourcesControllers() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Resources.ResourcesControllers\", typeof(ResourcesControllers).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The file is required!.\n        /// </summary>\n        public static string File_required {\n            get {\n                return ResourceManager.GetString(\"File_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resource is invalid!.\n        /// </summary>\n        public static string Invalid_resource {\n            get {\n                return ResourceManager.GetString(\"Invalid_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The link must not be empty.\n        /// </summary>\n        public static string Link_not_empty {\n            get {\n                return ResourceManager.GetString(\"Link_not_empty\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem not found..\n        /// </summary>\n        public static string Problem_not_found {\n            get {\n                return ResourceManager.GetString(\"Problem_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resource not found.\n        /// </summary>\n        public static string Resource_not_found {\n            get {\n                return ResourceManager.GetString(\"Resource_not_found\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/ResourcesControllers.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/ResourcesControllers.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"File_required\" xml:space=\"preserve\">\n    <value>Файлът е задължителен</value>\n  </data>\n  <data name=\"Invalid_resource\" xml:space=\"preserve\">\n    <value>Ресурсът е невалиден</value>\n  </data>\n  <data name=\"Link_not_empty\" xml:space=\"preserve\">\n    <value>Линкът не може да бъде празен</value>\n  </data>\n  <data name=\"Problem_not_found\" xml:space=\"preserve\">\n    <value>Задачата не е намерена</value>\n  </data>\n  <data name=\"Resource_not_found\" xml:space=\"preserve\">\n    <value>Ресурса не е намерен</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/ResourcesControllers.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"File_required\" xml:space=\"preserve\">\n    <value>The file is required!</value>\n  </data>\n  <data name=\"Invalid_resource\" xml:space=\"preserve\">\n    <value>Resource is invalid!</value>\n  </data>\n  <data name=\"Link_not_empty\" xml:space=\"preserve\">\n    <value>The link must not be empty</value>\n  </data>\n  <data name=\"Problem_not_found\" xml:space=\"preserve\">\n    <value>Problem not found.</value>\n  </data>\n  <data name=\"Resource_not_found\" xml:space=\"preserve\">\n    <value>Resource not found</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesCreate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Resources.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ResourcesCreate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ResourcesCreate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Resources.Views.ResourcesCreate\", typeof(ResourcesCreate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file.\n        /// </summary>\n        public static string Choose_file {\n            get {\n                return ResourceManager.GetString(\"Choose_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file for resource.\n        /// </summary>\n        public static string Choose_file_for_resource {\n            get {\n                return ResourceManager.GetString(\"Choose_file_for_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose resource type - description, solution or video for the problem.\n        /// </summary>\n        public static string Choose_type {\n            get {\n                return ResourceManager.GetString(\"Choose_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter resource name.\n        /// </summary>\n        public static string Enter_name {\n            get {\n                return ResourceManager.GetString(\"Enter_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter resource order.\n        /// </summary>\n        public static string Enter_order {\n            get {\n                return ResourceManager.GetString(\"Enter_order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter video link.\n        /// </summary>\n        public static string Enter_video_link {\n            get {\n                return ResourceManager.GetString(\"Enter_video_link\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File.\n        /// </summary>\n        public static string File {\n            get {\n                return ResourceManager.GetString(\"File\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to for.\n        /// </summary>\n        public static string For {\n            get {\n                return ResourceManager.GetString(\"For\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to New resource.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesCreate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesCreate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Избери файл</value>\n  </data>\n  <data name=\"Choose_file_for_resource\" xml:space=\"preserve\">\n    <value>Изберете файл за ресурса</value>\n  </data>\n  <data name=\"Choose_type\" xml:space=\"preserve\">\n    <value>Изберете тип ресурс - описание, авторско решение или видео към задачата</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Въведете име на ресурса</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Въведете подредба на ресурса</value>\n  </data>\n  <data name=\"Enter_video_link\" xml:space=\"preserve\">\n    <value>Въведете линк към видеото</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>към</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Нов ресурс</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesCreate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Choose file</value>\n  </data>\n  <data name=\"Choose_file_for_resource\" xml:space=\"preserve\">\n    <value>Choose file for resource</value>\n  </data>\n  <data name=\"Choose_type\" xml:space=\"preserve\">\n    <value>Choose resource type - description, solution or video for the problem</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Enter resource name</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Enter resource order</value>\n  </data>\n  <data name=\"Enter_video_link\" xml:space=\"preserve\">\n    <value>Enter video link</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>File</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>for</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>New resource</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesEdit.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Resources.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ResourcesEdit {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ResourcesEdit() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Resources.Views.ResourcesEdit\", typeof(ResourcesEdit).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file.\n        /// </summary>\n        public static string Choose_file {\n            get {\n                return ResourceManager.GetString(\"Choose_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file for resource.\n        /// </summary>\n        public static string Choose_file_for_resource {\n            get {\n                return ResourceManager.GetString(\"Choose_file_for_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose resource type - description, solution or video for the problem.\n        /// </summary>\n        public static string Choose_type {\n            get {\n                return ResourceManager.GetString(\"Choose_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter resource name.\n        /// </summary>\n        public static string Enter_name {\n            get {\n                return ResourceManager.GetString(\"Enter_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter resource order.\n        /// </summary>\n        public static string Enter_order {\n            get {\n                return ResourceManager.GetString(\"Enter_order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter video link.\n        /// </summary>\n        public static string Enter_video_link {\n            get {\n                return ResourceManager.GetString(\"Enter_video_link\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File.\n        /// </summary>\n        public static string File {\n            get {\n                return ResourceManager.GetString(\"File\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to for.\n        /// </summary>\n        public static string For {\n            get {\n                return ResourceManager.GetString(\"For\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesEdit.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesEdit.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Избери файл</value>\n  </data>\n  <data name=\"Choose_file_for_resource\" xml:space=\"preserve\">\n    <value>Изберете файл за ресурса</value>\n  </data>\n  <data name=\"Choose_type\" xml:space=\"preserve\">\n    <value>Изберете тип ресурс - описание, авторско решение или видео към задачата</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Въведете име на ресурса</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Въведете подредба на ресурса</value>\n  </data>\n  <data name=\"Enter_video_link\" xml:space=\"preserve\">\n    <value>Въведете линк към видеото</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>към</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Resources/Views/ResourcesEdit.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Choose file</value>\n  </data>\n  <data name=\"Choose_file_for_resource\" xml:space=\"preserve\">\n    <value>Choose file for resource</value>\n  </data>\n  <data name=\"Choose_type\" xml:space=\"preserve\">\n    <value>Choose resource type - description, solution or video for the problem</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Enter_name\" xml:space=\"preserve\">\n    <value>Enter resource name</value>\n  </data>\n  <data name=\"Enter_order\" xml:space=\"preserve\">\n    <value>Enter resource order</value>\n  </data>\n  <data name=\"Enter_video_link\" xml:space=\"preserve\">\n    <value>Enter video link</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>File</value>\n  </data>\n  <data name=\"For\" xml:space=\"preserve\">\n    <value>for</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/ViewModels/RolesViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Roles.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class RolesViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal RolesViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Roles.ViewModels.RolesViewModels\" +\n                            \"\", typeof(RolesViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to E-mail.\n        /// </summary>\n        public static string Email {\n            get {\n                return ResourceManager.GetString(\"Email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Фамилия.\n        /// </summary>\n        public static string Last_name {\n            get {\n                return ResourceManager.GetString(\"Last_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Име.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Името е задължително!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Няма.\n        /// </summary>\n        public static string Not_entered {\n            get {\n                return ResourceManager.GetString(\"Not_entered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Потребителско име.\n        /// </summary>\n        public static string UserName {\n            get {\n                return ResourceManager.GetString(\"UserName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Потребителското име е задължително!.\n        /// </summary>\n        public static string UserName_required {\n            get {\n                return ResourceManager.GetString(\"UserName_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/ViewModels/RolesViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/ViewModels/RolesViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>E-mail</value>\n  </data>\n  <data name=\"Last_name\" xml:space=\"preserve\">\n    <value>Last name</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"Not_entered\" xml:space=\"preserve\">\n    <value>Not entered</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Username</value>\n  </data>\n  <data name=\"UserName_required\" xml:space=\"preserve\">\n    <value>The username is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/ViewModels/RolesViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>E-mail</value>\n  </data>\n  <data name=\"Last_name\" xml:space=\"preserve\">\n    <value>Фамилия</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Not_entered\" xml:space=\"preserve\">\n    <value>Няма</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Потребителско име</value>\n  </data>\n  <data name=\"UserName_required\" xml:space=\"preserve\">\n    <value>Потребителското име е задължително!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/Views/RolesIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Roles.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class RolesIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal RolesIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Roles.Views.RolesIndex\", typeof(RolesIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add user.\n        /// </summary>\n        public static string Add_user {\n            get {\n                return ResourceManager.GetString(\"Add_user\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose user.\n        /// </summary>\n        public static string Choose_user {\n            get {\n                return ResourceManager.GetString(\"Choose_user\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Roles.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/Views/RolesIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/Views/RolesIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_user\" xml:space=\"preserve\">\n    <value>Добави потребител</value>\n  </data>\n  <data name=\"Choose_user\" xml:space=\"preserve\">\n    <value>Изберете потребител</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Роли</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Roles/Views/RolesIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_user\" xml:space=\"preserve\">\n    <value>Add user</value>\n  </data>\n  <data name=\"Choose_user\" xml:space=\"preserve\">\n    <value>Choose user</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Roles</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/ViewModels/SettingAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Settings.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SettingAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SettingAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Settings.ViewModels.SettingAdmin\" +\n                            \"istration\", typeof(SettingAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value.\n        /// </summary>\n        public static string Value {\n            get {\n                return ResourceManager.GetString(\"Value\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The value is required!.\n        /// </summary>\n        public static string Value_required {\n            get {\n                return ResourceManager.GetString(\"Value_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/ViewModels/SettingAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/ViewModels/SettingAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n  <data name=\"Value\" xml:space=\"preserve\">\n    <value>Стойност</value>\n  </data>\n  <data name=\"Value_required\" xml:space=\"preserve\">\n    <value>Стойността е задължителна!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/ViewModels/SettingAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n  <data name=\"Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <data name=\"Value_required\" xml:space=\"preserve\">\n    <value>The value is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/Views/SettingsAdministrationIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Settings.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SettingsAdministrationIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SettingsAdministrationIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Settings.Views.SettingsAdministr\" +\n                            \"ationIndex\", typeof(SettingsAdministrationIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/Views/SettingsAdministrationIndex.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/Views/SettingsAdministrationIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Settings/Views/SettingsAdministrationIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Shared/Views/Partials/Partials.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Shared.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Partials {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Partials() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Shared.Views.Partials.Partials\", typeof(Partials).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose contest....\n        /// </summary>\n        public static string Choose_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose resource.\n        /// </summary>\n        public static string Choose_resource {\n            get {\n                return ResourceManager.GetString(\"Choose_resource\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copy.\n        /// </summary>\n        public static string Copy {\n            get {\n                return ResourceManager.GetString(\"Copy\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete current questions.\n        /// </summary>\n        public static string Delete_current_questions {\n            get {\n                return ResourceManager.GetString(\"Delete_current_questions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Преглед.\n        /// </summary>\n        public static string Details {\n            get {\n                return ResourceManager.GetString(\"Details\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File.\n        /// </summary>\n        public static string File {\n            get {\n                return ResourceManager.GetString(\"File\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        public static string Type {\n            get {\n                return ResourceManager.GetString(\"Type\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Shared/Views/Partials/Partials.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Shared/Views/Partials/Partials.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Изберете състезание...</value>\n  </data>\n  <data name=\"Choose_resource\" xml:space=\"preserve\">\n    <value>Избери ресурс</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>Копирай</value>\n  </data>\n  <data name=\"Delete_current_questions\" xml:space=\"preserve\">\n    <value>Изтрий текущите въпроси</value>\n  </data>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Преглед</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Shared/Views/Partials/Partials.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Choose contest...</value>\n  </data>\n  <data name=\"Choose_resource\" xml:space=\"preserve\">\n    <value>Choose resource</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"Delete_current_questions\" xml:space=\"preserve\">\n    <value>Delete current questions</value>\n  </data>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Преглед</value>\n  </data>\n  <data name=\"File\" xml:space=\"preserve\">\n    <value>File</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/ViewModels/SubmissionTypeAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.SubmissionTypes.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionTypeAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionTypeAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.SubmissionTypes.ViewModels.Submi\" +\n                            \"ssionTypeAdministration\", typeof(SubmissionTypeAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Additional compiler arguments.\n        /// </summary>\n        public static string Additional_compiler_arguments {\n            get {\n                return ResourceManager.GetString(\"Additional_compiler_arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allow binary files upload.\n        /// </summary>\n        public static string Allow_binary_files_upload {\n            get {\n                return ResourceManager.GetString(\"Allow_binary_files_upload\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allowed file extensions.\n        /// </summary>\n        public static string Allowed_file_extensions {\n            get {\n                return ResourceManager.GetString(\"Allowed_file_extensions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compiler.\n        /// </summary>\n        public static string Compiler_type {\n            get {\n                return ResourceManager.GetString(\"Compiler_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Description.\n        /// </summary>\n        public static string Description {\n            get {\n                return ResourceManager.GetString(\"Description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Execution strategy.\n        /// </summary>\n        public static string Execution_strategy_type {\n            get {\n                return ResourceManager.GetString(\"Execution_strategy_type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is selected?.\n        /// </summary>\n        public static string Is_selected {\n            get {\n                return ResourceManager.GetString(\"Is_selected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Accepted length is between {2} and {1} symbols.\n        /// </summary>\n        public static string Name_length {\n            get {\n                return ResourceManager.GetString(\"Name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name is required!.\n        /// </summary>\n        public static string Name_required {\n            get {\n                return ResourceManager.GetString(\"Name_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/ViewModels/SubmissionTypeAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/ViewModels/SubmissionTypeAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Additional_compiler_arguments\" xml:space=\"preserve\">\n    <value>Допълнителни аргументи</value>\n  </data>\n  <data name=\"Allowed_file_extensions\" xml:space=\"preserve\">\n    <value>Позволени файлове</value>\n  </data>\n  <data name=\"Allow_binary_files_upload\" xml:space=\"preserve\">\n    <value>Позволи качване на файлове</value>\n  </data>\n  <data name=\"Compiler_type\" xml:space=\"preserve\">\n    <value>Компилатор</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Описание</value>\n  </data>\n  <data name=\"Execution_strategy_type\" xml:space=\"preserve\">\n    <value>Execution стратегия</value>\n  </data>\n  <data name=\"Is_selected\" xml:space=\"preserve\">\n    <value>Селектирано</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Позволената дължина е между {2} и {1} символа</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>Името е задължително!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/ViewModels/SubmissionTypeAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Additional_compiler_arguments\" xml:space=\"preserve\">\n    <value>Additional compiler arguments</value>\n  </data>\n  <data name=\"Allowed_file_extensions\" xml:space=\"preserve\">\n    <value>Allowed file extensions</value>\n  </data>\n  <data name=\"Allow_binary_files_upload\" xml:space=\"preserve\">\n    <value>Allow binary files upload</value>\n  </data>\n  <data name=\"Compiler_type\" xml:space=\"preserve\">\n    <value>Compiler</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Execution_strategy_type\" xml:space=\"preserve\">\n    <value>Execution strategy</value>\n  </data>\n  <data name=\"Is_selected\" xml:space=\"preserve\">\n    <value>Is selected?</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Name_length\" xml:space=\"preserve\">\n    <value>Accepted length is between {2} and {1} symbols</value>\n  </data>\n  <data name=\"Name_required\" xml:space=\"preserve\">\n    <value>The name is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/Views/SubmissionTypesIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.SubmissionTypes.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionTypesIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionTypesIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.SubmissionTypes.Views.Submission\" +\n                            \"TypesIndex\", typeof(SubmissionTypesIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission types.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/Views/SubmissionTypesIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/Views/SubmissionTypesIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Типове решение</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/SubmissionTypes/Views/SubmissionTypesIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Submission types</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/SubmissionsControllers.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsControllers {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsControllers() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.SubmissionsControlle\" +\n                            \"rs\", typeof(SubmissionsControllers).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid file extention..\n        /// </summary>\n        public static string Invalid_file_extention {\n            get {\n                return ResourceManager.GetString(\"Invalid_file_extention\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid submission!.\n        /// </summary>\n        public static string Invalid_submission_message {\n            get {\n                return ResourceManager.GetString(\"Invalid_submission_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem is not for the same contest as the choosen participant..\n        /// </summary>\n        public static string Invalid_task_for_participant {\n            get {\n                return ResourceManager.GetString(\"Invalid_task_for_participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission retest started!.\n        /// </summary>\n        public static string Retest_successful {\n            get {\n                return ResourceManager.GetString(\"Retest_successful\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission is over the size limit!.\n        /// </summary>\n        public static string Submission_content_length_invalid {\n            get {\n                return ResourceManager.GetString(\"Submission_content_length_invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission added successfully!.\n        /// </summary>\n        public static string Successful_creation_message {\n            get {\n                return ResourceManager.GetString(\"Successful_creation_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission eddited successfully!.\n        /// </summary>\n        public static string Successful_edit_message {\n            get {\n                return ResourceManager.GetString(\"Successful_edit_message\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Wrong submission type!.\n        /// </summary>\n        public static string Wrong_submision_type {\n            get {\n                return ResourceManager.GetString(\"Wrong_submision_type\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/SubmissionsControllers.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/SubmissionsControllers.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_file_extention\" xml:space=\"preserve\">\n    <value>Невалидно разширение на файл!</value>\n  </data>\n  <data name=\"Invalid_submission_message\" xml:space=\"preserve\">\n    <value>Невалидно решение!</value>\n  </data>\n  <data name=\"Invalid_task_for_participant\" xml:space=\"preserve\">\n    <value>Задачата не е от състезанието, от което е избраният участник!</value>\n  </data>\n  <data name=\"Retest_successful\" xml:space=\"preserve\">\n    <value>Решението беше успешно пуснато за ретестване!</value>\n  </data>\n  <data name=\"Submission_content_length_invalid\" xml:space=\"preserve\">\n    <value>Решението надвишава лимита за големина!</value>\n  </data>\n  <data name=\"Successful_creation_message\" xml:space=\"preserve\">\n    <value>Решението беше добавено успешно!</value>\n  </data>\n  <data name=\"Successful_edit_message\" xml:space=\"preserve\">\n    <value>Решението беше променено успешно!</value>\n  </data>\n  <data name=\"Wrong_submision_type\" xml:space=\"preserve\">\n    <value>Невалиден тип на решението!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/SubmissionsControllers.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_file_extention\" xml:space=\"preserve\">\n    <value>Invalid file extention.</value>\n  </data>\n  <data name=\"Invalid_submission_message\" xml:space=\"preserve\">\n    <value>Invalid submission!</value>\n  </data>\n  <data name=\"Invalid_task_for_participant\" xml:space=\"preserve\">\n    <value>Problem is not for the same contest as the choosen participant.</value>\n  </data>\n  <data name=\"Retest_successful\" xml:space=\"preserve\">\n    <value>Submission retest started!</value>\n  </data>\n  <data name=\"Submission_content_length_invalid\" xml:space=\"preserve\">\n    <value>Submission is over the size limit!</value>\n  </data>\n  <data name=\"Successful_creation_message\" xml:space=\"preserve\">\n    <value>Submission added successfully!</value>\n  </data>\n  <data name=\"Successful_edit_message\" xml:space=\"preserve\">\n    <value>Submission eddited successfully!</value>\n  </data>\n  <data name=\"Wrong_submision_type\" xml:space=\"preserve\">\n    <value>Wrong submission type!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/ViewModels/SubmissionAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.ViewModels.Submissio\" +\n                            \"nAdministration\", typeof(SubmissionAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Content.\n        /// </summary>\n        public static string Content_as_string {\n            get {\n                return ResourceManager.GetString(\"Content_as_string\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Content is required.\n        /// </summary>\n        public static string Content_required {\n            get {\n                return ResourceManager.GetString(\"Content_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File submission.\n        /// </summary>\n        public static string File_submission {\n            get {\n                return ResourceManager.GetString(\"File_submission\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Решенията не мога да бъда изчислени и изчисляващи се едновременно.\n        /// </summary>\n        public static string Invalid_state {\n            get {\n                return ResourceManager.GetString(\"Invalid_state\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participant.\n        /// </summary>\n        public static string Participant {\n            get {\n                return ResourceManager.GetString(\"Participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The participant is required!.\n        /// </summary>\n        public static string Participant_required {\n            get {\n                return ResourceManager.GetString(\"Participant_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Предстои изчисляване.\n        /// </summary>\n        public static string Pending {\n            get {\n                return ResourceManager.GetString(\"Pending\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Points.\n        /// </summary>\n        public static string Points {\n            get {\n                return ResourceManager.GetString(\"Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem.\n        /// </summary>\n        public static string Problem {\n            get {\n                return ResourceManager.GetString(\"Problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The problem is required!.\n        /// </summary>\n        public static string Problem_required {\n            get {\n                return ResourceManager.GetString(\"Problem_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Изчислен.\n        /// </summary>\n        public static string Processed {\n            get {\n                return ResourceManager.GetString(\"Processed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Изчислява се.\n        /// </summary>\n        public static string Processing {\n            get {\n                return ResourceManager.GetString(\"Processing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Статус.\n        /// </summary>\n        public static string Status {\n            get {\n                return ResourceManager.GetString(\"Status\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        public static string Type {\n            get {\n                return ResourceManager.GetString(\"Type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The type is required!.\n        /// </summary>\n        public static string Type_required {\n            get {\n                return ResourceManager.GetString(\"Type_required\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/ViewModels/SubmissionAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/ViewModels/SubmissionAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Content_as_string\" xml:space=\"preserve\">\n    <value>Съдържание</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>Решението е задължително!</value>\n  </data>\n  <data name=\"File_submission\" xml:space=\"preserve\">\n    <value>Файл с решение</value>\n  </data>\n  <data name=\"Invalid_state\" xml:space=\"preserve\">\n    <value>Решенията не мога да бъда изчислени и изчисляващи се едновременно</value>\n  </data>\n  <data name=\"Participant\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n  <data name=\"Participant_required\" xml:space=\"preserve\">\n    <value>Потребителят е задължителен!</value>\n  </data>\n  <data name=\"Pending\" xml:space=\"preserve\">\n    <value>Предстои изчисляване</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Точки</value>\n  </data>\n  <data name=\"Problem\" xml:space=\"preserve\">\n    <value>Задача</value>\n  </data>\n  <data name=\"Problem_required\" xml:space=\"preserve\">\n    <value>Задачата е задължителна!</value>\n  </data>\n  <data name=\"Processed\" xml:space=\"preserve\">\n    <value>Изчислен</value>\n  </data>\n  <data name=\"Processing\" xml:space=\"preserve\">\n    <value>Изчислява се</value>\n  </data>\n  <data name=\"Status\" xml:space=\"preserve\">\n    <value>Статус</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n  <data name=\"Type_required\" xml:space=\"preserve\">\n    <value>Типът е задължителен!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/ViewModels/SubmissionAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Content_as_string\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>Content is required</value>\n  </data>\n  <data name=\"File_submission\" xml:space=\"preserve\">\n    <value>File submission</value>\n  </data>\n  <data name=\"Invalid_state\" xml:space=\"preserve\">\n    <value>Решенията не мога да бъда изчислени и изчисляващи се едновременно</value>\n  </data>\n  <data name=\"Participant\" xml:space=\"preserve\">\n    <value>Participant</value>\n  </data>\n  <data name=\"Participant_required\" xml:space=\"preserve\">\n    <value>The participant is required!</value>\n  </data>\n  <data name=\"Pending\" xml:space=\"preserve\">\n    <value>Предстои изчисляване</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Points</value>\n  </data>\n  <data name=\"Problem\" xml:space=\"preserve\">\n    <value>Problem</value>\n  </data>\n  <data name=\"Problem_required\" xml:space=\"preserve\">\n    <value>The problem is required!</value>\n  </data>\n  <data name=\"Processed\" xml:space=\"preserve\">\n    <value>Изчислен</value>\n  </data>\n  <data name=\"Processing\" xml:space=\"preserve\">\n    <value>Изчислява се</value>\n  </data>\n  <data name=\"Status\" xml:space=\"preserve\">\n    <value>Статус</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"Type_required\" xml:space=\"preserve\">\n    <value>The type is required!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/EditorTemplates/SubmissionsEditorTemplates.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views.EditorTemplates {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsEditorTemplates {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsEditorTemplates() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.EditorTemplate\" +\n                            \"s.SubmissionsEditorTemplates\", typeof(SubmissionsEditorTemplates).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose file....\n        /// </summary>\n        public static string Choose_file {\n            get {\n                return ResourceManager.GetString(\"Choose_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose participant.\n        /// </summary>\n        public static string Choose_participant {\n            get {\n                return ResourceManager.GetString(\"Choose_participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose problem.\n        /// </summary>\n        public static string Choose_problem {\n            get {\n                return ResourceManager.GetString(\"Choose_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose submission type.\n        /// </summary>\n        public static string Choose_submission_type {\n            get {\n                return ResourceManager.GetString(\"Choose_submission_type\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/EditorTemplates/SubmissionsEditorTemplates.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/EditorTemplates/SubmissionsEditorTemplates.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Избери файл..</value>\n  </data>\n  <data name=\"Choose_participant\" xml:space=\"preserve\">\n    <value>Изберете участник</value>\n  </data>\n  <data name=\"Choose_problem\" xml:space=\"preserve\">\n    <value>Изберете задача</value>\n  </data>\n  <data name=\"Choose_submission_type\" xml:space=\"preserve\">\n    <value>Изберете тип събмисия</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/EditorTemplates/SubmissionsEditorTemplates.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_file\" xml:space=\"preserve\">\n    <value>Choose file...</value>\n  </data>\n  <data name=\"Choose_participant\" xml:space=\"preserve\">\n    <value>Choose participant</value>\n  </data>\n  <data name=\"Choose_problem\" xml:space=\"preserve\">\n    <value>Choose problem</value>\n  </data>\n  <data name=\"Choose_submission_type\" xml:space=\"preserve\">\n    <value>Choose submission type</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionForm.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionForm {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionForm() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.Partials.Submi\" +\n                            \"ssionForm\", typeof(SubmissionForm).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save.\n        /// </summary>\n        public static string Save {\n            get {\n                return ResourceManager.GetString(\"Save\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionForm.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionForm.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Запази</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionsGrid.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsGrid {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsGrid() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.Partials.Submi\" +\n                            \"ssionsGrid\", typeof(SubmissionsGrid).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Details.\n        /// </summary>\n        public static string Details {\n            get {\n                return ResourceManager.GetString(\"Details\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Retest.\n        /// </summary>\n        public static string Retest {\n            get {\n                return ResourceManager.GetString(\"Retest\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionsGrid.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionsGrid.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Преглед</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Ретест</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/Partials/SubmissionsGrid.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Details</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Retest</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsCreate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsCreate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsCreate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.SubmissionsCre\" +\n                            \"ate\", typeof(SubmissionsCreate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create submission.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsCreate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsCreate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Създай решение</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsCreate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Create submission</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsDelete.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsDelete {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsDelete() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.SubmissionsDel\" +\n                            \"ete\", typeof(SubmissionsDelete).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete submission from.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsDelete.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsDelete.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтрий</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Изтрий решение на </value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsDelete.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Delete submission from</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.SubmissionsInd\" +\n                            \"ex\", typeof(SubmissionsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose or enter contest.\n        /// </summary>\n        public static string Choose_or_enter_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_or_enter_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Clear.\n        /// </summary>\n        public static string Clear {\n            get {\n                return ResourceManager.GetString(\"Clear\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Изберете или напишете състезание</value>\n  </data>\n  <data name=\"Clear\" xml:space=\"preserve\">\n    <value>Изчистване</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Решения</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Choose_or_enter_contest\" xml:space=\"preserve\">\n    <value>Choose or enter contest</value>\n  </data>\n  <data name=\"Clear\" xml:space=\"preserve\">\n    <value>Clear</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Submissions</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsUpdate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsUpdate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsUpdate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Submissions.Views.SubmissionsUpd\" +\n                            \"ate\", typeof(SubmissionsUpdate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change submission.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsUpdate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsUpdate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Промени решение</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Submissions/Views/SubmissionsUpdate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Change submission</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/TestsControllers.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/TestsControllers.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_problem\" xml:space=\"preserve\">\n    <value>Невалидна задача</value>\n  </data>\n  <data name=\"Invalid_test\" xml:space=\"preserve\">\n    <value>Невалиден тест</value>\n  </data>\n  <data name=\"Invalid_tests\" xml:space=\"preserve\">\n    <value>Невалидни тестове</value>\n  </data>\n  <data name=\"Must_be_zip\" xml:space=\"preserve\">\n    <value>Файлът трябва да бъде .ZIP файл</value>\n  </data>\n  <data name=\"No_empty_file\" xml:space=\"preserve\">\n    <value>Файлът не може да бъде празен</value>\n  </data>\n  <data name=\"Problem_does_not_exist\" xml:space=\"preserve\">\n    <value>Задачата не съществува</value>\n  </data>\n  <data name=\"Tests_addted_to_problem\" xml:space=\"preserve\">\n    <value>Тестовете са добавени към задачата</value>\n  </data>\n  <data name=\"Tests_deleted_successfully\" xml:space=\"preserve\">\n    <value>Тестовете бяха изтрити успешно</value>\n  </data>\n  <data name=\"Test_added_successfully\" xml:space=\"preserve\">\n    <value>Тестът беше добавен успешно.</value>\n  </data>\n  <data name=\"Test_deleted_successfully\" xml:space=\"preserve\">\n    <value>Тестът беше изтрит успешно.</value>\n  </data>\n  <data name=\"Test_edited_successfully\" xml:space=\"preserve\">\n    <value>Тестът беше променен успешно.</value>\n  </data>\n  <data name=\"Zip_damaged\" xml:space=\"preserve\">\n    <value>Zip файлът е повреден</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/TestsControllers.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsControllers {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsControllers() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.TestsControllers\", typeof(TestsControllers).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid problem.\n        /// </summary>\n        public static string Invalid_problem {\n            get {\n                return ResourceManager.GetString(\"Invalid_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid test.\n        /// </summary>\n        public static string Invalid_test {\n            get {\n                return ResourceManager.GetString(\"Invalid_test\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid tests.\n        /// </summary>\n        public static string Invalid_tests {\n            get {\n                return ResourceManager.GetString(\"Invalid_tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File must be a zip.\n        /// </summary>\n        public static string Must_be_zip {\n            get {\n                return ResourceManager.GetString(\"Must_be_zip\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File must not be empty.\n        /// </summary>\n        public static string No_empty_file {\n            get {\n                return ResourceManager.GetString(\"No_empty_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem does not exist.\n        /// </summary>\n        public static string Problem_does_not_exist {\n            get {\n                return ResourceManager.GetString(\"Problem_does_not_exist\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test added successfully..\n        /// </summary>\n        public static string Test_added_successfully {\n            get {\n                return ResourceManager.GetString(\"Test_added_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test deleted successfully..\n        /// </summary>\n        public static string Test_deleted_successfully {\n            get {\n                return ResourceManager.GetString(\"Test_deleted_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test edited successfully.\n        /// </summary>\n        public static string Test_edited_successfully {\n            get {\n                return ResourceManager.GetString(\"Test_edited_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests addted to problem.\n        /// </summary>\n        public static string Tests_addted_to_problem {\n            get {\n                return ResourceManager.GetString(\"Tests_addted_to_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests deleted successfully..\n        /// </summary>\n        public static string Tests_deleted_successfully {\n            get {\n                return ResourceManager.GetString(\"Tests_deleted_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Zip is damaged.\n        /// </summary>\n        public static string Zip_damaged {\n            get {\n                return ResourceManager.GetString(\"Zip_damaged\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/TestsControllers.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Invalid_problem\" xml:space=\"preserve\">\n    <value>Invalid problem</value>\n  </data>\n  <data name=\"Invalid_test\" xml:space=\"preserve\">\n    <value>Invalid test</value>\n  </data>\n  <data name=\"Invalid_tests\" xml:space=\"preserve\">\n    <value>Invalid tests</value>\n  </data>\n  <data name=\"Must_be_zip\" xml:space=\"preserve\">\n    <value>File must be a zip</value>\n  </data>\n  <data name=\"No_empty_file\" xml:space=\"preserve\">\n    <value>File must not be empty</value>\n  </data>\n  <data name=\"Problem_does_not_exist\" xml:space=\"preserve\">\n    <value>Problem does not exist</value>\n  </data>\n  <data name=\"Tests_addted_to_problem\" xml:space=\"preserve\">\n    <value>Tests addted to problem</value>\n  </data>\n  <data name=\"Tests_deleted_successfully\" xml:space=\"preserve\">\n    <value>Tests deleted successfully.</value>\n  </data>\n  <data name=\"Test_added_successfully\" xml:space=\"preserve\">\n    <value>Test added successfully.</value>\n  </data>\n  <data name=\"Test_deleted_successfully\" xml:space=\"preserve\">\n    <value>Test deleted successfully.</value>\n  </data>\n  <data name=\"Test_edited_successfully\" xml:space=\"preserve\">\n    <value>Test edited successfully</value>\n  </data>\n  <data name=\"Zip_damaged\" xml:space=\"preserve\">\n    <value>Zip is damaged</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/ViewModels/TestAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.ViewModels.TestAdministrat\" +\n                            \"ion\", typeof(TestAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Input.\n        /// </summary>\n        public static string Input {\n            get {\n                return ResourceManager.GetString(\"Input\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The input is required!.\n        /// </summary>\n        public static string Input_required {\n            get {\n                return ResourceManager.GetString(\"Input_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Order.\n        /// </summary>\n        public static string Order {\n            get {\n                return ResourceManager.GetString(\"Order\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The order is required!.\n        /// </summary>\n        public static string Order_required {\n            get {\n                return ResourceManager.GetString(\"Order_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Output.\n        /// </summary>\n        public static string Output {\n            get {\n                return ResourceManager.GetString(\"Output\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The output is required!.\n        /// </summary>\n        public static string Output_required {\n            get {\n                return ResourceManager.GetString(\"Output_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem Id.\n        /// </summary>\n        public static string Problem_id {\n            get {\n                return ResourceManager.GetString(\"Problem_id\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem.\n        /// </summary>\n        public static string Problem_name {\n            get {\n                return ResourceManager.GetString(\"Problem_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test runs count.\n        /// </summary>\n        public static string Test_runs_count {\n            get {\n                return ResourceManager.GetString(\"Test_runs_count\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Trial test name.\n        /// </summary>\n        public static string Trial_test_name {\n            get {\n                return ResourceManager.GetString(\"Trial_test_name\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/ViewModels/TestAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/ViewModels/TestAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Състезателен</value>\n  </data>\n  <data name=\"Input\" xml:space=\"preserve\">\n    <value>Input</value>\n  </data>\n  <data name=\"Input_required\" xml:space=\"preserve\">\n    <value>The input is required!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Подредба</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>Подредбата е задължителна!</value>\n  </data>\n  <data name=\"Output\" xml:space=\"preserve\">\n    <value>Output</value>\n  </data>\n  <data name=\"Output_required\" xml:space=\"preserve\">\n    <value>Изхода е задължителен!</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Пробен</value>\n  </data>\n  <data name=\"Problem_id\" xml:space=\"preserve\">\n    <value>ID на задача</value>\n  </data>\n  <data name=\"Problem_name\" xml:space=\"preserve\">\n    <value>Problem</value>\n  </data>\n  <data name=\"Test_runs_count\" xml:space=\"preserve\">\n    <value>Брой изпълнения</value>\n  </data>\n  <data name=\"Trial_test_name\" xml:space=\"preserve\">\n    <value>Пробен тест</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/ViewModels/TestAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Contest</value>\n  </data>\n  <data name=\"Input\" xml:space=\"preserve\">\n    <value>Input</value>\n  </data>\n  <data name=\"Input_required\" xml:space=\"preserve\">\n    <value>The input is required!</value>\n  </data>\n  <data name=\"Order\" xml:space=\"preserve\">\n    <value>Order</value>\n  </data>\n  <data name=\"Order_required\" xml:space=\"preserve\">\n    <value>The order is required!</value>\n  </data>\n  <data name=\"Output\" xml:space=\"preserve\">\n    <value>Output</value>\n  </data>\n  <data name=\"Output_required\" xml:space=\"preserve\">\n    <value>The output is required!</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Practice</value>\n  </data>\n  <data name=\"Problem_id\" xml:space=\"preserve\">\n    <value>Problem Id</value>\n  </data>\n  <data name=\"Problem_name\" xml:space=\"preserve\">\n    <value>Problem</value>\n  </data>\n  <data name=\"Test_runs_count\" xml:space=\"preserve\">\n    <value>Test runs count</value>\n  </data>\n  <data name=\"Trial_test_name\" xml:space=\"preserve\">\n    <value>Trial test name</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsCreate.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsCreate {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsCreate() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsCreate\", typeof(TestsCreate).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Create.\n        /// </summary>\n        public static string Create {\n            get {\n                return ResourceManager.GetString(\"Create\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test creation.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsCreate.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsCreate.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Създай</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Създаване на тест</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsCreate.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Test creation</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDelete.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsDelete {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsDelete() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsDelete\", typeof(TestsDelete).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete test.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to test.\n        /// </summary>\n        public static string Test {\n            get {\n                return ResourceManager.GetString(\"Test\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDelete.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDelete.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтрий</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Изтриване на тест</value>\n  </data>\n  <data name=\"Test\" xml:space=\"preserve\">\n    <value>тест</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDelete.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Delete test</value>\n  </data>\n  <data name=\"Test\" xml:space=\"preserve\">\n    <value>test</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDeleteAll.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsDeleteAll {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsDeleteAll() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsDeleteAll\", typeof(TestsDeleteAll).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Confirm.\n        /// </summary>\n        public static string Confirm {\n            get {\n                return ResourceManager.GetString(\"Confirm\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Are you sure you want to delete all tests for.\n        /// </summary>\n        public static string Delete_confirmation {\n            get {\n                return ResourceManager.GetString(\"Delete_confirmation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete all tests.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDeleteAll.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDeleteAll.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Confirm\" xml:space=\"preserve\">\n    <value>Потвърди</value>\n  </data>\n  <data name=\"Delete_confirmation\" xml:space=\"preserve\">\n    <value>Сигурни ли сте, че искате да изтриете всички тестове на</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Изтриване на всички тестове</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDeleteAll.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Confirm\" xml:space=\"preserve\">\n    <value>Confirm</value>\n  </data>\n  <data name=\"Delete_confirmation\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete all tests for</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Delete all tests</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDetails.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDetails.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Детайли</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>Вижте още</value>\n  </data>\n  <data name=\"Show_executions\" xml:space=\"preserve\">\n    <value>Покажи изпълненията</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDetails.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsDetails {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsDetails() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsDetails\", typeof(TestsDetails).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Details.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to See more.\n        /// </summary>\n        public static string See_more {\n            get {\n                return ResourceManager.GetString(\"See_more\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Show executions.\n        /// </summary>\n        public static string Show_executions {\n            get {\n                return ResourceManager.GetString(\"Show_executions\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsDetails.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Details</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>See more</value>\n  </data>\n  <data name=\"Show_executions\" xml:space=\"preserve\">\n    <value>Show executions</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsEdit.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsEdit {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsEdit() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsEdit\", typeof(TestsEdit).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Back.\n        /// </summary>\n        public static string Back {\n            get {\n                return ResourceManager.GetString(\"Back\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit test.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsEdit.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsEdit.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Назад</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промени</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Промяна на тест</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsEdit.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Back\" xml:space=\"preserve\">\n    <value>Back</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Edit test</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Tests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class TestsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal TestsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Tests.Views.TestsIndex\", typeof(TestsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category:.\n        /// </summary>\n        public static string Category_label {\n            get {\n                return ResourceManager.GetString(\"Category_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose category....\n        /// </summary>\n        public static string Choose_category {\n            get {\n                return ResourceManager.GetString(\"Choose_category\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose contest....\n        /// </summary>\n        public static string Choose_contest {\n            get {\n                return ResourceManager.GetString(\"Choose_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose problem....\n        /// </summary>\n        public static string Choose_problem {\n            get {\n                return ResourceManager.GetString(\"Choose_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest:.\n        /// </summary>\n        public static string Contest_label {\n            get {\n                return ResourceManager.GetString(\"Contest_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete old tests.\n        /// </summary>\n        public static string Delete_old_tests {\n            get {\n                return ResourceManager.GetString(\"Delete_old_tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Enter problem....\n        /// </summary>\n        public static string Enter_problem {\n            get {\n                return ResourceManager.GetString(\"Enter_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Import.\n        /// </summary>\n        public static string Import {\n            get {\n                return ResourceManager.GetString(\"Import\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test files.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem:.\n        /// </summary>\n        public static string Problem_label {\n            get {\n                return ResourceManager.GetString(\"Problem_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Retest problem.\n        /// </summary>\n        public static string Retest_problem {\n            get {\n                return ResourceManager.GetString(\"Retest_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Search by problem:.\n        /// </summary>\n        public static string Search_by_problem {\n            get {\n                return ResourceManager.GetString(\"Search_by_problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests loading....\n        /// </summary>\n        public static string Tests_loading {\n            get {\n                return ResourceManager.GetString(\"Tests_loading\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_label\" xml:space=\"preserve\">\n    <value>Категория:</value>\n  </data>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Избери категория...</value>\n  </data>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Избери състезание...</value>\n  </data>\n  <data name=\"Choose_problem\" xml:space=\"preserve\">\n    <value>Избери проблем...</value>\n  </data>\n  <data name=\"Contest_label\" xml:space=\"preserve\">\n    <value>Състезание:</value>\n  </data>\n  <data name=\"Delete_old_tests\" xml:space=\"preserve\">\n    <value>Изтриване на стари тестове</value>\n  </data>\n  <data name=\"Enter_problem\" xml:space=\"preserve\">\n    <value>Въведи задача...</value>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>Импортиране</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Тестови файлове</value>\n  </data>\n  <data name=\"Problem_label\" xml:space=\"preserve\">\n    <value>Задача:</value>\n  </data>\n  <data name=\"Retest_problem\" xml:space=\"preserve\">\n    <value>Ретестване на задачата</value>\n  </data>\n  <data name=\"Search_by_problem\" xml:space=\"preserve\">\n    <value>Търсене по задача:</value>\n  </data>\n  <data name=\"Tests_loading\" xml:space=\"preserve\">\n    <value>Тестовете се зареждат...</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Tests/Views/TestsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_label\" xml:space=\"preserve\">\n    <value>Category:</value>\n  </data>\n  <data name=\"Choose_category\" xml:space=\"preserve\">\n    <value>Choose category...</value>\n  </data>\n  <data name=\"Choose_contest\" xml:space=\"preserve\">\n    <value>Choose contest...</value>\n  </data>\n  <data name=\"Choose_problem\" xml:space=\"preserve\">\n    <value>Choose problem...</value>\n  </data>\n  <data name=\"Contest_label\" xml:space=\"preserve\">\n    <value>Contest:</value>\n  </data>\n  <data name=\"Delete_old_tests\" xml:space=\"preserve\">\n    <value>Delete old tests</value>\n  </data>\n  <data name=\"Enter_problem\" xml:space=\"preserve\">\n    <value>Enter problem...</value>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>Import</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Test files</value>\n  </data>\n  <data name=\"Problem_label\" xml:space=\"preserve\">\n    <value>Problem:</value>\n  </data>\n  <data name=\"Retest_problem\" xml:space=\"preserve\">\n    <value>Retest problem</value>\n  </data>\n  <data name=\"Search_by_problem\" xml:space=\"preserve\">\n    <value>Search by problem:</value>\n  </data>\n  <data name=\"Tests_loading\" xml:space=\"preserve\">\n    <value>Tests loading...</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/ViewModels/UserProfileAdministration.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Users.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class UserProfileAdministration {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal UserProfileAdministration() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Users.ViewModels.UserProfileAdmi\" +\n                            \"nistration\", typeof(UserProfileAdministration).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Age.\n        /// </summary>\n        public static string Age {\n            get {\n                return ResourceManager.GetString(\"Age\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to City.\n        /// </summary>\n        public static string City {\n            get {\n                return ResourceManager.GetString(\"City\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered city is too long.\n        /// </summary>\n        public static string City_length {\n            get {\n                return ResourceManager.GetString(\"City_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Company.\n        /// </summary>\n        public static string Company {\n            get {\n                return ResourceManager.GetString(\"Company\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered company name is too long.\n        /// </summary>\n        public static string Company_length {\n            get {\n                return ResourceManager.GetString(\"Company_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Date of birth.\n        /// </summary>\n        public static string Date_of_birth {\n            get {\n                return ResourceManager.GetString(\"Date_of_birth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Educational institution.\n        /// </summary>\n        public static string Educational_institution {\n            get {\n                return ResourceManager.GetString(\"Educational_institution\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The educational institution name is too long.\n        /// </summary>\n        public static string Educational_institution_length {\n            get {\n                return ResourceManager.GetString(\"Educational_institution_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Faculty number.\n        /// </summary>\n        public static string Faculty_number {\n            get {\n                return ResourceManager.GetString(\"Faculty_number\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered faculty number is too long.\n        /// </summary>\n        public static string Faculty_number_length {\n            get {\n                return ResourceManager.GetString(\"Faculty_number_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to First name.\n        /// </summary>\n        public static string First_name {\n            get {\n                return ResourceManager.GetString(\"First_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered name is too long.\n        /// </summary>\n        public static string First_name_length {\n            get {\n                return ResourceManager.GetString(\"First_name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Form the old system?.\n        /// </summary>\n        public static string Is_ghoust_user {\n            get {\n                return ResourceManager.GetString(\"Is_ghoust_user\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Job title.\n        /// </summary>\n        public static string Job_title {\n            get {\n                return ResourceManager.GetString(\"Job_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered job title name is too long.\n        /// </summary>\n        public static string Job_title_length {\n            get {\n                return ResourceManager.GetString(\"Job_title_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Last name.\n        /// </summary>\n        public static string Last_name {\n            get {\n                return ResourceManager.GetString(\"Last_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The entered last name is too long.\n        /// </summary>\n        public static string Last_name_length {\n            get {\n                return ResourceManager.GetString(\"Last_name_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid email address.\n        /// </summary>\n        public static string Mail_invalid {\n            get {\n                return ResourceManager.GetString(\"Mail_invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The email is too long!.\n        /// </summary>\n        public static string Mail_length {\n            get {\n                return ResourceManager.GetString(\"Mail_length\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Email is required!.\n        /// </summary>\n        public static string Mail_required {\n            get {\n                return ResourceManager.GetString(\"Mail_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No information.\n        /// </summary>\n        public static string Null_display_text {\n            get {\n                return ResourceManager.GetString(\"Null_display_text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to UserName.\n        /// </summary>\n        public static string UserName {\n            get {\n                return ResourceManager.GetString(\"UserName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/ViewModels/UserProfileAdministration.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/ViewModels/UserProfileAdministration.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Възраст</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>Град</value>\n  </data>\n  <data name=\"City_length\" xml:space=\"preserve\">\n    <value>Въведеният град е твърде дълъг</value>\n  </data>\n  <data name=\"Company\" xml:space=\"preserve\">\n    <value>Месторабота</value>\n  </data>\n  <data name=\"Company_length\" xml:space=\"preserve\">\n    <value>Въведената месторабота е твърде дълга</value>\n  </data>\n  <data name=\"Date_of_birth\" xml:space=\"preserve\">\n    <value>Дата на раждане</value>\n  </data>\n  <data name=\"Educational_institution\" xml:space=\"preserve\">\n    <value>Образование</value>\n  </data>\n  <data name=\"Educational_institution_length\" xml:space=\"preserve\">\n    <value>Въведеното образование е твърде дълго</value>\n  </data>\n  <data name=\"Faculty_number\" xml:space=\"preserve\">\n    <value>Факултетен номер</value>\n  </data>\n  <data name=\"Faculty_number_length\" xml:space=\"preserve\">\n    <value>Въведеният факултетен номер е твърде дълъг</value>\n  </data>\n  <data name=\"First_name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"First_name_length\" xml:space=\"preserve\">\n    <value>Въведеното име е твърде дълго</value>\n  </data>\n  <data name=\"Is_ghoust_user\" xml:space=\"preserve\">\n    <value>От старата система?</value>\n  </data>\n  <data name=\"Job_title\" xml:space=\"preserve\">\n    <value>Позиция</value>\n  </data>\n  <data name=\"Job_title_length\" xml:space=\"preserve\">\n    <value>Въведената позиция е твърде дълга</value>\n  </data>\n  <data name=\"Last_name\" xml:space=\"preserve\">\n    <value>Фамилия</value>\n  </data>\n  <data name=\"Last_name_length\" xml:space=\"preserve\">\n    <value>Въведената фамилия е твърде дълга</value>\n  </data>\n  <data name=\"Mail_invalid\" xml:space=\"preserve\">\n    <value>Невалиден имейл адрес</value>\n  </data>\n  <data name=\"Mail_length\" xml:space=\"preserve\">\n    <value>Въведеният e-mail е твърде дълъг</value>\n  </data>\n  <data name=\"Mail_required\" xml:space=\"preserve\">\n    <value>Email-а е задължителен</value>\n  </data>\n  <data name=\"Null_display_text\" xml:space=\"preserve\">\n    <value>Няма информация</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>Потребителско име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/ViewModels/UserProfileAdministration.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Age</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>City</value>\n  </data>\n  <data name=\"City_length\" xml:space=\"preserve\">\n    <value>The entered city is too long</value>\n  </data>\n  <data name=\"Company\" xml:space=\"preserve\">\n    <value>Company</value>\n  </data>\n  <data name=\"Company_length\" xml:space=\"preserve\">\n    <value>The entered company name is too long</value>\n  </data>\n  <data name=\"Date_of_birth\" xml:space=\"preserve\">\n    <value>Date of birth</value>\n  </data>\n  <data name=\"Educational_institution\" xml:space=\"preserve\">\n    <value>Educational institution</value>\n  </data>\n  <data name=\"Educational_institution_length\" xml:space=\"preserve\">\n    <value>The educational institution name is too long</value>\n  </data>\n  <data name=\"Faculty_number\" xml:space=\"preserve\">\n    <value>Faculty number</value>\n  </data>\n  <data name=\"Faculty_number_length\" xml:space=\"preserve\">\n    <value>The entered faculty number is too long</value>\n  </data>\n  <data name=\"First_name\" xml:space=\"preserve\">\n    <value>First name</value>\n  </data>\n  <data name=\"First_name_length\" xml:space=\"preserve\">\n    <value>The entered name is too long</value>\n  </data>\n  <data name=\"Is_ghoust_user\" xml:space=\"preserve\">\n    <value>Form the old system?</value>\n  </data>\n  <data name=\"Job_title\" xml:space=\"preserve\">\n    <value>Job title</value>\n  </data>\n  <data name=\"Job_title_length\" xml:space=\"preserve\">\n    <value>The entered job title name is too long</value>\n  </data>\n  <data name=\"Last_name\" xml:space=\"preserve\">\n    <value>Last name</value>\n  </data>\n  <data name=\"Last_name_length\" xml:space=\"preserve\">\n    <value>The entered last name is too long</value>\n  </data>\n  <data name=\"Mail_invalid\" xml:space=\"preserve\">\n    <value>Invalid email address</value>\n  </data>\n  <data name=\"Mail_length\" xml:space=\"preserve\">\n    <value>The email is too long!</value>\n  </data>\n  <data name=\"Mail_required\" xml:space=\"preserve\">\n    <value>Email is required!</value>\n  </data>\n  <data name=\"Null_display_text\" xml:space=\"preserve\">\n    <value>No information</value>\n  </data>\n  <data name=\"UserName\" xml:space=\"preserve\">\n    <value>UserName</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/Views/UsersIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Administration.Users.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class UsersIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal UsersIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Administration.Users.Views.UsersIndex\", typeof(UsersIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Users.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/Views/UsersIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/Views/UsersIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Потребители</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Administration/Users/Views/UsersIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Users</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ContestsGeneral.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsGeneral {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsGeneral() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.ContestsGeneral\", typeof(ContestsGeneral).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This submission type does not allow sending binary files.\n        /// </summary>\n        public static string Binary_files_not_allowed {\n            get {\n                return ResourceManager.GetString(\"Binary_files_not_allowed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This category does not exist!.\n        /// </summary>\n        public static string Category_not_found {\n            get {\n                return ResourceManager.GetString(\"Category_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This contest cannot be competed!.\n        /// </summary>\n        public static string Contest_cannot_be_competed {\n            get {\n                return ResourceManager.GetString(\"Contest_cannot_be_competed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This contest cannot be practiced!.\n        /// </summary>\n        public static string Contest_cannot_be_practiced {\n            get {\n                return ResourceManager.GetString(\"Contest_cannot_be_practiced\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid contest id was provided!.\n        /// </summary>\n        public static string Contest_not_found {\n            get {\n                return ResourceManager.GetString(\"Contest_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This contest results are not available!.\n        /// </summary>\n        public static string Contest_results_not_available {\n            get {\n                return ResourceManager.GetString(\"Contest_results_not_available\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid file extension.\n        /// </summary>\n        public static string Invalid_extention {\n            get {\n                return ResourceManager.GetString(\"Invalid_extention\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid request!.\n        /// </summary>\n        public static string Invalid_request {\n            get {\n                return ResourceManager.GetString(\"Invalid_request\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid selection.\n        /// </summary>\n        public static string Invalid_selection {\n            get {\n                return ResourceManager.GetString(\"Invalid_selection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Main categories.\n        /// </summary>\n        public static string Main_categories {\n            get {\n                return ResourceManager.GetString(\"Main_categories\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The problem was not found!.\n        /// </summary>\n        public static string Problem_not_found {\n            get {\n                return ResourceManager.GetString(\"Problem_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You cannot view the results for this problem!.\n        /// </summary>\n        public static string Problem_results_not_available {\n            get {\n                return ResourceManager.GetString(\"Problem_results_not_available\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This resource cannot be downloaded!.\n        /// </summary>\n        public static string Resource_cannot_be_downloaded {\n            get {\n                return ResourceManager.GetString(\"Resource_cannot_be_downloaded\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Solution uploaded..\n        /// </summary>\n        public static string Solution_uploaded {\n            get {\n                return ResourceManager.GetString(\"Solution_uploaded\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid submission requested!.\n        /// </summary>\n        public static string Submission_not_found {\n            get {\n                return ResourceManager.GetString(\"Submission_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This submission was not made by you!.\n        /// </summary>\n        public static string Submission_not_made_by_user {\n            get {\n                return ResourceManager.GetString(\"Submission_not_made_by_user\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The submitted code is too long!.\n        /// </summary>\n        public static string Submission_too_long {\n            get {\n                return ResourceManager.GetString(\"Submission_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Wrong submission type!.\n        /// </summary>\n        public static string Submission_type_not_found {\n            get {\n                return ResourceManager.GetString(\"Submission_type_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission was sent too soon!.\n        /// </summary>\n        public static string Submission_was_sent_too_soon {\n            get {\n                return ResourceManager.GetString(\"Submission_was_sent_too_soon\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please upload file..\n        /// </summary>\n        public static string Upload_file {\n            get {\n                return ResourceManager.GetString(\"Upload_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You are not registered for this exam!.\n        /// </summary>\n        public static string User_is_not_registered_for_exam {\n            get {\n                return ResourceManager.GetString(\"User_is_not_registered_for_exam\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ContestsGeneral.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ContestsGeneral.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Binary_files_not_allowed\" xml:space=\"preserve\">\n    <value>Не е позволено качването на бинарни файлове.</value>\n  </data>\n  <data name=\"Category_not_found\" xml:space=\"preserve\">\n    <value>Такава категория не съществува!</value>\n  </data>\n  <data name=\"Contest_cannot_be_competed\" xml:space=\"preserve\">\n    <value>Това състезание не е отворено за участие!</value>\n  </data>\n  <data name=\"Contest_cannot_be_practiced\" xml:space=\"preserve\">\n    <value>Това състезание не може да се практикува!</value>\n  </data>\n  <data name=\"Contest_not_found\" xml:space=\"preserve\">\n    <value>Невалидно състезание!</value>\n  </data>\n  <data name=\"Contest_results_not_available\" xml:space=\"preserve\">\n    <value>Резултатите за това състезание не са достъпни!</value>\n  </data>\n  <data name=\"Invalid_extention\" xml:space=\"preserve\">\n    <value>Невалидно файлово разширение</value>\n  </data>\n  <data name=\"Invalid_request\" xml:space=\"preserve\">\n    <value>Невалидни данни!</value>\n  </data>\n  <data name=\"Invalid_selection\" xml:space=\"preserve\">\n    <value>Невалидна селекция</value>\n  </data>\n  <data name=\"Main_categories\" xml:space=\"preserve\">\n    <value>Главни категории</value>\n  </data>\n  <data name=\"Problem_not_found\" xml:space=\"preserve\">\n    <value>Не може да бъде намерена задачата!</value>\n  </data>\n  <data name=\"Problem_results_not_available\" xml:space=\"preserve\">\n    <value>Не може да видите резултата за тази задача!</value>\n  </data>\n  <data name=\"Resource_cannot_be_downloaded\" xml:space=\"preserve\">\n    <value>Този ресурс не може да бъде изтеглен!</value>\n  </data>\n  <data name=\"Solution_uploaded\" xml:space=\"preserve\">\n    <value>Решението е качено.</value>\n  </data>\n  <data name=\"Submission_not_found\" xml:space=\"preserve\">\n    <value>Не съществува такова решение!</value>\n  </data>\n  <data name=\"Submission_not_made_by_user\" xml:space=\"preserve\">\n    <value>Това решение не е ваше!</value>\n  </data>\n  <data name=\"Submission_too_long\" xml:space=\"preserve\">\n    <value>Изпратеният код е прекалено дълъг!</value>\n  </data>\n  <data name=\"Submission_type_not_found\" xml:space=\"preserve\">\n    <value>Грешен тип за оценяване на решението!</value>\n  </data>\n  <data name=\"Submission_was_sent_too_soon\" xml:space=\"preserve\">\n    <value>Решението е изпратено прекалено скоро!</value>\n  </data>\n  <data name=\"Upload_file\" xml:space=\"preserve\">\n    <value>Моля качете файл.</value>\n  </data>\n  <data name=\"User_is_not_registered_for_exam\" xml:space=\"preserve\">\n    <value>Не сте регистрирани за това състезание!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ContestsGeneral.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Binary_files_not_allowed\" xml:space=\"preserve\">\n    <value>This submission type does not allow sending binary files</value>\n  </data>\n  <data name=\"Category_not_found\" xml:space=\"preserve\">\n    <value>This category does not exist!</value>\n  </data>\n  <data name=\"Contest_cannot_be_competed\" xml:space=\"preserve\">\n    <value>This contest cannot be competed!</value>\n  </data>\n  <data name=\"Contest_cannot_be_practiced\" xml:space=\"preserve\">\n    <value>This contest cannot be practiced!</value>\n  </data>\n  <data name=\"Contest_not_found\" xml:space=\"preserve\">\n    <value>Invalid contest id was provided!</value>\n  </data>\n  <data name=\"Contest_results_not_available\" xml:space=\"preserve\">\n    <value>This contest results are not available!</value>\n  </data>\n  <data name=\"Invalid_extention\" xml:space=\"preserve\">\n    <value>Invalid file extension</value>\n  </data>\n  <data name=\"Invalid_request\" xml:space=\"preserve\">\n    <value>Invalid request!</value>\n  </data>\n  <data name=\"Invalid_selection\" xml:space=\"preserve\">\n    <value>Invalid selection</value>\n  </data>\n  <data name=\"Main_categories\" xml:space=\"preserve\">\n    <value>Main categories</value>\n  </data>\n  <data name=\"Problem_not_found\" xml:space=\"preserve\">\n    <value>The problem was not found!</value>\n  </data>\n  <data name=\"Problem_results_not_available\" xml:space=\"preserve\">\n    <value>You cannot view the results for this problem!</value>\n  </data>\n  <data name=\"Resource_cannot_be_downloaded\" xml:space=\"preserve\">\n    <value>This resource cannot be downloaded!</value>\n  </data>\n  <data name=\"Solution_uploaded\" xml:space=\"preserve\">\n    <value>Solution uploaded.</value>\n  </data>\n  <data name=\"Submission_not_found\" xml:space=\"preserve\">\n    <value>Invalid submission requested!</value>\n  </data>\n  <data name=\"Submission_not_made_by_user\" xml:space=\"preserve\">\n    <value>This submission was not made by you!</value>\n  </data>\n  <data name=\"Submission_too_long\" xml:space=\"preserve\">\n    <value>The submitted code is too long!</value>\n  </data>\n  <data name=\"Submission_type_not_found\" xml:space=\"preserve\">\n    <value>Wrong submission type!</value>\n  </data>\n  <data name=\"Submission_was_sent_too_soon\" xml:space=\"preserve\">\n    <value>Submission was sent too soon!</value>\n  </data>\n  <data name=\"Upload_file\" xml:space=\"preserve\">\n    <value>Please upload file.</value>\n  </data>\n  <data name=\"User_is_not_registered_for_exam\" xml:space=\"preserve\">\n    <value>You are not registered for this exam!</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsAllContestSubmissionsByUser.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Shared {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsAllContestSubmissionsByUser {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsAllContestSubmissionsByUser() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Shared.ContestsAllContestSubmissionsBy\" +\n                            \"User\", typeof(ContestsAllContestSubmissionsByUser).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compete.\n        /// </summary>\n        public static string Compete {\n            get {\n                return ResourceManager.GetString(\"Compete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compile time error.\n        /// </summary>\n        public static string Compile_time_error {\n            get {\n                return ResourceManager.GetString(\"Compile_time_error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory.\n        /// </summary>\n        public static string Memory {\n            get {\n                return ResourceManager.GetString(\"Memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Not processed yet.\n        /// </summary>\n        public static string Not_processed {\n            get {\n                return ResourceManager.GetString(\"Not_processed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time.\n        /// </summary>\n        public static string Time {\n            get {\n                return ResourceManager.GetString(\"Time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Your submissions.\n        /// </summary>\n        public static string User_submission {\n            get {\n                return ResourceManager.GetString(\"User_submission\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to View.\n        /// </summary>\n        public static string View {\n            get {\n                return ResourceManager.GetString(\"View\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsAllContestSubmissionsByUser.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsAllContestSubmissionsByUser.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Compile_time_error\" xml:space=\"preserve\">\n    <value>Грешка при компилация</value>\n  </data>\n  <data name=\"Memory\" xml:space=\"preserve\">\n    <value>Памет</value>\n  </data>\n  <data name=\"Not_processed\" xml:space=\"preserve\">\n    <value>Не е обработена</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Практика</value>\n  </data>\n  <data name=\"Time\" xml:space=\"preserve\">\n    <value>Време</value>\n  </data>\n  <data name=\"User_submission\" xml:space=\"preserve\">\n    <value>Твоите решения</value>\n  </data>\n  <data name=\"View\" xml:space=\"preserve\">\n    <value>Детайли</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsAllContestSubmissionsByUser.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Compete</value>\n  </data>\n  <data name=\"Compile_time_error\" xml:space=\"preserve\">\n    <value>Compile time error</value>\n  </data>\n  <data name=\"Memory\" xml:space=\"preserve\">\n    <value>Memory</value>\n  </data>\n  <data name=\"Not_processed\" xml:space=\"preserve\">\n    <value>Not processed yet</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Practice</value>\n  </data>\n  <data name=\"Time\" xml:space=\"preserve\">\n    <value>Time</value>\n  </data>\n  <data name=\"User_submission\" xml:space=\"preserve\">\n    <value>Your submissions</value>\n  </data>\n  <data name=\"View\" xml:space=\"preserve\">\n    <value>View</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsProblemPartial.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Shared {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsProblemPartial {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsProblemPartial() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Shared.ContestsProblemPartial\", typeof(ContestsProblemPartial).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allowed memory.\n        /// </summary>\n        public static string Allowed_memory {\n            get {\n                return ResourceManager.GetString(\"Allowed_memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allowed working time.\n        /// </summary>\n        public static string Allowed_working_time {\n            get {\n                return ResourceManager.GetString(\"Allowed_working_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system does not make difference between small and capital letters when comparing the sent code result with the expected output symbol by symbol.\n        /// </summary>\n        public static string Case_insensitive_checker_description {\n            get {\n                return ResourceManager.GetString(\"Case_insensitive_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change.\n        /// </summary>\n        public static string Change_admin_button {\n            get {\n                return ResourceManager.GetString(\"Change_admin_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Checker types:.\n        /// </summary>\n        public static string Checker_types {\n            get {\n                return ResourceManager.GetString(\"Checker_types\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compile time error.\n        /// </summary>\n        public static string Compile_time_error {\n            get {\n                return ResourceManager.GetString(\"Compile_time_error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compiled successfully.\n        /// </summary>\n        public static string Compiled_successfully {\n            get {\n                return ResourceManager.GetString(\"Compiled_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete_admin_button {\n            get {\n                return ResourceManager.GetString(\"Delete_admin_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Details.\n        /// </summary>\n        public static string Details {\n            get {\n                return ResourceManager.GetString(\"Details\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to  - the system compares the sent code result with the expected output symbol by symbol.\n        /// </summary>\n        public static string Exact_checker_description {\n            get {\n                return ResourceManager.GetString(\"Exact_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory.\n        /// </summary>\n        public static string Memory {\n            get {\n                return ResourceManager.GetString(\"Memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Not processed yet.\n        /// </summary>\n        public static string Not_processed {\n            get {\n                return ResourceManager.GetString(\"Not_processed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participants.\n        /// </summary>\n        public static string Participants_admin_button {\n            get {\n                return ResourceManager.GetString(\"Participants_admin_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - only for tasks with end result decimal number - the system compares only the first N digits after the decimal point.\n        /// </summary>\n        public static string Precision_checker_description {\n            get {\n                return ResourceManager.GetString(\"Precision_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem results.\n        /// </summary>\n        public static string Problem_results {\n            get {\n                return ResourceManager.GetString(\"Problem_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system sorts all lines in the sent code result and then compares symbol by symbol with the expected output.\n        /// </summary>\n        public static string Sort_checker_description {\n            get {\n                return ResourceManager.GetString(\"Sort_checker_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions.\n        /// </summary>\n        public static string Submissions {\n            get {\n                return ResourceManager.GetString(\"Submissions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submit.\n        /// </summary>\n        public static string Submit {\n            get {\n                return ResourceManager.GetString(\"Submit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests.\n        /// </summary>\n        public static string Tests_admin_button {\n            get {\n                return ResourceManager.GetString(\"Tests_admin_button\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time.\n        /// </summary>\n        public static string Time {\n            get {\n                return ResourceManager.GetString(\"Time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time and memory used.\n        /// </summary>\n        public static string Time_and_memory {\n            get {\n                return ResourceManager.GetString(\"Time_and_memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to - the system trims the whitespace before and after the sent code result and then compares symbol by symbol with the expected output.\n        /// </summary>\n        public static string Trim_checker_description {\n            get {\n                return ResourceManager.GetString(\"Trim_checker_description\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsProblemPartial.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsProblemPartial.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allowed_memory\" xml:space=\"preserve\">\n    <value>Позволена памет</value>\n  </data>\n  <data name=\"Allowed_working_time\" xml:space=\"preserve\">\n    <value>Позволено време</value>\n  </data>\n  <data name=\"Compiled_successfully\" xml:space=\"preserve\">\n    <value>Успешна компилация</value>\n  </data>\n  <data name=\"Compile_time_error\" xml:space=\"preserve\">\n    <value>Грешка при компилация</value>\n  </data>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Детайли</value>\n  </data>\n  <data name=\"Not_processed\" xml:space=\"preserve\">\n    <value>Още не е обработено</value>\n  </data>\n  <data name=\"Problem_results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n  <data name=\"Submissions\" xml:space=\"preserve\">\n    <value>Изпратени решения</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Изпрати</value>\n  </data>\n  <data name=\"Time_and_memory\" xml:space=\"preserve\">\n    <value>Използвано време и памет</value>\n  </data>\n  <data name=\"Memory\" xml:space=\"preserve\">\n    <value>Памет</value>\n  </data>\n  <data name=\"Time\" xml:space=\"preserve\">\n    <value>Време</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- системата не отчита разлика между главна и малка буква като сравнява символ по символ;</value>\n  </data>\n  <data name=\"Checker_types\" xml:space=\"preserve\">\n    <value>Типове чекери:</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value>- системата проверява резултатите на състезателя с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- само за задачи с резултати съдържащи числа с плаваща запетая на всеки нов ред - системата се съобразява само с първите N на брой цифри след плаващата запетая.</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо сортира по линии резултатите на състезателя и очаквания изход и след това ги сравнява символ по символ;</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- системата първо премахва празните интервали в началото и края на резултатите на състезателя и след това ги сравнява с очаквания изход символ по символ;</value>\n  </data>\n  <data name=\"Change_admin_button\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Delete_admin_button\" xml:space=\"preserve\">\n    <value>Изтриване</value>\n  </data>\n  <data name=\"Participants_admin_button\" xml:space=\"preserve\">\n    <value>Участници</value>\n  </data>\n  <data name=\"Tests_admin_button\" xml:space=\"preserve\">\n    <value>Тестове</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Shared/ContestsProblemPartial.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allowed_memory\" xml:space=\"preserve\">\n    <value>Allowed memory</value>\n  </data>\n  <data name=\"Allowed_working_time\" xml:space=\"preserve\">\n    <value>Allowed working time</value>\n  </data>\n  <data name=\"Compiled_successfully\" xml:space=\"preserve\">\n    <value>Compiled successfully</value>\n  </data>\n  <data name=\"Compile_time_error\" xml:space=\"preserve\">\n    <value>Compile time error</value>\n  </data>\n  <data name=\"Details\" xml:space=\"preserve\">\n    <value>Details</value>\n  </data>\n  <data name=\"Not_processed\" xml:space=\"preserve\">\n    <value>Not processed yet</value>\n  </data>\n  <data name=\"Problem_results\" xml:space=\"preserve\">\n    <value>Problem results</value>\n  </data>\n  <data name=\"Submissions\" xml:space=\"preserve\">\n    <value>Submissions</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Submit</value>\n  </data>\n  <data name=\"Time_and_memory\" xml:space=\"preserve\">\n    <value>Time and memory used</value>\n  </data>\n  <data name=\"Memory\" xml:space=\"preserve\">\n    <value>Memory</value>\n  </data>\n  <data name=\"Time\" xml:space=\"preserve\">\n    <value>Time</value>\n  </data>\n  <data name=\"Case_insensitive_checker_description\" xml:space=\"preserve\">\n    <value>- the system does not make difference between small and capital letters when comparing the sent code result with the expected output symbol by symbol</value>\n  </data>\n  <data name=\"Checker_types\" xml:space=\"preserve\">\n    <value>Checker types:</value>\n  </data>\n  <data name=\"Exact_checker_description\" xml:space=\"preserve\">\n    <value> - the system compares the sent code result with the expected output symbol by symbol</value>\n  </data>\n  <data name=\"Precision_checker_description\" xml:space=\"preserve\">\n    <value>- only for tasks with end result decimal number - the system compares only the first N digits after the decimal point</value>\n  </data>\n  <data name=\"Sort_checker_description\" xml:space=\"preserve\">\n    <value>- the system sorts all lines in the sent code result and then compares symbol by symbol with the expected output</value>\n  </data>\n  <data name=\"Trim_checker_description\" xml:space=\"preserve\">\n    <value>- the system trims the whitespace before and after the sent code result and then compares symbol by symbol with the expected output</value>\n  </data>\n  <data name=\"Change_admin_button\" xml:space=\"preserve\">\n    <value>Change</value>\n  </data>\n  <data name=\"Delete_admin_button\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Participants_admin_button\" xml:space=\"preserve\">\n    <value>Participants</value>\n  </data>\n  <data name=\"Tests_admin_button\" xml:space=\"preserve\">\n    <value>Tests</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ContestsViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.ViewModels.ContestsViewModels\", typeof(ContestsViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Select an answer from the dropdown menu.\n        /// </summary>\n        public static string Answer_required {\n            get {\n                return ResourceManager.GetString(\"Answer_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string Name {\n            get {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Password.\n        /// </summary>\n        public static string Password {\n            get {\n                return ResourceManager.GetString(\"Password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question.\n        /// </summary>\n        public static string Question {\n            get {\n                return ResourceManager.GetString(\"Question\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question with id {0} was not answered..\n        /// </summary>\n        public static string Question_not_answered {\n            get {\n                return ResourceManager.GetString(\"Question_not_answered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Question with id {0} is not in the correct format..\n        /// </summary>\n        public static string Question_not_answered_correctly {\n            get {\n                return ResourceManager.GetString(\"Question_not_answered_correctly\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ContestsViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ContestsViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_required\" xml:space=\"preserve\">\n    <value>Изберете отговор от падащото меню</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Парола</value>\n  </data>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Въпрос</value>\n  </data>\n  <data name=\"Question_not_answered\" xml:space=\"preserve\">\n    <value>Въпрос с id {0} не е отговорен.</value>\n  </data>\n  <data name=\"Question_not_answered_correctly\" xml:space=\"preserve\">\n    <value>Въпрос с id {0} не е отговорен правилно.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ContestsViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_required\" xml:space=\"preserve\">\n    <value>Select an answer from the dropdown menu</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Password</value>\n  </data>\n  <data name=\"Question\" xml:space=\"preserve\">\n    <value>Question</value>\n  </data>\n  <data name=\"Question_not_answered\" xml:space=\"preserve\">\n    <value>Question with id {0} was not answered.</value>\n  </data>\n  <data name=\"Question_not_answered_correctly\" xml:space=\"preserve\">\n    <value>Question with id {0} is not in the correct format.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ProblemsViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProblemsViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProblemsViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.ViewModels.ProblemsViewModels\", typeof(ProblemsViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participant.\n        /// </summary>\n        public static string Participant {\n            get {\n                return ResourceManager.GetString(\"Participant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Result.\n        /// </summary>\n        public static string Result {\n            get {\n                return ResourceManager.GetString(\"Result\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ProblemsViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ProblemsViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Participant\" xml:space=\"preserve\">\n    <value>Участник</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Резултат</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/ProblemsViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Participant\" xml:space=\"preserve\">\n    <value>Participant</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Result</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/SubmissionsViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.ViewModels.SubmissionsViewModels\", typeof(SubmissionsViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compiled successfully.\n        /// </summary>\n        public static string Is_compiled_successfully {\n            get {\n                return ResourceManager.GetString(\"Is_compiled_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max memory.\n        /// </summary>\n        public static string Maximum_memory {\n            get {\n                return ResourceManager.GetString(\"Maximum_memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max time.\n        /// </summary>\n        public static string Maximum_time {\n            get {\n                return ResourceManager.GetString(\"Maximum_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Points.\n        /// </summary>\n        public static string Points {\n            get {\n                return ResourceManager.GetString(\"Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problem.\n        /// </summary>\n        public static string Problem {\n            get {\n                return ResourceManager.GetString(\"Problem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submission date.\n        /// </summary>\n        public static string Submission_date {\n            get {\n                return ResourceManager.GetString(\"Submission_date\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time and memory.\n        /// </summary>\n        public static string Time_and_memory {\n            get {\n                return ResourceManager.GetString(\"Time_and_memory\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        public static string Type {\n            get {\n                return ResourceManager.GetString(\"Type\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/SubmissionsViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/SubmissionsViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Is_compiled_successfully\" xml:space=\"preserve\">\n    <value>Успешна компилация</value>\n  </data>\n  <data name=\"Maximum_memory\" xml:space=\"preserve\">\n    <value>Макс. памет</value>\n  </data>\n  <data name=\"Maximum_time\" xml:space=\"preserve\">\n    <value>Макс. време</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Точки</value>\n  </data>\n  <data name=\"Problem\" xml:space=\"preserve\">\n    <value>Задача</value>\n  </data>\n  <data name=\"Submission_date\" xml:space=\"preserve\">\n    <value>Изпратено на</value>\n  </data>\n  <data name=\"Time_and_memory\" xml:space=\"preserve\">\n    <value>Време и памет</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/ViewModels/SubmissionsViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Is_compiled_successfully\" xml:space=\"preserve\">\n    <value>Compiled successfully</value>\n  </data>\n  <data name=\"Maximum_memory\" xml:space=\"preserve\">\n    <value>Max memory</value>\n  </data>\n  <data name=\"Maximum_time\" xml:space=\"preserve\">\n    <value>Max time</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>Points</value>\n  </data>\n  <data name=\"Problem\" xml:space=\"preserve\">\n    <value>Problem</value>\n  </data>\n  <data name=\"Submission_date\" xml:space=\"preserve\">\n    <value>Submission date</value>\n  </data>\n  <data name=\"Time_and_memory\" xml:space=\"preserve\">\n    <value>Time and memory</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class CompeteIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal CompeteIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Compete.CompeteIndex\", typeof(CompeteIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Add task.\n        /// </summary>\n        public static string Add_task {\n            get {\n                return ResourceManager.GetString(\"Add_task\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No tasks.\n        /// </summary>\n        public static string No_tasks {\n            get {\n                return ResourceManager.GetString(\"No_tasks\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to There are no tasks for this contest, yet.\n        /// </summary>\n        public static string No_tasks_added_yet {\n            get {\n                return ResourceManager.GetString(\"No_tasks_added_yet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice end time.\n        /// </summary>\n        public static string Practice_end_time {\n            get {\n                return ResourceManager.GetString(\"Practice_end_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Remaining time {0} h, {1} m and {2} s.\n        /// </summary>\n        public static string Remaining_time_format {\n            get {\n                return ResourceManager.GetString(\"Remaining_time_format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results.\n        /// </summary>\n        public static string Results {\n            get {\n                return ResourceManager.GetString(\"Results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submit a solution.\n        /// </summary>\n        public static string Submit_solution {\n            get {\n                return ResourceManager.GetString(\"Submit_solution\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_task\" xml:space=\"preserve\">\n    <value>Добави задача</value>\n  </data>\n  <data name=\"No_tasks\" xml:space=\"preserve\">\n    <value>Няма задачи</value>\n  </data>\n  <data name=\"No_tasks_added_yet\" xml:space=\"preserve\">\n    <value>Все още няма добавени задачи към това състезание</value>\n  </data>\n  <data name=\"Practice_end_time\" xml:space=\"preserve\">\n    <value>Край на практиката</value>\n  </data>\n  <data name=\"Remaining_time_format\" xml:space=\"preserve\">\n    <value>Оставащо време {0} ч, {1} м и {2} сек</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n  <data name=\"Submit_solution\" xml:space=\"preserve\">\n    <value>Изпрати решение</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Add_task\" xml:space=\"preserve\">\n    <value>Add task</value>\n  </data>\n  <data name=\"No_tasks\" xml:space=\"preserve\">\n    <value>No tasks</value>\n  </data>\n  <data name=\"No_tasks_added_yet\" xml:space=\"preserve\">\n    <value>There are no tasks for this contest, yet</value>\n  </data>\n  <data name=\"Practice_end_time\" xml:space=\"preserve\">\n    <value>Practice end time</value>\n  </data>\n  <data name=\"Remaining_time_format\" xml:space=\"preserve\">\n    <value>Remaining time {0} h, {1} m and {2} s</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Results</value>\n  </data>\n  <data name=\"Submit_solution\" xml:space=\"preserve\">\n    <value>Submit a solution</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteRegister.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class CompeteRegister {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal CompeteRegister() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Compete.CompeteRegister\", typeof(CompeteRegister).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Password is empty.\n        /// </summary>\n        public static string Empty_Password {\n            get {\n                return ResourceManager.GetString(\"Empty_Password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect password.\n        /// </summary>\n        public static string Incorrect_password {\n            get {\n                return ResourceManager.GetString(\"Incorrect_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please answer all questions.\n        /// </summary>\n        public static string Not_all_questions_answered {\n            get {\n                return ResourceManager.GetString(\"Not_all_questions_answered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Select an answer.\n        /// </summary>\n        public static string Select_dropdown_answer {\n            get {\n                return ResourceManager.GetString(\"Select_dropdown_answer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submit.\n        /// </summary>\n        public static string Submit {\n            get {\n                return ResourceManager.GetString(\"Submit\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteRegister.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteRegister.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Empty_Password\" xml:space=\"preserve\">\n    <value>Паролата не може да бъде празна</value>\n  </data>\n  <data name=\"Incorrect_password\" xml:space=\"preserve\">\n    <value>Грешна парола</value>\n  </data>\n  <data name=\"Not_all_questions_answered\" xml:space=\"preserve\">\n    <value>Моля, отговорете на всички въпроси</value>\n  </data>\n  <data name=\"Select_dropdown_answer\" xml:space=\"preserve\">\n    <value>Изберете отговор</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Изпрати</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Compete/CompeteRegister.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Empty_Password\" xml:space=\"preserve\">\n    <value>Password is empty</value>\n  </data>\n  <data name=\"Incorrect_password\" xml:space=\"preserve\">\n    <value>Incorrect password</value>\n  </data>\n  <data name=\"Not_all_questions_answered\" xml:space=\"preserve\">\n    <value>Please answer all questions</value>\n  </data>\n  <data name=\"Select_dropdown_answer\" xml:space=\"preserve\">\n    <value>Select an answer</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Submit</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Contests/ContestsDetails.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ContestsDetails {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestsDetails() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Contests.ContestsDetails\", typeof(ContestsDetails).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Allowed languages.\n        /// </summary>\n        public static string Allowed_languages {\n            get {\n                return ResourceManager.GetString(\"Allowed_languages\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compete.\n        /// </summary>\n        public static string Compete {\n            get {\n                return ResourceManager.GetString(\"Compete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The contest is active until.\n        /// </summary>\n        public static string Competition_active_until {\n            get {\n                return ResourceManager.GetString(\"Competition_active_until\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest details.\n        /// </summary>\n        public static string Contest_details {\n            get {\n                return ResourceManager.GetString(\"Contest_details\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest participants.\n        /// </summary>\n        public static string Contest_participants {\n            get {\n                return ResourceManager.GetString(\"Contest_participants\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests.\n        /// </summary>\n        public static string Contests {\n            get {\n                return ResourceManager.GetString(\"Contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Full results.\n        /// </summary>\n        public static string Full_results {\n            get {\n                return ResourceManager.GetString(\"Full_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to There is no description for the selected contest..\n        /// </summary>\n        public static string No_contest_description {\n            get {\n                return ResourceManager.GetString(\"No_contest_description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practicing is allowed until.\n        /// </summary>\n        public static string Practice_active_until {\n            get {\n                return ResourceManager.GetString(\"Practice_active_until\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice participants.\n        /// </summary>\n        public static string Practice_participants {\n            get {\n                return ResourceManager.GetString(\"Practice_participants\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems.\n        /// </summary>\n        public static string Problems {\n            get {\n                return ResourceManager.GetString(\"Problems\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The problems for this contest are not public..\n        /// </summary>\n        public static string Problems_are_not_public {\n            get {\n                return ResourceManager.GetString(\"Problems_are_not_public\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results.\n        /// </summary>\n        public static string Results {\n            get {\n                return ResourceManager.GetString(\"Results\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Contests/ContestsDetails.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Contests/ContestsDetails.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allowed_languages\" xml:space=\"preserve\">\n    <value>Позволени езици</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Участвай в състезание</value>\n  </data>\n  <data name=\"Competition_active_until\" xml:space=\"preserve\">\n    <value>Състезанието е активно до</value>\n  </data>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Състезания</value>\n  </data>\n  <data name=\"Contest_details\" xml:space=\"preserve\">\n    <value>Детайли за състезанието</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"No_contest_description\" xml:space=\"preserve\">\n    <value>Няма описание на избраното състезание.</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Практикувай</value>\n  </data>\n  <data name=\"Practice_active_until\" xml:space=\"preserve\">\n    <value>Практикуването е позволено до</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Задачи</value>\n  </data>\n  <data name=\"Problems_are_not_public\" xml:space=\"preserve\">\n    <value>Задачите за това състезание не са публично достъпни.</value>\n  </data>\n  <data name=\"Contest_participants\" xml:space=\"preserve\">\n    <value>Участници в състезанието</value>\n  </data>\n  <data name=\"Practice_participants\" xml:space=\"preserve\">\n    <value>Участници в практиката</value>\n  </data>\n  <data name=\"Full_results\" xml:space=\"preserve\">\n    <value>Пълни резултати</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Contests/ContestsDetails.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Allowed_languages\" xml:space=\"preserve\">\n    <value>Allowed languages</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Compete</value>\n  </data>\n  <data name=\"Competition_active_until\" xml:space=\"preserve\">\n    <value>The contest is active until</value>\n  </data>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Contests</value>\n  </data>\n  <data name=\"Contest_details\" xml:space=\"preserve\">\n    <value>Contest details</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"No_contest_description\" xml:space=\"preserve\">\n    <value>There is no description for the selected contest.</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Practice</value>\n  </data>\n  <data name=\"Practice_active_until\" xml:space=\"preserve\">\n    <value>Practicing is allowed until</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Problems</value>\n  </data>\n  <data name=\"Problems_are_not_public\" xml:space=\"preserve\">\n    <value>The problems for this contest are not public.</value>\n  </data>\n  <data name=\"Contest_participants\" xml:space=\"preserve\">\n    <value>Contest participants</value>\n  </data>\n  <data name=\"Practice_participants\" xml:space=\"preserve\">\n    <value>Practice participants</value>\n  </data>\n  <data name=\"Full_results\" xml:space=\"preserve\">\n    <value>Full results</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Results</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByCategory.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ListByCategory {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ListByCategory() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.List.ListByCategory\", typeof(ListByCategory).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The selected category is empty..\n        /// </summary>\n        public static string Category_is_empty {\n            get {\n                return ResourceManager.GetString(\"Category_is_empty\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compete.\n        /// </summary>\n        public static string Compete {\n            get {\n                return ResourceManager.GetString(\"Compete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Edit {\n            get {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The contest has password.\n        /// </summary>\n        public static string Has_compete_password {\n            get {\n                return ResourceManager.GetString(\"Has_compete_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You need a password to practice.\n        /// </summary>\n        public static string Has_practice_password {\n            get {\n                return ResourceManager.GetString(\"Has_practice_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The contest has questions to be answered.\n        /// </summary>\n        public static string Has_questions_to_be_answered {\n            get {\n                return ResourceManager.GetString(\"Has_questions_to_be_answered\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participant count.\n        /// </summary>\n        public static string Participant_count {\n            get {\n                return ResourceManager.GetString(\"Participant_count\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems.\n        /// </summary>\n        public static string Problems {\n            get {\n                return ResourceManager.GetString(\"Problems\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems count.\n        /// </summary>\n        public static string Problems_count {\n            get {\n                return ResourceManager.GetString(\"Problems_count\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results.\n        /// </summary>\n        public static string Results {\n            get {\n                return ResourceManager.GetString(\"Results\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByCategory.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByCategory.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_is_empty\" xml:space=\"preserve\">\n    <value>Избраната категория е празна.</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Участвай</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"Has_compete_password\" xml:space=\"preserve\">\n    <value>Има парола</value>\n  </data>\n  <data name=\"Has_practice_password\" xml:space=\"preserve\">\n    <value>Състезанието е защитено с парола</value>\n  </data>\n  <data name=\"Has_questions_to_be_answered\" xml:space=\"preserve\">\n    <value>За да участвате в състезанието, трябва да отговорите на въпроси</value>\n  </data>\n  <data name=\"Participant_count\" xml:space=\"preserve\">\n    <value>Участници</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Практикувай</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Задачи</value>\n  </data>\n  <data name=\"Problems_count\" xml:space=\"preserve\">\n    <value>Брой задачи</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByCategory.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Category_is_empty\" xml:space=\"preserve\">\n    <value>The selected category is empty.</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Compete</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Has_compete_password\" xml:space=\"preserve\">\n    <value>The contest has password</value>\n  </data>\n  <data name=\"Has_practice_password\" xml:space=\"preserve\">\n    <value>You need a password to practice</value>\n  </data>\n  <data name=\"Has_questions_to_be_answered\" xml:space=\"preserve\">\n    <value>The contest has questions to be answered</value>\n  </data>\n  <data name=\"Participant_count\" xml:space=\"preserve\">\n    <value>Participant count</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Practice</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Problems</value>\n  </data>\n  <data name=\"Problems_count\" xml:space=\"preserve\">\n    <value>Problems count</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Results</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByType.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ListByType {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ListByType() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.List.ListByType\", typeof(ListByType).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests where {0} is allowed.\n        /// </summary>\n        public static string Contests_with_allowed {\n            get {\n                return ResourceManager.GetString(\"Contests_with_allowed\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByType.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByType.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contests_with_allowed\" xml:space=\"preserve\">\n    <value>Състезания, с позволен {0} като език</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListByType.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contests_with_allowed\" xml:space=\"preserve\">\n    <value>Contests where {0} is allowed</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Categories\" xml:space=\"preserve\">\n    <value>Категории</value>\n  </data>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Състезания</value>\n  </data>\n  <data name=\"Hierarchy\" xml:space=\"preserve\">\n    <value>Йерархия</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Архив състезания</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListIndex.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ListIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ListIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.List.ListIndex\", typeof(ListIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Categories.\n        /// </summary>\n        public static string Categories {\n            get {\n                return ResourceManager.GetString(\"Categories\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests.\n        /// </summary>\n        public static string Contests {\n            get {\n                return ResourceManager.GetString(\"Contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Heirarchy.\n        /// </summary>\n        public static string Hierarchy {\n            get {\n                return ResourceManager.GetString(\"Hierarchy\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests archive.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/List/ListIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Categories\" xml:space=\"preserve\">\n    <value>Categories</value>\n  </data>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Contests</value>\n  </data>\n  <data name=\"Hierarchy\" xml:space=\"preserve\">\n    <value>Heirarchy</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Contests archive</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/Partials/StatsPartial.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views.Partials {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class StatsPartial {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal StatsPartial() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Results.Partials.StatsPartial\", typeof(StatsPartial).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Averege result.\n        /// </summary>\n        public static string Average_result {\n            get {\n                return ResourceManager.GetString(\"Average_result\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to participants.\n        /// </summary>\n        public static string Contestants {\n            get {\n                return ResourceManager.GetString(\"Contestants\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to General statistics.\n        /// </summary>\n        public static string General_statistics {\n            get {\n                return ResourceManager.GetString(\"General_statistics\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max points.\n        /// </summary>\n        public static string Max_points {\n            get {\n                return ResourceManager.GetString(\"Max_points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to max points.\n        /// </summary>\n        public static string Max_points_label {\n            get {\n                return ResourceManager.GetString(\"Max_points_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max result for every task.\n        /// </summary>\n        public static string Max_result_for_task {\n            get {\n                return ResourceManager.GetString(\"Max_result_for_task\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participants in point ranges.\n        /// </summary>\n        public static string Participants_by_points {\n            get {\n                return ResourceManager.GetString(\"Participants_by_points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to points.\n        /// </summary>\n        public static string Points {\n            get {\n                return ResourceManager.GetString(\"Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Points.\n        /// </summary>\n        public static string Points_label {\n            get {\n                return ResourceManager.GetString(\"Points_label\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to 0 points.\n        /// </summary>\n        public static string Zero_points {\n            get {\n                return ResourceManager.GetString(\"Zero_points\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/Partials/StatsPartial.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/Partials/StatsPartial.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Average_result\" xml:space=\"preserve\">\n    <value>Среден резултат</value>\n  </data>\n  <data name=\"Contestants\" xml:space=\"preserve\">\n    <value>участника</value>\n  </data>\n  <data name=\"General_statistics\" xml:space=\"preserve\">\n    <value>Обща статистика</value>\n  </data>\n  <data name=\"Max_points\" xml:space=\"preserve\">\n    <value>Макс точки</value>\n  </data>\n  <data name=\"Max_points_label\" xml:space=\"preserve\">\n    <value>точки макс</value>\n  </data>\n  <data name=\"Max_result_for_task\" xml:space=\"preserve\">\n    <value>Максимален резултат за всяка задача</value>\n  </data>\n  <data name=\"Participants_by_points\" xml:space=\"preserve\">\n    <value>Статистика по диапазон точки</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>точки</value>\n  </data>\n  <data name=\"Points_label\" xml:space=\"preserve\">\n    <value>Точки</value>\n  </data>\n  <data name=\"Zero_points\" xml:space=\"preserve\">\n    <value>0 точки</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/Partials/StatsPartial.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Average_result\" xml:space=\"preserve\">\n    <value>Averege result</value>\n  </data>\n  <data name=\"Contestants\" xml:space=\"preserve\">\n    <value>participants</value>\n  </data>\n  <data name=\"General_statistics\" xml:space=\"preserve\">\n    <value>General statistics</value>\n  </data>\n  <data name=\"Max_points\" xml:space=\"preserve\">\n    <value>Max points</value>\n  </data>\n  <data name=\"Max_points_label\" xml:space=\"preserve\">\n    <value>max points</value>\n  </data>\n  <data name=\"Max_result_for_task\" xml:space=\"preserve\">\n    <value>Max result for every task</value>\n  </data>\n  <data name=\"Participants_by_points\" xml:space=\"preserve\">\n    <value>Participants in point ranges</value>\n  </data>\n  <data name=\"Points\" xml:space=\"preserve\">\n    <value>points</value>\n  </data>\n  <data name=\"Points_label\" xml:space=\"preserve\">\n    <value>Points</value>\n  </data>\n  <data name=\"Zero_points\" xml:space=\"preserve\">\n    <value>0 points</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsFull.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsFull.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_correct\" xml:space=\"preserve\">\n    <value>Правилен отговор</value>\n  </data>\n  <data name=\"Answer_incorrect\" xml:space=\"preserve\">\n    <value>Грешен отговор</value>\n  </data>\n  <data name=\"Average_result_by_minutes\" xml:space=\"preserve\">\n    <value>Среден резултат по минути</value>\n  </data>\n  <data name=\"Full_results\" xml:space=\"preserve\">\n    <value>Детайлни резултати</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Лимит памет</value>\n  </data>\n  <data name=\"No_solution\" xml:space=\"preserve\">\n    <value>Няма решение</value>\n  </data>\n  <data name=\"Public_results\" xml:space=\"preserve\">\n    <value>Публични резултати</value>\n  </data>\n  <data name=\"Runtime_error\" xml:space=\"preserve\">\n    <value>Грешка при изпълнение</value>\n  </data>\n  <data name=\"Subtitle\" xml:space=\"preserve\">\n    <value>{0} участници</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Лимит време</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Пълни резултати за {0}</value>\n  </data>\n  <data name=\"Total\" xml:space=\"preserve\">\n    <value>Общо</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n  <data name=\"UserFullName\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsFull.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ResultsFull {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ResultsFull() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Results.ResultsFull\", typeof(ResultsFull).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Correct answer.\n        /// </summary>\n        public static string Answer_correct {\n            get {\n                return ResourceManager.GetString(\"Answer_correct\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Wrong answer.\n        /// </summary>\n        public static string Answer_incorrect {\n            get {\n                return ResourceManager.GetString(\"Answer_incorrect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Average result by minutes.\n        /// </summary>\n        public static string Average_result_by_minutes {\n            get {\n                return ResourceManager.GetString(\"Average_result_by_minutes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Detailed results.\n        /// </summary>\n        public static string Full_results {\n            get {\n                return ResourceManager.GetString(\"Full_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory limit.\n        /// </summary>\n        public static string Memory_limit {\n            get {\n                return ResourceManager.GetString(\"Memory_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No solution.\n        /// </summary>\n        public static string No_solution {\n            get {\n                return ResourceManager.GetString(\"No_solution\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Public results.\n        /// </summary>\n        public static string Public_results {\n            get {\n                return ResourceManager.GetString(\"Public_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Run-time error.\n        /// </summary>\n        public static string Runtime_error {\n            get {\n                return ResourceManager.GetString(\"Runtime_error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} participants.\n        /// </summary>\n        public static string Subtitle {\n            get {\n                return ResourceManager.GetString(\"Subtitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time limit.\n        /// </summary>\n        public static string Time_limit {\n            get {\n                return ResourceManager.GetString(\"Time_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Full results for {0}.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Total.\n        /// </summary>\n        public static string Total {\n            get {\n                return ResourceManager.GetString(\"Total\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User.\n        /// </summary>\n        public static string User {\n            get {\n                return ResourceManager.GetString(\"User\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string UserFullName {\n            get {\n                return ResourceManager.GetString(\"UserFullName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsFull.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_correct\" xml:space=\"preserve\">\n    <value>Correct answer</value>\n  </data>\n  <data name=\"Answer_incorrect\" xml:space=\"preserve\">\n    <value>Wrong answer</value>\n  </data>\n  <data name=\"Average_result_by_minutes\" xml:space=\"preserve\">\n    <value>Average result by minutes</value>\n  </data>\n  <data name=\"Full_results\" xml:space=\"preserve\">\n    <value>Detailed results</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Memory limit</value>\n  </data>\n  <data name=\"No_solution\" xml:space=\"preserve\">\n    <value>No solution</value>\n  </data>\n  <data name=\"Public_results\" xml:space=\"preserve\">\n    <value>Public results</value>\n  </data>\n  <data name=\"Runtime_error\" xml:space=\"preserve\">\n    <value>Run-time error</value>\n  </data>\n  <data name=\"Subtitle\" xml:space=\"preserve\">\n    <value>{0} participants</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Time limit</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Full results for {0}</value>\n  </data>\n  <data name=\"Total\" xml:space=\"preserve\">\n    <value>Total</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>User</value>\n  </data>\n  <data name=\"UserFullName\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsSimple.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ResultsSimple {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ResultsSimple() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Results.ResultsSimple\", typeof(ResultsSimple).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Detailed results.\n        /// </summary>\n        public static string Detailed_results {\n            get {\n                return ResourceManager.GetString(\"Detailed_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results.\n        /// </summary>\n        public static string Simple_results {\n            get {\n                return ResourceManager.GetString(\"Simple_results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} participants.\n        /// </summary>\n        public static string Subtitle {\n            get {\n                return ResourceManager.GetString(\"Subtitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results for {0}.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Total.\n        /// </summary>\n        public static string Total {\n            get {\n                return ResourceManager.GetString(\"Total\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User.\n        /// </summary>\n        public static string User {\n            get {\n                return ResourceManager.GetString(\"User\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string UserFullName {\n            get {\n                return ResourceManager.GetString(\"UserFullName\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsSimple.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsSimple.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Detailed_results\" xml:space=\"preserve\">\n    <value>Подробни резултати</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Simple_results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n  <data name=\"Subtitle\" xml:space=\"preserve\">\n    <value>{0} участници</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Резултати за {0}</value>\n  </data>\n  <data name=\"Total\" xml:space=\"preserve\">\n    <value>Общо</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>Потребител</value>\n  </data>\n  <data name=\"UserFullName\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Results/ResultsSimple.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Detailed_results\" xml:space=\"preserve\">\n    <value>Detailed results</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Simple_results\" xml:space=\"preserve\">\n    <value>Results</value>\n  </data>\n  <data name=\"Subtitle\" xml:space=\"preserve\">\n    <value>{0} participants</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Results for {0}</value>\n  </data>\n  <data name=\"Total\" xml:space=\"preserve\">\n    <value>Total</value>\n  </data>\n  <data name=\"User\" xml:space=\"preserve\">\n    <value>User</value>\n  </data>\n  <data name=\"UserFullName\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Submissions/SubmissionsView.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Contests.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SubmissionsView {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SubmissionsView() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Contests.Views.Submissions.SubmissionsView\", typeof(SubmissionsView).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Correct answer.\n        /// </summary>\n        public static string Answer_correct {\n            get {\n                return ResourceManager.GetString(\"Answer_correct\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect answer.\n        /// </summary>\n        public static string Answer_incorrect {\n            get {\n                return ResourceManager.GetString(\"Answer_incorrect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Author&apos;s profile.\n        /// </summary>\n        public static string Authors_profile {\n            get {\n                return ResourceManager.GetString(\"Authors_profile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compilation result.\n        /// </summary>\n        public static string Compilation_result {\n            get {\n                return ResourceManager.GetString(\"Compilation_result\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A compile time error occurred..\n        /// </summary>\n        public static string Compile_time_error_occured {\n            get {\n                return ResourceManager.GetString(\"Compile_time_error_occured\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compiled successfully..\n        /// </summary>\n        public static string Compiled_successfully {\n            get {\n                return ResourceManager.GetString(\"Compiled_successfully\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        public static string Delete {\n            get {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Execution result.\n        /// </summary>\n        public static string Execution_result {\n            get {\n                return ResourceManager.GetString(\"Execution_result\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory limit.\n        /// </summary>\n        public static string Memory_limit {\n            get {\n                return ResourceManager.GetString(\"Memory_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Memory used.\n        /// </summary>\n        public static string Memory_used {\n            get {\n                return ResourceManager.GetString(\"Memory_used\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Retest.\n        /// </summary>\n        public static string Retest {\n            get {\n                return ResourceManager.GetString(\"Retest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Run #.\n        /// </summary>\n        public static string Run {\n            get {\n                return ResourceManager.GetString(\"Run\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Runtime error.\n        /// </summary>\n        public static string Runtime_error {\n            get {\n                return ResourceManager.GetString(\"Runtime_error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source code.\n        /// </summary>\n        public static string Source_code {\n            get {\n                return ResourceManager.GetString(\"Source_code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This submission is in queue and will be processed shortly. Please wait..\n        /// </summary>\n        public static string Submission_in_queue {\n            get {\n                return ResourceManager.GetString(\"Submission_in_queue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This submission is deleted!!!.\n        /// </summary>\n        public static string Submission_is_deleted {\n            get {\n                return ResourceManager.GetString(\"Submission_is_deleted\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This submission is being processed at the moment... Please wait..\n        /// </summary>\n        public static string Submission_is_processing {\n            get {\n                return ResourceManager.GetString(\"Submission_is_processing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submissions.\n        /// </summary>\n        public static string Submissions {\n            get {\n                return ResourceManager.GetString(\"Submissions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test #.\n        /// </summary>\n        public static string Test {\n            get {\n                return ResourceManager.GetString(\"Test\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tests.\n        /// </summary>\n        public static string Tests {\n            get {\n                return ResourceManager.GetString(\"Tests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time limit.\n        /// </summary>\n        public static string Time_limit {\n            get {\n                return ResourceManager.GetString(\"Time_limit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time used.\n        /// </summary>\n        public static string Time_used {\n            get {\n                return ResourceManager.GetString(\"Time_used\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Solution #{0} by {1} for problem {2}.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Edit.\n        /// </summary>\n        public static string Update {\n            get {\n                return ResourceManager.GetString(\"Update\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to View code.\n        /// </summary>\n        public static string View_code {\n            get {\n                return ResourceManager.GetString(\"View_code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Zero test #.\n        /// </summary>\n        public static string Zero_test {\n            get {\n                return ResourceManager.GetString(\"Zero_test\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The zero tests are not included in the final result..\n        /// </summary>\n        public static string Zero_tests_not_included_in_result {\n            get {\n                return ResourceManager.GetString(\"Zero_tests_not_included_in_result\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Submissions/SubmissionsView.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Submissions/SubmissionsView.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_correct\" xml:space=\"preserve\">\n    <value>Верен отговор</value>\n  </data>\n  <data name=\"Answer_incorrect\" xml:space=\"preserve\">\n    <value>Грешен отговор</value>\n  </data>\n  <data name=\"Authors_profile\" xml:space=\"preserve\">\n    <value>Профил на автора</value>\n  </data>\n  <data name=\"Compilation_result\" xml:space=\"preserve\">\n    <value>Резултат от компилацията</value>\n  </data>\n  <data name=\"Compiled_successfully\" xml:space=\"preserve\">\n    <value>Успешна компилация.</value>\n  </data>\n  <data name=\"Compile_time_error_occured\" xml:space=\"preserve\">\n    <value>Възникнала е грешка по време на компилацията.</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Изтриване</value>\n  </data>\n  <data name=\"Execution_result\" xml:space=\"preserve\">\n    <value>Резултат от изпълнението</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Недостатъчна памет</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Ретест</value>\n  </data>\n  <data name=\"Runtime_error\" xml:space=\"preserve\">\n    <value>Грешка по време на изпълнение</value>\n  </data>\n  <data name=\"Submissions\" xml:space=\"preserve\">\n    <value>Решения</value>\n  </data>\n  <data name=\"Submission_in_queue\" xml:space=\"preserve\">\n    <value>Решението е в опашката и скоро ще се изпълни. Моля бъдете търпеливи.</value>\n  </data>\n  <data name=\"Submission_is_deleted\" xml:space=\"preserve\">\n    <value>Това решение е изтрито!!!</value>\n  </data>\n  <data name=\"Submission_is_processing\" xml:space=\"preserve\">\n    <value>Решението се изпълнява в момента... Моля бъдете търпеливи.</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Тестове</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Недостатъчно време</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Решение №{0} от {1} към задача {2}</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Промяна</value>\n  </data>\n  <data name=\"View_code\" xml:space=\"preserve\">\n    <value>Виж кода</value>\n  </data>\n  <data name=\"Memory_used\" xml:space=\"preserve\">\n    <value>Използвана памет</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>Изпълнение №</value>\n  </data>\n  <data name=\"Source_code\" xml:space=\"preserve\">\n    <value>Сорс код</value>\n  </data>\n  <data name=\"Test\" xml:space=\"preserve\">\n    <value>Тест №</value>\n  </data>\n  <data name=\"Time_used\" xml:space=\"preserve\">\n    <value>Използвано време</value>\n  </data>\n  <data name=\"Zero_test\" xml:space=\"preserve\">\n    <value>Нулев тест №</value>\n  </data>\n  <data name=\"Zero_tests_not_included_in_result\" xml:space=\"preserve\">\n    <value>Резултатът от нулевите тестове не се включва към крайния резултат.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Contests/Views/Submissions/SubmissionsView.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Answer_correct\" xml:space=\"preserve\">\n    <value>Correct answer</value>\n  </data>\n  <data name=\"Answer_incorrect\" xml:space=\"preserve\">\n    <value>Incorrect answer</value>\n  </data>\n  <data name=\"Authors_profile\" xml:space=\"preserve\">\n    <value>Author's profile</value>\n  </data>\n  <data name=\"Compilation_result\" xml:space=\"preserve\">\n    <value>Compilation result</value>\n  </data>\n  <data name=\"Compiled_successfully\" xml:space=\"preserve\">\n    <value>Compiled successfully.</value>\n  </data>\n  <data name=\"Compile_time_error_occured\" xml:space=\"preserve\">\n    <value>A compile time error occurred.</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Execution_result\" xml:space=\"preserve\">\n    <value>Execution result</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Memory_limit\" xml:space=\"preserve\">\n    <value>Memory limit</value>\n  </data>\n  <data name=\"Memory_used\" xml:space=\"preserve\">\n    <value>Memory used</value>\n  </data>\n  <data name=\"Retest\" xml:space=\"preserve\">\n    <value>Retest</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>Run #</value>\n  </data>\n  <data name=\"Runtime_error\" xml:space=\"preserve\">\n    <value>Runtime error</value>\n  </data>\n  <data name=\"Source_code\" xml:space=\"preserve\">\n    <value>Source code</value>\n  </data>\n  <data name=\"Submissions\" xml:space=\"preserve\">\n    <value>Submissions</value>\n  </data>\n  <data name=\"Submission_in_queue\" xml:space=\"preserve\">\n    <value>This submission is in queue and will be processed shortly. Please wait.</value>\n  </data>\n  <data name=\"Submission_is_deleted\" xml:space=\"preserve\">\n    <value>This submission is deleted!!!</value>\n  </data>\n  <data name=\"Submission_is_processing\" xml:space=\"preserve\">\n    <value>This submission is being processed at the moment... Please wait.</value>\n  </data>\n  <data name=\"Test\" xml:space=\"preserve\">\n    <value>Test #</value>\n  </data>\n  <data name=\"Tests\" xml:space=\"preserve\">\n    <value>Tests</value>\n  </data>\n  <data name=\"Time_limit\" xml:space=\"preserve\">\n    <value>Time limit</value>\n  </data>\n  <data name=\"Time_used\" xml:space=\"preserve\">\n    <value>Time used</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Solution #{0} by {1} for problem {2}</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"View_code\" xml:space=\"preserve\">\n    <value>View code</value>\n  </data>\n  <data name=\"Zero_test\" xml:space=\"preserve\">\n    <value>Zero test #</value>\n  </data>\n  <data name=\"Zero_tests_not_included_in_result\" xml:space=\"preserve\">\n    <value>The zero tests are not included in the final result.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Shared/ProfileProfileInfo.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Users.Shared {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProfileProfileInfo {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProfileProfileInfo() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Users.Shared.ProfileProfileInfo\", typeof(ProfileProfileInfo).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Age.\n        /// </summary>\n        public static string Age {\n            get {\n                return ResourceManager.GetString(\"Age\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to City.\n        /// </summary>\n        public static string City {\n            get {\n                return ResourceManager.GetString(\"City\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compete.\n        /// </summary>\n        public static string Compete {\n            get {\n                return ResourceManager.GetString(\"Compete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contest.\n        /// </summary>\n        public static string Contest {\n            get {\n                return ResourceManager.GetString(\"Contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participations.\n        /// </summary>\n        public static string Participations {\n            get {\n                return ResourceManager.GetString(\"Participations\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Practice.\n        /// </summary>\n        public static string Practice {\n            get {\n                return ResourceManager.GetString(\"Practice\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0}&apos;s profile.\n        /// </summary>\n        public static string Profile_title {\n            get {\n                return ResourceManager.GetString(\"Profile_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Results.\n        /// </summary>\n        public static string Results {\n            get {\n                return ResourceManager.GetString(\"Results\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Settings {\n            get {\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Shared/ProfileProfileInfo.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Shared/ProfileProfileInfo.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Години</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>Град</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Състезание</value>\n  </data>\n  <data name=\"Participations\" xml:space=\"preserve\">\n    <value>Участия</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Практика</value>\n  </data>\n  <data name=\"Profile_title\" xml:space=\"preserve\">\n    <value>Профил на {0}</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Резултати</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Shared/ProfileProfileInfo.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Age</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>City</value>\n  </data>\n  <data name=\"Compete\" xml:space=\"preserve\">\n    <value>Compete</value>\n  </data>\n  <data name=\"Contest\" xml:space=\"preserve\">\n    <value>Contest</value>\n  </data>\n  <data name=\"Participations\" xml:space=\"preserve\">\n    <value>Participations</value>\n  </data>\n  <data name=\"Practice\" xml:space=\"preserve\">\n    <value>Practice</value>\n  </data>\n  <data name=\"Profile_title\" xml:space=\"preserve\">\n    <value>{0}'s profile</value>\n  </data>\n  <data name=\"Results\" xml:space=\"preserve\">\n    <value>Results</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/ViewModels/ProfileViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Users.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProfileViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProfileViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Users.ViewModels.ProfileViewModels\", typeof(ProfileViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Age.\n        /// </summary>\n        public static string Age {\n            get {\n                return ResourceManager.GetString(\"Age\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to City.\n        /// </summary>\n        public static string City {\n            get {\n                return ResourceManager.GetString(\"City\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The city must be less than {1} characters long.\n        /// </summary>\n        public static string City_too_long {\n            get {\n                return ResourceManager.GetString(\"City_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Company.\n        /// </summary>\n        public static string Company {\n            get {\n                return ResourceManager.GetString(\"Company\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The company name must be less than {1} characters long.\n        /// </summary>\n        public static string Company_too_long {\n            get {\n                return ResourceManager.GetString(\"Company_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Date of birth.\n        /// </summary>\n        public static string Date_of_birth {\n            get {\n                return ResourceManager.GetString(\"Date_of_birth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Education institution.\n        /// </summary>\n        public static string Education_institution {\n            get {\n                return ResourceManager.GetString(\"Education_institution\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The education institution must be less than {1} characters long.\n        /// </summary>\n        public static string Education_too_long {\n            get {\n                return ResourceManager.GetString(\"Education_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Email.\n        /// </summary>\n        public static string Email {\n            get {\n                return ResourceManager.GetString(\"Email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Faculty number.\n        /// </summary>\n        public static string Faculty_number {\n            get {\n                return ResourceManager.GetString(\"Faculty_number\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The faculty number must be less than {1} characters long.\n        /// </summary>\n        public static string Faculty_number_too_long {\n            get {\n                return ResourceManager.GetString(\"Faculty_number_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Family.\n        /// </summary>\n        public static string Family_name {\n            get {\n                return ResourceManager.GetString(\"Family_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The family name must be less than {1} characters long.\n        /// </summary>\n        public static string Family_name_too_long {\n            get {\n                return ResourceManager.GetString(\"Family_name_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        public static string First_name {\n            get {\n                return ResourceManager.GetString(\"First_name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The first name must be less than {1} characters long.\n        /// </summary>\n        public static string First_name_too_long {\n            get {\n                return ResourceManager.GetString(\"First_name_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Job title.\n        /// </summary>\n        public static string Job_title {\n            get {\n                return ResourceManager.GetString(\"Job_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The job title must be less than {1} characters long.\n        /// </summary>\n        public static string Job_title_too_long {\n            get {\n                return ResourceManager.GetString(\"Job_title_too_long\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No information.\n        /// </summary>\n        public static string No_information {\n            get {\n                return ResourceManager.GetString(\"No_information\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/ViewModels/ProfileViewModels.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/ViewModels/ProfileViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Години</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>Град</value>\n  </data>\n  <data name=\"City_too_long\" xml:space=\"preserve\">\n    <value>Името на града трябва да е по-кратко от {1} символа</value>\n  </data>\n  <data name=\"Company\" xml:space=\"preserve\">\n    <value>Компания</value>\n  </data>\n  <data name=\"Company_too_long\" xml:space=\"preserve\">\n    <value>Името на компанията трябва е по-кратко от {1} символа</value>\n  </data>\n  <data name=\"Date_of_birth\" xml:space=\"preserve\">\n    <value>Дата на раждане</value>\n  </data>\n  <data name=\"Education_institution\" xml:space=\"preserve\">\n    <value>Образование</value>\n  </data>\n  <data name=\"Education_too_long\" xml:space=\"preserve\">\n    <value>Името на образувателната институция трябва да е по-кратко от {1} символа</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Имейл</value>\n  </data>\n  <data name=\"Faculty_number\" xml:space=\"preserve\">\n    <value>Факултетен номер</value>\n  </data>\n  <data name=\"Faculty_number_too_long\" xml:space=\"preserve\">\n    <value>Факултетния номер трябва да е по-кратък от {1} символа</value>\n  </data>\n  <data name=\"Family_name\" xml:space=\"preserve\">\n    <value>Фамилия</value>\n  </data>\n  <data name=\"Family_name_too_long\" xml:space=\"preserve\">\n    <value>Фамилията трябва да е по-кратко от {1} символа</value>\n  </data>\n  <data name=\"First_name\" xml:space=\"preserve\">\n    <value>Име</value>\n  </data>\n  <data name=\"First_name_too_long\" xml:space=\"preserve\">\n    <value>Името трябва е по-кратко от {1} символа</value>\n  </data>\n  <data name=\"Job_title\" xml:space=\"preserve\">\n    <value>Позиция</value>\n  </data>\n  <data name=\"Job_title_too_long\" xml:space=\"preserve\">\n    <value>Позицията трябва да е по-кратка от {1} символа</value>\n  </data>\n  <data name=\"No_information\" xml:space=\"preserve\">\n    <value>Няма информация</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/ViewModels/ProfileViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Age\" xml:space=\"preserve\">\n    <value>Age</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>City</value>\n  </data>\n  <data name=\"City_too_long\" xml:space=\"preserve\">\n    <value>The city must be less than {1} characters long</value>\n  </data>\n  <data name=\"Company\" xml:space=\"preserve\">\n    <value>Company</value>\n  </data>\n  <data name=\"Company_too_long\" xml:space=\"preserve\">\n    <value>The company name must be less than {1} characters long</value>\n  </data>\n  <data name=\"Date_of_birth\" xml:space=\"preserve\">\n    <value>Date of birth</value>\n  </data>\n  <data name=\"Education_institution\" xml:space=\"preserve\">\n    <value>Education institution</value>\n  </data>\n  <data name=\"Education_too_long\" xml:space=\"preserve\">\n    <value>The education institution must be less than {1} characters long</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email</value>\n  </data>\n  <data name=\"Faculty_number\" xml:space=\"preserve\">\n    <value>Faculty number</value>\n  </data>\n  <data name=\"Faculty_number_too_long\" xml:space=\"preserve\">\n    <value>The faculty number must be less than {1} characters long</value>\n  </data>\n  <data name=\"Family_name\" xml:space=\"preserve\">\n    <value>Family</value>\n  </data>\n  <data name=\"Family_name_too_long\" xml:space=\"preserve\">\n    <value>The family name must be less than {1} characters long</value>\n  </data>\n  <data name=\"First_name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"First_name_too_long\" xml:space=\"preserve\">\n    <value>The first name must be less than {1} characters long</value>\n  </data>\n  <data name=\"Job_title\" xml:space=\"preserve\">\n    <value>Job title</value>\n  </data>\n  <data name=\"Job_title_too_long\" xml:space=\"preserve\">\n    <value>The job title must be less than {1} characters long</value>\n  </data>\n  <data name=\"No_information\" xml:space=\"preserve\">\n    <value>No information</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Profile/ProfileIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Users.Views.Profile {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class ProfileIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ProfileIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Users.Views.Profile.ProfileIndex\", typeof(ProfileIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This user does not exist!.\n        /// </summary>\n        public static string Not_found {\n            get {\n                return ResourceManager.GetString(\"Not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Profile.\n        /// </summary>\n        public static string Profile {\n            get {\n                return ResourceManager.GetString(\"Profile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0}&apos;s profile.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Profile/ProfileIndex.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Profile/ProfileIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Not_found\" xml:space=\"preserve\">\n    <value>Този потребител не съществува!</value>\n  </data>\n  <data name=\"Profile\" xml:space=\"preserve\">\n    <value>Профил</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Профил на {0}</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Profile/ProfileIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Not_found\" xml:space=\"preserve\">\n    <value>This user does not exist!</value>\n  </data>\n  <data name=\"Profile\" xml:space=\"preserve\">\n    <value>Profile</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>{0}'s profile</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Settings/SettingsIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Areas.Users.Views.Settings {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SettingsIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SettingsIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Areas.Users.Views.Settings.SettingsIndex\", typeof(SettingsIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cancel.\n        /// </summary>\n        public static string Cancel {\n            get {\n                return ResourceManager.GetString(\"Cancel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change your email.\n        /// </summary>\n        public static string Change_email {\n            get {\n                return ResourceManager.GetString(\"Change_email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Change your password.\n        /// </summary>\n        public static string Change_password {\n            get {\n                return ResourceManager.GetString(\"Change_password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Email.\n        /// </summary>\n        public static string Email {\n            get {\n                return ResourceManager.GetString(\"Email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error - please log into your profile..\n        /// </summary>\n        public static string Not_logged_in {\n            get {\n                return ResourceManager.GetString(\"Not_logged_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Password.\n        /// </summary>\n        public static string Password {\n            get {\n                return ResourceManager.GetString(\"Password\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Profile.\n        /// </summary>\n        public static string Profile {\n            get {\n                return ResourceManager.GetString(\"Profile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save.\n        /// </summary>\n        public static string Save {\n            get {\n                return ResourceManager.GetString(\"Save\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Settings {\n            get {\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The settings were successfully saved.\n        /// </summary>\n        public static string Settings_were_saved {\n            get {\n                return ResourceManager.GetString(\"Settings_were_saved\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Username.\n        /// </summary>\n        public static string Username {\n            get {\n                return ResourceManager.GetString(\"Username\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Settings/SettingsIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Settings/SettingsIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Отказ</value>\n  </data>\n  <data name=\"Change_email\" xml:space=\"preserve\">\n    <value>Промяна на имейл</value>\n  </data>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Промяна на паролата</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Имейл</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Not_logged_in\" xml:space=\"preserve\">\n    <value>Грешка - моля влезте в профила си, за да промените настройките</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Парола</value>\n  </data>\n  <data name=\"Profile\" xml:space=\"preserve\">\n    <value>Профил</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Запази</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"Settings_were_saved\" xml:space=\"preserve\">\n    <value>Настройки бяха успешно запазени</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Потребителско име</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Areas/Users/Views/Settings/SettingsIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Change_email\" xml:space=\"preserve\">\n    <value>Change your email</value>\n  </data>\n  <data name=\"Change_password\" xml:space=\"preserve\">\n    <value>Change your password</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Not_logged_in\" xml:space=\"preserve\">\n    <value>Error - please log into your profile.</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Password</value>\n  </data>\n  <data name=\"Profile\" xml:space=\"preserve\">\n    <value>Profile</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Settings_were_saved\" xml:space=\"preserve\">\n    <value>The settings were successfully saved</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Username</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Base/Main.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Base {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Main {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Main() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Base.Main\", typeof(Main).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You have not set a password for your profile. Please set your password using &lt;a href=&quot;/Account/Manage&quot;&gt;this link&lt;/a&gt;..\n        /// </summary>\n        public static string Password_not_set {\n            get {\n                return ResourceManager.GetString(\"Password_not_set\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Your username contains symbols that are not allowed, is shorter than 5 characters or is longer than 15 characters. You can change it using &lt;a href=&quot;/Account/ChangeUsername&quot;&gt;this link&lt;/a&gt;..\n        /// </summary>\n        public static string Username_in_invalid_format {\n            get {\n                return ResourceManager.GetString(\"Username_in_invalid_format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Welcome to the new version of the BGCoder.com system!&lt;br /&gt;All data (except user passwords) were transferred from the old version of the system to the new one.&lt;br /&gt;If you had an account in the old system you should use the &quot;&lt;a href=&quot;/Account/ForgottenPassword&quot;&gt;forgotten password&lt;/a&gt;&quot; link to activate your account in the new system..\n        /// </summary>\n        public static string Welcome_to_the_new_bgcoder_and_change_password {\n            get {\n                return ResourceManager.GetString(\"Welcome_to_the_new_bgcoder_and_change_password\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Base/Main.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Base/Main.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Password_not_set\" xml:space=\"preserve\">\n    <value>Нямате парола за вход в сайта. Моля сложете си парола от &lt;a href=\"/Account/Manage\"&gt;този линк&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Username_in_invalid_format\" xml:space=\"preserve\">\n    <value>Вашето потребителско име съдържа непозволени символи, по-късо е от 5 символа или е по-дълго от 15 символа. Можете да го смените от &lt;a href=\"/Account/ChangeUsername\"&gt;този линк&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Welcome_to_the_new_bgcoder_and_change_password\" xml:space=\"preserve\">\n    <value>Добре дошли в новата версия на системата BGCoder.com!&lt;br /&gt;Всички данни (с изключение на потребителските пароли) са прехвърлени от старата версия.&lt;br /&gt;Ако имате регистрация в старата система, трябва да използвате модула \"&lt;a href=\"/Account/ForgottenPassword\"&gt;забравена парола&lt;/a&gt;\", за да активирате акаунта си в новата система.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Base/Main.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Password_not_set\" xml:space=\"preserve\">\n    <value>You have not set a password for your profile. Please set your password using &lt;a href=\"/Account/Manage\"&gt;this link&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Username_in_invalid_format\" xml:space=\"preserve\">\n    <value>Your username contains symbols that are not allowed, is shorter than 5 characters or is longer than 15 characters. You can change it using &lt;a href=\"/Account/ChangeUsername\"&gt;this link&lt;/a&gt;.</value>\n  </data>\n  <data name=\"Welcome_to_the_new_bgcoder_and_change_password\" xml:space=\"preserve\">\n    <value>Welcome to the new version of the BGCoder.com system!&lt;br /&gt;All data (except user passwords) were transferred from the old version of the system to the new one.&lt;br /&gt;If you had an account in the old system you should use the \"&lt;a href=\"/Account/ForgottenPassword\"&gt;forgotten password&lt;/a&gt;\" link to activate your account in the new system.</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/ViewModels/FeedbackViewModels.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Feedback.ViewModels {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class FeedbackViewModels {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal FeedbackViewModels() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Feedback.ViewModels.FeedbackViewModels\", typeof(FeedbackViewModels).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Content.\n        /// </summary>\n        public static string Content {\n            get {\n                return ResourceManager.GetString(\"Content\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please enter your feedback.\n        /// </summary>\n        public static string Content_required {\n            get {\n                return ResourceManager.GetString(\"Content_required\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The content must be at least {2} characters long.\n        /// </summary>\n        public static string Content_too_short {\n            get {\n                return ResourceManager.GetString(\"Content_too_short\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Email.\n        /// </summary>\n        public static string Email {\n            get {\n                return ResourceManager.GetString(\"Email\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid email address provided.\n        /// </summary>\n        public static string Invalid_email {\n            get {\n                return ResourceManager.GetString(\"Invalid_email\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/ViewModels/FeedbackViewModels.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/ViewModels/FeedbackViewModels.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Съдържание</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>Моля, въведете съдържание</value>\n  </data>\n  <data name=\"Content_too_short\" xml:space=\"preserve\">\n    <value>Обратната връзка трябва да е поне {2} символа</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Имейл</value>\n  </data>\n  <data name=\"Invalid_email\" xml:space=\"preserve\">\n    <value>Невалиден имейл адрес</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/ViewModels/FeedbackViewModels.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Content_required\" xml:space=\"preserve\">\n    <value>Please enter your feedback</value>\n  </data>\n  <data name=\"Content_too_short\" xml:space=\"preserve\">\n    <value>The content must be at least {2} characters long</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email</value>\n  </data>\n  <data name=\"Invalid_email\" xml:space=\"preserve\">\n    <value>Invalid email address provided</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackIndex.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Feedback.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class FeedbackIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal FeedbackIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Feedback.Views.FeedbackIndex\", typeof(FeedbackIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Thank you for your feedback! We will try to address the issue as soon as possible!.\n        /// </summary>\n        public static string Feedback_submitted {\n            get {\n                return ResourceManager.GetString(\"Feedback_submitted\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid Captcha, please try again.\n        /// </summary>\n        public static string Invalid_captcha {\n            get {\n                return ResourceManager.GetString(\"Invalid_captcha\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Submit.\n        /// </summary>\n        public static string Submit {\n            get {\n                return ResourceManager.GetString(\"Submit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Feedback.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackIndex.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Feedback_submitted\" xml:space=\"preserve\">\n    <value>Благодарим ви за обратната връзка. Ще се постараем да поправим проблема възможно най-скоро!</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Invalid_captcha\" xml:space=\"preserve\">\n    <value>Грешно въведен Captcha, моля опитайте отново</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Изпрати</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Обратна връзка</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Feedback_submitted\" xml:space=\"preserve\">\n    <value>Thank you for your feedback! We will try to address the issue as soon as possible!</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Invalid_captcha\" xml:space=\"preserve\">\n    <value>Invalid Captcha, please try again</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Submit</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Feedback</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackSubmitted.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Feedback.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class FeedbackSubmitted {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal FeedbackSubmitted() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Feedback.Views.FeedbackSubmitted\", typeof(FeedbackSubmitted).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Feedback.\n        /// </summary>\n        public static string Feedback {\n            get {\n                return ResourceManager.GetString(\"Feedback\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Home {\n            get {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Feedback successfully submitted.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackSubmitted.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackSubmitted.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Feedback\" xml:space=\"preserve\">\n    <value>Обратна връзка</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Успешно изпратена обратна връзка</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Feedback/Views/FeedbackSubmitted.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Feedback\" xml:space=\"preserve\">\n    <value>Feedback</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Feedback successfully submitted</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Global.Designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34014\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option or rebuild the Visual Studio project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Web.Application.StronglyTypedResourceProxyBuilder\", \"12.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Global {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Global() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Resources.Global\", global::System.Reflection.Assembly.Load(\"App_GlobalResources\"));\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Open Judge System (OJS).\n        /// </summary>\n        internal static string SystemName {\n            get {\n                return ResourceManager.GetString(\"SystemName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to 1.5.20150729.95737d0.\n        /// </summary>\n        internal static string SystemVersion {\n            get {\n                return ResourceManager.GetString(\"SystemVersion\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Global.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"SystemName\" xml:space=\"preserve\">\n    <value>Open Judge System (OJS)</value>\n  </data>\n  <data name=\"SystemVersion\" xml:space=\"preserve\">\n    <value>1.5.20150729.95737d0</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Home/Views/Index.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Home/Views/Index.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Active_contests\" xml:space=\"preserve\">\n    <value>Активни състезания</value>\n  </data>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Администрация</value>\n  </data>\n  <data name=\"Ended\" xml:space=\"preserve\">\n    <value>Приключило на</value>\n  </data>\n  <data name=\"Hour\" xml:space=\"preserve\">\n    <value>час</value>\n  </data>\n  <data name=\"Hours\" xml:space=\"preserve\">\n    <value>часа</value>\n  </data>\n  <data name=\"News\" xml:space=\"preserve\">\n    <value>Новини</value>\n  </data>\n  <data name=\"No_previous_contests\" xml:space=\"preserve\">\n    <value>Няма предишни състезания</value>\n  </data>\n  <data name=\"No_upcoming_contests\" xml:space=\"preserve\">\n    <value>Няма предстоящи състезания</value>\n  </data>\n  <data name=\"Participate\" xml:space=\"preserve\">\n    <value>Участвай</value>\n  </data>\n  <data name=\"Previous_contests\" xml:space=\"preserve\">\n    <value>Предишни състезания</value>\n  </data>\n  <data name=\"Project_subtitle\" xml:space=\"preserve\">\n    <value>Онлайн задачи по програмиране</value>\n  </data>\n  <data name=\"Project_title\" xml:space=\"preserve\">\n    <value>BGCoder</value>\n  </data>\n  <data name=\"Remaining_time\" xml:space=\"preserve\">\n    <value>Оставащо време: {0} {1} и {2} минути</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>Вижте още</value>\n  </data>\n  <data name=\"Starts\" xml:space=\"preserve\">\n    <value>Започва на</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Начало</value>\n  </data>\n  <data name=\"Upcoming_contests\" xml:space=\"preserve\">\n    <value>Предстоящи състезания</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Home/Views/Index.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Home.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Index {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Index() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Home.Views.Index\", typeof(Index).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Active contests.\n        /// </summary>\n        public static string Active_contests {\n            get {\n                return ResourceManager.GetString(\"Active_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Administration.\n        /// </summary>\n        public static string Administration {\n            get {\n                return ResourceManager.GetString(\"Administration\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ended.\n        /// </summary>\n        public static string Ended {\n            get {\n                return ResourceManager.GetString(\"Ended\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to hour.\n        /// </summary>\n        public static string Hour {\n            get {\n                return ResourceManager.GetString(\"Hour\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to hours.\n        /// </summary>\n        public static string Hours {\n            get {\n                return ResourceManager.GetString(\"Hours\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to News.\n        /// </summary>\n        public static string News {\n            get {\n                return ResourceManager.GetString(\"News\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No previous contests.\n        /// </summary>\n        public static string No_previous_contests {\n            get {\n                return ResourceManager.GetString(\"No_previous_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No upcoming contests.\n        /// </summary>\n        public static string No_upcoming_contests {\n            get {\n                return ResourceManager.GetString(\"No_upcoming_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Participate.\n        /// </summary>\n        public static string Participate {\n            get {\n                return ResourceManager.GetString(\"Participate\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Previous contests.\n        /// </summary>\n        public static string Previous_contests {\n            get {\n                return ResourceManager.GetString(\"Previous_contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Solve programming problems online.\n        /// </summary>\n        public static string Project_subtitle {\n            get {\n                return ResourceManager.GetString(\"Project_subtitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to BGCoder.\n        /// </summary>\n        public static string Project_title {\n            get {\n                return ResourceManager.GetString(\"Project_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time remaining: {0} {1} and {2} minutes.\n        /// </summary>\n        public static string Remaining_time {\n            get {\n                return ResourceManager.GetString(\"Remaining_time\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to See more.\n        /// </summary>\n        public static string See_more {\n            get {\n                return ResourceManager.GetString(\"See_more\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Starts.\n        /// </summary>\n        public static string Starts {\n            get {\n                return ResourceManager.GetString(\"Starts\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Home.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Upcoming contests.\n        /// </summary>\n        public static string Upcoming_contests {\n            get {\n                return ResourceManager.GetString(\"Upcoming_contests\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Home/Views/Index.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Active_contests\" xml:space=\"preserve\">\n    <value>Active contests</value>\n  </data>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Administration</value>\n  </data>\n  <data name=\"Ended\" xml:space=\"preserve\">\n    <value>Ended</value>\n  </data>\n  <data name=\"Hour\" xml:space=\"preserve\">\n    <value>hour</value>\n  </data>\n  <data name=\"Hours\" xml:space=\"preserve\">\n    <value>hours</value>\n  </data>\n  <data name=\"News\" xml:space=\"preserve\">\n    <value>News</value>\n  </data>\n  <data name=\"No_previous_contests\" xml:space=\"preserve\">\n    <value>No previous contests</value>\n  </data>\n  <data name=\"No_upcoming_contests\" xml:space=\"preserve\">\n    <value>No upcoming contests</value>\n  </data>\n  <data name=\"Participate\" xml:space=\"preserve\">\n    <value>Participate</value>\n  </data>\n  <data name=\"Previous_contests\" xml:space=\"preserve\">\n    <value>Previous contests</value>\n  </data>\n  <data name=\"Project_subtitle\" xml:space=\"preserve\">\n    <value>Solve programming problems online</value>\n  </data>\n  <data name=\"Project_title\" xml:space=\"preserve\">\n    <value>BGCoder</value>\n  </data>\n  <data name=\"Remaining_time\" xml:space=\"preserve\">\n    <value>Time remaining: {0} {1} and {2} minutes</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>See more</value>\n  </data>\n  <data name=\"Starts\" xml:space=\"preserve\">\n    <value>Starts</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Upcoming_contests\" xml:space=\"preserve\">\n    <value>Upcoming contests</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Models/ContestQuestionTypeResource.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Models/ContestQuestionTypeResource.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>По подразбиран</value>\n  </data>\n  <data name=\"DropDownList\" xml:space=\"preserve\">\n    <value>Drop-down лист</value>\n  </data>\n  <data name=\"MultiLineTextArea\" xml:space=\"preserve\">\n    <value>Многоредов текст</value>\n  </data>\n  <data name=\"TextBox\" xml:space=\"preserve\">\n    <value>Едноредов текст</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Models/ContestQuestionTypeResource.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option or rebuild the Visual Studio project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Web.Application.StronglyTypedResourceProxyBuilder\", \"12.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class ContestQuestionTypeResource {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal ContestQuestionTypeResource() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Resources.ContestQuestionTypeResource\", global::System.Reflection.Assembly.Load(\"App_GlobalResources\"));\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Default.\n        /// </summary>\n        internal static string Default {\n            get {\n                return ResourceManager.GetString(\"Default\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Drop-down list.\n        /// </summary>\n        internal static string DropDownList {\n            get {\n                return ResourceManager.GetString(\"DropDownList\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Multi-line text.\n        /// </summary>\n        internal static string MultiLineTextArea {\n            get {\n                return ResourceManager.GetString(\"MultiLineTextArea\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Single line text.\n        /// </summary>\n        internal static string TextBox {\n            get {\n                return ResourceManager.GetString(\"TextBox\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Models/ContestQuestionTypeResource.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>Default</value>\n  </data>\n  <data name=\"DropDownList\" xml:space=\"preserve\">\n    <value>Drop-down list</value>\n  </data>\n  <data name=\"MultiLineTextArea\" xml:space=\"preserve\">\n    <value>Multi-line text</value>\n  </data>\n  <data name=\"TextBox\" xml:space=\"preserve\">\n    <value>Single line text</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/All.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.News.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class All {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal All() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.News.Views.All\", typeof(All).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Author.\n        /// </summary>\n        public static string Author {\n            get {\n                return ResourceManager.GetString(\"Author\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Date.\n        /// </summary>\n        public static string Date {\n            get {\n                return ResourceManager.GetString(\"Date\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to News successfully added.\n        /// </summary>\n        public static string News_successfully_added {\n            get {\n                return ResourceManager.GetString(\"News_successfully_added\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Title.\n        /// </summary>\n        public static string News_title {\n            get {\n                return ResourceManager.GetString(\"News_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No news available.\n        /// </summary>\n        public static string No_news {\n            get {\n                return ResourceManager.GetString(\"No_news\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source.\n        /// </summary>\n        public static string Source {\n            get {\n                return ResourceManager.GetString(\"Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Latest news.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/All.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/All.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Автор</value>\n  </data>\n  <data name=\"Date\" xml:space=\"preserve\">\n    <value>Дата</value>\n  </data>\n  <data name=\"News_successfully_added\" xml:space=\"preserve\">\n    <value>Новините бяха успешно добавени</value>\n  </data>\n  <data name=\"News_title\" xml:space=\"preserve\">\n    <value>Заглавие</value>\n  </data>\n  <data name=\"No_news\" xml:space=\"preserve\">\n    <value>Няма актуални новини</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Източник</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Последни новини</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/All.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Date\" xml:space=\"preserve\">\n    <value>Date</value>\n  </data>\n  <data name=\"News_successfully_added\" xml:space=\"preserve\">\n    <value>News successfully added</value>\n  </data>\n  <data name=\"News_title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"No_news\" xml:space=\"preserve\">\n    <value>No news available</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Latest news</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/LatestNews.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.News.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class LatestNews {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal LatestNews() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.News.Views.LatestNews\", typeof(LatestNews).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Administration.\n        /// </summary>\n        public static string Administration {\n            get {\n                return ResourceManager.GetString(\"Administration\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No news available.\n        /// </summary>\n        public static string No_news {\n            get {\n                return ResourceManager.GetString(\"No_news\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to See more.\n        /// </summary>\n        public static string See_more {\n            get {\n                return ResourceManager.GetString(\"See_more\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/LatestNews.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/LatestNews.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Администрация</value>\n  </data>\n  <data name=\"No_news\" xml:space=\"preserve\">\n    <value>Няма актуални новини</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>Виж още</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/LatestNews.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Administration</value>\n  </data>\n  <data name=\"No_news\" xml:space=\"preserve\">\n    <value>No news available</value>\n  </data>\n  <data name=\"See_more\" xml:space=\"preserve\">\n    <value>See more</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/Selected.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.News.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Selected {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Selected() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.News.Views.Selected\", typeof(Selected).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Author.\n        /// </summary>\n        public static string Author {\n            get {\n                return ResourceManager.GetString(\"Author\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid news id was provided.\n        /// </summary>\n        public static string Invalid_news_id {\n            get {\n                return ResourceManager.GetString(\"Invalid_news_id\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Latest news.\n        /// </summary>\n        public static string Latest_news {\n            get {\n                return ResourceManager.GetString(\"Latest_news\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Next.\n        /// </summary>\n        public static string Next {\n            get {\n                return ResourceManager.GetString(\"Next\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Previous.\n        /// </summary>\n        public static string Previous {\n            get {\n                return ResourceManager.GetString(\"Previous\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source.\n        /// </summary>\n        public static string Source {\n            get {\n                return ResourceManager.GetString(\"Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to News.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/Selected.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/Selected.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Автор</value>\n  </data>\n  <data name=\"Invalid_news_id\" xml:space=\"preserve\">\n    <value>Така новина не съществува</value>\n  </data>\n  <data name=\"Latest_news\" xml:space=\"preserve\">\n    <value>Последни новини</value>\n  </data>\n  <data name=\"Next\" xml:space=\"preserve\">\n    <value>Следваща</value>\n  </data>\n  <data name=\"Previous\" xml:space=\"preserve\">\n    <value>Предишна</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Източник</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Новини</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/News/Views/Selected.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Invalid_news_id\" xml:space=\"preserve\">\n    <value>Invalid news id was provided</value>\n  </data>\n  <data name=\"Latest_news\" xml:space=\"preserve\">\n    <value>Latest news</value>\n  </data>\n  <data name=\"Next\" xml:space=\"preserve\">\n    <value>Next</value>\n  </data>\n  <data name=\"Previous\" xml:space=\"preserve\">\n    <value>Previous</value>\n  </data>\n  <data name=\"Source\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>News</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchIndex.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchIndex.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Placeholder\" xml:space=\"preserve\">\n    <value>Търсене</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Търсене</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchIndex.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Search.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SearchIndex {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SearchIndex() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Search.Views.SearchIndex\", typeof(SearchIndex).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Search.\n        /// </summary>\n        public static string Placeholder {\n            get {\n                return ResourceManager.GetString(\"Placeholder\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Search.\n        /// </summary>\n        public static string Search {\n            get {\n                return ResourceManager.GetString(\"Search\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchIndex.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Placeholder\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchResults.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Search.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class SearchResults {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal SearchResults() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Search.Views.SearchResults\", typeof(SearchResults).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Contests.\n        /// </summary>\n        public static string Contests {\n            get {\n                return ResourceManager.GetString(\"Contests\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to from contest.\n        /// </summary>\n        public static string From_contest {\n            get {\n                return ResourceManager.GetString(\"From_contest\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Problems.\n        /// </summary>\n        public static string Problems {\n            get {\n                return ResourceManager.GetString(\"Problems\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The search term must be at least {0} characters..\n        /// </summary>\n        public static string Search_term_too_short {\n            get {\n                return ResourceManager.GetString(\"Search_term_too_short\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Search results for &quot;{0}&quot;.\n        /// </summary>\n        public static string Title {\n            get {\n                return ResourceManager.GetString(\"Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Users.\n        /// </summary>\n        public static string Users {\n            get {\n                return ResourceManager.GetString(\"Users\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchResults.bg.Designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchResults.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Състезания</value>\n  </data>\n  <data name=\"From_contest\" xml:space=\"preserve\">\n    <value>от състезание</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Задачи</value>\n  </data>\n  <data name=\"Search_term_too_short\" xml:space=\"preserve\">\n    <value>Критерия за търсене трябва да е поне {0} символа.</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Резултати от търсене на \"{0}\"</value>\n  </data>\n  <data name=\"Users\" xml:space=\"preserve\">\n    <value>Потребители</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Search/Views/SearchResults.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Contests\" xml:space=\"preserve\">\n    <value>Contests</value>\n  </data>\n  <data name=\"From_contest\" xml:space=\"preserve\">\n    <value>from contest</value>\n  </data>\n  <data name=\"Problems\" xml:space=\"preserve\">\n    <value>Problems</value>\n  </data>\n  <data name=\"Search_term_too_short\" xml:space=\"preserve\">\n    <value>The search term must be at least {0} characters.</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Search results for \"{0}\"</value>\n  </data>\n  <data name=\"Users\" xml:space=\"preserve\">\n    <value>Users</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/AdvancedSubmissions.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AdvancedSubmissions {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AdvancedSubmissions() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Submissions.Views.AdvancedSubmissions\", typeof(AdvancedSubmissions).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Latest submissions.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/AdvancedSubmissions.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/AdvancedSubmissions.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Последно изпратени решения</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/AdvancedSubmissions.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Latest submissions</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/BasicSubmissions.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Submissions.Views {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class BasicSubmissions {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal BasicSubmissions() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Submissions.Views.BasicSubmissions\", typeof(BasicSubmissions).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Compilation failed!.\n        /// </summary>\n        public static string Failed_compilcation {\n            get {\n                return ResourceManager.GetString(\"Failed_compilcation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Latest submissions.\n        /// </summary>\n        public static string Page_title {\n            get {\n                return ResourceManager.GetString(\"Page_title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Processing....\n        /// </summary>\n        public static string Processing {\n            get {\n                return ResourceManager.GetString(\"Processing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Result.\n        /// </summary>\n        public static string Result {\n            get {\n                return ResourceManager.GetString(\"Result\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to From.\n        /// </summary>\n        public static string Sent_from {\n            get {\n                return ResourceManager.GetString(\"Sent_from\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Task.\n        /// </summary>\n        public static string Task {\n            get {\n                return ResourceManager.GetString(\"Task\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/BasicSubmissions.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/BasicSubmissions.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Failed_compilcation\" xml:space=\"preserve\">\n    <value>Не се компилира!</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Последно изпратени решения</value>\n  </data>\n  <data name=\"Processing\" xml:space=\"preserve\">\n    <value>Обработва се...</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Резултат</value>\n  </data>\n  <data name=\"Sent_from\" xml:space=\"preserve\">\n    <value>Изпратено от</value>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Задача</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/BasicSubmissions.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Failed_compilcation\" xml:space=\"preserve\">\n    <value>Compilation failed!</value>\n  </data>\n  <data name=\"Page_title\" xml:space=\"preserve\">\n    <value>Latest submissions</value>\n  </data>\n  <data name=\"Processing\" xml:space=\"preserve\">\n    <value>Processing...</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Result</value>\n  </data>\n  <data name=\"Sent_from\" xml:space=\"preserve\">\n    <value>From</value>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Task</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/Partial/AdvancedSubmissionsGridPartial.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Submissions.Views.Partial {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AdvancedSubmissionsGridPartial {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AdvancedSubmissionsGridPartial() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Submissions.Views.Partial.AdvancedSubmissionsGridPart\" +\n                            \"ial\", typeof(AdvancedSubmissionsGridPartial).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Admin.\n        /// </summary>\n        public static string Admin {\n            get {\n                return ResourceManager.GetString(\"Admin\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Result.\n        /// </summary>\n        public static string Result {\n            get {\n                return ResourceManager.GetString(\"Result\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to From.\n        /// </summary>\n        public static string Sent_from {\n            get {\n                return ResourceManager.GetString(\"Sent_from\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sent on.\n        /// </summary>\n        public static string Sent_on {\n            get {\n                return ResourceManager.GetString(\"Sent_on\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Task.\n        /// </summary>\n        public static string Task {\n            get {\n                return ResourceManager.GetString(\"Task\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/Partial/AdvancedSubmissionsGridPartial.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/Partial/AdvancedSubmissionsGridPartial.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Admin\" xml:space=\"preserve\">\n    <value>Админ</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Резултат</value>\n  </data>\n  <data name=\"Sent_from\" xml:space=\"preserve\">\n    <value>Изпратено от</value>\n  </data>\n  <data name=\"Sent_on\" xml:space=\"preserve\">\n    <value>Изпратено на</value>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Задача</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Submissions/Views/Partial/AdvancedSubmissionsGridPartial.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Admin\" xml:space=\"preserve\">\n    <value>Admin</value>\n  </data>\n  <data name=\"Result\" xml:space=\"preserve\">\n    <value>Result</value>\n  </data>\n  <data name=\"Sent_from\" xml:space=\"preserve\">\n    <value>From</value>\n  </data>\n  <data name=\"Sent_on\" xml:space=\"preserve\">\n    <value>Sent on</value>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Task</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/Layout.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.34014\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace Resources.Views.Shared {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    public class Layout {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Layout() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Views.Shared.Layout\", typeof(Layout).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Administration.\r\n        /// </summary>\r\n        public static string Administration {\r\n            get {\r\n                return ResourceManager.GetString(\"Administration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All.\r\n        /// </summary>\r\n        public static string All {\r\n            get {\r\n                return ResourceManager.GetString(\"All\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All administrations.\r\n        /// </summary>\r\n        public static string All_administrations {\r\n            get {\r\n                return ResourceManager.GetString(\"All_administrations\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Categories.\r\n        /// </summary>\r\n        public static string Categories {\r\n            get {\r\n                return ResourceManager.GetString(\"Categories\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Category heirarchy.\r\n        /// </summary>\r\n        public static string Category_hierarchy {\r\n            get {\r\n                return ResourceManager.GetString(\"Category_hierarchy\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Checkers.\r\n        /// </summary>\r\n        public static string Checkers {\r\n            get {\r\n                return ResourceManager.GetString(\"Checkers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Contests.\r\n        /// </summary>\r\n        public static string Contests {\r\n            get {\r\n                return ResourceManager.GetString(\"Contests\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_cookie&quot; target=&quot;_blank&quot;&gt;Cookies&lt;/a&gt; help us deliver our services. By using our services, you agree to our use of cookies..\r\n        /// </summary>\r\n        public static string Cookies_notification {\r\n            get {\r\n                return ResourceManager.GetString(\"Cookies_notification\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to OK.\r\n        /// </summary>\r\n        public static string Cookies_notification_OK {\r\n            get {\r\n                return ResourceManager.GetString(\"Cookies_notification_OK\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Feedback.\r\n        /// </summary>\r\n        public static string Feedback {\r\n            get {\r\n                return ResourceManager.GetString(\"Feedback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Files.\r\n        /// </summary>\r\n        public static string Files {\r\n            get {\r\n                return ResourceManager.GetString(\"Files\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Home.\r\n        /// </summary>\r\n        public static string Home {\r\n            get {\r\n                return ResourceManager.GetString(\"Home\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IP Usage.\r\n        /// </summary>\r\n        public static string IpUsage {\r\n            get {\r\n                return ResourceManager.GetString(\"IpUsage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Log.\r\n        /// </summary>\r\n        public static string Log {\r\n            get {\r\n                return ResourceManager.GetString(\"Log\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to News.\r\n        /// </summary>\r\n        public static string News {\r\n            get {\r\n                return ResourceManager.GetString(\"News\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open source project..\r\n        /// </summary>\r\n        public static string Open_source_project {\r\n            get {\r\n                return ResourceManager.GetString(\"Open_source_project\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Other.\r\n        /// </summary>\r\n        public static string Other {\r\n            get {\r\n                return ResourceManager.GetString(\"Other\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Participants.\r\n        /// </summary>\r\n        public static string Participants {\r\n            get {\r\n                return ResourceManager.GetString(\"Participants\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Problems.\r\n        /// </summary>\r\n        public static string Problems {\r\n            get {\r\n                return ResourceManager.GetString(\"Problems\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Roles.\r\n        /// </summary>\r\n        public static string Roles {\r\n            get {\r\n                return ResourceManager.GetString(\"Roles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Search.\r\n        /// </summary>\r\n        public static string Search {\r\n            get {\r\n                return ResourceManager.GetString(\"Search\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Settings.\r\n        /// </summary>\r\n        public static string Settings {\r\n            get {\r\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Submissions.\r\n        /// </summary>\r\n        public static string Submissions {\r\n            get {\r\n                return ResourceManager.GetString(\"Submissions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Submissions Similarity.\r\n        /// </summary>\r\n        public static string SubmissionSimilarity {\r\n            get {\r\n                return ResourceManager.GetString(\"SubmissionSimilarity\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Submission Types.\r\n        /// </summary>\r\n        public static string SubmissionTypes {\r\n            get {\r\n                return ResourceManager.GetString(\"SubmissionTypes\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Test files.\r\n        /// </summary>\r\n        public static string Test_files {\r\n            get {\r\n                return ResourceManager.GetString(\"Test_files\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Users.\r\n        /// </summary>\r\n        public static string Users {\r\n            get {\r\n                return ResourceManager.GetString(\"Users\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/Layout.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/Layout.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"Administration\" xml:space=\"preserve\">\r\n    <value>Админ</value>\r\n  </data>\r\n  <data name=\"All\" xml:space=\"preserve\">\r\n    <value>Всички</value>\r\n  </data>\r\n  <data name=\"All_administrations\" xml:space=\"preserve\">\r\n    <value>Всички администрации</value>\r\n  </data>\r\n  <data name=\"Categories\" xml:space=\"preserve\">\r\n    <value>Категории</value>\r\n  </data>\r\n  <data name=\"Category_hierarchy\" xml:space=\"preserve\">\r\n    <value>Йерархия на категориите</value>\r\n  </data>\r\n  <data name=\"Checkers\" xml:space=\"preserve\">\r\n    <value>Чекери</value>\r\n  </data>\r\n  <data name=\"Contests\" xml:space=\"preserve\">\r\n    <value>Състезания</value>\r\n  </data>\r\n  <data name=\"Cookies_notification\" xml:space=\"preserve\">\r\n    <value>За да доставяме нашите услуги, ние използваме &lt;a href=\"http://bg.wikipedia.org/wiki/HTTP-%D0%B1%D0%B8%D1%81%D0%BA%D0%B2%D0%B8%D1%82%D0%BA%D0%B0\" target=\"_blank\"&gt;HTTP бисквитки&lt;/a&gt;. Използвайки сайта, вие се съгласявате с това.</value>\r\n  </data>\r\n  <data name=\"Cookies_notification_OK\" xml:space=\"preserve\">\r\n    <value>Да</value>\r\n  </data>\r\n  <data name=\"Feedback\" xml:space=\"preserve\">\r\n    <value>Обратна връзка</value>\r\n  </data>\r\n  <data name=\"Files\" xml:space=\"preserve\">\r\n    <value>Файлове</value>\r\n  </data>\r\n  <data name=\"Home\" xml:space=\"preserve\">\r\n    <value>Начало</value>\r\n  </data>\r\n  <data name=\"IpUsage\" xml:space=\"preserve\">\r\n    <value>Използвани IP-та</value>\r\n  </data>\r\n  <data name=\"Log\" xml:space=\"preserve\">\r\n    <value>Лог</value>\r\n  </data>\r\n  <data name=\"News\" xml:space=\"preserve\">\r\n    <value>Новини</value>\r\n  </data>\r\n  <data name=\"Open_source_project\" xml:space=\"preserve\">\r\n    <value>Проект с отворен код.</value>\r\n  </data>\r\n  <data name=\"Other\" xml:space=\"preserve\">\r\n    <value>Други</value>\r\n  </data>\r\n  <data name=\"Participants\" xml:space=\"preserve\">\r\n    <value>Участници</value>\r\n  </data>\r\n  <data name=\"Problems\" xml:space=\"preserve\">\r\n    <value>Задачи</value>\r\n  </data>\r\n  <data name=\"Roles\" xml:space=\"preserve\">\r\n    <value>Роли</value>\r\n  </data>\r\n  <data name=\"Search\" xml:space=\"preserve\">\r\n    <value>Търсене</value>\r\n  </data>\r\n  <data name=\"Settings\" xml:space=\"preserve\">\r\n    <value>Настройки</value>\r\n  </data>\r\n  <data name=\"Submissions\" xml:space=\"preserve\">\r\n    <value>Решения</value>\r\n  </data>\r\n  <data name=\"SubmissionSimilarity\" xml:space=\"preserve\">\r\n    <value>Прилика на решения</value>\r\n  </data>\r\n  <data name=\"Test_files\" xml:space=\"preserve\">\r\n    <value>Тестови файлове</value>\r\n  </data>\r\n  <data name=\"Users\" xml:space=\"preserve\">\r\n    <value>Потребители</value>\r\n  </data>\r\n  <data name=\"SubmissionTypes\" xml:space=\"preserve\">\r\n    <value>Типове решения</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/Layout.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"Administration\" xml:space=\"preserve\">\r\n    <value>Administration</value>\r\n  </data>\r\n  <data name=\"All\" xml:space=\"preserve\">\r\n    <value>All</value>\r\n  </data>\r\n  <data name=\"All_administrations\" xml:space=\"preserve\">\r\n    <value>All administrations</value>\r\n  </data>\r\n  <data name=\"Categories\" xml:space=\"preserve\">\r\n    <value>Categories</value>\r\n  </data>\r\n  <data name=\"Category_hierarchy\" xml:space=\"preserve\">\r\n    <value>Category heirarchy</value>\r\n  </data>\r\n  <data name=\"Checkers\" xml:space=\"preserve\">\r\n    <value>Checkers</value>\r\n  </data>\r\n  <data name=\"Contests\" xml:space=\"preserve\">\r\n    <value>Contests</value>\r\n  </data>\r\n  <data name=\"Cookies_notification\" xml:space=\"preserve\">\r\n    <value>&lt;a href=\"http://en.wikipedia.org/wiki/HTTP_cookie\" target=\"_blank\"&gt;Cookies&lt;/a&gt; help us deliver our services. By using our services, you agree to our use of cookies.</value>\r\n  </data>\r\n  <data name=\"Cookies_notification_OK\" xml:space=\"preserve\">\r\n    <value>OK</value>\r\n  </data>\r\n  <data name=\"Feedback\" xml:space=\"preserve\">\r\n    <value>Feedback</value>\r\n  </data>\r\n  <data name=\"Files\" xml:space=\"preserve\">\r\n    <value>Files</value>\r\n  </data>\r\n  <data name=\"Home\" xml:space=\"preserve\">\r\n    <value>Home</value>\r\n  </data>\r\n  <data name=\"IpUsage\" xml:space=\"preserve\">\r\n    <value>IP Usage</value>\r\n  </data>\r\n  <data name=\"Log\" xml:space=\"preserve\">\r\n    <value>Log</value>\r\n  </data>\r\n  <data name=\"News\" xml:space=\"preserve\">\r\n    <value>News</value>\r\n  </data>\r\n  <data name=\"Open_source_project\" xml:space=\"preserve\">\r\n    <value>Open source project.</value>\r\n  </data>\r\n  <data name=\"Other\" xml:space=\"preserve\">\r\n    <value>Other</value>\r\n  </data>\r\n  <data name=\"Participants\" xml:space=\"preserve\">\r\n    <value>Participants</value>\r\n  </data>\r\n  <data name=\"Problems\" xml:space=\"preserve\">\r\n    <value>Problems</value>\r\n  </data>\r\n  <data name=\"Roles\" xml:space=\"preserve\">\r\n    <value>Roles</value>\r\n  </data>\r\n  <data name=\"Search\" xml:space=\"preserve\">\r\n    <value>Search</value>\r\n  </data>\r\n  <data name=\"Settings\" xml:space=\"preserve\">\r\n    <value>Settings</value>\r\n  </data>\r\n  <data name=\"Submissions\" xml:space=\"preserve\">\r\n    <value>Submissions</value>\r\n  </data>\r\n  <data name=\"SubmissionSimilarity\" xml:space=\"preserve\">\r\n    <value>Submissions Similarity</value>\r\n  </data>\r\n  <data name=\"Test_files\" xml:space=\"preserve\">\r\n    <value>Test files</value>\r\n  </data>\r\n  <data name=\"Users\" xml:space=\"preserve\">\r\n    <value>Users</value>\r\n  </data>\r\n  <data name=\"SubmissionTypes\" xml:space=\"preserve\">\r\n    <value>Submission Types</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/LoginPartial.bg.designer.cs",
    "content": ""
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/LoginPartial.bg.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Log_in\" xml:space=\"preserve\">\n    <value>Вход</value>\n  </data>\n  <data name=\"Log_out\" xml:space=\"preserve\">\n    <value>Изход</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Регистрация</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"Welcome_message\" xml:space=\"preserve\">\n    <value>Здравей</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/LoginPartial.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18408\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Resources.Views.Shared {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class LoginPartial {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal LoginPartial() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OJS.Web.App_GlobalResources.Views.Shared.LoginPartial\", typeof(LoginPartial).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Log in.\n        /// </summary>\n        public static string Log_in {\n            get {\n                return ResourceManager.GetString(\"Log_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Log out.\n        /// </summary>\n        public static string Log_out {\n            get {\n                return ResourceManager.GetString(\"Log_out\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Register.\n        /// </summary>\n        public static string Register {\n            get {\n                return ResourceManager.GetString(\"Register\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Settings.\n        /// </summary>\n        public static string Settings {\n            get {\n                return ResourceManager.GetString(\"Settings\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Hello.\n        /// </summary>\n        public static string Welcome_message {\n            get {\n                return ResourceManager.GetString(\"Welcome_message\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_GlobalResources/Views/Shared/LoginPartial.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Log_in\" xml:space=\"preserve\">\n    <value>Log in</value>\n  </data>\n  <data name=\"Log_out\" xml:space=\"preserve\">\n    <value>Log out</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Welcome_message\" xml:space=\"preserve\">\n    <value>Hello</value>\n  </data>\n</root>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/BundleConfig.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Web.Optimization;\n\n    public class BundleConfig\n    {\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            RegisterScripts(bundles);\n            RegisterStyles(bundles);\n        }\n\n        private static void RegisterScripts(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/global\").Include(\n                      \"~/Scripts/global.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\",\n                        \"~/Scripts/jquery.unobtrusive-ajax.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jqueryval\").Include(\n                        \"~/Scripts/jquery.unobtrusive*\",\n                        \"~/Scripts/jquery.validate*\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/bootstrap\").Include(\n                      \"~/Scripts/bootstrap.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/knockout\").Include(\n                      \"~/Scripts/knockout-{version}.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/kendo\").Include(\n                        \"~/Scripts/KendoUI/2014.3.1411/kendo.all.js\",\n                        \"~/Scripts/KendoUI/2014.3.1411/kendo.aspnetmvc.js\",\n                        \"~/Scripts/KendoUI/2014.3.1411/cultures/kendo.culture.bg.js\",\n                        \"~/Scripts/KendoUI/2014.3.1411/cultures/kendo.culture.en-GB.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/codemirror\").Include(\n                        \"~/Scripts/CodeMirror/codemirror.js\",\n                        \"~/Scripts/CodeMirror/mode/clike.js\",\n                        \"~/Scripts/CodeMirror/mode/javascript.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/codemirrormerge\").Include(\n                        \"~/Scripts/CodeMirror/addon/diff_match_patch.js\",\n                        \"~/Scripts/CodeMirror/addon/merge.js\"));\n        }\n\n        private static void RegisterStyles(BundleCollection bundles)\n        {\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\n                      \"~/Content/site.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/KendoUI/kendo\").Include(\n                      \"~/Content/KendoUI/kendo.common.css\",\n                      \"~/Content/KendoUI/kendo.black.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/bootstrap/bootstrap\").Include(\n                      \"~/Content/bootstrap/themes/bootstrap-theme-cyborg.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/CodeMirror/codemirror\").Include(\n                      \"~/Content/CodeMirror/codemirror.css\",\n                      \"~/Content/CodeMirror/theme/tomorrow-night-eighties.css\",\n                      \"~/Content/CodeMirror/theme/the-matrix.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/CodeMirror/codemirrormerge\").Include(\n                      \"~/Content/CodeMirror/addon/merge.css\",\n                      \"~/Content/Contests/submission-view-page.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/Contests/submission-page\").Include(\n                \"~/Content/Contests/submission-page.css\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/FilterConfig.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Web.Mvc;\n\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/GlimpseSecurityPolicy.cs",
    "content": "﻿namespace OJS.Web\n{\n    using Glimpse.AspNet.Extensions;\n    using Glimpse.Core.Extensibility;\n\n    using OJS.Web.Common.Extensions;\n\n    public class GlimpseSecurityPolicy : IRuntimePolicy\n    {\n        public RuntimeEvent ExecuteOn => RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource;\n\n        public RuntimePolicy Execute(IRuntimePolicyContext policyContext)\n        {\n            // More information about RuntimePolicies can be found at http://getglimpse.com/Help/Custom-Runtime-Policy\n            var httpContext = policyContext.GetHttpContext();\n            return httpContext.User.IsAdmin() ? RuntimePolicy.On : RuntimePolicy.Off;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/LoggingModule.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Web.Mvc;\n\n    using Ninject.Modules;\n    using Ninject.Web.Mvc.FilterBindingSyntax;\n\n    using OJS.Web.Common.Attributes;\n\n    public class LoggingModule : NinjectModule\n    {\n        public override void Load()\n        {\n            this.BindFilter<LoggerFilterAttribute>(FilterScope.Controller, 0).WhenControllerHas<LogAccessAttribute>();\n            this.BindFilter<LoggerFilterAttribute>(FilterScope.Action, 0).WhenActionMethodHas<LogAccessAttribute>();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/NinjectWebCommon.cs",
    "content": "﻿[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(OJS.Web.NinjectWebCommon), \"Start\")]\n[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(OJS.Web.NinjectWebCommon), \"Stop\")]\n\nnamespace OJS.Web\n{\n    using System;\n    using System.Web;\n\n    using Microsoft.Web.Infrastructure.DynamicModuleHelper;\n\n    using Ninject;\n    using Ninject.Modules;\n    using Ninject.Web.Common;\n\n    using OJS.Data;\n    using OJS.Workers.Tools.AntiCheat;\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n    using OJS.Workers.Tools.Similarity;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public static class NinjectWebCommon\n    {\n        private static readonly Bootstrapper Bootstrapper = new Bootstrapper();\n\n        /// <summary>\n        /// Starts the application\n        /// </summary>\n        public static void Start()\n        {\n            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));\n            DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));\n            Bootstrapper.Initialize(CreateKernel);\n        }\n\n        /// <summary>\n        /// Stops the application.\n        /// </summary>\n        public static void Stop()\n        {\n            Bootstrapper.ShutDown();\n        }\n\n        /// <summary>\n        /// Creates the kernel that will manage your application.\n        /// </summary>\n        /// <returns>The created kernel.</returns>\n        private static IKernel CreateKernel()\n        {\n            var modules = new INinjectModule[]\n            {\n                new LoggingModule()\n            };\n\n            var kernel = new StandardKernel(modules);\n            try\n            {\n                kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);\n                kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();\n\n                RegisterServices(kernel);\n                return kernel;\n            }\n            catch\n            {\n                kernel.Dispose();\n                throw;\n            }\n        }\n\n        /// <summary>\n        /// Load your modules or register your services here!\n        /// </summary>\n        /// <param name=\"kernel\">The kernel.</param>\n        private static void RegisterServices(IKernel kernel)\n        {\n            kernel.Bind<IOjsData>().To<OjsData>().InRequestScope();\n            kernel.Bind<ISimilarityFinder>().To<SimilarityFinder>().InRequestScope();\n            kernel.Bind<IPlagiarismDetectorFactory>().To<PlagiarismDetectorFactory>().InRequestScope();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/RouteConfig.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Web.Mvc;\n    using System.Web.Routing;\n\n    using OJS.Common;\n    using OJS.Web.Controllers;\n\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            // TODO: Unit test this route\n            routes.MapRoute(\"robots.txt\", \"robots.txt\", new { controller = \"Home\", action = \"RobotsTxt\" }, new[] { \"OJS.Web.Controllers\" });\n\n            RegisterRedirectsToOldSystemUrls(routes);\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = GlobalConstants.Index, id = UrlParameter.Optional },\n                namespaces: new[] { \"OJS.Web.Controllers\" });\n        }\n\n        public static void RegisterRedirectsToOldSystemUrls(RouteCollection routes)\n        {\n            for (var i = 0; i < RedirectsController.OldSystemRedirects.Count; i++)\n            {\n                var redirect = RedirectsController.OldSystemRedirects[i];\n                routes.MapRoute(\n                    name: string.Format(\"RedirectOldSystemUrl_{0}\", i),\n                    url: redirect.Key,\n                    defaults: new { controller = \"Redirects\", action = GlobalConstants.Index, id = i },\n                    namespaces: new[] { \"OJS.Web.Controllers\" });\n            }\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Account_ProfileView\",\n                \"Account/ProfileView/{id}\",\n                new { controller = \"Redirects\", action = \"ProfileView\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Contest_Compete\",\n                \"Contest/Compete/{id}\",\n                new { controller = \"Redirects\", action = \"ContestCompete\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Contest_Practice\",\n                \"Contest/Practice/{id}\",\n                new { controller = \"Redirects\", action = \"ContestPractice\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Contest_ContestResults\",\n                \"Contest/ContestResults/{id}\",\n                new { controller = \"Redirects\", action = \"ContestResults\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Contest_PracticeResults\",\n                \"Contest/PracticeResults/{id}\",\n                new { controller = \"Redirects\", action = \"PracticeResults\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n\n            routes.MapRoute(\n                \"RedirectOldSystemUrl_Contest_DownloadTask\",\n                \"Contest/DownloadTask/{id}\",\n                new { controller = \"Redirects\", action = \"DownloadTask\", id = UrlParameter.Optional },\n                new[] { \"OJS.Web.Controllers\" });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/Settings.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System;\n    using System.Configuration;\n\n    public static class Settings\n    {\n        public static string CSharpCompilerPath => GetSetting(\"CSharpCompilerPath\");\n\n        public static string DotNetDisassemblerPath => GetSetting(\"DotNetDisassemblerPath\");\n\n        public static string JavaCompilerPath => GetSetting(\"JavaCompilerPath\");\n\n        public static string JavaDisassemblerPath => GetSetting(\"JavaDisassemblerPath\");\n\n        private static string GetSetting(string settingName)\n        {\n            if (ConfigurationManager.AppSettings[settingName] == null)\n            {\n                throw new Exception($\"{settingName} setting not found in App.config file!\");\n            }\n\n            return ConfigurationManager.AppSettings[settingName];\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/Startup.Auth.cs",
    "content": "﻿namespace OJS.Web\n{\n    using Microsoft.AspNet.Identity;\n    using Microsoft.Owin;\n    using Microsoft.Owin.Security.Cookies;\n\n    using Owin;\n\n    public partial class Startup\n    {\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Enable the application to use a cookie to store information for the signed in user\n            app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {\n                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,\n                LoginPath = new PathString(\"/Account/Login\")\n            });\n\n            // Use a cookie to temporarily store information about a user logging in with a third party login provider\n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            //// Uncomment the following lines to enable logging in with third party login providers\n            //// app.UseMicrosoftAccountAuthentication(\n            ////    clientId: \"\",\n            ////    clientSecret: \"\");\n\n            //// app.UseTwitterAuthentication(\n            ////   consumerKey: \"\",\n            ////   consumerSecret: \"\");\n\n            //// app.UseFacebookAuthentication(\n            ////   appId: \"\",\n            ////   appSecret: \"\");\n\n            app.UseGoogleAuthentication();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/App_Start/ViewEngineConfig.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Web.Mvc;\n\n    public class ViewEngineConfig\n    {\n        public static void RegisterViewEngines(ViewEngineCollection viewEngines)\n        {\n            viewEngines.Clear();\n\n            viewEngines.Add(new RazorViewEngine());\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/AdministrationAreaRegistration.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration\r\n{\r\n    using System.Web.Mvc;\r\n\r\n    using OJS.Common;\r\n\r\n    public class AdministrationAreaRegistration : AreaRegistration\r\n    {\r\n        public override string AreaName => \"Administration\";\r\n\r\n        public override void RegisterArea(AreaRegistrationContext context)\r\n        {\r\n            context.MapRoute(\r\n                \"Administration_Files_Connector\",\r\n                \"Administration/Files/connector\",\r\n                new { action = \"FileConnector\", controller = \"Files\" });\r\n\r\n            context.MapRoute(\r\n                \"Administration_Files_Thumbnails\",\r\n                \"Administration/Files/Thumbnails/{tmb}\",\r\n                new { action = \"Thumbs\", controller = \"Files\", tmb = UrlParameter.Optional });\r\n\r\n            context.MapRoute(\r\n                \"Administration_default\",\r\n                \"Administration/{controller}/{action}/{id}\",\r\n                new { action = GlobalConstants.Index, id = UrlParameter.Optional });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/AccessLogsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.AccessLogs.AccessLogGridViewModel;\n\n    public class AccessLogsController : KendoGridAdministrationController\n    {\n        public AccessLogsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [HttpGet]\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.AccessLogs\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.AccessLogs.GetById((int)id);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/AntiCheatController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.AntiCheat;\n    using OJS.Web.Common;\n    using OJS.Web.Controllers;\n    using OJS.Workers.Tools.AntiCheat;\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public class AntiCheatController : AdministrationController\n    {\n        private const int MinSubmissionPointsToCheckForSimilarity = 20;\n        private const int RenderSubmissionsSimilaritiesGridTimeOut = 20 * 60; // 20 min.\n\n        private readonly IPlagiarismDetectorFactory plagiarismDetectorFactory;\n        private readonly ISimilarityFinder similarityFinder;\n\n        public AntiCheatController(\n            IOjsData data,\n            IPlagiarismDetectorFactory plagiarismDetectorFactory,\n            ISimilarityFinder similarityFinder)\n            : base(data)\n        {\n            this.plagiarismDetectorFactory = plagiarismDetectorFactory;\n            this.similarityFinder = similarityFinder;\n        }\n\n        public ActionResult ByIp() => this.View(this.GetContestsListItems());\n\n        public ActionResult RenderByIpGrid(int id, string excludeIps)\n        {\n            var participantsByIps = this.Data.Participants\n                .All()\n                .Where(p => p.ContestId == id && p.IsOfficial)\n                .Select(AntiCheatByIpAdministrationViewModel.ViewModel)\n                .Where(p => p.DifferentIps.Count() > 1)\n                .ToList();\n\n            if (!string.IsNullOrEmpty(excludeIps))\n            {\n                var withoutExcludeIps = this.Data.Participants.All();\n\n                var ipsToExclude = excludeIps.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n                foreach (var ip in ipsToExclude)\n                {\n                    withoutExcludeIps = withoutExcludeIps.Where(p =>\n                        p.ContestId == id &&\n                        p.IsOfficial &&\n                        p.Submissions.Count > 1 &&\n                        p.Submissions\n                            .AsQueryable()\n                            .Where(s => !s.IsDeleted && s.IpAddress != null)\n                            .All(s => s.IpAddress != ip));\n                }\n\n                participantsByIps.AddRange(withoutExcludeIps.Select(AntiCheatByIpAdministrationViewModel.ViewModel));\n            }\n\n            return this.PartialView(\"_IpGrid\", participantsByIps);\n        }\n\n        public ActionResult BySubmissionSimilarity()\n        {\n            var plagiarismDetectorTypes = EnumConverter.GetSelectListItems<PlagiarismDetectorType>();\n\n            var viewModel = new SubmissionSimilarityFiltersInputModel\n            {\n                PlagiarismDetectorTypes = plagiarismDetectorTypes\n            };\n\n            return this.View(viewModel);\n        }\n\n        [HttpPost]\n        public ActionResult RenderSubmissionsSimilaritiesGrid(int[] contestIds, PlagiarismDetectorType plagiarismDetectorType)\n        {\n            this.Server.ScriptTimeout = RenderSubmissionsSimilaritiesGridTimeOut;\n\n            var participantsSimilarSubmissionGroups =\n                this.GetSimilarSubmissions(contestIds, plagiarismDetectorType)\n                    .Select(s => new\n                    {\n                        s.Id,\n                        s.ProblemId,\n                        s.ParticipantId,\n                        s.Points,\n                        s.Content,\n                        s.CreatedOn,\n                        ParticipantName = s.Participant.User.UserName,\n                        ProblemName = s.Problem.Name,\n                        TestRuns = s.TestRuns.OrderBy(t => t.TestId).Select(t => new { t.TestId, t.ResultType })\n                    })\n                    .GroupBy(s => new { s.ProblemId, s.ParticipantId })\n                    .Select(g => g.OrderByDescending(s => s.Points).ThenByDescending(s => s.CreatedOn).FirstOrDefault())\n                    .GroupBy(s => new { s.ProblemId, s.Points })\n                    .ToList();\n\n            var plagiarismDetector = this.GetPlagiarismDetector(plagiarismDetectorType);\n\n            var similarities = new List<SubmissionSimilarityViewModel>();\n            for (var index = 0; index < participantsSimilarSubmissionGroups.Count; index++)\n            {\n                var groupOfSubmissions = participantsSimilarSubmissionGroups[index].ToList();\n                for (var i = 0; i < groupOfSubmissions.Count; i++)\n                {\n                    for (var j = i + 1; j < groupOfSubmissions.Count; j++)\n                    {\n                        var result = plagiarismDetector.DetectPlagiarism(\n                            groupOfSubmissions[i].Content.Decompress(),\n                            groupOfSubmissions[j].Content.Decompress(),\n                            new IDetectPlagiarismVisitor[] { new SortTrimLinesAndRemoveBlankLinesVisitor() });\n\n                        var firstTestRuns = groupOfSubmissions[i].TestRuns.ToList();\n                        var secondTestRuns = groupOfSubmissions[j].TestRuns.ToList();\n\n                        // Handle the case when test(s) are added/removed during the contest\n                        if (firstTestRuns.Count < secondTestRuns.Count)\n                        {\n                            secondTestRuns = secondTestRuns\n                                .Where(x => firstTestRuns.Any(y => y.TestId == x.TestId))\n                                .OrderBy(x => x.TestId)\n                                .ToList();\n                        }\n                        else if (firstTestRuns.Count > secondTestRuns.Count)\n                        {\n                            firstTestRuns = firstTestRuns\n                                .Where(x => secondTestRuns.Any(y => y.TestId == x.TestId))\n                                .OrderBy(x => x.TestId)\n                                .ToList();\n                        }\n\n                        var save = true;\n\n                        for (var k = 0; k < firstTestRuns.Count; k++)\n                        {\n                            if (firstTestRuns[k].ResultType != secondTestRuns[k].ResultType)\n                            {\n                                save = false;\n                                break;\n                            }\n                        }\n\n                        if (save && result.SimilarityPercentage != 0)\n                        {\n                            similarities.Add(new SubmissionSimilarityViewModel\n                            {\n                                ProblemName = groupOfSubmissions[i].ProblemName,\n                                Points = groupOfSubmissions[i].Points,\n                                Differences = result.Differences.Count,\n                                Percentage = result.SimilarityPercentage,\n                                FirstSubmissionId = groupOfSubmissions[i].Id,\n                                FirstParticipantName = groupOfSubmissions[i].ParticipantName,\n                                FirstSubmissionCreatedOn = groupOfSubmissions[i].CreatedOn,\n                                SecondSubmissionId = groupOfSubmissions[j].Id,\n                                SecondParticipantName = groupOfSubmissions[j].ParticipantName,\n                                SecondSubmissionCreatedOn = groupOfSubmissions[j].CreatedOn,\n                            });\n                        }\n                    }\n                }\n            }\n\n            return this.PartialView(\"_SubmissionsGrid\", similarities.GroupBy(s => s.ProblemName));\n        }\n\n        private IEnumerable<SelectListItem> GetContestsListItems()\n        {\n            var contests = this.Data.Contests\n                .All()\n                .OrderByDescending(c => c.CreatedOn)\n                .Select(c => new { Text = c.Name, Value = c.Id })\n                .ToList()\n                .Select(c => new SelectListItem { Text = c.Text, Value = c.Value.ToString() });\n\n            return contests;\n        }\n\n        private PlagiarismDetectorCreationContext CreatePlagiarismDetectorCreationContext(PlagiarismDetectorType type)\n        {\n            var result = new PlagiarismDetectorCreationContext(type, this.similarityFinder);\n\n            switch (type)\n            {\n                case PlagiarismDetectorType.CSharpCompileDisassemble:\n                    result.CompilerPath = Settings.CSharpCompilerPath;\n                    result.DisassemblerPath = Settings.DotNetDisassemblerPath;\n                    break;\n                case PlagiarismDetectorType.JavaCompileDisassemble:\n                    result.CompilerPath = Settings.JavaCompilerPath;\n                    result.DisassemblerPath = Settings.JavaDisassemblerPath;\n                    break;\n                case PlagiarismDetectorType.PlainText:\n                    break;\n            }\n\n            return result;\n        }\n\n        private IQueryable<Submission> GetSimilarSubmissions(\n            IEnumerable<int> contestIds,\n            PlagiarismDetectorType plagiarismDetectorType)\n        {\n            var orExpressionContestIds = ExpressionBuilder.BuildOrExpression<Submission, int>(\n                contestIds,\n                s => s.Participant.ContestId);\n\n            var plagiarismDetectorTypeCompatibleCompilerTypes = plagiarismDetectorType.GetCompatibleCompilerTypes();\n            var orExpressionCompilerTypes = ExpressionBuilder.BuildOrExpression<Submission, CompilerType>(\n                plagiarismDetectorTypeCompatibleCompilerTypes,\n                s => s.SubmissionType.CompilerType);\n\n            var result = this.Data.Submissions\n                .All()\n                .Where(orExpressionContestIds)\n                .Where(orExpressionCompilerTypes)\n                .Where(s => s.Participant.IsOfficial && s.Points >= MinSubmissionPointsToCheckForSimilarity);\n\n            return result;\n        }\n\n        private IPlagiarismDetector GetPlagiarismDetector(PlagiarismDetectorType type)\n        {\n            var plagiarismDetectorCreationContext =\n                this.CreatePlagiarismDetectorCreationContext(type);\n            var plagiarismDetector =\n                this.plagiarismDetectorFactory.CreatePlagiarismDetector(plagiarismDetectorCreationContext);\n\n            return plagiarismDetector;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/CheckersController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.Checker;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.Checker.CheckerAdministrationViewModel;\n\n    public class CheckersController : KendoGridAdministrationController\n    {\n        public CheckersController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Checkers\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Checkers\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var databaseModel = model.GetEntityModel();\n            model.Id = (int)this.BaseCreate(databaseModel);\n            this.UpdateAuditInfoValues(model, databaseModel);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Id) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ContestCategoriesController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.ContestCategory;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.ContestCategory.ContestCategoryAdministrationViewModel;\n\n    public class ContestCategoriesController : KendoGridAdministrationController\n    {\n        public ContestCategoriesController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.ContestCategories\n                .All()\n                .Where(cat => !cat.IsDeleted)\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.ContestCategories\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var databaseModel = model.GetEntityModel();\n            model.Id = (int)this.BaseCreate(databaseModel);\n            this.UpdateAuditInfoValues(model, databaseModel);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Id) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var contest = this.Data.ContestCategories.GetById(model.Id.Value);\n            this.CascadeDeleteCategories(contest);\n            return this.Json(this.ModelState.ToDataSourceResult());\n        }\n\n        public ActionResult Hierarchy()\n        {\n            return this.View();\n        }\n\n        public ActionResult ReadCategories(int? id)\n        {\n            var categories =\n                this.Data.ContestCategories.All()\n                    .Where(x => x.IsVisible)\n                    .Where(x => id.HasValue ? x.ParentId == id : x.ParentId == null)\n                    .OrderBy(x => x.OrderBy)\n                    .Select(x => new { id = x.Id, hasChildren = x.Children.Any(), x.Name, });\n\n            return this.Json(categories, JsonRequestBehavior.AllowGet);\n        }\n\n        public void MoveCategory(int id, int? to)\n        {\n            var category = this.Data.ContestCategories.GetById(id);\n            category.ParentId = to;\n            this.Data.SaveChanges();\n        }\n\n        private void CascadeDeleteCategories(DatabaseModelType contest)\n        {\n            foreach (var children in contest.Children.ToList())\n            {\n                this.CascadeDeleteCategories(children);\n            }\n\n            this.Data.ContestCategories.Delete(contest);\n            this.Data.SaveChanges();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ContestQuestionAnswersController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.ContestQuestionAnswer;\n    using Resource = Resources.Areas.Administration.Contests.ContestsControllers;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.ContestQuestionAnswer.ContestQuestionAnswerViewModel;\n\n    public class ContestQuestionAnswersController : KendoGridAdministrationController\n    {\n        private int questionId;\n\n        public ContestQuestionAnswersController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            var answers = this.Data.ContestQuestionAnswers\n                .All()\n                .Where(q => q.QuestionId == this.questionId)\n                .Select(ViewModelType.ViewModel);\n\n            return answers;\n        }\n\n        public override object GetById(object id)\n        {\n            var answer = this.Data.ContestQuestionAnswers\n                .All()\n                .FirstOrDefault(q => q.Id == (int)id);\n\n            return answer;\n        }\n\n        [HttpPost]\n        public JsonResult AnswersInQuestion([DataSourceRequest]DataSourceRequest request, int id)\n        {\n            this.questionId = id;\n            var answers = this.GetData();\n\n            return this.Json(answers.ToDataSourceResult(request));\n        }\n\n        [HttpPost]\n        public JsonResult AddAnswerToQuestion([DataSourceRequest]DataSourceRequest request, ViewModelType model, int id)\n        {\n            var question = this.Data.ContestQuestions.All().FirstOrDefault(q => q.Id == id);\n            var answer = model.GetEntityModel();\n\n            question.Answers.Add(answer);\n            this.Data.SaveChanges();\n\n            this.UpdateViewModelValues(model, answer);\n            model.QuestionId = question.Id;\n            model.QuestionText = question.Text;\n\n            return this.Json(new[] { model }.ToDataSourceResult(request));\n        }\n\n        [HttpPost]\n        public JsonResult UpdateAnswerInQuestion([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.AnswerId) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public JsonResult DeleteAnswerFromQuestion([DataSourceRequest]DataSourceRequest request, ViewModelType model, int id)\n        {\n            this.Data.ContestQuestionAnswers.Delete(model.AnswerId.Value);\n            this.Data.SaveChanges();\n            return this.GridOperation(request, model);\n        }\n\n        public void DeleteAllAnswers(int id)\n        {\n            var question = this.Data.ContestQuestions.GetById(id);\n\n            if (question == null)\n            {\n                throw new ArgumentException(Resource.No_question_by_id, nameof(id));\n            }\n\n            question.Answers.Select(a => a.Id).ToList().Each(a => this.Data.ContestQuestionAnswers.Delete(a));\n            this.Data.SaveChanges();\n        }\n\n        protected void UpdateViewModelValues(ViewModelType viewModel, DatabaseModelType databaseModel)\n        {\n            var entry = this.Data.Context.Entry(databaseModel);\n            viewModel.AnswerId = entry.Property(pr => pr.Id).CurrentValue;\n            this.UpdateAuditInfoValues(viewModel, databaseModel);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ContestQuestionsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Controllers;\n\n    using DatabaseAnswerModelType = OJS.Data.Models.ContestQuestionAnswer;\n    using DatabaseModelType = OJS.Data.Models.ContestQuestion;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.ContestQuestion.ContestQuestionViewModel;\n\n    public class ContestQuestionsController : KendoGridAdministrationController\n    {\n        private int contestId;\n\n        public ContestQuestionsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            var questions = this.Data.ContestQuestions\n                .All()\n                .Where(q => q.ContestId == this.contestId)\n                .Select(ViewModelType.ViewModel);\n\n            return questions;\n        }\n\n        public override object GetById(object id)\n        {\n            var question = this.Data.ContestQuestions\n                .All()\n                .FirstOrDefault(q => q.Id == (int)id);\n\n            return question;\n        }\n\n        [HttpPost]\n        public JsonResult QuestionsInContest([DataSourceRequest]DataSourceRequest request, int id)\n        {\n            this.contestId = id;\n            var questions = this.GetData();\n\n            return this.Json(questions.ToDataSourceResult(request));\n        }\n\n        [HttpPost]\n        public JsonResult AddQuestionToContest([DataSourceRequest]DataSourceRequest request, ViewModelType model, int id)\n        {\n            var contest = this.Data.Contests.All().FirstOrDefault(c => c.Id == id);\n            var question = model.GetEntityModel();\n\n            contest.Questions.Add(question);\n            this.Data.SaveChanges();\n\n            this.UpdateAuditInfoValues(model, question);\n            model.QuestionId = this.Data.Context.Entry(question).Property(pr => pr.Id).CurrentValue;\n            model.ContestId = contest.Id;\n\n            return this.Json(new[] { model }.ToDataSourceResult(request));\n        }\n\n        [HttpPost]\n        public JsonResult UpdateQuestionInContest([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.QuestionId) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public JsonResult DeleteQuestionFromContest([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.Data.ContestQuestions.Delete(model.QuestionId.Value);\n            this.Data.SaveChanges();\n            return this.GridOperation(request, model);\n        }\n\n        public ActionResult CopyFromAnotherContest(int id)\n        {\n            var contests = this.Data.Contests\n                .All()\n                .OrderByDescending(c => c.CreatedOn)\n                .Select(c => new { Text = c.Name, Value = c.Id });\n\n            this.ViewBag.ContestId = id;\n\n            return this.PartialView(\"_CopyQuestionsFromContest\", contests);\n        }\n\n        public void CopyTo(int id, int contestFrom, bool? deleteOld)\n        {\n            var copyFromContest = this.Data.Contests.GetById(contestFrom);\n            var copyToContest = this.Data.Contests.GetById(id);\n\n            if (deleteOld.HasValue && deleteOld.Value)\n            {\n                var oldQuestions = copyToContest.Questions.Select(q => q.Id).ToList();\n                this.DeleteQuestions(oldQuestions);\n            }\n\n            var questionsToCopy = copyFromContest.Questions.ToList();\n            this.CopyQuestionsToContest(copyToContest, questionsToCopy);\n        }\n\n        private void DeleteQuestions(IEnumerable<int> questions)\n        {\n            foreach (var question in questions)\n            {\n                this.Data.ContestQuestions.Delete(question);\n            }\n\n            this.Data.SaveChanges();\n        }\n\n        private void CopyQuestionsToContest(Contest contest, IEnumerable<ContestQuestion> questions)\n        {\n            foreach (var question in questions)\n            {\n                var newQuestion = new DatabaseModelType\n                {\n                    Text = question.Text,\n                    Type = question.Type,\n                    AskOfficialParticipants = question.AskOfficialParticipants,\n                    AskPracticeParticipants = question.AskPracticeParticipants,\n                    RegularExpressionValidation = question.RegularExpressionValidation\n                };\n\n                foreach (var answer in question.Answers)\n                {\n                    newQuestion.Answers.Add(new DatabaseAnswerModelType { Text = answer.Text });\n                }\n\n                contest.Questions.Add(newQuestion);\n            }\n\n            this.Data.SaveChanges();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ContestsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Globalization;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Data;\n    using OJS.Web.Areas.Administration.ViewModels.Contest;\n    using OJS.Web.Areas.Administration.ViewModels.SubmissionType;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Administration.Contests.ContestsControllers;\n    using ShortViewModelType = OJS.Web.Areas.Administration.ViewModels.Contest.ShortContestAdministrationViewModel;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel;\n\n    public class ContestsController : KendoGridAdministrationController\n    {\n        public ContestsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Contests\n                .All()\n                .Where(x => !x.IsDeleted)\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Contests\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpGet]\n        public ActionResult Create()\n        {\n            var newContest = new ViewModelType\n            {\n                SubmisstionTypes = this.Data.SubmissionTypes.All().Select(SubmissionTypeViewModel.ViewModel).ToList()\n            };\n\n            return this.View(newContest);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Create(ContestAdministrationViewModel model)\n        {\n            if (!this.IsValidContest(model))\n            {\n                return this.View(model);\n            }\n\n            if (model != null && this.ModelState.IsValid)\n            {\n                var contest = model.GetEntityModel();\n\n                model.SubmisstionTypes.ForEach(s =>\n                    {\n                        if (s.IsChecked)\n                        {\n                            var submission = this.Data.SubmissionTypes.All().FirstOrDefault(t => t.Id == s.Id);\n                            contest.SubmissionTypes.Add(submission);\n                        }\n                    });\n\n                this.Data.Contests.Add(contest);\n                this.Data.SaveChanges();\n\n                this.TempData.Add(GlobalConstants.InfoMessage, Resource.Contest_added);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(model);\n        }\n\n        [HttpGet]\n        public ActionResult Edit(int id)\n        {\n            var contest = this.Data.Contests\n                .All()\n                .Where(con => con.Id == id)\n                .Select(ContestAdministrationViewModel.ViewModel)\n                .FirstOrDefault();\n\n            if (contest == null)\n            {\n                this.TempData.Add(GlobalConstants.DangerMessage, Resource.Contest_not_found);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            this.Data.SubmissionTypes.All()\n                .Select(SubmissionTypeViewModel.ViewModel)\n                .ForEach(SubmissionTypeViewModel.ApplySelectedTo(contest));\n\n            return this.View(contest);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Edit(ContestAdministrationViewModel model)\n        {\n            if (!this.IsValidContest(model))\n            {\n                return this.View(model);\n            }\n\n            if (model != null && this.ModelState.IsValid)\n            {\n                var contest = this.Data.Contests.All().FirstOrDefault(c => c.Id == model.Id);\n\n                if (contest == null)\n                {\n                    this.TempData.Add(GlobalConstants.DangerMessage, Resource.Contest_not_found);\n                    return this.RedirectToAction(GlobalConstants.Index);\n                }\n\n                contest = model.GetEntityModel(contest);\n                contest.SubmissionTypes.Clear();\n\n                model.SubmisstionTypes.ForEach(s =>\n                {\n                    if (s.IsChecked)\n                    {\n                        var submission = this.Data.SubmissionTypes.All().FirstOrDefault(t => t.Id == s.Id);\n                        contest.SubmissionTypes.Add(submission);\n                    }\n                });\n\n                this.Data.Contests.Update(contest);\n                this.Data.SaveChanges();\n\n                this.TempData.Add(GlobalConstants.InfoMessage, Resource.Contest_edited);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ContestAdministrationViewModel model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n\n        public ActionResult GetFutureContests([DataSourceRequest]DataSourceRequest request)\n        {\n            var futureContests = this.Data.Contests\n                .AllFuture()\n                .OrderBy(contest => contest.StartTime)\n                .Take(3)\n                .Select(ShortViewModelType.FromContest);\n\n            if (!futureContests.Any())\n            {\n                return this.Content(Resource.No_future_contests);\n            }\n\n            return this.PartialView(GlobalConstants.QuickContestsGrid, futureContests);\n        }\n\n        public ActionResult GetActiveContests([DataSourceRequest]DataSourceRequest request)\n        {\n            var activeContests = this.Data.Contests\n                .AllActive()\n                .OrderBy(contest => contest.EndTime)\n                .Take(3)\n                .Select(ShortViewModelType.FromContest);\n\n            if (!activeContests.Any())\n            {\n                return this.Content(Resource.No_active_contests);\n            }\n\n            return this.PartialView(GlobalConstants.QuickContestsGrid, activeContests);\n        }\n\n        public ActionResult GetLatestContests([DataSourceRequest]DataSourceRequest request)\n        {\n            var latestContests = this.Data.Contests\n                .AllVisible()\n                .OrderByDescending(contest => contest.CreatedOn)\n                .Take(3)\n                .Select(ShortViewModelType.FromContest);\n\n            if (!latestContests.Any())\n            {\n                return this.Content(Resource.No_latest_contests);\n            }\n\n            return this.PartialView(GlobalConstants.QuickContestsGrid, latestContests);\n        }\n\n        public JsonResult GetCategories()\n        {\n            var dropDownData = this.Data.ContestCategories\n                .All()\n                .ToList()\n                .Select(cat => new SelectListItem\n                {\n                    Text = cat.Name,\n                    Value = cat.Id.ToString(CultureInfo.InvariantCulture)\n                });\n\n            return this.Json(dropDownData, JsonRequestBehavior.AllowGet);\n        }\n\n        private bool IsValidContest(ContestAdministrationViewModel model)\n        {\n            bool isValid = true;\n\n            if (model.StartTime >= model.EndTime)\n            {\n                this.ModelState.AddModelError(GlobalConstants.DateTimeError, Resource.Contest_start_date_before_end);\n                isValid = false;\n            }\n\n            if (model.PracticeStartTime >= model.PracticeEndTime)\n            {\n                this.ModelState.AddModelError(GlobalConstants.DateTimeError, Resource.Practice_start_date_before_end);\n                isValid = false;\n            }\n\n            if (model.SubmisstionTypes == null || !model.SubmisstionTypes.Any(s => s.IsChecked))\n            {\n                this.ModelState.AddModelError(\"SelectedSubmissionTypes\", Resource.Select_one_submission_type);\n                isValid = false;\n            }\n\n            return isValid;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ContestsExportController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.IO;\n    using System.Linq;\n    using System.Text;\n    using System.Web.Mvc;\n\n    using Ionic.Zip;\n\n    using NPOI.HSSF.UserModel;\n    using NPOI.SS.UserModel;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Web.Common;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Administration.Contests.ContestsControllers;\n\n    public class ContestsExportController : AdministrationController\n    {\n        public ContestsExportController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public FileResult Results(int id, bool compete)\n        {\n            var contest = this.Data.Contests.GetById(id);\n\n            var data = new\n            {\n                contest.Id,\n                contest.Name,\n                Problems = contest.Problems.AsQueryable().OrderBy(x => x.OrderBy).ThenBy(x => x.Name),\n                Questions = contest.Questions.OrderBy(x => x.Id),\n                Results = this.Data.Participants.All()\n                    .Where(participant => participant.ContestId == contest.Id && participant.IsOfficial == compete)\n                    .Select(participant => new\n                    {\n                        ParticipantUserName = participant.User.UserName,\n                        ParticipantFirstName = participant.User.UserSettings.FirstName,\n                        ParticipantLastName = participant.User.UserSettings.LastName,\n                        Answers = participant.Answers.OrderBy(answer => answer.ContestQuestionId),\n                        ProblemResults = participant.Contest.Problems\n                            .Select(problem =>\n                                new\n                                {\n                                    problem.Id,\n                                    ProblemName = problem.Name,\n                                    ProblemOrderBy = problem.OrderBy,\n                                    ShowResult = problem.ShowResults,\n                                    BestSubmission = problem.Submissions\n                                                        .Where(z => z.ParticipantId == participant.Id)\n                                                        .OrderByDescending(z => z.Points).ThenByDescending(z => z.Id)\n                                                        .Select(z => new { z.Id, z.Points })\n                                                        .FirstOrDefault()\n                                })\n                                .OrderBy(res => res.ProblemOrderBy).ThenBy(res => res.ProblemName),\n                    })\n                    .ToList()\n                    .Select(x => new { Data = x, Total = x.ProblemResults.Where(y => y.ShowResult).Sum(y => y.BestSubmission == null ? 0 : y.BestSubmission.Points) })\n                    .OrderByDescending(x => x.Total)\n            };\n\n            var workbook = new HSSFWorkbook();\n            var sheet = workbook.CreateSheet();\n\n            // Header\n            var headerRow = sheet.CreateRow(0);\n            int columnNumber = 0;\n            headerRow.CreateCell(columnNumber++).SetCellValue(\"Username\");\n            headerRow.CreateCell(columnNumber++).SetCellValue(\"Name\");\n            foreach (var question in data.Questions)\n            {\n                headerRow.CreateCell(columnNumber++).SetCellValue(question.Text);\n            }\n\n            foreach (var problem in data.Problems)\n            {\n                headerRow.CreateCell(columnNumber++).SetCellValue(problem.Name);\n            }\n\n            headerRow.CreateCell(columnNumber++).SetCellValue(\"Total\");\n\n            // All rows\n            var rowNumber = 1;\n            foreach (var result in data.Results)\n            {\n                var cellNumber = 0;\n                var row = sheet.CreateRow(rowNumber++);\n                row.CreateCell(cellNumber++).SetCellValue(result.Data.ParticipantUserName);\n                row.CreateCell(cellNumber++).SetCellValue(string.Format(\"{0} {1}\", result.Data.ParticipantFirstName, result.Data.ParticipantLastName).Trim());\n                foreach (var answer in result.Data.Answers)\n                {\n                    int answerId;\n                    if (answer.ContestQuestion.Type == ContestQuestionType.DropDown && int.TryParse(answer.Answer, out answerId))\n                    {\n                        // TODO: N+1 query problem. Optimize it.\n                        var answerText =\n                            this.Data.ContestQuestionAnswers.All()\n                                .Where(x => x.Id == answerId)\n                                .Select(x => x.Text)\n                                .FirstOrDefault();\n                        row.CreateCell(cellNumber++).SetCellValue(answerText);\n                    }\n                    else\n                    {\n                        row.CreateCell(cellNumber++).SetCellValue(answer.Answer);\n                    }\n                }\n\n                foreach (var problemResult in result.Data.ProblemResults)\n                {\n                    if (problemResult.BestSubmission != null)\n                    {\n                        row.CreateCell(cellNumber++).SetCellValue(problemResult.BestSubmission.Points);\n                    }\n                    else\n                    {\n                        row.CreateCell(cellNumber++, CellType.Blank);\n                    }\n                }\n\n                row.CreateCell(cellNumber++).SetCellValue(result.Total);\n            }\n\n            // Auto-size all columns\n            for (var i = 0; i < columnNumber; i++)\n            {\n                sheet.AutoSizeColumn(i);\n            }\n\n            // Write the workbook to a memory stream\n            var outputStream = new MemoryStream();\n            workbook.Write(outputStream);\n\n            // Return the result to the end user\n            return this.File(\n                outputStream.ToArray(), // The binary data of the XLS file\n                GlobalConstants.ExcelMimeType, // MIME type of Excel files\n                string.Format(Resource.Report_excel_format, compete ? Resource.Contest : Resource.Practice, contest.Name)); // Suggested file name in the \"Save as\" dialog which will be displayed to the end user\n        }\n\n        public ZipFileResult Solutions(int id, bool compete)\n        {\n            var contest = this.Data.Contests.GetById(id);\n            var problems = contest.Problems.OrderBy(x => x.OrderBy).ThenBy(x => x.Name).ToList();\n            var participants =\n                this.Data.Participants.All()\n                    .Where(x => x.ContestId == id && x.IsOfficial == compete)\n                    .Select(\n                        x =>\n                        new\n                            {\n                                x.Id,\n                                x.User.UserName,\n                                x.User.Email,\n                                StudentsNumber =\n                                    x.Answers.Select(a => a.Answer).FirstOrDefault(a => a.Length == 7)\n                                    ?? this.Data.Context.ParticipantAnswers.Where(\n                                        a =>\n                                        a.Participant.UserId == x.UserId && a.Participant.IsOfficial && a.Answer.Length == 7)\n                                           .Select(a => a.Answer)\n                                           .FirstOrDefault()\n                            })\n                    .ToList()\n                    .OrderBy(x => x.UserName);\n\n            // Prepare file comment\n            var fileComment = new StringBuilder();\n            fileComment.AppendLine(string.Format(\"{1} submissions for {0}\", contest.Name, compete ? \"Contest\" : \"Practice\"));\n            fileComment.AppendLine(string.Format(\"Number of participants: {0}\", participants.Count()));\n            fileComment.AppendLine();\n            fileComment.AppendLine(\"Problems:\");\n            foreach (var problem in problems)\n            {\n                fileComment.AppendLine(\n                    string.Format(\n                        \"{0} - {1} points, time limit: {2:0.000} sec., memory limit: {3:0.00} MB\",\n                        problem.Name,\n                        problem.MaximumPoints,\n                        problem.TimeLimit / 1000.0,\n                        problem.MemoryLimit / 1024.0 / 1024.0));\n            }\n\n            // Prepare zip file\n            var file = new ZipFile\n            {\n                Comment = fileComment.ToString(),\n                AlternateEncoding = Encoding.UTF8,\n                AlternateEncodingUsage = ZipOption.AsNecessary\n            };\n\n            // Add participants solutions\n            foreach (var participant in participants)\n            {\n                // Create directory with the participants name\n                var directoryName =\n                    string.Format(\"{0} [{1}] [{2}]\", participant.UserName, participant.Email, participant.StudentsNumber)\n                        .ToValidFilePath();\n                file.AddDirectoryByName(directoryName);\n\n                foreach (var problem in problems)\n                {\n                    // Find submission\n                    var bestSubmission =\n                        this.Data.Submissions.All()\n                            .Where(\n                                submission =>\n                                submission.ParticipantId == participant.Id && submission.ProblemId == problem.Id)\n                            .OrderByDescending(submission => submission.Points)\n                            .ThenByDescending(submission => submission.Id)\n                            .FirstOrDefault();\n\n                    // Create file if submission exists\n                    if (bestSubmission != null)\n                    {\n                        var fileName =\n                            string.Format(\"{0}.{1}\", problem.Name, bestSubmission.FileExtension ?? bestSubmission.SubmissionType.FileNameExtension)\n                                .ToValidFileName();\n\n                        var content = bestSubmission.IsBinaryFile ? bestSubmission.Content : bestSubmission.ContentAsString.ToByteArray();\n\n                        var entry = file.AddEntry(string.Format(\"{0}\\\\{1}\", directoryName, fileName), content);\n                        entry.CreationTime = bestSubmission.CreatedOn;\n                        entry.ModifiedTime = bestSubmission.CreatedOn;\n                    }\n                }\n            }\n\n            // Send file to the user\n            var zipFileName = string.Format(\"{1} submissions for {0}.zip\", contest.Name, compete ? \"Contest\" : \"Practice\");\n            return new ZipFileResult(file, zipFileName);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/FeedbackController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.FeedbackReport;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.FeedbackReport.FeedbackReportViewModel;\n\n    public class FeedbackController : KendoGridAdministrationController\n    {\n        public FeedbackController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.FeedbackReports\n                .All()\n                .Select(ViewModelType.FromFeedbackReport);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.FeedbackReports\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var databaseModel = model.GetEntityModel();\n            model.Id = (int)this.BaseCreate(databaseModel);\n            this.UpdateAuditInfoValues(model, databaseModel);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Id) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/NavigationController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    public class NavigationController : AdministrationController\n    {\n        public NavigationController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/NewsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Areas.Administration.Providers;\n    using OJS.Web.Areas.Administration.Providers.Contracts;\n    using OJS.Web.Controllers;\n\n    using Resources.News.Views;\n\n    using DatabaseModelType = OJS.Data.Models.News;\n    using Resource = Resources.News;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.News.NewsAdministrationViewModel;\n\n    public class NewsController : KendoGridAdministrationController\n    {\n        public NewsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.News.All()\n                .Where(news => !news.IsDeleted)\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.News\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var databaseModel = model.GetEntityModel();\n            model.Id = (int)this.BaseCreate(databaseModel);\n            this.UpdateAuditInfoValues(model, databaseModel);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Id) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            this.UpdateAuditInfoValues(model, entity);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n\n        public ActionResult Fetch()\n        {\n            var providers = new List<INewsProvider>\n            {\n                new InfoManNewsProvider(),\n                new InfosNewsProvider()\n            };\n\n            var allNews = new List<DatabaseModelType>();\n\n            foreach (var newsProvider in providers)\n            {\n                allNews.AddRange(newsProvider.FetchNews());\n            }\n\n            this.PopulateDatabaseWithNews(allNews);\n\n            this.TempData[GlobalConstants.InfoMessage] = All.News_successfully_added;\n            return this.RedirectToAction(\"All\", \"News\", new { Area = string.Empty });\n        }\n\n        private void PopulateDatabaseWithNews(IEnumerable<DatabaseModelType> fetchedNews)\n        {\n            foreach (var news in fetchedNews)\n            {\n                if (!string.IsNullOrEmpty(news.Title) && !string.IsNullOrEmpty(news.Content) && news.Content.Length > 10 && !this.Data.News.All().Any(existingNews => existingNews.Title == news.Title))\n                {\n                    this.Data.News.Add(news);\n                }\n\n                this.Data.SaveChanges();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ParticipantsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using Newtonsoft.Json;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Areas.Administration.ViewModels.Participant;\n    using OJS.Web.Controllers;\n\n    using AnswerViewModelType = OJS.Web.Areas.Administration.ViewModels.Participant.ParticipantAnswerViewModel;\n    using DatabaseModelType = OJS.Data.Models.Participant;\n    using GlobalResource = Resources.Areas.Administration.Problems.ProblemsControllers;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.Participant.ParticipantAdministrationViewModel;\n\n    public class ParticipantsController : KendoGridAdministrationController\n    {\n        public ParticipantsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Participants\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Participants\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        public ActionResult Contest(int id)\n        {\n            return this.View(id);\n        }\n\n        [HttpPost]\n        public ActionResult ReadParticipants([DataSourceRequest]DataSourceRequest request, int? id)\n        {\n            if (id == null)\n            {\n                return this.Read(request);\n            }\n\n            var participants = this.Data.Participants\n                .All()\n                .Where(p => p.ContestId == id)\n                .Select(ViewModelType.ViewModel);\n\n            var serializationSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };\n            var json = JsonConvert.SerializeObject(participants.ToDataSourceResult(request), Formatting.None, serializationSettings);\n            return this.Content(json, GlobalConstants.JsonMimeType);\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var contest = this.Data.Contests.All().FirstOrDefault(c => c.Id == model.ContestId);\n            var user = this.Data.Users.All().FirstOrDefault(u => u.Id == model.UserId);\n\n            if (contest == null || user == null)\n            {\n                if (contest == null)\n                {\n                    this.ModelState.AddModelError(\"ContestId\", GlobalResource.Invalid_contest);\n                }\n\n                if (user == null)\n                {\n                    this.ModelState.AddModelError(\"UserId\", GlobalResource.Invalid_user);\n                }\n\n                return this.GridOperation(request, model);\n            }\n\n            var participant = model.GetEntityModel();\n            participant.Contest = contest;\n            participant.User = user;\n\n            model.Id = (int)this.BaseCreate(participant);\n            model.UserName = user.UserName;\n            model.ContestName = contest.Name;\n            this.UpdateAuditInfoValues(model, participant);\n\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n\n        public JsonResult Contests(string text)\n        {\n            var contests = this.Data.Contests\n                .All()\n                .Select(ContestViewModel.ViewModel);\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                contests = contests.Where(c => c.Name.ToLower().Contains(text.ToLower()));\n            }\n\n            return this.Json(contests, JsonRequestBehavior.AllowGet);\n        }\n\n        public JsonResult Users(string text)\n        {\n            var users = this.Data.Users\n                .All()\n                .Select(UserViewModel.ViewModel);\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                users = users.Where(c => c.Name.ToLower().Contains(text.ToLower()));\n            }\n\n            return this.Json(users, JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult RenderGrid(int? id)\n        {\n            return this.PartialView(\"_Participants\", id);\n        }\n\n        [HttpGet]\n        public FileResult ExportToExcelByContest(DataSourceRequest request, int contestId)\n        {\n            var data = ((IEnumerable<ViewModelType>)this.GetData()).Where(p => p.ContestId == contestId);\n            return this.ExportToExcel(request, data);\n        }\n\n        [HttpPost]\n        public JsonResult Answers([DataSourceRequest]DataSourceRequest request, int id)\n        {\n            var answers = this.Data.Participants\n                .GetById(id)\n                .Answers\n                .AsQueryable()\n                .Select(AnswerViewModelType.ViewModel);\n\n            return this.Json(answers.ToDataSourceResult(request));\n        }\n\n        public JsonResult UpdateParticipantAnswer([DataSourceRequest]DataSourceRequest request, AnswerViewModelType model)\n        {\n            var participantAnswer = this.Data.Participants\n                .GetById(model.ParticipantId)\n                .Answers\n                .First(a => a.ContestQuestionId == model.ContestQuestionId);\n\n            participantAnswer.Answer = model.Answer;\n            participantAnswer.Participant = this.Data.Participants.GetById(model.ParticipantId);\n            participantAnswer.ContestQuestion = this.Data.ContestQuestions.GetById(model.ContestQuestionId);\n            this.Data.SaveChanges();\n\n            return this.GridOperation(request, model);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ProblemsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Contest;\n    using OJS.Web.Areas.Administration.ViewModels.Problem;\n    using OJS.Web.Areas.Administration.ViewModels.ProblemResource;\n    using OJS.Web.Areas.Administration.ViewModels.Submission;\n    using OJS.Web.Common;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Common.ZippedTestManipulator;\n    using OJS.Web.Controllers;\n\n    using GlobalResource = Resources.Areas.Administration.Problems.ProblemsControllers;\n\n    public class ProblemsController : AdministrationController\n    {\n        public ProblemsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        public ActionResult Contest(int? id)\n        {\n            this.ViewBag.ContestId = id;\n\n            return this.View(GlobalConstants.Index);\n        }\n\n        public ActionResult Resource(int? id)\n        {\n            var problem = this.Data.Problems\n                .All()\n                .FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            this.ViewBag.ContestId = problem.ContestId;\n            this.ViewBag.ProblemId = problem.Id;\n\n            return this.View(GlobalConstants.Index);\n        }\n\n        [HttpGet]\n        public ActionResult Create(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var contest = this.Data.Contests.All().FirstOrDefault(x => x.Id == id);\n\n            if (contest == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var checkers = this.Data.Checkers.All()\n                .Select(x => x.Name);\n\n            var lastOrderBy = -1;\n            var lastProblem = this.Data.Problems.All().Where(x => x.ContestId == id);\n\n            if (lastProblem.Any())\n            {\n                lastOrderBy = lastProblem.Max(x => x.OrderBy);\n            }\n\n            var problem = new DetailedProblemViewModel\n            {\n                Name = \"Име\",\n                MaximumPoints = 100,\n                TimeLimit = 100,\n                MemoryLimit = 16777216,\n                AvailableCheckers = this.Data.Checkers.All().Select(checker => new SelectListItem { Text = checker.Name, Value = checker.Name }),\n                OrderBy = lastOrderBy + 1,\n                ContestId = contest.Id,\n                ContestName = contest.Name,\n                ShowResults = true,\n                ShowDetailedFeedback = false,\n            };\n\n            return this.View(problem);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Create(int id, HttpPostedFileBase testArchive, DetailedProblemViewModel problem)\n        {\n            if (problem.Resources != null && problem.Resources.Any())\n            {\n                var validResources = problem.Resources\n                .All(res => !string.IsNullOrEmpty(res.Name) &&\n                    ((res.Type == ProblemResourceType.AuthorsSolution && res.File != null && res.File.ContentLength > 0) ||\n                    (res.Type == ProblemResourceType.ProblemDescription && res.File != null && res.File.ContentLength > 0) ||\n                    (res.Type == ProblemResourceType.Video && !string.IsNullOrEmpty(res.Link))));\n\n                if (!validResources)\n                {\n                    this.ModelState.AddModelError(\"Resources\", GlobalResource.Resources_not_complete);\n                }\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var newProblem = new Problem\n                {\n                    Name = problem.Name,\n                    ContestId = id,\n                    MaximumPoints = problem.MaximumPoints,\n                    MemoryLimit = problem.MemoryLimit,\n                    TimeLimit = problem.TimeLimit,\n                    SourceCodeSizeLimit = problem.SourceCodeSizeLimit,\n                    ShowResults = problem.ShowResults,\n                    ShowDetailedFeedback = problem.ShowDetailedFeedback,\n                    OrderBy = problem.OrderBy,\n                    Checker = this.Data.Checkers.All().FirstOrDefault(x => x.Name == problem.Checker)\n                };\n\n                if (problem.Resources != null && problem.Resources.Any())\n                {\n                    this.AddResourcesToProblem(newProblem, problem.Resources);\n                }\n\n                if (testArchive != null && testArchive.ContentLength != 0)\n                {\n                    try\n                    {\n                        this.AddTestsToProblem(newProblem, testArchive);\n                    }\n                    catch (Exception ex)\n                    {\n                        // TempData is not working with return this.View\n                        var systemMessages = new SystemMessageCollection\n                                {\n                                    new SystemMessage\n                                    {\n                                        Content = ex.Message,\n                                        Type = SystemMessageType.Error,\n                                        Importance = 0\n                                    }\n                                };\n                        this.ViewBag.SystemMessages = systemMessages;\n                        problem.AvailableCheckers = this.Data.Checkers.All().Select(checker => new SelectListItem { Text = checker.Name, Value = checker.Name });\n                        return this.View(problem);\n                    }\n                }\n\n                this.Data.Problems.Add(newProblem);\n                this.Data.SaveChanges();\n\n                this.TempData.AddInfoMessage(GlobalResource.Problem_added);\n                return this.RedirectToAction(\"Contest\", new { id });\n            }\n\n            problem.AvailableCheckers = this.Data.Checkers.All().Select(checker => new SelectListItem { Text = checker.Name, Value = checker.Name });\n\n            return this.View(problem);\n        }\n\n        [HttpGet]\n        public ActionResult Edit(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            // TODO: Fix this query to use the static method from DetailedProblemViewModel\n            var selectedProblem = this.Data.Problems.All()\n                .Where(x => x.Id == id)\n                .Select(problem => new DetailedProblemViewModel\n                {\n                    Id = problem.Id,\n                    Name = problem.Name,\n                    ContestId = problem.ContestId,\n                    ContestName = problem.Contest.Name,\n                    TrialTests = problem.Tests.AsQueryable().Count(x => x.IsTrialTest),\n                    CompeteTests = problem.Tests.AsQueryable().Count(x => !x.IsTrialTest),\n                    MaximumPoints = problem.MaximumPoints,\n                    TimeLimit = problem.TimeLimit,\n                    MemoryLimit = problem.MemoryLimit,\n                    ShowResults = problem.ShowResults,\n                    ShowDetailedFeedback = problem.ShowDetailedFeedback,\n                    SourceCodeSizeLimit = problem.SourceCodeSizeLimit,\n                    Checker = problem.Checker.Name,\n                    OrderBy = problem.OrderBy\n                })\n                .FirstOrDefault();\n\n            if (selectedProblem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var checkers = this.Data.Checkers\n                .All()\n                .AsQueryable()\n                .Select(checker => new SelectListItem { Text = checker.Name, Value = checker.Name });\n\n            selectedProblem.AvailableCheckers = checkers;\n\n            return this.View(selectedProblem);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Edit(int id, DetailedProblemViewModel problem)\n        {\n            if (problem != null && this.ModelState.IsValid)\n            {\n                var existingProblem = this.Data.Problems.All()\n                .FirstOrDefault(x => x.Id == id);\n\n                existingProblem.Name = problem.Name;\n                existingProblem.MaximumPoints = problem.MaximumPoints;\n                existingProblem.TimeLimit = problem.TimeLimit;\n                existingProblem.MemoryLimit = problem.MemoryLimit;\n                existingProblem.SourceCodeSizeLimit = problem.SourceCodeSizeLimit;\n                existingProblem.ShowResults = problem.ShowResults;\n                existingProblem.ShowDetailedFeedback = problem.ShowDetailedFeedback;\n                existingProblem.Checker = this.Data.Checkers.All().FirstOrDefault(x => x.Name == problem.Checker);\n                existingProblem.OrderBy = problem.OrderBy;\n\n                this.Data.SaveChanges();\n\n                this.TempData.AddInfoMessage(GlobalResource.Problem_edited);\n                return this.RedirectToAction(\"Contest\", new { id = existingProblem.ContestId });\n            }\n\n            problem.AvailableCheckers = this.Data.Checkers.All().Select(checker => new SelectListItem { Text = checker.Name, Value = checker.Name });\n            return this.View(problem);\n        }\n\n        [HttpGet]\n        public ActionResult Delete(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var selectedProblem = this.Data.Problems.All()\n                .Where(x => x.Id == id)\n                .Select(problem => new DetailedProblemViewModel\n                {\n                    Id = problem.Id,\n                    Name = problem.Name,\n                    ContestId = problem.ContestId,\n                    ContestName = problem.Contest.Name,\n                    TrialTests = problem.Tests.AsQueryable().Count(x => x.IsTrialTest),\n                    CompeteTests = problem.Tests.AsQueryable().Count(x => !x.IsTrialTest),\n                    MaximumPoints = problem.MaximumPoints,\n                    TimeLimit = problem.TimeLimit,\n                    MemoryLimit = problem.MemoryLimit,\n                    SourceCodeSizeLimit = problem.SourceCodeSizeLimit,\n                    Checker = problem.Checker.Name,\n                    OrderBy = problem.OrderBy,\n                    ShowResults = problem.ShowResults,\n                    ShowDetailedFeedback = problem.ShowDetailedFeedback\n                })\n                .FirstOrDefault();\n\n            if (selectedProblem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(selectedProblem);\n        }\n\n        public ActionResult ConfirmDelete(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All()\n                .FirstOrDefault(x => x.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            foreach (var resource in problem.Resources.ToList())\n            {\n                this.Data.Resources.Delete(resource.Id);\n            }\n\n            foreach (var submission in problem.Submissions.ToList())\n            {\n                this.Data.TestRuns.DeleteBySubmissionId(submission.Id);\n                this.Data.Submissions.Delete(submission.Id);\n            }\n\n            this.Data.Problems.Delete(id.Value);\n            this.Data.SaveChanges();\n\n            this.TempData.AddInfoMessage(GlobalResource.Problem_deleted);\n            return this.RedirectToAction(\"Contest\", new { id = problem.ContestId });\n        }\n\n        [HttpGet]\n        public ActionResult DeleteAll(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var contest = this.Data.Contests.All()\n                .Where(x => x.Id == id)\n                .Select(ContestAdministrationViewModel.ViewModel)\n                .FirstOrDefault();\n\n            if (contest == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(contest);\n        }\n\n        public ActionResult ConfirmDeleteAll(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var contest = this.Data.Contests.All()\n                .FirstOrDefault(x => x.Id == id);\n\n            if (contest == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_contest);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            // TODO: check for N + 1\n            foreach (var problem in contest.Problems.ToList())\n            {\n                // TODO: Add cascading deletion of submissions, tests, resources\n                this.Data.Problems.Delete(problem.Id);\n            }\n\n            this.Data.SaveChanges();\n\n            this.TempData.AddInfoMessage(GlobalResource.Problems_deleted);\n            return this.RedirectToAction(\"Contest\", new { id });\n        }\n\n        public ActionResult Details(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All()\n                .Where(pr => pr.Id == id)\n                .Select(DetailedProblemViewModel.FromProblem)\n                .FirstOrDefault();\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(problem);\n        }\n\n        public ActionResult Retest(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems\n                .All()\n                .FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(GlobalResource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            this.Data.Submissions.All().Where(s => s.ProblemId == id).Select(s => s.Id).ForEach(this.RetestSubmission);\n            this.Data.SaveChanges();\n\n            this.TempData.AddInfoMessage(GlobalResource.Problem_retested);\n            return this.RedirectToAction(\"Contest\", new { id = problem.ContestId });\n        }\n\n        [HttpGet]\n        public ActionResult GetSubmissions(int id)\n        {\n            return this.PartialView(\"_SubmissionsGrid\", id);\n        }\n\n        [HttpPost]\n        public JsonResult ReadSubmissions([DataSourceRequest]DataSourceRequest request, int id)\n        {\n            var submissions = this.Data.Submissions\n                .All()\n                .Where(s => s.ProblemId == id)\n                .Select(SubmissionAdministrationGridViewModel.ViewModel);\n\n            return this.Json(submissions.ToDataSourceResult(request));\n        }\n\n        [HttpGet]\n        public ActionResult GetResources(int id)\n        {\n            return this.PartialView(\"_ResourcesGrid\", id);\n        }\n\n        [HttpPost]\n        public ActionResult ReadResources([DataSourceRequest]DataSourceRequest request, int id)\n        {\n            var resources = this.Data.Resources\n                .All()\n                .Where(r => r.ProblemId == id)\n                .Select(ProblemResourceGridViewModel.FromResource);\n\n            return this.Json(resources.ToDataSourceResult(request));\n        }\n\n        [HttpGet]\n        public JsonResult ByContest(int id)\n        {\n            var result = this.GetData(id);\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public JsonResult GetCascadeCategories()\n        {\n            var result = this.Data.ContestCategories.All().Select(x => new { x.Id, x.Name });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public JsonResult GetCascadeContests(string categories)\n        {\n            var contests = this.Data.Contests.All();\n\n            int categoryId;\n\n            if (int.TryParse(categories, out categoryId))\n            {\n                contests = contests.Where(x => x.CategoryId == categoryId);\n            }\n\n            var result = contests.Select(x => new { x.Id, x.Name });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public JsonResult GetSearchedContests()\n        {\n            var result = this.Data.Contests.All().Select(x => new { x.Id, x.Name });\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public JsonResult GetContestInformation(string id)\n        {\n            // TODO: Add validation for Id\n            var contestIdNumber = int.Parse(id);\n            var contest = this.Data.Contests.All().FirstOrDefault(x => x.Id == contestIdNumber);\n\n            var contestId = contestIdNumber;\n            var categoryId = contest.CategoryId;\n\n            var result = new { contest = contestId, category = categoryId };\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public FileResult ExportToExcel([DataSourceRequest] DataSourceRequest request, int contestId)\n        {\n            return this.ExportToExcel(request, this.GetData(contestId));\n        }\n\n        // TODO: Transfer to ResourcesController\n        public ActionResult AddResourceForm(int id)\n        {\n            // TODO: Add validation for Id\n            var resourceViewModel = new ProblemResourceViewModel\n            {\n                Id = id,\n                AllTypes = Enum.GetValues(typeof(ProblemResourceType)).Cast<ProblemResourceType>().Select(v => new SelectListItem\n                {\n                    Text = v.GetDescription(),\n                    Value = ((int)v).ToString()\n                })\n            };\n\n            return this.PartialView(\"_ProblemResourceForm\", resourceViewModel);\n        }\n\n        private IEnumerable GetData(int id)\n        {\n            var result = this.Data.Problems.All()\n                .Where(x => x.ContestId == id)\n                .OrderBy(x => x.Name)\n                .Select(DetailedProblemViewModel.FromProblem);\n\n            return result;\n        }\n\n        private void AddResourcesToProblem(Problem problem, IEnumerable<ProblemResourceViewModel> resources)\n        {\n            var orderCount = 0;\n\n            foreach (var resource in resources)\n            {\n                if (!string.IsNullOrEmpty(resource.Name) && resource.Type == ProblemResourceType.Video && resource.Link != null)\n                {\n                    problem.Resources.Add(new ProblemResource\n                    {\n                        Name = resource.Name,\n                        Type = resource.Type,\n                        OrderBy = orderCount,\n                        Link = resource.Link,\n                    });\n\n                    orderCount++;\n                }\n                else if (!string.IsNullOrEmpty(resource.Name) && resource.Type != ProblemResourceType.Video && resource.File != null)\n                {\n                    problem.Resources.Add(new ProblemResource\n                    {\n                        Name = resource.Name,\n                        Type = resource.Type,\n                        OrderBy = orderCount,\n                        File = resource.File.InputStream.ToByteArray(),\n                        FileExtension = resource.FileExtension\n                    });\n\n                    orderCount++;\n                }\n            }\n        }\n\n        private void AddTestsToProblem(Problem problem, HttpPostedFileBase testArchive)\n        {\n            var extension = testArchive.FileName.Substring(testArchive.FileName.Length - 4, 4);\n\n            if (extension != GlobalConstants.ZipFileExtension)\n            {\n                throw new ArgumentException(GlobalResource.Must_be_zip_file);\n            }\n\n            using (var memory = new MemoryStream())\n            {\n                testArchive.InputStream.CopyTo(memory);\n                memory.Position = 0;\n\n                var parsedTests = ZippedTestsManipulator.Parse(memory);\n\n                if (parsedTests.ZeroInputs.Count != parsedTests.ZeroOutputs.Count || parsedTests.Inputs.Count != parsedTests.Outputs.Count)\n                {\n                    throw new ArgumentException(GlobalResource.Invalid_tests);\n                }\n\n                ZippedTestsManipulator.AddTestsToProblem(problem, parsedTests);\n            }\n        }\n\n        private void RetestSubmission(int submissionId)\n        {\n            var submission = new Submission { Id = submissionId, Processed = false, Processing = false };\n            this.Data.Context.Submissions.Attach(submission);\n            var entry = this.Data.Context.Entry(submission);\n            entry.Property(pr => pr.Processed).IsModified = true;\n            entry.Property(pr => pr.Processing).IsModified = true;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/ResourcesController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Linq;\n    using System.Net.Mime;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.ProblemResource;\n    using OJS.Web.Common;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Administration.Resources.ResourcesControllers;\n\n    public class ResourcesController : AdministrationController\n    {\n        public ResourcesController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public JsonResult GetAll(int id, [DataSourceRequest] DataSourceRequest request)\n        {\n            var resources = this.Data.Resources\n                .All()\n                .Where(res => res.ProblemId == id)\n                .OrderBy(res => res.OrderBy)\n                .Select(ProblemResourceGridViewModel.FromResource);\n\n            return this.Json(resources.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpGet]\n        public ActionResult Create(int id)\n        {\n            var problem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n            }\n\n            int orderBy;\n            var resources = problem.Resources.Where(res => !res.IsDeleted);\n\n            if (!resources.Any())\n            {\n                orderBy = 0;\n            }\n            else\n            {\n                orderBy = resources.Max(res => res.OrderBy) + 1;\n            }\n\n            var resource = new ProblemResourceViewModel\n            {\n                ProblemId = id,\n                ProblemName = problem.Name,\n                OrderBy = orderBy,\n                AllTypes = EnumConverter.GetSelectListItems<ProblemResourceType>()\n            };\n\n            return this.View(resource);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Create(int id, ProblemResourceViewModel resource)\n        {\n            if (resource == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_resource);\n                return this.RedirectToAction(\"Resource\", \"Problems\", new { id });\n            }\n\n            if (resource.Type == ProblemResourceType.Video && string.IsNullOrEmpty(resource.Link))\n            {\n                this.ModelState.AddModelError(\"Link\", Resource.Link_not_empty);\n            }\n            else if (resource.Type != ProblemResourceType.Video && (resource.File == null || resource.File.ContentLength == 0))\n            {\n                this.ModelState.AddModelError(\"File\", Resource.File_required);\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var problem = this.Data.Problems\n                    .All()\n                    .FirstOrDefault(x => x.Id == id);\n\n                if (problem == null)\n                {\n                    this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                    return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n                }\n\n                var newResource = new ProblemResource\n                {\n                    Name = resource.Name,\n                    Type = resource.Type,\n                    OrderBy = resource.OrderBy,\n                };\n\n                if (resource.Type == ProblemResourceType.Video)\n                {\n                    newResource.Link = resource.Link;\n                }\n                else\n                {\n                    newResource.File = resource.File.InputStream.ToByteArray();\n                    newResource.FileExtension = resource.FileExtension;\n                }\n\n                problem.Resources.Add(newResource);\n                this.Data.SaveChanges();\n\n                return this.RedirectToAction(\"Resource\", \"Problems\", new { id });\n            }\n\n            resource.AllTypes = EnumConverter.GetSelectListItems<ProblemResourceType>();\n            return this.View(resource);\n        }\n\n        [HttpGet]\n        public ActionResult Edit(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n            }\n\n            var existingResource = this.Data.Resources.All()\n                .Where(res => res.Id == id)\n                .Select(ProblemResourceViewModel.FromProblemResource)\n                .FirstOrDefault();\n\n            if (existingResource == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n            }\n\n            existingResource.AllTypes = EnumConverter.GetSelectListItems<ProblemResourceType>();\n\n            return this.View(existingResource);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Edit(int? id, ProblemResourceViewModel resource)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var existingResource = this.Data.Resources\n                    .All()\n                    .FirstOrDefault(res => res.Id == id);\n\n                if (existingResource == null)\n                {\n                    this.TempData.AddDangerMessage(Resource.Resource_not_found);\n                    return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n                }\n\n                existingResource.Name = resource.Name;\n                existingResource.Type = resource.Type;\n                existingResource.OrderBy = resource.OrderBy;\n\n                if (existingResource.Type == ProblemResourceType.Video && !string.IsNullOrEmpty(resource.Link))\n                {\n                    existingResource.Link = resource.Link;\n                }\n                else if (resource.Type != ProblemResourceType.Video && resource.File != null && resource.File.ContentLength > 0)\n                {\n                    existingResource.File = resource.File.InputStream.ToByteArray();\n                    existingResource.FileExtension = resource.FileExtension;\n                }\n\n                this.Data.SaveChanges();\n\n                return this.RedirectToAction(\"Resource\", \"Problems\", new { id = existingResource.ProblemId });\n            }\n\n            resource.AllTypes = EnumConverter.GetSelectListItems<ProblemResourceType>();\n            return this.View(resource);\n        }\n\n        [HttpGet]\n        public JsonResult Delete(ProblemResourceGridViewModel resource, [DataSourceRequest] DataSourceRequest request)\n        {\n            this.Data.Resources.Delete(resource.Id);\n            this.Data.SaveChanges();\n\n            return this.Json(new[] { resource }.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult Download(int id)\n        {\n            var resource = this.Data.Resources\n                .All()\n                .FirstOrDefault(res => res.Id == id);\n\n            var problem = this.Data.Problems\n                .All()\n                .FirstOrDefault(pr => pr.Id == resource.ProblemId);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_not_found);\n                return this.RedirectToAction(GlobalConstants.Index, \"Problems\");\n            }\n\n            if (resource == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Resource_not_found);\n                return this.Redirect(\"/Administration/Problems/Contest/\" + resource.Problem.ContestId);\n            }\n\n            var fileResult = resource.File.ToStream();\n            var fileName = \"Resource-\" + resource.Id + \"-\" + problem.Name.Replace(\" \", string.Empty) + \".\" + resource.FileExtension;\n\n            return this.File(fileResult, MediaTypeNames.Application.Octet, fileName);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/RolesController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Data;\n    using OJS.Web.Areas.Administration.ViewModels.Roles;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = Microsoft.AspNet.Identity.EntityFramework.IdentityRole;\n    using DetailModelType = OJS.Web.Areas.Administration.ViewModels.Roles.UserInRoleAdministrationViewModel;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.Roles.RoleAdministrationViewModel;\n\n    public class RolesController : KendoGridAdministrationController\n    {\n        private const string EntityKeyName = \"Id\";\n\n        public RolesController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Roles\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Roles\n                .All()\n                .FirstOrDefault(o => o.Id == (string)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return EntityKeyName;\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            model.RoleId = Guid.NewGuid().ToString();\n            this.BaseCreate(model.GetEntityModel());\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.RoleId) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.RoleId);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public JsonResult UsersInRole([DataSourceRequest]DataSourceRequest request, string id)\n        {\n            var users = this.Data.Users\n                .All()\n                .Where(u => u.Roles.Any(r => r.RoleId == id))\n                .Select(DetailModelType.ViewModel);\n\n            return this.Json(users.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult AvailableUsersForRole(string text)\n        {\n            var users = this.Data.Users.All();\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                users = users.Where(u => u.UserName.ToLower().Contains(text.ToLower()));\n            }\n\n            var result = users\n                .ToList()\n                .Select(pr => new SelectListItem\n                {\n                    Text = pr.UserName,\n                    Value = pr.Id,\n                });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpPost]\n        public ActionResult AddUserToRole([DataSourceRequest]DataSourceRequest request, string id, string userId)\n        {\n            var user = this.Data.Users.GetById(userId);\n            var role = this.Data.Roles.All().FirstOrDefault(r => r.Id == id);\n\n            user.Roles.Add(new IdentityUserRole { RoleId = role.Id, UserId = userId });\n            this.Data.SaveChanges();\n\n            var result = new UserInRoleAdministrationViewModel\n            {\n                UserId = user.Id,\n                UserName = user.UserName,\n                FirstName = user.UserSettings.FirstName,\n                LastName = user.UserSettings.LastName,\n                Email = user.Email\n            };\n\n            return this.Json(new[] { result }.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);\n        }\n\n        [HttpPost]\n        public ActionResult DeleteUserFromRole([DataSourceRequest]DataSourceRequest request, string id, DetailModelType model)\n        {\n            var user = this.Data.Users.GetById(model.UserId);\n            var role = user.Roles.FirstOrDefault(r => r.RoleId == id);\n\n            user.Roles.Remove(role);\n            this.Data.SaveChanges();\n\n            return this.Json(this.ModelState.ToDataSourceResult());\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/SettingsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.Setting;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.Setting.SettingAdministrationViewModel;\n\n    public class SettingsController : KendoGridAdministrationController\n    {\n        public SettingsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Settings\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Settings\n                .All()\n                .FirstOrDefault(o => o.Name == (string)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var id = this.BaseCreate(model.GetEntityModel());\n            model.Name = (string)id;\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Name) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Name);\n            return this.GridOperation(request, model);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/SubmissionTypesController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.SubmissionType;\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.SubmissionType.SubmissionTypeAdministrationViewModel;\n\n    public class SubmissionTypesController : KendoGridAdministrationController\n    {\n        public SubmissionTypesController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.SubmissionTypes\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.SubmissionTypes\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Create([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var databaseModel = model.GetEntityModel();\n            model.Id = (int)this.BaseCreate(databaseModel);\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var entity = this.GetById(model.Id) as DatabaseModelType;\n            this.BaseUpdate(model.GetEntityModel(entity));\n            return this.GridOperation(request, model);\n        }\n\n        [HttpPost]\n        public ActionResult Destroy([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            this.BaseDestroy(model.Id);\n            return this.GridOperation(request, model);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/SubmissionsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Submission;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Controllers;\n\n    using DatabaseModelType = OJS.Data.Models.Submission;\n    using GridModelType = OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationGridViewModel;\n    using ModelType = OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationViewModel;\n    using Resource = Resources.Areas.Administration.Submissions.SubmissionsControllers;\n\n    public class SubmissionsController : KendoGridAdministrationController\n    {\n        private int? contestId;\n\n        public SubmissionsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            var submissions = this.Data.Submissions.All();\n\n            if (this.contestId != null)\n            {\n                submissions = submissions.Where(s => s.Problem.ContestId == this.contestId);\n            }\n\n            return submissions.Select(GridModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Submissions\n                .All()\n                .FirstOrDefault(o => o.Id == (int)id);\n        }\n\n        public override string GetEntityKeyName()\n        {\n            return this.GetEntityKeyNameByType(typeof(DatabaseModelType));\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpGet]\n        public ActionResult Create()\n        {\n            this.ViewBag.SubmissionAction = \"Create\";\n            var model = new SubmissionAdministrationViewModel();\n            return this.View(model);\n        }\n\n        [HttpPost]\n        public ActionResult ReadSubmissions([DataSourceRequest]DataSourceRequest request, int? id)\n        {\n            this.contestId = id;\n            return this.Read(request);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Create(ModelType model)\n        {\n            if (model != null && this.ModelState.IsValid)\n            {\n                if (model.ProblemId.HasValue)\n                {\n                    var problem = this.Data.Problems.GetById(model.ProblemId.Value);\n                    if (problem != null)\n                    {\n                        this.ValidateParticipant(model.ParticipantId, problem.ContestId);\n                    }\n\n                    var submissionType = this.GetSubmissionType(model.SubmissionTypeId.Value);\n                    if (submissionType != null)\n                    {\n                        this.ValidateSubmissionContentLength(model, problem);\n                        this.ValidateBinarySubmission(model, problem, submissionType);\n                    }\n                }\n\n                if (this.ModelState.IsValid)\n                {\n                    this.BaseCreate(model.GetEntityModel());\n                    this.TempData.AddInfoMessage(Resource.Successful_creation_message);\n                    return this.RedirectToAction(GlobalConstants.Index);\n                }\n            }\n\n            this.ViewBag.SubmissionAction = \"Create\";\n            return this.View(model);\n        }\n\n        [HttpGet]\n        public ActionResult Update(int id)\n        {\n            var submission = this.Data.Submissions\n                .All()\n                .Where(subm => subm.Id == id)\n                .Select(ModelType.ViewModel)\n                .FirstOrDefault();\n\n            if (submission == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_submission_message);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            this.ViewBag.SubmissionAction = \"Update\";\n            return this.View(submission);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Update(ModelType model)\n        {\n            if (model.Id.HasValue)\n            {\n                var submission = this.Data.Submissions.GetById(model.Id.Value);\n                if (model.SubmissionTypeId.HasValue)\n                {\n                    var submissionType = this.Data.SubmissionTypes.GetById(model.SubmissionTypeId.Value);\n                    if (submissionType.AllowBinaryFilesUpload && model.FileSubmission == null)\n                    {\n                        model.Content = submission.Content;\n                        model.FileExtension = submission.FileExtension;\n                        if (this.ModelState.ContainsKey(\"Content\"))\n                        {\n                            this.ModelState[\"Content\"].Errors.Clear();\n                        }\n                    }\n                }\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                if (model.ProblemId.HasValue)\n                {\n                    var problem = this.Data.Problems.GetById(model.ProblemId.Value);\n                    if (problem != null)\n                    {\n                        this.ValidateParticipant(model.ParticipantId, problem.ContestId);\n                    }\n\n                    var submissionType = this.GetSubmissionType(model.SubmissionTypeId.Value);\n                    if (submissionType != null)\n                    {\n                        this.ValidateSubmissionContentLength(model, problem);\n                        this.ValidateBinarySubmission(model, problem, submissionType);\n                    }\n                }\n\n                if (this.ModelState.IsValid)\n                {\n                    var entity = this.GetById(model.Id) as DatabaseModelType;\n                    this.UpdateAuditInfoValues(model, entity);\n                    this.BaseUpdate(model.GetEntityModel(entity));\n                    this.TempData.AddInfoMessage(Resource.Successful_edit_message);\n                    return this.RedirectToAction(GlobalConstants.Index);\n                }\n            }\n\n            this.ViewBag.SubmissionAction = \"Update\";\n            return this.View(model);\n        }\n\n        [HttpGet]\n        public ActionResult Delete(int id)\n        {\n            var submission = this.Data.Submissions\n                .All()\n                .Where(subm => subm.Id == id)\n                .Select(GridModelType.ViewModel)\n                .FirstOrDefault();\n\n            if (submission == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_submission_message);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(submission);\n        }\n\n        public ActionResult ConfirmDelete(int id)\n        {\n            var submission = this.Data.Submissions\n                .All()\n                .FirstOrDefault(subm => subm.Id == id);\n\n            if (submission == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_submission_message);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            foreach (var testRun in submission.TestRuns.ToList())\n            {\n                this.Data.TestRuns.Delete(testRun.Id);\n            }\n\n            this.Data.Submissions.Delete(id);\n            this.Data.SaveChanges();\n\n            return this.RedirectToAction(GlobalConstants.Index);\n        }\n\n        public JsonResult GetSubmissionTypes(int problemId, bool? allowBinaryFilesUpload)\n        {\n            var selectedProblemContest = this.Data.Contests.All().FirstOrDefault(contest => contest.Problems.Any(problem => problem.Id == problemId));\n\n            var submissionTypesSelectListItems = selectedProblemContest.SubmissionTypes\n                .ToList()\n                .Select(submissionType => new\n                {\n                    Text = submissionType.Name,\n                    Value = submissionType.Id.ToString(),\n                    submissionType.AllowBinaryFilesUpload,\n                    submissionType.AllowedFileExtensions\n                });\n\n            if (allowBinaryFilesUpload.HasValue)\n            {\n                submissionTypesSelectListItems = submissionTypesSelectListItems\n                    .Where(submissionType => submissionType.AllowBinaryFilesUpload == allowBinaryFilesUpload);\n            }\n\n            return this.Json(submissionTypesSelectListItems, JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult Retest(int id)\n        {\n            var submission = this.Data.Submissions.GetById(id);\n\n            if (submission == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_submission_message);\n            }\n            else\n            {\n                submission.Processed = false;\n                submission.Processing = false;\n                this.Data.SaveChanges();\n\n                this.TempData.AddInfoMessage(Resource.Retest_successful);\n            }\n\n            return this.RedirectToAction(\"View\", \"Submissions\", new { area = \"Contests\", id });\n        }\n\n        public JsonResult GetProblems(string text)\n        {\n            var dropDownData = this.Data.Problems.All();\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                dropDownData = dropDownData.Where(pr => pr.Name.ToLower().Contains(text.ToLower()));\n            }\n\n            var result = dropDownData\n                .ToList()\n                .Select(pr => new SelectListItem\n                {\n                    Text = pr.Name,\n                    Value = pr.Id.ToString(),\n                });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        public JsonResult GetParticipants(string text, int problem)\n        {\n            var selectedProblem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == problem);\n\n            var dropDownData = this.Data.Participants.All().Where(part => part.ContestId == selectedProblem.ContestId);\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                dropDownData = dropDownData.Where(part => part.User.UserName.ToLower().Contains(text.ToLower()));\n            }\n\n            var result = dropDownData\n                .ToList()\n                .Select(part => new SelectListItem\n                {\n                    Text = part.User.UserName,\n                    Value = part.Id.ToString(),\n                });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult RenderGrid(int? id)\n        {\n            return this.PartialView(\"_SubmissionsGrid\", id);\n        }\n\n        public JsonResult Contests(string text)\n        {\n            var contests = this.Data.Contests.All()\n                .OrderByDescending(c => c.CreatedOn)\n                .Select(c => new { c.Id, c.Name });\n\n            if (!string.IsNullOrEmpty(text))\n            {\n                contests = contests.Where(c => c.Name.ToLower().Contains(text.ToLower()));\n            }\n\n            return this.Json(contests, JsonRequestBehavior.AllowGet);\n        }\n\n        public FileResult GetSubmissionFile(int submissionId)\n        {\n            var submission = this.Data.Submissions.GetById(submissionId);\n\n            return this.File(\n                submission.Content,\n                GlobalConstants.BinaryFileMimeType,\n                string.Format(\"{0}_{1}.{2}\", submission.Participant.User.UserName, submission.Problem.Name, submission.FileExtension));\n        }\n\n        private SubmissionType GetSubmissionType(int submissionTypeId)\n        {\n            var submissionType = this.Data.SubmissionTypes.GetById(submissionTypeId);\n\n            if (submissionType != null)\n            {\n                return submissionType;\n            }\n\n            this.ModelState.AddModelError(\"SubmissionTypeId\", Resource.Wrong_submision_type);\n            return null;\n        }\n\n        private void ValidateParticipant(int? participantId, int contestId)\n        {\n            if (participantId.HasValue)\n            {\n                if (!this.Data.Participants.All().Any(participant => participant.Id == participantId.Value && participant.ContestId == contestId))\n                {\n                    this.ModelState.AddModelError(\"ParticipantId\", Resource.Invalid_task_for_participant);\n                }\n            }\n        }\n\n        private void ValidateSubmissionContentLength(ModelType model, Problem problem)\n        {\n            if (model.Content.Length > problem.SourceCodeSizeLimit)\n            {\n                this.ModelState.AddModelError(\"Content\", Resource.Submission_content_length_invalid);\n            }\n        }\n\n        private void ValidateBinarySubmission(ModelType model, Problem problem, SubmissionType submissionType)\n        {\n            if (submissionType.AllowBinaryFilesUpload && !string.IsNullOrEmpty(model.ContentAsString))\n            {\n                this.ModelState.AddModelError(\"SubmissionTypeId\", Resource.Wrong_submision_type);\n            }\n\n            if (submissionType.AllowedFileExtensions != null)\n            {\n                if (!submissionType.AllowedFileExtensionsList.Contains(model.FileExtension))\n                {\n                    this.ModelState.AddModelError(\"Content\", Resource.Invalid_file_extention);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/TestsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n    using System.Net.Mime;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Ionic.Zip;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Problem;\n    using OJS.Web.Areas.Administration.ViewModels.Test;\n    using OJS.Web.Areas.Administration.ViewModels.TestRun;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Common.ZippedTestManipulator;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Administration.Tests.TestsControllers;\n\n    /// <summary>\n    /// Controller class for administrating problems' input and output tests, inherits Administration controller for authorisation\n    /// </summary>\n    public class TestsController : AdministrationController\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TestsController\"/> class.\n        /// </summary>\n        /// <param name=\"data\">Open Judge System Database context for the controller to work with</param>\n        public TestsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration index page\n        /// </summary>\n        /// <returns>View for /Administration/Tests/</returns>\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration index page and populates problem, contest, category dropdowns and tests grid if problem id is correct\n        /// </summary>\n        /// <param name=\"id\">Problem id which tests are populated</param>\n        /// <returns>View for /Administration/Tests/Problem/{id}</returns>\n        public ActionResult Problem(int? id)\n        {\n            this.ViewBag.ProblemId = id;\n\n            return this.View(GlobalConstants.Index);\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration create page with HTTP Get request - creating tests for a problem selected by id\n        /// </summary>\n        /// <param name=\"id\">Problem id for which a test will be created</param>\n        /// <returns>View for /Administration/Tests/Create/ if problem id is correct otherwise redirects to /Administration/Tests/ with proper error message</returns>\n        [HttpGet]\n        public ActionResult Create(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var test = new TestViewModel\n            {\n                ProblemId = problem.Id,\n                ProblemName = problem.Name,\n            };\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Redirects to Problem action after successful creation of new test with HTTP Post request\n        /// </summary>\n        /// <param name=\"id\">Problem id for which the posted test will be saved</param>\n        /// <param name=\"test\">Created test posted information</param>\n        /// <returns>Redirects to /Administration/Tests/Problem/{id} after succesful creation otherwise to /Administration/Test/ with proper error message</returns>\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Create(int id, TestViewModel test)\n        {\n            var problem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            if (test != null && this.ModelState.IsValid)\n            {\n                this.Data.Tests.Add(new Test\n                {\n                    InputDataAsString = test.InputFull,\n                    OutputDataAsString = test.OutputFull,\n                    ProblemId = id,\n                    IsTrialTest = test.IsTrialTest,\n                    OrderBy = test.OrderBy\n                });\n\n                this.Data.SaveChanges();\n\n                this.RetestSubmissions(problem.Id);\n\n                this.TempData.AddInfoMessage(Resource.Test_added_successfully);\n                return this.RedirectToAction(\"Problem\", new { id });\n            }\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration edit page with HTTP Get request - editing test by id\n        /// </summary>\n        /// <param name=\"id\">Id for test to be edited</param>\n        /// <returns>View for /Administration/Tests/Edit/{id} otherwise redirects to /Administration/Test/ with proper error message</returns>\n        [HttpGet]\n        public ActionResult Edit(int id)\n        {\n            var test = this.Data.Tests.All()\n                .Where(t => t.Id == id)\n                .Select(TestViewModel.FromTest)\n                .FirstOrDefault();\n\n            if (test == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Redirects to Problem action after successful edit of the test with HTTP Post request\n        /// </summary>\n        /// <param name=\"id\">Id for edited test</param>\n        /// <param name=\"test\">Edited test posted information</param>\n        /// <returns>Redirects to /Administration/Tests/Problem/{id} after succesful edit otherwise to /Administration/Test/ with proper error message</returns>\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Edit(int id, TestViewModel test)\n        {\n            if (test != null && this.ModelState.IsValid)\n            {\n                var existingTest = this.Data.Tests\n                    .All()\n                    .FirstOrDefault(t => t.Id == id);\n\n                if (existingTest == null)\n                {\n                    this.TempData.AddDangerMessage(Resource.Invalid_test);\n                    return this.RedirectToAction(\"Problem\", new { id });\n                }\n\n                existingTest.InputData = test.InputData;\n                existingTest.OutputData = test.OutputData;\n                existingTest.OrderBy = test.OrderBy;\n                existingTest.IsTrialTest = test.IsTrialTest;\n\n                this.Data.SaveChanges();\n\n                this.RetestSubmissions(existingTest.ProblemId);\n\n                this.TempData.AddInfoMessage(Resource.Test_edited_successfully);\n                return this.RedirectToAction(\"Problem\", new { id = existingTest.ProblemId });\n            }\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration delete page with HTTP Get request - deleting test by id\n        /// </summary>\n        /// <param name=\"id\">Id for test to be deleted</param>\n        /// <returns>View for /Administration/Tests/Delete/{id} otherwise redirects to /Administration/Test/ with proper error message</returns>\n        [HttpGet]\n        public ActionResult Delete(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var test = this.Data.Tests.All()\n                .Where(t => t.Id == id)\n                .Select(TestViewModel.FromTest)\n                .FirstOrDefault();\n\n            if (test == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Redirects to Problem action after successful deletion of the test\n        /// </summary>\n        /// <param name=\"id\">Id for test to be deleted</param>\n        /// <returns>Redirects to /Administration/Tests/Problem/{id} after succesful deletion otherwise to /Administration/Test/ with proper error message</returns>\n        public ActionResult ConfirmDelete(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var test = this.Data.Tests.All().FirstOrDefault(t => t.Id == id);\n\n            if (test == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            // delete all test runs for the current test\n            this.Data.TestRuns.Delete(testRun => testRun.TestId == id.Value);\n\n            this.Data.SaveChanges();\n\n            // delete the test\n            this.Data.Tests.Delete(test);\n            this.Data.SaveChanges();\n\n            // recalculate submissions point\n            var submissionResults = this.Data.Submissions\n                .All()\n                .Where(s => s.ProblemId == test.ProblemId)\n                .Select(s => new\n                {\n                    s.Id,\n                    CorrectTestRuns = s.TestRuns.Count(t => t.ResultType == TestRunResultType.CorrectAnswer),\n                    AllTestRuns = s.TestRuns.Count(),\n                    MaxPoints = s.Problem.MaximumPoints\n                })\n                .ToList();\n\n            foreach (var submissionResult in submissionResults)\n            {\n                var submission = this.Data.Submissions.GetById(submissionResult.Id);\n                int points = 0;\n                if (submissionResult.AllTestRuns != 0)\n                {\n                    points = submissionResult.CorrectTestRuns / submissionResult.AllTestRuns * submissionResult.MaxPoints;\n                }\n\n                submission.Points = points;\n            }\n\n            this.Data.SaveChanges();\n\n            this.TempData.AddInfoMessage(Resource.Test_deleted_successfully);\n            return this.RedirectToAction(\"Problem\", new { id = test.ProblemId });\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration delete all page with HTTP Get request - deleting all test for problem by id\n        /// </summary>\n        /// <param name=\"id\">Id for the problem which tests will be deleted</param>\n        /// <returns>View for /Administration/Tests/DeleteAll/{id} otherwise redirects to /Administration/Test/ with proper error message</returns>\n        [HttpGet]\n        public ActionResult DeleteAll(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All()\n                .Where(pr => pr.Id == id)\n                .Select(pr => new ProblemViewModel { Id = pr.Id, Name = pr.Name, ContestName = pr.Contest.Name })\n                .FirstOrDefault();\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(problem);\n        }\n\n        /// <summary>\n        /// Redirects to Problem action after successful deletion of all tests\n        /// </summary>\n        /// <param name=\"id\">Id for the problem which tests will be deleted</param>\n        /// <returns>Redirects to /Administration/Tests/Problem/{id} after succesful deletion otherwise to /Administration/Test/ with proper error message</returns>\n        public ActionResult ConfirmDeleteAll(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            this.Data.TestRuns.Delete(testRun => testRun.Submission.ProblemId == id);\n            this.Data.SaveChanges();\n\n            this.Data.Tests.Delete(test => test.ProblemId == id);\n            this.Data.SaveChanges();\n\n            this.RetestSubmissions(problem.Id);\n\n            this.TempData.AddInfoMessage(Resource.Tests_deleted_successfully);\n            return this.RedirectToAction(\"Problem\", new { id });\n        }\n\n        /// <summary>\n        /// Returns view for the tests administration details page - showing information about test by id\n        /// </summary>\n        /// <param name=\"id\">Id for test which details will be shown</param>\n        /// <returns>View for /Administration/Tests/Details/{id} otherwise redirects to /Administration/Test/ with proper error message</returns>\n        public ActionResult Details(int? id)\n        {\n            if (id == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var test = this.Data.Tests.All()\n                .Where(t => t.Id == id)\n                .Select(TestViewModel.FromTest)\n                .FirstOrDefault();\n\n            if (test == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_test);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            return this.View(test);\n        }\n\n        /// <summary>\n        /// Returns full input data as string content for test by id\n        /// </summary>\n        /// <param name=\"id\">Id of the test to show full input</param>\n        /// <returns>Content as html of the test input</returns>\n        public ActionResult FullInput(int id)\n        {\n            var result = this.Data.Tests.All().FirstOrDefault(t => t.Id == id).InputDataAsString;\n            return this.Content(HttpUtility.HtmlEncode(result), \"text/html\");\n        }\n\n        /// <summary>\n        /// Returns full output data as string content for test by id\n        /// </summary>\n        /// <param name=\"id\">Id of the test to show full output</param>\n        /// <returns>Content as html of the test output</returns>\n        public ActionResult FullOutput(int id)\n        {\n            var result = this.Data.Tests.All().FirstOrDefault(t => t.Id == id).OutputDataAsString;\n            return this.Content(HttpUtility.HtmlEncode(result), \"text/html\");\n        }\n\n        /// <summary>\n        /// Returns test runs for test by id\n        /// </summary>\n        /// <param name=\"id\">Id of the test to get test runs</param>\n        /// <returns>JSON result of all test runs for the test</returns>\n        public JsonResult GetTestRuns(int id)\n        {\n            // TODO: Add server side paging and sorting to test runs grid\n            var result = this.Data.TestRuns.All()\n                .Where(tr => tr.TestId == id)\n                .OrderByDescending(tr => tr.Submission.CreatedOn)\n                .Select(TestRunViewModel.FromTestRun);\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns all available contest categories\n        /// </summary>\n        /// <returns>JSON result of all categores as objects with Id and Name properties</returns>\n        [HttpGet]\n        public JsonResult GetCascadeCategories()\n        {\n            var result = this.Data.ContestCategories.All().Select(cat => new { cat.Id, cat.Name });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns all available contests in category by id\n        /// </summary>\n        /// <param name=\"id\">Id of category to get all contests from</param>\n        /// <returns>JSON result of all contests in category as objects with Id and Name properties</returns>\n        [HttpGet]\n        public JsonResult GetCascadeContests(int id)\n        {\n            var contests = this.Data.Contests\n                .All()\n                .Where(con => con.CategoryId == id)\n                .Select(con => new { con.Id, con.Name });\n\n            return this.Json(contests, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns all available problems in contest by id\n        /// </summary>\n        /// <param name=\"id\">Id of contest to get all problem from</param>\n        /// <returns>JSON result of all problems in contest as objects with Id and Name properties</returns>\n        [HttpGet]\n        public JsonResult GetCascadeProblems(int id)\n        {\n            var problems = this.Data.Problems\n                .All()\n                .Where(pr => pr.ContestId == id)\n                .Select(pr => new { pr.Id, pr.Name });\n\n            return this.Json(problems, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns contest and category id for a problem\n        /// </summary>\n        /// <param name=\"id\">Id of the problem to get information for</param>\n        /// <returns>JSON result of contest and category id as object</returns>\n        [HttpGet]\n        public JsonResult GetProblemInformation(int id)\n        {\n            var problem = this.Data.Problems.All().FirstOrDefault(pr => pr.Id == id);\n\n            var contestId = problem.ContestId;\n\n            var categoryId = problem.Contest.CategoryId;\n\n            var result = new { Contest = contestId, Category = categoryId };\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns all problems as pair of Id and Name if problem name contains given substring\n        /// </summary>\n        /// <param name=\"text\">Substring which problems should contain in name</param>\n        /// <returns>JSON result of all problems that contain the given substring</returns>\n        [HttpGet]\n        public JsonResult GetSearchedProblems(string text)\n        {\n            var result = this.Data.Problems\n                .All()\n                .Where(pr => pr.Name.ToLower().Contains(text.ToLower()))\n                .Select(pr => new { pr.Id, pr.Name });\n\n            return this.Json(result, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Returns all tests for particular problem by id\n        /// </summary>\n        /// <param name=\"id\">Id of the problem to get all tests</param>\n        /// <returns>JSON result of all tests for the problem</returns>\n        public ContentResult ProblemTests(int id)\n        {\n            var result = this.GetData(id);\n            return this.LargeJson(result);\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Import(string problemId, HttpPostedFileBase file, bool retestTask, bool deleteOldFiles)\n        {\n            int id;\n\n            if (!int.TryParse(problemId, out id))\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var problem = this.Data.Problems.All().FirstOrDefault(x => x.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Invalid_problem);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            if (file == null || file.ContentLength == 0)\n            {\n                this.TempData.AddDangerMessage(Resource.No_empty_file);\n                return this.RedirectToAction(\"Problem\", new { id });\n            }\n\n            var extension = file.FileName.Substring(file.FileName.Length - 4, 4);\n\n            if (extension != \".zip\")\n            {\n                this.TempData.AddDangerMessage(Resource.Must_be_zip);\n                return this.RedirectToAction(\"Problem\", new { id });\n            }\n\n            if (deleteOldFiles)\n            {\n                var tests = problem.Tests.Select(t => new { t.Id, TestRuns = t.TestRuns.Select(tr => tr.Id) }).ToList();\n                foreach (var test in tests)\n                {\n                    var testRuns = test.TestRuns.ToList();\n                    foreach (var testRun in testRuns)\n                    {\n                        this.Data.TestRuns.Delete(testRun);\n                    }\n\n                    this.Data.Tests.Delete(test.Id);\n                }\n\n                problem.Tests = new HashSet<Test>();\n            }\n\n            using (var memory = new MemoryStream())\n            {\n                file.InputStream.CopyTo(memory);\n                memory.Position = 0;\n\n                TestsParseResult parsedTests;\n\n                try\n                {\n                    parsedTests = ZippedTestsManipulator.Parse(memory);\n                }\n                catch\n                {\n                    this.TempData.AddDangerMessage(Resource.Zip_damaged);\n                    return this.RedirectToAction(\"Problem\", new { id });\n                }\n\n                if (parsedTests.ZeroInputs.Count != parsedTests.ZeroOutputs.Count || parsedTests.Inputs.Count != parsedTests.Outputs.Count)\n                {\n                    this.TempData.AddDangerMessage(Resource.Invalid_tests);\n                    return this.RedirectToAction(\"Problem\", new { id });\n                }\n\n                ZippedTestsManipulator.AddTestsToProblem(problem, parsedTests);\n\n                this.Data.SaveChanges();\n            }\n\n            if (retestTask)\n            {\n                this.RetestSubmissions(problem.Id);\n            }\n\n            this.TempData.AddInfoMessage(Resource.Tests_addted_to_problem);\n\n            return this.RedirectToAction(\"Problem\", new { id });\n        }\n\n        /// <summary>\n        /// Creates zip files with all tests in given task\n        /// </summary>\n        /// <param name=\"id\">Task id</param>\n        /// <returns>Zip file containing all tests in format {task}.{testNum}[.{zeroNum}].{in|out}.txt</returns>\n        public ActionResult Export(int id)\n        {\n            var problem = this.Data.Problems.All().FirstOrDefault(x => x.Id == id);\n\n            if (problem == null)\n            {\n                this.TempData.AddDangerMessage(Resource.Problem_does_not_exist);\n                return this.RedirectToAction(GlobalConstants.Index);\n            }\n\n            var tests = problem.Tests.OrderBy(x => x.OrderBy);\n\n            var zipFile = new ZipFile(string.Format(\"{0}_Tests_{1}\", problem.Name, DateTime.Now));\n\n            using (zipFile)\n            {\n                int trialTestCounter = 1;\n                int testCounter = 1;\n\n                foreach (var test in tests)\n                {\n                    if (test.IsTrialTest)\n                    {\n                        zipFile.AddEntry(string.Format(\"test.000.{0:D3}.in.txt\", trialTestCounter), test.InputDataAsString);\n                        zipFile.AddEntry(string.Format(\"test.000.{0:D3}.out.txt\", trialTestCounter), test.OutputDataAsString);\n                        trialTestCounter++;\n                    }\n                    else\n                    {\n                        zipFile.AddEntry(string.Format(\"test.{0:D3}.in.txt\", testCounter), test.InputDataAsString);\n                        zipFile.AddEntry(string.Format(\"test.{0:D3}.out.txt\", testCounter), test.OutputDataAsString);\n                        testCounter++;\n                    }\n                }\n            }\n\n            var stream = new MemoryStream();\n\n            zipFile.Save(stream);\n            stream.Position = 0;\n\n            return this.File(stream, MediaTypeNames.Application.Zip, zipFile.Name);\n        }\n\n        [HttpGet]\n        public FileResult ExportToExcel([DataSourceRequest] DataSourceRequest request, int id)\n        {\n            return this.ExportToExcel(request, this.GetData(id));\n        }\n\n        private IEnumerable GetData(int id)\n        {\n            var result = this.Data.Tests.All()\n                .Where(test => test.ProblemId == id)\n                .OrderByDescending(test => test.IsTrialTest)\n                .ThenBy(test => test.OrderBy)\n                .Select(TestViewModel.FromTest);\n\n            return result;\n        }\n\n        private void RetestSubmissions(int problemId)\n        {\n            this.Data.Submissions.Update(\n                submission => submission.ProblemId == problemId,\n                submission => new Submission { Processed = false, Processing = false });\n\n            this.Data.SaveChanges();\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Controllers/UsersController.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Controllers\n{\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Data.Entity;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Controllers;\n\n    using ViewModelType = OJS.Web.Areas.Administration.ViewModels.User.UserProfileAdministrationViewModel;\n\n    public class UsersController : KendoGridAdministrationController\n    {\n        public UsersController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public override IEnumerable GetData()\n        {\n            return this.Data.Users\n                .All()\n                .Select(ViewModelType.ViewModel);\n        }\n\n        public override object GetById(object id)\n        {\n            return this.Data.Users\n                .All()\n                .FirstOrDefault(o => o.Id == (string)id);\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult Update([DataSourceRequest]DataSourceRequest request, ViewModelType model)\n        {\n            var list = new List<ViewModelType>();\n\n            if (model != null && this.ModelState.IsValid)\n            {\n                var userProfile = this.Data.Users.All().FirstOrDefault(u => u.Id == model.Id);\n                var itemForUpdating = this.Data.Context.Entry(model.GetEntityModel(userProfile));\n                itemForUpdating.State = EntityState.Modified;\n                this.Data.SaveChanges();\n                list.Add(model);\n            }\n\n            return this.Json(list.ToDataSourceResult(request));\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Providers/Common/BaseNewsProvider.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Providers.Common\n{\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Net;\n    using System.Text;\n\n    using HtmlAgilityPack;\n\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.Providers.Contracts;\n\n    public abstract class BaseNewsProvider : INewsProvider\n    {\n        public abstract IEnumerable<News> FetchNews();\n\n        protected string ConvertLinks(string content, string newLink)\n        {\n            var result = new StringBuilder();\n\n            for (int i = 0; i < content.Length; i++)\n            {\n                if (i + 6 < content.Length && content.Substring(i, 6) == \"href=\\\"\")\n                {\n                    result.Append(\"href=\\\"\");\n                    i += 6;\n                    if (i + 4 < content.Length && content.Substring(i, 4) == \"http\")\n                    {\n                        i += 4;\n                        result.Append(\"http\");\n                    }\n                    else\n                    {\n                        result.Append(newLink);\n                    }\n                }\n\n                result.Append(content[i]);\n            }\n\n            return result.ToString();\n        }\n\n        protected HtmlDocument GetHtmlDocument(string url, string encoding)\n        {\n            var document = new HtmlDocument();\n\n            using (var client = new WebClient())\n            {\n                using (var stream = client.OpenRead(url))\n                {\n                    var reader = new StreamReader(stream, Encoding.GetEncoding(encoding));\n                    var html = reader.ReadToEnd();\n                    document.LoadHtml(html);\n                }\n            }\n\n            document.OptionFixNestedTags = true;\n\n            return document;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Providers/Contracts/INewsProvider.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Providers.Contracts\n{\n    using System.Collections.Generic;\n\n    using OJS.Data.Models;\n\n    public interface INewsProvider\n    {\n        IEnumerable<News> FetchNews();\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Providers/InfoManNewsProvider.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Providers\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web;\n\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.Providers.Common;\n\n    public class InfoManNewsProvider : BaseNewsProvider\n    {\n        private const string ContentUrl = \"http://infoman.musala.com/feeds/\";\n        private const string ContentEncoding = \"utf-8\";\n\n        public override IEnumerable<News> FetchNews()\n        {\n            var document = this.GetHtmlDocument(ContentUrl, ContentEncoding);\n\n            var nodes = document.DocumentNode.SelectNodes(\"//rss//channel//item\");\n\n            var currentListOfNews = new List<News>();\n\n            foreach (var node in nodes)\n            {\n                var title = node.ChildNodes.First(n => n.Name == \"title\").InnerHtml;\n                var description = node.ChildNodes.First(n => n.Name == \"description\").InnerHtml;\n                var date = node.ChildNodes.First(n => n.Name == \"pubdate\").InnerHtml;\n                var linkAddress = node.ChildNodes.First(n => n.Name == \"guid\").InnerHtml;\n                var link = string.Format(\"<a href=\\\"{0}\\\">{0}</a>\", linkAddress);\n\n                var decodedDescription = HttpUtility.HtmlDecode(description);\n\n                var parsedDate = DateTime.Parse(date);\n\n                currentListOfNews.Add(new News\n                {\n                    Title = title,\n                    Content = string.Format(\"{0}<br />{1}\", this.ConvertLinks(decodedDescription, \"http://infoman.musala.com/\"), link),\n                    Author = \"ИнфоМан\",\n                    Source = \"http://infoman.musala.com/\",\n                    IsVisible = true,\n                    CreatedOn = parsedDate,\n                    PreserveCreatedOn = true,\n                });\n            }\n\n            return currentListOfNews;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Providers/InfosNewsProvider.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.Providers\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Text;\n\n    using HtmlAgilityPack;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.Providers.Common;\n\n    public class InfosNewsProvider : BaseNewsProvider\n    {\n        private const string ContentUrl = \"http://www.math.bas.bg/infos/index.html\";\n        private const string ContentEncoding = \"windows-1251\";\n\n        public override IEnumerable<News> FetchNews()\n        {\n            var document = this.GetHtmlDocument(ContentUrl, ContentEncoding);\n\n            var currentListOfNews = new List<News>();\n\n            var node = document.DocumentNode.SelectSingleNode(\"//body//div//div//div[4]\");\n\n            this.GenerateNewsFromInfos(node, currentListOfNews);\n\n            return currentListOfNews;\n        }\n\n        private void GenerateNewsFromInfos(HtmlNode node, ICollection<News> fetchedNews)\n        {\n            var title = string.Empty;\n            var content = new StringBuilder();\n\n            while (true)\n            {\n                if (node == null)\n                {\n                    break;\n                }\n\n                if (node.FirstChild == null)\n                {\n                    node = node.NextSibling;\n                    continue;\n                }\n\n                if (node.FirstChild.InnerText == string.Empty && content.Length > 0)\n                {\n                    node = node.NextSibling;\n                    continue;\n                }\n\n                if (node.FirstChild.InnerText == string.Empty)\n                {\n                    node.PreviousSibling.PreviousSibling.FirstChild.InnerText.TryGetDate();\n                    node = node.NextSibling;\n                    continue;\n                }\n\n                if (node.FirstChild.Attributes.Any(x => x.Name == \"class\" && x.Value == \"ws14\") && content.Length == 0)\n                {\n                    title += node.FirstChild.InnerText + \" \";\n                }\n                else if (node.FirstChild.Attributes.Any(x => x.Name == \"class\" && x.Value == \"ws14\") && content.Length > 0)\n                {\n                    var date = content.ToString().Substring(0, 10).TryGetDate();\n                    var contentAsString = content.ToString().Trim().Substring(10);\n                    if (contentAsString.StartsWith(\"<br />\"))\n                    {\n                        contentAsString = contentAsString.Substring(6);\n                    }\n\n                    contentAsString = this.ConvertLinks(contentAsString, \"http://www.math.bas.bg/infos/\");\n\n                    fetchedNews.Add(new News\n                                        {\n                                            Title = title.Trim(),\n                                            CreatedOn = date,\n                                            IsVisible = true,\n                                            Author = \"Инфос\",\n                                            Source = \"http://www.math.bas.bg/infos/index.html\",\n                                            Content = contentAsString,\n                                            PreserveCreatedOn = true,\n                                        });\n\n                    title = string.Empty;\n                    content.Length = 0;\n                    continue;\n                }\n                else if (node.FirstChild.Attributes.Any(x => x.Name == \"class\" && x.Value == \"ws12\"))\n                {\n                    content.Append(node.FirstChild.InnerHtml);\n                    var nestedNode = node.FirstChild.NextSibling;\n\n                    while (nestedNode != null)\n                    {\n                        if (nestedNode.Name == \"#text\")\n                        {\n                            nestedNode = nestedNode.NextSibling;\n                            continue;\n                        }\n\n                        if (nestedNode.Attributes.Any(x => x.Name == \"class\" && x.Value == \"ws12\"))\n                        {\n                            content.Append(nestedNode.InnerHtml);\n                        }\n                        else\n                        {\n                            break;\n                        }\n\n                        nestedNode = nestedNode.NextSibling;\n                    }\n\n                    content.Append(\"<br />\");\n                }\n\n                node = node.NextSibling;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/AccessLogs/AccessLogGridViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.AccessLogs\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.AccessLogs.ViewModels.AccessLogGridViewModel;\n\n    public class AccessLogGridViewModel : AdministrationViewModel<AccessLog>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<AccessLog, AccessLogGridViewModel>> ViewModel\n        {\n            get\n            {\n                return log => new AccessLogGridViewModel\n                {\n                    Id = log.Id,\n                    UserName = log.User != null ? log.User.UserName : null,\n                    IpAddress = log.IpAddress,\n                    RequestType = log.RequestType,\n                    Url = log.Url,\n                    PostParams = log.PostParams,\n                    CreatedOn = log.CreatedOn,\n                    ModifiedOn = log.ModifiedOn\n                };\n            }\n        }\n\n        [Display(Name = \"№\")]\n        public long Id { get; set; }\n\n        [Display(Name = \"UserName\", ResourceType = typeof(Resource))]\n        public string UserName { get; set; }\n\n        [Display(Name = \"Ip\", ResourceType = typeof(Resource))]\n        public string IpAddress { get; set; }\n\n        [Display(Name = \"Request_type\", ResourceType = typeof(Resource))]\n        public string RequestType { get; set; }\n\n        [Display(Name = \"Url\", ResourceType = typeof(Resource))]\n        public string Url { get; set; }\n\n        [Display(Name = \"Post_params\", ResourceType = typeof(Resource))]\n        public string PostParams { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/AntiCheat/AntiCheatByIpAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.AntiCheat\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class AntiCheatByIpAdministrationViewModel\n    {\n        public static Expression<Func<Participant, AntiCheatByIpAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return p => new AntiCheatByIpAdministrationViewModel\n                    {\n                        Id = p.Id,\n                        UserName = p.User.UserName,\n                        Points = p.Submissions\n                            .AsQueryable()\n                            .Where(s => !s.IsDeleted)\n                            .GroupBy(s => s.ProblemId)\n                            .Sum(s => s.Max(z => z.Points)),\n                        DifferentIps = p.Submissions\n                            .AsQueryable()\n                            .Where(s => !s.IsDeleted && s.IpAddress != null)\n                            .GroupBy(s => s.IpAddress)\n                            .Select(g => g.FirstOrDefault().IpAddress)\n                    };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string UserName { get; set; }\n\n        public int Points { get; set; }\n\n        public IEnumerable<string> DifferentIps { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/AntiCheat/IpSubmissionsAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.AntiCheat\n{\n    using System.Collections.Generic;\n\n    public class IpSubmissionsAdministrationViewModel\n    {\n        public string Ip { get; set; }\n\n        public IEnumerable<int> SubmissionIds { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/AntiCheat/SubmissionSimilarityFiltersInputModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.AntiCheat\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Web.Mvc;\n\n    using OJS.Common.Models;\n\n    public class SubmissionSimilarityFiltersInputModel\n    {\n        [Required]\n        [Display(Name = \"Състезание\")]\n        public int? ContestId { get; set; }\n\n        [Display(Name = \"Тип детектор\")]\n        public PlagiarismDetectorType PlagiarismDetectorType { get; set; }\n\n        public IEnumerable<SelectListItem> PlagiarismDetectorTypes { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/AntiCheat/SubmissionSimilarityViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.AntiCheat\n{\n    using System;\n\n    public class SubmissionSimilarityViewModel\n    {\n        public int ProblemId { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public int Points { get; set; }\n\n        public int Differences { get; set; }\n\n        public decimal Percentage { get; set; }\n\n        public int FirstSubmissionId { get; set; }\n\n        public int SecondSubmissionId { get; set; }\n\n        public string FirstParticipantName { get; set; }\n\n        public string SecondParticipantName { get; set; }\n\n        public DateTime FirstSubmissionCreatedOn { get; set; }\n\n        public DateTime SecondSubmissionCreatedOn { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Checker/CheckerAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Checker\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Checkers.ViewModels.CheckerAdministrationViewModel;\n\n    public class CheckerAdministrationViewModel : AdministrationViewModel<Checker>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Checker, CheckerAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return ch => new CheckerAdministrationViewModel\n                {\n                    Id = ch.Id,\n                    Name = ch.Name,\n                    Description = ch.Description,\n                    DllFile = ch.DllFile,\n                    ClassName = ch.ClassName,\n                    Parameter = ch.Parameter,\n                    CreatedOn = ch.CreatedOn,\n                    ModifiedOn = ch.ModifiedOn,\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceType = typeof(Resource),\n            ErrorMessageResourceName = \"Name_required\")]\n        [StringLength(\n            GlobalConstants.CheckerNameMaxLength,\n            MinimumLength = GlobalConstants.CheckerNameMinLength,\n            ErrorMessageResourceType = typeof(Resource),\n            ErrorMessageResourceName = \"Name_length\")]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Description\", ResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string Description { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Dll_file\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceType = typeof(Resource),\n            ErrorMessageResourceName = \"Dll_file_required\")]\n        [UIHint(\"SingleLineText\")]\n        public string DllFile { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Class_name\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceType = typeof(Resource),\n            ErrorMessageResourceName = \"Class_name_required\")]\n        [UIHint(\"SingleLineText\")]\n        public string ClassName { get; set; }\n\n        [AllowHtml]\n        [DatabaseProperty]\n        [Display(Name = \"Param\", ResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string Parameter { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Common/AdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Common\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Web.Common.Interfaces;\n\n    using Resource = Resources.Areas.Administration.AdministrationGeneral;\n\n    public abstract class AdministrationViewModel<T> : IAdministrationViewModel<T>\n        where T : class, new()\n    {\n        [DatabaseProperty]\n        [Display(Name = \"Created_on\", ResourceType = typeof(Resource))]\n        [DataType(DataType.DateTime)]\n        [HiddenInput(DisplayValue = false)]\n        public DateTime? CreatedOn { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Modified_on\", ResourceType = typeof(Resource))]\n        [DataType(DataType.DateTime)]\n        [HiddenInput(DisplayValue = false)]\n        public DateTime? ModifiedOn { get; set; }\n\n        public virtual T GetEntityModel(T model = null)\n        {\n            model = model ?? new T();\n            return this.ConvertToDatabaseEntity(model);\n        }\n\n        protected T ConvertToDatabaseEntity(T model)\n        {\n            foreach (var viewModelProperty in this.GetType().GetProperties())\n            {\n                var customAttributes = viewModelProperty.GetCustomAttributes(typeof(DatabasePropertyAttribute), true);\n\n                if (customAttributes.Any())\n                {\n                    var name = (customAttributes.First() as DatabasePropertyAttribute).Name;\n\n                    if (string.IsNullOrEmpty(name))\n                    {\n                        name = viewModelProperty.Name;\n                    }\n\n                    var databaseEntityProperty = model.GetType().GetProperties().FirstOrDefault(pr => pr.Name == name);\n\n                    databaseEntityProperty?.SetValue(model, viewModelProperty.GetValue(this));\n                }\n            }\n\n            return model;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Contest/ContestAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Contest\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n    using OJS.Web.Areas.Administration.ViewModels.SubmissionType;\n\n    using Resource = Resources.Areas.Administration.Contests.ViewModels.ContestAdministration;\n\n    public class ContestAdministrationViewModel : AdministrationViewModel<Contest>\n    {\n        public ContestAdministrationViewModel()\n        {\n            this.SubmisstionTypes = new List<SubmissionTypeViewModel>();\n        }\n\n        [ExcludeFromExcel]\n        public static Expression<Func<Contest, ContestAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return contest => new ContestAdministrationViewModel\n                {\n                    Id = contest.Id,\n                    Name = contest.Name,\n                    StartTime = contest.StartTime,\n                    EndTime = contest.EndTime,\n                    PracticeStartTime = contest.PracticeStartTime,\n                    PracticeEndTime = contest.PracticeEndTime,\n                    IsVisible = contest.IsVisible,\n                    CategoryId = contest.CategoryId.Value,\n                    ContestPassword = contest.ContestPassword,\n                    PracticePassword = contest.PracticePassword,\n                    Description = contest.Description,\n                    LimitBetweenSubmissions = contest.LimitBetweenSubmissions,\n                    OrderBy = contest.OrderBy,\n                    SelectedSubmissionTypes = contest.SubmissionTypes.AsQueryable().Select(SubmissionTypeViewModel.ViewModel),\n                    CreatedOn = contest.CreatedOn,\n                    ModifiedOn = contest.ModifiedOn,\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.ContestNameMaxLength,\n            MinimumLength = GlobalConstants.ContestNameMinLength,\n            ErrorMessageResourceName = \"Name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Start_time\", ResourceType = typeof(Resource))]\n        [UIHint(\"DateAndTime\")]\n        public DateTime? StartTime { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"End_time\", ResourceType = typeof(Resource))]\n        [UIHint(\"DateAndTime\")]\n        public DateTime? EndTime { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Practice_start_time\", ResourceType = typeof(Resource))]\n        [UIHint(\"DateAndTime\")]\n        public DateTime? PracticeStartTime { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Practice_end_time\", ResourceType = typeof(Resource))]\n        [UIHint(\"DateAndTime\")]\n        public DateTime? PracticeEndTime { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Contest_password\", ResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string ContestPassword { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Practice_password\", ResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string PracticePassword { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Description\", ResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string Description { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Submissions_limit\", ResourceType = typeof(Resource))]\n        [UIHint(\"PositiveInteger\")]\n        [DefaultValue(0)]\n        public int LimitBetweenSubmissions { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Order\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Order_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"Integer\")]\n        public int OrderBy { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Visibility\", ResourceType = typeof(Resource))]\n        public bool IsVisible { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Category\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Category_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"CategoryDropDown\")]\n        [DefaultValue(null)]\n        public int? CategoryId { get; set; }\n\n        [Display(Name = \"Submision_types\", ResourceType = typeof(Resource))]\n        [ExcludeFromExcel]\n        [UIHint(\"SubmissionTypeCheckBoxes\")]\n        public IList<SubmissionTypeViewModel> SubmisstionTypes { get; set; }\n\n        [ExcludeFromExcel]\n        public IEnumerable<SubmissionTypeViewModel> SelectedSubmissionTypes { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Contest/ShortContestAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Contest\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Contests.ViewModels.ShortContestAdministration;\n\n    public class ShortContestAdministrationViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Contest, ShortContestAdministrationViewModel>> FromContest\n        {\n            get\n            {\n                return contest => new ShortContestAdministrationViewModel\n                {\n                    Id = contest.Id,\n                    Name = contest.Name,\n                    StartTime = contest.StartTime,\n                    EndTime = contest.EndTime,\n                    CategoryName = contest.Category.Name,\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string Name { get; set; }\n\n        [Display(Name = \"Start_time\", ResourceType = typeof(Resource))]\n        public DateTime? StartTime { get; set; }\n\n        [Display(Name = \"End_time\", ResourceType = typeof(Resource))]\n        public DateTime? EndTime { get; set; }\n\n        [Display(Name = \"Category_name\", ResourceType = typeof(Resource))]\n        public string CategoryName { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/ContestCategory/ContestCategoryAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.ContestCategory\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.ContestCategories.ViewModels.ContestCategoryAdministrationViewModel;\n\n    public class ContestCategoryAdministrationViewModel : AdministrationViewModel<ContestCategory>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<ContestCategory, ContestCategoryAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return category => new ContestCategoryAdministrationViewModel\n                {\n                    Id = category.Id,\n                    Name = category.Name,\n                    OrderBy = category.OrderBy,\n                    IsVisible = category.IsVisible,\n                    CreatedOn = category.CreatedOn,\n                    ModifiedOn = category.ModifiedOn\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.ContestCategoryNameMaxLength,\n            MinimumLength = GlobalConstants.ContestCategoryNameMinLength,\n            ErrorMessageResourceName = \"Name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Order_by\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Order_by_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"Integer\")]\n        public int OrderBy { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Visibility\", ResourceType = typeof(Resource))]\n        public bool IsVisible { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/ContestQuestion/ContestQuestionViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.ContestQuestion\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Contests.ViewModels.ContestQuestion;\n\n    public class ContestQuestionViewModel : AdministrationViewModel<ContestQuestion>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<ContestQuestion, ContestQuestionViewModel>> ViewModel\n        {\n            get\n            {\n                return question => new ContestQuestionViewModel\n                {\n                    QuestionId = question.Id,\n                    ContestId = question.ContestId,\n                    Text = question.Text,\n                    AskOfficialParticipants = question.AskOfficialParticipants,\n                    AskPracticeParticipants = question.AskPracticeParticipants,\n                    Type = question.Type,\n                    RegularExpressionValidation = question.RegularExpressionValidation,\n                    CreatedOn = question.CreatedOn,\n                    ModifiedOn = question.ModifiedOn,\n                };\n            }\n        }\n\n        [DatabaseProperty(Name = \"Id\")]\n        [DefaultValue(null)]\n        [Display(Name = \"№\")]\n        [HiddenInput(DisplayValue = false)]\n        public int? QuestionId { get; set; }\n\n        [DatabaseProperty]\n        [HiddenInput(DisplayValue = false)]\n        public int? ContestId { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Text\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Text_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.ContestQuestionMaxLength,\n            MinimumLength = GlobalConstants.ContestQuestionMinLength,\n            ErrorMessageResourceName = \"Text_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Text { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Question_type\", ResourceType = typeof(Resource))]\n        [UIHint(\"ContestQuestionType\")]\n        public ContestQuestionType Type { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Regex_validation\", ResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string RegularExpressionValidation { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Ask_in_contest\", ResourceType = typeof(Resource))]\n        [DefaultValue(true)]\n        public bool AskOfficialParticipants { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Ask_in_practice\", ResourceType = typeof(Resource))]\n        [DefaultValue(true)]\n        public bool AskPracticeParticipants { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/ContestQuestionAnswer/ContestQuestionAnswerViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.ContestQuestionAnswer\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Contests.ViewModels.ContestQuestionAnswer;\n\n    public class ContestQuestionAnswerViewModel : AdministrationViewModel<ContestQuestionAnswer>\n    {\n        public static Expression<Func<ContestQuestionAnswer, ContestQuestionAnswerViewModel>> ViewModel\n        {\n            get\n            {\n                return qa => new ContestQuestionAnswerViewModel\n                {\n                    AnswerId = qa.Id,\n                    QuestionId = qa.QuestionId,\n                    QuestionText = qa.Question.Text,\n                    Text = qa.Text,\n                    CreatedOn = qa.CreatedOn,\n                    ModifiedOn = qa.ModifiedOn\n                };\n            }\n        }\n\n        [DatabaseProperty(Name = \"Id\")]\n        [DefaultValue(null)]\n        [Display(Name = \"№\")]\n        [HiddenInput(DisplayValue = false)]\n        public int? AnswerId { get; set; }\n\n        [DatabaseProperty]\n        [HiddenInput(DisplayValue = false)]\n        public int? QuestionId { get; set; }\n\n        [Display(Name = \"Question\", ResourceType = typeof(Resource))]\n        [UIHint(\"NonEditable\")]\n        public string QuestionText { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Text\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Text_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.ContestQuestionAnswerMaxLength,\n            MinimumLength = GlobalConstants.ContestQuestionAnswerMinLength,\n            ErrorMessageResourceName = \"Text_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Text { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/FeedbackReport/FeedbackReportViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.FeedbackReport\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Feedback.ViewModels.FeedbackReport;\n\n    public class FeedbackReportViewModel : AdministrationViewModel<FeedbackReport>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<FeedbackReport, FeedbackReportViewModel>> FromFeedbackReport\n        {\n            get\n            {\n                return feedback => new FeedbackReportViewModel\n                {\n                    Id = feedback.Id,\n                    Name = feedback.Name,\n                    Email = feedback.Email,\n                    Content = feedback.Content,\n                    Username = feedback.User == null ? Resource.Anonymous : feedback.User.UserName,\n                    IsFixed = feedback.IsFixed,\n                    CreatedOn = feedback.CreatedOn,\n                    ModifiedOn = feedback.ModifiedOn\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Mail\", ResourceType = typeof(Resource))]\n        [DataType(DataType.EmailAddress)]\n        [RegularExpression(\n            GlobalConstants.EmailRegEx,\n            ErrorMessageResourceName = \"Mail_invalid\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Mail_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Email { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Contet\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Contet_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.MultilineText)]\n        [UIHint(\"MultiLineText\")]\n        public string Content { get; set; }\n\n        [Display(Name = \"UserName\", ResourceType = typeof(Resource))]\n        [UIHint(\"NonEditable\")]\n        public string Username { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Is_fixed\", ResourceType = typeof(Resource))]\n        public bool IsFixed { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/News/NewsAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.News\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.News.ViewModels.NewsAdministration;\n\n    public class NewsAdministrationViewModel : AdministrationViewModel<News>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<News, NewsAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return news => new NewsAdministrationViewModel\n                {\n                    Id = news.Id,\n                    Title = news.Title,\n                    Author = news.Author,\n                    Source = news.Source,\n                    Content = news.Content,\n                    IsVisible = news.IsVisible,\n                    CreatedOn = news.CreatedOn,\n                    ModifiedOn = news.ModifiedOn\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Title\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Title_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.NewsTitleMaxLength,\n            MinimumLength = GlobalConstants.NewsTitleMinLength,\n            ErrorMessageResourceName = \"Title_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Title { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Author\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Author_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.NewsAuthorNameMaxLength,\n            MinimumLength = GlobalConstants.NewsAuthorNameMinLength,\n            ErrorMessageResourceName = \"Author_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Author { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Source\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Source_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.NewsSourceMaxLength,\n            MinimumLength = GlobalConstants.NewsSourceMinLength,\n            ErrorMessageResourceName = \"Source_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Source { get; set; }\n\n        [AllowHtml]\n        [DatabaseProperty]\n        [Display(Name = \"Content\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Content_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.NewsContentMinLength,\n            ErrorMessageResourceName = \"Content_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.MultilineText)]\n        [UIHint(\"HtmlContent\")]\n        public string Content { get; set; }\n\n        [Display(Name = \"Visibility\", ResourceType = typeof(Resource))]\n        [DatabaseProperty]\n        public bool IsVisible { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Participant/ContestViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Participant\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    public class ContestViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Contest, ContestViewModel>> ViewModel\n        {\n            get\n            {\n                return c => new ContestViewModel\n                {\n                    Id = c.Id,\n                    Name = c.Name\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Participant/ParticipantAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Participant\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Participants.ViewModels.ParticipantViewModels;\n\n    public class ParticipantAdministrationViewModel : AdministrationViewModel<Participant>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Participant, ParticipantAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return p => new ParticipantAdministrationViewModel\n                {\n                    Id = p.Id,\n                    ContestId = p.ContestId,\n                    ContestName = p.Contest.Name,\n                    UserId = p.UserId,\n                    UserName = p.User.UserName,\n                    IsOfficial = p.IsOfficial,\n                    CreatedOn = p.CreatedOn,\n                    ModifiedOn = p.ModifiedOn,\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [HiddenInput(DisplayValue = false)]\n        public int Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Contest\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Contest_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"ContestsComboBox\")]\n        public int ContestId { get; set; }\n\n        [Display(Name = \"Contest_name\", ResourceType = typeof(Resource))]\n        [HiddenInput(DisplayValue = false)]\n        public string ContestName { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"User\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"User_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"UsersComboBox\")]\n        public string UserId { get; set; }\n\n        [Display(Name = \"UserName\", ResourceType = typeof(Resource))]\n        [HiddenInput(DisplayValue = false)]\n        public string UserName { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Is_official\", ResourceType = typeof(Resource))]\n        public bool IsOfficial { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Participant/ParticipantAnswerViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Participant\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Participants.ViewModels.ParticipantViewModels;\n\n    public class ParticipantAnswerViewModel\n    {\n        public static Expression<Func<ParticipantAnswer, ParticipantAnswerViewModel>> ViewModel\n        {\n            get\n            {\n                return pa => new ParticipantAnswerViewModel\n                {\n                    ParticipantId = pa.ParticipantId,\n                    ContestQuestionId = pa.ContestQuestionId,\n                    QuestionText = pa.ContestQuestion.Text,\n                    Answer = pa.Answer\n                };\n            }\n        }\n\n        [HiddenInput(DisplayValue = false)]\n        public int ParticipantId { get; set; }\n\n        [HiddenInput(DisplayValue = false)]\n        public int ContestQuestionId { get; set; }\n\n        [Display(Name = \"Question\", ResourceType = typeof(Resource))]\n        [UIHint(\"NonEditable\")]\n        public string QuestionText { get; set; }\n\n        [Display(Name = \"Answer\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Answer_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Answer { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Participant/UserViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Participant\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    public class UserViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<UserProfile, UserViewModel>> ViewModel\n        {\n            get\n            {\n                return c => new UserViewModel\n                {\n                    Id = c.Id,\n                    Name = c.UserName\n                };\n            }\n        }\n\n        public string Id { get; set; }\n\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Problem/DetailedProblemViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Problem\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.ProblemResource;\n\n    using Resource = Resources.Areas.Administration.Problems.ViewModels.DetailedProblem;\n\n    public class DetailedProblemViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Problem, DetailedProblemViewModel>> FromProblem\n        {\n            get\n            {\n                return problem => new DetailedProblemViewModel\n                {\n                    Id = problem.Id,\n                    Name = problem.Name,\n                    ContestId = problem.ContestId,\n                    ContestName = problem.Contest.Name,\n                    TrialTests = problem.Tests.AsQueryable().Count(x => x.IsTrialTest),\n                    CompeteTests = problem.Tests.AsQueryable().Count(x => !x.IsTrialTest),\n                    MaximumPoints = problem.MaximumPoints,\n                    TimeLimit = problem.TimeLimit,\n                    MemoryLimit = problem.MemoryLimit,\n                    ShowResults = problem.ShowResults,\n                    ShowDetailedFeedback = problem.ShowDetailedFeedback,\n                    SourceCodeSizeLimit = problem.SourceCodeSizeLimit,\n                    Checker = problem.Checker.Name,\n                    OrderBy = problem.OrderBy\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [MaxLength(\n            GlobalConstants.ProblemNameMaxLength,\n            ErrorMessageResourceName = \"Name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(\"Име\")]\n        public string Name { get; set; }\n\n        public int ContestId { get; set; }\n\n        [Display(Name = \"Contest\", ResourceType = typeof(Resource))]\n        public string ContestName { get; set; }\n\n        [Display(Name = \"Trial_tests\", ResourceType = typeof(Resource))]\n        public int TrialTests { get; set; }\n\n        [Display(Name = \"Compete_tests\", ResourceType = typeof(Resource))]\n        public int CompeteTests { get; set; }\n\n        [Display(Name = \"Max_points\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Max_points_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(GlobalConstants.ProblemDefaultMaximumPoints)]\n        public short MaximumPoints { get; set; }\n\n        [Display(Name = \"Time_limit\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Time_limit_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(GlobalConstants.ProblemDefaultTimeLimit)]\n        public int TimeLimit { get; set; }\n\n        [Display(Name = \"Memory_limit\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Memory_limit_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(GlobalConstants.ProblemDefaultMemoryLimit)]\n        public int MemoryLimit { get; set; }\n\n        [Display(Name = \"Checker\", ResourceType = typeof(Resource))]\n        public string Checker { get; set; }\n\n        [ExcludeFromExcel]\n        public IEnumerable<SelectListItem> AvailableCheckers { get; set; }\n\n        [Display(Name = \"Order\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Order_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(0)]\n        public int OrderBy { get; set; }\n\n        [Display(Name = \"Source_code_size_limit\", ResourceType = typeof(Resource))]\n        [DefaultValue(null)]\n        public int? SourceCodeSizeLimit { get; set; }\n\n        [Display(Name = \"Show_results\", ResourceType = typeof(Resource))]\n        public bool ShowResults { get; set; }\n\n        [Display(Name = \"Show_detailed_feedback\", ResourceType = typeof(Resource))]\n        public bool ShowDetailedFeedback { get; set; }\n\n        [ExcludeFromExcel]\n        public IEnumerable<ProblemResourceViewModel> Resources { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Problem/ProblemViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Problem\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    public class ProblemViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Problem, ProblemViewModel>> FromProblem\n        {\n            get\n            {\n                return problem => new ProblemViewModel\n                {\n                    Id = problem.Id,\n                    Name = problem.Name,\n                    ContestName = problem.Contest.Name\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public string ContestName { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/ProblemResource/ProblemResourceGridViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.ProblemResource\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Problems.ViewModels.ProblemResources;\n\n    public class ProblemResourceGridViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<ProblemResource, ProblemResourceGridViewModel>> FromResource\n        {\n            get\n            {\n                return resource => new ProblemResourceGridViewModel\n                {\n                    Id = resource.Id,\n                    ProblemId = resource.ProblemId,\n                    Name = resource.Name,\n                    Type = resource.Type,\n                    Link = resource.Link,\n                    OrderBy = resource.OrderBy,\n                };\n            }\n        }\n\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int Id { get; set; }\n\n        public int ProblemId { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        public string Name { get; set; }\n\n        [Display(Name = \"Type\", ResourceType = typeof(Resource))]\n        public ProblemResourceType Type { get; set; }\n\n        [Display(Name = \"Link\", ResourceType = typeof(Resource))]\n        public string Link { get; set; }\n\n        [Display(Name = \"Order\", ResourceType = typeof(Resource))]\n        public int OrderBy { get; set; }\n\n        public string TypeName => this.Type.GetDescription();\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/ProblemResource/ProblemResourceViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.ProblemResource\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Problems.ViewModels.ProblemResources;\n\n    public class ProblemResourceViewModel\n    {\n        public static Expression<Func<ProblemResource, ProblemResourceViewModel>> FromProblemResource\n        {\n            get\n            {\n                return res => new ProblemResourceViewModel\n                {\n                    Id = res.Id,\n                    Name = res.Name,\n                    Type = res.Type,\n                    OrderBy = res.OrderBy,\n                    ProblemId = res.ProblemId,\n                    ProblemName = res.Problem.Name,\n                };\n            }\n        }\n\n        public int? Id { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.ProblemResourceNameMaxLength,\n            MinimumLength = GlobalConstants.ProblemResourceNameMinLength,\n            ErrorMessageResourceName = \"Name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(\"Име\")]\n        public string Name { get; set; }\n\n        public int ProblemId { get; set; }\n\n        public string ProblemName { get; set; }\n\n        [Display(Name = \"Type\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Type_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DefaultValue(ProblemResourceType.ProblemDescription)]\n        public ProblemResourceType Type { get; set; }\n\n        public int DropDownTypeIndex => (int)this.Type - 1;\n\n        public IEnumerable<SelectListItem> AllTypes { get; set; }\n\n        public HttpPostedFileBase File { get; set; }\n\n        public string FileExtension\n        {\n            get\n            {\n                var fileName = this.File.FileName;\n                return fileName.Substring(fileName.LastIndexOf('.') + 1);\n            }\n        }\n\n        [Display(Name = \"Link\", ResourceType = typeof(Resource))]\n        [DefaultValue(\"http://\")]\n        public string Link { get; set; }\n\n        [Display(Name = \"Order\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Order_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public int OrderBy { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Roles/RoleAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Roles\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using Microsoft.AspNet.Identity.EntityFramework;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Roles.ViewModels.RolesViewModels;\n\n    public class RoleAdministrationViewModel : AdministrationViewModel<IdentityRole>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<IdentityRole, RoleAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return role => new RoleAdministrationViewModel\n                {\n                    RoleId = role.Id,\n                    Name = role.Name,\n                };\n            }\n        }\n\n        [DatabaseProperty(Name = \"Id\")]\n        [HiddenInput(DisplayValue = false)]\n        public string RoleId { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Roles/UserInRoleAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Roles\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Roles.ViewModels.RolesViewModels;\n\n    public class UserInRoleAdministrationViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<UserProfile, UserInRoleAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return us => new UserInRoleAdministrationViewModel\n                {\n                    UserId = us.Id,\n                    UserName = us.UserName,\n                    FirstName = us.UserSettings.FirstName ?? Resource.Not_entered,\n                    LastName = us.UserSettings.LastName ?? Resource.Not_entered,\n                    Email = us.Email\n                };\n            }\n        }\n\n        public string UserId { get; set; }\n\n        [Display(Name = \"UserName\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"UserName_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string UserName { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        public string FirstName { get; set; }\n\n        [Display(Name = \"Last_name\", ResourceType = typeof(Resource))]\n        public string LastName { get; set; }\n\n        [Display(Name = \"Email\", ResourceType = typeof(Resource))]\n        public string Email { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Setting/SettingAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Setting\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Settings.ViewModels.SettingAdministration;\n\n    public class SettingAdministrationViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Setting, SettingAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return set => new SettingAdministrationViewModel\n                {\n                    Name = set.Name,\n                    Value = set.Value,\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Value\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Value_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string Value { get; set; }\n\n        public Setting GetEntityModel(Setting model = null)\n        {\n            model = model ?? new Setting();\n            model.Name = this.Name;\n            model.Value = this.Value;\n            return model;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Submission/SubmissionAdministrationGridViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Submission\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Submissions.ViewModels.SubmissionAdministration;\n\n    public class SubmissionAdministrationGridViewModel : AdministrationViewModel<Submission>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Submission, SubmissionAdministrationGridViewModel>> ViewModel\n        {\n            get\n            {\n                return sub => new SubmissionAdministrationGridViewModel\n                {\n                    Id = sub.Id,\n                    ParticipantName = sub.Participant.User.UserName,\n                    ProblemId = sub.ProblemId,\n                    ProblemName = sub.Problem.Name,\n                    SubmissionTypeName = sub.SubmissionType.Name,\n                    Points = sub.Points,\n                    Processed = sub.Processed,\n                    Processing = sub.Processing,\n                    CreatedOn = sub.CreatedOn,\n                    ModifiedOn = sub.ModifiedOn,\n                };\n            }\n        }\n\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        public int? ProblemId { get; set; }\n\n        [Display(Name = \"Problem\", ResourceType = typeof(Resource))]\n        public string ProblemName { get; set; }\n\n        [Display(Name = \"Participant\", ResourceType = typeof(Resource))]\n        public string ParticipantName { get; set; }\n\n        [Display(Name = \"Type\", ResourceType = typeof(Resource))]\n        public string SubmissionTypeName { get; set; }\n\n        [Display(Name = \"Points\", ResourceType = typeof(Resource))]\n        public int? Points { get; set; }\n\n        [ScaffoldColumn(false)]\n        public bool Processing { get; set; }\n\n        [ScaffoldColumn(false)]\n        public bool Processed { get; set; }\n\n        [Display(Name = \"Status\", ResourceType = typeof(Resource))]\n        public string Status\n        {\n            get\n            {\n                if (!this.Processing && this.Processed)\n                {\n                    return Resource.Processed;\n                }\n                else if (this.Processing && !this.Processed)\n                {\n                    return Resource.Processing;\n                }\n                else if (!this.Processing && !this.Processed)\n                {\n                    return Resource.Pending;\n                }\n                else\n                {\n                    throw new InvalidOperationException(Resource.Invalid_state);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Submission/SubmissionAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Submission\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Submissions.ViewModels.SubmissionAdministration;\n\n    public class SubmissionAdministrationViewModel : AdministrationViewModel<Submission>\n    {\n        private HttpPostedFileBase fileSubmission;\n\n        [ExcludeFromExcel]\n        public static Expression<Func<Submission, SubmissionAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return sub => new SubmissionAdministrationViewModel\n                {\n                    Id = sub.Id,\n                    ProblemId = sub.ProblemId,\n                    ParticipantId = sub.ParticipantId,\n                    SubmissionTypeId = sub.SubmissionTypeId,\n                    AllowBinaryFilesUpload = sub.SubmissionType.AllowBinaryFilesUpload,\n                    Content = sub.Content,\n                    FileExtension = sub.FileExtension,\n                    CreatedOn = sub.CreatedOn,\n                    ModifiedOn = sub.ModifiedOn,\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int? Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Problem\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Problem_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"ProblemComboBox\")]\n        public int? ProblemId { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Participant\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Participant_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"ParticipantDropDownList\")]\n        public int? ParticipantId { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Type\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Type_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SubmissionTypesDropDownList\")]\n        public int? SubmissionTypeId { get; set; }\n\n        public bool? AllowBinaryFilesUpload { get; set; }\n\n        [DatabaseProperty]\n        [ScaffoldColumn(false)]\n        [Required(\n            ErrorMessageResourceName = \"Content_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public byte[] Content { get; set; }\n\n        [AllowHtml]\n        [Display(Name = \"Content_as_string\", ResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string ContentAsString\n        {\n            get\n            {\n                if (this.AllowBinaryFilesUpload.HasValue && !this.AllowBinaryFilesUpload.Value)\n                {\n                    return this.Content.Decompress();\n                }\n\n                return null;\n            }\n\n            set\n            {\n                this.Content = value.Compress();\n            }\n        }\n\n        [Display(Name = \"File_submission\", ResourceType = typeof(Resource))]\n        [ScaffoldColumn(false)]\n        public HttpPostedFileBase FileSubmission\n        {\n            get\n            {\n                return this.fileSubmission;\n            }\n\n            set\n            {\n                this.fileSubmission = value;\n                this.Content = value.InputStream.ToByteArray();\n                this.FileExtension = value.FileName.GetFileExtension();\n            }\n        }\n\n        [DatabaseProperty]\n        public string FileExtension { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/SubmissionType/SubmissionTypeAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.SubmissionType\n{\n    using System;\n    using System.ComponentModel;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.SubmissionTypes.ViewModels.SubmissionTypeAdministration;\n\n    public class SubmissionTypeAdministrationViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<SubmissionType, SubmissionTypeAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return st => new SubmissionTypeAdministrationViewModel\n                {\n                    Id = st.Id,\n                    Name = st.Name,\n                    IsSelectedByDefault = st.IsSelectedByDefault,\n                    ExecutionStrategyType = st.ExecutionStrategyType,\n                    CompilerType = st.CompilerType,\n                    AdditionalCompilerArguments = st.AdditionalCompilerArguments,\n                    Description = st.Description,\n                    AllowBinaryFilesUpload = st.AllowBinaryFilesUpload,\n                    AllowedFileExtensions = st.AllowedFileExtensions\n                };\n            }\n        }\n\n        [DatabaseProperty]\n        [Display(Name = \"№\")]\n        [DefaultValue(null)]\n        [HiddenInput(DisplayValue = false)]\n        public int Id { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Name_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.SubmissionTypeNameMaxLength,\n            MinimumLength = GlobalConstants.SubmissionTypeNameMinLength,\n            ErrorMessageResourceName = \"Name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Name { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Is_selected\", ResourceType = typeof(Resource))]\n        public bool IsSelectedByDefault { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Execution_strategy_type\", ResourceType = typeof(Resource))]\n        [UIHint(\"Enum\")]\n        public ExecutionStrategyType ExecutionStrategyType { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Compiler_type\", ResourceType = typeof(Resource))]\n        [UIHint(\"Enum\")]\n        public CompilerType CompilerType { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Additional_compiler_arguments\", ResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string AdditionalCompilerArguments { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Description\", ResourceType = typeof(Resource))]\n        [UIHint(\"MultiLineText\")]\n        public string Description { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Allow_binary_files_upload\", ResourceType = typeof(Resource))]\n        public bool AllowBinaryFilesUpload { get; set; }\n\n        [DatabaseProperty]\n        [Display(Name = \"Allowed_file_extensions\", ResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string AllowedFileExtensions { get; set; }\n\n        public SubmissionType GetEntityModel(SubmissionType model = null)\n        {\n            model = model ?? new SubmissionType();\n            model.Id = this.Id;\n            model.Name = this.Name;\n            model.IsSelectedByDefault = this.IsSelectedByDefault;\n            model.ExecutionStrategyType = this.ExecutionStrategyType;\n            model.CompilerType = this.CompilerType;\n            model.AdditionalCompilerArguments = this.AdditionalCompilerArguments;\n            model.Description = this.Description;\n            model.AllowBinaryFilesUpload = this.AllowBinaryFilesUpload;\n            model.AllowedFileExtensions = this.AllowedFileExtensions;\n            return model;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/SubmissionType/SubmissionTypeViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.SubmissionType\n{\n    using System;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Contest;\n\n    public class SubmissionTypeViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<SubmissionType, SubmissionTypeViewModel>> ViewModel\n        {\n            get\n            {\n                return st => new SubmissionTypeViewModel\n                {\n                    Id = st.Id,\n                    Name = st.Name\n                };\n            }\n        }\n\n        public int? Id { get; set; }\n\n        public string Name { get; set; }\n\n        public bool IsChecked { get; set; }\n\n        public static Action<SubmissionTypeViewModel> ApplySelectedTo(ContestAdministrationViewModel contest)\n        {\n            return st =>\n            {\n                var submissionViewModel = new SubmissionTypeViewModel\n                {\n                    Id = st.Id,\n                    Name = st.Name,\n                    IsChecked = false,\n                };\n\n                var selectedSubmission = contest.SelectedSubmissionTypes.FirstOrDefault(s => s.Id == st.Id);\n\n                if (selectedSubmission != null)\n                {\n                    submissionViewModel.IsChecked = true;\n                }\n\n                contest.SubmisstionTypes.Add(submissionViewModel);\n            };\n        }\n\n        public SubmissionType GetEntityModel(SubmissionType model = null)\n        {\n            model = model ?? new SubmissionType();\n            model.Id = this.Id.Value;\n            return model;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/Test/TestViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.Test\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n    using System.Web.Script.Serialization;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Administration.Tests.ViewModels.TestAdministration;\n\n    public class TestViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<Test, TestViewModel>> FromTest\n        {\n            get\n            {\n                return test => new TestViewModel\n                {\n                    Id = test.Id,\n                    InputData = test.InputData,\n                    OutputData = test.OutputData,\n                    IsTrialTest = test.IsTrialTest,\n                    OrderBy = test.OrderBy,\n                    ProblemId = test.Problem.Id,\n                    ProblemName = test.Problem.Name,\n                    TestRunsCount = test.TestRuns.Count\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        [Display(Name = \"Problem_name\", ResourceType = typeof(Resource))]\n        public string ProblemName { get; set; }\n\n        [Display(Name = \"Input\", ResourceType = typeof(Resource))]\n        [AllowHtml]\n        [DataType(DataType.MultilineText)]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Input_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.TestInputMinLength)]\n        public string Input\n        {\n            get\n            {\n                if (this.InputData == null)\n                {\n                    return string.Empty;\n                }\n\n                var result = this.InputData.Decompress();\n                return result.Length > 20 ? result.Substring(0, 20) : result;\n            }\n\n            set\n            {\n                this.InputData = value.Compress();\n            }\n        }\n\n        [Display(Name = \"Input\", ResourceType = typeof(Resource))]\n        [AllowHtml]\n        [DataType(DataType.MultilineText)]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Input_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [ScriptIgnore]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.TestInputMinLength)]\n        public string InputFull\n        {\n            get\n            {\n                if (this.InputData == null)\n                {\n                    return string.Empty;\n                }\n\n                var result = this.InputData.Decompress();\n                return result;\n            }\n\n            set\n            {\n                this.InputData = value.Compress();\n            }\n        }\n\n        [Display(Name = \"Output\", ResourceType = typeof(Resource))]\n        [AllowHtml]\n        [DataType(DataType.MultilineText)]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Output_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.TestOutputMinLength)]\n        public string Output\n        {\n            get\n            {\n                if (this.OutputData == null)\n                {\n                    return string.Empty;\n                }\n\n                var result = this.OutputData.Decompress();\n                return result.Length > 20 ? result.Substring(0, 20) : result;\n            }\n\n            set\n            {\n                this.OutputData = value.Compress();\n            }\n        }\n\n        [Display(Name = \"Output\", ResourceType = typeof(Resource))]\n        [AllowHtml]\n        [DataType(DataType.MultilineText)]\n        [Required(\n            AllowEmptyStrings = false,\n            ErrorMessageResourceName = \"Output_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [ScriptIgnore]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.TestOutputMinLength)]\n        public string OutputFull\n        {\n            get\n            {\n                if (this.OutputData == null)\n                {\n                    return string.Empty;\n                }\n\n                var result = this.OutputData.Decompress();\n                return result;\n            }\n\n            set\n            {\n                this.OutputData = value.Compress();\n            }\n        }\n\n        [Display(Name = \"Trial_test_name\", ResourceType = typeof(Resource))]\n        public string TrialTestName => this.IsTrialTest ? Resource.Practice : Resource.Contest;\n\n        [Display(Name = \"Trial_test_name\", ResourceType = typeof(Resource))]\n        public bool IsTrialTest { get; set; }\n\n        [Display(Name = \"Order\", ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Order_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [RegularExpression(@\"(0|[1-9]{1}[0-9]{0,8}|[1]{1}[0-9]{1,9}|[-]{1}[2]{1}([0]{1}[0-9]{8}|[1]{1}([0-3]{1}[0-9]{7}|[4]{1}([0-6]{1}[0-9]{6}|[7]{1}([0-3]{1}[0-9]{5}|[4]{1}([0-7]{1}[0-9]{4}|[8]{1}([0-2]{1}[0-9]{3}|[3]{1}([0-5]{1}[0-9]{2}|[6]{1}([0-3]{1}[0-9]{1}|[4]{1}[0-8]{1}))))))))|(\\+)?[2]{1}([0]{1}[0-9]{8}|[1]{1}([0-3]{1}[0-9]{7}|[4]{1}([0-6]{1}[0-9]{6}|[7]{1}([0-3]{1}[0-9]{5}|[4]{1}([0-7]{1}[0-9]{4}|[8]{1}([0-2]{1}[0-9]{3}|[3]{1}([0-5]{1}[0-9]{2}|[6]{1}([0-3]{1}[0-9]{1}|[4]{1}[0-7]{1})))))))))\")]\n        public int OrderBy { get; set; }\n\n        [Display(Name = \"Problem_id\", ResourceType = typeof(Resource))]\n        public int ProblemId { get; set; }\n\n        [Display(Name = \"Test_runs_count\", ResourceType = typeof(Resource))]\n        public int TestRunsCount { get; set; }\n\n        internal byte[] InputData { get; set; }\n\n        internal byte[] OutputData { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/TestRun/TestRunViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.TestRun\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.DataAnnotations;\n    using OJS.Common.Models;\n    using TestRunModel = OJS.Data.Models.TestRun;\n\n    public class TestRunViewModel\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<TestRunModel, TestRunViewModel>> FromTestRun\n        {\n            get\n            {\n                return testRun => new TestRunViewModel\n                {\n                    Id = testRun.Id,\n                    ExecutionResult = testRun.ResultType,\n                    MemoryUsed = testRun.MemoryUsed,\n                    TimeUsed = testRun.TimeUsed,\n                    SubmissionId = testRun.SubmissionId,\n                    ProblemName = testRun.Test.Problem.Name,\n                    ExecutionComment = testRun.ExecutionComment,\n                    CheckerComment = testRun.CheckerComment,\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public int TimeUsed { get; set; }\n\n        public long MemoryUsed { get; set; }\n\n        public int SubmissionId { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public string ExecutionComment { get; set; }\n\n        public string CheckerComment { get; set; }\n\n        public DateTime Date { get; set; }\n\n        public TestRunResultType ExecutionResult { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/ViewModels/User/UserProfileAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Administration.ViewModels.User\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Common.Attributes;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Administration.ViewModels.Common;\n\n    using Resource = Resources.Areas.Administration.Users.ViewModels.UserProfileAdministration;\n\n    public class UserProfileAdministrationViewModel : AdministrationViewModel<UserProfile>\n    {\n        [ExcludeFromExcel]\n        public static Expression<Func<UserProfile, UserProfileAdministrationViewModel>> ViewModel\n        {\n            get\n            {\n                return user => new UserProfileAdministrationViewModel\n                {\n                    Id = user.Id,\n                    UserName = user.UserName,\n                    Email = user.Email,\n                    IsGhostUser = user.IsGhostUser,\n                    FirstName = user.UserSettings.FirstName,\n                    LastName = user.UserSettings.LastName,\n                    City = user.UserSettings.City,\n                    EducationalInstitution = user.UserSettings.EducationalInstitution,\n                    FacultyNumber = user.UserSettings.FacultyNumber,\n                    DateOfBirth = user.UserSettings.DateOfBirth,\n                    Company = user.UserSettings.Company,\n                    JobTitle = user.UserSettings.JobTitle,\n                    CreatedOn = user.CreatedOn,\n                    ModifiedOn = user.ModifiedOn,\n                };\n            }\n        }\n\n        [Display(Name = \"№\")]\n        [HiddenInput(DisplayValue = false)]\n        public string Id { get; set; }\n\n        [Display(Name = \"UserName\", ResourceType = typeof(Resource))]\n        [UIHint(\"NonEditable\")]\n        public string UserName { get; set; }\n\n        [DataType(DataType.EmailAddress)]\n        [RegularExpression(\n            GlobalConstants.EmailRegEx,\n            ErrorMessageResourceName = \"Mail_invalid\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Mail_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.EmailMaxLength,\n            ErrorMessageResourceName = \"Mail_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [UIHint(\"SingleLineText\")]\n        public string Email { get; set; }\n\n        [Display(Name = \"Is_ghoust_user\", ResourceType = typeof(Resource))]\n        [HiddenInput(DisplayValue = false)]\n        public bool IsGhostUser { get; set; }\n\n        [Display(Name = \"First_name\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.FirstNameMaxLength,\n            ErrorMessageResourceName = \"First_name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string FirstName { get; set; }\n\n        [Display(Name = \"Last_name\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.LastNameMaxLength,\n            ErrorMessageResourceName = \"Last_name_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string LastName { get; set; }\n\n        [Display(Name = \"City\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.CityNameMaxLength,\n            ErrorMessageResourceName = \"City_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string City { get; set; }\n\n        [Display(Name = \"Educational_institution\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.EducationalInstitutionMaxLength,\n            ErrorMessageResourceName = \"Educational_institution_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string EducationalInstitution { get; set; }\n\n        [Display(Name = \"Faculty_number\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.FacultyNumberMaxLength,\n            ErrorMessageResourceName = \"Faculty_number_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"PositiveInteger\")]\n        public string FacultyNumber { get; set; }\n\n        [Display(Name = \"Date_of_birth\", ResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true,\n            DataFormatString = \"{0:dd-MM-yyyy}\")]\n        [DataType(DataType.Date)]\n        [UIHint(\"Date\")]\n        public DateTime? DateOfBirth { get; set; }\n\n        [Display(Name = \"Company\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.CompanyNameMaxLength,\n            ErrorMessageResourceName = \"Company_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string Company { get; set; }\n\n        [Display(Name = \"Job_title\", ResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.JobTitleMaxLenth,\n            ErrorMessageResourceName = \"Job_title_length\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"SingleLineText\")]\n        public string JobTitle { get; set; }\n\n        [Display(Name = \"Age\", ResourceType = typeof(Resource))]\n        [LocalizedDisplayFormat(\n            NullDisplayTextResourceName = \"Null_display_text\",\n            NullDisplayTextResourceType = typeof(Resource),\n            ConvertEmptyStringToNull = true)]\n        [UIHint(\"NonEditable\")]\n        public byte Age => Calculator.Age(this.DateOfBirth) ?? default(byte);\n\n        public override UserProfile GetEntityModel(UserProfile model = null)\n        {\n            model = model ?? new UserProfile();\n\n            model.Id = this.Id;\n            model.UserName = this.UserName;\n            model.Email = this.Email;\n            model.UserSettings = new UserSettings\n            {\n                FirstName = this.FirstName,\n                LastName = this.LastName,\n                City = this.City,\n                EducationalInstitution = this.EducationalInstitution,\n                FacultyNumber = this.FacultyNumber,\n                DateOfBirth = this.DateOfBirth,\n                Company = this.Company,\n                JobTitle = this.JobTitle,\n            };\n            model.CreatedOn = this.CreatedOn.GetValueOrDefault();\n            model.ModifiedOn = this.ModifiedOn;\n\n            return model;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AccessLogs/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AccessLogs.Views.AccessLogsIndex;\n@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"AccessLogs\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.AccessLogs.AccessLogGridViewModel>()\n        .Name(\"DataGrid\")\n        .Columns(columns =>\n        {\n            columns.Bound(x => x.Id);\n            columns.Bound(x => x.UserName);\n            columns.Bound(x => x.IpAddress);\n            columns.Bound(x => x.RequestType);\n            columns.Bound(x => x.Url);\n            columns.Bound(x => x.PostParams);\n            columns.Bound(x => x.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(x => x.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n        })\n        .ToolBar(toolbar =>\n        {\n            toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n            toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n        })\n        .ColumnMenu()\n        .Events(e => e.DataBound(\"onDataBound\"))\n        .Pageable(x => x.Refresh(true))\n        .Sortable(x => x.Enabled(true).AllowUnsort(false))\n        .Filterable(x => x.Enabled(true))\n        .Reorderable(x => x.Columns(true))\n        .Resizable(x => x.Columns(true))\n        .DataSource(datasource => datasource\n            .Ajax()\n            .ServerOperation(true)\n            .Model(model =>\n            {\n                model.Id(x => x.Id);\n            })\n            .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n            .Read(read => read.Action(\"Read\", ControllerName))\n            .Events(ev => ev.Error(\"validateModelStateErrors\"))\n        )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AntiCheat/ByIP.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AntiCheat.Views.AntiCheatViews;\n@model IEnumerable<SelectListItem>\n@{\n    ViewBag.Title = Resource.By_ip_page_title;\n}\n\n<h1>@ViewBag.Title</h1>\n<div class=\"row\">\n    <div class=\"col-md-9\">\n        @Html.Partial(\"_ContestsComboBox\", Model)\n    </div>\n    <div class=\"col-md-3\">\n        <input id=\"exclude-ips\" type=\"text\" class=\"form-control\" />\n    </div>\n</div>\n\n<br />\n<div id=\"ip-grid\">\n</div>\n\n@section scripts{\n    <script>\n        function selectContest() {\n            var contestId = $('#contests').val();\n            var excludeIps = $('#exclude-ips').val();\n\n            $.get('/Administration/AntiCheat/RenderByIpGrid/' + contestId + '?excludeIps=' + excludeIps, function (data) {\n                $(\"#ip-grid\").html(data);\n            });\n        }\n    </script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AntiCheat/BySubmissionSimilarity.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AntiCheat.Views.AntiCheatViews\n\n@model OJS.Web.Areas.Administration.ViewModels.AntiCheat.SubmissionSimilarityFiltersInputModel\n\n@{\n    ViewBag.Title = Resource.By_submission_page_title;\n}\n\n@section styles {\n    <style>\n        #input-boxes .k-dropdown .k-dropdown-wrap {\n            height: 35px;\n        }\n    </style>\n}\n\n<h2>@ViewBag.Title</h2>\n<div id=\"input-boxes\">\n    <div class=\"row\">\n        <div class=\"col-md-7\">\n            @Html.LabelFor(m => m.ContestId)\n        </div>\n        <div class=\"col-md-3\">\n            @Html.LabelFor(m => m.PlagiarismDetectorType)\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-7\">\n            @(Html.Kendo().ComboBoxFor(m => m.ContestId)\n                .Filter(FilterType.Contains)\n                .AutoBind(false)\n                .MinLength(3)\n                .Placeholder(Resource.Choose_or_enter_contest)\n                .DataValueField(\"Id\")\n                .DataTextField(\"Name\")\n                .DataSource(dataSource => dataSource.Read(read => read.Action(\"Contests\", \"Submissions\").Data(\"onAdditionalData\")).ServerFiltering(true))\n                .HtmlAttributes(new { style = \"width: 100%; height: 30px\" }))\n        </div>\n        <div class=\"col-md-3\">\n            @(Html.Kendo().DropDownListFor(m => m.PlagiarismDetectorType)\n                .BindTo(Model.PlagiarismDetectorTypes)\n                .DataValueField(\"Value\")\n                .DataTextField(\"Text\")\n                .HtmlAttributes(new { style = \"width: 100%\" }))\n        </div>\n        <div class=\"col-md-2\">\n            <button type=\"submit\" class=\"btn btn-primary\" id=\"check-submission-similarities\">Провери за прилики</button>\n        </div>\n    </div>\n</div>\n\n<br />\n\n<div id=\"similarity-grid\"></div>\n\n@section scripts {\n    <script>\n        function onAdditionalData() {\n            return {\n                text: $('#ContestId').data('kendoComboBox').text()\n            };\n        }\n\n        $(function () {\n            $('#check-submission-similarities').click(function () {\n                var contestId = $('#ContestId').data('kendoComboBox').value();\n                var plagiarismDetectorType = $('#PlagiarismDetectorType').data('kendoDropDownList').value();\n\n                $('#similarity-grid').html('<h1 class=\"text-center\">Loading...</h1>');\n\n                $.ajax({\n                    url: '/Administration/AntiCheat/RenderSubmissionsSimilaritiesGrid',\n                    data: { contestIds: [contestId], plagiarismDetectorType: plagiarismDetectorType },\n                    type: 'POST',\n                    traditional: true,\n                    success: function (data) {\n                        $('#similarity-grid').html(data);\n                    }\n                });\n            });\n        });\n    </script>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AntiCheat/_ContestsComboBox.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AntiCheat.Views.AntiCheatViews;\n@model IEnumerable<SelectListItem>\n@(Html.Kendo()\n    .ComboBox()\n    .Name(\"contests\")\n    .BindTo(Model)\n    .Filter(FilterType.Contains)\n    .AutoBind(false)\n    .MinLength(3)\n    .Placeholder(Resource.Choose_or_enter_contest)\n    .Events(ev => ev.Change(\"selectContest\"))\n    .HtmlAttributes(new { style = \"width: 100%; height: 30px\" }))\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AntiCheat/_IPGrid.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AntiCheat.Views.AntiCheatViews;\n@model IEnumerable<OJS.Web.Areas.Administration.ViewModels.AntiCheat.AntiCheatByIpAdministrationViewModel>\n\n<table class=\"table table-striped\">\n    <tr>\n        <th>\n            @Resource.Participant_id\n        </th>\n        <th>\n            @Resource.Username\n        </th>\n        <th>\n            @Resource.Points\n        </th>\n        <th>\n            @Resource.Ip_addresses\n        </th>\n    </tr>\n    @foreach (var participant in Model)\n    {\n        <tr id=\"participant-@participant.Id\">\n            <td>\n                <span class=\"text-white\">@participant.Id</span>\n            </td>\n            <td>\n                <a href=\"/Users/@participant.UserName\" target=\"_blank\"><span class=\"text-primary\">@participant.UserName</span></a>\n            </td>\n            <td>\n                <span class=\"text-white\">@participant.Points</span>\n            </td>\n            <td>\n                <span class=\"text-white\">@Html.Raw(string.Join(\"  |  \", participant.DifferentIps.Take(10).Select(ip => string.Format(\"<a href=\\\"http://tools.nikolay.in/whois/{0}\\\" target=\\\"_blank\\\">{0}</a>\", ip))))</span>\n            </td>\n        </tr>\n    }\n</table>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/AntiCheat/_SubmissionsGrid.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.AntiCheat.Views.AntiCheatViews\n\n@model IEnumerable<IGrouping<string, OJS.Web.Areas.Administration.ViewModels.AntiCheat.SubmissionSimilarityViewModel>>\n\n@if (Model.Any())\n{\n    foreach (var groupedReport in Model)\n    {\n        var reports = groupedReport.OrderByDescending(p => p.Percentage);\n        <h3 class=\"text-white\">@groupedReport.Key</h3>\n        <table class=\"table table-striped\">\n            <tr>\n                <th>@Resource.First_participant</th>\n                <th>@Resource.Second_participant</th>\n                <th>@Resource.Points</th>\n                <th>@Resource.Differences</th>\n                <th>@Resource.Percentage</th>\n            </tr>\n\n            @foreach (var report in reports)\n            {\n                <tr>\n                    <td>\n                        <a href=\"/Contests/Submissions/View/@report.FirstSubmissionId\" target=\"_blank\">\n                            @report.FirstParticipantName - @report.FirstSubmissionCreatedOn\n                        </a>\n                    </td>\n                    <td>\n                        <a href=\"/Contests/Submissions/View/@report.SecondSubmissionId\" target=\"_blank\">\n                            @report.SecondParticipantName - @report.SecondSubmissionCreatedOn\n                        </a>\n                    </td>\n                    <td>\n                        @report.Points\n                    </td>\n                    <td>\n                        @report.Differences\n                    </td>\n                    <td>\n                        @report.Percentage.ToString(\"F2\")%\n                    </td>\n                </tr>\n            }\n        </table>\n        <br />\n    }\n}\nelse\n{\n    <div class=\"text-center text-uppercase\">@Resource.No_similarities</div>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Checkers/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Checkers.Views.CheckersIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"Checkers\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Checker.CheckerAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(col => col.Id);\n            columns.Bound(col => col.Name);\n            columns.Bound(col => col.Description).Hidden();\n            columns.Bound(col => col.DllFile);\n            columns.Bound(col => col.ClassName);\n            columns.Bound(col => col.Parameter).ClientTemplate(\"#= substring(Parameter) #\");\n            columns.Bound(col => col.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(col => col.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.Id);\n                model.Field(m => m.DllFile).DefaultValue(\"OJS.Workers.Checkers.dll\");\n                model.Field(m => m.ClassName).DefaultValue(\"OJS.Workers.Checkers.CSharpCodeChecker\");\n            })\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n\n    function substring(value) {\n        if (value == null || value == undefined || value == \"\") {\n            return \"\";\n        }\n        else {\n            return value.toString().length > 100 ? value.substring(0, 100) + \"...\" : value;\n        }\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/ContestCategories/Hierarchy.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.ContestCategories.Views.ContestCategoriesViews;\n@{\n    ViewBag.Title = Resource.Heirarchy_page_title;\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().TreeView()\n    .Name(\"treeview\")\n    .DragAndDrop(true)\n    .DataTextField(\"Name\")\n    .DataSource(dataSource => dataSource\n        .Read(read => read\n            .Action(\"ReadCategories\", \"ContestCategories\")\n        )\n    )\n    .Events(e => e.Drop(\"onDrop\"))\n)\n\n<script>\n    function onDrop(e) {\n        var treeView = this,\n            sourceItem = treeView.dataItem(e.sourceNode),\n            destinationItem = treeView.dataItem(e.destinationNode),\n            parent = destinationItem;\n        if (e.dropPosition != \"over\") {\n            parent = parent.parentNode();\n        }\n\n        $.ajax({\n            url: '@Url.Action(\"MoveCategory\", \"ContestCategories\")',\n            type: \"POST\",\n            data: {\n                id: sourceItem.id,\n                to: parent ? parent.id : null\n            }\n        });\n    }\n</script>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/ContestCategories/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.ContestCategories.Views.ContestCategoriesViews;\n@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@{\n    ViewBag.Title = Resource.Index_page_title;\n    const string ControllerName = \"ContestCategories\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.ContestCategory.ContestCategoryAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n    {\n        columns.Bound(x => x.Id);\n        columns.Bound(x => x.Name);\n        columns.Bound(x => x.IsVisible);\n        columns.Bound(x => x.OrderBy);\n        columns.Bound(x => x.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n        columns.Bound(x => x.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n        columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80).Title(GeneralResource.Change);\n        columns.Command(command => command.Destroy().Text(\" \")).Width(80).Title(GeneralResource.Delete);\n    })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(Resource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Groupable(x =>\n    {\n        x.Enabled(true);\n        x.Messages(m => m.Empty(GeneralResource.Group_by_message));\n    })\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model => model.Id(x => x.Id))\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/Create.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.ContestCreate;\n@model OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Create\", \"Contests\", FormMethod.Post))\n    {\n        @Html.AntiForgeryToken()\n        @Html.ValidationMessage(GlobalConstants.DateTimeError)\n\n        @Html.Partial(\"_ContestEditor\", Model)\n        <hr />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-3\">\n                <button type=\"submit\" class=\"btn btn-primary pull-right\">@Resource.Create</button>\n            </div>\n            <div class=\"editor-label col-xs-4\">\n                <a href=\"/Administration/Contests/\" class=\"btn btn-primary\">@Resource.Back</a>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/Edit.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.ContestEdit\n@model OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Model.Name</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Edit\", \"Contests\", FormMethod.Post))\n    {\n        @Html.AntiForgeryToken()\n        @Html.HiddenFor(m => m.CreatedOn)\n        @Html.ValidationMessage(GlobalConstants.DateTimeError)\n\n        @Html.Partial(\"_ContestEditor\", Model)\n        <hr />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-3\">\n                <button type=\"submit\" class=\"btn btn-primary pull-right\">@Resource.Edit</button>\n            </div>\n            <div class=\"editor-label col-xs-4\">\n                <a href=\"/Administration/Contests/\" class=\"btn btn-primary\">@Resource.Back</a>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/EditorTemplates/CategoryDropDown.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.EditorTemplates.CategoryDropDown;\n@model int?\n\n@(Html.Kendo()\n    .DropDownListFor(m => m)\n    .OptionLabel(Resource.Choose_category)\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .DataSource(data =>\n        {\n            data.ServerFiltering(true)\n                .Read(read =>\n                    {\n                        read.Action(\"GetCategories\", \"Contests\");\n                    });\n        })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/EditorTemplates/ContestQuestionType.cshtml",
    "content": "﻿@using OJS.Common.Models\n@model ContestQuestionType\n\n@(Html.Kendo()\n    .DropDownListFor(m => m)\n    .BindTo(EnumConverter.GetSelectListItems<ContestQuestionType>())\n    .SelectedIndex((int)Model - 1)\n    .HtmlAttributes(new { @class = \"pull-left full-kendo-editor\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/EditorTemplates/SubmissionTypeCheckBoxes.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.EditorTemplates.SubmissionTypeCheckBoxes;\n@model IList<OJS.Web.Areas.Administration.ViewModels.SubmissionType.SubmissionTypeViewModel>\n\n@for (int i = 0; i < Model.Count(); i++)\n{\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.HiddenFor(m => Model[i].Id)\n                @Html.HiddenFor(m => Model[i].Name)\n                @Html.LabelFor(m => Model[i].IsChecked, Model[i].Name)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => Model[i].IsChecked, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@string.Format(\"{0} {1}\", Resource.Allow_submission, Model[i].Name)\" data-tooltip=\"true\"></span>\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.ContestIndex\n@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ContestControllerName = \"Contests\";\n    const string ContestQuestionControllerName = \"ContestQuestions\";\n    const string ContestQuestionAnswersControllerName = \"ContestQuestionAnswers\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(x => x.Id);\n            columns.Bound(x => x.Name);\n            columns.Bound(x => x.StartTime).Format(\"{0:dd/MM/yyyy HH:mm}\");\n            columns.Bound(x => x.EndTime).Format(\"{0:dd/MM/yyyy HH:mm}\");\n            columns.Bound(x => x.PracticeStartTime).Format(\"{0:dd/MM/yyyy HH:mm}\");\n            columns.Bound(x => x.PracticeEndTime).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(x => x.IsVisible).Hidden();\n            columns.Bound(x => x.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(x => x.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a class='k-button' href='{0}/#=Id#?compete=true'>{1}</a><br /><a class='k-button' href='{0}/#=Id#?compete=false'>{2}</a>\", Url.Action(\"Solutions\", \"ContestsExport\"), Resource.For_contest, Resource.For_practice)).Title(Resource.Results).Width(200);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a class='k-button' href='{0}/#=Id#?compete=true'>{1}</a><br /><a class='k-button' href='{0}/#=Id#?compete=false'>{2}</a>\", Url.Action(\"Results\", \"ContestsExport\"), Resource.For_contest, Resource.For_practice)).Title(Resource.Ranking).Width(200);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a class='k-button' href='{0}/#=Id#'>{1}</a><br /><a class='k-button' href='{2}/#=Id#'>{3}</a>\", Url.Action(\"Contest\", \"Problems\"), Resource.Tasks, Url.Action(\"Contest\", \"Participants\"), Resource.Participants)).Title(Resource.Other);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a class='k-button' href='{0}/#=Id#'>{1}</a>\", Url.Action(\"Edit\", \"Contests\"), Resource.Edit)).Title(GeneralResource.Change);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80).Title(GeneralResource.Delete);\n    })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Custom().Text(GeneralResource.Create).Action(\"Create\", ContestControllerName);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ContestControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .ClientDetailTemplateId(\"questions-template\")\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Groupable(x =>\n    {\n        x.Enabled(true);\n        x.Messages(m => m.Empty(GeneralResource.Group_by_message));\n    })\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model => model.Id(x => x.Id))\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Create(create => create.Action(\"Create\", ContestControllerName))\n        .Read(read => read.Action(\"Read\", ContestControllerName))\n        .Update(update => update.Action(\"Update\", ContestControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ContestControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound() {\n        CreateExportToExcelButton();\n\n        console.log($('#export'));\n    }\n</script>\n\n<script type=\"text/x-kendo-template\" id=\"questions-template\">\n    @(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.ContestQuestion.ContestQuestionViewModel>()\n        .Name(\"DetailQuestionsGrid_#=Id#\")\n        .Columns(columns =>\n        {\n            columns.Bound(m => m.QuestionId);\n            columns.Bound(m => m.Text);\n            columns.Bound(m => m.Type).ClientTemplate(\"\\\\#= getTypeName(Type) \\\\#\");\n            columns.Bound(m => m.RegularExpressionValidation).Hidden();\n            columns.Bound(m => m.AskPracticeParticipants);\n            columns.Bound(m => m.AskOfficialParticipants);\n            columns.Bound(m => m.CreatedOn).Hidden();\n            columns.Bound(m => m.ModifiedOn).Hidden();\n            columns.Command(com => com.Edit().Text(\" \")).Width(80);\n            columns.Command(com => com.Destroy().Text(\" \")).Width(80);\n        })\n        .ToolBar(tool =>\n            {\n                tool.Create().Text(Resource.Add_question);\n                tool.Custom().Text(Resource.Copy_from).HtmlAttributes(new { onclick = \"copyFromContest(event, #=Id#)\" });\n            })\n        .ColumnMenu()\n        .ClientDetailTemplateId(\"answers-template\")\n        .Editable(edit =>\n            {\n                edit.Mode(GridEditMode.PopUp);\n                edit.Window(w => w.Title(ViewBag.Title));\n                edit.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n            })\n        .DataSource(data =>\n        {\n            data.Ajax()\n                .ServerOperation(true)\n                .Model(model =>\n                {\n                    model.Id(m => m.QuestionId);\n                })\n                .Sort(sort => sort.Add(field => field.CreatedOn))\n                .Create(create => create.Action(\"AddQuestionToContest\", ContestQuestionControllerName, new { id = \"#= Id #\" }))\n                .Read(read => read.Action(\"QuestionsInContest\", ContestQuestionControllerName, new { id = \"#= Id #\" }))\n                .Update(update => update.Action(\"UpdateQuestionInContest\", ContestQuestionControllerName))\n                .Destroy(destroy => destroy.Action(\"DeleteQuestionFromContest\", ContestQuestionControllerName));\n        })\n        .ToClientTemplate())\n\n    @(Html.Kendo().Window()\n        .Name(\"CopyFromContestWindow_#=Id#\")\n        .Title(Resource.Copy_from_contest)\n        .LoadContentFrom(\"/Administration/ContestQuestions/CopyFromAnotherContest/#=Id#\")\n        .Visible(false)\n        .Modal(true)\n        .Width(400)\n        .Actions(actions => actions.Close())\n        .ToClientTemplate())\n</script>\n\n<script type=\"text/x-kendo-template\" id=\"answers-template\">\n    # if ((Type == 0) || (Type == 1)) { #\n    @(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.ContestQuestionAnswer.ContestQuestionAnswerViewModel>()\n        .Name(\"DetailAnswerGrid_#=QuestionId#\")\n        .Columns(columns =>\n        {\n            columns.Bound(m => m.AnswerId);\n            columns.Bound(m => m.Text);\n            columns.Bound(m => m.QuestionText);\n            columns.Command(com => com.Edit().Text(\" \")).Width(80);\n            columns.Command(com => com.Destroy().Text(\" \")).Width(80);\n        })\n        .ToolBar(tool =>\n            {\n                tool.Create().Text(Resource.Add_answer);\n                tool.Custom().Text(Resource.Delete_all).HtmlAttributes(new { id = \"delete-all-answers\", data_question_id = \"#=QuestionId#\" });\n            })\n        .ColumnMenu()\n        .Editable(edit =>\n            {\n                edit.Mode(GridEditMode.PopUp);\n                edit.Window(w => w.Title(ViewBag.Title));\n                edit.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n            })\n        .DataSource(data =>\n        {\n            data.Ajax()\n                .ServerOperation(true)\n                .Model(model =>\n                {\n                    model.Id(m => m.QuestionId);\n                })\n                .Sort(sort => sort.Add(field => field.AnswerId))\n                .Create(create => create.Action(\"AddAnswerToQuestion\", ContestQuestionAnswersControllerName, new { id = \"#= QuestionId #\" }))\n                .Read(read => read.Action(\"AnswersInQuestion\", ContestQuestionAnswersControllerName, new { id = \"#= QuestionId #\" }))\n                .Update(update => update.Action(\"UpdateAnswerInQuestion\", ContestQuestionAnswersControllerName))\n                .Destroy(destroy => destroy.Action(\"DeleteAnswerFromQuestion\", ContestQuestionAnswersControllerName, new { id = \"#= QuestionId #\" }));\n        })\n        .ToClientTemplate())\n    # }\n    else { #\n    <div class=\"text-center\">@Resource.No_possible_answers</div>\n    # } #\n</script>\n\n@section scripts {\n    <script src=\"~/Scripts/Administration/Contests/contests-index.js\"></script>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Contests/_ContestEditor.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Contests.Views.Partials.ContestEditor;\n@model OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel\n\n<div class=\"row\">\n    <div class=\"editor-label col-xs-3\">\n        @Html.ValidationMessageFor(m => m.SelectedSubmissionTypes)\n    </div>\n</div>\n<fieldset>\n    <legend>@Resource.General_info</legend>\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.Name)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.Name, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_title\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.Name)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.CategoryId)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.CategoryId, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Choose_category\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.CategoryId)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.Description)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.Description, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_description\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.Description)\n        </div>\n    </div>\n    <br />\n</fieldset>\n<fieldset>\n    <legend>@Resource.Duration_info</legend>\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.StartTime)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.StartTime, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Contest_start\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.StartTime)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.EndTime)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.EndTime, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Contest_end\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.EndTime)\n        </div>\n    </div>\n    <br /><div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.PracticeStartTime)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.PracticeStartTime, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Practice_start\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.PracticeStartTime)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.PracticeEndTime)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.PracticeEndTime, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Practice_end\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.PracticeEndTime)\n        </div>\n    </div>\n    <br />\n</fieldset>\n<fieldset>\n    <legend>@Resource.Passowords_info</legend>\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.ContestPassword)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.ContestPassword, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Contest_password\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.ContestPassword)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.PracticePassword)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.PracticePassword, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Practice_password\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.PracticePassword)\n        </div>\n    </div>\n    <br />\n</fieldset>\n<fieldset>\n    <legend>@Resource.Options</legend>\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.LimitBetweenSubmissions)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.LimitBetweenSubmissions, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Submissions_limit\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.LimitBetweenSubmissions)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.OrderBy)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.OrderBy, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Contest_order\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.OrderBy)\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"editor-label col-xs-3\">\n            <div class=\"pull-right\">\n                @Html.LabelFor(m => m.IsVisible)\n            </div>\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            @Html.EditorFor(m => m.IsVisible, new { @class = \"form-control pull-left full-editor\" })\n        </div>\n        <div class=\"editor-field col-xs-4\">\n            <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Contest_visibility\" data-tooltip=\"true\"></span>\n            @Html.ValidationMessageFor(m => m.IsVisible)\n        </div>\n    </div>\n    <br />\n</fieldset>\n<fieldset>\n    <legend>@Resource.Submission_types</legend>\n    @Html.EditorFor(m => m.SubmisstionTypes)\n</fieldset>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Feedback/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Feedback.Views.FeedbackIndexAdmin;\n\n@{\n\t\tViewBag.Title = Resource.Page_title;\n\t\tconst string ControllerName = \"Feedback\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.FeedbackReport.FeedbackReportViewModel>()\n\t\t.Name(\"DataGrid\")\n\t\t.Columns(columns =>\n\t\t\t{\n\t\t\t\tcolumns.Bound(x => x.Id);\n\t\t\t\tcolumns.Bound(x => x.Name);\n                columns.Bound(x => x.Content);\n                columns.Bound(x => x.IsFixed);\n                columns.Bound(x => x.Username);\n                columns.Bound(x => x.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n                columns.Bound(x => x.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n\t\t\t\tcolumns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n\t\t\t\tcolumns.Command(command => command.Destroy().Text(\" \")).Width(80);\n\t\t\t})\n\t\t.ToolBar(toolbar =>\n\t\t{\n\t\t\ttoolbar.Create().Text(GeneralResource.Create);\n            toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n            toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n\t\t})\n\t\t.Editable(editable =>\n\t\t{\n\t\t\teditable.Mode(GridEditMode.PopUp);\n\t\t\teditable.Window(w => w.Title(ViewBag.Title));\n\t\t\teditable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n\t\t})\n\t\t.ColumnMenu()\n\t\t.Events(e => e.DataBound(\"onDataBound\"))\n\t\t.Pageable(x => x.Refresh(true))\n\t\t.Sortable(x => x.Enabled(true).AllowUnsort(false))\n\t\t.Filterable(x => x.Enabled(true))\n\t\t.Reorderable(x => x.Columns(true))\n\t\t.Resizable(x => x.Columns(true))\n\t\t.DataSource(datasource => datasource\n\t\t\t.Ajax()\n\t\t\t.ServerOperation(true)\n\t\t\t.Model(model =>\n                {\n                    model.Id(x => x.Id);\n                })\n\t\t\t.Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n\t\t\t.Create(create => create.Action(\"Create\", ControllerName))\n\t\t\t.Read(read => read.Action(\"Read\", ControllerName))\n\t\t\t.Update(update => update.Action(\"Update\", ControllerName))\n\t\t\t.Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n            .Events(ev => ev.Error(\"validateModelStateErrors\"))\n\t\t)\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Navigation/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Администрация\";\n}\n\n<h1>@ViewBag.Title</h1>\n@Html.ActionLink(\"Новини\", GlobalConstants.Index, \"News\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Задачи\", GlobalConstants.Index, \"Problems\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Състезания\", GlobalConstants.Index, \"Contests\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Категории\", GlobalConstants.Index, \"ContestCategories\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Обратна връзка\", GlobalConstants.Index, \"Feedback\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Йерархия на категориите\", \"Hierarchy\", \"ContestCategories\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Тестови файлове\", GlobalConstants.Index, \"Tests\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Потребители\", GlobalConstants.Index, \"Users\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Решения\", GlobalConstants.Index, \"Submissions\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Роли\", GlobalConstants.Index, \"Roles\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Настройки\", GlobalConstants.Index, \"Settings\", new { area = \"Administration\" }, null)<br />\n@Html.ActionLink(\"Логове за достъп\", GlobalConstants.Index, \"AccessLogs\", new { area = \"Administration\" }, null)<br />"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/News/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.News.Views.NewsIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"News\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.News.NewsAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(col => col.Id);\n            columns.Bound(col => col.Title).ClientTemplate(\"<a href='\" + Url.Action(\"Selected\", \"News\", new { Area = string.Empty }) + \"/#= Id #' target='_blank'>#= Title #</a>\");\n            columns.Bound(col => col.Author);\n            columns.Bound(col => col.IsVisible);\n            columns.Bound(col => col.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(col => col.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(Resource.Download_news).Action(\"Fetch\", \"News\", new { Area = \"Administration\" });\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model => \n            {\n                model.Id(m => m.Id);\n            })\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Participants/Contest.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Participants.Views.ParticipantsContest;\n@model int\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-12\" id=\"participants-grid\">\n            @Html.Partial(\"_Participants\", Model)\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Participants/EditorTemplates/ContestsComboBox.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Participants.Views.EditorTemplates.ParticipantEditorTemplates;\n@model int\n\n@(Html.Kendo()\n    .ComboBoxFor(m => m)\n    .Name(\"ContestId\")\n    .DataTextField(\"Name\")\n    .DataValueField(\"Id\")\n    .Filter(FilterType.Contains)\n    .MinLength(1)\n    .Placeholder(Resource.Choose_contest)\n    .Value(Resource.Choose_contest)\n    .DataSource(data =>\n    {\n        data.ServerFiltering(true)\n            .Read(read =>\n            {\n                read.Action(\"Contests\", \"Participants\")\n                    .Data(@<text> function () { return { text: $('\\\\#ContestId').data(\"kendoComboBox\").input.val() };} </text>);\n            });\n    })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Participants/EditorTemplates/UsersComboBox.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Participants.Views.EditorTemplates.ParticipantEditorTemplates;\n@model string\n\n@(Html.Kendo()\n    .ComboBoxFor(m => m)\n    .Name(\"UserId\")\n    .DataTextField(\"Name\")\n    .DataValueField(\"Id\")\n    .Filter(FilterType.Contains)\n    .MinLength(1)\n    .Placeholder(Resource.Choose_user)\n    .Value(Resource.Choose_user)\n    .DataSource(data =>\n    {\n        data.ServerFiltering(true)\n            .Read(read =>\n            {\n                read.Action(\"Users\", \"Participants\")\n                    .Data(@<text> function () { return { text: $('\\\\#UserId').data(\"kendoComboBox\").input.val() };} </text>);\n            });\n    })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Participants/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Participants.Views.ParticipantsIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"row\">\n    <div class=\"col-md-10\">\n        @(Html\n            .Kendo()\n            .ComboBox()\n            .Name(\"contests\")\n            .DataTextField(\"Name\")\n            .DataValueField(\"Id\")\n            .Filter(FilterType.Contains)\n            .AutoBind(false)\n            .MinLength(3)\n            .Placeholder(Resource.Choose_or_enter_contest)\n            .Events(ev => ev.Change(\"selectContest\"))\n            .DataSource(dataSource =>\n                {\n                    dataSource\n                        .Read(read =>\n                            {\n                                read.Action(\"Contests\", \"Participants\")\n                                    .Data(\"additionalComboBoxData\");\n                            })\n                        .ServerFiltering(true);\n                })\n            .HtmlAttributes(new { style = \"width: 100%;\" }))\n    </div>\n    <div class=\"col-md-2 text-right\">\n        @Ajax.ActionLink(Resource.Clear, \"RenderGrid\", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = \"participants-grid\", OnSuccess = \"clearContestComboBox\" }, new { @class = \"btn btn-primary btn-sm\" })\n    </div>\n</div>\n<br />\n<div class=\"row\">\n    <div class=\"col-md-12\" id=\"participants-grid\">\n        @Html.Partial(\"_Participants\")\n    </div>\n</div>\n\n@section scripts{\n    <script>\n        function additionalComboBoxData() {\n            return {\n                text: $(\"#contests\").data(\"kendoComboBox\").input.val()\n            }\n        }\n\n        function selectContest() {\n            var contestId = $(\"#contests\").val();\n\n            $.post('/Administration/Participants/RenderGrid/' + contestId, function (data) {\n                $(\"#participants-grid\").html(data);\n            });\n        }\n\n        function clearContestComboBox() {\n            $(\"#contests\").data(\"kendoComboBox\").value(null);\n        }\n    </script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Participants/_Participants.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Participants.Views.Partials.Participants;\n@model int?\n@{\n    const string ControllerName = \"Participants\";\n}\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Participant.ParticipantAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(col => col.Id);\n            columns.Bound(col => col.UserName);\n            columns.Bound(col => col.ContestName);\n            columns.Bound(col => col.IsOfficial);\n            columns.Bound(col => col.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(col => col.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(Resource.Add_participant);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .ClientDetailTemplateId(\"questions-answers-template\")\n    .Events(e => e.DataBound(\"onDataBound\").Edit(\"onEdit\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.Id);\n            })\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"ReadParticipants\", ControllerName, new { id = Model }))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n\n    function onEdit(e) {\n        var contestComboBox = e.container.find('#ContestId').data('kendoComboBox');\n        contestComboBox.value(null);\n        contestComboBox.text(null);\n    }\n</script>\n\n<script type=\"text/x-kendo-template\" id=\"questions-answers-template\">\n    @(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Participant.ParticipantAnswerViewModel>()\n        .Name(\"DetailQuestionsAnswersGrid_#=Id#\")\n        .Columns(columns =>\n        {\n            columns.Bound(m => m.QuestionText);\n            columns.Bound(m => m.Answer);\n            columns.Command(com => com.Edit().Text(\" \")).Width(80);\n        })\n        .ColumnMenu()\n        .Editable(edit =>\n            {\n                edit.Mode(GridEditMode.PopUp);\n                edit.Window(w => w.Title(ViewBag.Title));\n                edit.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n            })\n        .DataSource(data =>\n        {\n            data.Ajax()\n                .ServerOperation(true)\n                .Model(model =>\n                {\n                    model.Id(m => m.ContestQuestionId);\n                })\n                .Sort(sort => sort.Add(field => field.ContestQuestionId))\n                .Read(read => read.Action(\"Answers\", ControllerName, new { id = \"#= Id #\" }))\n                .Update(update => update.Action(\"UpdateParticipantAnswer\", ControllerName));\n        })\n        .ToClientTemplate())\n</script>\n\n@if (Model.HasValue)\n{\n    <script>\n        var exportButton = $('#export');\n        var hrefAttr = exportButton.attr('href');\n        var linkParts = hrefAttr.split('?');\n        var url = linkParts[0] + 'ByContest?' + linkParts[1] + \"&contestId=@Model.Value\";\n        exportButton.attr('href', url);\n    </script>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/Create.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsCreate;\n@model OJS.Web.Areas.Administration.ViewModels.Problem.DetailedProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Resource.For @Model.ContestName</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Create\", \"Problems\", FormMethod.Post, new { enctype = \"multipart/form-data\" }))\n    {\n        @Html.AntiForgeryToken()\n        @Html.ValidationMessage(\"Resources\")\n\n        @Html.HiddenFor(m => m.ContestName)\n        @Html.HiddenFor(m => m.ContestId)\n\n        <fieldset>\n            <legend>@Resource.General_info</legend>\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.Name)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @Html.TextBoxFor(m => m.Name, new { @class = \"form-control pull-left full-editor\" })\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_name\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.Name)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.MaximumPoints)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.MaximumPoints)\n                    .Min(1)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_max_points\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.MaximumPoints)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.TimeLimit) (в ms)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.TimeLimit)\n                    .Min(1)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_time_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.TimeLimit)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.MemoryLimit) (в B)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.MemoryLimit)\n                    .Format(\"#\")\n                    .Min(1)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_memory_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.MemoryLimit)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.SourceCodeSizeLimit) (в B)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <input type=\"checkbox\" id=\"enable-sclimit\" />\n                    <strong>Да</strong>\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.SourceCodeSizeLimit)\n                    .Format(\"#\")\n                    .Min(1)\n                    .Step(1)\n                    .Enable(false)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-right full-editor\", style = \"width: 75%\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_sorce_code_size_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.SourceCodeSizeLimit)\n                </div>\n            </div>\n        </fieldset>\n        <fieldset>\n            <legend>@Resource.Settings</legend>\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.Checker)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @(Html.Kendo()\n                    .DropDownListFor(m => m.Checker)\n                    .BindTo(Model.AvailableCheckers)\n                    .HtmlAttributes(new { @class = \"pull-left full-kendo-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" id=\"checkers-tooltip\"></span>\n                    @Html.ValidationMessageFor(m => m.Checker)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.OrderBy)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Min(0)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_order\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.OrderBy)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.ShowResults)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @Html.EditorFor(m => m.ShowResults)\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Show_results\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.ShowResults)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.ShowDetailedFeedback)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @Html.EditorFor(m => m.ShowDetailedFeedback)\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Show_detailed_feedback\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.ShowDetailedFeedback)\n                </div>\n            </div>\n        </fieldset>\n        <br />\n        <fieldset>\n            <legend>@Resource.Resources</legend>\n            <div class=\"row\">\n                <div class=\"container col-md-6\">\n                    <div class=\"pull-right\">\n                        <button class=\"btn btn-primary\" id=\"add-resource\">@Resource.Add</button>\n                        <button class=\"btn btn-primary\" id=\"remove-resource\" disabled=\"disabled\">@Resource.Remove</button>\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Add_remove_resource\" data-tooltip=\"true\"></span>\n                </div>\n            </div>\n\n            <div class=\"row\">\n                <div class=\"container\">\n                    <div class=\"row\" id=\"resources\">\n                    </div>\n                </div>\n            </div>\n        </fieldset>\n        <br />\n        <fieldset>\n            <legend>@Resource.Tests</legend>\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        <strong>@Resource.Tests_label</strong>\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    <div id=\"tests-file-button\" class=\"btn btn-sm btn-primary pull-right\">@Resource.Choose_file</div>\n                    <div class=\"hidden-file-upload\">\n                        <input type=\"file\" name=\"testArchive\" id=\"tests-upload-input\" />\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" id=\"tests-tooltip\"></span>\n                </div>\n            </div>\n            <hr />\n        </fieldset>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-5\">\n                <button type=\"submit\" id=\"create-submit\" class=\"btn btn-primary pull-right\">@Resource.Create</button>\n            </div>\n            <div class=\"editor-label col-xs-3\">\n                <a href=\"/Administration/Problems/Contest/@Model.ContestId\" class=\"btn btn-primary\">@Resource.Back</a>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))\n\n<script type=\"text/x-kendo-template\" id=\"checkers-template\">\n    <ul style=\"list-style-type: none\">\n        <li>\n            <strong>@Resource.Choose_code_checker</strong>\n        </li>\n        <li>\n            <strong>Exact</strong> @Resource.Exact_checker_description\n        </li>\n        <li>\n            <strong>Trim</strong> @Resource.Trim_checker_description\n        </li>\n        <li>\n            <strong>Sort</strong> @Resource.Sort_checker_description\n        </li>\n        <li>\n            <strong>Case-insensitive</strong> @Resource.Case_insensitive_checker_description\n        </li>\n        <li>\n            <strong>Precision N</strong> @Resource.Precision_checker_description\n        </li>\n    </ul>\n</script>\n\n<script type=\"text/x-kendo-template\" id=\"tests-template\">\n    @Html.Raw(Resource.Choose_zip_file)\n</script>\n\n@section scripts{\n    <script src=\"~/Scripts/Administration/Problems/problems-create.js\"></script>\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n\n\n\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/Delete.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsDelete\n@model OJS.Web.Areas.Administration.ViewModels.Problem.DetailedProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n<h2>@ViewBag.Title @Model.Name</h2>\n<div class=\"container\">\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Name)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.Name\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.MaximumPoints)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.MaximumPoints\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.TimeLimit)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.TimeLimit\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.MemoryLimit)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.MemoryLimit\n    </div>\n    <br />\n    @if (Model.SourceCodeSizeLimit != null)\n    {\n        <div class=\"editor-label\">\n        @Html.LabelFor(m => m.SourceCodeSizeLimit)\n        </div>\n        <div class=\"panel-body news-content editor-field\">\n            @Model.SourceCodeSizeLimit\n        </div>\n        <br />\n    }\n    @if (Model.Checker != null)\n    {\n        <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Checker)\n        </div>\n        <div class=\"panel-body news-content editor-field\">\n            @Model.Checker\n        </div>\n        <br />\n    }\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.OrderBy)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.OrderBy\n    </div>\n    <br />    \n    <a href=\"/Administration/Problems/ConfirmDelete/@Model.Id\" class=\"btn btn-primary\">@Resource.Delete</a>\n    <a href=\"/Administration/Problems/Contest/@Model.ContestId\" class=\"btn btn-primary\">@Resource.Back</a>\n</div>\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/DeleteAll.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsDeleteAll\n@model OJS.Web.Areas.Administration.ViewModels.Contest.ContestAdministrationViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@Model.Name</h2>\n<h3>@ViewBag.Title</h3>\n\n<p>\n    @Resource.Confirm_message @Model.Name?\n</p>\n<a href=\"/Administration/Problems/ConfirmDeleteAll/@Model.Id\" class=\"btn btn-primary\">@Resource.Confirm</a>\n<a href=\"/Administration/Problems/Contest/@Model.Id\" class=\"btn btn-primary\">@Resource.Back</a>\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/Details.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsDetails;\n@model OJS.Web.Areas.Administration.ViewModels.Problem.DetailedProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Model.Name</h2>\n<div class=\"container\">\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Name)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.Name\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ContestName)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.ContestName\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.TimeLimit)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.TimeLimit\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.MemoryLimit)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.MemoryLimit\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.SourceCodeSizeLimit)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @if (Model.SourceCodeSizeLimit == null)\n        {\n            @Resource.Unlimited\n        }\n        else\n        {\n            @Model.SourceCodeSizeLimit\n        }\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.MaximumPoints)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.MaximumPoints\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Checker)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.Checker\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ShowResults)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @(Model.ShowResults ? Resource.Results_visible : Resource.Results_invisible)\n    </div>\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ShowDetailedFeedback)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @(Model.ShowDetailedFeedback ? Resource.Full_feedback_visible : Resource.Full_feedback_invisible)\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.OrderBy)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.OrderBy\n    </div>\n    <br />\n    @Ajax.ActionLink(Resource.Show_submissions, \"GetSubmissions\", new { id = Model.Id }, new AjaxOptions { HttpMethod = \"Get\", InsertionMode = InsertionMode.Replace, UpdateTargetId = \"grid\" }, new { @class = \"btn btn-primary\" })\n    @Ajax.ActionLink(Resource.Show_resources, \"GetResources\", new { id = Model.Id }, new AjaxOptions { HttpMethod = \"Get\", InsertionMode = InsertionMode.Replace, UpdateTargetId = \"grid\" }, new { @class = \"btn btn-primary\" })\n    <br />\n    <br />\n    <div id=\"grid\">\n\n    </div>\n    <br />\n    <a href=\"/Administration/Tests/Problem/@Model.Id\" class=\"btn btn-primary\">@Resource.Tests</a>\n    <a href=\"/Administration/Problems/Edit/@Model.Id\" class=\"btn btn-primary\">@Resource.Edit</a>\n    <a href=\"/Administration/Problems/Contest/@Model.ContestId\" class=\"btn btn-primary\">@Resource.Back</a>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/Edit.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsEdit;\n@model OJS.Web.Areas.Administration.ViewModels.Problem.DetailedProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Resource.For @Model.ContestName</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Edit\", \"Problems\", FormMethod.Post, new { enctype = \"multipart/form-data\" }))\n    {\n        @Html.AntiForgeryToken()\n\n        @Html.HiddenFor(m => m.ContestName)\n        @Html.HiddenFor(m => m.ContestId)\n\n        <fieldset>\n            <legend>@Resource.General_info</legend>\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.Name)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @Html.TextBoxFor(m => m.Name, new { @class = \"form-control pull-left full-editor\" })\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_name\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.Name)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.MaximumPoints)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.MaximumPoints)\n                    .Min(1)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                    @Html.ValidationMessageFor(m => m.MaximumPoints)\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_max_points\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.MaximumPoints)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.TimeLimit) (в ms)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.TimeLimit)\n                    .Min(1)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-4\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_time_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.TimeLimit)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.MemoryLimit) (в B)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.MemoryLimit)\n                    .Format(\"#\")\n                    .Min(1)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_memory_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.MemoryLimit)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.SourceCodeSizeLimit) (в B)\n                    </div>\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <input type=\"checkbox\" id=\"enable-sclimit\" />\n                    <strong>Да</strong>\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.SourceCodeSizeLimit)\n                    .Format(\"#\")\n                    .Min(1)\n                    .Step(1)\n                    .Enable(false)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-right full-editor\", style = \"width: 75%\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_sorce_code_size_limit\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.SourceCodeSizeLimit)\n                </div>\n            </div>\n        </fieldset>\n\n        <fieldset>\n            <legend>@Resource.Settings</legend>\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.Checker)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @(Html.Kendo()\n                    .DropDownListFor(m => m.Checker)\n                    .BindTo(Model.AvailableCheckers)\n                    .HtmlAttributes(new { @class = \"pull-left full-kendo-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" id=\"checkers-tooltip\"></span>\n                    @Html.ValidationMessageFor(m => m.Checker)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.OrderBy)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Min(0)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_order\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.OrderBy)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.ShowResults)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @Html.EditorFor(m => m.ShowResults)\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Show_results\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.ShowResults)\n                </div>\n            </div>\n            <br />\n            <div class=\"row\">\n                <div class=\"editor-label col-xs-3\">\n                    <div class=\"pull-right\">\n                        @Html.LabelFor(m => m.ShowDetailedFeedback)\n                    </div>\n                </div>\n                <div class=\"col-xs-3\">\n                    @Html.EditorFor(m => m.ShowDetailedFeedback)\n                </div>\n                <div class=\"editor-field col-xs-3\">\n                    <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Show_detailed_feedback\" data-tooltip=\"true\"></span>\n                    @Html.ValidationMessageFor(m => m.ShowDetailedFeedback)\n                </div>\n            </div>\n        </fieldset>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-5\">\n                <button type=\"submit\" class=\"btn btn-primary pull-right\">@Resource.Edit</button>\n            </div>\n            <div class=\"editor-label col-xs-3\">\n                <a href=\"/Administration/Problems/Contest/@Model.ContestId\" class=\"btn btn-primary\">@Resource.Back</a>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))\n\n<script type=\"text/x-kendo-template\" id=\"checkers-template\">\n    <div>\n        @Resource.Choose_code_checker\n    </div>\n    <ul>\n        <li>\n            <strong>Exact</strong> @Resource.Exact_checker_description\n        </li>\n        <li>\n            <strong>Trim</strong> @Resource.Trim_checker_description\n        </li>\n        <li>\n            <strong>Sort</strong> @Resource.Sort_checker_description\n        </li>\n        <li>\n            <strong>Case-insensitive</strong> @Resource.Case_insensitive_checker_description\n        </li>\n        <li>\n            <strong>Precision N</strong> @Resource.Precision_checker_description\n        </li>\n    </ul>\n</script>\n\n@section scripts {\n    <script src=\"~/Scripts/Administration/Problems/problems-edit.js\"></script>\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.ProblemsIndex;\n@using OJS.Web.Areas.Administration.ViewModels.Problem\n@model ProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"container\">\n    <div class=\"col-md-6\">\n        @if (ViewBag.ContestId != null)\n        {\n            <input id=\"contestId\" name=\"contestId\" type=\"hidden\" value=\"@ViewBag.ContestId\" />\n        }\n        @if (ViewBag.ProblemId != null)\n        {\n            <input id=\"problemId\" name=\"problemId\" type=\"hidden\" value=\"@ViewBag.ProblemId\" />\n        }\n        <div>\n            <label for=\"search\">@Resource.Search_by_contest </label>\n        </div>\n        <div>\n            @(@Html.Kendo().AutoComplete()\n                .Name(\"search\")\n                .Placeholder(Resource.Enter_contest)\n                .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n                .DataTextField(\"Name\")\n                .Filter(\"contains\")\n                .MinLength(3)\n                .DataSource(source =>\n                {\n                    source\n                        .Read(read =>\n                        {\n                            read.Action(\"GetSearchedContests\", \"Problems\")\n                                .Data(\"onAdditionalData\");\n                        });\n                }\n                )\n                .Events(e =>\n                    {\n                        e.Select(\"onSearchSelect\");\n                    }))\n        </div>\n        <div>\n            <div>\n                <label for=\"categories\">@Resource.Category </label>\n            </div>\n            <div>\n                @(Html.Kendo().DropDownList()\n                .Name(\"categories\")\n                .OptionLabel(Resource.Choose_category)\n                .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n                .DataTextField(\"Name\")\n                .DataValueField(\"Id\")\n                .DataSource(source =>\n                {\n                    source.Read(read =>\n                    {\n                        read.Action(\"GetCascadeCategories\", \"Problems\");\n                    });\n                }))\n            </div>\n        </div>\n        <div>\n            <label for=\"contests\">@Resource.Contest </label>\n        </div>\n        <div>\n            @(Html.Kendo().DropDownList()\n            .Name(\"contests\")\n            .OptionLabel(Resource.Choose_contest)\n            .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n            .DataTextField(\"Name\")\n            .DataValueField(\"Id\")\n            .DataSource(source =>\n            {\n                source.Read(read =>\n                {\n                    read.Action(\"GetCascadeContests\", \"Problems\")\n                        .Data(\"filterContests\");\n                })\n                .ServerFiltering(true);\n            })\n            .Enable(false)\n            .AutoBind(false)\n            .CascadeFrom(\"categories\")\n            .Events(e => e.Change(\"onContestSelect\"))\n                )\n            </div>\n    </div>\n    <div class=\"col-md-6\">\n        <div>\n            <strong>@Resource.Qucik_access_contest</strong>\n        </div>\n        @(Html.Kendo()\n        .TabStrip()\n        .Name(\"latest-courses\")\n        .Items(tabstrip =>\n        {\n            tabstrip.Add()\n                .Text(Resource.Future)\n                .Selected(true)\n                .LoadContentFrom(\"GetFutureContests\", \"Contests\");\n\n            tabstrip.Add()\n                .Text(Resource.Active)\n                .LoadContentFrom(\"GetActiveContests\", \"Contests\");\n\n            tabstrip.Add()\n                .Text(Resource.Latest)\n                .LoadContentFrom(\"GetLatestContests\", \"Contests\");\n        })\n        .Events(ev => ev.ContentLoad(\"hideTheadFromGrid\"))\n        .HtmlAttributes(new { @class = \"col-md-12\" }))\n    </div>\n</div>\n\n<br />\n<div class=\"jumbotron text-center text-white\" id=\"status\">@Resource.Problems_loading</div>\n<div id=\"problems-grid\">\n\n</div>\n\n@section scripts{\n    <script src=\"~/Scripts/Administration/Problems/problems-index.js\"></script>      \n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/_ResourcesGrid.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.Partials.ProblemsPartials;\n@model int\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.ProblemResource.ProblemResourceGridViewModel>()\n    .Name(\"submissions-grid\")\n    .Columns(columns =>\n    {\n        columns.Bound(model => model.Id);\n        columns.Bound(model => model.Name);\n        columns.Bound(model => model.Type).ClientTemplate(\"#= TypeName #\");\n        columns.Bound(model => model.OrderBy);\n        columns.Bound(model => model.Link).ClientTemplate(string.Format(\"# if(Type == 3) {{ # <a href='#= Link #' class='btn btn-sm btn-primary' target='_blank'>{0}</a> # }} else {{ # <a href='/Administration/Resources/Download/#= Id #' class='btn btn-sm btn-primary' >{1}</a> # }} #\", Resource.Video, Resource.Download));\n    })\n        .Pageable(x => x.Refresh(true))\n        .Sortable(x => x.Enabled(true).AllowUnsort(false))\n        .Filterable(x => x.Enabled(true))\n        .DataSource(datasource => datasource\n            .Ajax()\n            .ServerOperation(true)\n            .Sort(sort => sort.Add(x => x.Id))\n            .Read(read => read.Action(\"ReadResources\", \"Problems\", new { id = Model }))\n        ))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Problems/_SubmissionsGrid.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Problems.Views.Partials.ProblemsPartials;\n@model int\n\n@{\n    const string ControllerName = \"Submissions\";\n}\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationGridViewModel>()\n    .Name(\"submissions-grid\")\n    .Columns(columns =>\n    {\n        columns.Bound(model => model.ParticipantName);\n        columns.Bound(model => model.ProblemName);\n        columns.Bound(model => model.SubmissionTypeName);\n        columns.Bound(model => model.Status);\n        columns.Bound(model => model.Points);\n        columns.Bound(model => model.CreatedOn).Hidden();\n        columns.Bound(model => model.ModifiedOn).Hidden();\n        columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext'>{1}</a>\", Url.Action(\"Update\", ControllerName), Resource.Edit));\n        columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext'>{1}</a>\", Url.Action(\"Delete\", ControllerName), Resource.Delete));    \n        columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext' target='_blank'>{1}</a>\", Url.Action(\"Retest\", ControllerName), Resource.Retest));\n    })\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n        .Read(read => read.Action(\"ReadSubmissions\", \"Problems\", new { id = Model }))\n    ))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Resources/Create.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Resources.Views.ResourcesCreate;\n@model OJS.Web.Areas.Administration.ViewModels.ProblemResource.ProblemResourceViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Resource.For @Model.ProblemName</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Create\", \"Resources\", FormMethod.Post, new { enctype = \"multipart/form-data\" }))\n    {\n        @Html.AntiForgeryToken()\n        @Html.HiddenFor(m => m.ProblemId)\n        @Html.HiddenFor(m => m.ProblemName)\n        \n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Name)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @Html.TextBoxFor(m => m.Name, new { @class = \"form-control pull-left full-editor\" })\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_name\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.Name)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Type)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @(Html.Kendo()\n                    .DropDownListFor(m => m.Type)\n                    .BindTo(Model.AllTypes)\n                    .Events(ev => ev.Change(\"onEditResourceTypeSelect\"))\n                    .HtmlAttributes(new { @class = \"pull-left full-kendo-editor\" }))\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Choose_type\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.Type)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.OrderBy)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Min(0)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_order\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.OrderBy)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\" id=\"link-input\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Link)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @Html.TextBoxFor(m => m.Link, new { @class = \"form-control pull-left full-editor\" })\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_video_link\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessage(\"Link\")\n            </div>\n        </div>\n        <div class=\"row\" id=\"file-select\">\n            <div class=\"editor-label col-xs-2\">\n                <strong class=\"pull-right\">@Resource.File</strong>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <div id=\"file-button-resource\" class=\"btn btn-sm btn-primary full-editor\">@Resource.Choose_file</div>\n                <div class=\"hidden-file-upload\">\n                    <input type=\"file\" name=\"File\" id=\"input-file-resource\" />\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Choose_file_for_resource\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessage(\"File\")\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-6\">\n                <div class=\"pull-right\">\n                    <button type=\"submit\" class=\"btn btn-sm btn-primary\">@Resource.Create</button>\n                    <a href=\"/Administration/Problems/Resource/@Model.ProblemId\" class=\"btn btn-sm btn-primary\">@Resource.Back</a>\n                </div>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))\n\n@section scripts {\n    <script src=\"~/Scripts/Administration/Resources/resources-create.js\"></script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Resources/Edit.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Resources.Views.ResourcesEdit;\n@model OJS.Web.Areas.Administration.ViewModels.ProblemResource.ProblemResourceViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title @Resource.For @Model.Name</h2>\n<div id=\"create-form\" class=\"container\">\n    @using (Html.BeginForm(\"Edit\", \"Resources\", FormMethod.Post, new { enctype = \"multipart/form-data\" }))\n    {\n        @Html.AntiForgeryToken()\n        @Html.HiddenFor(m => m.ProblemId)\n        @Html.HiddenFor(m => m.ProblemName)\n\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Name)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @Html.TextBoxFor(m => m.Name, new { @class = \"form-control pull-left full-editor\" })\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_name\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.Name)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Type)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @(Html.Kendo()\n                    .DropDownListFor(m => m.Type)\n                    .BindTo(Model.AllTypes)\n                    .SelectedIndex(Model.DropDownTypeIndex)\n                    .Events(ev => ev.Change(\"onEditResourceTypeSelect\"))\n                    .HtmlAttributes(new { @class = \"pull-left full-kendo-editor\" }))\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Choose_type\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.Type)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.OrderBy)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Min(0)\n                    .Step(1)\n                    .Spinners(false)\n                    .HtmlAttributes(new { @class = \"pull-left full-editor\" }))\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_order\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessageFor(m => m.OrderBy)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\" id=\"link-input\">\n            <div class=\"editor-label col-xs-2\">\n                <div class=\"pull-right\">\n                    @Html.LabelFor(m => m.Link)\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                @Html.TextBoxFor(m => m.Link, new { @class = \"form-control pull-left full-editor\" })\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Enter_video_link\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessage(\"Link\")\n            </div>\n        </div>\n        <div class=\"row\" id=\"file-select\">\n            <div class=\"editor-label col-xs-2\">\n                <strong class=\"pull-right\">@Resource.File</strong>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <div id=\"file-button-resource\" class=\"btn btn-sm btn-primary full-editor\">@Resource.Choose_file</div>\n                <div class=\"hidden-file-upload\">\n                    <input type=\"file\" name=\"File\" id=\"input-file-resource\" />\n                </div>\n            </div>\n            <div class=\"editor-field col-xs-4\">\n                <span class=\"glyphicon glyphicon-question-sign text-primary\" title=\"@Resource.Choose_file_for_resource\" data-tooltip=\"true\"></span>\n                @Html.ValidationMessage(\"File\")\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label col-xs-6\">\n                <div class=\"pull-right\">\n                    <button type=\"submit\" class=\"btn btn-sm btn-primary\">@Resource.Edit</button>\n                    <a href=\"/Administration/Problems/Resource/@Model.ProblemId\" class=\"btn btn-sm btn-primary\">@Resource.Back</a>\n                </div>\n            </div>\n        </div>\n    }\n</div>\n\n@(Html.Kendo().Tooltip().For(\"#create-form\").Filter(\"[data-tooltip='true']\").Position(TooltipPosition.Bottom).Width(240))\n\n@section scripts {\n    <script src=\"~/Scripts/Administration/Resources/resources-edit.js\"></script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Roles/EditorTemplates/AddUserToRole.cshtml",
    "content": "﻿@model OJS.Web.Areas.Administration.ViewModels.Roles.UserInRoleAdministrationViewModel\n@using Resource = Resources.Areas.Administration.Roles.Views.RolesIndex;\n@(Html.Kendo()\n    .ComboBoxFor(m => m.UserName)\n    .Name(\"UserId\")\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .Filter(FilterType.Contains)\n    .MinLength(1)\n    .Placeholder(Resource.Choose_user)\n    .DataSource(data =>\n    {\n        data.ServerFiltering(true)\n            .Read(read =>\n            {\n                read.Action(\"AvailableUsersForRole\", \"Roles\")\n                    .Data(@<text> function () { return { text: $('\\\\#UserId').data(\"kendoComboBox\").input.val() };} </text>);\n            });\n    })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Roles/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Roles.Views.RolesIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"Roles\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Roles.RoleAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(col => col.Name);\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ClientDetailTemplateId(\"users-in-role\")\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.RoleId);\n            })\n        .Sort(sort => sort.Add(x => x.Name).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>\n\n<script type=\"text/x-kendo-template\" id=\"users-in-role\">\n    @(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Roles.UserInRoleAdministrationViewModel>()\n        .Name(\"DetailGrid_#=Name#\")\n        .Columns(columns =>\n        {\n            columns.Bound(m => m.UserName);\n            columns.Bound(m => m.FirstName);\n            columns.Bound(m => m.LastName);\n            columns.Bound(m => m.Email);\n            columns.Command(com => com.Destroy().Text(\" \")).Width(80);\n        })\n        .ToolBar(tool => \n            {\n                tool.Create().Text(Resource.Page_title);\n            })\n        .Editable(edit => \n            {\n                edit.Mode(GridEditMode.PopUp);\n                edit.Window(w => w.Title(ViewBag.Title));\n                // edit.AdditionalViewData(new { RoleId = \"#= RoleId #\" });\n                // TODO: Send to editor template the current RoleId so that users in current role cannot dublicate\n                edit.TemplateName(\"AddUserToRole\");\n                edit.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n            })\n        .DataSource(data => \n        {\n            data.Ajax()\n            .ServerOperation(true)\n            .Model(model =>\n            {\n                model.Id(m => m.UserId);\n            })\n            .Sort(sort => sort.Add(field => field.UserName))\n            .Create(create => create.Action(\"AddUserToRole\", ControllerName, new { id = \"#= RoleId #\" }))\n            .Read(read => read.Action(\"UsersInRole\", ControllerName, new { id = \"#= RoleId #\" }))\n            .Destroy(destroy => destroy.Action(\"DeleteUserFromRole\", ControllerName, new { id = \"#= RoleId #\" }));\n        })\n        .ToClientTemplate())\n</script>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Settings/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Settings.Views.SettingsAdministrationIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"Settings\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Setting.SettingAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(col => col.Name);\n            columns.Bound(col => col.Value);\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\").Edit(\"onEdit\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.Name);\n            })\n        .Sort(sort => sort.Add(x => x.Name).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n\n    function onEdit(e) {\n        if (e.model.isNew() == false) {\n            $(e.container).find('input[name=\"Name\"]').attr(\"readonly\", true);\n        }\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/Date.cshtml",
    "content": "﻿@model DateTime?\n\n@Html.Kendo().DatePickerFor(m => m).HtmlAttributes(new { style = \"width: 100%; height: 30px;\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/DateAndTime.cshtml",
    "content": "﻿@model DateTime?\n\n@Html.Kendo().DateTimePickerFor(m => m).HtmlAttributes(new { style = \"width: 100%; height: 30px;\" })\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/DisabledCheckbox.cshtml",
    "content": "﻿@model bool\n\n@Html.CheckBoxFor(m => m, new { disabled = \"disabled\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/DropDownList.cshtml",
    "content": "﻿@model int\n\n@(Html.Kendo()\n    .DropDownListFor(m => m)\n    .BindTo((IEnumerable<SelectListItem>)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName(\"\") + \"Data\"])\n    .OptionLabel(\"Изберете категория\")\n    .HtmlAttributes(new { style = \"width: 100%;\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/Enum.cshtml",
    "content": "﻿@model Enum\n\n@Html.EnumDropDownListFor(m => m, new { @class = \"form-control\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/HtmlContent.cshtml",
    "content": "﻿@model string\n\n@Html.Kendo().EditorFor(m => m)\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/Integer.cshtml",
    "content": "﻿@model int?\n\n@(Html.Kendo()\n    .NumericTextBoxFor(m => m)\n    .Spinners(true)\n    .Min(int.MinValue)\n    .Max(int.MaxValue)\n    .Step(1)\n    .Format(\"#\")\n    .HtmlAttributes(new { style = \"width: 100%; height: 30px;\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/MultiLineText.cshtml",
    "content": "﻿@model string\n\n@Html.TextAreaFor(m => m, new { @class = \"form-control\", rows = 10 })\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/NonEditable.cshtml",
    "content": "﻿@model object\n\n@Html.TextBoxFor(m => m, new { disabled = \"disabled\", @class = \"form-control\" })\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/PositiveInteger.cshtml",
    "content": "﻿@model int?\n\n@(Html.Kendo()\n    .NumericTextBoxFor(m => m)\n    .Spinners(true)\n    .Min(0)\n    .Max(int.MaxValue)\n    .Step(1)\n    .Format(\"#\")\n    .HtmlAttributes(new { style = \"width: 100%; height: 30px;\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/EditorTemplates/SingleLineText.cshtml",
    "content": "﻿@model string\n\n@Html.TextBoxFor(m => m, new { @class = \"form-control\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/_AdministrationLayout.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section styles {\n    @RenderSection(\"styles\", required: false)\n}\n\n@RenderBody()\n\n@section scripts {\n    @RenderSection(\"scripts\", required: false)\n    <script src=\"~/Scripts/Administration/administration-global.js\"></script>\n\n    <script type=\"text/x-kendo-template\" id=\"model-state-errors-template\">\n        # if (errors.length) { #\n            <ul>\n                # for (var i = 0; i < errors.length; ++i) { #\n                <li>#= errors[i] #</li>\n                # } #\n            </ul>\n        # } #\n    </script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/_CopyQuestionsFromContest.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Shared.Views.Partials.Partials;\n@model IEnumerable<object>\n\n<form>\n    @(Html.Kendo().ComboBox()\n    .Name(\"ContestFrom\")\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .Placeholder(Resource.Choose_contest)\n    .HtmlAttributes(new { style = \"width: 100%;\", id = \"CopyContests_\" + ViewBag.ContestId })\n    .BindTo(Model))\n    <br />\n    <input type=\"checkbox\" id=\"deleteOld_@ViewBag.ContestId\" name=\"deleteOld\" value=\"true\" />\n    <label for=\"deleteOld_@ViewBag.ContestId\">@Resource.Delete_current_questions</label>\n    <br />\n    <input class=\"k-button pull-right\" type=\"submit\" value=\"@Resource.Copy\" />\n</form>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/_ProblemResourceForm.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Shared.Views.Partials.Partials;\n@model OJS.Web.Areas.Administration.ViewModels.ProblemResource.ProblemResourceViewModel\n\n<div class=\"resourceRow container\" id=\"resource-row-@Model.Id\">\n    <br />\n    <input type=\"hidden\" id=\"Resources_@(Model.Id)__Id\" class=\"hidden-field\" name=\"Resources[@Model.Id].Id\" />\n    <div class=\"col-md-2\">\n        <label for=\"Resources_@(Model.Id)__Name\">@Resource.Name</label>\n        @Html.TextBox(\"Resources[\" + Model.Id + \"].Name\", null, new { id = \"Resources_\" + Model.Id + \"__Name\", @class = \"form-control full-editor required-resource-field\" })\n        @Html.ValidationMessage(\"Resources[\" + Model.Id + \"].Name\")\n    </div>\n    <div class=\"col-md-2\">\n        <label for=\"Resources_@(Model.Id)__Type\">@Resource.Type</label>\n        @(Html.Kendo()\n        .DropDownList()\n        .Name(\"Resources[\" + Model.Id + \"].Type\")\n        .BindTo(Model.AllTypes)\n        .Events(ev => ev.Change(\"onResourceTypeSelect\"))\n        .HtmlAttributes(new { id = \"Resources_\" + Model.Id + \"__Type\", @class = \"full-kendo-editor\", modelid = Model.Id }))\n    </div>\n    <div class=\"col-md-2\">\n        <div class=\"pull-right\" data-type=\"resource-content\">\n            <div><strong>@Resource.File</strong></div>\n            <div id=\"file-button-@Model.Id\" data-file-upload-button=\"true\" data-id=\"@Model.Id\" class=\"btn btn-sm btn-primary\" onclick=\"startUploadForm(this)\">@Resource.Choose_resource</div>\n            <div class=\"hidden-file-upload\">\n                <input type=\"file\" class=\"required-resource-field\" name=\"Resources[@Model.Id].File\" id=\"Resources_@(Model.Id)__File\" data-id=\"@Model.Id\" onchange=\"selectedFile(this)\" />\n            </div>\n        </div>\n        @Html.ValidationMessage(\"Resources[\" + Model.Id + \"].File\", new { @class = \"pull-right\" })\n    </div>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Shared/_QuickContestsGrid.cshtml",
    "content": "﻿@using OJS.Web.Areas.Administration.ViewModels.Contest\n@using Resource = Resources.Areas.Administration.Shared.Views.Partials.Partials;\n@model IEnumerable<ShortContestAdministrationViewModel>\n\n@(Html.Kendo()\n        .Grid(Model)\n        .Name(\"future-grid\")\n        .Columns(col =>\n            {\n                col.Bound(m => m.Name);\n                col.Bound(m => m.CategoryName);\n                col.Template(@<text>\n                            <div id=\"contest_@item.Id\" class=\"btn btn-sm btn-primary\" data-id=\"@item.Id\" data-clickable=\"grid-click\">@Resource.Details</div>  \n                            </text>);\n            }\n        ))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/SubmissionTypes/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.SubmissionTypes.Views.SubmissionTypesIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"SubmissionTypes\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.SubmissionType.SubmissionTypeAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n                    columns.Bound(col => col.Id);\n                    columns.Bound(col => col.Name);\n                    columns.Bound(col => col.IsSelectedByDefault).Hidden();\n                    columns.Bound(col => col.ExecutionStrategyType);\n                    columns.Bound(col => col.CompilerType);\n                    columns.Bound(col => col.AdditionalCompilerArguments).Hidden();\n                    columns.Bound(col => col.Description).Hidden();\n                    columns.Bound(col => col.AllowBinaryFilesUpload).Hidden();\n                    columns.Bound(col => col.AllowedFileExtensions).Hidden();\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n            columns.Command(command => command.Destroy().Text(\" \")).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Create().Text(GeneralResource.Create);\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n        editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.Id);\n            })\n        .Sort(sort => sort.Add(x => x.Id).Descending())\n        .Create(create => create.Action(\"Create\", ControllerName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/Create.cshtml",
    "content": "﻿@using Resources = Resources.Areas.Administration.Submissions.Views.SubmissionsCreate;\n@model OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationViewModel\n\n@{\n    ViewBag.Title = Resources.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n@Html.Partial(\"_SubmissionForm\", Model)\n\n@section scripts{\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/Delete.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.SubmissionsDelete; \n@model OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationGridViewModel\n\n@{\n    ViewBag.Title = string.Format(\"{0} {1}\", Resource.Page_title, Model.ParticipantName);\n}\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"container\">\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ProblemName)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.ProblemName\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ParticipantName)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.ParticipantName\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.SubmissionTypeName)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.SubmissionTypeName\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Points)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.Points\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Status)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        @Model.Status\n    </div>\n    <br />\n</div>\n\n<div class=\"row\">\n    <div class=\"editor-label col-xs-1\">\n        @Html.ActionLink(Resource.Delete, \"ConfirmDelete\", new { id = Model.Id }, new { @class = \"btn btn-primary\" })\n    </div>\n    <div class=\"editor-label col-xs-1\">\n        @Html.ActionLink(Resource.Back, GlobalConstants.Index, null, new { @class = \"btn btn-primary\" })\n    </div>\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/EditorTemplates/ParticipantDropDownList.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.EditorTemplates.SubmissionsEditorTemplates;\n@model int?\n\n@(Html.Kendo()\n    .ComboBoxFor(m => m)\n    .Name(\"ParticipantId\")\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .Filter(FilterType.Contains)\n    .MinLength(1)\n    .Placeholder(Resource.Choose_participant)\n    .CascadeFrom(\"ProblemId\")\n    .Enable(false)\n    .Events(ev=> ev.Cascade(@<text> function () {\n            var element = $('#ParticipantId');\n\n            var comboBox = element.data('kendoComboBox');\n            var value = element.attr('value');\n            \n            if (value != null)\n            {\n                comboBox.dataSource.fetch(function () {\n                    comboBox.dataSource.read();\n\n                    comboBox.select(function (dataItem) {\n                        return dataItem.Value === value;\n                    });\n                });\n            }\n        }</text>))\n    .DataSource(data =>\n    {\n        data.ServerFiltering(true)\n            .Read(read =>\n            {\n                read.Action(\"GetParticipants\", \"Submissions\")\n                    .Data(@<text> function () { return { text: $('#ParticipantId').data(\"kendoComboBox\").input.val(), problem: $('#ProblemId').val() };} </text>);\n            });\n    })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/EditorTemplates/ProblemComboBox.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.EditorTemplates.SubmissionsEditorTemplates;\n@model int?\n\n@(Html.Kendo()\n    .ComboBoxFor(m => m)\n    .Name(\"ProblemId\")\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .Filter(FilterType.Contains)\n    .MinLength(1)\n    .Placeholder(Resource.Choose_problem)\n    .DataSource(data =>\n    {\n        data.ServerFiltering(true)\n            .Read(read =>\n            {\n                read.Action(\"GetProblems\", \"Submissions\");\n            });\n    })\n    .HtmlAttributes(new { style = \"width: 100%;\" }))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/EditorTemplates/SubmissionAdministrationViewModel.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.EditorTemplates.SubmissionsEditorTemplates;\n@model OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationViewModel\n\n@Html.HiddenFor(model => model.Id)\n\n<style>\n    #FileUploadSubmissionContainer {\n        display: none;\n    }\n    #CodeSubmissionContainer {\n        display: none;\n    }\n</style>\n\n@Html.HiddenFor(model => model.Id)\n@Html.HiddenFor(model => model.AllowBinaryFilesUpload)\n\n<div class=\"form-group\">\n    @Html.LabelFor(model => model.ProblemId, new { @class = \"control-label col-md-12\" })\n    <div class=\"col-md-12\">\n        @Html.EditorFor(model => model.ProblemId)\n        @Html.ValidationMessageFor(model => model.ProblemId)\n    </div>\n</div>\n\n<div class=\"form-group\">\n    @Html.LabelFor(model => model.ParticipantId, new { @class = \"control-label col-md-12\" })\n    <div class=\"col-md-12\">\n        @Html.EditorFor(model => model.ParticipantId)\n        @Html.ValidationMessageFor(model => model.ParticipantId)\n    </div>\n</div>\n\n<div class=\"form-group\">\n    @Html.LabelFor(model => model.SubmissionTypeId, new { @class = \"control-label col-md-12\" })\n    <div class=\"col-md-12\">\n        @Html.EditorFor(model => model.SubmissionTypeId, new { Model.AllowBinaryFilesUpload })\n        @Html.ValidationMessageFor(model => model.SubmissionTypeId)\n    </div>\n</div>\n\n<div id=\"FileUploadSubmissionContainer\" class=\"form-group\">\n    @if (Model.Content != null)\n    {\n        @Html.LabelFor(model => model.FileSubmission, new { @class = \"control-label col-md-12\" })\n        <div class=\"col-md-12\">\n            @Html.ActionLink(\"Свали решението\", \"GetSubmissionFile\", \"Submissions\", new { area = \"Administration\", submissionId = Model.Id }, null)\n        </div>\n    }\n        \n    @Html.Label(\"Качи ново решение\", new { @class = \"control-label col-md-12\" })\n    <div class=\"col-md-12\">\n        @(Html.Kendo().Upload()\n            .Name(\"FileSubmission\")\n            .Multiple(false)\n            .ShowFileList(true)\n            .Messages(message => message.Select(Resource.Choose_file))\n            .HtmlAttributes(new { id = \"FileSubmission\" }))\n        @Html.ValidationMessageFor(model => model.Content)\n    </div>\n    @Html.Label(\"Разрешени файлови формати: \", new { @class = \"control-label col-md-12\" })\n    <div id=\"AllowedFileExtensionsBox\" class=\"col-md-12\">\n\n    </div>\n</div>\n\n<div id=\"CodeSubmissionContainer\" class=\"form-group\">\n    @Html.LabelFor(model => model.ContentAsString, new { @class = \"control-label col-md-12\" })\n    <div class=\"col-md-12\">\n        @Html.EditorFor(model => model.ContentAsString)\n        @Html.ValidationMessageFor(model => model.Content)\n    </div>\n</div>\n\n<script>\n    function onSubmissionDataBound(e) {\n        return changeSubmissionType(e, this);\n    }\n\n    function onSubmissionTypeChange(e) {\n        return changeSubmissionType(e, this);\n    }\n\n    function changeSubmissionType(e, thisObjectFromEvent) {\n        var index = thisObjectFromEvent.selectedIndex;\n        var dataItem = thisObjectFromEvent.dataItem(index);\n        var form = $(\"#SubmissionForm\");\n        var fileUpload = $(\"#FileUploadSubmissionContainer\");\n        var codeArea = $(\"#CodeSubmissionContainer\");\n        var formAction = form.attr(\"action\");\n\n        debugger;\n        if (dataItem.AllowBinaryFilesUpload === true) {\n            form.attr(\"data-ajax\", \"false\");\n            fileUpload.show();\n            codeArea.hide();\n            $(\"#AllowedFileExtensionsBox\").html(dataItem.AllowedFileExtensions);\n        } else if (dataItem.AllowBinaryFilesUpload === false) {\n            fileUpload.hide();\n            codeArea.show();\n        }\n        else\n        {\n            fileUpload.hide();\n            codeArea.hide();\n        }\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/EditorTemplates/SubmissionTypesDropDownList.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.EditorTemplates.SubmissionsEditorTemplates;\n@model int?\n@{\n    bool? allowBinaryFilesUpload = null;\n    if (ViewData[\"AllowBinaryFilesUpload\"] != null)\n    {\n        allowBinaryFilesUpload = Convert.ToBoolean(ViewData[\"AllowBinaryFilesUpload\"]); \n    } \n}\n\n@(Html.Kendo()\n    .DropDownListFor(m => m)\n    .OptionLabel(Resource.Choose_submission_type)\n    .DataTextField(\"Text\")\n    .DataValueField(\"Value\")\n    .CascadeFrom(\"ProblemId\")\n    .Events(ev=> ev.DataBound(\"onSubmissionDataBound\").Change(\"onSubmissionTypeChange\"))\n    .DataSource(data => \n        {\n            data.ServerFiltering(true)\n                .Read(read =>\n                    {\n                        read.Action(\"GetSubmissionTypes\", \n                                    \"Submissions\",\n                                    new { allowBinaryFilesUpload })\n                                    .Data(@<text> function () { return { problemId: $('#ProblemId').val() };} </text>);\n                        });\n        })\n    .HtmlAttributes(new { style = \"width: 100%;\" })\n)"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.SubmissionsIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h1>@ViewBag.Title</h1>\n\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-10\">\n            @(Html\n            .Kendo()\n            .ComboBox()\n            .Name(\"contests\")\n            .DataTextField(\"Name\")\n            .DataValueField(\"Id\")\n            .Filter(FilterType.Contains)\n            .AutoBind(false)\n            .MinLength(3)\n            .Placeholder(Resource.Choose_or_enter_contest)\n            .Events(ev => ev.Change(\"selectContest\"))\n            .DataSource(dataSource =>\n                {\n                    dataSource\n                        .Read(read =>\n                            {\n                                read.Action(\"Contests\", \"Submissions\")\n                                    .Data(\"additionalComboBoxData\");\n                            })\n                        .ServerFiltering(true);\n                })\n            .HtmlAttributes(new { style = \"width: 100%;\" }))\n        </div>\n        <div class=\"col-md-2 text-right\">\n            @Ajax.ActionLink(Resource.Clear, \"RenderGrid\", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = \"submissions-grid\" }, new { @class = \"btn btn-primary btn-sm\" })\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"col-md-12\" id=\"submissions-grid\">\n            @Html.Partial(\"_SubmissionsGrid\")\n        </div>\n    </div>\n</div>\n\n@section scripts{\n    <script>\n        function additionalComboBoxData() {\n            return {\n                text: $(\"#contests\").data(\"kendoComboBox\").input.val()\n            }\n        }\n\n        function selectContest() {\n            var contestId = $(\"#contests\").val();\n\n            $.post('/Administration/Submissions/RenderGrid/' + contestId, function (data) {\n                $(\"#submissions-grid\").html(data);\n            });\n        }\n    </script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/Update.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.SubmissionsUpdate;\n@model OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n@Html.Partial(\"_SubmissionForm\", Model)\n\n@section scripts{\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/_SubmissionForm.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Submissions.Views.Partials.SubmissionForm;\n@model OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationViewModel\n\n@using (Html.BeginForm((string)ViewBag.SubmissionAction, \"Submissions\", FormMethod.Post, new { id = \"SubmissionForm\" }))\n{\n    @Html.AntiForgeryToken()\n\n    <div class=\"row\">\n        @Html.EditorForModel()\n    </div>\n    <div class=\"row\">\n        <div class=\"editor-label col-md-1\">\n            <button type=\"submit\" class=\"btn btn-primary\">@Resource.Save</button>\n        </div>\n        <div class=\"editor-label col-xs-1\">\n            <a href=\"/Administration/Submissions\" class=\"btn btn-primary\">@Resource.Back</a>\n        </div>\n    </div>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Submissions/_SubmissionsGrid.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Submissions.Views.Partials.SubmissionsGrid;\n@model int?\n@{\n    const string ControllerName = \"Submissions\";\n}\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.Submission.SubmissionAdministrationGridViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(model => model.Id);\n            columns.Bound(model => model.ParticipantName);\n            columns.Bound(model => model.ProblemName).ClientTemplate(\"<a href='\" + Url.Action(\"Details\", \"Problems\") + \"/#= ProblemId #'>#= ProblemName #</a>\");\n            columns.Bound(model => model.SubmissionTypeName);\n            columns.Bound(model => model.Status);\n            columns.Bound(model => model.Points);\n            columns.Bound(model => model.CreatedOn).Hidden();\n            columns.Bound(model => model.ModifiedOn).Hidden();\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext'>{1}</a>\", Url.Action(\"Update\", ControllerName), GeneralResource.Change)).Title(GeneralResource.Change);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext'>{1}</a>\", Url.Action(\"Delete\", ControllerName), GeneralResource.Delete)).Title(GeneralResource.Delete);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext' target='_blank'>{1}</a>\", Url.Action(\"View\", \"Submissions\", new { Area = \"Contests\" }), Resource.Details)).Title(Resource.Details);\n            columns.Template(@<text></text>).ClientTemplate(string.Format(\"<a href='{0}/#= Id #' class='k-button k-button-icontext' target='_blank'>{1}</a>\", Url.Action(\"Retest\", ControllerName), Resource.Retest)).Title(Resource.Retest);\n        })\n        .ToolBar(toolbar =>\n        {\n            toolbar.Custom().Text(GeneralResource.Create).Action(\"Create\", ControllerName);\n            toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n            toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n        })\n        .Editable(editable =>\n        {\n            editable.DisplayDeleteConfirmation(GeneralResource.Delete_prompt);\n        })\n        .ColumnMenu()\n        .Events(e => e.DataBound(\"onDataBound\"))\n        .Pageable(x => x.Refresh(true))\n        .Sortable(x => x.Enabled(true).AllowUnsort(false))\n        .Filterable(x => x.Enabled(true))\n        .Reorderable(x => x.Columns(true))\n        .Resizable(x => x.Columns(true))\n        .DataSource(datasource => datasource\n            .Ajax()\n            .ServerOperation(true)\n            .Model(model =>\n                {\n                    model.Id(m => m.Id);\n                })\n            .Sort(sort => sort.Add(x => x.CreatedOn).Descending())\n            .Read(read => read.Action(\"ReadSubmissions\", ControllerName, new { id = Model }))\n            .Destroy(destroy => destroy.Action(\"Destroy\", ControllerName))\n            .Events(ev => ev.Error(\"validateModelStateErrors\"))\n        )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/Create.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsCreate;\n@model OJS.Web.Areas.Administration.ViewModels.Test.TestViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n<h3>@Model.ProblemName</h3>\n<div class=\"container\">\n    @using (Html.BeginForm())\n    {\n        @Html.AntiForgeryToken()\n\n        @Html.HiddenFor(m => m.ProblemId)\n        @Html.HiddenFor(m => m.ProblemName)\n\n        <div class=\"editor-label\">\n            @Html.LabelFor(m => m.InputFull)\n        </div>\n        <div class=\"editor-field row\">\n            @Html.TextAreaFor(m => m.InputFull, new { rows = 10, @class = \"col-md-12 form-control\" })\n            @Html.ValidationMessageFor(m => m.InputFull)\n        </div>\n        <br />\n        <div class=\"editor-label\">\n            @Html.LabelFor(m => m.OutputFull)\n        </div>\n        <div class=\"editor-field row\">\n            @Html.TextAreaFor(m => m.OutputFull, new { rows = 10, @class = \"col-md-12 form-control\" })\n            @Html.ValidationMessageFor(m => m.OutputFull)\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label\">\n                @Html.CheckBoxFor(m => m.IsTrialTest)\n                @Html.LabelFor(m => m.IsTrialTest)\n            </div>\n            <div class=\"editor-label\">\n                @Html.LabelFor(m => m.OrderBy)\n            </div>\n            <div class=\"editor-label\">\n                @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false))\n                @Html.ValidationMessageFor(m => m.OrderBy)\n            </div>\n            <br />\n            <button type=\"submit\" class=\"btn btn-primary\">@Resource.Create</button>\n            <a href=\"/Administration/Tests/Problem/@Model.ProblemId\" class=\"btn btn-primary\">@Resource.Back</a>\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/Delete.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsDelete;\n@model OJS.Web.Areas.Administration.ViewModels.Test.TestViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n<h2>@ViewBag.Title</h2>\n<div class=\"container\">\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Input)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        <pre>@(Model.InputFull.Length > 200 ? Model.InputFull.Substring(0,200) + \"...\" : Model.InputFull)</pre>\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Output)\n    </div>\n    <div class=\"panel-body news-content editor-field\">\n        <pre>@(Model.OutputFull.Length > 200 ? Model.OutputFull.Substring(0, 200) + \"...\" : Model.OutputFull)</pre>\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        <strong class=\"text-white\">@Model.TrialTestName @Resource.Test</strong>\n    </div>\n    <br />\n    <a href=\"/Administration/Tests/ConfirmDelete/@Model.Id\" class=\"btn btn-primary\">@Resource.Delete</a>\n    <a href=\"/Administration/Tests/Problem/@Model.ProblemId\" class=\"btn btn-primary\">@Resource.Back</a>\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/DeleteAll.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsDeleteAll;\n@model OJS.Web.Areas.Administration.ViewModels.Problem.ProblemViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@Model.Name</h2>\n<h3>@ViewBag.Title</h3>\n\n<p>\n    @Resource.Delete_confirmation @Model.Name?\n</p>\n<a href=\"/Administration/Tests/ConfirmDeleteAll/@Model.Id\" class=\"btn btn-primary\">@Resource.Confirm</a>\n<a href=\"/Administration/Tests/Problem/@Model.Id\" class=\"btn btn-primary\">@Resource.Back</a>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/Details.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsDetails;\n@model OJS.Web.Areas.Administration.ViewModels.Test.TestViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n<div class=\"container\">\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.ProblemName)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.ProblemName\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Input)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        <pre id=\"test-input\">@(Model.InputFull.Length > 200 ? Model.InputFull.Substring(0, 200) + \"...\" : Model.InputFull)</pre>\n\n        @if (Model.InputFull.Length > 200)\n        {\n            @Ajax.ActionLink(Resource.See_more, \"FullInput\", new { id = @Model.Id }, new AjaxOptions { HttpMethod = \"Get\", UpdateTargetId = \"test-input\", InsertionMode = InsertionMode.Replace, OnComplete = \"removeInputAjaxLink\" }, new { id = \"ajax-input-link\" })\n        }\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.Output)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        <pre id =\"test-output\">@(Model.OutputFull.Length > 200 ? Model.OutputFull.Substring(0, 200) + \"...\" : Model.OutputFull)</pre>\n        \n        @if (Model.OutputFull.Length > 200)\n        {\n            @Ajax.ActionLink(Resource.See_more, \"FullOutput\", new { id = @Model.Id }, new AjaxOptions { HttpMethod = \"Get\", UpdateTargetId = \"test-output\", InsertionMode = InsertionMode.Replace, OnComplete = \"removeOutputAjaxLink\" }, new { id = \"ajax-output-link\" })\n        }\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.IsTrialTest)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.IsTrialTest\n    </div>\n    <br />\n    <div class=\"editor-label\">\n        @Html.LabelFor(m => m.OrderBy)\n    </div>\n    <div class=\"panel-body news-content editor-label\">\n        @Model.OrderBy\n    </div>\n    <br />    \n    <div id=\"test-runs-grid\">\n\n    </div>\n    @Ajax.ActionLink(Resource.Show_executions, \"GetTestRuns\", new { id = Model.Id }, new AjaxOptions { HttpMethod = \"Get\", OnComplete = \"initilizeTestRuns\" }, new { id = \"test-runs-button\", @class = \"btn btn-primary\" })\n    <br />    \n    <br />  \n    <a href=\"/Administration/Tests/Edit/@Model.Id\" class=\"btn btn-primary\">@Resource.Edit</a>\n    <a href=\"/Administration/Tests/Problem/@Model.ProblemId\" class=\"btn btn-primary\">@Resource.Back</a>\n</div>\n\n@section scripts {\n    <script src=\"~/Scripts/Administration/Tests/tests-details.js\"></script>    \n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/Edit.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsEdit;\n@model OJS.Web.Areas.Administration.ViewModels.Test.TestViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n<h3>@Model.ProblemName</h3>\n<div class=\"container\">\n    @using (Html.BeginForm())\n    {\n        @Html.AntiForgeryToken()\n        \n        @Html.HiddenFor(m => m.ProblemId)\n        @Html.HiddenFor(m => m.ProblemName)\n        \n        <div class=\"editor-label\">\n            @Html.LabelFor(m => m.InputFull)\n        </div>\n        <div class=\"editor-field row\">\n            @Html.TextAreaFor(m => m.InputFull, new { rows = 10, @class = \"col-md-12 form-control\" })\n            @Html.ValidationMessageFor(m => m.InputFull)\n        </div>\n        <br />\n        <div class=\"editor-label\">\n            @Html.LabelFor(m => m.OutputFull)\n        </div>\n        <div class=\"editor-field row\">\n            @Html.TextAreaFor(m => m.OutputFull, new { rows = 10, @class = \"col-md-12 form-control\" })\n            @Html.ValidationMessageFor(m => m.OutputFull)\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"editor-label\">\n                @Html.CheckBoxFor(m => m.IsTrialTest)\n                @Html.LabelFor(m => m.IsTrialTest)\n            </div>\n            <div class=\"editor-label\">\n                @Html.LabelFor(m => m.OrderBy)\n            </div>\n            <div class=\"editor-label\">\n                @(Html.Kendo()\n                    .NumericTextBoxFor(m => m.OrderBy)\n                    .Format(\"#\")\n                    .Step(1)\n                    .Spinners(false))\n                @Html.ValidationMessageFor(m => m.OrderBy)\n            </div>\n            <br />\n            <button type=\"submit\" class=\"btn btn-primary\">@Resource.Edit</button>\n            <a href=\"/Administration/Tests/Problem/@Model.ProblemId\" class=\"btn btn-primary\">@Resource.Back</a>\n        </div>\n    }\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Tests/Index.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Administration.Tests.Views.TestsIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<h2>@ViewBag.Title</h2>\n<div class=\"container\">\n    <div class=\"col-md-6\">\n        <div>\n            <label for=\"search\">@Resource.Search_by_problem </label>\n        </div>\n        <div>\n            @(@Html.Kendo().AutoComplete()\n            .Name(\"search\")\n            .Placeholder(Resource.Enter_problem)\n            .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n            .DataTextField(\"Name\")\n            .MinLength(3)\n            .DataSource(source =>\n            {\n                source\n                    .Read(read =>\n                    {\n                        read.Action(\"GetSearchedProblems\", \"Tests\")\n                            .Data(\"onAdditionalData\");\n                    })\n                    .ServerFiltering(true);\n            }\n            )\n            .Events(e => \n                {\n                    e.Select(\"onSearchSelect\");\n                }))\n        </div>\n    </div>\n</div>\n<div class=\"container\">\n    <div class=\"col-md-6\">\n\n        <div>\n            <div>\n                <label for=\"categories\">@Resource.Category_label </label>\n            </div>\n            <div>\n                @(Html.Kendo().DropDownList()\n                .Name(\"categories\")\n                .OptionLabel(Resource.Choose_category)\n                .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n                .DataTextField(\"Name\")\n                .DataValueField(\"Id\")\n                .DataSource(source =>\n                {\n                    source.Read(read =>\n                    {\n                        read.Action(\"GetCascadeCategories\", \"Tests\");\n                    });\n                }))\n            </div>\n        </div>\n        <div>\n            <label for=\"contests\">@Resource.Contest_label </label>\n        </div>\n        <div>\n            @(Html.Kendo().DropDownList()\n            .Name(\"contests\")\n            .OptionLabel(Resource.Choose_contest)\n            .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n            .DataTextField(\"Name\")\n            .DataValueField(\"Id\")\n            .DataSource(source =>\n            {\n                source.Read(read =>\n                {\n                    read.Action(\"GetCascadeContests\", \"Tests\")\n                        .Data(\"filterContests\");\n                })\n                .ServerFiltering(true);\n            })\n            .Enable(false)\n            .AutoBind(false)\n            .CascadeFrom(\"categories\")\n            )\n        </div>\n        <div>\n            <label for=\"problems\">@Resource.Problem_label </label>\n        </div>\n        <div>\n            @(Html.Kendo().DropDownList()\n            .Name(\"problems\")\n            .OptionLabel(Resource.Choose_problem)\n            .HtmlAttributes(new { @class = \"test-file-dropdown\" })\n            .DataTextField(\"Name\")\n            .DataValueField(\"Id\")\n            .DataSource(source =>\n            {\n                source.Read(read =>\n                {\n                    read.Action(\"GetCascadeProblems\", \"Tests\")\n                        .Data(\"filterProblems\");\n                })\n                .ServerFiltering(true);\n            })\n            .Enable(false)\n            .AutoBind(false)\n            .CascadeFrom(\"contests\")\n            .Events(e => e.Change(\"onProblemSelect\"))\n            )\n        </div>\n    </div>\n    <div id=\"controls\">\n        @using (Html.BeginForm(\"Import\", \"Tests\", null, FormMethod.Post, new { enctype = \"multipart/form-data\" }))\n        {\n            @Html.AntiForgeryToken()\n            \n            <div class=\"col-md-6 pull-right\">\n                <div class=\"col-md-7 pull-right\">\n                    @if (ViewBag.ProblemId != null)\n                    {\n                        <input id=\"problemId\" name=\"problemId\" type=\"text\" value=\"@ViewBag.ProblemId\" />\n                    }\n                    else\n                    {\n                        <input id=\"problemId\" name=\"problemId\" type=\"text\" />\n                    }\n                    <div>\n                        @Html.CheckBox(\"retestTask\", false)\n                        @Html.Label(Resource.Retest_problem, new { @for = \"retestTask\", style = \"display: inline-block; \" })\n                    </div>\n                    <div>\n                        @Html.CheckBox(\"deleteOldFiles\", true)\n                        @Html.Label(Resource.Delete_old_tests, new { @for = \"deleteOldFiles\", style = \"display: inline-block; \" })\n                    </div>\n                    <p>\n                        @Html.Kendo().Upload().Name(\"file\").Multiple(false).HtmlAttributes(new { @class = \"kendo-upload\" })\n                        <input class=\"k-button\" type=\"submit\" value=\"@Resource.Import\" />\n                    </p>\n                </div>\n            </div>\n        }\n    </div>\n</div>\n<br />\n<div class=\"jumbotron text-center text-white\" id=\"status\">@Resource.Tests_loading</div>\n<div id=\"grid\"></div>\n\n@section scripts{\n    <script src=\"~/Scripts/Administration/Tests/tests-index.js\"></script>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Users/Index.cshtml",
    "content": "﻿@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n@using Resource = Resources.Areas.Administration.Users.Views.UsersIndex;\n@{\n    ViewBag.Title = Resource.Page_title;\n    const string ControllerName = \"Users\";\n}\n<h1>@ViewBag.Title</h1>\n\n@(Html.Kendo().Grid<OJS.Web.Areas.Administration.ViewModels.User.UserProfileAdministrationViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n        {\n            columns.Bound(model => model.UserName);\n            columns.Bound(model => model.Email);\n            columns.Bound(model => model.IsGhostUser).Hidden();\n            columns.Bound(model => model.FirstName);\n            columns.Bound(model => model.LastName);\n            columns.Bound(model => model.City);\n            columns.Bound(model => model.EducationalInstitution).Hidden();\n            columns.Bound(model => model.FacultyNumber).Hidden();\n            columns.Bound(model => model.DateOfBirth);\n            columns.Bound(model => model.Company).Hidden();\n            columns.Bound(model => model.JobTitle).Hidden();\n            columns.Bound(model => model.Age).Filterable(false);\n            columns.Bound(model => model.CreatedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Bound(model => model.ModifiedOn).Format(\"{0:dd/MM/yyyy HH:mm}\").Hidden();\n            columns.Command(command => command.Edit().Text(\" \").UpdateText(GeneralResource.Change).CancelText(GeneralResource.Cancel)).Width(80);\n        })\n    .ToolBar(toolbar =>\n    {\n        toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n            {\n                model.Id(m => m.Id);\n            })\n        .Sort(sort => sort.Add(x => x.UserName))\n        .Read(read => read.Action(\"Read\", ControllerName))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n<script type=\"text/javascript\">\n    function onDataBound(e) {\n        CreateExportToExcelButton();\n    }\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <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\">\n      <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\" />\n      <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\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"OJS.Common\"/>\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Administration/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Areas/Administration/Views/Shared/_AdministrationLayout.cshtml\";\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Api/ApiAreaRegistration.cs",
    "content": "﻿namespace OJS.Web.Areas.Api\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n\n    public class ApiAreaRegistration : AreaRegistration\n    {\n        public override string AreaName => \"Api\";\n\n        public override void RegisterArea(AreaRegistrationContext context)\n        {\n            context.MapRoute(\n                \"Api_default\",\n                \"Api/{controller}/{action}/{id}\",\n                new { action = GlobalConstants.Index, id = UrlParameter.Optional });\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Api/Controllers/ApiController.cs",
    "content": "﻿namespace OJS.Web.Areas.Api.Controllers\n{\n    using System.Web.Mvc;\n\n    public class ApiController : Controller\n    {\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Api/Controllers/ResultsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Api.Controllers\n{\n    using System.Globalization;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Areas.Api.Models;\n\n    public class ResultsController : ApiController\n    {\n        private readonly IOjsData data;\n\n        public ResultsController(IOjsData data)\n        {\n            this.data = data;\n        }\n\n        // TODO: Extract method from these two methods since 90% of their code is the same\n        public ContentResult GetPointsByAnswer(string apiKey, int? contestId, string answer)\n        {\n            if (string.IsNullOrWhiteSpace(apiKey) || string.IsNullOrWhiteSpace(answer) || !contestId.HasValue)\n            {\n                return this.Content(\"ERROR: Invalid arguments\");\n            }\n\n            var user = this.data.Users.GetById(apiKey);\n            if (user == null || user.Roles.All(x => x.Role.Name != GlobalConstants.AdministratorRoleName))\n            {\n                return this.Content(\"ERROR: Invalid API key\");\n            }\n\n            var participants =\n                this.data.Participants.All()\n                    .Where(\n                        x =>\n                        x.IsOfficial && x.ContestId == contestId.Value\n                        && (x.Answers.Any(a => a.Answer == answer)\n                            || this.data.Context.ParticipantAnswers.Any(\n                                a => a.Participant.UserId == x.UserId && a.Participant.IsOfficial && a.Answer == answer)));\n\n            var participant = participants.FirstOrDefault();\n            if (participant == null)\n            {\n                return this.Content(\"ERROR: No participants found\");\n            }\n\n            if (participants.Count() > 1)\n            {\n                return this.Content(\"ERROR: More than one participants found\");\n            }\n\n            var points =\n                participant.Contest.Problems.Select(\n                    problem =>\n                    problem.Submissions.Where(z => z.ParticipantId == participant.Id)\n                        .OrderByDescending(z => z.Points)\n                        .Select(z => z.Points)\n                        .FirstOrDefault()).Sum();\n\n            return this.Content(points.ToString(CultureInfo.InvariantCulture));\n        }\n\n        public ContentResult GetPointsByEmail(string apiKey, int? contestId, string email)\n        {\n            if (string.IsNullOrWhiteSpace(apiKey) || string.IsNullOrWhiteSpace(email) || !contestId.HasValue)\n            {\n                return this.Content(\"ERROR: Invalid arguments\");\n            }\n\n            var user = this.data.Users.GetById(apiKey);\n            if (user == null || user.Roles.All(x => x.Role.Name != GlobalConstants.AdministratorRoleName))\n            {\n                return this.Content(\"ERROR: Invalid API key\");\n            }\n\n            var participants = this.data.Participants.All().Where(\n                x => x.IsOfficial && x.ContestId == contestId.Value && x.User.Email == email);\n\n            var participant = participants.FirstOrDefault();\n            if (participant == null)\n            {\n                return this.Content(\"ERROR: No participants found\");\n            }\n\n            if (participants.Count() > 1)\n            {\n                return this.Content(\"ERROR: More than one participants found\");\n            }\n\n            var points =\n                participant.Contest.Problems.Select(\n                    problem =>\n                    problem.Submissions.Where(z => z.ParticipantId == participant.Id)\n                        .OrderByDescending(z => z.Points)\n                        .Select(z => z.Points)\n                        .FirstOrDefault()).Sum();\n\n            return this.Content(points.ToString(CultureInfo.InvariantCulture));\n        }\n\n        public JsonResult GetAllResultsForContest(string apiKey, int? contestId)\n        {\n            if (string.IsNullOrWhiteSpace(apiKey) || !contestId.HasValue)\n            {\n                return this.Json(new ErrorMessageViewModel(\"Invalid arguments\"), JsonRequestBehavior.AllowGet);\n            }\n\n            var user = this.data.Users.GetById(apiKey);\n            if (user == null || user.Roles.All(x => x.Role.Name != GlobalConstants.AdministratorRoleName))\n            {\n                return this.Json(new ErrorMessageViewModel(\"Invalid API key\"), JsonRequestBehavior.AllowGet);\n            }\n\n            var participants =\n                this.data.Participants.All()\n                    .Where(x => x.IsOfficial && x.ContestId == contestId.Value)\n                    .Select(\n                        participant =>\n                        new\n                            {\n                                participant.User.UserName,\n                                participant.User.Email,\n                                Answer = participant.Answers.Select(answer => answer.Answer).FirstOrDefault(),\n                                Points = participant.Contest.Problems.Select(\n                                    problem =>\n                                    problem.Submissions.Where(z => z.ParticipantId == participant.Id)\n                                        .OrderByDescending(z => z.Points)\n                                        .Select(z => z.Points)\n                                        .FirstOrDefault()).Sum()\n                            })\n                    .OrderByDescending(x => x.Points)\n                    .ToList();\n\n            return this.Json(participants, JsonRequestBehavior.AllowGet);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Api/Models/ErrorMessageViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Api.Models\n{\n    public class ErrorMessageViewModel\n    {\n        public ErrorMessageViewModel(string errorMessage)\n        {\n            this.ErrorMessage = errorMessage;\n        }\n\n        public string ErrorMessage { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ContestsAreaRegistration.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Web.Areas.Contests.Controllers;\n\n    public class ContestsAreaRegistration : AreaRegistration\n    {\n        public override string AreaName => \"Contests\";\n\n        public override void RegisterArea(AreaRegistrationContext context)\n        {\n            context.MapRoute(\n                \"Contests_list\",\n                \"Contests\",\n                new { controller = \"List\", action = GlobalConstants.Index },\n                new[] { \"OJS.Web.Areas.Contests.Controllers\" });\n\n            context.MapRoute(\n                \"Contests_by_submission_type\",\n                \"Contests/BySubmissionType/{id}/{submissionTypeName}\",\n                new { controller = \"List\", action = \"BySubmissionType\", id = UrlParameter.Optional, submissionTypeName = UrlParameter.Optional });\n\n            context.MapRoute(\n                \"Contests_by_category\",\n                \"Contests/List/ByCategory/{id}/{category}\",\n                new { controller = \"List\", action = \"ByCategory\", id = UrlParameter.Optional, category = UrlParameter.Optional });\n\n            context.MapRoute(\n                \"Contests_details\",\n                \"Contests/{id}/{name}\",\n                new { controller = \"Contests\", action = \"Details\", id = UrlParameter.Optional, name = UrlParameter.Optional },\n                new { id = \"[0-9]+\" },\n                new[] { \"OJS.Web.Areas.Contests.Controllers\" });\n\n            context.MapRoute(\n               \"Contests_results_compete\",\n               string.Format(\"Contests/{0}/Results/{{action}}/{{id}}\", CompeteController.CompeteUrl),\n               new { controller = \"Results\", action = \"Simple\", official = true, id = UrlParameter.Optional });\n\n            context.MapRoute(\n               \"Contests_results_practice\",\n               string.Format(\"Contests/{0}/Results/{{action}}/{{id}}\", CompeteController.PracticeUrl),\n               new { controller = \"Results\", action = \"Simple\", official = false, id = UrlParameter.Optional });\n\n            context.MapRoute(\n               \"Contests_compete\",\n               string.Format(\"Contests/{0}/{{action}}/{{id}}\", CompeteController.CompeteUrl),\n               new { controller = \"Compete\", action = GlobalConstants.Index, official = true, id = UrlParameter.Optional });\n\n            context.MapRoute(\n               \"Contests_practice\",\n               string.Format(\"Contests/{0}/{{action}}/{{id}}\", CompeteController.PracticeUrl),\n               new { controller = \"Compete\", action = GlobalConstants.Index, official = false, id = UrlParameter.Optional });\n\n            context.MapRoute(\n               \"Contests_default\",\n               \"Contests/{controller}/{action}/{id}\",\n               new { id = UrlParameter.Optional });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/CompeteController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System.Data.Entity;\n    using System.Globalization;\n    using System.Linq;\n    using System.Net;\n    using System.Text.RegularExpressions;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Contests.Helpers;\n    using OJS.Web.Areas.Contests.Models;\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n    using OJS.Web.Areas.Contests.ViewModels.Participants;\n    using OJS.Web.Areas.Contests.ViewModels.Results;\n    using OJS.Web.Areas.Contests.ViewModels.Submissions;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Contests;\n\n    public class CompeteController : BaseController\n    {\n        public const string CompeteUrl = \"Compete\";\n        public const string PracticeUrl = \"Practice\";\n\n        public CompeteController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public CompeteController(IOjsData data, UserProfile userProfile)\n            : base(data, userProfile)\n        {\n        }\n\n        /// <summary>\n        /// Validates if a contest is correctly found. If the user wants to practice or compete in the contest\n        /// checks if the contest can be practiced or competed.\n        /// </summary>\n        /// <param name=\"contest\">Contest to validate.</param>\n        /// <param name=\"official\">A flag checking if the contest will be practiced or competed</param>\n        [NonAction]\n        public static void ValidateContest(Contest contest, bool official)\n        {\n            if (contest == null || contest.IsDeleted || !contest.IsVisible)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ContestsGeneral.Contest_not_found);\n            }\n\n            if (official && !contest.CanBeCompeted)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Contest_cannot_be_competed);\n            }\n\n            if (!official && !contest.CanBePracticed)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Contest_cannot_be_practiced);\n            }\n        }\n\n        /// <summary>\n        /// Validates if the selected submission type from the participant is allowed in the current contest\n        /// </summary>\n        /// <param name=\"submissionTypeId\">The id of the submission type selected by the participant</param>\n        /// <param name=\"contest\">The contest in which the user participate</param>\n        [NonAction]\n        public static void ValidateSubmissionType(int submissionTypeId, Contest contest)\n        {\n            if (contest.SubmissionTypes.All(submissionType => submissionType.Id != submissionTypeId))\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Submission_type_not_found);\n            }\n        }\n\n        /// <summary>\n        /// Displays user compete information: tasks, send source form, ranking, submissions, ranking, etc.\n        /// Users only.\n        /// </summary>\n        [Authorize]\n        public ActionResult Index(int id, bool official)\n        {\n            var contest = this.Data.Contests.GetById(id);\n            ValidateContest(contest, official);\n\n            var participantFound = this.Data.Participants.Any(id, this.UserProfile.Id, official);\n\n            if (!participantFound)\n            {\n                if (!contest.ShouldShowRegistrationForm(official))\n                {\n                    this.Data.Participants.Add(new Participant(id, this.UserProfile.Id, official));\n                    this.Data.SaveChanges();\n                }\n                else\n                {\n                    // Participant not found, the contest requires password or the contest has questions\n                    // to be answered before registration. Redirect to the registration page.\n                    // The registration page will take care of all security checks.\n                    return this.RedirectToAction(\"Register\", new { id, official });\n                }\n            }\n\n            var participant = this.Data.Participants.GetWithContest(id, this.UserProfile.Id, official);\n            var participantViewModel = new ParticipantViewModel(participant, official);\n\n            this.ViewBag.CompeteType = official ? CompeteUrl : PracticeUrl;\n\n            return this.View(participantViewModel);\n        }\n\n        /// <summary>\n        /// Displays form for contest registration.\n        /// Users only.\n        /// </summary>\n        [HttpGet]\n        [Authorize]\n        public ActionResult Register(int id, bool official)\n        {\n            var participantFound = this.Data.Participants.Any(id, this.UserProfile.Id, official);\n            if (participantFound)\n            {\n                // Participant exists. Redirect to index page.\n                return this.RedirectToAction(GlobalConstants.Index, new { id, official });\n            }\n\n            var contest = this.Data.Contests.All().Include(x => x.Questions).FirstOrDefault(x => x.Id == id);\n\n            ValidateContest(contest, official);\n\n            if (contest.ShouldShowRegistrationForm(official))\n            {\n                var contestRegistrationModel = new ContestRegistrationViewModel(contest, official);\n                return this.View(contestRegistrationModel);\n            }\n\n            var participant = new Participant(id, this.UserProfile.Id, official);\n            this.Data.Participants.Add(participant);\n            this.Data.SaveChanges();\n\n            return this.RedirectToAction(GlobalConstants.Index, new { id, official });\n        }\n\n        /// <summary>\n        /// Accepts form input for contest registration.\n        /// Users only.\n        /// </summary>\n        //// TODO: Refactor\n        [HttpPost]\n        [Authorize]\n        public ActionResult Register(bool official, ContestRegistrationModel registrationData)\n        {\n            // check if the user has already registered for participation and redirect him to the correct action\n            var participantFound = this.Data.Participants.Any(registrationData.ContestId, this.UserProfile.Id, official);\n\n            if (participantFound)\n            {\n                return this.RedirectToAction(GlobalConstants.Index, new { id = registrationData.ContestId, official });\n            }\n\n            var contest = this.Data.Contests.GetById(registrationData.ContestId);\n            ValidateContest(contest, official);\n\n            if (official && contest.HasContestPassword)\n            {\n                if (string.IsNullOrEmpty(registrationData.Password))\n                {\n                    this.ModelState.AddModelError(\"Password\", Resource.Views.CompeteRegister.Empty_Password);\n                }\n                else if (contest.ContestPassword != registrationData.Password)\n                {\n                    this.ModelState.AddModelError(\"Password\", Resource.Views.CompeteRegister.Incorrect_password);\n                }\n            }\n\n            if (!official && contest.HasPracticePassword)\n            {\n                if (string.IsNullOrEmpty(registrationData.Password))\n                {\n                    this.ModelState.AddModelError(\"Password\", Resource.Views.CompeteRegister.Empty_Password);\n                }\n                else if (contest.PracticePassword != registrationData.Password)\n                {\n                    this.ModelState.AddModelError(\"Password\", Resource.Views.CompeteRegister.Incorrect_password);\n                }\n            }\n\n            var questionsToAnswerCount = official ?\n                contest.Questions.Count(x => !x.IsDeleted && x.AskOfficialParticipants) :\n                contest.Questions.Count(x => !x.IsDeleted && x.AskPracticeParticipants);\n\n            if (questionsToAnswerCount != registrationData.Questions.Count())\n            {\n                this.ModelState.AddModelError(\"Questions\", Resource.Views.CompeteRegister.Not_all_questions_answered);\n            }\n\n            var contestQuestions = contest.Questions.Where(x => !x.IsDeleted).ToList();\n\n            var participant = new Participant(registrationData.ContestId, this.UserProfile.Id, official);\n            this.Data.Participants.Add(participant);\n            var counter = 0;\n            foreach (var question in registrationData.Questions)\n            {\n                var contestQuestion = contestQuestions.FirstOrDefault(x => x.Id == question.QuestionId);\n\n                var regularExpression = contestQuestion.RegularExpressionValidation;\n                bool correctlyAnswered = false;\n\n                if (!string.IsNullOrEmpty(regularExpression))\n                {\n                    correctlyAnswered = Regex.IsMatch(question.Answer, regularExpression);\n                }\n\n                if (contestQuestion.Type == ContestQuestionType.DropDown)\n                {\n                    int contestAnswerId;\n                    if (int.TryParse(question.Answer, out contestAnswerId) && contestQuestion.Answers.Where(x => !x.IsDeleted).Any(x => x.Id == contestAnswerId))\n                    {\n                        correctlyAnswered = true;\n                    }\n\n                    if (!correctlyAnswered)\n                    {\n                        this.ModelState.AddModelError(string.Format(\"Questions[{0}].Answer\", counter), Resource.ContestsGeneral.Invalid_selection);\n                    }\n                }\n\n                participant.Answers.Add(new ParticipantAnswer\n                                                {\n                                                    ContestQuestionId = question.QuestionId,\n                                                    Answer = question.Answer\n                                                });\n\n                counter++;\n            }\n\n            if (!this.ModelState.IsValid)\n            {\n                return this.View(new ContestRegistrationViewModel(contest, registrationData, official));\n            }\n\n            this.Data.SaveChanges();\n\n            return this.RedirectToAction(GlobalConstants.Index, new { id = registrationData.ContestId, official });\n        }\n\n        /// <summary>\n        /// Processes a participant's submission for a problem.\n        /// </summary>\n        /// <param name=\"participantSubmission\">Participant submission.</param>\n        /// <param name=\"official\">A check whether the contest is official or practice.</param>\n        /// <returns>Returns confirmation if the submission was correctly processed.</returns>\n        [HttpPost]\n        [Authorize]\n        public ActionResult Submit(SubmissionModel participantSubmission, bool official)\n        {\n            var problem = this.Data.Problems.All().FirstOrDefault(x => x.Id == participantSubmission.ProblemId);\n            if (problem == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.Problem_not_found);\n            }\n\n            var participant = this.Data.Participants.GetWithContest(problem.ContestId, this.UserProfile.Id, official);\n            if (participant == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.User_is_not_registered_for_exam);\n            }\n\n            ValidateContest(participant.Contest, official);\n            ValidateSubmissionType(participantSubmission.SubmissionTypeId, participant.Contest);\n\n            if (this.Data.Submissions.HasSubmissionTimeLimitPassedForParticipant(participant.Id, participant.Contest.LimitBetweenSubmissions))\n            {\n                throw new HttpException((int)HttpStatusCode.ServiceUnavailable, Resource.ContestsGeneral.Submission_was_sent_too_soon);\n            }\n\n            if (problem.SourceCodeSizeLimit < participantSubmission.Content.Length)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Submission_too_long);\n            }\n\n            if (!this.ModelState.IsValid)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Invalid_request);\n            }\n\n            this.Data.Submissions.Add(new Submission\n            {\n                ContentAsString = participantSubmission.Content,\n                ProblemId = participantSubmission.ProblemId,\n                SubmissionTypeId = participantSubmission.SubmissionTypeId,\n                ParticipantId = participant.Id,\n                IpAddress = this.Request.UserHostAddress,\n            });\n\n            this.Data.SaveChanges();\n\n            return this.Json(participantSubmission.ProblemId);\n        }\n\n        // TODO: Extract common logic between SubmitBinaryFile() and Submit()\n        public ActionResult SubmitBinaryFile(BinarySubmissionModel participantSubmission, bool official, int? returnProblem)\n        {\n            if (participantSubmission?.File == null)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Upload_file);\n            }\n\n            var problem = this.Data.Problems.All().FirstOrDefault(x => x.Id == participantSubmission.ProblemId);\n            if (problem == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.Problem_not_found);\n            }\n\n            var participant = this.Data.Participants.GetWithContest(problem.ContestId, this.UserProfile.Id, official);\n            if (participant == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.User_is_not_registered_for_exam);\n            }\n\n            ValidateContest(participant.Contest, official);\n            ValidateSubmissionType(participantSubmission.SubmissionTypeId, participant.Contest);\n\n            if (this.Data.Submissions.HasSubmissionTimeLimitPassedForParticipant(participant.Id, participant.Contest.LimitBetweenSubmissions))\n            {\n                throw new HttpException((int)HttpStatusCode.ServiceUnavailable, Resource.ContestsGeneral.Submission_was_sent_too_soon);\n            }\n\n            if (problem.SourceCodeSizeLimit < participantSubmission.File.ContentLength)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Submission_too_long);\n            }\n\n            // Validate submission type existence\n            var submissionType = this.Data.SubmissionTypes.GetById(participantSubmission.SubmissionTypeId);\n            if (submissionType == null)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Invalid_request);\n            }\n\n            // Validate if binary files are allowed\n            if (!submissionType.AllowBinaryFilesUpload)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Binary_files_not_allowed);\n            }\n\n            // Validate file extension\n            if (!submissionType.AllowedFileExtensionsList.Contains(\n                    participantSubmission.File.FileName.GetFileExtension()))\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Invalid_extention);\n            }\n\n            if (!this.ModelState.IsValid)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.ContestsGeneral.Invalid_request);\n            }\n\n            this.Data.Submissions.Add(new Submission\n            {\n                Content = participantSubmission.File.InputStream.ToByteArray(),\n                FileExtension = participantSubmission.File.FileName.GetFileExtension(),\n                ProblemId = participantSubmission.ProblemId,\n                SubmissionTypeId = participantSubmission.SubmissionTypeId,\n                ParticipantId = participant.Id\n            });\n\n            this.Data.SaveChanges();\n\n            this.TempData.Add(GlobalConstants.InfoMessage, Resource.ContestsGeneral.Solution_uploaded);\n            return this.Redirect(string.Format(\"/Contests/{2}/Index/{0}#{1}\", problem.ContestId, returnProblem ?? 0, official ? CompeteUrl : PracticeUrl));\n        }\n\n        /// <summary>\n        /// Obtains the partial view for a particular problem.\n        /// </summary>\n        /// <param name=\"id\">The problem Id</param>\n        /// <param name=\"official\">A check whether the problem is practiced or competed.</param>\n        /// <returns>Returns a partial view with the problem information.</returns>\n        [Authorize]\n        public ActionResult Problem(int id, bool official)\n        {\n            this.ViewBag.IsOfficial = official;\n            this.ViewBag.CompeteType = official ? CompeteUrl : PracticeUrl;\n\n            var problem = this.Data.Problems.GetById(id);\n\n            if (problem == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ContestsGeneral.Problem_not_found);\n            }\n\n            ValidateContest(problem.Contest, official);\n\n            if (!this.Data.Participants.Any(problem.ContestId, this.UserProfile.Id, official))\n            {\n                return this.RedirectToAction(\"Register\", new { id = problem.ContestId, official });\n            }\n\n            var problemViewModel = new ContestProblemViewModel(problem);\n\n            return this.PartialView(\"_ProblemPartial\", problemViewModel);\n        }\n\n        /// <summary>\n        /// Gets a participant's submission results for a problem.\n        /// </summary>\n        /// <param name=\"request\">The Kendo data source request.</param>\n        /// <param name=\"id\">The problem id.</param>\n        /// <param name=\"official\">A check whether the problem is practiced or competed.</param>\n        /// <returns>Returns the submissions results for a participant's problem.</returns>\n        [Authorize]\n        public ActionResult ReadSubmissionResults([DataSourceRequest]DataSourceRequest request, int id, bool official)\n        {\n            var problem = this.Data.Problems.GetById(id);\n            var participant = this.Data.Participants.GetWithContest(problem.ContestId, this.UserProfile.Id, official);\n\n            if (participant == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.User_is_not_registered_for_exam);\n            }\n\n            if (!problem.ShowResults)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Problem_results_not_available);\n            }\n\n            var userSubmissions = this.Data.Submissions.All()\n                                                            .Where(x =>\n                                                                    x.ProblemId == id &&\n                                                                    x.ParticipantId == participant.Id)\n                                                            .Select(SubmissionResultViewModel.FromSubmission);\n\n            return this.Json(userSubmissions.ToDataSourceResult(request));\n        }\n\n        [Authorize]\n        public ActionResult ReadSubmissionResultsAreCompiled([DataSourceRequest]DataSourceRequest request, int id, bool official)\n        {\n            var problem = this.Data.Problems.GetById(id);\n            var participant = this.Data.Participants.GetWithContest(problem.ContestId, this.UserProfile.Id, official);\n\n            if (participant == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.ContestsGeneral.User_is_not_registered_for_exam);\n            }\n\n            var userSubmissions = this.Data.Submissions.All()\n                                                            .Where(x =>\n                                                                    x.ProblemId == id &&\n                                                                    x.ParticipantId == participant.Id)\n                                                            .Select(SubmissionResultIsCompiledViewModel.FromSubmission);\n\n            return this.Json(userSubmissions.ToDataSourceResult(request));\n        }\n\n        /// <summary>\n        /// Gets the allowed submission types for a contest.\n        /// </summary>\n        /// <param name=\"id\">The contest id.</param>\n        /// <returns>Returns the allowed submission types as JSON.</returns>\n        public ActionResult GetAllowedSubmissionTypes(int id)\n        {\n            // TODO: Implement this method with only one database query (this.Data.SubmissionTypes.All().Where(x => x.ContestId == id)\n            var contest = this.Data.Contests.GetById(id);\n\n            if (contest == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ContestsGeneral.Contest_not_found);\n            }\n\n            var submissionTypesSelectListItems = contest\n                                                    .SubmissionTypes\n                                                    .ToList()\n                                                    .Select(x => new\n                                                    {\n                                                        Text = x.Name,\n                                                        Value = x.Id.ToString(CultureInfo.InvariantCulture),\n                                                        Selected = x.IsSelectedByDefault,\n                                                        x.AllowBinaryFilesUpload,\n                                                        x.AllowedFileExtensions,\n                                                    });\n\n            return this.Json(submissionTypesSelectListItems, JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Gets a problem resource and sends it to the user. If the user is not logged in redirects him to the\n        /// login page. If the user is not registered for the exam - redirects him to the appropriate page.\n        /// </summary>\n        /// <param name=\"id\">The resource id.</param>\n        /// <param name=\"official\">A check whether the problem is practiced or competed.</param>\n        /// <returns>Returns a file with the resource contents or redirects the user to the appropriate\n        /// registration page.</returns>\n        public ActionResult DownloadResource(int id, bool official)\n        {\n            var problemWithResource = this.Data.Problems\n                                                    .All()\n                                                    .FirstOrDefault(problem =>\n                                                            problem.Resources.Any(res => res.Id == id && !res.IsDeleted));\n\n            if (problemWithResource == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ContestsGeneral.Problem_not_found);\n            }\n\n            var contest = problemWithResource.Contest;\n            bool userCanDownloadResource = false;\n\n            if (this.UserProfile == null)\n            {\n                ValidateContest(contest, official);\n            }\n            else if (this.User != null && this.User.IsAdmin())\n            {\n                // TODO: add unit tests\n                // If the user is an administrator he can download the resource at any time.\n                userCanDownloadResource = true;\n            }\n            else\n            {\n                ValidateContest(contest, official);\n                userCanDownloadResource = this.Data.Participants.Any(contest.Id, this.UserProfile.Id, official);\n            }\n\n            if (userCanDownloadResource ||\n                (contest.CanBeCompeted && !contest.HasContestPassword) ||\n                (contest.CanBePracticed && !contest.HasPracticePassword))\n            {\n                var resource = problemWithResource.Resources.FirstOrDefault(res => res.Id == id);\n\n                if (string.IsNullOrWhiteSpace(resource.FileExtension) || resource.File == null || resource.File.Length == 0)\n                {\n                    throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Resource_cannot_be_downloaded);\n                }\n\n                return this.File(resource.File, GlobalConstants.BinaryFileMimeType, string.Format(\"{0}_{1}.{2}\", resource.Problem.Name, resource.Name, resource.FileExtension));\n            }\n\n            if ((contest.CanBePracticed && !official) || (contest.CanBeCompeted && official))\n            {\n                return this.RedirectToAction(\"Register\", new { official, id = contest.Id });\n            }\n\n            throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Resource_cannot_be_downloaded);\n        }\n\n        /// <summary>\n        /// Gets the content of a participant submission for a particular problem.\n        /// </summary>\n        /// <param name=\"id\">The submission id.</param>\n        /// <returns>Returns a JSON with the submission content.</returns>\n        //// TODO: Remove if not used\n        [Authorize]\n        public ActionResult GetSubmissionContent(int id)\n        {\n            var submission = this.Data.Submissions.All().FirstOrDefault(x => x.Id == id);\n\n            if (submission == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ContestsGeneral.Submission_not_found);\n            }\n\n            if (submission.Participant.UserId != this.UserProfile.Id)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.ContestsGeneral.Submission_not_made_by_user);\n            }\n\n            var contentString = submission.ContentAsString;\n\n            return this.Json(contentString, JsonRequestBehavior.AllowGet);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/ContestsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n    using OJS.Web.Areas.Contests.ViewModels.Problems;\n    using OJS.Web.Areas.Contests.ViewModels.Submissions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Contests.ContestsGeneral;\n\n    public class ContestsController : BaseController\n    {\n        public ContestsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Details(int id)\n        {\n            var contestViewModel = this.Data.Contests.All()\n                                                .Where(x => x.Id == id && !x.IsDeleted && x.IsVisible)\n                                                .Select(ContestViewModel.FromContest)\n                                                .FirstOrDefault();\n\n            if (contestViewModel == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Contest_not_found);\n            }\n\n            this.ViewBag.ContestProblems = this.Data.Problems.All().Where(x => x.ContestId == id)\n                .Select(ProblemListItemViewModel.FromProblem);\n\n            return this.View(contestViewModel);\n        }\n\n        public ActionResult BySubmissionType(int id)\n        {\n            var contests = this.Data.Contests\n                                            .All()\n                                            .Where(x => x.SubmissionTypes.Any(s => s.Id == id) && !x.IsDeleted && x.IsVisible)\n                                            .Select(ContestViewModel.FromContest);\n\n            return this.View(contests);\n        }\n\n        [Authorize]\n        [HttpPost]\n        public ActionResult UserSubmissions([DataSourceRequest]DataSourceRequest request, int contestId)\n        {\n            var userSubmissions = this.Data.Submissions.All()\n                                                        .Where(x =>\n                                                            x.Participant.UserId == this.UserProfile.Id &&\n                                                            x.Problem.ContestId == contestId &&\n                                                            x.Problem.ShowResults)\n                                                        .Select(SubmissionResultViewModel.FromSubmission);\n\n            return this.Json(userSubmissions.ToDataSourceResult(request));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/ListController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n    using OJS.Web.Areas.Contests.ViewModels.Submissions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Contests.ContestsGeneral;\n\n    public class ListController : BaseController\n    {\n        public ListController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            var contests = this.Data.Contests.All().Select(ContestViewModel.FromContest).ToList();\n            return this.View(contests);\n        }\n\n        public ActionResult ReadCategories(int? id)\n        {\n            var categories =\n                this.Data.ContestCategories.All()\n                    .Where(x => x.IsVisible)\n                    .Where(x => id.HasValue ? x.ParentId == id : x.ParentId == null)\n                    .OrderBy(x => x.OrderBy)\n                    .Select(ContestCategoryListViewModel.FromCategory);\n\n            return this.Json(categories, JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult GetParents(int id)\n        {\n            var categoryIds = new List<int>();\n            var category = this.Data.ContestCategories.GetById(id);\n\n            categoryIds.Add(category.Id);\n            var parent = category.Parent;\n\n            while (parent != null)\n            {\n                categoryIds.Add(parent.Id);\n                parent = parent.Parent;\n            }\n\n            categoryIds.Reverse();\n\n            return this.Json(categoryIds, JsonRequestBehavior.AllowGet);\n        }\n\n        public ActionResult ByCategory(int? id)\n        {\n            ContestCategoryViewModel contestCategory;\n            if (id.HasValue)\n            {\n                contestCategory =\n                    this.Data.ContestCategories.All()\n                        .Where(x => x.Id == id && !x.IsDeleted && x.IsVisible)\n                        .OrderBy(x => x.OrderBy)\n                        .Select(ContestCategoryViewModel.FromContestCategory)\n                        .FirstOrDefault();\n            }\n            else\n            {\n                contestCategory = new ContestCategoryViewModel\n                {\n                    CategoryName = Resource.Main_categories,\n                    Contests = new HashSet<ContestViewModel>(),\n                    SubCategories = this.Data.ContestCategories.All()\n                                        .Where(x => x.IsVisible && !x.IsDeleted && x.Parent == null)\n                                        .Select(ContestCategoryListViewModel.FromCategory)\n                };\n            }\n\n            if (contestCategory == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Category_not_found);\n            }\n\n            if (this.Request.IsAjaxRequest())\n            {\n                this.ViewBag.IsAjax = true;\n                return this.PartialView(contestCategory);\n            }\n\n            this.ViewBag.IsAjax = false;\n            return this.View(contestCategory);\n        }\n\n        public ActionResult BySubmissionType(int? id, string submissionTypeName)\n        {\n            SubmissionTypeViewModel submissionType;\n            if (id.HasValue)\n            {\n                submissionType = this.Data.SubmissionTypes.All()\n                                                  .Where(x => x.Id == id.Value)\n                                                  .Select(SubmissionTypeViewModel.FromSubmissionType)\n                                                  .FirstOrDefault();\n            }\n            else\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, Resource.Invalid_request);\n            }\n\n            if (submissionType == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Submission_type_not_found);\n            }\n\n            var contests =\n                this.Data.Contests\n                                .All()\n                                .Where(c => !c.IsDeleted &&\n                                            c.IsVisible &&\n                                            c.SubmissionTypes.Any(s => s.Id == submissionType.Id))\n                                .OrderBy(x => x.OrderBy)\n                                .Select(ContestViewModel.FromContest);\n\n            this.ViewBag.SubmissionType = submissionType.Name;\n            return this.View(contests);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/ParticipantsAnswersController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System.Collections;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    using OJS.Data;\n    using OJS.Web.Areas.Contests.ViewModels.ParticipantsAnswers;\n    using OJS.Web.Common.Attributes;\n    using OJS.Web.Controllers;\n\n    public class ParticipantsAnswersController : KendoGridAdministrationController\n    {\n        private int contestId;\n\n        public ParticipantsAnswersController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [OverrideAuthorize(Roles = \"KidsTeacher, Administrator\")]\n        public ActionResult Details(int id)\n        {\n            this.contestId = id;\n\n            return this.View(id);\n        }\n\n        [OverrideAuthorize(Roles = \"KidsTeacher, Administrator\")]\n        public override object GetById(object id)\n        {\n            return this.Data.Contests.All().FirstOrDefault(x => x.Id == (int)id);\n        }\n\n        [HttpPost]\n        [OverrideAuthorize(Roles = \"KidsTeacher, Administrator\")]\n        public ActionResult ReadData([DataSourceRequest] DataSourceRequest request, int contestId)\n        {\n            this.contestId = contestId;\n\n            return this.Read(request);\n        }\n\n        [HttpGet]\n        [OverrideAuthorize(Roles = \"KidsTeacher, Administrator\")]\n        public FileResult ExcelExport([DataSourceRequest] DataSourceRequest request, int contestId)\n        {\n            this.contestId = contestId;\n\n            return this.ExportToExcel(request, this.GetData());\n        }\n\n        [OverrideAuthorize(Roles = \"KidsTeacher, Administrator\")]\n        public override IEnumerable GetData()\n        {\n            var result = this.Data\n                .Contests\n                .All()\n                .Where(x => x.Id == this.contestId)\n                .SelectMany(\n                    x =>\n                    x.Participants\n                        .Select(z => new ParticipantsAnswersViewModel\n                        {\n                            Id = z.Id,\n                            Points = z.Submissions.Any()\n                                ? z.Submissions\n                                    .Where(s => !s.Problem.IsDeleted)\n                                    .GroupBy(s => s.Problem)\n                                    .Select(gr => gr.Any()\n                                        ? gr.OrderByDescending(s => s.Points).Select(q => q.Points).Take(1).FirstOrDefault()\n                                        : 0)\n                                    .Sum(q => q)\n                                    : 0,\n                            ParticipantUsername = z.User.UserName,\n                            ParticipantFullName = z.User.UserSettings.FirstName + \" \" + z.User.UserSettings.LastName,\n                            Answer = z.Answers.Any()\n                                ? z.Answers.FirstOrDefault().Answer\n                                : string.Empty\n                        }))\n                .ToList();\n\n            foreach (var item in result)\n            {\n                int id = 0;\n\n                if (int.TryParse(item.Answer, out id))\n                {\n                    item.Answer = this.Data.ContestQuestionAnswers.All().FirstOrDefault(x => x.Id == id)?.Text;\n                }\n            }\n\n            return result\n                .OrderByDescending(s => s.Answer)\n                .ThenByDescending(s => s.Points);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/ResultsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n    using OJS.Web.Areas.Contests.ViewModels.Results;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Contests.ContestsGeneral;\n\n    public class ResultsController : BaseController\n    {\n        public const int ResultsPageSize = 300;\n\n        public ResultsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        /// <summary>\n        /// Gets the results for a particular problem for users with at least one submission.\n        /// </summary>\n        /// <param name=\"request\">The datasource request.</param>\n        /// <param name=\"id\">The id of the problem.</param>\n        /// <param name=\"official\">A flag checking if the requested results are for practice or for a competition.</param>\n        /// <returns>Returns the best result for each user who has at least one submission for the problem.</returns>\n        [Authorize]\n        public ActionResult ByProblem([DataSourceRequest]DataSourceRequest request, int id, bool official)\n        {\n            var problem = this.Data.Problems.GetById(id);\n\n            var participant = this.Data.Participants.GetWithContest(problem.ContestId, this.UserProfile.Id, official);\n\n            if (participant == null)\n            {\n                throw new HttpException((int)HttpStatusCode.Unauthorized, Resource.User_is_not_registered_for_exam);\n            }\n\n            if (!problem.ShowResults)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.Problem_results_not_available);\n            }\n\n            var results =\n                this.Data.Submissions.All()\n                    .Where(x => x.ProblemId == problem.Id && x.Participant.IsOfficial == official)\n                    .GroupBy(x => x.Participant)\n                    .Select(\n                        submissionGrouping =>\n                        new ProblemResultViewModel\n                            {\n                                ProblemId = problem.Id,\n                                ParticipantName = submissionGrouping.Key.User.UserName,\n                                MaximumPoints = problem.MaximumPoints,\n                                Result =\n                                    submissionGrouping.Where(x => x.ProblemId == problem.Id)\n                                    .Max(x => x.Points)\n                            });\n\n            return this.Json(results.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);\n        }\n\n        /// <summary>\n        /// Gets the results for a contest.\n        /// </summary>\n        /// <param name=\"id\">The contest id.</param>\n        /// <param name=\"official\">A flag, showing if the results are for practice\n        /// or for competition</param>\n        /// <returns>Returns a view with the results of the contest.</returns>\n        [Authorize]\n        public ActionResult Simple(int id, bool official, int? page)\n        {\n            var contest = this.Data.Contests.GetById(id);\n\n            if (contest == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Contest_not_found);\n            }\n\n            // if the results are not visible and the participant is not registered for the contest\n            // then he is not authorized to view the results\n            if (!contest.ResultsArePubliclyVisible &&\n                !this.Data.Participants.Any(id, this.UserProfile.Id, official) &&\n                !this.User.IsAdmin())\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.Contest_results_not_available);\n            }\n\n            // TODO: Extract choosing the best submission logic to separate repository method?\n            var contestModel = new ContestResultsViewModel\n            {\n                Id = contest.Id,\n                Name = contest.Name,\n                ContestCanBeCompeted = contest.CanBeCompeted,\n                ContestCanBePracticed = contest.CanBePracticed,\n                Problems = contest.Problems.AsQueryable().Where(x => !x.IsDeleted)\n                                        .Select(ContestProblemViewModel.FromProblem).OrderBy(x => x.OrderBy).ThenBy(x => x.Name),\n                Results = this.Data.Participants.All()\n                    .Where(participant => participant.ContestId == contest.Id && participant.IsOfficial == official)\n                    .Select(participant => new ParticipantResultViewModel\n                    {\n                        ParticipantUsername = participant.User.UserName,\n                        ParticipantFirstName = participant.User.UserSettings.FirstName,\n                        ParticipantLastName = participant.User.UserSettings.LastName,\n                        ProblemResults = participant.Contest.Problems\n                            .Where(x => !x.IsDeleted)\n                            .Select(problem =>\n                                new ProblemResultPairViewModel\n                                {\n                                    Id = problem.Id,\n                                    ProblemName = problem.Name,\n                                    ProblemOrderBy = problem.OrderBy,\n                                    ShowResult = problem.ShowResults,\n                                    BestSubmission = problem.Submissions\n                                                        .Where(z => z.ParticipantId == participant.Id && !z.IsDeleted)\n                                                        .OrderByDescending(z => z.Points).ThenByDescending(z => z.Id)\n                                                        .Select(z => new BestSubmissionViewModel { Id = z.Id, Points = z.Points })\n                                                        .FirstOrDefault()\n                                })\n                                .OrderBy(res => res.ProblemOrderBy).ThenBy(res => res.ProblemName)\n                    })\n                    .ToList()\n                    .OrderByDescending(x => x.Total)\n            };\n\n            // calculate page information\n            contestModel.TotalResults = contestModel.Results.Count();\n            int totalResults = contestModel.TotalResults;\n            int totalPages = totalResults % ResultsPageSize == 0 ? totalResults / ResultsPageSize : (totalResults / ResultsPageSize) + 1;\n\n            if (page == null || page < 1)\n            {\n                page = 1;\n            }\n            else if (page > totalPages)\n            {\n                page = totalPages;\n            }\n\n            // TODO: optimize if possible\n            // query the paged result\n            contestModel.Results = contestModel.Results\n                    .Skip((page.Value - 1) * ResultsPageSize)\n                    .Take(ResultsPageSize);\n\n            // add page info to View Model\n            contestModel.CurrentPage = page.Value;\n            contestModel.AllPages = totalPages;\n\n            if (this.User.IsAdmin())\n            {\n                contestModel.Results = contestModel.Results.OrderByDescending(x => x.AdminTotal);\n            }\n\n            this.ViewBag.IsOfficial = official;\n\n            return this.View(contestModel);\n        }\n\n        // TODO: Unit test\n        [Authorize(Roles = GlobalConstants.AdministratorRoleName)]\n        public ActionResult Full(int id, bool official)\n        {\n            var contest = this.Data.Contests.GetById(id);\n\n            if (contest == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Contest_not_found);\n            }\n\n            var model = new ContestFullResultsViewModel\n                {\n                    Id = contest.Id,\n                    Name = contest.Name,\n                    Problems = contest.Problems.AsQueryable().Where(pr => !pr.IsDeleted).Select(ContestProblemViewModel.FromProblem).OrderBy(x => x.OrderBy).ThenBy(x => x.Name),\n                    Results = this.Data.Participants.All()\n                        .Where(participant => participant.ContestId == contest.Id && participant.IsOfficial == official)\n                        .Select(participant => new ParticipantFullResultViewModel\n                        {\n                            ParticipantUsername = participant.User.UserName,\n                            ParticipantFirstName = participant.User.UserSettings.FirstName,\n                            ParticipantLastName = participant.User.UserSettings.LastName,\n                            ProblemResults = participant.Contest.Problems\n                                .Where(x => !x.IsDeleted)\n                                .Select(problem =>\n                                    new ProblemFullResultViewModel\n                                    {\n                                        Id = problem.Id,\n                                        ProblemName = problem.Name,\n                                        ProblemOrderBy = problem.OrderBy,\n                                        MaximumPoints = problem.MaximumPoints,\n                                        BestSubmission = problem.Submissions.AsQueryable()\n                                                            .Where(submission => submission.ParticipantId == participant.Id && !submission.IsDeleted && submission.CreatedOn >= contest.StartTime)\n                                                            .OrderByDescending(z => z.Points).ThenByDescending(z => z.Id)\n                                                            .Select(SubmissionFullResultsViewModel.FromSubmission)\n                                                            .FirstOrDefault(),\n                                    })\n                                    .OrderBy(res => res.ProblemOrderBy).ThenBy(res => res.ProblemName)\n                        })\n                        .ToList()\n                        .OrderByDescending(x => x.Total).ThenBy(x => x.ParticipantUsername)\n                };\n\n            this.ViewBag.IsOfficial = official;\n\n            return this.View(model);\n        }\n\n        [Authorize(Roles = GlobalConstants.AdministratorRoleName)]\n        public ActionResult GetParticipantsAveragePoints(int id)\n        {\n            var contestInfo =\n                this.Data.Contests.All()\n                    .Where(c => c.Id == id)\n                    .Select(\n                        c =>\n                        new\n                            {\n                                c.Id,\n                                ParticipantsCount = (double)c.Participants.Count(p => p.IsOfficial),\n                                c.StartTime,\n                                c.EndTime\n                            })\n                    .FirstOrDefault();\n\n            var submissions = this.Data.Participants.All()\n                    .Where(participant => participant.ContestId == contestInfo.Id && participant.IsOfficial)\n                    .SelectMany(participant =>\n                        participant.Contest.Problems\n                            .Where(pr => !pr.IsDeleted)\n                            .SelectMany(pr => pr.Submissions\n                                .Where(subm => !subm.IsDeleted && subm.ParticipantId == participant.Id)\n                                .Select(subm => new\n                                {\n                                    subm.Points,\n                                    subm.CreatedOn,\n                                    ParticipantId = participant.Id,\n                                    ProblemId = pr.Id\n                                })))\n                    .OrderBy(subm => subm.CreatedOn)\n                    .ToList();\n\n            var viewModel = new List<ContestStatsChartViewModel>();\n\n            for (DateTime time = contestInfo.StartTime.Value.AddMinutes(5); time <= contestInfo.EndTime.Value && time < DateTime.Now; time = time.AddMinutes(5))\n            {\n                if (!submissions.Any(pr => pr.CreatedOn >= contestInfo.StartTime && pr.CreatedOn <= time))\n                {\n                    continue;\n                }\n\n                var averagePointsLocal = submissions\n                    .Where(pr => pr.CreatedOn >= contestInfo.StartTime && pr.CreatedOn <= time)\n                    .GroupBy(pr => new { pr.ProblemId, pr.ParticipantId })\n                    .Select(gr => new\n                    {\n                        MaxPoints = gr.Max(pr => pr.Points),\n                        gr.Key.ParticipantId\n                    })\n                    .GroupBy(pr => pr.ParticipantId)\n                    .Select(gr => gr.Sum(pr => pr.MaxPoints))\n                    .Aggregate((sum, el) => sum + el) / contestInfo.ParticipantsCount;\n\n                viewModel.Add(new ContestStatsChartViewModel\n                {\n                    AverageResult = averagePointsLocal,\n                    Minute = time.Minute,\n                    Hour = time.Hour\n                });\n            }\n\n            return this.Json(viewModel);\n        }\n\n        [Authorize(Roles = GlobalConstants.AdministratorRoleName)]\n        public ActionResult Stats(ContestFullResultsViewModel viewModel)\n        {\n            var maxResult = this.Data.Contests.All().FirstOrDefault(c => c.Id == viewModel.Id).Problems.Sum(p => p.MaximumPoints);\n            var participantsCount = viewModel.Results.Count();\n            var statsModel = new ContestStatsViewModel();\n            statsModel.MinResultsCount = viewModel.Results.Count(r => r.Total == 0);\n            statsModel.MinResultsPercent = (double)statsModel.MinResultsCount / participantsCount;\n            statsModel.MaxResultsCount = viewModel.Results.Count(r => r.Total == maxResult);\n            statsModel.MaxResultsPercent = (double)statsModel.MaxResultsCount / participantsCount;\n            statsModel.AverageResult = (double)viewModel.Results.Sum(r => r.Total) / participantsCount;\n\n            int fromPoints = 0;\n            int toPoints = 0;\n            foreach (var problem in viewModel.Problems)\n            {\n                var maxResultsForProblem = viewModel.Results.Count(r => r.ProblemResults.Any(pr => pr.ProblemName == problem.Name && pr.BestSubmission != null && pr.BestSubmission.Points == pr.MaximumPoints));\n                var maxResultsForProblemPercent = (double)maxResultsForProblem / participantsCount;\n                statsModel.StatsByProblem.Add(new ContestProblemStatsViewModel\n                    {\n                        Name = problem.Name,\n                        MaxResultsCount = maxResultsForProblem,\n                        MaxResultsPercent = maxResultsForProblemPercent,\n                        MaxPossiblePoints = problem.MaximumPoints\n                    });\n\n                if (toPoints == 0)\n                {\n                    toPoints = problem.MaximumPoints;\n                }\n                else\n                {\n                    toPoints += problem.MaximumPoints;\n                }\n\n                var participantsInPointsRange = viewModel.Results.Count(r => r.Total >= fromPoints && r.Total <= toPoints);\n                var participantsInPointsRangePercent = (double)participantsInPointsRange / participantsCount;\n\n                statsModel.StatsByPointsRange.Add(new ContestPointsRangeViewModel\n                    {\n                        PointsFrom = fromPoints,\n                        PointsTo = toPoints,\n                        Participants = participantsInPointsRange,\n                        PercentOfAllParticipants = participantsInPointsRangePercent\n                    });\n\n                fromPoints = toPoints + 1;\n            }\n\n            return this.PartialView(\"_StatsPartial\", statsModel);\n        }\n\n        [Authorize(Roles = GlobalConstants.AdministratorRoleName)]\n        public ActionResult StatsChart(int contestId)\n        {\n            return this.PartialView(\"_StatsChartPartial\", contestId);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Controllers/SubmissionsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Controllers\n{\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Areas.Contests.ViewModels.Submissions;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Contests.ContestsGeneral;\n\n    public class SubmissionsController : BaseController\n    {\n        public SubmissionsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [ActionName(\"View\")]\n        [Authorize]\n        public ActionResult Details(int id)\n        {\n            var submission = this.Data.Submissions.All()\n                .Where(x => x.Id == id)\n                .Select(SubmissionDetailsViewModel.FromSubmission)\n                .FirstOrDefault();\n\n            if (submission == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Submission_not_found);\n            }\n\n            if (!this.User.IsAdmin() && submission.IsDeleted)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Submission_not_found);\n            }\n\n            if (!this.User.IsAdmin() && this.UserProfile != null && submission.UserId != this.UserProfile.Id)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.Submission_not_made_by_user);\n            }\n\n            return this.View(submission);\n        }\n\n        // TODO: Extract common validations between Download() and Details()\n        public FileResult Download(int id)\n        {\n            var submission = this.Data.Submissions.All()\n                .Where(x => x.Id == id)\n                .Select(SubmissionDetailsViewModel.FromSubmission)\n                .FirstOrDefault();\n\n            if (submission == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Submission_not_found);\n            }\n\n            if (!this.User.IsAdmin() && submission.IsDeleted)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Submission_not_found);\n            }\n\n            if (!this.User.IsAdmin() && this.UserProfile != null && submission.UserId != this.UserProfile.Id)\n            {\n                throw new HttpException((int)HttpStatusCode.Forbidden, Resource.Submission_not_made_by_user);\n            }\n\n            // TODO: When text content is saved, uncompressing should be performed\n            return this.File(submission.Content, GlobalConstants.BinaryFileMimeType, string.Format(\"Submission_{0}.{1}\", submission.Id, submission.FileExtension));\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Helpers/ContestExtensions.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Helpers\n{\n    using System.Linq;\n\n    using OJS.Data.Models;\n\n    public static class ContestExtensions\n    {\n        public static bool ShouldShowRegistrationForm(this Contest contest, bool isOfficialParticipant)\n        {\n            // Show registration form if contest password is required\n            var showRegistrationForm = (isOfficialParticipant && contest.HasContestPassword) || (!isOfficialParticipant && contest.HasPracticePassword);\n\n            // Show registration form if contest is official and questions should be asked\n            if (isOfficialParticipant && contest.Questions.Any(x => x.AskOfficialParticipants))\n            {\n                showRegistrationForm = true;\n            }\n\n            // Show registration form if contest is not official and questions should be asked\n            if (!isOfficialParticipant && contest.Questions.Any(x => x.AskPracticeParticipants))\n            {\n                showRegistrationForm = true;\n            }\n\n            return showRegistrationForm;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Models/BinarySubmissionModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Models\n{\n    using System.ComponentModel.DataAnnotations;\n    using System.Web;\n\n    public class BinarySubmissionModel\n    {\n        public int ProblemId { get; set; }\n\n        public int SubmissionTypeId { get; set; }\n\n        [Required]\n        public HttpPostedFileBase File { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Models/ContestQuestionAnswerModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Models\n{\n    using System.ComponentModel.DataAnnotations;\n\n    public class ContestQuestionAnswerModel\n    {\n        public int QuestionId { get; set; }\n\n        [Required]\n        public string Answer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Models/ContestRegistrationModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Models\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Text.RegularExpressions;\n\n    using OJS.Data;\n\n    using Resource = Resources.Areas.Contests.ViewModels.ContestsViewModels;\n\n    public class ContestRegistrationModel : IValidatableObject\n    {\n        private IOjsData data;\n\n        public ContestRegistrationModel()\n            : this(new OjsData())\n        {\n        }\n\n        public ContestRegistrationModel(IOjsData data)\n        {\n            this.Questions = new HashSet<ContestQuestionAnswerModel>();\n            this.data = data;\n        }\n\n        public int ContestId { get; set; }\n\n        public string Password { get; set; }\n\n        public IEnumerable<ContestQuestionAnswerModel> Questions { get; set; }\n\n        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n        {\n            var validationResults = new HashSet<ValidationResult>();\n\n            var contest = this.data.Contests.GetById(this.ContestId);\n            var contestQuestions = contest.Questions\n                .Where(x => !x.IsDeleted)\n                .ToList();\n\n            var counter = 0;\n            foreach (var question in contestQuestions)\n            {\n                var answer = this.Questions.FirstOrDefault(x => x.QuestionId == question.Id);\n                var memberName = string.Format(\"Questions[{0}].Answer\", counter);\n                if (answer == null)\n                {\n                    var validationErrorMessage = string.Format(Resource.Question_not_answered, question.Id);\n                    var validationResult = new ValidationResult(validationErrorMessage, new[] { memberName });\n                    validationResults.Add(validationResult);\n                }\n                else if (!string.IsNullOrWhiteSpace(question.RegularExpressionValidation) && !Regex.IsMatch(answer.Answer, question.RegularExpressionValidation))\n                {\n                    var validationErrorMessage = string.Format(Resource.Question_not_answered_correctly, question.Id);\n                    var validationResult = new ValidationResult(validationErrorMessage, new[] { memberName });\n                    validationResults.Add(validationResult);\n                }\n\n                counter++;\n            }\n\n            return validationResults;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Models/SubmissionModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.Models\n{\n    using System.ComponentModel.DataAnnotations;\n    using System.Web.Mvc;\n\n    public class SubmissionModel\n    {\n        public int ProblemId { get; set; }\n\n        public int SubmissionTypeId { get; set; }\n\n        [StringLength(int.MaxValue, MinimumLength = 5)]\n        [Required]\n        [AllowHtml]\n        public string Content { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestCategoryListViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n\n    public class ContestCategoryListViewModel\n    {\n        public static Expression<Func<ContestCategory, ContestCategoryListViewModel>> FromCategory\n        {\n            get\n            {\n                return category => new ContestCategoryListViewModel\n                {\n                    Id = category.Id,\n                    Name = category.Name,\n                    HasChildren = category.Children.Any(x => x.IsVisible && !x.IsDeleted)\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public string NameUrl => this.Name.ToUrl();\n\n        public bool HasChildren { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestCategoryViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class ContestCategoryViewModel\n    {\n        public static Expression<Func<ContestCategory, ContestCategoryViewModel>> FromContestCategory\n        {\n            get\n            {\n                return contestCategory =>\n                    new ContestCategoryViewModel\n                    {\n                        CategoryName = contestCategory.Name,\n                        Contests = contestCategory.Contests.AsQueryable()\n                                                                .Where(x => x.IsVisible && !x.IsDeleted)\n                                                                .OrderBy(x => x.OrderBy)\n                                                                .ThenByDescending(x => x.EndTime)\n                                                                .Select(ContestViewModel.FromContest),\n                        SubCategories = contestCategory.Children.AsQueryable()\n                                                                .Select(ContestCategoryListViewModel.FromCategory)\n                    };\n            }\n        }\n\n        public string CategoryName { get; set; }\n\n        public IEnumerable<ContestViewModel> Contests { get; set; }\n\n        public IEnumerable<ContestCategoryListViewModel> SubCategories { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestPointsRangeViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    public class ContestPointsRangeViewModel\n    {\n        public int PointsFrom { get; set; }\n\n        public int PointsTo { get; set; }\n\n        public int Participants { get; set; }\n\n        public double PercentOfAllParticipants { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestProblemResourceViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    public class ContestProblemResourceViewModel\n    {\n        public static Expression<Func<ProblemResource, ContestProblemResourceViewModel>> FromResource\n        {\n            get\n            {\n                return resource => new ContestProblemResourceViewModel\n                {\n                    ResourceId = resource.Id,\n                    Name = resource.Name,\n                    Link = resource.Link,\n                    ProblemType = resource.Type\n                };\n            }\n        }\n\n        public int ResourceId { get; set; }\n\n        public string Name { get; set; }\n\n        public string Link { get; set; }\n\n        public ProblemResourceType ProblemType { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestProblemStatsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    public class ContestProblemStatsViewModel\n    {\n        public string Name { get; set; }\n\n        public int MaxPossiblePoints { get; set; }\n\n        public int MaxResultsCount { get; set; }\n\n        public double MaxResultsPercent { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestProblemViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class ContestProblemViewModel\n    {\n        private int memoryLimitInBytes;\n\n        private int timeLimitInMs;\n\n        private int? fileSizeLimitInBytes;\n\n        public ContestProblemViewModel(Problem problem)\n        {\n            this.ProblemId = problem.Id;\n            this.Name = problem.Name;\n            this.OrderBy = problem.OrderBy;\n            this.ContestId = problem.ContestId;\n            this.ShowResults = problem.ShowResults;\n            this.Resources = problem.Resources.AsQueryable()\n                                                .OrderBy(x => x.OrderBy)\n                                                .Where(x => !x.IsDeleted)\n                                                .Select(ContestProblemResourceViewModel.FromResource);\n            this.TimeLimit = problem.TimeLimit;\n            this.MemoryLimit = problem.MemoryLimit;\n            this.FileSizeLimit = problem.SourceCodeSizeLimit;\n            this.CheckerName = problem.Checker.Name;\n            this.CheckerDescription = problem.Checker.Description;\n            this.MaximumPoints = problem.MaximumPoints;\n        }\n\n        public ContestProblemViewModel()\n        {\n            this.Resources = new HashSet<ContestProblemResourceViewModel>();\n        }\n\n        // TODO: Constructor and this static property have the same code. Refactor.\n        public static Expression<Func<Problem, ContestProblemViewModel>> FromProblem\n        {\n            get\n            {\n                return problem => new ContestProblemViewModel\n                {\n                    Name = problem.Name,\n                    OrderBy = problem.OrderBy,\n                    ProblemId = problem.Id,\n                    ContestId = problem.ContestId,\n                    MemoryLimit = problem.MemoryLimit,\n                    TimeLimit = problem.TimeLimit,\n                    FileSizeLimit = problem.SourceCodeSizeLimit,\n                    ShowResults = problem.ShowResults,\n                    CheckerName = problem.Checker.Name,\n                    CheckerDescription = problem.Checker.Description,\n                    MaximumPoints = problem.MaximumPoints,\n                    Resources = problem.Resources.AsQueryable()\n                                                            .Where(x => !x.IsDeleted)\n                                                            .OrderBy(x => x.OrderBy)\n                                                            .Select(ContestProblemResourceViewModel.FromResource)\n                };\n            }\n        }\n\n        public int ContestId { get; set; }\n\n        public int ProblemId { get; set; }\n\n        public string Name { get; set; }\n\n        public int OrderBy { get; set; }\n\n        public int MaximumPoints { get; set; }\n\n        public bool ShowResults { get; set; }\n\n        public double MemoryLimit\n        {\n            get\n            {\n                return (double)this.memoryLimitInBytes / 1024 / 1024;\n            }\n\n            set\n            {\n                this.memoryLimitInBytes = (int)value;\n            }\n        }\n\n        public double TimeLimit\n        {\n            get\n            {\n                return this.timeLimitInMs / 1000.00;\n            }\n\n            set\n            {\n                this.timeLimitInMs = (int)value;\n            }\n        }\n\n        public double? FileSizeLimit\n        {\n            get\n            {\n                if (!this.fileSizeLimitInBytes.HasValue)\n                {\n                    return null;\n                }\n\n                return (double)this.fileSizeLimitInBytes / 1024;\n            }\n\n            set\n            {\n                this.fileSizeLimitInBytes = (int?)value;\n            }\n        }\n\n        public string CheckerName { get; set; }\n\n        public string CheckerDescription { get; set; }\n\n        public IEnumerable<ContestProblemResourceViewModel> Resources { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestRegistrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Contests.Models;\n\n    using Resource = Resources.Areas.Contests.ViewModels.ContestsViewModels;\n\n    public class ContestRegistrationViewModel\n    {\n        public ContestRegistrationViewModel(Contest contest, bool isOfficial)\n        {\n            this.ContestName = contest.Name;\n            this.ContestId = contest.Id;\n\n            this.RequirePassword = isOfficial ? contest.HasContestPassword : contest.HasPracticePassword;\n\n            this.Questions = contest.Questions\n                .Where(x => !x.IsDeleted)\n                .AsQueryable()\n                .Select(QuestionViewModel.FromQuestion);\n        }\n\n        public ContestRegistrationViewModel(Contest contest, ContestRegistrationModel userAnswers, bool isOfficial)\n            : this(contest, isOfficial)\n        {\n            this.Questions = this.Questions.Select(x =>\n            {\n                var userAnswer = userAnswers.Questions.FirstOrDefault(y => y.QuestionId == x.QuestionId);\n                return new QuestionViewModel\n                {\n                    Answer = userAnswer == null ? null : userAnswer.Answer,\n                    QuestionId = x.QuestionId,\n                    Question = x.Question,\n                    Type = x.Type,\n                    PossibleAnswers = x.PossibleAnswers\n                };\n            });\n        }\n\n        public int ContestId { get; set; }\n\n        public string ContestName { get; set; }\n\n        public bool RequirePassword { get; set; }\n\n        [Display(Name = \"Password\", ResourceType = typeof(Resource))]\n        public string Password { get; set; }\n\n        public IEnumerable<QuestionViewModel> Questions { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestStatsChartViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    public class ContestStatsChartViewModel\n    {\n        public double AverageResult { get; set; }\n\n        public int Hour { get; set; }\n\n        public int Minute { get; set; }\n\n        public string DisplayValue => $\"{this.Hour:00}:{this.Minute:00}\";\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestStatsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System.Collections.Generic;\n\n    public class ContestStatsViewModel\n    {\n        public ContestStatsViewModel()\n        {\n            this.StatsByProblem = new List<ContestProblemStatsViewModel>();\n            this.StatsByPointsRange = new List<ContestPointsRangeViewModel>();\n        }\n\n        public int MaxResultsCount { get; set; }\n\n        public double MaxResultsPercent { get; set; }\n\n        public int MinResultsCount { get; set; }\n\n        public double MinResultsPercent { get; set; }\n\n        public double AverageResult { get; set; }\n\n        public ICollection<ContestProblemStatsViewModel> StatsByProblem { get; set; }\n\n        public ICollection<ContestPointsRangeViewModel> StatsByPointsRange { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/ContestViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Contests.ViewModels.Submissions;\n\n    using Resource = Resources.Areas.Contests.ViewModels.ContestsViewModels;\n\n    public class ContestViewModel\n    {\n        private string contestName;\n\n        public static Expression<Func<Contest, ContestViewModel>> FromContest\n        {\n            get\n            {\n                return\n                    contest =>\n                    new ContestViewModel\n                                  {\n                                      Id = contest.Id,\n                                      Name = contest.Name,\n                                      CategoryId = contest.CategoryId,\n                                      CategoryName = contest.Category.Name,\n                                      StartTime = contest.StartTime,\n                                      EndTime = contest.EndTime,\n                                      PracticeStartTime = contest.PracticeStartTime,\n                                      PracticeEndTime = contest.PracticeEndTime,\n                                      IsDeleted = contest.IsDeleted,\n                                      IsVisible = contest.IsVisible,\n                                      ContestPassword = contest.ContestPassword,\n                                      PracticePassword = contest.PracticePassword,\n                                      HasContestQuestions = contest.Questions.Any(x => x.AskOfficialParticipants),\n                                      HasPracticeQuestions = contest.Questions.Any(x => x.AskPracticeParticipants),\n                                      OfficialParticipants = contest.Participants.Count(x => x.IsOfficial),\n                                      PracticeParticipants = contest.Participants.Count(x => !x.IsOfficial),\n                                      ProblemsCount = contest.Problems.Count(x => !x.IsDeleted),\n                                      Problems = contest.Problems.AsQueryable()\n                                                                    .Where(x => !x.IsDeleted)\n                                                                    .OrderBy(x => x.OrderBy)\n                                                                    .ThenBy(x => x.Name)\n                                                                    .Select(ContestProblemViewModel.FromProblem),\n                                      LimitBetweenSubmissions = contest.LimitBetweenSubmissions,\n                                      Description = contest.Description,\n                                      AllowedSubmissionTypes = contest.SubmissionTypes.AsQueryable().Select(SubmissionTypeViewModel.FromSubmissionType)\n                                  };\n            }\n        }\n\n        public int Id { get; set; }\n\n        [Display(Name = \"Name\", ResourceType = typeof(Resource))]\n        public string Name { get; set; }\n\n        public int? CategoryId { get; set; }\n\n        public string CategoryName\n        {\n            get\n            {\n                return this.contestName.ToUrl();\n            }\n\n            set\n            {\n                this.contestName = value;\n            }\n        }\n\n        public string Description { get; set; }\n\n        public DateTime? StartTime { get; set; }\n\n        public DateTime? EndTime { get; set; }\n\n        public DateTime? PracticeStartTime { get; set; }\n\n        public DateTime? PracticeEndTime { get; set; }\n\n        public int LimitBetweenSubmissions { get; set; }\n\n        public bool IsDeleted { get; set; }\n\n        public bool IsVisible { get; set; }\n\n        public string ContestPassword { private get; set; }\n\n        public string PracticePassword { private get; set; }\n\n        public bool HasContestQuestions { get; set; }\n\n        public bool HasPracticeQuestions { get; set; }\n\n        public int OfficialParticipants { get; set; }\n\n        public int PracticeParticipants { get; set; }\n\n        public int ProblemsCount { get; set; }\n\n        public IEnumerable<SubmissionTypeViewModel> AllowedSubmissionTypes { get; set; }\n\n        public IEnumerable<ContestProblemViewModel> Problems { get; set; }\n\n        public bool CanBeCompeted\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.StartTime.HasValue)\n                {\n                    // Cannot be competed\n                    return false;\n                }\n\n                if (!this.EndTime.HasValue)\n                {\n                    // Compete forever\n                    return this.StartTime <= DateTime.Now;\n                }\n\n                return this.StartTime <= DateTime.Now && DateTime.Now <= this.EndTime;\n            }\n        }\n\n        public bool CanBePracticed\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.PracticeStartTime.HasValue)\n                {\n                    // Cannot be practiced\n                    return false;\n                }\n\n                if (!this.PracticeEndTime.HasValue)\n                {\n                    // Practice forever\n                    return this.PracticeStartTime <= DateTime.Now;\n                }\n\n                return this.PracticeStartTime <= DateTime.Now && DateTime.Now <= this.PracticeEndTime;\n            }\n        }\n\n        public bool ResultsArePubliclyVisible\n        {\n            get\n            {\n                if (!this.IsVisible)\n                {\n                    return false;\n                }\n\n                if (this.IsDeleted)\n                {\n                    return false;\n                }\n\n                if (!this.StartTime.HasValue)\n                {\n                    // Cannot be competed\n                    return false;\n                }\n\n                return this.EndTime.HasValue && this.EndTime.Value <= DateTime.Now;\n            }\n        }\n\n        public bool HasContestPassword => this.ContestPassword != null;\n\n        public bool HasPracticePassword => this.PracticePassword != null;\n\n        public double? RemainingTimeInMilliseconds\n        {\n            get\n            {\n                if (this.EndTime.HasValue)\n                {\n                    return (this.EndTime.Value - DateTime.Now).TotalMilliseconds;\n                }\n                else\n                {\n                    return null;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/DropDownAnswerViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    public class DropDownAnswerViewModel\n    {\n        public int Value { get; set; }\n\n        public string Text { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Contests/QuestionViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Contests\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Linq.Expressions;\n    using System.Web.Mvc;\n\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Contests.ViewModels.ContestsViewModels;\n\n    public class QuestionViewModel\n    {\n        public static Expression<Func<ContestQuestion, QuestionViewModel>> FromQuestion\n        {\n            get\n            {\n                return question => new QuestionViewModel\n                {\n                    QuestionId = question.Id,\n                    Question = question.Text,\n                    Type = question.Type,\n                    RegularExpression = question.RegularExpressionValidation,\n                    PossibleAnswers = question.Answers.Where(x => !x.IsDeleted).Select(x => new DropDownAnswerViewModel\n                    {\n                        Text = x.Text,\n                        Value = x.Id\n                    })\n                };\n            }\n        }\n\n        public int QuestionId { get; set; }\n\n        public string RegularExpression { get; set; }\n\n        [Display(Name = \"Question\", ResourceType = typeof(Resource))]\n        public string Question { get; set; }\n\n        [Required(ErrorMessageResourceName = \"Answer_required\", ErrorMessageResourceType = typeof(Resource))]\n        public string Answer { get; set; }\n\n        public ContestQuestionType Type { get; set; }\n\n        public IEnumerable<DropDownAnswerViewModel> PossibleAnswers { get; set; }\n\n        public IEnumerable<SelectListItem> DropDownItems\n        {\n            get\n            {\n                return this.PossibleAnswers.Select(x => new SelectListItem\n                {\n                    Text = x.Text,\n                    Value = x.Value.ToString()\n                });\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Participants/ParticipantViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Participants\n{\n    using System;\n    using System.Linq;\n\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n\n    public class ParticipantViewModel\n    {\n        public ParticipantViewModel(Participant participant, bool official)\n        {\n            this.Contest = ContestViewModel.FromContest.Compile()(participant.Contest);\n            this.LastSubmissionTime = participant.Submissions.Any() ? (DateTime?)participant.Submissions.Max(x => x.CreatedOn) : null;\n            this.ContestIsCompete = official;\n        }\n\n        public ContestViewModel Contest { get; set; }\n\n        public DateTime? LastSubmissionTime { get; set; }\n\n        public bool ContestIsCompete { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/ParticipantsAnswers/ParticipantsAnswersViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.ParticipantsAnswers\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common.DataAnnotations;\n\n    public class ParticipantsAnswersViewModel\n    {\n        [ExcludeFromExcel]\n        public int Id { get; set; }\n\n        [Display(Name = \"Потребител\")]\n        public string ParticipantUsername { get; set; }\n\n        [Display(Name = \"Пълно Име\")]\n        public string ParticipantFullName { get; set; }\n\n        [Display(Name = \"Преподавател\")]\n        public string Answer { get; set; }\n\n        [Display(Name = \"Точки\")]\n        public int Points { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Problems/ProblemListItemViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Problems\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class ProblemListItemViewModel\n    {\n        private string name;\n\n        public static Expression<Func<Problem, ProblemListItemViewModel>> FromProblem\n        {\n            get\n            {\n                return pr => new ProblemListItemViewModel\n                {\n                    ProblemId = pr.Id,\n                    Name = pr.Name\n                };\n            }\n        }\n\n        public int ProblemId { get; set; }\n\n        public string Name\n        {\n            get\n            {\n                return this.name;\n            }\n\n            set\n            {\n                this.name = value.Replace(\"#\", \"\\\\#\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/BestSubmissionViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    public class BestSubmissionViewModel\n    {\n        public int Id { get; set; }\n\n        public int Points { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ContestFullResultsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System.Collections.Generic;\n\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n\n    // TODO: Refactor to reuse same logic with ContestResultsViewModel\n    public class ContestFullResultsViewModel\n    {\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public IEnumerable<ContestProblemViewModel> Problems { get; set; }\n\n        public IEnumerable<ParticipantFullResultViewModel> Results { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ContestResultsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System.Collections.Generic;\n\n    using OJS.Web.Areas.Contests.ViewModels.Contests;\n\n    public class ContestResultsViewModel\n    {\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public int CurrentPage { get; set; }\n\n        public int AllPages { get; set; }\n\n        public int TotalResults { get; set; }\n\n        public IEnumerable<ContestProblemViewModel> Problems { get; set; }\n\n        public IEnumerable<ParticipantResultViewModel> Results { get; set; }\n\n        public bool ContestCanBeCompeted { get; set; }\n\n        public bool ContestCanBePracticed { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ParticipantFullResultViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    public class ParticipantFullResultViewModel\n    {\n        public string ParticipantUsername { get; set; }\n\n        public string ParticipantFirstName { get; set; }\n\n        public string ParticipantLastName { get; set; }\n\n        public string ParticipantFullName => $\"{this.ParticipantFirstName} {this.ParticipantLastName}\".Trim();\n\n        public IEnumerable<ProblemFullResultViewModel> ProblemResults { get; set; }\n\n        public int Total\n        {\n            get\n            {\n                return\n                    this.ProblemResults.Where(problemResult => problemResult.BestSubmission != null)\n                        .Sum(problemResult => problemResult.BestSubmission.Points);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ParticipantResultViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    public class ParticipantResultViewModel\n    {\n        public string ParticipantUsername { get; set; }\n\n        public string ParticipantFirstName { get; set; }\n\n        public string ParticipantLastName { get; set; }\n\n        public string ParticipantFullName => $\"{this.ParticipantFirstName} {this.ParticipantLastName}\".Trim();\n\n        public IEnumerable<ProblemResultPairViewModel> ProblemResults { get; set; }\n\n        public int Total\n        {\n            get\n            {\n                return this.ProblemResults.Where(x => x.ShowResult).Sum(x => x.BestSubmission?.Points ?? 0);\n            }\n        }\n\n        public int AdminTotal\n        {\n            get\n            {\n                return this.ProblemResults.Sum(x => x.BestSubmission?.Points ?? 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ProblemFullResultViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    public class ProblemFullResultViewModel\n    {\n        public int Id { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public int ProblemOrderBy { get; set; }\n\n        public SubmissionFullResultsViewModel BestSubmission { get; set; }\n\n        public int MaximumPoints { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ProblemResultPairViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    public class ProblemResultPairViewModel\n    {\n        public int Id { get; set; }\n\n        public bool ShowResult { get; set; }\n\n        public BestSubmissionViewModel BestSubmission { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public int ProblemOrderBy { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/ProblemResultViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    using Resource = Resources.Areas.Contests.ViewModels.ProblemsViewModels;\n\n    public class ProblemResultViewModel\n    {\n        public static Expression<Func<Submission, ProblemResultViewModel>> FromSubmission\n        {\n            get\n            {\n                return submission => new ProblemResultViewModel\n                                {\n                                    ProblemId = submission.Problem.Id,\n                                    ParticipantName = submission.Participant.User.UserName,\n                                    MaximumPoints = submission.Problem.MaximumPoints,\n                                    Result = submission.Points\n                                };\n            }\n        }\n\n        [Display(Name = \"Participant\", ResourceType = typeof(Resource))]\n        public string ParticipantName { get; set; }\n\n        [Display(Name = \"Result\", ResourceType = typeof(Resource))]\n        public int Result { get; set; }\n\n        public int MaximumPoints { get; set; }\n\n        public int ProblemId { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/SubmissionFullResultsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class SubmissionFullResultsViewModel\n    {\n        public static Expression<Func<Submission, SubmissionFullResultsViewModel>> FromSubmission\n        {\n            get\n            {\n                return submission => new SubmissionFullResultsViewModel\n                {\n                    Id = submission.Id,\n                    SubmissionType = submission.SubmissionType.Name,\n                    MaxTimeUsed = submission.TestRuns.Max(x => x.TimeUsed),\n                    MaxMemoryUsed = submission.TestRuns.Max(x => x.MemoryUsed),\n                    TestRuns = submission.TestRuns.AsQueryable().Select(TestRunFullResultsViewModel.FromTestRun),\n                    Points = submission.Points,\n                    IsCompiledSuccessfully = submission.IsCompiledSuccessfully\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string SubmissionType { get; set; }\n\n        public IEnumerable<TestRunFullResultsViewModel> TestRuns { get; set; }\n\n        public int? MaxTimeUsed { get; set; }\n\n        public long? MaxMemoryUsed { get; set; }\n\n        public int Points { get; set; }\n\n        public bool IsCompiledSuccessfully { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/SubmissionResultIsCompiledViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class SubmissionResultIsCompiledViewModel\n    {\n        public static Expression<Func<Submission, SubmissionResultIsCompiledViewModel>> FromSubmission\n        {\n            get\n            {\n                return s => new SubmissionResultIsCompiledViewModel\n                {\n                    Id = s.Id,\n                    IsCompiledSuccessfully = s.IsCompiledSuccessfully,\n                    SubmissionDate = s.CreatedOn,\n                    IsCalculated = s.Processed\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        [Display(Name = \"Компилация\")]\n        public bool IsCompiledSuccessfully { get; set; }\n\n        [Display(Name = \"Изпратено на\")]\n        public DateTime SubmissionDate { get; set; }\n\n        public bool IsCalculated { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Results/TestRunFullResultsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Results\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    public class TestRunFullResultsViewModel\n    {\n        public static Expression<Func<TestRun, TestRunFullResultsViewModel>> FromTestRun\n        {\n            get\n            {\n                return testRun => new TestRunFullResultsViewModel\n                {\n                    TestRunId = testRun.Id,\n                    IsZeroTest = testRun.Test.IsTrialTest,\n                    TestId = testRun.TestId,\n                    ResultType = testRun.ResultType,\n                };\n            }\n        }\n\n        public int TestRunId { get; set; }\n\n        public bool IsZeroTest { get; set; }\n\n        public int TestId { get; set; }\n\n        public TestRunResultType ResultType { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Submissions/SubmissionDetailsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Submissions\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n\n    public class SubmissionDetailsViewModel\n    {\n        public static Expression<Func<Submission, SubmissionDetailsViewModel>> FromSubmission\n        {\n            get\n            {\n                return submission => new SubmissionDetailsViewModel\n                {\n                    Id = submission.Id,\n                    UserId = submission.Participant.UserId,\n                    UserName = submission.Participant.User.UserName,\n                    CompilerComment = submission.CompilerComment,\n                    Content = submission.Content,\n                    FileExtension = submission.FileExtension,\n                    CreatedOn = submission.CreatedOn,\n                    IsCompiledSuccessfully = submission.IsCompiledSuccessfully,\n                    IsDeleted = submission.IsDeleted,\n                    Points = submission.Points,\n                    Processed = submission.Processed,\n                    Processing = submission.Processing,\n                    ProblemId = submission.ProblemId,\n                    ProblemName = submission.Problem.Name,\n                    ProcessingComment = submission.ProcessingComment,\n                    SubmissionType = submission.SubmissionType,\n                    TestRuns = submission.TestRuns.AsQueryable().Select(TestRunDetailsViewModel.FromTestRun),\n                    ShowResults = submission.Problem.ShowResults,\n                    ShowDetailedFeedback = submission.Problem.ShowDetailedFeedback\n                };\n            }\n        }\n\n        public IEnumerable<TestRunDetailsViewModel> TestRuns { get; set; }\n\n        public string UserId { get; set; }\n\n        public string UserName { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public int Id { get; set; }\n\n        public string CompilerComment { get; set; }\n\n        public string FileExtension { get; set; }\n\n        public byte[] Content { get; set; }\n\n        public bool IsBinaryFile => !string.IsNullOrWhiteSpace(this.FileExtension);\n\n        public string ContentAsString => this.IsBinaryFile ? \"Binary file.\" : this.Content.Decompress();\n\n        public DateTime CreatedOn { get; set; }\n\n        public bool IsCompiledSuccessfully { get; set; }\n\n        public bool IsDeleted { get; set; }\n\n        public int Points { get; set; }\n\n        public bool Processed { get; set; }\n\n        public bool Processing { get; set; }\n\n        public int? ProblemId { get; set; }\n\n        public string ProcessingComment { get; set; }\n\n        public SubmissionType SubmissionType { get; set; }\n\n        public bool ShowResults { get; set; }\n\n        public bool ShowDetailedFeedback { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Submissions/SubmissionResultViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Submissions\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n    using OJS.Web.ViewModels.TestRun;\n\n    using Resource = Resources.Areas.Contests.ViewModels.SubmissionsViewModels;\n\n    public class SubmissionResultViewModel\n    {\n        public SubmissionResultViewModel()\n        {\n            this.TestRuns = new HashSet<TestRunViewModel>();\n        }\n\n        public static Expression<Func<Submission, SubmissionResultViewModel>> FromSubmission\n        {\n            get\n            {\n                return submission => new SubmissionResultViewModel\n                {\n                    TestRuns = submission.TestRuns.AsQueryable().Select(TestRunViewModel.FromTestRun),\n                    SubmissionDate = submission.CreatedOn,\n                    MaximumPoints = submission.Problem.MaximumPoints,\n                    SubmissionId = submission.Id,\n                    IsCalculated = submission.Processed,\n                    SubmissionPoints = submission.Points,\n                    IsCompiledSuccessfully = submission.IsCompiledSuccessfully,\n                    IsOfficial = submission.Participant.IsOfficial,\n                    ProblemId = submission.ProblemId\n                };\n            }\n        }\n\n        public int SubmissionId { get; set; }\n\n        [Display(Name = \"Problem\", ResourceType = typeof(Resource))]\n        public int? ProblemId { get; set; }\n\n        [Display(Name = \"Type\", ResourceType = typeof(Resource))]\n        public bool IsOfficial { get; set; }\n\n        public short MaximumPoints { get; set; }\n\n        public IEnumerable<TestRunViewModel> TestRuns { get; set; }\n\n        [Display(Name = \"Submission_date\", ResourceType = typeof(Resource))]\n        public DateTime SubmissionDate { get; set; }\n\n        public bool IsCalculated { get; set; }\n\n        [Display(Name = \"Maximum_memory\", ResourceType = typeof(Resource))]\n        public long? MaximumMemoryUsed\n        {\n            get\n            {\n                if (!this.TestRuns.Any())\n                {\n                    return null;\n                }\n\n                return this.TestRuns.Max(x => x.MemoryUsed);\n            }\n        }\n\n        [Display(Name = \"Maximum_time\", ResourceType = typeof(Resource))]\n        public int? MaximumTimeUsed\n        {\n            get\n            {\n                if (!this.TestRuns.Any())\n                {\n                    return null;\n                }\n\n                return this.TestRuns.Max(x => x.TimeUsed);\n            }\n        }\n\n        [Display(Name = \"Points\", ResourceType = typeof(Resource))]\n        public int? SubmissionPoints { get; set; }\n\n        [Display(Name = \"Is_compiled_successfully\", ResourceType = typeof(Resource))]\n        public bool IsCompiledSuccessfully { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Submissions/SubmissionTypeViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Submissions\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class SubmissionTypeViewModel\n    {\n        public static Expression<Func<SubmissionType, SubmissionTypeViewModel>> FromSubmissionType\n        {\n            get\n            {\n                return submission => new SubmissionTypeViewModel\n                                                            {\n                                                                Id = submission.Id,\n                                                                Name = submission.Name\n                                                            };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/ViewModels/Submissions/TestRunDetailsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Contests.ViewModels.Submissions\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    public class TestRunDetailsViewModel\n    {\n        public static Expression<Func<TestRun, TestRunDetailsViewModel>> FromTestRun\n        {\n            get\n            {\n                return test => new TestRunDetailsViewModel\n                {\n                    IsTrialTest = test.Test.IsTrialTest,\n                    CheckerComment = test.CheckerComment,\n                    ExpectedOutputFragment = test.ExpectedOutputFragment,\n                    UserOutputFragment = test.UserOutputFragment,\n                    ExecutionComment = test.ExecutionComment,\n                    Order = test.Test.OrderBy,\n                    ResultType = test.ResultType,\n                    TimeUsed = test.TimeUsed,\n                    MemoryUsed = test.MemoryUsed,\n                    Id = test.Id,\n                    TestId = test.TestId,\n                };\n            }\n        }\n\n        public bool IsTrialTest { get; set; }\n\n        public int Order { get; set; }\n\n        public TestRunResultType ResultType { get; set; }\n\n        public string ExecutionComment { get; set; }\n\n        public string CheckerComment { get; set; }\n\n        public string ExpectedOutputFragment { get; set; }\n\n        public string UserOutputFragment { get; set; }\n\n        public int TimeUsed { get; set; }\n\n        public long MemoryUsed { get; set; }\n\n        public int Id { get; set; }\n\n        public int TestId { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Compete/Index.cshtml",
    "content": "﻿@model OJS.Web.Areas.Contests.ViewModels.Participants.ParticipantViewModel\n\n@using Resource = Resources.Areas.Contests.Views.CompeteIndex;\n@using ContestResource = Resources.Areas.Contests.Views.ContestsDetails;\n\n@{\n    ViewBag.Title = Model.Contest.Name;\n}\n\n@section styles {\n    @Styles.Render(\"~/Content/CodeMirror/codemirror\", \"~/Content/Contests/submission-page\")\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@ContestResource.Home</a></li>\n    <li>@Html.ActionLink(ContestResource.Contests, GlobalConstants.Index, \"List\")</li>\n    <li><a href=\"/Contests#!/List/ByCategory/@Model.Contest.CategoryId/@Model.Contest.CategoryName\">@Model.Contest.CategoryName</a></li>\n    <li class=\"active\">@Model.Contest.Name</li>\n</ol>\n\n<h1>\n    <a href=\"@ContestsHelper.GetUrl(Model.Contest.Id, Model.Contest.Name)\">@Model.Contest.Name</a>\n</h1>\n\n@{\n    var contestIsCompete = Model.ContestIsCompete && Model.Contest.EndTime.HasValue && Model.Contest.EndTime.Value > DateTime.Now;\n    var contestIsPractice = !Model.ContestIsCompete && Model.Contest.PracticeEndTime.HasValue && Model.Contest.PracticeEndTime > DateTime.Now;\n}\n\n<div class=\"row\">\n    <div class=\"col-md-8\">\n        <h2>@Resource.Submit_solution</h2>\n    </div>\n    <div class=\"col-md-4 text-right\" id=\"countdown-timer-container\">\n        @if (contestIsPractice)\n        {\n            <div>@Resource.Practice_end_time: @Model.Contest.PracticeEndTime.Value.ToString(\"hh:mm d.M.yyy\")</div>\n        }\n        <div class=\"clearfix\"></div>\n        <div class=\"pull-right\"><a href=\"@(string.Format(\"/Contests/{0}/Results/Simple/{1}\", ViewBag.CompeteType, Model.Contest.Id))\">@Resource.Results</a></div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        @(Html.Kendo().TabStrip()\n            .Name(\"SubmissionsTabStrip\")\n            .Items(tabstrip =>\n            {\n                foreach (var problem in Model.Contest.Problems)\n                {\n                    tabstrip.Add()\n                        .Text(problem.Name)\n                        .LoadContentFrom(Url.Action(\"Problem\", new { id = problem.ProblemId, controller = ViewBag.CompeteType }));\n                }\n\n                if (!Model.Contest.Problems.Any())\n                {\n                    tabstrip.Add().Text(Resource.No_tasks).Content(Resource.No_tasks_added_yet);\n                }\n                \n                if (User.IsAdmin())\n                {\n                    tabstrip.Add().Text(Resource.Add_task).Action(\"Create\", \"Problems\", new { Area = \"Administration\", Model.Contest.Id }).HtmlAttributes(new { target = \"_blank\" });\n                }\n            })\n            .Events(ev =>\n            {\n                ev.ContentLoad(\"tabStripManager.onContentLoad\");\n                ev.Activate(\"tabStripManager.tabSelected\");\n            })\n        )\n    </div>\n</div>\n\n@{\n    string remainingTimeFormat = string.Format(\"\\\"<div id='countdown-timer'>\" + Resource.Remaining_time_format + \"</div>\\\"\", \"<span id='hours-remaining'></span>\",\n        \"<span id='minutes-remaining'></span>\", \"<span id='seconds-remaining'></span>\");\n}\n\n@section scripts {\n    @Scripts.Render(\"~/bundles/codemirror\")\n    <script src=\"/Scripts/Helpers/test-results.js\"></script>\n    <script src=\"/Scripts/Countdown/countdown.min.js\"></script>\n    <script src=\"/Scripts/Contests/submission-page.js\"></script>\n    <script type=\"text/javascript\">\n        var timeValidator = new submissionTimeValidator();\n\n        var validateSubmit = (function () {\n            var submitTime;\n\n            @if(Model.LastSubmissionTime != null) {\n                <text>\n                    submitTime = new Date(Date.parse(\"@Model.LastSubmissionTime.Value.ToString(\"dd MMM yyyy HH:mm:ss\")\"))\n                </text>\n            };\n\n            var serverTime = new Date(Date.parse(\"@DateTime.Now.ToString(\"dd MMM yyyy HH:mm:ss\")\"));\n\n            var limitBetweenSubmissions = parseInt(@Model.Contest.LimitBetweenSubmissions);\n\n            function validateSubmit() {\n                var validationResult = validateSubmissionContent() && timeValidator.validate(submitTime, limitBetweenSubmissions, serverTime);\n                return validationResult;\n            }\n\n            function validateBinarySubmit(fileInput, size, extensions) {\n                var validationResult = validateBinaryFileExists(fileInput)\n                                        && validateBinaryFileSize(fileInput, size)\n                                        && validateBinaryFileAllowedExtensions(fileInput, extensions)\n                                        && timeValidator.validate(submitTime, limitBetweenSubmissions, serverTime);\n                return validationResult;\n            }\n\n            return {\n                content: validateSubmit,\n                binary : validateBinarySubmit\n            };\n        })();\n\n        @if (contestIsCompete)\n        {\n            <text>\n                calculateRemainingTimeOnClient('countdown-timer-container', @Html.Raw(remainingTimeFormat), @Model.Contest.RemainingTimeInMilliseconds.Value);\n            </text>\n        }\n    </script>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Compete/Register.cshtml",
    "content": "﻿@model OJS.Web.Areas.Contests.ViewModels.Contests.ContestRegistrationViewModel\n\n@using Resource = Resources.Areas.Contests.Views.CompeteRegister\n\n@{\n    ViewBag.Title = Model.ContestName;\n}\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        <h1>@ViewBag.Title</h1>\n    </div>\n</div>\n\n<div class=\"row text-white\">\n    <div class=\"col-md-4\">\n        @using (Html.BeginForm())\n        {\n            @Html.HiddenFor(x => x.ContestId)\n            if (Model.RequirePassword)\n            {\n                <div class=\"form-group\">\n                    <div class=\"editor-field\">\n                        <div class=\"editor-label\">\n                            @Html.LabelFor(x => x.Password)\n                        </div>\n                        @Html.PasswordFor(x => x.Password, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(x => x.Password)\n                    </div>\n                </div>\n            }\n\n            @Html.EditorFor(x => x.Questions)\n            @Html.ValidationMessage(\"Questions\")\n            <input type=\"submit\" value=\"@Resource.Submit\" class=\"btn btn-default\" />\n        }\n    </div>\n</div>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Contests/Details.cshtml",
    "content": "﻿@using OJS.Common.Extensions;\n@using OJS.Common.Models;\n@using OJS.Web.Areas.Contests.ViewModels.Contests\n\n@using Resource = Resources.Areas.Contests.Views.ContestsDetails;\n\n@model ContestViewModel\n\n@{\n    ViewBag.Title = Model.Name;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li>@Html.ActionLink(Resource.Contests, GlobalConstants.Index, \"List\")</li>\n    <li class=\"active\">@Model.Name</li>\n</ol>\n\n<h1 class=\"text-center\">@ViewBag.Title</h1>\n\n<div class=\"row\">\n    <div class=\"col-md-8\">\n        <h3>@Resource.Contest_details</h3>\n        @if (Model.CanBeCompeted && Model.EndTime != null)\n        {\n            <h5>\n                @Resource.Competition_active_until: @Model.EndTime.Value.ToString(\"hh:mm d.M.yyy\")\n            </h5>\n        }\n        @if (Model.CanBePracticed && Model.PracticeEndTime != null)\n        {\n            <h5>@Resource.Practice_active_until: @Model.PracticeEndTime.Value.ToString(\"hh:mm d.M.yyy\")</h5>\n        }\n        @if (!string.IsNullOrEmpty(Model.Description))\n        {\n            @Model.Description\n        }\n        else\n        {\n            <div>@Resource.No_contest_description</div>\n        }\n        <h5>\n            @Resource.Allowed_languages: |\n            @foreach (var submissionType in Model.AllowedSubmissionTypes)\n            {\n                <span>\n                    @Html.ActionLink(\n                        submissionType.Name, \n                        \"BySubmissionType\", \n                        new { controller = \"List\", id = submissionType.Id, submissionTypeName = submissionType.Name.ToUrl() \n                    }) |\n                </span>\n            }\n        </h5>\n        <h5>\n            @Resource.Contest_participants: @Model.OfficialParticipants\n        </h5>\n        <h5>\n            @Resource.Practice_participants: @Model.PracticeParticipants\n        </h5>\n    </div>\n    <div class=\"col-md-4 col-sm-12\" style=\"margin: 0 auto;\">\n        <h3>@Resource.Problems</h3>\n        @if ((Model.CanBePracticed && !Model.HasPracticePassword) || (Model.CanBeCompeted && !Model.HasContestPassword))\n        {\n            foreach (var problem in Model.Problems)\n            {\n                <h4>@problem.Name</h4>\n                foreach (var resource in problem.Resources)\n                {\n                    var resourceLink = string.IsNullOrWhiteSpace(resource.Link) ?\n                                        Url.Action(\"DownloadResource\", new { controller = \"Practice\", id = resource.ResourceId }) : resource.Link;\n                    <p>\n                        @if (resource.ProblemType == ProblemResourceType.ProblemDescription)\n                        {\n                            <span class=\"glyphicon glyphicon-list-alt resource-glyph\"></span>\n                        }\n                        else if (resource.ProblemType == ProblemResourceType.AuthorsSolution)\n                        {\n                            <span class=\"glyphicon glyphicon-thumbs-up resource-glyph\"></span>\n                        }\n                        else if (resource.ProblemType == ProblemResourceType.Video)\n                        {\n                            <span class=\"glyphicon glyphicon-facetime-video resource-glyph\"></span>\n                        }\n                        else\n                        {\n                            <span class=\"glyphicon  glyphicon-question-sign\"></span>\n                        }\n                        <a href=\"@resourceLink\" target=\"_blank\" class=\"resource-link\">@resource.Name</a>\n                    </p>\n                }\n            }\n        }\n        else\n        {\n            <text>\n                <p>@Resource.Problems_are_not_public</p>\n            </text>\n        }\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-12 text-center\">\n        @if (Model.CanBeCompeted)\n        {\n            @Html.ActionLink(Resource.Compete, GlobalConstants.Index, new { controller = \"Compete\", id = Model.Id }, new { @class = \"btn btn-sm btn-success\" })\n        }\n        @if (Model.CanBePracticed)\n        {\n            @Html.ActionLink(Resource.Practice, GlobalConstants.Index, new { controller = \"Practice\", id = Model.Id }, new { @class = \"btn btn-sm btn-primary\" })\n        }\n        @if (User.IsAdmin())\n        {\n            <a class=\"btn btn-sm btn-primary\" href=\"/Contests/Compete/Results/Simple/@Model.Id\">@Resource.Results</a>\n            <a class=\"btn btn-sm btn-primary\" href=\"/Contests/Compete/Results/Full/@Model.Id\">@Resource.Full_results</a>\n            <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Contests/Edit/@Model.Id\">@Resource.Edit</a>\n            <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Problems/Contest/@Model.Id\">@Resource.Problems</a>\n        }\n    </div>\n</div>\n\n@if (User.Identity.IsAuthenticated)\n{\n    Html.RenderPartial(\"_AllContestSubmissionsByUser\");\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/List/ByCategory.cshtml",
    "content": "﻿@model OJS.Web.Areas.Contests.ViewModels.Contests.ContestCategoryViewModel\n\n@using Resource = Resources.Areas.Contests.Views.ListByCategory;\n\n<h3>@Model.CategoryName</h3>\n<div>\n    @if (Model.Contests.Any())\n    {\n        <table class=\"table table-striped\">\n            @foreach (var contest in Model.Contests)\n            {\n                <tr>\n                    <td>\n                        <a href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\">@contest.Name</a>\n                    </td>\n                    <td>\n                        @if (contest.CanBeCompeted)\n                        {\n                            @Html.RouteLink(Resource.Compete, \"Contests_compete\", new { id = contest.Id, action = GlobalConstants.Index }, new { @class = \"btn btn-sm btn-success\" })\n                            if (contest.HasContestPassword)\n                            {\n                                <div class=\"glyphicon glyphicon-lock text-white\" title=\"@Resource.Has_compete_password\"></div>\n                            }\n                            if (contest.HasContestQuestions)\n                            {\n                                <div class=\"glyphicon glyphicon-question-sign text-white\" title=\"@Resource.Has_questions_to_be_answered\"></div>\n                            }\n                        }\n                        @* TODO: Refactor these checks *@\n                        @if (contest.CanBeCompeted || contest.ResultsArePubliclyVisible || User.IsAdmin())\n                        {\n                            <div class=\"glyphicon glyphicon-user text-white\" title=\"@Resource.Participant_count\"></div> <span>@contest.OfficialParticipants</span>\n                        }\n                        @if (contest.ResultsArePubliclyVisible || User.IsAdmin())\n                        {\n                            <a class=\"btn btn-sm\" href=\"/Contests/Compete/Results/Simple/@contest.Id\">@Resource.Results</a>\n                        }\n                    </td>\n                    <td>\n                        @if (contest.CanBePracticed)\n                        {\n                            @Html.RouteLink(Resource.Practice, \"Contests_practice\", new { id = contest.Id, action = GlobalConstants.Index }, new { @class = \"btn btn-sm btn-primary\" })\n                            if (contest.HasPracticePassword)\n                            {\n                                <div class=\"glyphicon glyphicon-lock text-white\" title=\"@Resource.Has_practice_password\"></div>\n                            }\n                            if (contest.HasPracticeQuestions)\n                            {\n                                <div class=\"glyphicon glyphicon-question-sign text-white\" title=\"@Resource.Has_questions_to_be_answered\"></div>\n                            }\n                            <div class=\"glyphicon glyphicon-user text-white\" title=\"@Resource.Participant_count\"></div> <span>@contest.PracticeParticipants</span>\n                        }\n                    </td>\n                    <td>\n                        <div class=\"glyphicon glyphicon-file text-white\" title=\"@Resource.Problems_count\"></div> <span>@contest.ProblemsCount</span>\n                    </td>\n                    @if (User.IsAdmin())\n                    {\n                        <td>\n                            <a href=\"/Administration/Contests/Edit/@contest.Id\"><span class='glyphicon glyphicon-pencil text-primary' title='@Resource.Edit'></span></a>\n                            <a href=\"/Administration/Problems/Contest/@contest.Id\"><span class='glyphicon glyphicon-list text-primary' title='@Resource.Problems'></span></a>\n                        </td>\n                    }\n                </tr>\n            }\n        </table>\n    }\n    else\n    {\n        if (Model.SubCategories.Count() != 0)\n        {\n            <table class=\"table table-striped\">\n                @foreach (var subCategory in Model.SubCategories)\n                {\n                    string url;\n                    url = string.Format(ViewBag.IsAjax ? \"#!/List/ByCategory/{0}/{1}\" : \"/Contests/List/ByCategory/{0}/{1}\", subCategory.Id, subCategory.NameUrl);\n                    <tr>\n                        <td>\n                            <a href=\"@url\" class='subcategory' data-id=\"@subCategory.Id\">@subCategory.Name</a>\n                        </td>\n                    </tr>\n                }\n            </table>\n        }\n        else\n        {\n            <p class=\"lead text-warning\">@Resource.Category_is_empty</p>\n        }\n    }\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/List/BySubmissionType.cshtml",
    "content": "﻿@using OJS.Web.Areas.Contests.ViewModels.Contests\n@using Resource = Resources.Areas.Contests.Views.ListByType\n\n@model IEnumerable<ContestViewModel>\n\n@{\n    ViewBag.Title = string.Format(Resource.Contests_with_allowed, ViewBag.SubmissionType);\n}\n\n<h2>\n    @ViewBag.Title\n</h2>\n\n@(Html.Kendo()\n        .Grid<ContestViewModel>()\n        .Name(\"Contests\")\n        .BindTo(Model)\n        .Columns(col =>\n        {\n            col.Bound(x => x.Name).ClientTemplate(\"<a href='/Contests/#:Id#/#:Name.replace(/ |\\\\.|[0-9]/g, '-')#'>#:Name#</a>\");\n        }).DataSource(data =>\n        {\n            data.Ajax().ServerOperation(false).PageSize(10);\n        })\n        .Pageable(page => page.Enabled(true))\n)"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/List/Index.cshtml",
    "content": "﻿@using OJS.Web.Areas.Contests.ViewModels.Contests\n@using Resource = Resources.Areas.Contests.Views.ListIndex\n\n@model IEnumerable<ContestViewModel>\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li class=\"active\">@Resource.Contests</li>\n</ol>\n\n@section Scripts {\n    <script src=\"/Scripts/Contests/list-categories-page.js\"></script>\n}\n\n<div class=\"row\">\n    <div class=\"col-md-3\">\n        <h2>@ViewBag.Title</h2>\n        @(Html.Kendo().TreeView()\n              .Name(\"contestsCategories\")\n              .DataTextField(\"Name\")\n              .DataSource(dataSource => dataSource\n                          .Model(x =>\n                          {\n                              x.Id(\"Id\");\n                              x.HasChildren(\"HasChildren\");\n                          })\n                          .Read(read => read\n                              .Action(\"ReadCategories\", \"List\", new { area = \"Contests\" })))\n              .Events(x =>\n              {\n                  x.Select(\"expander.categorySelected\");\n                  x.DataBound(\"expander.onDataBound\");\n              })\n        )\n        @if (User.IsAdmin())\n        {\n            <br />\n            <p class=\"pull-left\"><a class=\"btn btn-primary\" href=\"/Administration/ContestCategories\">@Resource.Categories &raquo;</a></p>\n            <p class=\"pull-right\"><a class=\"btn btn-primary\" href=\"/Administration/ContestCategories/Hierarchy\">@Resource.Hierarchy &raquo;</a></p>\n            <div class=\"clearfix\"></div>\n        }\n    </div>\n    <div class=\"col-md-9\">\n        <div id=\"contestsList\">\n        </div>\n    </div>\n</div>\n\n<script>\n    var contestsList = $('#contestsList');\n    $.get('/Contests/List/ByCategory/', null, function (data) {\n        contestsList.append(data);\n    });\n</script>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/ParticipantsAnswers/Details.cshtml",
    "content": "﻿@model int\n\n@using GeneralResource = Resources.Areas.Administration.AdministrationGeneral;\n\n@{\n    ViewBag.Title = \"Информация за преподаватели\";\n    const string ControllerName = \"ParticipantsAnswers\";\n}\n\n<h1>@ViewBag.Title</h1>\n\n<input id=\"ContestId\" type=\"hidden\" data-contest-id=\"@Model\" />\n\n@(Html.Kendo()\n    .Grid<OJS.Web.Areas.Contests.ViewModels.ParticipantsAnswers.ParticipantsAnswersViewModel>()\n    .Name(\"DataGrid\")\n    .Columns(columns =>\n    {\n        columns.Bound(x => x.ParticipantUsername).Width(180).Title(\"Потребител\");\n        columns.Bound(x => x.ParticipantFullName).Width(240).Title(\"Пълно име\");\n        columns.Bound(x => x.Answer).Title(\"Преподавател\");\n        columns.Bound(x => x.Points).Title(\"Точки\");\n    })\n    .ToolBar(toolbar =>\n    {\n        //toolbar.Custom().Text(GeneralResource.Back_to_navigation).Action(\"Navigation\", \"Administration\", new { Area = \"\" }).Name(\"custom-toolbar-button\");\n        toolbar.Custom().Text(GeneralResource.Export_to_excel).Name(\"custom-toolbar-button\").HtmlAttributes(new { id = \"export\" }).Url(Url.Action(\"ExportToExcel\", ControllerName, new { page = 1, pageSize = \"~\", filter = \"!!\", sort = \"~\" }));\n    })\n    .Editable(editable =>\n    {\n        editable.Mode(GridEditMode.PopUp);\n        editable.Window(w => w.Title(ViewBag.Title));\n    })\n    .ColumnMenu()\n    .Events(e => e.DataBound(\"onDataBound\"))\n    .Pageable(x => x.Refresh(true))\n    .Sortable(x => x.Enabled(true).AllowUnsort(false))\n    .Filterable(x => x.Enabled(true))\n    .Reorderable(x => x.Columns(true))\n    .Resizable(x => x.Columns(true))\n    .DataSource(datasource => datasource\n        .Ajax()\n        .ServerOperation(true)\n        .Model(model =>\n        {\n            model.Id(m => m.Id);\n        })\n        .Sort(sort => sort.Add(x => x.Answer))\n        .PageSize(50)\n        .Read(read => read.Action(\"ReadData\", ControllerName, new { contestId = Model }))\n        .Update(update => update.Action(\"Update\", ControllerName))\n        .Events(ev => ev.Error(\"validateModelStateErrors\"))\n    )\n)\n\n@section scripts {\n    <script type=\"text/javascript\">\n        function onDataBound(e) {\n            CreateExportToExcelButton();\n\n            var contestId = $('#ContestId').data('contest-id');\n            var href = $('#export').attr('href');\n\n            href = href.replace('ExportToExcel', 'ExcelExport');\n            href += '&contestId=' + contestId;\n\n            $('#export').attr('href', href);\n            console.log($('#export'));\n        }\n    </script>\n    <script src=\"~/Scripts/Administration/administration-global.js\"></script>\n}\n\n\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Results/Full.cshtml",
    "content": "﻿@model OJS.Web.Areas.Contests.ViewModels.Results.ContestFullResultsViewModel\n\n@using OJS.Common.Models\n@using Resource = Resources.Areas.Contests.Views.ResultsFull\n@using OJS.Web.Areas.Contests.Controllers\n\n@{\n    ViewBag.Title = string.Format(Resource.Title, Model.Name);\n    ViewBag.Subtitle = string.Format(Resource.Subtitle, Model.Results.Count());\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li><a href=\"@ContestsHelper.GetUrl(Model.Id, Model.Name)\">@Model.Name</a></li>\n    <li class=\"active\">@Resource.Full_results</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n<h2>\n    @ViewBag.Subtitle\n    <span>@Html.ActionLink(Resource.Public_results, \"Simple\", new { id = Model.Id, official = ViewBag.IsOfficial }, new { @class = \"btn btn-primary\" })</span>\n\n    @if (User.IsAdmin() || User.IsInRole(\"KidsTeacher\"))\n    {\n        <span>@Html.ActionLink(\"Преподаватели\", \"Details\", \"ParticipantsAnswers\", new { id = Model.Id }, new { @class = \"btn btn-primary\", style = \"margin-left: 20px\" })</span>\n    }\n</h2>\n\n@{Html.RenderAction(\"Stats\", new { viewModel = Model });}\n\n@if (ViewBag.IsOfficial)\n{\n    <h4>@Ajax.ActionLink(Resource.Average_result_by_minutes, \"StatsChart\", new { contestId = Model.Id }, new AjaxOptions { UpdateTargetId = \"StatsChartContainer\", InsertionMode = InsertionMode.Replace })</h4>\n    <div id=\"StatsChartContainer\"></div>\n}\n\n<br />\n\n<script src=\"/Scripts/Helpers/test-results.js\"></script>\n<table class=\"table table-striped\">\n    <tr>\n        <th>No</th>\n        <th>@Resource.User</th>\n        <th>@Resource.UserFullName</th>\n        @{\n            string isOfficial = ViewBag.IsOfficial ? CompeteController.CompeteUrl : CompeteController.PracticeUrl;\n            int problemNumber = 0;\n        }\n        @foreach (var problem in Model.Problems)\n        {\n            <th><a href=\"/Contests/@isOfficial/Index/@Model.Id#@problemNumber\">@problem.Name</a></th>\n            problemNumber++;\n        }\n        <th>@Resource.Total</th>\n    </tr>\n    @{ var count = 1; }\n    @foreach (var participant in Model.Results)\n    {\n        <tr>\n            <td><strong>@count.</strong></td>\n            <th><a href=\"/Users/@participant.ParticipantUsername\">@participant.ParticipantUsername</a></th>\n            <td>@participant.ParticipantFullName</td>\n            @foreach (var problemResult in participant.ProblemResults)\n            {\n                <td style=\"white-space: nowrap\">\n                    @if (problemResult.BestSubmission == null)\n                    {\n                        <span>@Resource.No_solution</span>\n                    }\n                    else\n                    {\n                        <strong><a href=\"/Contests/Submissions/View/@problemResult.BestSubmission.Id\">@problemResult.BestSubmission.Points / @problemResult.MaximumPoints</a></strong> @problemResult.BestSubmission.SubmissionType\n                        <br />\n                        if (!problemResult.BestSubmission.IsCompiledSuccessfully)\n                        {\n                            @:Compilation failed!\n                        }\n                        foreach (var testRun in problemResult.BestSubmission.TestRuns)\n                        {\n                            var style = testRun.IsZeroTest ? \"-ms-opacity: 0.3; opacity: 0.3\" : string.Empty;\n                            switch (testRun.ResultType)\n                            {\n                                case TestRunResultType.CorrectAnswer:<span style=\"@style\" class=\"glyphicon glyphicon-ok text-success\" title=@Resource.Answer_correct></span>break;\n                                case TestRunResultType.WrongAnswer:<span style=\"@style\" class=\"glyphicon glyphicon-remove text-danger\" title=@Resource.Answer_incorrect></span>break;\n                                case TestRunResultType.TimeLimit:<span style=\"@style\" class=\"glyphicon glyphicon-time text-danger\" title=@Resource.Time_limit></span>break;\n                                case TestRunResultType.MemoryLimit:<span style=\"@style\" class=\"glyphicon glyphicon-hdd text-danger\" title=@Resource.Memory_limit></span>break;\n                                case TestRunResultType.RunTimeError:<span style=\"@style\" class=\"glyphicon glyphicon-asterisk text-danger\" title=@Resource.Runtime_error></span>break;\n                            }\n                        }\n                    }\n                </td>\n            }\n            <td>@participant.Total</td>\n        </tr>\n        { count++; }\n    }\n</table>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Results/Simple.cshtml",
    "content": "﻿@model OJS.Web.Areas.Contests.ViewModels.Results.ContestResultsViewModel\n\n@using OJS.Web.Areas.Contests.Controllers\n@using OJS.Web.ViewModels.Shared\n@using Resource = Resources.Areas.Contests.Views.ResultsSimple\n\n@{\n    ViewBag.Title = string.Format(Resource.Title, Model.Name);\n    ViewBag.Subtitle = string.Format(Resource.Subtitle, Model.TotalResults);\n    string isOfficial = ViewBag.IsOfficial ? CompeteController.CompeteUrl : CompeteController.PracticeUrl;\n}\n\n@section Styles {\n    <link href=\"/Content/Contests/results-page.css\" rel=\"stylesheet\" />\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li><a href=\"@ContestsHelper.GetUrl(Model.Id, Model.Name)\">@Model.Name</a></li>\n    <li class=\"active\">@Resource.Simple_results</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n<h2>\n    @ViewBag.Subtitle\n\n    @if (User.IsAdmin())\n    {\n        <span>@Html.ActionLink(Resource.Detailed_results, \"Full\", new { id = Model.Id, official = ViewBag.IsOfficial }, new { @class = \"btn btn-primary\" })</span>\n    }\n\n    @if (User.IsAdmin() || User.IsInRole(\"KidsTeacher\"))\n    {\n        <span>@Html.ActionLink(\"Преподаватели\", \"Details\", \"ParticipantsAnswers\", new { id = Model.Id }, new { @class = \"btn btn-primary\", style = \"margin-left: 20px\" })</span>\n    }\n</h2>\n\n@if (Model.AllPages > 1)\n{\n    @Html.Partial(\"_Pagination\", new PaginationViewModel { AllPages = Model.AllPages, CurrentPage = Model.CurrentPage, Url = \"/Contests/\" + isOfficial + \"/Results/Simple/\" + Model.Id + \"?page=\" })\n}\n\n<table class=\"table table-responsive table-bordered table-striped text-white text-center width100percent\">\n    <thead>\n        <tr>\n            <th>№</th>\n            <th class=\"text-center\">@Resource.User</th>\n            <th class=\"text-center\">@Resource.UserFullName</th>\n            @{\n                int problemCounter = 0;\n                bool displayLink = Model.ContestCanBeCompeted || Model.ContestCanBePracticed;\n                var contestLink = Model.ContestCanBeCompeted ? \"Compete\" : \"Practice\";\n            }\n            @foreach (var problem in Model.Problems)\n            {\n                if (problem.ShowResults || (Model.ContestCanBePracticed && !ViewBag.IsOfficial) || User.IsAdmin())\n                {\n                <th class=\"text-center\">\n                    @if (displayLink)\n                    {\n                        <a href=\"/Contests/@contestLink/Index/@Model.Id#@problemCounter\">@problem.Name</a>\n                        problemCounter++;\n                    }\n                    else\n                    {\n                        @problem.Name\n                    }\n                </th>\n                }\n            }\n            <th class=\"text-center\">@Resource.Total</th>\n        </tr>\n    </thead>\n    <tbody>\n        @{ var results = Model.Results.ToList(); }\n        @for (int i = 0; i < results.Count; i++)\n        {\n            var participant = results[i];\n            string className = User.Identity.Name == participant.ParticipantUsername ? \"success\" : string.Empty;\n            <tr class=\"@className\">\n                <td>@((Model.CurrentPage - 1) * ResultsController.ResultsPageSize + i + 1)</td>\n                <td><a href=\"/Users/Profile?id=@participant.ParticipantUsername\">@participant.ParticipantUsername</a></td>\n                <td>@participant.ParticipantFullName</td>\n                @foreach (var participantResult in participant.ProblemResults)\n                {\n                    if (User.IsAdmin())\n                    {\n                        if (participantResult.BestSubmission == null)\n                        {\n                    <td>0</td>\n                        }\n                        else\n                        {\n                    <td><a href=\"/Contests/Submissions/View/@participantResult.BestSubmission.Id\">@participantResult.BestSubmission.Points</a></td>\n                        }\n                    }\n                    else if (participantResult.ShowResult)\n                    {\n                        if (participantResult.BestSubmission == null)\n                        {\n                    <td>0</td>\n                        }\n                        else\n                        {\n                    <td>@participantResult.BestSubmission.Points</td>\n                        }\n                    }\n                }\n                @if (User.IsAdmin())\n                {\n                    <td>@participant.AdminTotal</td>\n                }\n                else\n                {\n                    <td>@participant.Total</td>\n                }\n            </tr>\n        }\n    </tbody>\n</table>\n\n@if (Model.AllPages > 1)\n{\n    @Html.Partial(\"_Pagination\", new PaginationViewModel { AllPages = Model.AllPages, CurrentPage = Model.CurrentPage, Url = \"/Contests/\" + isOfficial + \"/Results/Simple/\" + Model.Id + \"?page=\" })\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Results/_StatsChartPartial.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Contests.Views.Partials.StatsPartial;\n@model int\n\n@(Html.Kendo().Chart<OJS.Web.Areas.Contests.ViewModels.Contests.ContestStatsChartViewModel>()\n    .Name(\"AveragePointsChart\")\n    .HtmlAttributes(new { style = \"height: 400px;\" })\n    .Title(Resource.Points_label)\n    .Legend(legend => legend.Visible(false))\n    .DataSource(ds => ds.Read(read => read.Action(\"GetParticipantsAveragePoints\", \"Results\", new { id = Model })))\n    .Series(series =>\n    {\n        series.Line(model => model.AverageResult).Name(Resource.Points_label).Tooltip(x => x.Format(\"0.000\"));\n    })    \n    .CategoryAxis(axis => axis\n        .Categories(model => model.DisplayValue)\n        .Labels(labels => labels.Rotation(-90))\n    )\n    .Tooltip(tooltip => tooltip\n        .Visible(true)\n        .Shared(true)\n    )\n)\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Results/_StatsPartial.cshtml",
    "content": "﻿@using Resource = Resources.Areas.Contests.Views.Partials.StatsPartial;\n@model OJS.Web.Areas.Contests.ViewModels.Contests.ContestStatsViewModel\n\n<br />\n<h4>@Resource.General_statistics</h4>\n<table class=\"table table-bordered table-striped\">\n    <thead>\n        <tr>\n            <th>\n                @Resource.Zero_points\n            </th>\n            <th>\n                @Resource.Max_points\n            </th>\n            <th>\n                @Resource.Average_result\n            </th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>\n                @Model.MinResultsCount @Resource.Contestants - (<strong>@Model.MinResultsPercent.ToString(\"0.00%\")</strong>)\n            </td>\n            <td>\n                @Model.MaxResultsCount @Resource.Contestants - (<strong>@Model.MaxResultsPercent.ToString(\"0.00%\")</strong>)\n            </td>\n            <td>\n                <strong>@Model.AverageResult.ToString(\"0.000\")</strong> @Resource.Points\n            </td>\n        </tr>\n    </tbody>\n</table>\n\n<br />\n<h4>@Resource.Participants_by_points</h4>\n<table class=\"table table-bordered table-striped\">\n    <thead>\n        <tr>\n            @foreach (var item in Model.StatsByPointsRange)\n            {\n                <th>\n                    @item.PointsFrom - @item.PointsTo @Resource.Points\n                </th>\n            }\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            @foreach (var item in Model.StatsByPointsRange)\n            {\n                <td>\n                    @item.Participants @Resource.Contestants - (<strong>@item.PercentOfAllParticipants.ToString(\"0.00%\")</strong>)\n                </td>\n            }\n        </tr>\n    </tbody>\n</table>\n\n<br />\n<h4>@Resource.Max_result_for_task</h4>\n<table class=\"table table-bordered table-striped\">\n    <thead>\n        <tr>\n            @foreach (var item in Model.StatsByProblem)\n            {\n                <th>\n                    @item.Name - @item.MaxPossiblePoints @Resource.Max_points_label\n                </th>\n            }\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            @foreach (var item in Model.StatsByProblem)\n            {\n                <td>\n                    @item.MaxResultsCount @Resource.Contestants - (<strong>@item.MaxResultsPercent.ToString(\"0.##%\")</strong>)\n                </td>\n            }\n        </tr>\n    </tbody>\n</table>\n\n<br />"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Shared/_AllContestSubmissionsByUser.cshtml",
    "content": "﻿@using OJS.Web.Areas.Contests.ViewModels.Contests\n@using OJS.Web.Areas.Contests.ViewModels.Problems\n@using OJS.Web.Areas.Contests.ViewModels.Submissions\n@using Resource = Resources.Areas.Contests;\n\n\n@model ContestViewModel\n\n<script src=\"/Scripts/Helpers/test-results.js\"></script>\n<script src=\"/Scripts/Contests/submission-page.js\"></script>\n\n<h2>@Resource.Shared.ContestsAllContestSubmissionsByUser.User_submission</h2>\n\n@{\n    var clientTemplate = \"#= IsCalculated ? \" +\n                            \"IsCompiledSuccessfully ? \" +\n                                \"displayTestRuns(TestRuns).concat(\" +\n                                    \" SubmissionPoints.toString().concat(' / ').concat(MaximumPoints))\" +\n                                        \" : '\" + Resource.Shared.ContestsAllContestSubmissionsByUser.Compile_time_error + \"' \" +\n                                            \": '\" + Resource.Shared.ContestsAllContestSubmissionsByUser.Not_processed + \"' #\";\n}\n\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        @(Html.Kendo()\n            .Grid<SubmissionResultViewModel>()\n            .Name(\"UserSubmissionsGrid\")\n            .Columns(col =>\n            {\n                col.ForeignKey(\"ProblemId\", (IEnumerable<ProblemListItemViewModel>)ViewBag.ContestProblems, \"ProblemId\", \"Name\");\n                col.Bound(model => model.SubmissionPoints).ClientTemplate(clientTemplate);\n                col.Template(@<text></text>)\n                    .Title(Resource.ViewModels.SubmissionsViewModels.Time_and_memory)\n                    .ClientTemplate(\"#= IsCalculated && IsCompiledSuccessfully ? displayMaximumValues(MaximumMemoryUsed, MaximumTimeUsed,\"\n                                    + \"'\" + Resource.Shared.ContestsAllContestSubmissionsByUser.Memory + \"','\"\n                                    + Resource.Shared.ContestsAllContestSubmissionsByUser.Time + \"'\" + \") : '---' #\");\n                col.Bound(model => model.IsOfficial).ClientTemplate(\"#: IsOfficial ? '\" + Resource.Shared.ContestsAllContestSubmissionsByUser.Compete + \"' : '\" + Resource.Shared.ContestsAllContestSubmissionsByUser.Practice + \"'#\");\n                col.Bound(model => model.SubmissionDate).Width(300).ClientTemplate(\"#= kendo.format('{0:HH:mm:ss dd.MM.yyyy}', SubmissionDate) # <a href='/Contests/Submissions/View/#=SubmissionId#' target='_blank' class='view-submission-button btn btn-default pull-right'>\" + Resource.Shared.ContestsAllContestSubmissionsByUser.View + \"</div>\");\n            })\n            .DataSource(data =>\n            {\n                data.Ajax()\n                    .Sort(sort => sort.Add(\"SubmissionDate\").Descending())\n                    .Read(read => read.Action(\"UserSubmissions\", \"Contests\", new { contestId = Model.Id }))\n                    .PageSize(10);\n            })\n            .Sortable(sort =>\n            {\n                sort.Enabled(true);\n            })\n            .Filterable(filter =>\n            {\n                filter.Enabled(true);\n            })\n            .Pageable(page =>\n            {\n                page.Info(false);\n                page.Refresh(true);\n            })\n            .HtmlAttributes(new { @class = \"problem_submit_grid\" })\n        )\n    </div>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Shared/_ProblemPartial.cshtml",
    "content": "﻿@using OJS.Web.Areas.Contests.ViewModels.Contests\n@using OJS.Web.Areas.Contests.ViewModels.Submissions\n@using OJS.Web.Areas.Contests.ViewModels.Results\n@using OJS.Common.Models;\n@using Resource = Resources.Areas.Contests.Shared.ContestsProblemPartial\n\n@model ContestProblemViewModel\n\n<h2>@Model.Name</h2>\n\n<div class=\"row\">\n    @if (User.IsAdmin())\n    {\n        <div class=\"col-md-12\">\n            @Html.ActionLink(Resource.Participants_admin_button, \"Contest\", \"Participants\", new { Area = \"Administration\", Id = Model.ContestId }, new { @class = \"btn btn-sm btn-primary\" })\n            @Html.ActionLink(Resource.Tests_admin_button, \"Problem\", \"Tests\", new { Area = \"Administration\", Id = Model.ProblemId }, new { @class = \"btn btn-sm btn-primary\" })\n            @Html.ActionLink(Resource.Change_admin_button, \"Edit\", \"Problems\", new { Area = \"Administration\", Id = Model.ProblemId }, new { @class = \"btn btn-sm btn-primary\" })\n            @Html.ActionLink(Resource.Delete_admin_button, \"Delete\", \"Problems\", new { Area = \"Administration\", Id = Model.ProblemId }, new { @class = \"btn btn-sm btn-primary\" })\n        </div>\n    }\n    <div class=\"col-md-12\">\n        <div id=\"notify-container-@(Model.ProblemId)\">\n        </div>\n    </div>\n</div>\n\n@{\n    var className = Model.ShowResults ? \"col-lg-8\" : \"col-lg-12\";\n}\n\n<div class=\"row\">\n    <div class=\"@className\">\n        <div class=\"materials\">\n            @foreach (var resource in Model.Resources)\n            {\n                var resourceLink = resource.ProblemType == ProblemResourceType.Video ? resource.Link : Url.Action(\"DownloadResource\", new { controller = ViewBag.CompeteType, id = resource.ResourceId });\n\n                if (resource.ProblemType == ProblemResourceType.ProblemDescription)\n                {\n                    <span class=\"glyphicon glyphicon-list-alt resource-glyph\"></span>\n                }\n                else if (resource.ProblemType == ProblemResourceType.AuthorsSolution)\n                {\n                    <span class=\"glyphicon glyphicon-thumbs-up resource-glyph\"></span>\n                }\n                else if (resource.ProblemType == ProblemResourceType.Video)\n                {\n                    <span class=\"glyphicon glyphicon-facetime-video resource-glyph\"></span>\n                }\n                else\n                {\n                    <span class=\"glyphicon glyphicon-question-sign\"></span>\n                }\n                <a href=\"@resourceLink\" target=\"_blank\" class=\"resource-link\">@resource.Name</a>\n            }\n\n            @if (User.IsInRole(\"Administrator\"))\n            {\n                <a href=\"/Administration/Problems/Resource/@Model.ProblemId\" target=\"_blank\" class=\"resource-link\">Администрация</a>\n            }\n        </div>\n        <div class=\"submision\">\n            @using (Ajax.BeginForm(\"Submit\",\n                new { controller = ViewBag.CompeteType, id = Model.ContestId },\n                new AjaxOptions\n                    {\n                        OnSuccess = \"messageNotifier.notifySuccess\",\n                        OnFailure = \"messageNotifier.notifyFailure\",\n                        OnBegin = \"validateSubmit.content\"\n                    },\n                new { id = \"problem_\" + Model.ProblemId }))\n            {\n                @Html.HiddenFor(x => x.ProblemId)\n                <div id=\"submisionDataFields\">\n                    <div id=\"SourceCodeInputFields_@Model.ProblemId\">\n                        <textarea class=\"code-for-problem\" id=\"code-problem-@Model.ProblemId\" name=\"Content\"></textarea>\n                    </div>\n                    <div id=\"FileUploadInputFields_@Model.ProblemId\">\n                        @(Html.Kendo().Upload().Name(\"File\").Multiple(false).ShowFileList(true).HtmlAttributes(new { id = \"file-problem-\" + Model.ProblemId }))\n                        <div id=\"FileUploadAllowedFileExtensions_@Model.ProblemId\"></div>\n                    </div>\n                </div>\n                <div class=\"col-md-12\">\n                    <div class=\"pull-left submit-container\">\n                        <strong>@Resource.Allowed_working_time:</strong> @string.Format(\"{0:0.00}\", Model.TimeLimit) sec.\n                        <br />\n                        <strong>@Resource.Allowed_memory:</strong> @string.Format(\"{0:0.00}\", Model.MemoryLimit) MB\n                        <br />\n                        @if (Model.FileSizeLimit.HasValue)\n                        {\n                            <strong>Size limit:</strong> @(string.Format(\"{0:0.00}\", Model.FileSizeLimit.Value)) @:KB\n                            <br />\n                        }\n                        \n                        <strong>Checker:</strong> @Model.CheckerName <span class=\"glyphicon glyphicon-question-sign\" id=\"checkers-tooltip\"></span>\n                        @if (!string.IsNullOrWhiteSpace(Model.CheckerDescription))\n                        {\n                            @:(@Model.CheckerDescription)\n                        }\n                    </div>\n                    <div class=\"submit-container pull-right\">\n                        <script>\n                            function onSubmissionTypeChange() {\n                                var index = this.selectedIndex;\n                                var dataItem = this.dataItem(index);\n                                var form = $(\"#problem_@Model.ProblemId\");\n                                var fileUpload = $(\"#FileUploadInputFields_@Model.ProblemId\");\n                                var codeArea = $(\"#SourceCodeInputFields_@Model.ProblemId\");\n                                var fileExtensionsInfo = $(\"#FileUploadAllowedFileExtensions_@Model.ProblemId\");\n                                var fileInput;\n                                initFileInput();\n                                \n                                function submitHandler() {\n                                    var size = parseFloat(\"@(Model.FileSizeLimit)\") * 1024;\n                                    var extensions = dataItem.AllowedFileExtensions.split(',');\n                                    return validateSubmit.binary(fileInput[0], size, extensions);\n                                }\n\n                                function initFileInput() {\n                                    fileInput = $('#file-problem-@Model.ProblemId');\n                                }\n\n                                if (fileInput.data('kendoUpload')) {\n                                    var kendoUpload = fileInput.data('kendoUpload');\n                                    kendoUpload.bind('remove', function () {\n                                        initFileInput();\n                                    });\n\n                                    kendoUpload.bind('select', function () {\n                                        initFileInput();\n                                    });\n                                }\n\n                                if (dataItem.AllowBinaryFilesUpload) {\n                                    form.attr(\"action\", form.attr(\"action\").replace(\"/Submit/\", \"/SubmitBinaryFile/\") + '?returnProblem=' + getSelectedIndexFromHashtag());\n                                    form.attr(\"data-ajax\", \"false\");\n                                    form.bind('submit', submitHandler);\n                                    fileUpload.show();\n                                    codeArea.hide();\n                                    fileExtensionsInfo.html(\"<b>Allowed file extensions:</b> \" + dataItem.AllowedFileExtensions);\n                                } else {\n                                    form.attr(\"action\", form.attr(\"action\").replace(\"/SubmitBinaryFile/\", \"/Submit/\"));\n                                    form.attr(\"data-ajax\", \"true\");\n                                    form.unbind('submit', submitHandler);\n                                    fileUpload.hide();\n                                    codeArea.show();\n                                }\n                            }\n                        </script>\n                        @(Html.Kendo().DropDownList()\n                              .Name(\"SubmissionTypeId\")\n                              .DataTextField(\"Text\")\n                              .DataValueField(\"Value\")\n                              .Events(ev => ev.Change(\"onSubmissionTypeChange\").DataBound(\"onSubmissionTypeChange\"))\n                              .DataSource(data => data.Read(\"GetAllowedSubmissionTypes\", ViewBag.CompeteType, new { id = Model.ContestId }))\n                              .HtmlAttributes(new { id = \"dropdown_\" + Model.ProblemId }))\n                        <input type=\"submit\" value=\"@Resource.Submit\" class=\"k-button submision-submit-button\" />\n                    </div>\n                </div>\n                <div class=\"clearfix\"></div>\n            }\n        </div>\n    </div>\n\n    @{\n        var participantRowTemplate = \"#= ParticipantName === '\" + User.Identity.Name + \"' ? \\\"<tr class='success'>\\\" : \\\"<tr>\\\"#\" +\n            \"<td>#:ParticipantName#</td>\" + \"<td>#:Result# / #:MaximumPoints#</td></tr>\";\n    }\n\n    @if (Model.ShowResults)\n    {\n        <div class=\"col-lg-4 problem-result-container visible-lg\">\n            @(Html.Kendo().Grid<ProblemResultViewModel>()\n                .Name(\"ContestResults_\" + Model.ProblemId)\n                .ToolBar(tool => tool.Template(Resource.Problem_results))\n                .Columns(col =>\n                {\n                    col.Bound(x => x.ParticipantName).Width(100);\n                    col.Bound(x => x.Result).Width(80);\n                })\n                .DataSource(data =>\n                {\n                    data.Ajax()\n                        .Sort(sort =>\n                            {\n                                sort.Add(x => x.Result).Descending();\n                                sort.Add(x => x.ParticipantName).Ascending();\n                            })\n                        .Read(\"ByProblem\", \"Results\", new { official = ViewBag.IsOfficial, id = Model.ProblemId })\n                        .PageSize(8);\n                })\n                .Filterable(x => x.Enabled(false))\n                .Pageable(x =>\n                {\n                    x.ButtonCount(4);\n                    x.Refresh(true);\n                    x.Info(false);\n                })\n                .ClientRowTemplate(participantRowTemplate)\n                .TableHtmlAttributes(new { @class = \"table table-striped table-bordered\" })\n                .HtmlAttributes(new { @class = \"problem_submit_grid\" })\n            )\n        </div>\n    }\n</div>\n\n@{\n    var clientTemplate = \"#= IsCalculated ? IsCompiledSuccessfully ? displayTestRuns(TestRuns).concat(\" +\n                                    \" SubmissionPoints.toString().concat(' / ').concat(MaximumPoints)) : \" + \"'\" + Resource.Compile_time_error + \"'\" +\n                                            \":\" + \"'\" + Resource.Not_processed + \"'\" + \"#\";\n}\n\n@if (Model.ShowResults)\n{\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            @(Html.Kendo()\n            .Grid<SubmissionResultViewModel>()\n            .Name(\"Submissions_\" + Model.ProblemId)\n            .ToolBar(tool =>\n            {\n                tool.Template(Resource.Submissions);\n            })\n            .DataSource(data =>\n            {\n                data.Ajax()\n                    .Sort(sort => sort.Add(\"SubmissionDate\").Descending())\n                    .Read(read => read.Action(\"ReadSubmissionResults\", ViewBag.CompeteType, new { id = Model.ProblemId }))\n                    .PageSize(10);\n            })\n            .Pageable(page =>\n            {\n                page.Info(false);\n                page.Refresh(true);\n            })\n            .Columns(col =>\n            {\n                col.Bound(model => model.SubmissionPoints).ClientTemplate(clientTemplate);\n                col.Template(@<text></text>)\n                    .Title(Resource.Time_and_memory)\n                    .ClientTemplate(\"#= IsCalculated && IsCompiledSuccessfully ? displayMaximumValues(MaximumMemoryUsed, MaximumTimeUsed, '\"\n                    + Resource.Memory + \"','\" + Resource.Time + \"') : '---' #\");\n                col.Bound(model => model.SubmissionDate).Width(300).ClientTemplate(\"#= kendo.format('{0:HH:mm:ss dd.MM.yyyy}', SubmissionDate) # <a href='/Contests/Submissions/View/#=SubmissionId#' target='_blank' class='view-submission-button btn btn-default pull-right'>\" + Resource.Details + \"</div>\");\n            }).HtmlAttributes(new { @class = \"problem_submit_grid\" })\n            )\n        </div>\n    </div>\n}\nelse\n{\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            @(Html.Kendo()\n            .Grid<SubmissionResultIsCompiledViewModel>()\n            .Name(\"Submissions_\" + Model.ProblemId)\n            .ToolBar(tool =>\n            {\n                tool.Template(Resource.Submissions);\n            })\n            .DataSource(data =>\n            {\n                data.Ajax()\n                    .Sort(sort => sort.Add(\"SubmissionDate\").Descending())\n                    .Read(read => read.Action(\"ReadSubmissionResultsAreCompiled\", ViewBag.CompeteType, new { id = Model.ProblemId }))\n                    .PageSize(10);\n            })\n            .Pageable(page =>\n            {\n                page.Info(false);\n                page.Refresh(true);\n            })\n            .Columns(col =>\n            {\n                col.Bound(model => model.IsCompiledSuccessfully).ClientTemplate(\"#= IsCalculated ? IsCompiledSuccessfully ? \" + \"'\" + Resource.Compiled_successfully + \"'\" + \" : '\" + Resource.Compile_time_error + \"' : '\" + Resource.Not_processed + \"' #\");\n                col.Bound(model => model.SubmissionDate).Width(300).ClientTemplate(\"#= kendo.format('{0:HH:mm:ss dd.MM.yyyy}', SubmissionDate) # <a href='/Contests/Submissions/View/#=Id#' target='_blank' class='view-submission-button btn btn-default pull-right'>\" + Resource.Details + \"</div>\");\n            }).HtmlAttributes(new { @class = \"problem_submit_grid\" })\n            )\n        </div>\n    </div>\n}\n\n@Html.Kendo().Tooltip().For(\"#checkers-tooltip\").ContentTemplateId(\"checkers-template\").Position(TooltipPosition.Top).Width(700)\n\n<script type=\"text/x-kendo-template\" id=\"checkers-template\">\n    <ul style=\"list-style-type: none\">\n        <li>\n            <strong>@Resource.Checker_types</strong>\n        </li>\n        <li>\n            <strong>Exact</strong> @Resource.Exact_checker_description\n        </li>\n        <li>\n            <strong>Trim</strong> @Resource.Trim_checker_description\n        </li>\n        <li>\n            <strong>Sort</strong> @Resource.Sort_checker_description\n        </li>\n        <li>\n            <strong>Case-insensitive</strong> @Resource.Case_insensitive_checker_description\n        </li>\n        <li>\n            <strong>Precision N</strong> @Resource.Precision_checker_description\n        </li>\n    </ul>\n</script>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Submissions/View.cshtml",
    "content": "﻿@using OJS.Common.Extensions\n@using OJS.Common.Models\n@using Resource = Resources.Areas.Contests.Views.SubmissionsView;\n\n@model OJS.Web.Areas.Contests.ViewModels.Submissions.SubmissionDetailsViewModel\n\n@{\n    ViewBag.Title = string.Format(Resource.Title, Model.Id, Model.UserName, Model.ProblemName);\n}\n\n@section styles {\n    @Styles.Render(\"~/Content/CodeMirror/codemirror\")\n    @Styles.Render(\"~/Content/CodeMirror/codemirrormerge\")\n}\n\n@section scripts {\n    @Scripts.Render(\"~/bundles/codemirror\")\n    @Scripts.Render(\"~/bundles/codemirrormerge\")\n    <script type=\"text/javascript\">\n        $(function () {\n            var textEditor = document.getElementById(\"code\");\n            var editor = new CodeMirror.fromTextArea(textEditor, {\n                mode: \"text/x-csharp\",\n                lineNumbers: true,\n                matchBrackets: true,\n                theme: \"the-matrix\",\n                showCursorWhenSelecting: true,\n                undoDepth: 100,\n                lineWrapping: true,\n                readOnly: true,\n                autofocus: false,\n            });\n\n            editor.setSize('100%', '100%');\n        });\n    </script>\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li><a href=\"/Submissions\">@Resource.Submissions</a></li>\n    <li class=\"active\">@Model.Id</li>\n</ol>\n\n<h2>@ViewBag.Title</h2>\n<a class=\"btn btn-sm btn-primary\" href=\"#SourceCode\">@Resource.View_code</a>\n@if (User.IsAdmin())\n{\n    <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Submissions/Update/@Model.Id\">@Resource.Update</a>\n    <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Submissions/Delete/@Model.Id\">@Resource.Delete</a>\n    <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Tests/Problem/@Model.ProblemId\">@Resource.Tests</a>\n    <a class=\"btn btn-sm btn-primary\" href=\"/Users/@Model.UserName\">@Resource.Authors_profile</a>\n    <a class=\"btn btn-sm btn-primary\" href=\"/Administration/Submissions/Retest/@Model.Id\">@Resource.Retest</a>\n    <div class=\"clearfix\"></div>\n    if (!string.IsNullOrWhiteSpace(Model.ProcessingComment))\n    {\n        <h2>@Resource.Execution_result:</h2>\n        <pre>@Model.ProcessingComment</pre>\n    }\n}\n<br />\n\n@if (Model.IsDeleted)\n{\n    <div class=\"alert alert-danger\">@Resource.Submission_is_deleted</div>\n}\n\n@if (!Model.Processed)\n{\n    if (Model.Processing)\n    {\n        <div class=\"alert alert-info\">@Resource.Submission_is_processing</div>\n    }\n    else\n    {\n        <div class=\"alert alert-info\">@Resource.Submission_in_queue</div>\n    }\n}\nelse\n{\n    if (!Model.IsCompiledSuccessfully)\n    {\n        <div class=\"alert alert-danger\">@Resource.Compile_time_error_occured</div>\n    }\n    else if (!Model.ShowResults) // Inform user that compilation is successful when not showing him all the test runs\n    {\n        <h2 class=\"text-success\">@Resource.Compiled_successfully</h2>\n    }\n\n    if (!string.IsNullOrWhiteSpace(Model.CompilerComment))\n    {\n        <h2>@Resource.Compilation_result:</h2>\n        <pre>@Model.CompilerComment</pre>\n    }\n}\n\n@if (Model.Processed && (Model.ShowResults || User.IsAdmin()))\n{\n    foreach (var testResult in Model.TestRuns.OrderByDescending(x => x.IsTrialTest).ThenBy(x => x.Order))\n    {\n        var className = string.Empty;\n        var testResultText = string.Empty;\n        if (testResult.ResultType == TestRunResultType.CorrectAnswer)\n        {\n            className = \"text-success\";\n            testResultText = Resource.Answer_correct;\n        }\n        else if (testResult.ResultType == TestRunResultType.WrongAnswer)\n        {\n            className = \"text-danger\";\n            testResultText = Resource.Answer_incorrect;\n        }\n        else if (testResult.ResultType == TestRunResultType.MemoryLimit)\n        {\n            className = \"text-danger\";\n            testResultText = Resource.Memory_limit;\n        }\n        else if (testResult.ResultType == TestRunResultType.TimeLimit)\n        {\n            className = \"text-danger\";\n            testResultText = Resource.Time_limit;\n        }\n        else if (testResult.ResultType == TestRunResultType.RunTimeError)\n        {\n            className = \"text-danger\";\n            testResultText = Resource.Runtime_error;\n        }\n\n        <h3 class=\"@className\">\n            @if (testResult.IsTrialTest)\n            {\n                @:@string.Format(\"{0}{1}\", Resource.Zero_test, testResult.Order)\n            }\n            else\n            {\n                @:@string.Format(\"{0}{1}\", Resource.Test, testResult.Order)\n            }\n            (@testResultText)\n            @if (User.IsAdmin())\n            {\n                <small>@string.Format(\"{0}{1}\", Resource.Run, testResult.Id)</small>\n                <small><a href=\"/Administration/Tests/Details/@testResult.TestId\">@string.Format(\"{0}{1}\", Resource.Test, testResult.TestId)</a></small>\n            }\n        </h3>\n\n        if (testResult.IsTrialTest)\n        {\n            <div>@Resource.Zero_tests_not_included_in_result</div>\n        }\n\n        if (!string.IsNullOrWhiteSpace(testResult.ExecutionComment) && (testResult.IsTrialTest || User.IsAdmin() || Model.ShowDetailedFeedback)) // Temporally execution comments are visible only for administrators\n        {\n            var executionComment = testResult.ExecutionComment;\n            if (!User.IsAdmin() && !Model.ShowDetailedFeedback)\n            {\n                if (Model.SubmissionType.CompilerType == CompilerType.CSharp)\n                {\n                    // The following code will hide the exception message from user when the code is written in C#\n                    var errorParts = executionComment.Split(':');\n                    if (errorParts.Length >= 2)\n                    {\n                        executionComment = errorParts[0] + \":\" + errorParts[1];\n                    }\n                    else\n                    {\n                        executionComment = executionComment.MaxLengthWithEllipsis(37);\n                    }\n                }\n                else // Other language\n                {\n                    executionComment = executionComment.MaxLengthWithEllipsis(64);\n                }\n            }\n\n            <pre>@executionComment</pre>\n        }\n\n        if (!string.IsNullOrWhiteSpace(testResult.CheckerComment) ||\n            testResult.ExpectedOutputFragment != null ||\n            testResult.UserOutputFragment != null)\n        {\n            if (testResult.IsTrialTest || User.IsAdmin() || Model.ShowDetailedFeedback)\n            {\n                <div class=\"diff\">\n                    @if (!string.IsNullOrWhiteSpace(testResult.CheckerComment))\n                    {\n                        <pre>@testResult.CheckerComment</pre>\n                    }\n\n                    @if (testResult.ExpectedOutputFragment != null || testResult.UserOutputFragment != null)\n                    {\n                        <div class=\"row\">\n                            <div class=\"col-md-6 \">Expected output:</div>\n                            <div class=\"col-md-6\">Your output:</div>\n                        </div>\n                        \n                        <div id=\"diff-@testResult.Id\"></div>\n\n                        <script>\n                            $(function () {\n                                var diffContainer = document.getElementById('diff-@testResult.Id');\n                                var mergeView = CodeMirror.MergeView(diffContainer, {\n                                    origLeft: @Html.Raw(Json.Encode(testResult.ExpectedOutputFragment)) || '',\n                                    value: @Html.Raw(Json.Encode(testResult.UserOutputFragment)) || '',\n                                    mode: 'text/x-diff',\n                                    lineNumbers: true,\n                                    lockScroll: true,\n                                    connect: 'align',\n                                    theme: 'the-matrix',\n                                    highlightDifferences: true,\n                                    revertButtons: false,\n                                    allowEditingOriginals: false,\n                                    lineWrapping: true,\n                                    collapseIdentical: false,\n                                    readOnly: true,\n                                    autofocus: false\n                                });\n\n                                mergeView.left.gap.innerText = '';\n                            });\n                        </script>\n                    }\n                </div>\n            }\n        }\n\n        <div>@Resource.Time_used: @string.Format(\"{0:0.000}\", testResult.TimeUsed / 1000.0) s</div>\n        <div>@Resource.Memory_used: @string.Format(\"{0:0.00}\", testResult.MemoryUsed / 1024.0 / 1024.0) MB</div>\n    }\n}\n\n<h3 id=\"SourceCode\">@Resource.Source_code</h3>\n@if (Model.IsBinaryFile)\n{\n    <a class=\"btn btn-default\" href=\"/Contests/Submissions/Download/@Model.Id\">Download binary file</a>\n}\nelse\n{\n    <textarea id=\"code\">@Model.ContentAsString</textarea>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Contests/Views/Web.Config",
    "content": "<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <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\">\n      <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\" />\n      <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\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"OJS.Common\"/>\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Controllers/ProfileController.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.Controllers\n{\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.Areas.Users.ViewModels;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Users.Views.Profile;\n\n    public class ProfileController : BaseController\n    {\n        public ProfileController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index(string id)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                id = this.User.Identity.Name;\n            }\n\n            var profile = this.Data.Users.GetByUsername(id);\n\n            if (profile == null)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.ProfileIndex.Not_found);\n            }\n\n            var userSettingsViewModel = new UserProfileViewModel(profile)\n            {\n                Participations = this.Data.Participants.All()\n                    .Where(x => x.UserId == profile.Id)\n                    .GroupBy(x => x.Contest)\n                    .Select(c => new UserParticipationViewModel\n                    {\n                        ContestId = c.Key.Id,\n                        ContestName = c.Key.Name,\n                        RegistrationTime = c.Key.CreatedOn,\n                        ContestMaximumPoints = c.Key.Problems.Where(x => !x.IsDeleted).Sum(pr => pr.MaximumPoints),\n                        CompeteResult = c.Where(x => x.IsOfficial)\n                            .Select(p => p.Submissions\n                                .Where(x => !x.IsDeleted)\n                                .GroupBy(s => s.ProblemId)\n                                .Sum(x => x.Max(z => z.Points)))\n                            .FirstOrDefault(),\n                        PracticeResult = c.Where(x => !x.IsOfficial)\n                            .Select(p => p.Submissions\n                                .Where(x => !x.IsDeleted)\n                                .GroupBy(s => s.ProblemId)\n                                .Sum(x => x.Max(z => z.Points)))\n                            .FirstOrDefault()\n                    })\n                    .OrderByDescending(x => x.RegistrationTime)\n                    .ToList()\n            };\n\n            return this.View(userSettingsViewModel);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Controllers/SettingsController.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.Controllers\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Users.ViewModels;\n    using OJS.Web.Controllers;\n\n    using Resource = Resources.Areas.Users.Views.Settings.SettingsIndex;\n\n    [Authorize]\n    public class SettingsController : BaseController\n    {\n        public SettingsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [HttpGet]\n        public ActionResult Index()\n        {\n            string currentUserName = this.User.Identity.Name;\n\n            var profile = this.Data.Users.GetByUsername(currentUserName);\n            var userProfileViewModel = new UserSettingsViewModel(profile);\n\n            return this.View(userProfileViewModel);\n        }\n\n        [HttpPost]\n        public ActionResult Index(UserSettingsViewModel settings)\n        {\n            if (this.ModelState.IsValid)\n            {\n                var user = this.Data.Users.GetByUsername(this.User.Identity.Name);\n                this.UpdateUserSettings(user.UserSettings, settings);\n                this.Data.SaveChanges();\n\n                this.TempData.Add(GlobalConstants.InfoMessage, Resource.Settings_were_saved);\n                return this.RedirectToAction(GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\" });\n            }\n\n            return this.View(settings);\n        }\n\n        private void UpdateUserSettings(UserSettings model, UserSettingsViewModel viewModel)\n        {\n            model.FirstName = viewModel.FirstName;\n            model.LastName = viewModel.LastName;\n            model.City = viewModel.City;\n            model.DateOfBirth = viewModel.DateOfBirth;\n            model.Company = viewModel.Company;\n            model.JobTitle = viewModel.JobTitle;\n            model.EducationalInstitution = viewModel.EducationalInstitution;\n            model.FacultyNumber = viewModel.FacultyNumber;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Helpers/NullDisplayFormatAttribute.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.Helpers\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using Resource = Resources.Areas.Users.ViewModels.ProfileViewModels;\n\n    public class NullDisplayFormatAttribute : DisplayFormatAttribute\n    {\n        public NullDisplayFormatAttribute()\n        {\n            this.NullDisplayText = Resource.No_information;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/UsersAreaRegistration.cs",
    "content": "﻿namespace OJS.Web.Areas.Users\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n\n    public class UsersAreaRegistration : AreaRegistration\n    {\n        public override string AreaName => \"Users\";\n\n        public override void RegisterArea(AreaRegistrationContext context)\n        {\n            context.MapRoute(\n                \"Users_current_user_profile\",\n                \"Users/Profile/{action}\",\n                new { controller = \"Profile\", action = GlobalConstants.Index, id = UrlParameter.Optional });\n\n            context.MapRoute(\n                \"Users_settings\",\n                \"Users/Settings/{action}\",\n                new { controller = \"Settings\", action = GlobalConstants.Index, id = UrlParameter.Optional });\n\n            context.MapRoute(\n                \"Users_profile\",\n                \"Users/{id}\",\n                new { controller = \"Profile\", action = GlobalConstants.Index, id = UrlParameter.Optional });\n\n            // context.MapRoute(\n            //     \"Users_default\",\n            //     \"Users/{controller}/{action}/{id}\",\n            //     new { action = \"Index\", id = UrlParameter.Optional });\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/ViewModels/UserParticipationViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.ViewModels\n{\n    using System;\n\n    public class UserParticipationViewModel\n    {\n        public int ContestId { get; set; }\n\n        public string ContestName { get; set; }\n\n        public int? CompeteResult { get; set; }\n\n        public int? PracticeResult { get; set; }\n\n        public int? ContestMaximumPoints { get; set; }\n\n        public DateTime RegistrationTime { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/ViewModels/UserProfileViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.ViewModels\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Users.Helpers;\n\n    using Resource = Resources.Areas.Users.ViewModels.ProfileViewModels;\n\n    public class UserProfileViewModel\n    {\n        public UserProfileViewModel(UserProfile profile)\n        {\n            this.Id = profile.Id;\n            this.Username = profile.UserName;\n            this.Email = profile.Email;\n            this.FirstName = profile.UserSettings.FirstName;\n            this.LastName = profile.UserSettings.LastName;\n            this.City = profile.UserSettings.City;\n            this.Age = profile.UserSettings.Age;\n            this.Participations = new HashSet<UserParticipationViewModel>();\n        }\n\n        public string Id { get; set; }\n\n        public string Username { get; set; }\n\n        public string Email { get; set; }\n\n        [MaxLength(\n            GlobalConstants.FirstNameMaxLength,\n            ErrorMessageResourceName = \"First_name_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"First_name\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string FirstName { get; set; }\n\n        [MaxLength(\n            GlobalConstants.LastNameMaxLength,\n            ErrorMessage = \"Family_name_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n            Name = \"Family_name\",\n            ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string LastName { get; set; }\n\n        [MaxLength(\n            GlobalConstants.CityNameMaxLength,\n            ErrorMessage = \"City_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"City\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string City { get; set; }\n\n        [Display(Name = \"Age\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public byte? Age { get; set; }\n\n        public IEnumerable<UserParticipationViewModel> Participations { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/ViewModels/UserSettingsViewModel.cs",
    "content": "﻿namespace OJS.Web.Areas.Users.ViewModels\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n    using OJS.Data.Models;\n    using OJS.Web.Areas.Users.Helpers;\n\n    using Resource = Resources.Areas.Users.ViewModels.ProfileViewModels;\n\n    public class UserSettingsViewModel\n    {\n        public UserSettingsViewModel()\n        {\n        }\n\n        public UserSettingsViewModel(UserProfile profile)\n        {\n            this.Username = profile.UserName;\n            this.Email = profile.Email;\n            this.FirstName = profile.UserSettings.FirstName;\n            this.LastName = profile.UserSettings.LastName;\n            this.DateOfBirth = profile.UserSettings.DateOfBirth;\n            this.City = profile.UserSettings.City;\n            this.EducationalInstitution = profile.UserSettings.EducationalInstitution;\n            this.FacultyNumber = profile.UserSettings.FacultyNumber;\n            this.Company = profile.UserSettings.Company;\n            this.JobTitle = profile.UserSettings.JobTitle;\n            this.Age = profile.UserSettings.Age;\n        }\n\n        public string Username { get; set; }\n\n        [Display(Name = \"Email\", ResourceType = typeof(Resource))]\n        [MaxLength(GlobalConstants.EmailMaxLength)]\n        [DataType(DataType.EmailAddress)]\n        public string Email { get; set; }\n\n        [MaxLength(\n            GlobalConstants.FirstNameMaxLength,\n            ErrorMessageResourceName = \"First_name_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"First_name\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string FirstName { get; set; }\n\n        [MaxLength(\n            GlobalConstants.LastNameMaxLength,\n            ErrorMessageResourceName = \"Family_name_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Family_name\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string LastName { get; set; }\n\n        [Display(Name = \"Date_of_birth\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(DataFormatString = \"{0:dd/MM/yyyy}\", ConvertEmptyStringToNull = true)]\n        [DataType(DataType.Date)]\n        public DateTime? DateOfBirth { get; set; }\n\n        [MaxLength(\n            GlobalConstants.CityNameMaxLength,\n            ErrorMessageResourceName = \"City_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"City\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string City { get; set; }\n\n        [MaxLength(\n            GlobalConstants.EducationalInstitutionMaxLength,\n            ErrorMessageResourceName = \"Education_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Education_institution\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string EducationalInstitution { get; set; }\n\n        [MaxLength(\n            GlobalConstants.FacultyNumberMaxLength,\n            ErrorMessageResourceName = \"Faculty_number_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Faculty_number\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string FacultyNumber { get; set; }\n\n        [MaxLength(\n            GlobalConstants.CompanyNameMaxLength,\n            ErrorMessageResourceName = \"Company_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Company\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string Company { get; set; }\n\n        [MaxLength(\n            GlobalConstants.JobTitleMaxLenth,\n            ErrorMessageResourceName = \"Job_title_too_long\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Job_title\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        public string JobTitle { get; set; }\n\n        [Display(Name = \"Age\", ResourceType = typeof(Resource))]\n        [NullDisplayFormat(ConvertEmptyStringToNull = true)]\n        [Range(0, byte.MaxValue)]\n        public byte? Age { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Views/Profile/Index.cshtml",
    "content": "﻿@model OJS.Web.Areas.Users.ViewModels.UserProfileViewModel\n@using Resource = Resources.Areas.Users.Views.Profile.ProfileIndex\n\n@{\n    ViewBag.Title = string.Format(Resource.Title, Model.Username);\n}\n\n<script src=\"/Scripts/Helpers/test-results.js\"></script>\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li class=\"active\">@Resource.Profile</li>\n</ol>\n\n<div class=\"row\">\n    @Html.Partial(\"_ProfileInfo\", Model)\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Views/Settings/Index.cshtml",
    "content": "﻿@model OJS.Web.Areas.Users.ViewModels.UserSettingsViewModel\n@using Resource = Resources.Areas.Users.Views.Settings.SettingsIndex;\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li>@Html.ActionLink(Resource.Profile, GlobalConstants.Index , \"Profile\")</li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<div class=\"container\">\n    @if (Model == null)\n    {\n        <div class=\"alert alert-info\">\n            @Resource.Not_logged_in\n        </div>\n    }\n    else\n    {\n        <h2>\n            @Resource.Settings\n        </h2>\n        using (Html.BeginForm())\n        {\n            <div class=\"row\">\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        <strong class=\"text-primary\">@Resource.Username</strong>\n                    </div>\n                    <div class=\"col-xs-7 text-white\">\n                        @User.Identity.Name\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        <strong class=\"text-primary\">@Resource.Password</strong>\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.ActionLink(Resource.Change_password, \"Manage\", \"Account\", new { area = string.Empty }, null)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        <strong class=\"text-primary\">@Resource.Email</strong>\n                    </div>\n                    <div class=\"col-xs-7\">\n                        <span class=\"text-white\">\n                            @Model.Email\n                        </span>\n                        <span>\n                            @Html.ActionLink(Resource.Change_email, \"ChangeEmail\", \"Account\", new { area = string.Empty}, null)\n                        </span>\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.FirstName, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.FirstName)\n                        @Html.ValidationMessageFor(m => m.FirstName)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.LastName, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.LastName)\n                        @Html.ValidationMessageFor(m => m.LastName)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.DateOfBirth, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @(Html.Kendo().DatePicker()\n                              .Name(\"DateOfBirth\")\n                              .Start(CalendarView.Decade)\n                              .Value(Model.DateOfBirth)\n                              .HtmlAttributes(new { style = \"width:175px; margin-bottom: 3px\" })\n                        )\n                        @Html.ValidationMessageFor(m => m.DateOfBirth)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.City, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.City)\n                        @Html.ValidationMessageFor(m => m.City)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.EducationalInstitution, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.EducationalInstitution)\n                        @Html.ValidationMessageFor(m => m.EducationalInstitution)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.FacultyNumber, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.FacultyNumber)\n                        @Html.ValidationMessageFor(m => m.FacultyNumber)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.Company, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.Company)\n                        @Html.ValidationMessageFor(m => m.Company)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        @Html.LabelFor(m => m.JobTitle, new { @class = \"text-primary loud\" })\n                    </div>\n                    <div class=\"col-xs-7\">\n                        @Html.EditorFor(m => m.JobTitle)\n                        @Html.ValidationMessageFor(m => m.JobTitle)\n                    </div>\n                </div>\n                <br />\n                <div class=\"row\">\n                    <div class=\"col-xs-4 text-right\">\n                        <a href=\"/Users/Profile\" class=\"btn btn-primary\">@Resource.Cancel</a>\n                    </div>\n                    <div class=\"col-md-7 text-left\">\n                        <button class=\"btn btn-success\" type=\"submit\">@Resource.Save</button>\n                    </div>\n                </div>\n            </div>\n        }\n    }\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Views/Shared/_ProfileInfo.cshtml",
    "content": "﻿@using OJS.Web.Areas.Users.ViewModels\n@using Resource = Resources.Areas.Users.Shared.ProfileProfileInfo;\n\n@model UserProfileViewModel\n\n<div class=\"container\">\n    <h2>\n        @string.Format(Resource.Profile_title, Model.Username)\n        @if (!string.IsNullOrEmpty(Model.FirstName) || !string.IsNullOrEmpty(Model.LastName))\n        {\n            <text>(@Model.FirstName @Model.LastName)</text>\n        }\n    </h2>\n\n    @if (User.IsAdmin())\n    {\n        <div class=\"col-md-12\">\n            <div class=\"text-white\">\n                <span class=\"text-primary\">Id: </span>\n                @Model.Id\n            </div>\n        </div>\n        <div class=\"col-md-12\">\n            <div class=\"text-white\">\n                <span class=\"text-primary\">E-mail: </span>\n                @Model.Email\n            </div>\n        </div>\n    }\n\n    <div class=\"col-md-6\">\n        @if (Model.Age != null)\n        {\n            <div class=\"text-white\">\n                <span class=\"text-primary\">@Resource.Age: </span>\n                @Model.Age\n            </div>\n        }\n\n        @if (!string.IsNullOrEmpty(Model.City))\n        {\n            <div class=\"text-white\">\n                <span class=\"text-primary\">@Resource.City: </span>\n                @Model.City\n            </div>\n        }\n    </div>\n    @if (User.Identity.Name == Model.Username)\n    {\n        <div class=\"col-md-offset-4 col-md-2\">\n            <a href=\"Settings/\" class=\"btn btn-primary pull-right\">@Resource.Settings</a>\n        </div>\n    }\n</div>\n<br />\n\n@if (User.IsAdmin() || User.Identity.Name == Model.Username)\n{\n    <div class=\"col-md-12\">\n        <h2>Решения</h2>\n        @{Html.RenderPartial(\"_AdvancedSubmissionsGridPartial\", Model.Id);}\n    </div>\n    <br />\n}\n\n<div class=\"col-md-12\">\n    <h2>@Resource.Participations</h2>\n    <table class=\"table table-responsive table-striped\">\n        <thead class=\"text-white\">\n            <tr>\n                <th>\n                    @Resource.Contest\n                </th>\n                @if (User.Identity.Name == Model.Username || User.IsAdmin())\n                {\n                    <th>@Resource.Results</th>\n                }\n            </tr>\n        </thead>\n        <tbody>\n            @foreach (var result in Model.Participations)\n            {\n                <tr>\n                    <td>\n                        <a href=\"@ContestsHelper.GetUrl(result.ContestId, result.ContestName)\">\n                            @result.ContestName\n                        </a>\n                    </td>\n\n                    @if (User.Identity.Name == Model.Username || User.IsAdmin())\n                    {\n                        <td>\n                            @Resource.Compete: <span class=\"text-white\">@result.CompeteResult / @result.ContestMaximumPoints.GetValueOrDefault()</span>\n                            <br />\n                            @Resource.Practice: <span class=\"text-white\">@result.PracticeResult / @result.ContestMaximumPoints.GetValueOrDefault()</span>\n                        </td>\n                    }\n                </tr>\n            }\n        </tbody>\n    </table>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Areas/Users/Views/Web.Config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <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\">\n      <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\" />\n      <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\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"OJS.Common\"/>\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/addon/merge.css",
    "content": "﻿.CodeMirror-merge {\n    position: relative;\n    border: 1px solid #ddd;\n    white-space: pre;\n}\n\n    .CodeMirror-merge, .CodeMirror-merge .CodeMirror {\n        height: 350px;\n    }\n\n.CodeMirror-merge-2pane .CodeMirror-merge-pane {\n    width: 47%;\n}\n\n.CodeMirror-merge-2pane .CodeMirror-merge-gap {\n    width: 6%;\n}\n\n.CodeMirror-merge-3pane .CodeMirror-merge-pane {\n    width: 31%;\n}\n\n.CodeMirror-merge-3pane .CodeMirror-merge-gap {\n    width: 3.5%;\n}\n\n.CodeMirror-merge-pane {\n    display: inline-block;\n    white-space: normal;\n    vertical-align: top;\n}\n\n.CodeMirror-merge-pane-rightmost {\n    position: absolute;\n    right: 0px;\n    z-index: 1;\n}\n\n.CodeMirror-merge-gap {\n    z-index: 2;\n    display: inline-block;\n    height: 100%;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    overflow: hidden;\n    border-left: 1px solid #ddd;\n    border-right: 1px solid #ddd;\n    position: relative;\n    background: #f8f8f8;\n}\n\n.CodeMirror-merge-scrolllock-wrap {\n    position: absolute;\n    bottom: 0;\n    left: 50%;\n}\n\n.CodeMirror-merge-scrolllock {\n    position: relative;\n    left: -50%;\n    cursor: pointer;\n    color: #555;\n    line-height: 1;\n}\n\n.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    line-height: 1;\n}\n\n.CodeMirror-merge-copy {\n    position: absolute;\n    cursor: pointer;\n    color: #44c;\n}\n\n.CodeMirror-merge-copy-reverse {\n    position: absolute;\n    cursor: pointer;\n    color: #44c;\n}\n\n.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy {\n    left: 2px;\n}\n\n.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy {\n    right: 2px;\n}\n\n.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);\n    background-position: bottom left;\n    background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);\n    background-position: bottom left;\n    background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-chunk {\n    background: #ffffe0;\n}\n\n.CodeMirror-merge-r-chunk-start {\n    border-top: 1px solid #ee8;\n}\n\n.CodeMirror-merge-r-chunk-end {\n    border-bottom: 1px solid #ee8;\n}\n\n.CodeMirror-merge-r-connect {\n    fill: #ffffe0;\n    stroke: #ee8;\n    stroke-width: 1px;\n}\n\n.CodeMirror-merge-l-chunk {\n    background: #eef;\n}\n\n.CodeMirror-merge-l-chunk-start {\n    border-top: 1px solid #88e;\n}\n\n.CodeMirror-merge-l-chunk-end {\n    border-bottom: 1px solid #88e;\n}\n\n.CodeMirror-merge-l-connect {\n    fill: #eef;\n    stroke: #88e;\n    stroke-width: 1px;\n}\n\n.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk {\n    background: #dfd;\n}\n\n.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start {\n    border-top: 1px solid #4e4;\n}\n\n.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end {\n    border-bottom: 1px solid #4e4;\n}\n\n.CodeMirror-merge-collapsed-widget:before {\n    content: \"(...)\";\n}\n\n.CodeMirror-merge-collapsed-widget {\n    cursor: pointer;\n    color: #88b;\n    background: #eef;\n    border: 1px solid #ddf;\n    font-size: 90%;\n    padding: 0 3px;\n    border-radius: 4px;\n}\n\n.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt {\n    display: none;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n}\n.CodeMirror-scroll {\n  /* Set scrolling behaviour here */\n  overflow: auto;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/* CURSOR */\n\n.CodeMirror div.CodeMirror-cursor {\n  border-left: 1px solid black;\n  z-index: 3;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {\n  width: auto;\n  border: 0;\n  background: #7e7;\n  z-index: 1;\n}\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}\n\n.cm-tab { display: inline-block; }\n\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable {color: black;}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-property {color: black;}\n.cm-s-default .cm-operator {color: black;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  line-height: 1;\n  position: relative;\n  overflow: hidden;\n  background: white;\n  color: black;\n}\n\n.CodeMirror-scroll {\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actuall scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  padding-bottom: 30px;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  padding-bottom: 30px;\n  margin-bottom: -32px;\n  display: inline-block;\n  /* Hack to make IE7 behave */\n  *zoom:1;\n  *display:inline;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n\n.CodeMirror-lines {\n  cursor: text;\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-wrap .CodeMirror-scroll {\n  overflow-x: hidden;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n.CodeMirror-measure pre { position: static; }\n\n.CodeMirror div.CodeMirror-cursor {\n  position: absolute;\n  visibility: hidden;\n  border-right: none;\n  width: 0;\n}\n.CodeMirror-focused div.CodeMirror-cursor {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n\n.cm-searching {\n  background: #ffa;\n  background: rgba(255, 255, 0, .4);\n}\n\n/* IE7 hack to prevent it from returning funny offsetTops on the spans */\n.CodeMirror span { *vertical-align: text-bottom; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursor {\n    visibility: hidden;\n  }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/3024-day.css",
    "content": "/*\n\n    Name:       3024 day\n    Author:     Jan T. Sott (http://github.com/idleberg)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;}\n.cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;}\n.cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;}\n.cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;}\n.cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;}\n\n.cm-s-3024-day span.cm-comment {color: #cdab53;}\n.cm-s-3024-day span.cm-atom {color: #a16a94;}\n.cm-s-3024-day span.cm-number {color: #a16a94;}\n\n.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;}\n.cm-s-3024-day span.cm-keyword {color: #db2d20;}\n.cm-s-3024-day span.cm-string {color: #fded02;}\n\n.cm-s-3024-day span.cm-variable {color: #01a252;}\n.cm-s-3024-day span.cm-variable-2 {color: #01a0e4;}\n.cm-s-3024-day span.cm-def {color: #e8bbd0;}\n.cm-s-3024-day span.cm-bracket {color: #3a3432;}\n.cm-s-3024-day span.cm-tag {color: #db2d20;}\n.cm-s-3024-day span.cm-link {color: #a16a94;}\n.cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;}\n\n.cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;}\n.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/3024-night.css",
    "content": "/*\n\n    Name:       3024 night\n    Author:     Jan T. Sott (http://github.com/idleberg)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;}\n.cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;}\n.cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;}\n.cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;}\n.cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;}\n\n.cm-s-3024-night span.cm-comment {color: #cdab53;}\n.cm-s-3024-night span.cm-atom {color: #a16a94;}\n.cm-s-3024-night span.cm-number {color: #a16a94;}\n\n.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;}\n.cm-s-3024-night span.cm-keyword {color: #db2d20;}\n.cm-s-3024-night span.cm-string {color: #fded02;}\n\n.cm-s-3024-night span.cm-variable {color: #01a252;}\n.cm-s-3024-night span.cm-variable-2 {color: #01a0e4;}\n.cm-s-3024-night span.cm-def {color: #e8bbd0;}\n.cm-s-3024-night span.cm-bracket {color: #d6d5d4;}\n.cm-s-3024-night span.cm-tag {color: #db2d20;}\n.cm-s-3024-night span.cm-link {color: #a16a94;}\n.cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;}\n\n.cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;}\n.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/ambiance-mobile.css",
    "content": ".cm-s-ambiance.CodeMirror {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/ambiance.css",
    "content": "/* ambiance theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-ambiance .cm-keyword { color: #cda869; }\n.cm-s-ambiance .cm-atom { color: #CF7EA9; }\n.cm-s-ambiance .cm-number { color: #78CF8A; }\n.cm-s-ambiance .cm-def { color: #aac6e3; }\n.cm-s-ambiance .cm-variable { color: #ffb795; }\n.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }\n.cm-s-ambiance .cm-variable-3 { color: #faded3; }\n.cm-s-ambiance .cm-property { color: #eed1b3; }\n.cm-s-ambiance .cm-operator {color: #fa8d6a;}\n.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }\n.cm-s-ambiance .cm-string { color: #8f9d6a; }\n.cm-s-ambiance .cm-string-2 { color: #9d937c; }\n.cm-s-ambiance .cm-meta { color: #D2A8A1; }\n.cm-s-ambiance .cm-qualifier { color: yellow; }\n.cm-s-ambiance .cm-builtin { color: #9999cc; }\n.cm-s-ambiance .cm-bracket { color: #24C2C7; }\n.cm-s-ambiance .cm-tag { color: #fee4ff }\n.cm-s-ambiance .cm-attribute {  color: #9B859D; }\n.cm-s-ambiance .cm-header {color: blue;}\n.cm-s-ambiance .cm-quote { color: #24C2C7; }\n.cm-s-ambiance .cm-hr { color: pink; }\n.cm-s-ambiance .cm-link { color: #F4C20B; }\n.cm-s-ambiance .cm-special { color: #FF9D00; }\n.cm-s-ambiance .cm-error { color: #AF2018; }\n\n.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }\n.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }\n\n.cm-s-ambiance .CodeMirror-selected {\n  background: rgba(255, 255, 255, 0.15);\n}\n.cm-s-ambiance.CodeMirror-focused .CodeMirror-selected {\n  background: rgba(255, 255, 255, 0.10);\n}\n\n/* Editor styling */\n\n.cm-s-ambiance.CodeMirror {\n  line-height: 1.40em;\n  font-family: Monaco, Menlo,\"Andale Mono\",\"lucida console\",\"Courier New\",monospace !important;\n  color: #E6E1DC;\n  background-color: #202020;\n  -webkit-box-shadow: inset 0 0 10px black;\n  -moz-box-shadow: inset 0 0 10px black;\n  box-shadow: inset 0 0 10px black;\n}\n\n.cm-s-ambiance .CodeMirror-gutters {\n  background: #3D3D3D;\n  border-right: 1px solid #4D4D4D;\n  box-shadow: 0 10px 20px black;\n}\n\n.cm-s-ambiance .CodeMirror-linenumber {\n  text-shadow: 0px 1px 1px #4d4d4d;\n  color: #222;\n  padding: 0 5px;\n}\n\n.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor {\n  border-left: 1px solid #7991E8;\n}\n\n.cm-s-ambiance .CodeMirror-activeline-background {\n  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);\n}\n\n.cm-s-ambiance.CodeMirror,\n.cm-s-ambiance .CodeMirror-gutters {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/base16-dark.css",
    "content": "/*\n\n    Name:       Base16 Default Dark\n    Author:     Chris Kempson (http://chriskempson.com)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;}\n.cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;}\n.cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;}\n.cm-s-base16-dark .CodeMirror-linenumber {color: #505050;}\n.cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;}\n\n.cm-s-base16-dark span.cm-comment {color: #8f5536;}\n.cm-s-base16-dark span.cm-atom {color: #aa759f;}\n.cm-s-base16-dark span.cm-number {color: #aa759f;}\n\n.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;}\n.cm-s-base16-dark span.cm-keyword {color: #ac4142;}\n.cm-s-base16-dark span.cm-string {color: #f4bf75;}\n\n.cm-s-base16-dark span.cm-variable {color: #90a959;}\n.cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;}\n.cm-s-base16-dark span.cm-def {color: #d28445;}\n.cm-s-base16-dark span.cm-bracket {color: #e0e0e0;}\n.cm-s-base16-dark span.cm-tag {color: #ac4142;}\n.cm-s-base16-dark span.cm-link {color: #aa759f;}\n.cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;}\n\n.cm-s-base16-dark .CodeMirror-activeline-background {background: #2F2F2F !important;}\n.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/base16-light.css",
    "content": "/*\n\n    Name:       Base16 Default Light\n    Author:     Chris Kempson (http://chriskempson.com)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;}\n.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;}\n.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;}\n.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;}\n.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;}\n\n.cm-s-base16-light span.cm-comment {color: #8f5536;}\n.cm-s-base16-light span.cm-atom {color: #aa759f;}\n.cm-s-base16-light span.cm-number {color: #aa759f;}\n\n.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;}\n.cm-s-base16-light span.cm-keyword {color: #ac4142;}\n.cm-s-base16-light span.cm-string {color: #f4bf75;}\n\n.cm-s-base16-light span.cm-variable {color: #90a959;}\n.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;}\n.cm-s-base16-light span.cm-def {color: #d28445;}\n.cm-s-base16-light span.cm-bracket {color: #202020;}\n.cm-s-base16-light span.cm-tag {color: #ac4142;}\n.cm-s-base16-light span.cm-link {color: #aa759f;}\n.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;}\n\n.cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;}\n.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/blackboard.css",
    "content": "/* Port of TextMate's Blackboard theme */\n\n.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }\n.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; }\n.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }\n.cm-s-blackboard .CodeMirror-linenumber { color: #888; }\n.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }\n\n.cm-s-blackboard .cm-keyword { color: #FBDE2D; }\n.cm-s-blackboard .cm-atom { color: #D8FA3C; }\n.cm-s-blackboard .cm-number { color: #D8FA3C; }\n.cm-s-blackboard .cm-def { color: #8DA6CE; }\n.cm-s-blackboard .cm-variable { color: #FF6400; }\n.cm-s-blackboard .cm-operator { color: #FBDE2D;}\n.cm-s-blackboard .cm-comment { color: #AEAEAE; }\n.cm-s-blackboard .cm-string { color: #61CE3C; }\n.cm-s-blackboard .cm-string-2 { color: #61CE3C; }\n.cm-s-blackboard .cm-meta { color: #D8FA3C; }\n.cm-s-blackboard .cm-builtin { color: #8DA6CE; }\n.cm-s-blackboard .cm-tag { color: #8DA6CE; }\n.cm-s-blackboard .cm-attribute { color: #8DA6CE; }\n.cm-s-blackboard .cm-header { color: #FF6400; }\n.cm-s-blackboard .cm-hr { color: #AEAEAE; }\n.cm-s-blackboard .cm-link { color: #8DA6CE; }\n.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }\n\n.cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;}\n.cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/cobalt.css",
    "content": ".cm-s-cobalt.CodeMirror { background: #002240; color: white; }\n.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }\n.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-cobalt span.cm-comment { color: #08f; }\n.cm-s-cobalt span.cm-atom { color: #845dc4; }\n.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }\n.cm-s-cobalt span.cm-keyword { color: #ffee80; }\n.cm-s-cobalt span.cm-string { color: #3ad900; }\n.cm-s-cobalt span.cm-meta { color: #ff9d00; }\n.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }\n.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }\n.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }\n.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }\n.cm-s-cobalt span.cm-link { color: #845dc4; }\n.cm-s-cobalt span.cm-error { color: #9d1e15; }\n\n.cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;}\n.cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/eclipse.css",
    "content": ".cm-s-eclipse span.cm-meta {color: #FF1717;}\n.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }\n.cm-s-eclipse span.cm-atom {color: #219;}\n.cm-s-eclipse span.cm-number {color: #164;}\n.cm-s-eclipse span.cm-def {color: #00f;}\n.cm-s-eclipse span.cm-variable {color: black;}\n.cm-s-eclipse span.cm-variable-2 {color: #0000C0;}\n.cm-s-eclipse span.cm-variable-3 {color: #0000C0;}\n.cm-s-eclipse span.cm-property {color: black;}\n.cm-s-eclipse span.cm-operator {color: black;}\n.cm-s-eclipse span.cm-comment {color: #3F7F5F;}\n.cm-s-eclipse span.cm-string {color: #2A00FF;}\n.cm-s-eclipse span.cm-string-2 {color: #f50;}\n.cm-s-eclipse span.cm-qualifier {color: #555;}\n.cm-s-eclipse span.cm-builtin {color: #30a;}\n.cm-s-eclipse span.cm-bracket {color: #cc7;}\n.cm-s-eclipse span.cm-tag {color: #170;}\n.cm-s-eclipse span.cm-attribute {color: #00c;}\n.cm-s-eclipse span.cm-link {color: #219;}\n.cm-s-eclipse span.cm-error {color: #f00;}\n\n.cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;}\n.cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/elegant.css",
    "content": ".cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}\n.cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}\n.cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}\n.cm-s-elegant span.cm-variable {color: black;}\n.cm-s-elegant span.cm-variable-2 {color: #b11;}\n.cm-s-elegant span.cm-qualifier {color: #555;}\n.cm-s-elegant span.cm-keyword {color: #730;}\n.cm-s-elegant span.cm-builtin {color: #30a;}\n.cm-s-elegant span.cm-link {color: #762;}\n.cm-s-elegant span.cm-error {background-color: #fdd;}\n\n.cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;}\n.cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/erlang-dark.css",
    "content": ".cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }\n.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }\n.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-erlang-dark span.cm-atom       { color: #f133f1; }\n.cm-s-erlang-dark span.cm-attribute  { color: #ff80e1; }\n.cm-s-erlang-dark span.cm-bracket    { color: #ff9d00; }\n.cm-s-erlang-dark span.cm-builtin    { color: #eaa; }\n.cm-s-erlang-dark span.cm-comment    { color: #77f; }\n.cm-s-erlang-dark span.cm-def        { color: #e7a; }\n.cm-s-erlang-dark span.cm-keyword    { color: #ffee80; }\n.cm-s-erlang-dark span.cm-meta       { color: #50fefe; }\n.cm-s-erlang-dark span.cm-number     { color: #ffd0d0; }\n.cm-s-erlang-dark span.cm-operator   { color: #d55; }\n.cm-s-erlang-dark span.cm-property   { color: #ccc; }\n.cm-s-erlang-dark span.cm-qualifier  { color: #ccc; }\n.cm-s-erlang-dark span.cm-quote      { color: #ccc; }\n.cm-s-erlang-dark span.cm-special    { color: #ffbbbb; }\n.cm-s-erlang-dark span.cm-string     { color: #3ad900; }\n.cm-s-erlang-dark span.cm-string-2   { color: #ccc; }\n.cm-s-erlang-dark span.cm-tag        { color: #9effff; }\n.cm-s-erlang-dark span.cm-variable   { color: #50fe50; }\n.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }\n.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; }\n.cm-s-erlang-dark span.cm-error      { color: #9d1e15; }\n\n.cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;}\n.cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/lesser-dark.css",
    "content": "/*\nhttp://lesscss.org/ dark theme\nPorted to CodeMirror by Peter Kroon\n*/\n.cm-s-lesser-dark {\n  line-height: 1.3em;\n}\n.cm-s-lesser-dark {\n  font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important;\n}\n\n.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }\n.cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/\n.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; }\n.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/\n\n.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/\n\n.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; }\n.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; }\n\n.cm-s-lesser-dark span.cm-keyword { color: #599eff; }\n.cm-s-lesser-dark span.cm-atom { color: #C2B470; }\n.cm-s-lesser-dark span.cm-number { color: #B35E4D; }\n.cm-s-lesser-dark span.cm-def {color: white;}\n.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }\n.cm-s-lesser-dark span.cm-variable-2 { color: #669199; }\n.cm-s-lesser-dark span.cm-variable-3 { color: white; }\n.cm-s-lesser-dark span.cm-property {color: #92A75C;}\n.cm-s-lesser-dark span.cm-operator {color: #92A75C;}\n.cm-s-lesser-dark span.cm-comment { color: #666; }\n.cm-s-lesser-dark span.cm-string { color: #BCD279; }\n.cm-s-lesser-dark span.cm-string-2 {color: #f50;}\n.cm-s-lesser-dark span.cm-meta { color: #738C73; }\n.cm-s-lesser-dark span.cm-qualifier {color: #555;}\n.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }\n.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }\n.cm-s-lesser-dark span.cm-tag { color: #669199; }\n.cm-s-lesser-dark span.cm-attribute {color: #00c;}\n.cm-s-lesser-dark span.cm-header {color: #a0a;}\n.cm-s-lesser-dark span.cm-quote {color: #090;}\n.cm-s-lesser-dark span.cm-hr {color: #999;}\n.cm-s-lesser-dark span.cm-link {color: #00c;}\n.cm-s-lesser-dark span.cm-error { color: #9d1e15; }\n\n.cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;}\n.cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/mbo.css",
    "content": "/* Based on mbonaci's Brackets mbo theme */\n\n.cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffe9;}\n.cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;}\n.cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;}\n.cm-s-mbo .CodeMirror-linenumber {color: #dadada;}\n.cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;}\n\n.cm-s-mbo span.cm-comment {color: #95958a;}\n.cm-s-mbo span.cm-atom {color: #00a8c6;}\n.cm-s-mbo span.cm-number {color: #00a8c6;}\n\n.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;}\n.cm-s-mbo span.cm-keyword {color: #ffb928;}\n.cm-s-mbo span.cm-string {color: #ffcf6c;}\n\n.cm-s-mbo span.cm-variable {color: #ffffec;}\n.cm-s-mbo span.cm-variable-2 {color: #00a8c6;}\n.cm-s-mbo span.cm-def {color: #ffffec;}\n.cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;}\n.cm-s-mbo span.cm-tag {color: #9ddfe9;}\n.cm-s-mbo span.cm-link {color: #f54b07;}\n.cm-s-mbo span.cm-error {background: #636363; color: #ffffec;}\n\n.cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;}\n.cm-s-mbo .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: #f5e107 !important;\n }\n \n.cm-s-mbo .CodeMirror-matchingtag {background: #4e4e4e;}\n\n.cm-s-mbo span.cm-searching {\n  background-color: none;\n  background: none;\n  box-shadow: 0 0 0 1px #ffffec;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/mdn-like.css",
    "content": "/*\n  MDN-LIKE Theme - Mozilla\n  Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>\n  Report bugs/issues here: https://github.com/marijnh/CodeMirror/issues\n  GitHub: @peterkroon\n\n  The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation\n\n*/\n.cm-s-mdn-like.CodeMirror { color: #999; font-family: monospace; background-color: #fff; }\n.cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; }\n\n.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }\n.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; margin-left: 3px; }\ndiv.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }\n\n.cm-s-mdn-like .cm-keyword {  color: #6262FF; }\n.cm-s-mdn-like .cm-atom { color: #F90; }\n.cm-s-mdn-like .cm-number { color:  #ca7841; }\n.cm-s-mdn-like .cm-def { color: #8DA6CE; }\n.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }\n.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; }\n\n.cm-s-mdn-like .cm-variable { color: #07a; }\n.cm-s-mdn-like .cm-property { color: #905; }\n.cm-s-mdn-like .cm-qualifier { color: #690; }\n\n.cm-s-mdn-like .cm-operator { color: #cda869; }\n.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }\n.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }\n.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/\n.cm-s-mdn-like .cm-meta { color: #000; } /*?*/\n.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/\n.cm-s-mdn-like .cm-tag { color: #997643; }\n.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/\n.cm-s-mdn-like .cm-header { color: #FF6400; }\n.cm-s-mdn-like .cm-hr { color: #AEAEAE; }\n.cm-s-mdn-like .cm-link {   color:#ad9361; font-style:italic; text-decoration:none; }\n.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }\n\ndiv.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;}\ndiv.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;}\n\n.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/midnight.css",
    "content": "/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */\n\n/*<!--match-->*/\n.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; }\n.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; }\n\n/*<!--activeline-->*/\n.cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;}\n\n.cm-s-midnight.CodeMirror {\n    background: #0F192A;\n    color: #D1EDFF;\n}\n\n.cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}\n\n.cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;}\n.cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;}\n.cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;}\n.cm-s-midnight .CodeMirror-cursor {\n    border-left: 1px solid #F8F8F0 !important;\n}\n\n.cm-s-midnight span.cm-comment {color: #428BDD;}\n.cm-s-midnight span.cm-atom {color: #AE81FF;}\n.cm-s-midnight span.cm-number {color: #D1EDFF;}\n\n.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;}\n.cm-s-midnight span.cm-keyword {color: #E83737;}\n.cm-s-midnight span.cm-string {color: #1DC116;}\n\n.cm-s-midnight span.cm-variable {color: #FFAA3E;}\n.cm-s-midnight span.cm-variable-2 {color: #FFAA3E;}\n.cm-s-midnight span.cm-def {color: #4DD;}\n.cm-s-midnight span.cm-bracket {color: #D1EDFF;}\n.cm-s-midnight span.cm-tag {color: #449;}\n.cm-s-midnight span.cm-link {color: #AE81FF;}\n.cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;}\n\n.cm-s-midnight .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/monokai.css",
    "content": "/* Based on Sublime Text's Monokai theme */\n\n.cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;}\n.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;}\n.cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;}\n.cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;}\n.cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;}\n\n.cm-s-monokai span.cm-comment {color: #75715e;}\n.cm-s-monokai span.cm-atom {color: #ae81ff;}\n.cm-s-monokai span.cm-number {color: #ae81ff;}\n\n.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;}\n.cm-s-monokai span.cm-keyword {color: #f92672;}\n.cm-s-monokai span.cm-string {color: #e6db74;}\n\n.cm-s-monokai span.cm-variable {color: #a6e22e;}\n.cm-s-monokai span.cm-variable-2 {color: #9effff;}\n.cm-s-monokai span.cm-def {color: #fd971f;}\n.cm-s-monokai span.cm-bracket {color: #f8f8f2;}\n.cm-s-monokai span.cm-tag {color: #f92672;}\n.cm-s-monokai span.cm-link {color: #ae81ff;}\n.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}\n\n.cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;}\n.cm-s-monokai .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/neat.css",
    "content": ".cm-s-neat span.cm-comment { color: #a86; }\n.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }\n.cm-s-neat span.cm-string { color: #a22; }\n.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }\n.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }\n.cm-s-neat span.cm-variable { color: black; }\n.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }\n.cm-s-neat span.cm-meta {color: #555;}\n.cm-s-neat span.cm-link { color: #3a3; }\n\n.cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;}\n.cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/night.css",
    "content": "/* Loosely based on the Midnight Textmate theme */\n\n.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }\n.cm-s-night div.CodeMirror-selected { background: #447 !important; }\n.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }\n.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }\n.cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-night span.cm-comment { color: #6900a1; }\n.cm-s-night span.cm-atom { color: #845dc4; }\n.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }\n.cm-s-night span.cm-keyword { color: #599eff; }\n.cm-s-night span.cm-string { color: #37f14a; }\n.cm-s-night span.cm-meta { color: #7678e2; }\n.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }\n.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }\n.cm-s-night span.cm-bracket { color: #8da6ce; }\n.cm-s-night span.cm-comment { color: #6900a1; }\n.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }\n.cm-s-night span.cm-link { color: #845dc4; }\n.cm-s-night span.cm-error { color: #9d1e15; }\n\n.cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;}\n.cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/paraiso-dark.css",
    "content": "/*\n\n    Name:       Paraíso (Dark)\n    Author:     Jan T. Sott\n\n    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)\n    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)\n\n*/\n\n.cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;}\n.cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;}\n.cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;}\n.cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;}\n.cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;}\n\n.cm-s-paraiso-dark span.cm-comment {color: #e96ba8;}\n.cm-s-paraiso-dark span.cm-atom {color: #815ba4;}\n.cm-s-paraiso-dark span.cm-number {color: #815ba4;}\n\n.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;}\n.cm-s-paraiso-dark span.cm-keyword {color: #ef6155;}\n.cm-s-paraiso-dark span.cm-string {color: #fec418;}\n\n.cm-s-paraiso-dark span.cm-variable {color: #48b685;}\n.cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;}\n.cm-s-paraiso-dark span.cm-def {color: #f99b15;}\n.cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;}\n.cm-s-paraiso-dark span.cm-tag {color: #ef6155;}\n.cm-s-paraiso-dark span.cm-link {color: #815ba4;}\n.cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;}\n\n.cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;}\n.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/paraiso-light.css",
    "content": "/*\n\n    Name:       Paraíso (Light)\n    Author:     Jan T. Sott\n\n    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)\n    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)\n\n*/\n\n.cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;}\n.cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;}\n.cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;}\n.cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;}\n.cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;}\n\n.cm-s-paraiso-light span.cm-comment {color: #e96ba8;}\n.cm-s-paraiso-light span.cm-atom {color: #815ba4;}\n.cm-s-paraiso-light span.cm-number {color: #815ba4;}\n\n.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;}\n.cm-s-paraiso-light span.cm-keyword {color: #ef6155;}\n.cm-s-paraiso-light span.cm-string {color: #fec418;}\n\n.cm-s-paraiso-light span.cm-variable {color: #48b685;}\n.cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;}\n.cm-s-paraiso-light span.cm-def {color: #f99b15;}\n.cm-s-paraiso-light span.cm-bracket {color: #41323f;}\n.cm-s-paraiso-light span.cm-tag {color: #ef6155;}\n.cm-s-paraiso-light span.cm-link {color: #815ba4;}\n.cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;}\n\n.cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;}\n.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/pastel-on-dark.css",
    "content": "/**\n * Pastel On Dark theme ported from ACE editor\n * @license MIT\n * @copyright AtomicPages LLC 2014\n * @author Dennis Thompson, AtomicPages LLC\n * @version 1.1\n * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme\n */\n\n.cm-s-pastel-on-dark.CodeMirror {\n\tbackground: #2c2827;\n\tcolor: #8F938F;\n\tline-height: 1.5;\n\tfont-family: consolas, Courier, monospace;\n\tfont-size: 14px;\n}\n.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; }\n.cm-s-pastel-on-dark .CodeMirror-gutters {\n\tbackground: #34302f;\n\tborder-right: 0px;\n\tpadding: 0 3px;\n}\n.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; }\n.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }\n.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; }\n.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; }\n.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; }\n.cm-s-pastel-on-dark span.cm-property { color: #8F938F; }\n.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; }\n.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; }\n.cm-s-pastel-on-dark span.cm-string { color: #66A968; }\n.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; }\n.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; }\n.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; }\n.cm-s-pastel-on-dark span.cm-def { color: #757aD8; }\n.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; }\n.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; }\n.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; }\n.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; }\n.cm-s-pastel-on-dark span.cm-error {\n\tbackground: #757aD8;\n\tcolor: #f8f8f0;\n}\n.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; }\n.cm-s-pastel-on-dark .CodeMirror-matchingbracket {\n\tborder: 1px solid rgba(255,255,255,0.25);\n\tcolor: #8F938F !important;\n\tmargin: -1px -1px 0 -1px;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/rubyblue.css",
    "content": ".cm-s-rubyblue { font-family: Trebuchet, Verdana, sans-serif; }\t/* - customized editor font - */\n\n.cm-s-rubyblue.CodeMirror { background: #112435; color: white; }\n.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; }\n.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; }\n.cm-s-rubyblue .CodeMirror-linenumber { color: white; }\n.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }\n.cm-s-rubyblue span.cm-atom { color: #F4C20B; }\n.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }\n.cm-s-rubyblue span.cm-keyword { color: #F0F; }\n.cm-s-rubyblue span.cm-string { color: #F08047; }\n.cm-s-rubyblue span.cm-meta { color: #F0F; }\n.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }\n.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }\n.cm-s-rubyblue span.cm-bracket { color: #F0F; }\n.cm-s-rubyblue span.cm-link { color: #F4C20B; }\n.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }\n.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }\n.cm-s-rubyblue span.cm-error { color: #AF2018; }\n\n.cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/solarized.css",
    "content": "/*\nSolarized theme for code-mirror\nhttp://ethanschoonover.com/solarized\n*/\n\n/*\nSolarized color pallet\nhttp://ethanschoonover.com/solarized/img/solarized-palette.png\n*/\n\n.solarized.base03 { color: #002b36; }\n.solarized.base02 { color: #073642; }\n.solarized.base01 { color: #586e75; }\n.solarized.base00 { color: #657b83; }\n.solarized.base0 { color: #839496; }\n.solarized.base1 { color: #93a1a1; }\n.solarized.base2 { color: #eee8d5; }\n.solarized.base3  { color: #fdf6e3; }\n.solarized.solar-yellow  { color: #b58900; }\n.solarized.solar-orange  { color: #cb4b16; }\n.solarized.solar-red { color: #dc322f; }\n.solarized.solar-magenta { color: #d33682; }\n.solarized.solar-violet  { color: #6c71c4; }\n.solarized.solar-blue { color: #268bd2; }\n.solarized.solar-cyan { color: #2aa198; }\n.solarized.solar-green { color: #859900; }\n\n/* Color scheme for code-mirror */\n\n.cm-s-solarized {\n  line-height: 1.45em;\n  font-family: Menlo,Monaco,\"Andale Mono\",\"lucida console\",\"Courier New\",monospace !important;\n  color-profile: sRGB;\n  rendering-intent: auto;\n}\n.cm-s-solarized.cm-s-dark {\n  color: #839496;\n  background-color:  #002b36;\n  text-shadow: #002b36 0 1px;\n}\n.cm-s-solarized.cm-s-light {\n  background-color: #fdf6e3;\n  color: #657b83;\n  text-shadow: #eee8d5 0 1px;\n}\n\n.cm-s-solarized .CodeMirror-widget {\n  text-shadow: none;\n}\n\n\n.cm-s-solarized .cm-keyword { color: #cb4b16 }\n.cm-s-solarized .cm-atom { color: #d33682; }\n.cm-s-solarized .cm-number { color: #d33682; }\n.cm-s-solarized .cm-def { color: #2aa198; }\n\n.cm-s-solarized .cm-variable { color: #268bd2; }\n.cm-s-solarized .cm-variable-2 { color: #b58900; }\n.cm-s-solarized .cm-variable-3 { color: #6c71c4; }\n\n.cm-s-solarized .cm-property { color: #2aa198; }\n.cm-s-solarized .cm-operator {color: #6c71c4;}\n\n.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; }\n\n.cm-s-solarized .cm-string { color: #859900; }\n.cm-s-solarized .cm-string-2 { color: #b58900; }\n\n.cm-s-solarized .cm-meta { color: #859900; }\n.cm-s-solarized .cm-qualifier { color: #b58900; }\n.cm-s-solarized .cm-builtin { color: #d33682; }\n.cm-s-solarized .cm-bracket { color: #cb4b16; }\n.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; }\n.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; }\n.cm-s-solarized .cm-tag { color: #93a1a1 }\n.cm-s-solarized .cm-attribute {  color: #2aa198; }\n.cm-s-solarized .cm-header { color: #586e75; }\n.cm-s-solarized .cm-quote { color: #93a1a1; }\n.cm-s-solarized .cm-hr {\n  color: transparent;\n  border-top: 1px solid #586e75;\n  display: block;\n}\n.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; }\n.cm-s-solarized .cm-special { color: #6c71c4; }\n.cm-s-solarized .cm-em {\n  color: #999;\n  text-decoration: underline;\n  text-decoration-style: dotted;\n}\n.cm-s-solarized .cm-strong { color: #eee; }\n.cm-s-solarized .cm-tab:before {\n  content: \"➤\";   /*visualize tab character*/\n  color: #586e75;\n  position:absolute;\n}\n.cm-s-solarized .cm-error,\n.cm-s-solarized .cm-invalidchar {\n  color: #586e75;\n  border-bottom: 1px dotted #dc322f;\n}\n\n.cm-s-solarized.cm-s-dark .CodeMirror-selected {\n  background: #073642;\n}\n\n.cm-s-solarized.cm-s-light .CodeMirror-selected {\n  background: #eee8d5;\n}\n\n/* Editor styling */\n\n\n\n/* Little shadow on the view-port of the buffer view */\n.cm-s-solarized.CodeMirror {\n  -moz-box-shadow: inset 7px 0 12px -6px #000;\n  -webkit-box-shadow: inset 7px 0 12px -6px #000;\n  box-shadow: inset 7px 0 12px -6px #000;\n}\n\n/* Gutter border and some shadow from it  */\n.cm-s-solarized .CodeMirror-gutters {\n  padding: 0 15px 0 10px;\n  box-shadow: 0 10px 20px black;\n  border-right: 1px solid;\n}\n\n/* Gutter colors and line number styling based of color scheme (dark / light) */\n\n/* Dark */\n.cm-s-solarized.cm-s-dark .CodeMirror-gutters {\n  background-color: #073642;\n  border-color: #00232c;\n}\n\n.cm-s-solarized.cm-s-dark .CodeMirror-linenumber {\n  text-shadow: #021014 0 -1px;\n}\n\n/* Light */\n.cm-s-solarized.cm-s-light .CodeMirror-gutters {\n  background-color: #eee8d5;\n  border-color: #eee8d5;\n}\n\n/* Common */\n.cm-s-solarized .CodeMirror-linenumber {\n  color: #586e75;\n}\n\n.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text {\n  color: #586e75;\n}\n\n.cm-s-solarized .CodeMirror-lines {\n  padding-left: 5px;\n}\n\n.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor {\n  border-left: 1px solid #819090;\n}\n\n/*\nActive line. Negative margin compensates left padding of the text in the\nview-port\n*/\n.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background {\n  background: rgba(255, 255, 255, 0.10);\n}\n.cm-s-solarized.cm-s-light .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.10);\n}\n\n/*\nView-port and gutter both get little noise background to give it a real feel.\n*/\n.cm-s-solarized.CodeMirror,\n.cm-s-solarized .CodeMirror-gutters {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/the-matrix.css",
    "content": ".cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; }\n.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; }\n.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; }\n.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; }\n.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; }\n\n.cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;}\n.cm-s-the-matrix span.cm-atom {color: #3FF;}\n.cm-s-the-matrix span.cm-number {color: #FFB94F;}\n.cm-s-the-matrix span.cm-def {color: #99C;}\n.cm-s-the-matrix span.cm-variable {color: #F6C;}\n.cm-s-the-matrix span.cm-variable-2 {color: #C6F;}\n.cm-s-the-matrix span.cm-variable-3 {color: #96F;}\n.cm-s-the-matrix span.cm-property {color: #62FFA0;}\n.cm-s-the-matrix span.cm-operator {color: #999}\n.cm-s-the-matrix span.cm-comment {color: #CCCCCC;}\n.cm-s-the-matrix span.cm-string {color: #39C;}\n.cm-s-the-matrix span.cm-meta {color: #C9F;}\n.cm-s-the-matrix span.cm-qualifier {color: #FFF700;}\n.cm-s-the-matrix span.cm-builtin {color: #30a;}\n.cm-s-the-matrix span.cm-bracket {color: #cc7;}\n.cm-s-the-matrix span.cm-tag {color: #FFBD40;}\n.cm-s-the-matrix span.cm-attribute {color: #FFF700;}\n.cm-s-the-matrix span.cm-error {color: #FF0000;}\n\n.cm-s-the-matrix .CodeMirror-activeline-background {background: #040;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/tomorrow-night-eighties.css",
    "content": "/*\n\n    Name:       Tomorrow Night - Eighties\n    Author:     Chris Kempson\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;}\n.cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;}\n.cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;}\n.cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;}\n.cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;}\n\n.cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;}\n.cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;}\n.cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;}\n\n.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;}\n.cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;}\n.cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;}\n\n.cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;}\n.cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;}\n.cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;}\n.cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;}\n.cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;}\n.cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;}\n.cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;}\n\n.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;}\n.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/twilight.css",
    "content": ".cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/\n.cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/\n\n.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; }\n.cm-s-twilight .CodeMirror-linenumber { color: #aaa; }\n.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-twilight .cm-keyword {  color: #f9ee98; } /**/\n.cm-s-twilight .cm-atom { color: #FC0; }\n.cm-s-twilight .cm-number { color:  #ca7841; } /**/\n.cm-s-twilight .cm-def { color: #8DA6CE; }\n.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/\n.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/\n.cm-s-twilight .cm-operator { color: #cda869; } /**/\n.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/\n.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/\n.cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/\n.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/\n.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/\n.cm-s-twilight .cm-tag { color: #997643; } /**/\n.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/\n.cm-s-twilight .cm-header { color: #FF6400; }\n.cm-s-twilight .cm-hr { color: #AEAEAE; }\n.cm-s-twilight .cm-link {   color:#ad9361; font-style:italic; text-decoration:none; } /**/\n.cm-s-twilight .cm-error { border-bottom: 1px solid red; }\n\n.cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;}\n.cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/vibrant-ink.css",
    "content": "/* Taken from the popular Visual Studio Vibrant Ink Schema */\n\n.cm-s-vibrant-ink.CodeMirror { background: black; color: white; }\n.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; }\n\n.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-vibrant-ink .cm-keyword {  color: #CC7832; }\n.cm-s-vibrant-ink .cm-atom { color: #FC0; }\n.cm-s-vibrant-ink .cm-number { color:  #FFEE98; }\n.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }\n.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D }\n.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D }\n.cm-s-vibrant-ink .cm-operator { color: #888; }\n.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }\n.cm-s-vibrant-ink .cm-string { color:  #A5C25C }\n.cm-s-vibrant-ink .cm-string-2 { color: red }\n.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }\n.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-header { color: #FF6400; }\n.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }\n.cm-s-vibrant-ink .cm-link { color: blue; }\n.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }\n\n.cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;}\n.cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/xq-dark.css",
    "content": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; }\n.cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; }\n.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }\n.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; }\n.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; }\n\n.cm-s-xq-dark span.cm-keyword {color: #FFBD40;}\n.cm-s-xq-dark span.cm-atom {color: #6C8CD5;}\n.cm-s-xq-dark span.cm-number {color: #164;}\n.cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;}\n.cm-s-xq-dark span.cm-variable {color: #FFF;}\n.cm-s-xq-dark span.cm-variable-2 {color: #EEE;}\n.cm-s-xq-dark span.cm-variable-3 {color: #DDD;}\n.cm-s-xq-dark span.cm-property {}\n.cm-s-xq-dark span.cm-operator {}\n.cm-s-xq-dark span.cm-comment {color: gray;}\n.cm-s-xq-dark span.cm-string {color: #9FEE00;}\n.cm-s-xq-dark span.cm-meta {color: yellow;}\n.cm-s-xq-dark span.cm-qualifier {color: #FFF700;}\n.cm-s-xq-dark span.cm-builtin {color: #30a;}\n.cm-s-xq-dark span.cm-bracket {color: #cc7;}\n.cm-s-xq-dark span.cm-tag {color: #FFBD40;}\n.cm-s-xq-dark span.cm-attribute {color: #FFF700;}\n.cm-s-xq-dark span.cm-error {color: #f00;}\n\n.cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;}\n.cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/CodeMirror/theme/xq-light.css",
    "content": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n.cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; }\n.cm-s-xq-light span.cm-atom {color: #6C8CD5;}\n.cm-s-xq-light span.cm-number {color: #164;}\n.cm-s-xq-light span.cm-def {text-decoration:underline;}\n.cm-s-xq-light span.cm-variable {color: black; }\n.cm-s-xq-light span.cm-variable-2 {color:black;}\n.cm-s-xq-light span.cm-variable-3 {color: black; }\n.cm-s-xq-light span.cm-property {}\n.cm-s-xq-light span.cm-operator {}\n.cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;}\n.cm-s-xq-light span.cm-string {color: red;}\n.cm-s-xq-light span.cm-meta {color: yellow;}\n.cm-s-xq-light span.cm-qualifier {color: grey}\n.cm-s-xq-light span.cm-builtin {color: #7EA656;}\n.cm-s-xq-light span.cm-bracket {color: #cc7;}\n.cm-s-xq-light span.cm-tag {color: #3F7F7F;}\n.cm-s-xq-light span.cm-attribute {color: #7F007F;}\n.cm-s-xq-light span.cm-error {color: #f00;}\n\n.cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;}\n.cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/Contests/results-page.css",
    "content": "﻿.table-bordered th {\n    padding: 10px;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/Contests/submission-page.css",
    "content": "﻿.problem_submit_grid .k-grid-top {\n    line-height: 25px;\n    text-align: center;\n}\n\n.row {\n    margin-bottom: 10px;\n}\n\n    .row .k-widget * {\n        -webkit-box-sizing: border-box !important;\n        -moz-box-sizing: border-box !important;\n        box-sizing: border-box !important;\n    }\n\n.resource-glyph {\n    margin-right: 5px;\n    padding-left: 5px;\n}\n\n.resource-link {\n    padding-right: 5px;\n    border-right: 1px solid grey;\n}\n\n.materials {\n    margin-bottom: 10px;\n}\n\n.alert {\n    padding: 10px;\n}\n\n.countdown-warning {\n    color: rgb(204, 21, 21) !important;\n}\n\n#countdown-timer {\n    display: none;\n}\n\n.submit-container {\n    margin: 6px;\n}\n\n.submision-submit-button {\n    padding-top: 0;\n    padding-bottom: 1px;\n}\n\n.view-submission-button {\n    padding: 5px;\n    margin: 0 5px;\n}\n\n.problem-result-container .k-grid td {\n    white-space: nowrap;\n    -o-text-overflow: ellipsis;\n    -ms-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    max-width: 120px;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/Contests/submission-view-page.css",
    "content": "﻿.CodeMirror-merge, .CodeMirror-merge .CodeMirror {\n    height: 150px;\n}\n\n    .CodeMirror-merge .CodeMirror-code {\n        color: #fff;\n    }\n\n.CodeMirror-merge-l-chunk-end, .CodeMirror-merge-l-chunk-start {\n    border: none;\n}\n\n.CodeMirror-merge-l-chunk {\n    background: transparent;\n}\n\n.CodeMirror-merge-2pane .CodeMirror-merge-pane {\n    width: 50%;\n}\n\n.CodeMirror-merge-2pane .CodeMirror-merge-gap {\n    width: 0;\n}\n\n.diff {\n    padding: 10px;\n    background-color: #AAA;\n    border-color: #AAA;\n    color: black;\n}\n\nspan.CodeMirror-merge-l-deleted {\n    background: none;\n    background-color: rgb(199, 13, 13);\n}\n\nspan.CodeMirror-merge-l-inserted {\n    background: none;\n    background-color: rgb(12, 108, 12);\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/KendoUI/kendo.black.css",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n/* Widget Base Styles */\n/* Selects, Dropdowns */\n/* Inputs */\n/* Links */\n/* Headers */\n/* Buttons */\n/* Group Base Styles */\n/* Content */\n/* Widget States */\n/* Hover State */\n/* Selected State */\n/*Focused State*/\n/* Active State */\n/* Error State */\n/* Disabled State */\n/* Notification */\n/* ToolTip */\n/* Validation Message */\n/* Splitter */\n/* Slider */\n/* Grid */\n/* Scheduler */\n/* Upload */\n/* Gantt*/\n/* Loading Indicators */\n/* Shadows */\n/* Border Radii */\n/* Icons */\n/* Kendo skin */\n.k-in,\n.k-item,\n.k-window-action {\n  border-color: transparent;\n}\n/* main colors */\n.k-block,\n.k-widget {\n  background-color: #4d4d4d;\n}\n.k-block,\n.k-widget,\n.k-input,\n.k-textbox,\n.k-group,\n.k-content,\n.k-header,\n.k-filter-row > th,\n.k-editable-area,\n.k-separator,\n.k-colorpicker .k-i-arrow-s,\n.k-textbox > input,\n.k-autocomplete,\n.k-dropdown-wrap,\n.k-toolbar,\n.k-group-footer td,\n.k-grid-footer,\n.k-footer-template td,\n.k-state-default,\n.k-state-default .k-select,\n.k-state-disabled,\n.k-grid-header,\n.k-grid-header-wrap,\n.k-grid-header-locked,\n.k-grid-footer-locked,\n.k-grid-content-locked,\n.k-grid td,\n.k-grid td.k-state-selected,\n.k-grid-footer-wrap,\n.k-pager-wrap,\n.k-pager-wrap .k-link,\n.k-pager-refresh,\n.k-grouping-header,\n.k-grouping-header .k-group-indicator,\n.k-panelbar > .k-item > .k-link,\n.k-panel > .k-item > .k-link,\n.k-panelbar .k-panel,\n.k-panelbar .k-content,\n.k-treemap-tile,\n.k-calendar th,\n.k-slider-track,\n.k-splitbar,\n.k-dropzone-active,\n.k-tiles,\n.k-toolbar,\n.k-tooltip,\n.k-button-group .k-tool,\n.k-upload-files {\n  border-color: #2b2b2b;\n}\n.k-group,\n.k-toolbar,\n.k-grouping-header,\n.k-pager-wrap,\n.k-group-footer td,\n.k-grid-footer,\n.k-footer-template td,\n.k-widget .k-status,\n.k-calendar th,\n.k-dropzone-hovered,\n.k-widget.k-popup {\n  background-color: #555555;\n}\n.k-grouping-row td,\ntd.k-group-cell,\n.k-resize-handle-inner {\n  background-color: #1d1d1d;\n}\n.k-list-container {\n  border-color: #2b2b2b;\n  background-color: #272727;\n}\n.k-content,\n.k-editable-area,\n.k-panelbar > li.k-item,\n.k-panel > li.k-item,\n.k-tiles {\n  background-color: #3d3d3d;\n}\n.k-alt,\n.k-separator,\n.k-resource.k-alt,\n.k-pivot-layout > tbody > tr:first-child > td:first-child {\n  background-color: #525252;\n}\n.k-pivot-rowheaders .k-alt .k-alt,\n.k-header.k-alt {\n  background-color: #666666;\n}\n.k-textbox,\n.k-autocomplete.k-header,\n.k-dropdown-wrap.k-state-active,\n.k-picker-wrap.k-state-active,\n.k-numeric-wrap.k-state-active {\n  border-color: #2b2b2b;\n  background-color: #272727;\n}\n.k-textbox > input,\n.k-autocomplete .k-input,\n.k-dropdown-wrap .k-input,\n.k-autocomplete.k-state-focused .k-input,\n.k-dropdown-wrap.k-state-focused .k-input,\n.k-picker-wrap.k-state-focused .k-input,\n.k-numeric-wrap.k-state-focused .k-input {\n  border-color: #2b2b2b;\n}\ninput.k-textbox,\ntextarea.k-textbox,\ninput.k-textbox:hover,\ntextarea.k-textbox:hover,\n.k-textbox > input {\n  background: none;\n}\n.k-input,\ninput.k-textbox,\ntextarea.k-textbox,\ninput.k-textbox:hover,\ntextarea.k-textbox:hover,\n.k-textbox > input,\n.k-multiselect-wrap {\n  background-color: #ffffff;\n  color: #181818;\n}\n.k-input[readonly] {\n  background-color: #ffffff;\n  color: #181818;\n}\n.k-block,\n.k-widget,\n.k-popup,\n.k-content,\n.k-toolbar,\n.k-dropdown .k-input {\n  color: #ffffff;\n}\n.k-inverse {\n  color: #000000;\n}\n.k-block {\n  color: #ffffff;\n}\n.k-link:link,\n.k-link:visited,\n.k-nav-current.k-state-hover .k-link {\n  color: #ffffff;\n}\n.k-tabstrip-items .k-link,\n.k-panelbar > li > .k-link {\n  color: #ffffff;\n}\n.k-header,\n.k-treemap-title,\n.k-grid-header .k-header > .k-link {\n  color: #ffffff;\n}\n.k-header,\n.k-grid-header,\n.k-toolbar,\n.k-dropdown-wrap,\n.k-picker-wrap,\n.k-numeric-wrap,\n.k-grouping-header,\n.k-pager-wrap,\n.k-textbox,\n.k-button,\n.k-progressbar,\n.k-draghandle,\n.k-autocomplete,\n.k-state-highlight,\n.k-tabstrip-items .k-item,\n.k-panelbar .k-tabstrip-items .k-item,\n.km-pane-wrapper > .km-pane > .km-view > .km-content {\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-position: 50% 50%;\n  background-color: #1d1d1d;\n}\n.k-widget.k-tooltip {\n  background-image: url('textures/highlight.png');\n}\n.k-block,\n.k-header,\n.k-grid-header,\n.k-toolbar,\n.k-grouping-header,\n.k-pager-wrap,\n.k-button,\n.k-draghandle,\n.k-treemap-tile,\nhtml .km-pane-wrapper .k-header {\n  background-color: #1d1d1d;\n}\n/* icons */\n.k-icon:hover,\n.k-state-hover .k-icon,\n.k-state-selected .k-icon,\n.k-state-focused .k-icon,\n.k-column-menu .k-state-hover .k-sprite,\n.k-column-menu .k-state-active .k-sprite {\n  opacity: 1;\n}\n.k-icon,\n.k-state-disabled .k-icon,\n.k-column-menu .k-sprite {\n  opacity: 0.85;\n}\n.k-mobile-list .k-check:checked,\n.k-mobile-list .k-edit-field [type=checkbox]:checked,\n.k-mobile-list .k-edit-field [type=radio]:checked {\n  opacity: 0.85;\n}\n.k-tool {\n  border-color: transparent;\n}\n.k-icon,\n.k-tool-icon,\n.k-grouping-dropclue,\n.k-drop-hint,\n.k-column-menu .k-sprite,\n.k-grid-mobile .k-resize-handle-inner:before,\n.k-grid-mobile .k-resize-handle-inner:after {\n  background-image: url('Black/sprite.png');\n  border-color: transparent;\n}\n/* IE will ignore the above selectors if these are added too */\n.k-mobile-list .k-check:checked,\n.k-mobile-list .k-edit-field [type=checkbox]:checked,\n.k-mobile-list .k-edit-field [type=radio]:checked {\n  background-image: url('Black/sprite.png');\n  border-color: transparent;\n}\n.k-loading,\n.k-state-hover .k-loading {\n  background-image: url('Black/loading.gif');\n  background-position: 50% 50%;\n}\n.k-loading-image {\n  background-image: url('Black/loading-image.gif');\n}\n.k-loading-color {\n  background-color: #666666;\n}\n.k-button {\n  color: #ffffff;\n  border-color: #2b2b2b;\n  background-color: #272727;\n}\n.k-draghandle {\n  border-color: #2b2b2b;\n  background-color: #4d4d4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-draghandle:hover {\n  border-color: #2b2b2b;\n  background-color: #3d3d3d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n/* Scheduler */\n.k-scheduler {\n  color: #ffffff;\n  background-color: #272727;\n}\n.k-scheduler-layout {\n  color: #ffffff;\n}\n.k-scheduler-datecolumn,\n.k-scheduler-groupcolumn {\n  background-color: #272727;\n  color: #ffffff;\n}\n.k-scheduler-times tr,\n.k-scheduler-times th,\n.k-scheduler-table td,\n.k-scheduler-header th,\n.k-scheduler-header-wrap,\n.k-scheduler-times {\n  border-color: #444444;\n}\n.k-nonwork-hour {\n  background-color: #363636;\n}\n.k-gantt .k-nonwork-hour {\n  background-color: rgba(0, 0, 0, 0.02);\n}\n.k-gantt .k-header.k-nonwork-hour {\n  background-color: rgba(0, 0, 0, 0.2);\n}\n.k-scheduler-table .k-today,\n.k-today > .k-scheduler-datecolumn,\n.k-today > .k-scheduler-groupcolumn {\n  background-color: #303030;\n}\n.k-scheduler-now-arrow {\n  border-left-color: #ff0000;\n}\n.k-scheduler-now-line {\n  background-color: #ff0000;\n}\n.k-event,\n.k-task-complete {\n  border-color: #0167cc;\n  background: #0167cc 0 -257px url('textures/highlight.png') repeat-x;\n  color: #ffffff;\n}\n.k-event-inverse {\n  color: #272727;\n}\n.k-event.k-state-selected {\n  background-position: 0 0;\n}\n.k-ie7 .k-event .k-resize-handle,\n.k-event .k-resize-handle:after,\n.k-ie7 .k-task-single .k-resize-handle,\n.k-task-single .k-resize-handle:after {\n  background-color: #ffffff;\n}\n.k-scheduler-marquee:before,\n.k-scheduler-marquee:after {\n  border-color: #0066cc;\n}\n.k-panelbar .k-content,\n.k-panelbar .k-panel,\n.k-panelbar .k-item {\n  background-color: #3d3d3d;\n  color: #ffffff;\n  border-color: #2b2b2b;\n}\n.k-panelbar > li > .k-link {\n  color: #ffffff;\n}\n.k-panelbar > .k-item > .k-link {\n  border-color: #2b2b2b;\n}\n.k-panel > li.k-item {\n  background-color: #3d3d3d;\n}\n/* states */\n.k-state-active,\n.k-state-active:hover,\n.k-active-filter,\n.k-tabstrip .k-state-active {\n  background-color: #4d4d4d;\n  border-color: #020202;\n  color: #ffffff;\n}\n.k-fieldselector .k-list-container {\n  background-color: #4d4d4d;\n}\n.k-button:focus,\n.k-button.k-state-focused {\n  border-color: #2b2b2b;\n}\n.k-button:hover,\n.k-button.k-state-hover {\n  color: #ffffff;\n  border-color: #2b2b2b;\n  background-color: #3d3d3d;\n}\n.k-button:active,\n.k-button.k-state-active {\n  color: #ffffff;\n  background-color: #0066cc;\n  border-color: #0066cc;\n}\n.k-button:active:hover,\n.k-button.k-state-active:hover {\n  color: #ffffff;\n  border-color: #145cbc;\n  background-color: #004eb6;\n}\n.k-button[disabled],\n.k-button.k-state-disabled,\n.k-state-disabled .k-button,\n.k-state-disabled .k-button:hover,\n.k-button.k-state-disabled:hover,\n.k-state-disabled .k-button:active,\n.k-button.k-state-disabled:active {\n  color: #7a7a7a;\n  border-color: #2b2b2b;\n  background-color: #272727;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n}\n.k-button:focus:not(.k-state-disabled):not([disabled]) {\n  -webkit-box-shadow: inset 0 0 3px 1px #080808;\n  box-shadow: inset 0 0 3px 1px #080808;\n}\n.k-button:focus:active:not(.k-state-disabled):not([disabled]) {\n  -webkit-box-shadow: inset 0 0 3px 1px #004080;\n  box-shadow: inset 0 0 3px 1px #004080;\n}\n.k-menu .k-state-hover > .k-state-active {\n  background-color: transparent;\n}\n.k-state-highlight {\n  background: #4d4d4d;\n  color: #ffffff;\n}\n.k-state-focused,\n.k-grouping-row .k-state-focused {\n  border-color: #2b2b2b;\n}\n.k-calendar .k-link {\n  color: #ffffff;\n}\n.k-calendar .k-footer {\n  padding: 0;\n}\n.k-calendar .k-footer .k-nav-today {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #4d4d4d;\n}\n.k-calendar .k-footer .k-nav-today:hover,\n.k-calendar .k-footer .k-nav-today.k-state-hover {\n  background-color: #4d4d4d;\n  text-decoration: underline;\n}\n.k-calendar .k-footer .k-nav-today:active {\n  background-color: #4d4d4d;\n}\n.k-calendar .k-link.k-nav-fast {\n  color: #ffffff;\n}\n.k-calendar .k-nav-fast.k-state-hover {\n  text-decoration: none;\n  background-color: #3d3d3d;\n  color: #ffffff;\n}\n.k-calendar .k-link.k-state-hover,\n.k-window-titlebar .k-link {\n  border-radius: 4px;\n}\n.k-calendar .k-footer .k-link {\n  border-radius: 0;\n}\n.k-calendar th {\n  background-color: #555555;\n}\n.k-calendar-container.k-group {\n  border-color: #2b2b2b;\n}\n.k-state-selected,\n.k-state-selected:link,\n.k-state-selected:visited,\n.k-list > .k-state-selected,\n.k-list > .k-state-highlight,\n.k-panel > .k-state-selected,\n.k-ghost-splitbar-vertical,\n.k-ghost-splitbar-horizontal,\n.k-draghandle.k-state-selected:hover,\n.k-scheduler .k-scheduler-toolbar .k-state-selected,\n.k-scheduler .k-today.k-state-selected,\n.k-marquee-color {\n  color: #ffffff;\n  background-color: #0066cc;\n  border-color: #0066cc;\n}\n.k-marquee-text {\n  color: #ffffff;\n}\n.k-state-focused,\n.k-list > .k-state-focused,\n.k-listview > .k-state-focused,\n.k-grid-header th.k-state-focused,\ntd.k-state-focused,\n.k-button.k-state-focused {\n  -webkit-box-shadow: inset 0 0 3px 1px #080808;\n  box-shadow: inset 0 0 3px 1px #080808;\n}\n.k-state-focused.k-state-selected,\n.k-list > .k-state-focused.k-state-selected,\n.k-listview > .k-state-focused.k-state-selected,\ntd.k-state-focused.k-state-selected {\n  -webkit-box-shadow: inset 0 0 3px 1px #004080;\n  box-shadow: inset 0 0 3px 1px #004080;\n}\n.k-ie8 .k-panelbar span.k-state-focused,\n.k-ie8 .k-menu li.k-state-focused,\n.k-ie8 .k-listview > .k-state-focused,\n.k-ie8 .k-grid-header th.k-state-focused,\n.k-ie8 td.k-state-focused,\n.k-ie8 .k-tool.k-state-hover,\n.k-ie8 .k-button:focus,\n.k-ie8 .k-button.k-state-focused,\n.k-ie7 .k-panelbar span.k-state-focused,\n.k-ie7 .k-menu li.k-state-focused,\n.k-ie7 .k-listview > .k-state-focused,\n.k-ie7 .k-grid-header th.k-state-focused,\n.k-ie7 td.k-state-focused,\n.k-ie7 .k-tool.k-state-hover,\n.k-ie7 .k-button:focus,\n.k-ie7 .k-button.k-state-focused {\n  background-color: #3d3d3d;\n}\n.k-list > .k-state-selected.k-state-focused {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-state-selected > .k-link,\n.k-panelbar > li > .k-state-selected,\n.k-panelbar > li.k-state-default > .k-link.k-state-selected {\n  color: #ffffff;\n}\n.k-state-hover,\n.k-state-hover:hover,\n.k-splitbar-horizontal-hover:hover,\n.k-splitbar-vertical-hover:hover,\n.k-list > .k-state-hover,\n.k-scheduler .k-scheduler-toolbar ul li.k-state-hover,\n.k-pager-wrap .k-link:hover,\n.k-dropdown .k-state-focused,\n.k-filebrowser-dropzone,\n.k-mobile-list .k-item > .k-link:active,\n.k-mobile-list .k-item > .k-label:active,\n.k-mobile-list .k-edit-label.k-check:active,\n.k-mobile-list .k-recur-view .k-check:active {\n  color: #ffffff;\n  background-color: #3d3d3d;\n  border-color: #2b2b2b;\n}\n/* this selector should be used separately, otherwise old IEs ignore the whole rule */\n.k-mobile-list .k-scheduler-timezones .k-edit-field:nth-child(2):active {\n  color: #ffffff;\n  background-color: #3d3d3d;\n  border-color: #2b2b2b;\n}\n.k-ie7 .k-window-titlebar .k-state-hover,\n.k-ie8 .k-window-titlebar .k-state-hover {\n  border-color: #2b2b2b;\n}\n.k-state-hover > .k-select,\n.k-state-focused > .k-select {\n  border-color: #2b2b2b;\n}\n.k-button:hover,\n.k-button.k-state-hover,\n.k-button:focus,\n.k-button.k-state-focused,\n.k-textbox:hover,\n.k-state-hover,\n.k-state-hover:hover,\n.k-pager-wrap .k-link:hover,\n.k-other-month.k-state-hover .k-link,\ndiv.k-filebrowser-dropzone em,\n.k-draghandle:hover {\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n}\n.k-pager-wrap {\n  background-color: #1d1d1d;\n  color: #ffffff;\n}\n.k-autocomplete.k-state-active,\n.k-picker-wrap.k-state-active,\n.k-numeric-wrap.k-state-active,\n.k-dropdown-wrap.k-state-active,\n.k-state-active,\n.k-state-active:hover,\n.k-state-active > .k-link,\n.k-button:active,\n.k-panelbar > .k-item > .k-state-focused {\n  background-image: none;\n}\n.k-state-selected,\n.k-button:active,\n.k-button.k-state-active,\n.k-draghandle.k-state-selected:hover {\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n}\n.k-button:active,\n.k-button.k-state-active,\n.k-draghandle.k-state-selected:hover {\n  background-position: 50% 50%;\n}\n.k-tool-icon {\n  background-image: url('Black/sprite.png');\n}\n.k-state-hover > .k-link,\n.k-other-month.k-state-hover .k-link,\ndiv.k-filebrowser-dropzone em {\n  color: #ffffff;\n}\n.k-autocomplete.k-state-hover,\n.k-autocomplete.k-state-focused,\n.k-picker-wrap.k-state-hover,\n.k-picker-wrap.k-state-focused,\n.k-numeric-wrap.k-state-hover,\n.k-numeric-wrap.k-state-focused,\n.k-dropdown-wrap.k-state-hover,\n.k-dropdown-wrap.k-state-focused {\n  background-color: #080808;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-position: 50% 50%;\n  border-color: #2b2b2b;\n}\n.km-pane-wrapper .k-mobile-list input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n.km-pane-wrapper .km-pane .k-mobile-list select:not([multiple]),\n.km-pane-wrapper .k-mobile-list textarea,\n.k-dropdown .k-state-focused .k-input {\n  color: #ffffff;\n}\n.k-dropdown .k-state-hover .k-input {\n  color: #ffffff;\n}\n.k-state-error {\n  border-color: #ff0000;\n  background-color: #ff0000;\n  color: #ffffff;\n}\n.k-state-disabled {\n  opacity: .7;\n}\n.k-ie7 .k-state-disabled,\n.k-ie8 .k-state-disabled {\n  filter: alpha(opacity=70);\n}\n.k-tile-empty.k-state-selected,\n.k-loading-mask.k-state-selected {\n  border-width: 0;\n  background-image: none;\n  background-color: transparent;\n}\n.k-state-disabled,\n.k-state-disabled .k-link,\n.k-state-disabled .k-button,\n.k-other-month,\n.k-other-month .k-link,\n.k-dropzone em,\n.k-dropzone .k-upload-status,\n.k-tile-empty strong,\n.k-slider .k-draghandle {\n  color: #7a7a7a;\n}\n/* Progressbar */\n.k-progressbar-indeterminate {\n  background: url('Black/indeterminate.gif');\n}\n.k-progressbar-indeterminate .k-progress-status-wrap,\n.k-progressbar-indeterminate .k-state-selected {\n  display: none;\n}\n/* Slider */\n.k-slider-track {\n  background-color: #2b2b2b;\n}\n.k-slider-selection {\n  background-color: #0066cc;\n}\n.k-slider-horizontal .k-tick {\n  background-image: url('Black/slider-h.gif');\n}\n.k-slider-vertical .k-tick {\n  background-image: url('Black/slider-v.gif');\n}\n/* Tooltip */\n.k-widget.k-tooltip {\n  border-color: #000000;\n  background-color: #000000;\n  color: #ffffff;\n}\n.k-widget.k-tooltip-validation {\n  border-color: #ffb400;\n  background-color: #ffb400;\n  color: #080808;\n}\n/* Bootstrap theme fix */\n.input-prepend .k-tooltip-validation,\n.input-append .k-tooltip-validation {\n  font-size: 12px;\n  position: relative;\n  top: 3px;\n}\n.k-callout-n {\n  border-bottom-color: #000000;\n}\n.k-callout-w {\n  border-right-color: #000000;\n}\n.k-callout-s {\n  border-top-color: #000000;\n}\n.k-callout-e {\n  border-left-color: #000000;\n}\n.k-tooltip-validation .k-callout-n {\n  border-bottom-color: #ffb400;\n}\n.k-tooltip-validation .k-callout-w {\n  border-right-color: #ffb400;\n}\n.k-tooltip-validation .k-callout-s {\n  border-top-color: #ffb400;\n}\n.k-tooltip-validation .k-callout-e {\n  border-left-color: #ffb400;\n}\n/* Splitter */\n.k-splitbar {\n  background-color: #4c4c4c;\n}\n.k-restricted-size-vertical,\n.k-restricted-size-horizontal {\n  background-color: #ffffff;\n}\n/* Upload */\n.k-file {\n  background-color: #4d4d4d;\n  border-color: #444444;\n}\n.k-file-progress {\n  color: #ffffff;\n}\n.k-file-progress .k-progress {\n  background-color: #366ba0;\n}\n.k-file-success {\n  color: #ffffff;\n}\n.k-file-success .k-progress {\n  background-color: #3f8b66;\n}\n.k-file-error {\n  color: #ffffff;\n}\n.k-file-error .k-progress {\n  background-color: #aa2929;\n}\n/* ImageBrowser */\n.k-tile {\n  border-color: #3d3d3d;\n}\n.k-textbox:hover,\n.k-tiles li.k-state-hover {\n  border-color: #2b2b2b;\n}\n.k-tiles li.k-state-selected {\n  border-color: #0066cc;\n}\n.k-filebrowser .k-tile .k-folder,\n.k-filebrowser .k-tile .k-file {\n  background-image: url('Black/imagebrowser.png');\n  background-size: auto auto;\n}\n/* TreeMap */\n.k-leaf,\n.k-leaf.k-state-hover:hover {\n  color: #fff;\n}\n.k-leaf.k-inverse,\n.k-leaf.k-inverse.k-state-hover:hover {\n  color: #000;\n}\n/* Shadows */\n.k-widget,\n.k-button {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-slider,\n.k-treeview,\n.k-upload {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-state-hover {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-autocomplete.k-state-focused,\n.k-dropdown-wrap.k-state-focused,\n.k-picker-wrap.k-state-focused,\n.k-numeric-wrap.k-state-focused {\n  -webkit-box-shadow: 0 0 3px 0 #0066cc;\n  box-shadow: 0 0 3px 0 #0066cc;\n}\n.k-state-selected {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-state-active {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-grid td.k-state-selected.k-state-focused {\n  background-color: #006edb;\n}\n.k-popup,\n.k-menu .k-menu-group,\n.k-grid .k-filter-options,\n.k-time-popup,\n.k-datepicker-calendar,\n.k-autocomplete.k-state-border-down,\n.k-autocomplete.k-state-border-up,\n.k-dropdown-wrap.k-state-active,\n.k-picker-wrap.k-state-active,\n.k-multiselect.k-state-focused,\n.k-filebrowser .k-image,\n.k-tooltip {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3);\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3);\n}\n.k-treemap-tile.k-state-hover {\n  -webkit-box-shadow: inset 0 0 0 3px #2b2b2b;\n  box-shadow: inset 0 0 0 3px #2b2b2b;\n}\n/* Window */\n.k-window {\n  border-color: rgba(0, 0, 0, 0.3);\n  -webkit-box-shadow: 1px 1px 7px 1px rgba(128, 128, 128, 0.3);\n  box-shadow: 1px 1px 7px 1px rgba(128, 128, 128, 0.3);\n  background-color: #4d4d4d;\n}\n.k-window.k-state-focused {\n  border-color: rgba(0, 0, 0, 0.3);\n  -webkit-box-shadow: 1px 1px 7px 1px rgba(0, 0, 0, 0.3);\n  box-shadow: 1px 1px 7px 1px rgba(0, 0, 0, 0.3);\n}\n.k-window.k-window-maximized,\n.k-window-maximized .k-window-titlebar,\n.k-window-maximized .k-window-content {\n  border-radius: 0;\n}\n.k-shadow {\n  -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3);\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3);\n}\n.k-inset {\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.3);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.3);\n}\n/* Selection */\n.k-editor-inline ::selection {\n  background-color: #0066cc;\n  text-shadow: none;\n  color: #fff;\n}\n.k-editor-inline ::-moz-selection {\n  background-color: #0066cc;\n  text-shadow: none;\n  color: #fff;\n}\n/* Notification */\n.k-notification.k-notification-info {\n  background-color: #0c779b;\n  color: #ffffff;\n  border-color: #0c779b;\n}\n.k-notification.k-notification-success {\n  background-color: #2b893c;\n  color: #ffffff;\n  border-color: #2b893c;\n}\n.k-notification.k-notification-warning {\n  background-color: #be9938;\n  color: #ffffff;\n  border-color: #be9938;\n}\n.k-notification.k-notification-error {\n  background-color: #be5138;\n  color: #ffffff;\n  border-color: #be5138;\n}\n/* Gantt */\n.k-gantt .k-treelist {\n  background: #525252;\n}\n.k-gantt .k-treelist .k-alt {\n  background-color: #393939;\n}\n.k-gantt .k-treelist .k-state-selected,\n.k-gantt .k-treelist .k-state-selected td,\n.k-gantt .k-treelist .k-alt.k-state-selected,\n.k-gantt .k-treelist .k-alt.k-state-selected > td {\n  background-color: #0066cc;\n}\n.k-task-dot:after {\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.k-task-dot:hover:after {\n  background-color: #4d4d4d;\n}\n.k-task-summary {\n  border-color: #bfbfbf;\n  background: #bfbfbf;\n}\n.k-task-milestone,\n.k-task-summary-complete {\n  border-color: #ffffff;\n  background: #ffffff;\n}\n.k-state-selected.k-task-summary {\n  border-color: #00264d;\n  background: #00264d;\n}\n.k-state-selected.k-task-milestone,\n.k-state-selected .k-task-summary-complete {\n  border-color: #0066cc;\n  background: #0066cc;\n}\n.k-task-single {\n  background-color: #0179f0;\n  border-color: #0167cc;\n  color: #ffffff;\n}\n.k-state-selected.k-task-single {\n  border-color: #0066cc;\n}\n.k-line {\n  background-color: #ffffff;\n  color: #ffffff;\n}\n.k-state-selected.k-line {\n  background-color: #0066cc;\n  color: #0066cc;\n}\n.k-resource {\n  background-color: #4d4d4d;\n}\n/* PivotGrid */\n.k-i-kpi-decrease,\n.k-i-kpi-denied,\n.k-i-kpi-equal,\n.k-i-kpi-hold,\n.k-i-kpi-increase,\n.k-i-kpi-open {\n  background-image: url('Black/sprite_kpi.png');\n}\n/* Border radius */\n.k-block,\n.k-button,\n.k-textbox,\n.k-drag-clue,\n.k-touch-scrollbar,\n.k-window,\n.k-window-titleless .k-window-content,\n.k-window-action,\n.k-inline-block,\n.k-grid .k-filter-options,\n.k-grouping-header .k-group-indicator,\n.k-autocomplete,\n.k-multiselect,\n.k-combobox,\n.k-dropdown,\n.k-dropdown-wrap,\n.k-datepicker,\n.k-timepicker,\n.k-colorpicker,\n.k-datetimepicker,\n.k-notification,\n.k-numerictextbox,\n.k-picker-wrap,\n.k-numeric-wrap,\n.k-colorpicker,\n.k-list-container,\n.k-calendar-container,\n.k-calendar td,\n.k-calendar .k-link,\n.k-treeview .k-in,\n.k-editor-inline,\n.k-tooltip,\n.k-tile,\n.k-slider-track,\n.k-slider-selection,\n.k-upload {\n  border-radius: 4px;\n}\n.k-tool {\n  text-align: center;\n  vertical-align: middle;\n}\n.k-tool.k-group-start,\n.k-toolbar .k-split-button .k-button,\n.k-toolbar .k-button-group .k-group-start {\n  border-radius: 4px 0 0 4px;\n}\n.k-rtl .k-tool.k-group-start {\n  border-radius: 0 4px 4px 0;\n}\n.k-tool.k-group-end,\n.k-toolbar .k-button-group .k-group-end,\n.k-toolbar .k-split-button .k-split-button-arrow {\n  border-radius: 0 4px 4px 0;\n}\n.k-rtl .k-tool.k-group-end {\n  border-radius: 4px 0 0 4px;\n}\n.k-group-start.k-group-end.k-tool {\n  border-radius: 4px;\n}\n.k-calendar-container.k-state-border-up,\n.k-list-container.k-state-border-up,\n.k-autocomplete.k-state-border-up,\n.k-multiselect.k-state-border-up,\n.k-dropdown-wrap.k-state-border-up,\n.k-picker-wrap.k-state-border-up,\n.k-numeric-wrap.k-state-border-up,\n.k-window-content,\n.k-filter-menu {\n  border-radius: 0 0 4px 4px;\n}\n.k-autocomplete.k-state-border-up .k-input,\n.k-dropdown-wrap.k-state-border-up .k-input,\n.k-picker-wrap.k-state-border-up .k-input,\n.k-picker-wrap.k-state-border-up .k-selected-color,\n.k-numeric-wrap.k-state-border-up .k-input {\n  border-radius: 0 0 0 4px;\n}\n.k-multiselect.k-state-border-up .k-multiselect-wrap {\n  border-radius: 0 0 4px 4px;\n}\n.k-window-titlebar,\n.k-block > .k-header,\n.k-tabstrip-items .k-item,\n.k-panelbar .k-tabstrip-items .k-item,\n.k-tabstrip-items .k-link,\n.k-calendar-container.k-state-border-down,\n.k-list-container.k-state-border-down,\n.k-autocomplete.k-state-border-down,\n.k-multiselect.k-state-border-down,\n.k-dropdown-wrap.k-state-border-down,\n.k-picker-wrap.k-state-border-down,\n.k-numeric-wrap.k-state-border-down {\n  border-radius: 4px 4px 0 0;\n}\n.k-split-button.k-state-border-down > .k-button {\n  border-radius: 4px 0 0 0;\n}\n.k-split-button.k-state-border-up > .k-button {\n  border-radius: 0 0 0 4px;\n}\n.k-split-button.k-state-border-down > .k-split-button-arrow {\n  border-radius: 0 4px 0 0;\n}\n.k-split-button.k-state-border-up > .k-split-button-arrow {\n  border-radius: 0 0 4px 0;\n}\n.k-dropdown-wrap .k-input,\n.k-picker-wrap .k-input,\n.k-numeric-wrap .k-input {\n  border-radius: 3px 0 0 3px;\n}\n.k-rtl .k-dropdown-wrap .k-input,\n.k-rtl .k-picker-wrap .k-input,\n.k-rtl .k-numeric-wrap .k-input {\n  border-radius: 0 3px 3px 0;\n}\n.k-numeric-wrap .k-link {\n  border-radius: 0 3px 0 0;\n}\n.k-numeric-wrap .k-link + .k-link {\n  border-radius: 0 0 3px 0;\n}\n.k-colorpicker .k-selected-color {\n  border-radius: 3px 0 0 3px;\n}\n.k-rtl .k-colorpicker .k-selected-color {\n  border-radius: 0 3px 3px 0;\n}\n.k-autocomplete.k-state-border-down .k-input {\n  border-radius: 4px 4px 0 0;\n}\n.k-dropdown-wrap.k-state-border-down .k-input,\n.k-picker-wrap.k-state-border-down .k-input,\n.k-picker-wrap.k-state-border-down .k-selected-color,\n.k-numeric-wrap.k-state-border-down .k-input {\n  border-radius: 4px 0 0 0;\n}\n.k-numeric-wrap .k-link.k-state-selected {\n  background-color: #0066cc;\n}\n.k-multiselect.k-state-border-down .k-multiselect-wrap {\n  border-radius: 3px 3px 0 0;\n}\n.k-dropdown-wrap .k-select,\n.k-picker-wrap .k-select,\n.k-numeric-wrap .k-select,\n.k-datetimepicker .k-select + .k-select,\n.k-list-container.k-state-border-right {\n  border-radius: 0 4px 4px 0;\n}\n.k-rtl .k-dropdown-wrap .k-select,\n.k-rtl .k-picker-wrap .k-select,\n.k-rtl .k-numeric-wrap .k-select,\n.k-rtl .k-datetimepicker .k-select + .k-select,\n.k-rtl .k-list-container.k-state-border-right {\n  border-radius: 4px 0 0 4px;\n}\n.k-numeric-wrap.k-expand-padding .k-input {\n  border-radius: 4px;\n}\n.k-textbox > input,\n.k-autocomplete .k-input,\n.k-multiselect-wrap {\n  border-radius: 3px;\n}\n.k-list .k-state-hover,\n.k-list .k-state-focused,\n.k-list .k-state-highlight,\n.k-list .k-state-selected,\n.k-fieldselector .k-list .k-item,\n.k-dropzone {\n  border-radius: 3px;\n}\n.k-slider .k-button,\n.k-grid .k-slider .k-button {\n  border-radius: 13px;\n}\n.k-draghandle {\n  border-radius: 7px;\n}\n.k-scheduler-toolbar > ul li:first-child,\n.k-scheduler-toolbar > ul li:first-child .k-link {\n  border-radius: 4px 0 0 4px;\n}\n.k-rtl .k-scheduler-toolbar > ul li:first-child,\n.k-rtl .k-scheduler-toolbar > ul li:first-child .k-link,\n.km-view.k-popup-edit-form .k-scheduler-toolbar > ul li:last-child,\n.km-view.k-popup-edit-form .k-scheduler-toolbar > ul li:last-child .k-link {\n  border-radius: 0 4px 4px 0;\n}\n.k-scheduler-phone .k-scheduler-toolbar > ul li.k-nav-today,\n.k-scheduler-phone .k-scheduler-toolbar > ul li.k-nav-today .k-link,\n.k-edit-field > .k-scheduler-navigation {\n  border-radius: 4px;\n}\n.k-scheduler-toolbar .k-nav-next,\n.k-scheduler-toolbar ul + ul li:last-child,\n.k-scheduler-toolbar .k-nav-next .k-link,\n.k-scheduler-toolbar ul + ul li:last-child .k-link {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.k-rtl .k-scheduler-toolbar .k-nav-next,\n.k-rtl .k-scheduler-toolbar ul + ul li:last-child,\n.k-rtl .k-scheduler-toolbar .k-nav-next .k-link,\n.k-rtl .k-scheduler-toolbar ul + ul li:last-child .k-link {\n  border-radius: 4px 0 0 4px;\n}\n.k-scheduler div.k-scheduler-footer ul li,\n.k-scheduler div.k-scheduler-footer .k-link {\n  border-radius: 4px;\n}\n.k-more-events,\n.k-event,\n.k-task-single,\n.k-task-complete,\n.k-event .k-link {\n  border-radius: 3px;\n}\n.k-scheduler-mobile .k-event {\n  border-radius: 2px;\n}\n/* Adaptive Grid */\n.k-grid-mobile .k-column-active + th.k-header {\n  border-left-color: #ffffff;\n}\nhtml .km-pane-wrapper .km-widget,\n.k-ie .km-pane-wrapper .k-widget,\n.k-ie .km-pane-wrapper .k-group,\n.k-ie .km-pane-wrapper .k-content,\n.k-ie .km-pane-wrapper .k-header,\n.k-ie .km-pane-wrapper .k-popup-edit-form .k-edit-field .k-button,\n.km-pane-wrapper .k-mobile-list .k-item,\n.km-pane-wrapper .k-mobile-list .k-edit-label,\n.km-pane-wrapper .k-mobile-list .k-edit-field {\n  color: #ffffff;\n}\n@media screen and (-ms-high-contrast: active) and (-ms-high-contrast: none) {\n  div.km-pane-wrapper a {\n    color: #ffffff;\n  }\n  .km-pane-wrapper .k-icon {\n    background-image: url('Black/sprite_2x.png');\n    background-size: 21.2em 21em;\n  }\n}\n.km-pane-wrapper .k-mobile-list .k-item,\n.km-pane-wrapper .k-mobile-list .k-edit-field,\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check {\n  background-color: #4d4d4d;\n  border-top: 1px solid #444444;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field textarea {\n  outline-width: 0;\n}\n.km-pane-wrapper .k-mobile-list .k-item.k-state-selected {\n  background-color: #0066cc;\n  border-top-color: #0066cc;\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check:first-child {\n  border-top-color: transparent;\n}\n.km-pane-wrapper .k-mobile-list .k-item:last-child {\n  -webkit-box-shadow: inset 0 -1px 0 #444444;\n  box-shadow: inset 0 -1px 0 #444444;\n}\n.km-pane-wrapper .k-mobile-list > ul > li > .k-link,\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-label:nth-child(3),\n.km-pane-wrapper #recurrence .km-scroll-container > .k-edit-label:first-child {\n  color: #000000;\n}\n.km-pane-wrapper .k-mobile-list > ul > li > .k-link {\n  border-bottom: 1px solid #444444;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field {\n  -webkit-box-shadow: 0 1px 1px #444444;\n  box-shadow: 0 1px 1px #444444;\n}\n.km-actionsheet .k-grid-delete,\n.km-actionsheet .k-scheduler-delete,\n.km-pane-wrapper .k-scheduler-delete,\n.km-pane-wrapper .k-filter-menu .k-button[type=reset] {\n  color: #fff;\n  border-color: #ff0000;\n  background-color: red;\n  background-image: -webkit-gradient(linear, 50% 0, 50% 100%, from(rgba(255,255,255,.3)), to(rgba(255,255,255,.15)));\n  background-image: -webkit-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,.15));\n  background-image: -moz-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,.15));\n  background-image: -ms-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,.15));\n  background-image: linear-gradient(to bottom, rgba(255,255,255,.3), rgba(255,255,255,.15));\n}\n.km-actionsheet .k-grid-delete:active,\n.km-actionsheet .k-scheduler-delete:active,\n.km-pane-wrapper .k-scheduler-delete:active,\n.km-pane-wrapper .k-filter-menu .k-button[type=reset]:active {\n  background-color: #990000;\n}\n/* /Column Menu */\n.k-autocomplete.k-state-default,\n.k-picker-wrap.k-state-default,\n.k-numeric-wrap.k-state-default,\n.k-dropdown-wrap.k-state-default {\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.20) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.07) 100%);\n  background-position: 50% 50%;\n  background-color: #272727;\n  border-color: #2b2b2b;\n}\n.k-autocomplete.k-state-hover,\n.k-picker-wrap.k-state-hover,\n.k-numeric-wrap.k-state-hover,\n.k-dropdown-wrap.k-state-hover {\n  background-color: #080808;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-position: 50% 50%;\n  border-color: #080808;\n}\n.k-multiselect.k-header {\n  border-color: #2b2b2b;\n}\n.k-multiselect.k-header.k-state-hover {\n  border-color: #080808;\n}\n.k-autocomplete.k-state-focused,\n.k-picker-wrap.k-state-focused,\n.k-numeric-wrap.k-state-focused,\n.k-dropdown-wrap.k-state-focused,\n.k-multiselect.k-header.k-state-focused {\n  background-color: #080808;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -moz-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, -o-linear-gradient(top, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-image: none, linear-gradient(to bottom, rgba(255,255,255,.12) 0%, rgba(255,255,255,.08) 50%, rgba(255,255,255,.05) 51%, rgba(255,255,255,.0) 100%);\n  background-position: 50% 50%;\n  border-color: #0066cc;\n  -webkit-box-shadow: 0 0 3px 0 #0066cc;\n  box-shadow: 0 0 3px 0 #0066cc;\n}\n.k-list-container {\n  color: #ffffff;\n}\n.k-dropdown .k-input,\n.k-dropdown .k-state-focused .k-input,\n.k-menu .k-popup {\n  color: #ffffff;\n}\n.k-state-default > .k-select {\n  border-color: #2b2b2b;\n}\n.k-state-hover > .k-select {\n  border-color: #080808;\n}\n.k-state-focused > .k-select {\n  border-color: #0066cc;\n}\n.k-tabstrip:focus {\n  -webkit-box-shadow: 0 0 3px 0 #0066cc;\n  box-shadow: 0 0 3px 0 #0066cc;\n}\n.k-tabstrip-items .k-state-default .k-link,\n.k-panelbar > li.k-state-default > .k-link {\n  color: #ffffff;\n}\n.k-tabstrip-items .k-state-hover .k-link,\n.k-panelbar > li.k-state-hover > .k-link,\n.k-panelbar > li.k-state-default > .k-link.k-state-hover {\n  color: #ffffff;\n}\n.k-panelbar .k-state-focused.k-state-hover {\n  background: #3d3d3d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-tabstrip-items .k-state-default,\n.k-ie7 .k-tabstrip-items .k-state-default .k-loading {\n  border-color: #2b2b2b;\n}\n.k-tabstrip-items .k-state-hover,\n.k-ie7 .k-tabstrip-items .k-state-hover .k-loading {\n  border-color: #2b2b2b;\n}\n.k-tabstrip-items .k-state-active,\n.k-panelbar .k-tabstrip-items .k-state-active,\n.k-ie7 .k-tabstrip-items .k-state-active .k-loading {\n  background-color: #4d4d4d;\n  background-image: none;\n  border-color: #020202;\n}\n.k-tabstrip .k-content.k-state-active {\n  background-color: #4d4d4d;\n  color: #ffffff;\n}\n.k-menu.k-header,\n.k-menu .k-item {\n  border-color: #2b2b2b;\n}\n.k-column-menu,\n.k-column-menu .k-item,\n.k-overflow-container .k-overflow-group {\n  border-color: #2b2b2b;\n}\n.k-overflow-container .k-overflow-group {\n  box-shadow: inset 0 1px 0 #787878, 0 1px 0 #787878;\n}\n.k-toolbar-first-visible.k-overflow-group,\n.k-overflow-container .k-overflow-group + .k-overflow-group {\n  box-shadow: 0 1px 0 #787878;\n}\n.k-toolbar-last-visible.k-overflow-group {\n  box-shadow: inset 0 1px 0 #787878;\n}\n.k-column-menu .k-separator {\n  border-color: #2b2b2b;\n  background-color: transparent;\n}\n.k-menu .k-group {\n  border-color: #2b2b2b;\n}\n.k-grid-filter.k-state-active {\n  background-color: #4d4d4d;\n}\n.k-grouping-row td,\n.k-group-footer td,\n.k-grid-footer td {\n  color: #ffffff;\n  border-color: #2b2b2b;\n  font-weight: bold;\n}\n.k-grouping-header {\n  color: #ffffff;\n}\n.k-grid td.k-state-focused {\n  -webkit-box-shadow: inset 0 0 0 1px inset 0 0 3px 1px #080808;\n  box-shadow: inset 0 0 0 1px inset 0 0 3px 1px #080808;\n}\n.k-header,\n.k-grid-header-wrap,\n.k-grid .k-grouping-header,\n.k-grid-header,\n.k-pager-wrap,\n.k-pager-wrap .k-textbox,\n.k-pager-wrap .k-link,\n.k-grouping-header .k-group-indicator,\n.k-gantt-toolbar .k-state-default {\n  border-color: #2b2b2b;\n}\n.k-primary,\n.k-overflow-container .k-primary {\n  color: #ffffff;\n  border-color: #1472d0;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -moz-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -o-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, linear-gradient(to bottom, #1472d0 0%, #0267cc 100%);\n  background-position: 50% 50%;\n  background-color: #1c77d2;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-primary:focus,\n.k-primary.k-state-focused {\n  color: #ffffff;\n  border-color: #004992;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -moz-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -o-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, linear-gradient(to bottom, #1472d0 0%, #0267cc 100%);\n  -webkit-box-shadow: 0 0 3px 3px #004992;\n  box-shadow: 0 0 3px 3px #004992;\n}\n.k-primary:hover {\n  color: #ffffff;\n  border-color: #145cbc;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, #145cbc 0%, #024fb7 100%);\n  background-image: none, -moz-linear-gradient(top, #145cbc 0%, #024fb7 100%);\n  background-image: none, -o-linear-gradient(top, #145cbc 0%, #024fb7 100%);\n  background-image: none, linear-gradient(to bottom, #145cbc 0%, #024fb7 100%);\n  background-color: #004eb6;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-primary:focus:active:not(.k-state-disabled):not([disabled]),\n.k-primary:focus:not(.k-state-disabled):not([disabled]) {\n  -webkit-box-shadow: 0 0 3px 3px #004992;\n  box-shadow: 0 0 3px 3px #004992;\n}\n.k-primary:active {\n  color: #ffffff;\n  border-color: #0167cc;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -moz-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, -o-linear-gradient(top, #1472d0 0%, #0267cc 100%);\n  background-image: none, linear-gradient(to bottom, #1472d0 0%, #0267cc 100%);\n  background-color: #0066cc;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-primary.k-state-disabled,\n.k-state-disabled .k-primary,\n.k-primary.k-state-disabled:hover,\n.k-state-disabled .k-primary:hover,\n.k-primary.k-state-disabled:hover,\n.k-state-disabled .k-primary:active,\n.k-primary.k-state-disabled:active {\n  color: #91aeca;\n  border-color: #245d95;\n  background-color: #0066cc;\n  background-image: url('textures/glass.png');\n  background-image: none, -webkit-linear-gradient(top, #245d95 0%, #1a5693 100%);\n  background-image: none, -moz-linear-gradient(top, #245d95 0%, #1a5693 100%);\n  background-image: none, -o-linear-gradient(top, #245d95 0%, #1a5693 100%);\n  background-image: none, linear-gradient(to bottom, #245d95 0%, #1a5693 100%);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.k-pager-numbers .k-link,\n.k-treeview .k-in {\n  border-color: transparent;\n}\n.k-treeview .k-icon,\n.k-scheduler-table .k-icon,\n.k-grid .k-hierarchy-cell .k-icon {\n  background-color: transparent;\n  border-radius: 4px;\n}\n.k-scheduler-table .k-state-hover .k-icon {\n  background-color: transparent;\n}\n.k-button:focus {\n  outline: none;\n}\n.k-editor .k-tool:focus {\n  outline: 0;\n  border-color: #2b2b2b;\n  -webkit-box-shadow: inset 0 0 3px 1px #080808;\n  box-shadow: inset 0 0 3px 1px #080808;\n}\n.k-checkbox-label:before {\n  border-color: transparent;\n  border-radius: 3px;\n}\n.k-checkbox-label:after {\n  border-color: #2b2b2b;\n  background: #ffffff;\n  border-radius: 3px;\n}\n.k-checkbox-label:hover:after,\n.k-checkbox:checked + .k-checkbox-label:hover:after {\n  border-color: #080808;\n  box-shadow: none;\n}\n.k-checkbox:checked + .k-checkbox-label:after {\n  background-color: #ffffff;\n  border-color: #2b2b2b;\n  border-radius: 3px;\n  color: #1472d0;\n}\n.k-checkbox-label:active:before {\n  box-shadow: 0 0 3px 0 #0066cc;\n  border-color: #0066cc;\n  border-radius: 3px;\n}\n.k-checkbox-label:active:after {\n  border-color: #0066cc;\n  border-radius: 3px;\n}\n.k-checkbox:checked + .k-checkbox-label:active:after {\n  border-color: #0066cc;\n}\n.k-checkbox:checked + .k-checkbox-label:active:before {\n  box-shadow: 0 0 3px 0 #0066cc;\n  border-radius: 3px;\n}\n.k-checkbox:disabled + .k-checkbox-label {\n  color: #2b2b2b;\n}\n.k-checkbox:disabled + .k-checkbox-label:hover:after,\n.k-checkbox:disabled + .k-checkbox-label:active:before {\n  box-shadow: none;\n}\n.k-checkbox:checked:disabled + .k-checkbox-label:after {\n  background: #7a7a7a;\n  color: #2b2b2b;\n}\n.k-checkbox:disabled + .k-checkbox-label:after,\n.k-checkbox:checked:disabled + .k-checkbox-label:active:after,\n.k-checkbox:disabled + .k-checkbox-label:hover:before,\n.k-checkbox:checked:disabled + .k-checkbox-label:hover:after {\n  background: #7a7a7a;\n  border-color: #2b2b2b;\n  border-radius: 3px;\n}\n.k-radio-label:before {\n  border-color: #2b2b2b;\n  border-radius: 50%;\n  background-color: #ffffff;\n  border-width: 1px;\n}\n.k-radio-label:hover:before,\n.k-radio:checked + .k-radio-label:hover:before {\n  border-color: #080808;\n  box-shadow: none;\n}\n.k-radio:checked + .k-radio-label:before {\n  border-color: #2b2b2b;\n}\n.k-radio:checked + .k-radio-label:after {\n  background-color: #0066cc;\n  border-radius: 50%;\n}\n.k-radio-label:active:before {\n  box-shadow: 0 0 3px 0 #0066cc;\n  border-radius: 50%;\n  border-color: #0066cc;\n}\n.k-radio:checked + .k-radio-label:active:before {\n  box-shadow: 0 0 3px 0 #0066cc;\n  border-radius: 50%;\n  border-color: #0066cc;\n}\n.k-radio:disabled + .k-radio-label {\n  color: #2b2b2b;\n}\n.k-radio:disabled + .k-radio-label:before {\n  border-color: #bfbfbf;\n}\n.k-radio:disabled + .k-radio-label:active:before {\n  box-shadow: none;\n  background: #7a7a7a;\n}\n.k-radio:disabled + .k-radio-label:before {\n  background: #7a7a7a;\n}\n.k-radio:disabled + .k-radio-label:hover:after,\n.k-radio:disabled + .k-radio-label:hover:before {\n  box-shadow: none;\n}\n.k-checkbox:focus + .k-checkbox-label:after,\n.k-radio:focus + .k-radio-label:before {\n  border-color: #0066cc;\n  box-shadow: 0 0 3px 0 #0066cc;\n}\n@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {\n  .k-icon:not(.k-loading),\n  .k-grouping-dropclue,\n  .k-drop-hint,\n  .k-callout,\n  .k-tool-icon,\n  .k-state-hover .k-tool-icon,\n  .k-state-active .k-tool-icon,\n  .k-state-active.k-state-hover .k-tool-icon,\n  .k-state-selected .k-tool-icon,\n  .k-state-selected.k-state-hover .k-tool-icon,\n  .k-column-menu .k-sprite,\n  .k-mobile-list .k-check:checked,\n  .k-mobile-list .k-edit-field [type=checkbox]:checked,\n  .k-mobile-list .k-edit-field [type=radio]:checked {\n    background-image: url('Black/sprite_2x.png');\n    background-size: 340px 336px;\n  }\n  .k-dropdown-wrap .k-input,\n  .k-picker-wrap .k-input,\n  .k-numeric-wrap .k-input {\n    border-radius: 3px 0 0 3px;\n  }\n  .k-i-kpi-decrease,\n  .k-i-kpi-denied,\n  .k-i-kpi-equal,\n  .k-i-kpi-hold,\n  .k-i-kpi-increase,\n  .k-i-kpi-open {\n    background-image: url('Black/sprite_kpi_2x.png');\n    background-size: 96px 16px;\n  }\n}\n@media screen and (-ms-high-contrast: active) {\n  .k-editor-toolbar-wrap .k-dropdown-wrap.k-state-focused,\n  .k-editor-toolbar-wrap .k-button-group .k-tool:focus {\n    border-color: #fff;\n  }\n}\n.ktb-checkbox-label-after {\n  border-color: #2b2b2b;\n  background: #ffffff;\n}\n.ktb-checkbox-label-hover-after,\n.ktb-checkbox-checked + .ktb-checkbox-label-hover-after {\n  border-color: #080808;\n}\n.ktb-checkbox-checked + .ktb-checkbox-label-after {\n  background-color: #ffffff;\n  border-color: #2b2b2b;\n  color: #1472d0;\n}\n.ktb-checkbox-label-hover-after,\n.ktb-checkbox-checked + .ktb-checkbox-label-hover-after {\n  border-color: #080808;\n}\n.ktb-checkbox-label-active-after {\n  border-color: #0066cc;\n}\n.ktb-checkbox-checked-disabled + .ktb-checkbox-label-after,\n.ktb-checkbox-disabled + .ktb-checkbox-label-after,\n.ktb-checkbox-checked-disabled + .ktb-checkbox-label-active-after,\n.ktb-checkbox-disabled + .ktb-checkbox-label-hover-before,\n.ktb-checkbox-checked-disabled + .ktb-checkbox-label-hover-after {\n  background: #7a7a7a;\n  color: #2b2b2b;\n  border-color: #2b2b2b;\n}\n.ktb-radio-label-before {\n  border-color: #2b2b2b;\n  background-color: #ffffff;\n}\n.ktb-radio-checked + .ktb-radio-label-after {\n  background-color: #0066cc;\n}\n.ktb-radio-checked + .ktb-radio-label-before {\n  border-color: #2b2b2b;\n}\n.ktb-radio-label-hover-before,\n.ktb-radio-checked + .ktb-radio-label-hover-before {\n  border-color: #080808;\n}\n.ktb-radio-label-active-before {\n  border-color: #0066cc;\n}\n.ktb-radio-checked + .ktb-radio-label-after {\n  background-color: #0066cc;\n}\n.ktb-radio-disabled + .ktb-radio-label-before,\n.ktb-radio-disabled + .ktb-radio-label-active-before {\n  background: #7a7a7a;\n  border-color: #2b2b2b;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/KendoUI/kendo.common.css",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n/* Kendo base CSS */\n.fake {\n  color: red;\n}\n.k-reset {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  outline: 0;\n  text-decoration: none;\n  font-size: 100%;\n  list-style: none;\n}\n.k-floatwrap:after,\n.k-slider-items:after,\n.k-grid-toolbar:after {\n  content: \"\";\n  display: block;\n  clear: both;\n  visibility: hidden;\n  height: 0;\n  overflow: hidden;\n}\n.k-floatwrap,\n.k-slider-items,\n.k-grid-toolbar {\n  display: inline-block;\n}\n.k-floatwrap,\n.k-slider-items,\n.k-grid-toolbar {\n  display: block;\n}\n/* main gradient */\n.k-block,\n.k-button,\n.k-header,\n.k-grid-header,\n.k-toolbar,\n.k-grouping-header,\n.k-tooltip,\n.k-pager-wrap,\n.k-tabstrip-items .k-item,\n.k-link.k-state-hover,\n.k-textbox,\n.k-textbox:hover,\n.k-autocomplete,\n.k-dropdown-wrap,\n.k-picker-wrap,\n.k-numeric-wrap,\n.k-autocomplete.k-state-hover,\n.k-dropdown-wrap.k-state-hover,\n.k-picker-wrap.k-state-hover,\n.k-numeric-wrap.k-state-hover,\n.k-draghandle {\n  background-repeat: repeat;\n  background-position: 0 center;\n}\n.k-link:hover {\n  text-decoration: none;\n}\n.k-state-highlight > .k-link {\n  color: inherit;\n}\n/* widget */\n.k-textbox > input,\n.k-input[type=\"text\"],\n.k-input[type=\"number\"],\n.k-textbox,\n.k-picker-wrap .k-input,\n.k-button {\n  font-size: 100%;\n  font-family: inherit;\n  border-style: solid;\n  border-width: 1px;\n  -webkit-appearance: none;\n}\n.k-widget,\n.k-block,\n.k-inline-block,\n.k-draghandle {\n  border-style: solid;\n  border-width: 1px;\n  -webkit-appearance: none;\n}\n.k-block,\n.k-widget {\n  line-height: normal;\n  outline: 0;\n}\n/* Block */\n.k-block {\n  padding: 2px;\n}\n/* button */\n.k-button {\n  display: inline-block;\n  margin: 0;\n  padding: 2px 7px 2px;\n  font-family: inherit;\n  line-height: 1.72em;\n  text-align: center;\n  cursor: pointer;\n  text-decoration: none;\n}\n.k-button[disabled],\n.k-button.k-state-disabled,\n.k-state-disabled .k-button,\n.k-state-disabled .k-button:hover,\n.k-button.k-state-disabled:hover,\n.k-state-disabled .k-button:active,\n.k-button.k-state-disabled:active {\n  cursor: default;\n}\n.k-ie7 .k-button {\n  line-height: normal;\n}\na.k-button {\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n  text-decoration: none;\n}\n/* Override the important default line-height in Firefox 4+ */\n.k-ff input.k-button {\n  padding-bottom: 0.37em;\n  padding-top: 0.37em;\n}\n.k-ie7 .k-button {\n  overflow: visible;\n  margin-right: 4px;\n}\n.k-ie7 a.k-button {\n  line-height: 1.6;\n  padding-left: 7px;\n  padding-right: 7px;\n  /*+1*/\n}\n.k-ie7 .k-slider a.k-button {\n  height: 22px;\n  line-height: 22px;\n  padding: 0;\n}\n.k-ie7 .k-button-expand {\n  margin-left: 0;\n  margin-right: 0;\n}\nbutton.k-button::-moz-focus-inner,\ninput.k-button::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\na.k-button-expand {\n  display: block;\n}\nbutton.k-button-expand,\ninput[type=\"submit\"].k-button-expand,\ninput[type=\"button\"].k-button-expand,\ninput[type=\"reset\"].k-button-expand {\n  width: 100%;\n}\nbody .k-button-icon,\nbody .k-split-button-arrow {\n  padding-left: .4em;\n  padding-right: .4em;\n}\n.k-ie7 a.k-button-icon {\n  padding-left: 5px;\n  padding-right: 5px;\n  /*+1*/\n}\n.k-button-icontext {\n  overflow: visible;\n  /*IE9*/\n}\n.k-toolbar .k-button-icontext {\n  padding-right: .8em;\n}\n.k-button-icontext .k-icon,\n.k-button-icontext .k-image {\n  margin-right: 3px;\n  margin-right: .3rem;\n  margin-left: -3px;\n  margin-left: -0.3rem;\n}\n.k-button.k-button-icontext .k-icon,\n.k-button.k-button-icontext .k-image {\n  vertical-align: text-top;\n}\nhtml body .k-button-bare {\n  background: none !important;\n  /*spares long selectors*/\n  color: inherit;\n  border-width: 0;\n}\nhtml body .k-button-bare.k-upload-button:hover {\n  color: inherit;\n}\n/* link */\n.k-link {\n  cursor: pointer;\n  outline: 0;\n  text-decoration: none;\n}\n.k-grid-header span.k-link {\n  cursor: default;\n}\n/* states */\n.k-state-disabled,\n.k-state-disabled .k-link,\n.k-state-disabled .k-icon,\n.k-state-disabled .k-button,\n.k-state-disabled .k-draghandle,\n.k-state-disabled .k-upload-button input {\n  cursor: default !important;\n  outline: 0;\n}\n@media print {\n  .k-state-disabled,\n  .k-state-disabled .k-input {\n    opacity: 1 !important;\n  }\n}\n.k-state-error {\n  border-style: ridge;\n}\n.k-state-empty {\n  font-style: italic;\n}\n/* icons */\n.k-icon,\n.k-sprite,\n.k-button-group .k-tool-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  overflow: hidden;\n  background-repeat: no-repeat;\n  font-size: 0;\n  line-height: 0;\n  text-align: center;\n  -ms-high-contrast-adjust: none;\n}\n.k-icon.k-i-none {\n  background-image: none !important;\n  /* should never be a background on these */\n}\n/* In IE7 vertical align: middle can't be overridden */\n.k-ie8 .k-icon,\n.k-ie8 .k-sprite,\n.k-ie8 .k-button-group .k-tool-icon {\n  vertical-align: middle;\n}\n:root * > .k-icon,\n:root * > .k-sprite,\n:root * > .k-button-group .k-tool-icon {\n  vertical-align: middle;\n}\n.k-icon,\n.k-sprite {\n  background-color: transparent;\n}\n.k-ie7 .k-icon,\n.k-ie7 .k-sprite {\n  text-indent: 0;\n}\n.k-numerictextbox .k-select .k-link span.k-i-arrow-n {\n  background-position: 0 -3px;\n}\n.k-numerictextbox .k-select .k-link span.k-i-arrow-s {\n  background-position: 0 -35px;\n}\n.k-state-selected .k-i-arrow-n {\n  background-position: -16px 0px;\n}\n.k-link:not(.k-state-disabled):hover > .k-state-selected .k-i-arrow-n,\n.k-state-hover > .k-state-selected .k-i-arrow-n,\n.k-state-hover > * > .k-state-selected .k-i-arrow-n,\n.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-n,\n.k-textbox:hover .k-state-selected .k-i-arrow-n,\n.k-button:active .k-state-selected .k-i-arrow-n {\n  background-position: -32px 0px;\n}\n.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n {\n  background-position: -16px -3px;\n}\n.k-state-selected .k-i-arrow-s {\n  background-position: -16px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-state-selected .k-i-arrow-s,\n.k-state-hover > .k-state-selected .k-i-arrow-s,\n.k-state-hover > * > .k-state-selected .k-i-arrow-s,\n.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-s,\n.k-textbox:hover .k-state-selected .k-i-arrow-s,\n.k-button:active .k-state-selected .k-i-arrow-s {\n  background-position: -32px -32px;\n}\n.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s {\n  background-position: -16px -35px;\n}\n.k-grid-header th > .k-link:hover span.k-i-arrow-n {\n  background-position: 0px 0px;\n}\n.k-grid-header th > .k-link:hover span.k-i-arrow-s {\n  background-position: 0px -32px;\n}\n.k-group-indicator .k-link:hover span.k-si-arrow-n {\n  background-position: 0 -129px;\n}\n.k-group-indicator .k-link:hover span.k-si-arrow-s {\n  background-position: 0 -159px;\n}\n.k-group-indicator .k-button:hover span.k-group-delete {\n  background-position: -32px -16px;\n}\n.k-scheduler .k-scheduler-toolbar .k-nav-current .k-link .k-i-calendar {\n  background-position: -32px -176px;\n}\n.k-i-arrow-n {\n  background-position: 0px 0px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrow-n,\n.k-state-hover > .k-i-arrow-n,\n.k-state-hover > * > .k-i-arrow-n,\n.k-button:not(.k-state-disabled):hover .k-i-arrow-n,\n.k-textbox:hover .k-i-arrow-n,\n.k-button:active .k-i-arrow-n {\n  background-position: -16px 0px;\n}\n.k-i-arrow-e {\n  background-position: 0px -16px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrow-e,\n.k-state-hover > .k-i-arrow-e,\n.k-state-hover > * > .k-i-arrow-e,\n.k-button:not(.k-state-disabled):hover .k-i-arrow-e,\n.k-textbox:hover .k-i-arrow-e,\n.k-button:active .k-i-arrow-e {\n  background-position: -16px -16px;\n}\n.k-rtl .k-i-arrow-w {\n  background-position: 0px -16px;\n}\n.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-arrow-w,\n.k-rtl .k-state-hover > .k-i-arrow-w,\n.k-rtl .k-state-hover > * > .k-i-arrow-w,\n.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-w,\n.k-rtl .k-textbox:hover .k-i-arrow-w,\n.k-rtl .k-button:active .k-i-arrow-w {\n  background-position: -16px -16px;\n}\n.k-i-arrow-s {\n  background-position: 0px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrow-s,\n.k-state-hover > .k-i-arrow-s,\n.k-state-hover > * > .k-i-arrow-s,\n.k-button:not(.k-state-disabled):hover .k-i-arrow-s,\n.k-textbox:hover .k-i-arrow-s,\n.k-button:active .k-i-arrow-s {\n  background-position: -16px -32px;\n}\n.k-i-arrow-w {\n  background-position: 0px -48px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrow-w,\n.k-state-hover > .k-i-arrow-w,\n.k-state-hover > * > .k-i-arrow-w,\n.k-button:not(.k-state-disabled):hover .k-i-arrow-w,\n.k-textbox:hover .k-i-arrow-w,\n.k-button:active .k-i-arrow-w {\n  background-position: -16px -48px;\n}\n.k-rtl .k-i-arrow-e {\n  background-position: 0px -48px;\n}\n.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-arrow-e,\n.k-rtl .k-state-hover > .k-i-arrow-e,\n.k-rtl .k-state-hover > * > .k-i-arrow-e,\n.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-e,\n.k-rtl .k-textbox:hover .k-i-arrow-e,\n.k-rtl .k-button:active .k-i-arrow-e {\n  background-position: -16px -48px;\n}\n.k-i-seek-n {\n  background-position: 0px -64px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-seek-n,\n.k-state-hover > .k-i-seek-n,\n.k-state-hover > * > .k-i-seek-n,\n.k-button:not(.k-state-disabled):hover .k-i-seek-n,\n.k-textbox:hover .k-i-seek-n,\n.k-button:active .k-i-seek-n {\n  background-position: -16px -64px;\n}\n.k-i-seek-e {\n  background-position: 0px -80px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-seek-e,\n.k-state-hover > .k-i-seek-e,\n.k-state-hover > * > .k-i-seek-e,\n.k-button:not(.k-state-disabled):hover .k-i-seek-e,\n.k-textbox:hover .k-i-seek-e,\n.k-button:active .k-i-seek-e {\n  background-position: -16px -80px;\n}\n.k-rtl .k-i-seek-w {\n  background-position: 0px -80px;\n}\n.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-seek-w,\n.k-rtl .k-state-hover > .k-i-seek-w,\n.k-rtl .k-state-hover > * > .k-i-seek-w,\n.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-w,\n.k-rtl .k-textbox:hover .k-i-seek-w,\n.k-rtl .k-button:active .k-i-seek-w {\n  background-position: -16px -80px;\n}\n.k-i-seek-s {\n  background-position: 0px -96px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-seek-s,\n.k-state-hover > .k-i-seek-s,\n.k-state-hover > * > .k-i-seek-s,\n.k-button:not(.k-state-disabled):hover .k-i-seek-s,\n.k-textbox:hover .k-i-seek-s,\n.k-button:active .k-i-seek-s {\n  background-position: -16px -96px;\n}\n.k-i-seek-w {\n  background-position: 0px -112px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-seek-w,\n.k-state-hover > .k-i-seek-w,\n.k-state-hover > * > .k-i-seek-w,\n.k-button:not(.k-state-disabled):hover .k-i-seek-w,\n.k-textbox:hover .k-i-seek-w,\n.k-button:active .k-i-seek-w {\n  background-position: -16px -112px;\n}\n.k-rtl .k-i-seek-e {\n  background-position: 0px -112px;\n}\n.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-seek-e,\n.k-rtl .k-state-hover > .k-i-seek-e,\n.k-rtl .k-state-hover > * > .k-i-seek-e,\n.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-e,\n.k-rtl .k-textbox:hover .k-i-seek-e,\n.k-rtl .k-button:active .k-i-seek-e {\n  background-position: -16px -112px;\n}\n.k-si-arrow-n {\n  background-position: 0 -129px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-arrow-n,\n.k-state-hover > .k-si-arrow-n,\n.k-state-hover > * > .k-si-arrow-n,\n.k-button:not(.k-state-disabled):hover .k-si-arrow-n,\n.k-textbox:hover .k-si-arrow-n,\n.k-button:active .k-si-arrow-n {\n  background-position: -16px -129px;\n}\n.k-si-arrow-e {\n  background-position: 0px -144px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-arrow-e,\n.k-state-hover > .k-si-arrow-e,\n.k-state-hover > * > .k-si-arrow-e,\n.k-button:not(.k-state-disabled):hover .k-si-arrow-e,\n.k-textbox:hover .k-si-arrow-e,\n.k-button:active .k-si-arrow-e {\n  background-position: -16px -144px;\n}\n.k-si-arrow-s {\n  background-position: 0 -159px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-arrow-s,\n.k-state-hover > .k-si-arrow-s,\n.k-state-hover > * > .k-si-arrow-s,\n.k-button:not(.k-state-disabled):hover .k-si-arrow-s,\n.k-textbox:hover .k-si-arrow-s,\n.k-button:active .k-si-arrow-s {\n  background-position: -16px -159px;\n}\n.k-si-arrow-w {\n  background-position: 0px -176px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-arrow-w,\n.k-state-hover > .k-si-arrow-w,\n.k-state-hover > * > .k-si-arrow-w,\n.k-button:not(.k-state-disabled):hover .k-si-arrow-w,\n.k-textbox:hover .k-si-arrow-w,\n.k-button:active .k-si-arrow-w {\n  background-position: -16px -176px;\n}\n.k-i-arrowhead-n {\n  background-position: 0px -256px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-n,\n.k-state-hover > .k-i-arrowhead-n,\n.k-state-hover > * > .k-i-arrowhead-n,\n.k-button:not(.k-state-disabled):hover .k-i-arrowhead-n,\n.k-textbox:hover .k-i-arrowhead-n,\n.k-button:active .k-i-arrowhead-n {\n  background-position: -16px -256px;\n}\n.k-i-arrowhead-e {\n  background-position: 0px -272px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-e,\n.k-state-hover > .k-i-arrowhead-e,\n.k-state-hover > * > .k-i-arrowhead-e,\n.k-button:not(.k-state-disabled):hover .k-i-arrowhead-e,\n.k-textbox:hover .k-i-arrowhead-e,\n.k-button:active .k-i-arrowhead-e {\n  background-position: -16px -272px;\n}\n.k-i-arrowhead-s {\n  background-position: 0px -288px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-s,\n.k-state-hover > .k-i-arrowhead-s,\n.k-state-hover > * > .k-i-arrowhead-s,\n.k-button:not(.k-state-disabled):hover .k-i-arrowhead-s,\n.k-textbox:hover .k-i-arrowhead-s,\n.k-button:active .k-i-arrowhead-s {\n  background-position: -16px -288px;\n}\n.k-i-arrowhead-w {\n  background-position: 0px -304px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-w,\n.k-state-hover > .k-i-arrowhead-w,\n.k-state-hover > * > .k-i-arrowhead-w,\n.k-button:not(.k-state-disabled):hover .k-i-arrowhead-w,\n.k-textbox:hover .k-i-arrowhead-w,\n.k-button:active .k-i-arrowhead-w {\n  background-position: -16px -304px;\n}\n.k-i-expand,\n.k-plus,\n.k-plus-disabled {\n  background-position: 0px -192px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-expand,\n.k-link:not(.k-state-disabled):hover > .k-plus,\n.k-link:not(.k-state-disabled):hover > .k-plus-disabled,\n.k-state-hover > .k-i-expand,\n.k-state-hover > .k-plus,\n.k-state-hover > .k-plus-disabled,\n.k-state-hover > * > .k-i-expand,\n.k-state-hover > * > .k-plus,\n.k-state-hover > * > .k-plus-disabled,\n.k-button:not(.k-state-disabled):hover .k-i-expand,\n.k-button:not(.k-state-disabled):hover .k-plus,\n.k-button:not(.k-state-disabled):hover .k-plus-disabled,\n.k-textbox:hover .k-i-expand,\n.k-textbox:hover .k-plus,\n.k-textbox:hover .k-plus-disabled,\n.k-button:active .k-i-expand,\n.k-button:active .k-plus,\n.k-button:active .k-plus-disabled {\n  background-position: -16px -192px;\n}\n.k-i-expand-w,\n.k-rtl .k-i-expand,\n.k-rtl .k-plus,\n.k-rtl .k-plus-disabled {\n  background-position: 0px -208px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-expand-w,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-i-expand,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-plus,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-plus-disabled,\n.k-state-hover > .k-i-expand-w,\n.k-state-hover > .k-rtl .k-i-expand,\n.k-state-hover > .k-rtl .k-plus,\n.k-state-hover > .k-rtl .k-plus-disabled,\n.k-state-hover > * > .k-i-expand-w,\n.k-state-hover > * > .k-rtl .k-i-expand,\n.k-state-hover > * > .k-rtl .k-plus,\n.k-state-hover > * > .k-rtl .k-plus-disabled,\n.k-button:not(.k-state-disabled):hover .k-i-expand-w,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-i-expand,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-plus,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-plus-disabled,\n.k-textbox:hover .k-i-expand-w,\n.k-textbox:hover .k-rtl .k-i-expand,\n.k-textbox:hover .k-rtl .k-plus,\n.k-textbox:hover .k-rtl .k-plus-disabled,\n.k-button:active .k-i-expand-w,\n.k-button:active .k-rtl .k-i-expand,\n.k-button:active .k-rtl .k-plus,\n.k-button:active .k-rtl .k-plus-disabled {\n  background-position: -16px -208px;\n}\n.k-i-collapse,\n.k-minus,\n.k-minus-disabled {\n  background-position: 0px -224px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-collapse,\n.k-link:not(.k-state-disabled):hover > .k-minus,\n.k-link:not(.k-state-disabled):hover > .k-minus-disabled,\n.k-state-hover > .k-i-collapse,\n.k-state-hover > .k-minus,\n.k-state-hover > .k-minus-disabled,\n.k-state-hover > * > .k-i-collapse,\n.k-state-hover > * > .k-minus,\n.k-state-hover > * > .k-minus-disabled,\n.k-button:not(.k-state-disabled):hover .k-i-collapse,\n.k-button:not(.k-state-disabled):hover .k-minus,\n.k-button:not(.k-state-disabled):hover .k-minus-disabled,\n.k-textbox:hover .k-i-collapse,\n.k-textbox:hover .k-minus,\n.k-textbox:hover .k-minus-disabled,\n.k-button:active .k-i-collapse,\n.k-button:active .k-minus,\n.k-button:active .k-minus-disabled {\n  background-position: -16px -224px;\n}\n.k-i-collapse-w,\n.k-rtl .k-i-collapse,\n.k-rtl .k-minus,\n.k-rtl .k-minus-disabled {\n  background-position: 0px -240px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-collapse-w,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-i-collapse,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-minus,\n.k-link:not(.k-state-disabled):hover > .k-rtl .k-minus-disabled,\n.k-state-hover > .k-i-collapse-w,\n.k-state-hover > .k-rtl .k-i-collapse,\n.k-state-hover > .k-rtl .k-minus,\n.k-state-hover > .k-rtl .k-minus-disabled,\n.k-state-hover > * > .k-i-collapse-w,\n.k-state-hover > * > .k-rtl .k-i-collapse,\n.k-state-hover > * > .k-rtl .k-minus,\n.k-state-hover > * > .k-rtl .k-minus-disabled,\n.k-button:not(.k-state-disabled):hover .k-i-collapse-w,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-i-collapse,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-minus,\n.k-button:not(.k-state-disabled):hover .k-rtl .k-minus-disabled,\n.k-textbox:hover .k-i-collapse-w,\n.k-textbox:hover .k-rtl .k-i-collapse,\n.k-textbox:hover .k-rtl .k-minus,\n.k-textbox:hover .k-rtl .k-minus-disabled,\n.k-button:active .k-i-collapse-w,\n.k-button:active .k-rtl .k-i-collapse,\n.k-button:active .k-rtl .k-minus,\n.k-button:active .k-rtl .k-minus-disabled {\n  background-position: -16px -240px;\n}\n.k-i-pencil,\n.k-edit {\n  background-position: -32px 0px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-pencil,\n.k-link:not(.k-state-disabled):hover > .k-edit,\n.k-state-hover > .k-i-pencil,\n.k-state-hover > .k-edit,\n.k-state-hover > * > .k-i-pencil,\n.k-state-hover > * > .k-edit,\n.k-button:not(.k-state-disabled):hover .k-i-pencil,\n.k-button:not(.k-state-disabled):hover .k-edit,\n.k-textbox:hover .k-i-pencil,\n.k-textbox:hover .k-edit,\n.k-button:active .k-i-pencil,\n.k-button:active .k-edit {\n  background-position: -48px 0px;\n}\n.k-i-close,\n.k-delete,\n.k-group-delete {\n  background-position: -32px -16px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-close,\n.k-link:not(.k-state-disabled):hover > .k-delete,\n.k-link:not(.k-state-disabled):hover > .k-group-delete,\n.k-state-hover > .k-i-close,\n.k-state-hover > .k-delete,\n.k-state-hover > .k-group-delete,\n.k-state-hover > * > .k-i-close,\n.k-state-hover > * > .k-delete,\n.k-state-hover > * > .k-group-delete,\n.k-button:not(.k-state-disabled):hover .k-i-close,\n.k-button:not(.k-state-disabled):hover .k-delete,\n.k-button:not(.k-state-disabled):hover .k-group-delete,\n.k-textbox:hover .k-i-close,\n.k-textbox:hover .k-delete,\n.k-textbox:hover .k-group-delete,\n.k-button:active .k-i-close,\n.k-button:active .k-delete,\n.k-button:active .k-group-delete {\n  background-position: -48px -16px;\n}\n.k-si-close {\n  background-position: -160px -80px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-close,\n.k-state-hover > .k-si-close,\n.k-state-hover > * > .k-si-close,\n.k-button:not(.k-state-disabled):hover .k-si-close,\n.k-textbox:hover .k-si-close,\n.k-button:active .k-si-close {\n  background-position: -176px -80px;\n}\n.k-multiselect .k-delete {\n  background-position: -160px -80px;\n}\n.k-multiselect .k-state-hover .k-delete {\n  background-position: -176px -80px;\n}\n.k-i-tick,\n.k-insert,\n.k-update {\n  background-position: -32px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-tick,\n.k-link:not(.k-state-disabled):hover > .k-insert,\n.k-link:not(.k-state-disabled):hover > .k-update,\n.k-state-hover > .k-i-tick,\n.k-state-hover > .k-insert,\n.k-state-hover > .k-update,\n.k-state-hover > * > .k-i-tick,\n.k-state-hover > * > .k-insert,\n.k-state-hover > * > .k-update,\n.k-button:not(.k-state-disabled):hover .k-i-tick,\n.k-button:not(.k-state-disabled):hover .k-insert,\n.k-button:not(.k-state-disabled):hover .k-update,\n.k-textbox:hover .k-i-tick,\n.k-textbox:hover .k-insert,\n.k-textbox:hover .k-update,\n.k-button:active .k-i-tick,\n.k-button:active .k-insert,\n.k-button:active .k-update {\n  background-position: -48px -32px;\n}\n.k-check:checked,\n.k-mobile-list .k-edit-field [type=checkbox],\n.k-mobile-list .k-edit-field [type=radio] {\n  background-position: -32px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-check:checked,\n.k-link:not(.k-state-disabled):hover > .k-mobile-list .k-edit-field [type=checkbox],\n.k-link:not(.k-state-disabled):hover > .k-mobile-list .k-edit-field [type=radio],\n.k-state-hover > .k-check:checked,\n.k-state-hover > .k-mobile-list .k-edit-field [type=checkbox],\n.k-state-hover > .k-mobile-list .k-edit-field [type=radio],\n.k-state-hover > * > .k-check:checked,\n.k-state-hover > * > .k-mobile-list .k-edit-field [type=checkbox],\n.k-state-hover > * > .k-mobile-list .k-edit-field [type=radio],\n.k-button:not(.k-state-disabled):hover .k-check:checked,\n.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=checkbox],\n.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=radio],\n.k-textbox:hover .k-check:checked,\n.k-textbox:hover .k-mobile-list .k-edit-field [type=checkbox],\n.k-textbox:hover .k-mobile-list .k-edit-field [type=radio],\n.k-button:active .k-check:checked,\n.k-button:active .k-mobile-list .k-edit-field [type=checkbox],\n.k-button:active .k-mobile-list .k-edit-field [type=radio] {\n  background-position: -48px -32px;\n}\n.k-i-cancel,\n.k-cancel,\n.k-denied {\n  background-position: -32px -48px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-cancel,\n.k-link:not(.k-state-disabled):hover > .k-cancel,\n.k-link:not(.k-state-disabled):hover > .k-denied,\n.k-state-hover > .k-i-cancel,\n.k-state-hover > .k-cancel,\n.k-state-hover > .k-denied,\n.k-state-hover > * > .k-i-cancel,\n.k-state-hover > * > .k-cancel,\n.k-state-hover > * > .k-denied,\n.k-button:not(.k-state-disabled):hover .k-i-cancel,\n.k-button:not(.k-state-disabled):hover .k-cancel,\n.k-button:not(.k-state-disabled):hover .k-denied,\n.k-textbox:hover .k-i-cancel,\n.k-textbox:hover .k-cancel,\n.k-textbox:hover .k-denied,\n.k-button:active .k-i-cancel,\n.k-button:active .k-cancel,\n.k-button:active .k-denied {\n  background-position: -48px -48px;\n}\n.k-i-plus,\n.k-add {\n  background-position: -32px -64px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-plus,\n.k-link:not(.k-state-disabled):hover > .k-add,\n.k-state-hover > .k-i-plus,\n.k-state-hover > .k-add,\n.k-state-hover > * > .k-i-plus,\n.k-state-hover > * > .k-add,\n.k-button:not(.k-state-disabled):hover .k-i-plus,\n.k-button:not(.k-state-disabled):hover .k-add,\n.k-textbox:hover .k-i-plus,\n.k-textbox:hover .k-add,\n.k-button:active .k-i-plus,\n.k-button:active .k-add {\n  background-position: -48px -64px;\n}\n.k-i-funnel,\n.k-filter {\n  background-position: -32px -80px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-funnel,\n.k-link:not(.k-state-disabled):hover > .k-filter,\n.k-state-hover > .k-i-funnel,\n.k-state-hover > .k-filter,\n.k-state-hover > * > .k-i-funnel,\n.k-state-hover > * > .k-filter,\n.k-button:not(.k-state-disabled):hover .k-i-funnel,\n.k-button:not(.k-state-disabled):hover .k-filter,\n.k-textbox:hover .k-i-funnel,\n.k-textbox:hover .k-filter,\n.k-button:active .k-i-funnel,\n.k-button:active .k-filter {\n  background-position: -48px -80px;\n}\n.k-i-funnel-clear,\n.k-clear-filter {\n  background-position: -32px -96px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-funnel-clear,\n.k-link:not(.k-state-disabled):hover > .k-clear-filter,\n.k-state-hover > .k-i-funnel-clear,\n.k-state-hover > .k-clear-filter,\n.k-state-hover > * > .k-i-funnel-clear,\n.k-state-hover > * > .k-clear-filter,\n.k-button:not(.k-state-disabled):hover .k-i-funnel-clear,\n.k-button:not(.k-state-disabled):hover .k-clear-filter,\n.k-textbox:hover .k-i-funnel-clear,\n.k-textbox:hover .k-clear-filter,\n.k-button:active .k-i-funnel-clear,\n.k-button:active .k-clear-filter {\n  background-position: -48px -96px;\n}\n.k-i-lock {\n  background-position: -64px 0px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-lock,\n.k-state-hover > .k-i-lock,\n.k-state-hover > * > .k-i-lock,\n.k-button:not(.k-state-disabled):hover .k-i-lock,\n.k-textbox:hover .k-i-lock,\n.k-button:active .k-i-lock {\n  background-position: -80px 0px;\n}\n.k-i-unlock {\n  background-position: -64px -16px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-unlock,\n.k-state-hover > .k-i-unlock,\n.k-state-hover > * > .k-i-unlock,\n.k-button:not(.k-state-disabled):hover .k-i-unlock,\n.k-textbox:hover .k-i-unlock,\n.k-button:active .k-i-unlock {\n  background-position: -80px -16px;\n}\n.k-i-refresh {\n  background-position: -32px -112px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-refresh,\n.k-state-hover > .k-i-refresh,\n.k-state-hover > * > .k-i-refresh,\n.k-button:not(.k-state-disabled):hover .k-i-refresh,\n.k-textbox:hover .k-i-refresh,\n.k-button:active .k-i-refresh {\n  background-position: -48px -112px;\n}\n.k-i-exception {\n  background-position: -160px -304px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-exception,\n.k-state-hover > .k-i-exception,\n.k-state-hover > * > .k-i-exception,\n.k-button:not(.k-state-disabled):hover .k-i-exception,\n.k-textbox:hover .k-i-exception,\n.k-button:active .k-i-exception {\n  background-position: -176px -304px;\n}\n.k-i-restore {\n  background-position: -32px -128px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-restore,\n.k-state-hover > .k-i-restore,\n.k-state-hover > * > .k-i-restore,\n.k-button:not(.k-state-disabled):hover .k-i-restore,\n.k-textbox:hover .k-i-restore,\n.k-button:active .k-i-restore {\n  background-position: -48px -128px;\n}\n.k-i-maximize {\n  background-position: -32px -144px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-maximize,\n.k-state-hover > .k-i-maximize,\n.k-state-hover > * > .k-i-maximize,\n.k-button:not(.k-state-disabled):hover .k-i-maximize,\n.k-textbox:hover .k-i-maximize,\n.k-button:active .k-i-maximize {\n  background-position: -48px -144px;\n}\n.k-i-minimize {\n  background-position: -64px -288px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-minimize,\n.k-state-hover > .k-i-minimize,\n.k-state-hover > * > .k-i-minimize,\n.k-button:not(.k-state-disabled):hover .k-i-minimize,\n.k-textbox:hover .k-i-minimize,\n.k-button:active .k-i-minimize {\n  background-position: -80px -288px;\n}\n.k-i-pin {\n  background-position: -160px -256px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-pin,\n.k-state-hover > .k-i-pin,\n.k-state-hover > * > .k-i-pin,\n.k-button:not(.k-state-disabled):hover .k-i-pin,\n.k-textbox:hover .k-i-pin,\n.k-button:active .k-i-pin {\n  background-position: -176px -256px;\n}\n.k-i-unpin {\n  background-position: -160px -272px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-unpin,\n.k-state-hover > .k-i-unpin,\n.k-state-hover > * > .k-i-unpin,\n.k-button:not(.k-state-disabled):hover .k-i-unpin,\n.k-textbox:hover .k-i-unpin,\n.k-button:active .k-i-unpin {\n  background-position: -176px -272px;\n}\n.k-resize-se {\n  background-position: -32px -160px;\n}\n.k-link:not(.k-state-disabled):hover > .k-resize-se,\n.k-state-hover > .k-resize-se,\n.k-state-hover > * > .k-resize-se,\n.k-button:not(.k-state-disabled):hover .k-resize-se,\n.k-textbox:hover .k-resize-se,\n.k-button:active .k-resize-se {\n  background-position: -48px -160px;\n}\n.k-i-calendar {\n  background-position: -32px -176px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-calendar,\n.k-state-hover > .k-i-calendar,\n.k-state-hover > * > .k-i-calendar,\n.k-button:not(.k-state-disabled):hover .k-i-calendar,\n.k-textbox:hover .k-i-calendar,\n.k-button:active .k-i-calendar {\n  background-position: -48px -176px;\n}\n.k-i-clock {\n  background-position: -32px -192px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-clock,\n.k-state-hover > .k-i-clock,\n.k-state-hover > * > .k-i-clock,\n.k-button:not(.k-state-disabled):hover .k-i-clock,\n.k-textbox:hover .k-i-clock,\n.k-button:active .k-i-clock {\n  background-position: -48px -192px;\n}\n.k-si-plus {\n  background-position: -32px -208px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-plus,\n.k-state-hover > .k-si-plus,\n.k-state-hover > * > .k-si-plus,\n.k-button:not(.k-state-disabled):hover .k-si-plus,\n.k-textbox:hover .k-si-plus,\n.k-button:active .k-si-plus {\n  background-position: -48px -208px;\n}\n.k-si-minus {\n  background-position: -32px -224px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-minus,\n.k-state-hover > .k-si-minus,\n.k-state-hover > * > .k-si-minus,\n.k-button:not(.k-state-disabled):hover .k-si-minus,\n.k-textbox:hover .k-si-minus,\n.k-button:active .k-si-minus {\n  background-position: -48px -224px;\n}\n.k-i-search {\n  background-position: -32px -240px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-search,\n.k-state-hover > .k-i-search,\n.k-state-hover > * > .k-i-search,\n.k-button:not(.k-state-disabled):hover .k-i-search,\n.k-textbox:hover .k-i-search,\n.k-button:active .k-i-search {\n  background-position: -48px -240px;\n}\n.k-i-custom {\n  background-position: -115px -113px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-custom,\n.k-state-hover > .k-i-custom,\n.k-state-hover > * > .k-i-custom,\n.k-button:not(.k-state-disabled):hover .k-i-custom,\n.k-textbox:hover .k-i-custom,\n.k-button:active .k-i-custom {\n  background-position: -141px -113px;\n}\n.k-editor .k-i-custom {\n  background-position: -111px -109px;\n}\n.k-viewHtml {\n  background-position: -288px -120px;\n}\n.k-i-insert-n,\n.k-insert-top {\n  background-position: -160px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-insert-n,\n.k-link:not(.k-state-disabled):hover > .k-insert-top,\n.k-state-hover > .k-i-insert-n,\n.k-state-hover > .k-insert-top,\n.k-state-hover > * > .k-i-insert-n,\n.k-state-hover > * > .k-insert-top,\n.k-button:not(.k-state-disabled):hover .k-i-insert-n,\n.k-button:not(.k-state-disabled):hover .k-insert-top,\n.k-textbox:hover .k-i-insert-n,\n.k-textbox:hover .k-insert-top,\n.k-button:active .k-i-insert-n,\n.k-button:active .k-insert-top {\n  background-position: -176px -32px;\n}\n.k-i-insert-m,\n.k-insert-middle {\n  background-position: -160px -48px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-insert-m,\n.k-link:not(.k-state-disabled):hover > .k-insert-middle,\n.k-state-hover > .k-i-insert-m,\n.k-state-hover > .k-insert-middle,\n.k-state-hover > * > .k-i-insert-m,\n.k-state-hover > * > .k-insert-middle,\n.k-button:not(.k-state-disabled):hover .k-i-insert-m,\n.k-button:not(.k-state-disabled):hover .k-insert-middle,\n.k-textbox:hover .k-i-insert-m,\n.k-textbox:hover .k-insert-middle,\n.k-button:active .k-i-insert-m,\n.k-button:active .k-insert-middle {\n  background-position: -176px -48px;\n}\n.k-i-insert-s,\n.k-insert-bottom {\n  background-position: -160px -64px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-insert-s,\n.k-link:not(.k-state-disabled):hover > .k-insert-bottom,\n.k-state-hover > .k-i-insert-s,\n.k-state-hover > .k-insert-bottom,\n.k-state-hover > * > .k-i-insert-s,\n.k-state-hover > * > .k-insert-bottom,\n.k-button:not(.k-state-disabled):hover .k-i-insert-s,\n.k-button:not(.k-state-disabled):hover .k-insert-bottom,\n.k-textbox:hover .k-i-insert-s,\n.k-textbox:hover .k-insert-bottom,\n.k-button:active .k-i-insert-s,\n.k-button:active .k-insert-bottom {\n  background-position: -176px -64px;\n}\n.k-drop-hint {\n  background-position: 0 -326px;\n}\n.k-i-note,\n.k-warning {\n  background-position: -160px -240px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-note,\n.k-link:not(.k-state-disabled):hover > .k-warning,\n.k-state-hover > .k-i-note,\n.k-state-hover > .k-warning,\n.k-state-hover > * > .k-i-note,\n.k-state-hover > * > .k-warning,\n.k-button:not(.k-state-disabled):hover .k-i-note,\n.k-button:not(.k-state-disabled):hover .k-warning,\n.k-textbox:hover .k-i-note,\n.k-textbox:hover .k-warning,\n.k-button:active .k-i-note,\n.k-button:active .k-warning {\n  background-position: -176px -240px;\n}\n.k-i-sort-asc {\n  background-position: -112px -240px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-sort-asc,\n.k-state-hover > .k-i-sort-asc,\n.k-state-hover > * > .k-i-sort-asc,\n.k-button:not(.k-state-disabled):hover .k-i-sort-asc,\n.k-textbox:hover .k-i-sort-asc,\n.k-button:active .k-i-sort-asc {\n  background-position: -128px -240px;\n}\n.k-i-sort-desc {\n  background-position: -112px -256px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-sort-desc,\n.k-state-hover > .k-i-sort-desc,\n.k-state-hover > * > .k-i-sort-desc,\n.k-button:not(.k-state-disabled):hover .k-i-sort-desc,\n.k-textbox:hover .k-i-sort-desc,\n.k-button:active .k-i-sort-desc {\n  background-position: -128px -256px;\n}\n.k-i-group {\n  background-position: -112px -272px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-group,\n.k-state-hover > .k-i-group,\n.k-state-hover > * > .k-i-group,\n.k-button:not(.k-state-disabled):hover .k-i-group,\n.k-textbox:hover .k-i-group,\n.k-button:active .k-i-group {\n  background-position: -128px -272px;\n}\n.k-i-ungroup {\n  background-position: -112px -288px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-ungroup,\n.k-state-hover > .k-i-ungroup,\n.k-state-hover > * > .k-i-ungroup,\n.k-button:not(.k-state-disabled):hover .k-i-ungroup,\n.k-textbox:hover .k-i-ungroup,\n.k-button:active .k-i-ungroup {\n  background-position: -128px -288px;\n}\n.k-i-columns {\n  background-position: -112px -304px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-columns,\n.k-state-hover > .k-i-columns,\n.k-state-hover > * > .k-i-columns,\n.k-button:not(.k-state-disabled):hover .k-i-columns,\n.k-textbox:hover .k-i-columns,\n.k-button:active .k-i-columns {\n  background-position: -128px -304px;\n}\n.k-i-hbars {\n  background-position: -64px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-hbars,\n.k-state-hover > .k-i-hbars,\n.k-state-hover > * > .k-i-hbars,\n.k-button:not(.k-state-disabled):hover .k-i-hbars,\n.k-textbox:hover .k-i-hbars,\n.k-button:active .k-i-hbars {\n  background-position: -80px -32px;\n}\n.k-i-vbars {\n  background-position: -64px -48px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-vbars,\n.k-state-hover > .k-i-vbars,\n.k-state-hover > * > .k-i-vbars,\n.k-button:not(.k-state-disabled):hover .k-i-vbars,\n.k-textbox:hover .k-i-vbars,\n.k-button:active .k-i-vbars {\n  background-position: -80px -48px;\n}\n.k-i-sum {\n  background-position: -64px -64px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-sum,\n.k-state-hover > .k-i-sum,\n.k-state-hover > * > .k-i-sum,\n.k-button:not(.k-state-disabled):hover .k-i-sum,\n.k-textbox:hover .k-i-sum,\n.k-button:active .k-i-sum {\n  background-position: -80px -64px;\n}\n.k-i-pdf {\n  background-position: -64px -80px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-pdf,\n.k-state-hover > .k-i-pdf,\n.k-state-hover > * > .k-i-pdf,\n.k-button:not(.k-state-disabled):hover .k-i-pdf,\n.k-textbox:hover .k-i-pdf,\n.k-button:active .k-i-pdf {\n  background-position: -80px -80px;\n}\n.k-i-excel {\n  background-position: -64px -96px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-excel,\n.k-state-hover > .k-i-excel,\n.k-state-hover > * > .k-i-excel,\n.k-button:not(.k-state-disabled):hover .k-i-excel,\n.k-textbox:hover .k-i-excel,\n.k-button:active .k-i-excel {\n  background-position: -80px -96px;\n}\n.k-i-rotatecw {\n  background-position: -64px -112px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-rotatecw,\n.k-state-hover > .k-i-rotatecw,\n.k-state-hover > * > .k-i-rotatecw,\n.k-button:not(.k-state-disabled):hover .k-i-rotatecw,\n.k-textbox:hover .k-i-rotatecw,\n.k-button:active .k-i-rotatecw {\n  background-position: -80px -112px;\n}\n.k-i-rotateccw {\n  background-position: -64px -128px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-rotateccw,\n.k-state-hover > .k-i-rotateccw,\n.k-state-hover > * > .k-i-rotateccw,\n.k-button:not(.k-state-disabled):hover .k-i-rotateccw,\n.k-textbox:hover .k-i-rotateccw,\n.k-button:active .k-i-rotateccw {\n  background-position: -80px -128px;\n}\n.k-i-undo {\n  background-position: -64px -160px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-undo,\n.k-state-hover > .k-i-undo,\n.k-state-hover > * > .k-i-undo,\n.k-button:not(.k-state-disabled):hover .k-i-undo,\n.k-textbox:hover .k-i-undo,\n.k-button:active .k-i-undo {\n  background-position: -80px -160px;\n}\n.k-i-redo {\n  background-position: -64px -144px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-redo,\n.k-state-hover > .k-i-redo,\n.k-state-hover > * > .k-i-redo,\n.k-button:not(.k-state-disabled):hover .k-i-redo,\n.k-textbox:hover .k-i-redo,\n.k-button:active .k-i-redo {\n  background-position: -80px -144px;\n}\n.k-i-shape {\n  background-position: -64px -176px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-shape,\n.k-state-hover > .k-i-shape,\n.k-state-hover > * > .k-i-shape,\n.k-button:not(.k-state-disabled):hover .k-i-shape,\n.k-textbox:hover .k-i-shape,\n.k-button:active .k-i-shape {\n  background-position: -80px -176px;\n}\n.k-i-connector {\n  background-position: -64px -192px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-connector,\n.k-state-hover > .k-i-connector,\n.k-state-hover > * > .k-i-connector,\n.k-button:not(.k-state-disabled):hover .k-i-connector,\n.k-textbox:hover .k-i-connector,\n.k-button:active .k-i-connector {\n  background-position: -80px -192px;\n}\n.k-i-kpi {\n  background-position: -64px -208px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-kpi,\n.k-state-hover > .k-i-kpi,\n.k-state-hover > * > .k-i-kpi,\n.k-button:not(.k-state-disabled):hover .k-i-kpi,\n.k-textbox:hover .k-i-kpi,\n.k-button:active .k-i-kpi {\n  background-position: -80px -208px;\n}\n.k-i-dimension {\n  background-position: -64px -224px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-dimension,\n.k-state-hover > .k-i-dimension,\n.k-state-hover > * > .k-i-dimension,\n.k-button:not(.k-state-disabled):hover .k-i-dimension,\n.k-textbox:hover .k-i-dimension,\n.k-button:active .k-i-dimension {\n  background-position: -80px -224px;\n}\n.k-file {\n  background-position: 0px 0px;\n}\n.k-link:not(.k-state-disabled):hover > .k-file,\n.k-state-hover > .k-file,\n.k-state-hover > * > .k-file,\n.k-button:not(.k-state-disabled):hover .k-file,\n.k-textbox:hover .k-file,\n.k-button:active .k-file {\n  background-position: -16px 0px;\n}\n.k-i-folder-add,\n.k-addfolder {\n  background-position: -32px -272px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-folder-add,\n.k-link:not(.k-state-disabled):hover > .k-addfolder,\n.k-state-hover > .k-i-folder-add,\n.k-state-hover > .k-addfolder,\n.k-state-hover > * > .k-i-folder-add,\n.k-state-hover > * > .k-addfolder,\n.k-button:not(.k-state-disabled):hover .k-i-folder-add,\n.k-button:not(.k-state-disabled):hover .k-addfolder,\n.k-textbox:hover .k-i-folder-add,\n.k-textbox:hover .k-addfolder,\n.k-button:active .k-i-folder-add,\n.k-button:active .k-addfolder {\n  background-position: -48px -272px;\n}\n.k-i-folder-up,\n.k-goup {\n  background-position: -32px -288px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-folder-up,\n.k-link:not(.k-state-disabled):hover > .k-goup,\n.k-state-hover > .k-i-folder-up,\n.k-state-hover > .k-goup,\n.k-state-hover > * > .k-i-folder-up,\n.k-state-hover > * > .k-goup,\n.k-button:not(.k-state-disabled):hover .k-i-folder-up,\n.k-button:not(.k-state-disabled):hover .k-goup,\n.k-textbox:hover .k-i-folder-up,\n.k-textbox:hover .k-goup,\n.k-button:active .k-i-folder-up,\n.k-button:active .k-goup {\n  background-position: -48px -288px;\n}\n.k-i-more {\n  background-position: -64px -32px;\n}\n.k-link:not(.k-state-disabled):hover > .k-i-more,\n.k-state-hover > .k-i-more,\n.k-state-hover > * > .k-i-more,\n.k-button:not(.k-state-disabled):hover .k-i-more,\n.k-textbox:hover .k-i-more,\n.k-button:active .k-i-more {\n  background-position: -80px -32px;\n}\n.k-file > .k-icon {\n  background-position: -115px -91px;\n}\n.k-image {\n  border: 0;\n}\n.k-breadcrumbs:hover .k-i-arrow-n {\n  background-position: 0 0;\n}\n.k-breadcrumbs:hover .k-i-arrow-e {\n  background-position: 0 -16px;\n}\n/* Colors */\nhtml .k-success-colored {\n  color: #507f50;\n  border-color: #d0dfd0;\n  background-color: #f0fff0;\n}\nhtml .k-info-colored {\n  color: #50607f;\n  border-color: #d0d9df;\n  background-color: #f0f9ff;\n}\nhtml .k-error-colored {\n  color: #7f5050;\n  border-color: #dfd0d0;\n  background-color: #fff0f0;\n}\n.k-inline-block {\n  padding: 0 2px;\n}\n/* loading */\n.k-loading,\n.k-loading-image {\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-position: center center;\n}\n.k-loading-mask,\n.k-loading-image,\n.k-loading-text {\n  position: absolute;\n}\n.k-loading-text {\n  text-indent: -4000px;\n  text-align: center;\n  /*rtl*/\n}\n.k-loading-image,\n.k-loading-color {\n  width: 100%;\n  height: 100%;\n}\n.k-loading-image {\n  top: 0;\n  left: 0;\n  z-index: 2;\n}\n.k-loading-color {\n  filter: alpha(opacity=30);\n  opacity: .3;\n}\n.k-content-frame {\n  border: 0;\n  width: 100%;\n  height: 100%;\n}\n.k-pane > .k-splitter-overlay {\n  filter: alpha(opacity=0);\n  opacity: 0;\n  position: absolute;\n}\n/* drag n drop */\n.k-drag-clue {\n  position: absolute;\n  z-index: 10003;\n  border-style: solid;\n  border-width: 1px;\n  font-size: .9em;\n  padding: .2em .4em;\n  white-space: nowrap;\n  cursor: default;\n}\n.k-drag-status {\n  margin-top: -3px;\n  margin-right: 4px;\n  vertical-align: middle;\n}\n.k-reorder-cue {\n  position: absolute;\n  width: 1px;\n  overflow: visible;\n}\n.k-reorder-cue .k-icon {\n  position: absolute;\n  left: -4px;\n  width: 8px;\n  height: 4px;\n}\n.k-reorder-cue .k-i-arrow-s {\n  top: -4px;\n  background-position: -4px -166px;\n}\n.k-reorder-cue .k-i-arrow-n {\n  bottom: -4px;\n  background-position: -4px -134px;\n}\n/* virtual scrollbar */\n.k-scrollbar {\n  position: absolute;\n  overflow: scroll;\n}\n.k-scrollbar-vertical {\n  top: 0;\n  right: 0;\n  width: 17px;\n  /* scrollbar width */\n  height: 100%;\n  overflow-x: hidden;\n}\n.k-touch-scrollbar {\n  display: none;\n  position: absolute;\n  z-index: 200000;\n  height: 8px;\n  width: 8px;\n  border: 1px solid #8a8a8a;\n  background-color: #858585;\n}\n@media only screen and (-webkit-min-device-pixel-ratio: 2) {\n  body .k-touch-scrollbar {\n    height: 12px;\n    width: 12px;\n    border-radius: 7px;\n  }\n}\n.k-virtual-scrollable-wrap {\n  overflow-x: auto;\n  /*needed by IE8*/\n}\n/* current time indicator */\n.k-current-time {\n  background: #f00;\n  position: absolute;\n}\n/* override box sizing for grid layout framework integration (Bootstrap 3, Foundation 4) */\n.k-animation-container,\n.k-widget,\n.k-widget *,\n.k-animation-container *,\n.k-widget *:before,\n.k-animation-container *:after,\n.k-block .k-header,\n.k-list-container {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.k-button,\n.k-textbox,\n.k-autocomplete,\ndiv.k-window-content,\n.k-tabstrip > .k-content > .km-scroll-container,\n.k-block,\n.k-edit-cell .k-widget,\n.k-grid-edit-row .k-widget,\n.k-grid-edit-row .text-box,\n.km-actionsheet > li,\n.km-shim {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n/* Fix for Bootstrap 3 */\n.input-group .form-control {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.form-control.k-widget {\n  padding: 0;\n}\na.k-button:hover {\n  text-decoration: none;\n}\n/* override iOS styles in mobile Kendo */\n.k-widget,\n.k-widget * {\n  -moz-background-clip: border-box;\n  -webkit-background-clip: border-box;\n  background-clip: border-box;\n}\ninput.k-checkbox,\n.k-radio {\n  display: inline;\n  opacity: 0;\n  width: 0;\n  margin: 0;\n}\n.k-checkbox-label {\n  position: relative;\n  padding-left: 1.5em;\n  vertical-align: middle;\n  line-height: 0.875em;\n  cursor: pointer;\n}\n.k-checkbox-label:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1em;\n  height: 1em;\n  border-width: 1px;\n  border-style: solid;\n}\n.k-checkbox-label:after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1em;\n  height: 1em;\n  border-width: 1px;\n  border-style: solid;\n}\n.k-checkbox:checked + .k-checkbox-label:after {\n  content: \"\\2713\";\n  width: 1em;\n  height: 1em;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-width: 1px;\n  border-style: solid;\n  text-align: center;\n}\n.k-checkbox:disabled + .k-checkbox-label {\n  cursor: auto;\n}\n.k-radio-label {\n  position: relative;\n  padding-left: 1.5em;\n  vertical-align: middle;\n  line-height: 0.875em;\n  cursor: pointer;\n}\n.k-radio-label:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 14px;\n  height: 14px;\n  border-style: solid;\n}\n.k-radio:checked + .k-radio-label:after {\n  content: \"\";\n  width: 10px;\n  height: 10px;\n  position: absolute;\n  top: 3px;\n  left: 3px;\n}\n.k-radio:disabled + .k-radio-label {\n  cursor: auto;\n}\n.k-ie8 .k-checkbox,\n.k-ie8 .k-radio {\n  display: inline-block;\n}\n.k-ie8 .k-checkbox-label,\n.k-ie8 .k-radio-label {\n  padding-left: 0;\n}\n.k-ie8 .k-checkbox-label:before,\n.k-ie8 .k-checkbox-label:after,\n.k-ie8 .k-radio-label:before,\n.k-ie8 .k-radio-label:after {\n  display: none;\n}\n/* RTL for checkboxes and radio buttons */\n.k-rtl .k-checkbox-label,\n.k-rtl .k-radio-label {\n  padding-right: 1.5em;\n}\n.k-rtl .k-checkbox-label:before,\n.k-rtl .k-checkbox-label:after,\n.k-rtl .k-radio-label:before {\n  right: 0;\n}\n.k-rtl .k-radio:checked + .k-radio-label:after {\n  right: 3px;\n}\ninput.k-checkbox + label {\n  -webkit-user-select: none;\n  user-select: none;\n}\n.k-edit-form {\n  margin: 0;\n  padding: 0;\n}\n.k-window > div.k-popup-edit-form {\n  padding: 1em 0;\n}\n.k-grid-edit-row .k-edit-form td {\n  border-bottom-width: 0;\n}\n.k-edit-form-container {\n  position: relative;\n  width: 400px;\n}\n.k-edit-label,\n.k-edit-form-container .editor-label {\n  float: left;\n  clear: both;\n  width: 30%;\n  padding: .4em 0 1em;\n  margin-left: 2%;\n  text-align: right;\n}\n.k-edit-field,\n.k-edit-form-container .editor-field {\n  float: right;\n  clear: right;\n  width: 60%;\n  margin-right: 2%;\n  padding: 0 0 .6em;\n}\n.k-edit-field > input[type=\"checkbox\"],\n.k-edit-field > input[type=\"radio\"] {\n  margin-top: .4em;\n}\n.k-edit-form-container .k-button {\n  margin: 0 .16em;\n}\n.k-edit-field > input[type=\"checkbox\"]:first-child,\n.k-edit-field > input[type=\"radio\"]:first-child,\n.k-edit-field > label:first-child > input[type=\"checkbox\"],\n.k-edit-field > .k-button:first-child {\n  margin-left: 0;\n}\n.k-edit-form-container .k-edit-buttons {\n  clear: both;\n  text-align: right;\n  border-width: 1px 0 0;\n  border-style: solid;\n  position: relative;\n  bottom: -1em;\n  padding: .6em;\n}\n/* Window */\ndiv.k-window {\n  display: inline-block;\n  position: absolute;\n  z-index: 10001;\n  border-style: solid;\n  border-width: 1px;\n  padding-top: 2em;\n}\n.k-block > .k-header,\n.k-window-titlebar {\n  position: absolute;\n  width: 100%;\n  height: 1.1em;\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  margin-top: -2em;\n  padding: .4em 0;\n  font-size: 1.2em;\n  white-space: nowrap;\n  min-height: 16px;\n  /* icon size */\n}\n.k-block > .k-header {\n  position: relative;\n  margin: -2px 0 10px -2px;\n  padding: .3em 2px;\n}\n.k-window-title {\n  position: absolute;\n  left: .44em;\n  right: .44em;\n  overflow: hidden;\n  cursor: default;\n  text-overflow: ellipsis;\n}\n.k-window-title .k-image {\n  margin: 0 5px 0 0;\n  vertical-align: middle;\n}\ndiv.k-window-titleless {\n  padding-top: 0;\n}\ndiv.k-window-content {\n  position: relative;\n  height: 100%;\n  padding: .58em;\n  overflow: auto;\n  outline: 0;\n}\ndiv.k-window-iframecontent {\n  padding: 0;\n  overflow: visible;\n}\n.k-window-content > .km-scroll-container {\n  height: 100%;\n}\n/* Compensate for content padding in IE7 */\n.k-ie7 .k-window {\n  padding-bottom: 1.16em;\n}\n.k-ie7 .k-window-titleless {\n  padding-bottom: 0;\n}\n.k-window-titlebar .k-window-actions {\n  position: absolute;\n  top: 0;\n  right: .3em;\n  padding-top: .3em;\n  white-space: nowrap;\n}\n.k-window-titlebar .k-window-action {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  padding: 2px;\n  text-decoration: none;\n  vertical-align: middle;\n  opacity: .7;\n}\n.k-window-titlebar .k-state-hover {\n  border-style: solid;\n  border-width: 1px;\n  padding: 1px;\n  opacity: 1;\n}\n.k-window-action .k-icon {\n  margin: 0;\n  vertical-align: top;\n}\n.k-window > .k-resize-handle {\n  position: absolute;\n  z-index: 1;\n  background-color: #fff;\n  font-size: 0;\n  line-height: 6px;\n  filter: alpha(opacity=0);\n  opacity: 0;\n  zoom: 1;\n}\n.k-resize-n {\n  top: -3px;\n  left: 0;\n  width: 100%;\n  height: 6px;\n  cursor: n-resize;\n}\n.k-resize-e {\n  top: 0;\n  right: -3px;\n  width: 6px;\n  height: 100%;\n  cursor: e-resize;\n}\n.k-resize-s {\n  bottom: -3px;\n  left: 0;\n  width: 100%;\n  height: 6px;\n  cursor: s-resize;\n}\n.k-resize-w {\n  top: 0;\n  left: -3px;\n  width: 6px;\n  height: 100%;\n  cursor: w-resize;\n}\n.k-resize-se {\n  bottom: -3px;\n  right: -3px;\n  width: 16px;\n  height: 16px;\n  cursor: se-resize;\n}\n.k-resize-sw {\n  bottom: -3px;\n  left: -3px;\n  width: 6px;\n  height: 6px;\n  cursor: sw-resize;\n}\n.k-resize-ne {\n  top: -3px;\n  right: -3px;\n  width: 6px;\n  height: 6px;\n  cursor: ne-resize;\n}\n.k-resize-nw {\n  top: -3px;\n  left: -3px;\n  width: 6px;\n  height: 6px;\n  cursor: nw-resize;\n}\n.k-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 10001;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.k-window .k-overlay {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  background-color: #fff;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n/* TabStrip */\n.k-tabstrip {\n  margin: 0;\n  padding: 0;\n  zoom: 1;\n}\n.k-tabstrip .k-tabstrip-items {\n  padding: 0.3em 0.3em 0;\n}\n.k-tabstrip-items .k-item,\n.k-panelbar .k-tabstrip-items .k-item {\n  list-style-type: none;\n  display: inline-block;\n  position: relative;\n  border-style: solid;\n  border-width: 1px 1px 0;\n  margin: 0 -1px 0 0;\n  padding: 0;\n  vertical-align: top;\n}\n.k-tabstrip-items .k-tab-on-top,\n.k-tabstrip-items .k-state-active,\n.k-panelbar .k-tabstrip-items .k-state-active {\n  margin-bottom: -1px;\n  padding-bottom: 1px;\n}\n.k-tabstrip-items .k-tab-on-top {\n  z-index: 1;\n}\n.k-tabstrip-items .k-link,\n.k-panelbar .k-tabstrip-items .k-link {\n  display: inline-block;\n  border-bottom-width: 0;\n  padding: .5em .92em;\n}\n.k-tabstrip-items .k-icon,\n.k-panelbar .k-tabstrip-items .k-icon {\n  margin: -1px 4px 0 -3px;\n  vertical-align: top;\n}\n.k-tabstrip-items .k-item .k-image,\n.k-tabstrip-items .k-item .k-sprite,\n.k-panelbar .k-tabstrip-items .k-item .k-image,\n.k-panelbar .k-tabstrip-items .k-item .k-sprite {\n  margin: -3px 3px 0 -6px;\n  vertical-align: middle;\n}\n.k-ie7 .k-tabstrip-items .k-item .k-image,\n.k-ie7 .k-tabstrip-items .k-item .k-sprite {\n  margin-top: -1px;\n  vertical-align: top;\n}\n/* TabStrip Loading Progress */\n.k-tabstrip-items .k-loading {\n  top: 0;\n  left: 0;\n  height: 0;\n  width: 20%;\n  position: absolute;\n  background: transparent;\n  border-top: 1px solid transparent;\n  border-color: inherit;\n  -webkit-transition: width 200ms linear;\n  -moz-transition: width 200ms linear;\n  -o-transition: width 200ms linear;\n  transition: width 200ms linear;\n  -webkit-transition: \"width 200ms linear\";\n  -moz-transition: \"width 200ms linear\";\n  -ms-transition: \"width 200ms linear\";\n  -o-transition: \"width 200ms linear\";\n  transition: \"width 200ms linear\";\n  animation: k-tab-loader 1s ease-in-out infinite;\n  -moz-animation: k-tab-loader 1s ease-in-out infinite;\n  -webkit-animation: k-tab-loader 1s ease-in-out infinite;\n}\n.k-tabstrip-items .k-progress {\n  animation: none;\n  -moz-animation: none;\n  -webkit-animation: none;\n}\n.k-tabstrip-items .k-loading.k-complete {\n  width: 100%;\n  animation: none;\n  -moz-animation: none;\n  -webkit-animation: none;\n}\n.k-tabstrip > .k-content,\n.k-panelbar .k-tabstrip > .k-content {\n  position: static;\n  border-style: solid;\n  border-width: 1px;\n  margin: 0 .286em .3em;\n  padding: .3em .92em;\n  zoom: 1;\n}\n.k-tabstrip > .k-content {\n  display: none;\n}\n.k-tabstrip > .k-content.km-scroll-wrapper {\n  padding: 0;\n}\n.k-tabstrip > .k-content > .km-scroll-container {\n  padding: .3em .92em;\n}\n@-webkit-keyframes k-tab-loader {\n  0% {\n    left: 0;\n  }\n  50% {\n    left: 80%;\n  }\n  100% {\n    left: 0;\n  }\n}\n@-moz-keyframes k-tab-loader {\n  0% {\n    left: 0;\n  }\n  50% {\n    left: 80%;\n  }\n  100% {\n    left: 0;\n  }\n}\n@keyframes k-tab-loader {\n  0% {\n    left: 0;\n  }\n  50% {\n    left: 80%;\n  }\n  100% {\n    left: 0;\n  }\n}\n/* PanelBar */\n.k-panelbar {\n  zoom: 1;\n}\n.k-panelbar > .k-item,\n.k-panel > .k-item {\n  list-style-type: none;\n  display: block;\n  border-width: 0;\n  margin: 0;\n  zoom: 1;\n  border-radius: 0;\n}\n.k-panelbar .k-image,\n.k-panelbar .k-sprite {\n  float: left;\n  margin-top: 4px;\n  margin-right: 5px;\n  vertical-align: middle;\n}\n.k-panelbar > .k-item > .k-link,\n.k-panel > .k-item > .k-link {\n  display: block;\n  position: relative;\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  padding: 0 1em;\n  line-height: 2.34em;\n  text-decoration: none;\n  zoom: 1;\n}\n.k-panelbar-expand,\n.k-panelbar-collapse {\n  position: absolute;\n  top: 50%;\n  right: 4px;\n  margin-top: -8px;\n}\n.k-panelbar .k-panel,\n.k-panelbar .k-content {\n  position: relative;\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  margin: 0;\n  padding: 0;\n  zoom: 1;\n}\n.k-panel > .k-item > .k-link {\n  border-bottom: 0;\n  font-size: .95em;\n  line-height: 2.2;\n}\n.k-panel .k-panel > .k-item > .k-link {\n  padding-left: 2em;\n}\n.k-panelbar .k-i-seek-e .k-link {\n  border-bottom: 0;\n}\n.k-panel .k-panel {\n  border-bottom: 0;\n}\n/* Menu */\n.k-menu {\n  cursor: default;\n}\n.k-menu,\n.k-menu .k-menu-group {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  zoom: 1;\n}\n.k-menu:after {\n  content: '';\n  display: block;\n  width: 99%;\n  height: 0;\n  float: inherit;\n  overflow: hidden;\n}\n.k-menu .k-item {\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  user-select: none;\n}\n.k-menu .k-item div {\n  -webkit-user-select: default;\n  -moz-user-select: default;\n  user-select: default;\n}\n.k-menu .k-item .k-item,\nul.k-menu-vertical > .k-item {\n  display: block;\n  float: none;\n  border-width: 0;\n}\n.k-ie7 .k-menu .k-item .k-item {\n  zoom: normal;\n}\n.k-menu .k-item > .k-link > .k-icon,\n.k-menu .k-image,\n.k-menu .k-sprite {\n  margin: -2px 4px 0 -4px;\n  vertical-align: middle;\n}\n.k-menu .k-item > .k-link > .k-icon {\n  margin: -2px 0 0;\n}\n.k-ie7 .k-menu .k-item > .k-link > .k-i-arrow-s,\n.k-ie7 .k-menu .k-image,\n.k-ie7 .k-menu .k-sprite {\n  margin-top: 0;\n}\n.k-menu .k-item > .k-link {\n  display: block;\n  padding: 0.5em 1.1em 0.4em;\n  line-height: 1.34em;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.k-menu .k-menu-group {\n  display: none;\n  border-style: solid;\n  border-width: 1px;\n  overflow: visible;\n  white-space: nowrap;\n}\n.k-menu .k-menu-group > .k-item {\n  display: block;\n  border-width: 0;\n}\n.k-menu .k-item,\n.k-widget.k-menu-horizontal > .k-item {\n  position: relative;\n  float: left;\n  border-style: solid;\n  border-width: 0 1px 0 0;\n  vertical-align: top;\n  zoom: 1;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.k-context-menu.k-menu-vertical > .k-item > .k-link,\n.k-menu .k-menu-group .k-item > .k-link {\n  padding: .28em 1.8em .38em .9em;\n}\n.k-context-menu.k-menu-horizontal > .k-separator {\n  display: none;\n}\n.k-context-menu.k-menu-horizontal > .k-item {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.k-context-menu.k-menu-horizontal > .k-last {\n  border: 0;\n}\n.k-ie7 .k-menu .k-menu-group .k-link {\n  width: 100%;\n}\n.k-menu .k-item > .k-link > .k-i-arrow-s {\n  margin-right: -8px;\n}\n.k-menu .k-item > .k-link > .k-i-arrow-e {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  right: 2px;\n  right: .2rem;\n}\n.k-menu .k-animation-container {\n  border: 0;\n}\n.k-menu .k-animation-container,\n.k-menu .k-menu-group {\n  position: absolute;\n  left: 0;\n}\n.k-menu .k-animation-container .k-animation-container,\n.k-menu .k-menu-group .k-menu-group,\n.k-menu-vertical .k-animation-container,\n.k-menu-vertical .k-menu-group {\n  top: 0;\n  left: 0;\n}\n.k-menu .k-animation-container .k-menu-group {\n  top: auto;\n  left: auto;\n  margin-left: -1px;\n}\n.k-menu .k-animation-container,\n.k-popup .k-animation-container {\n  margin-top: -1px;\n  padding-left: 1px;\n}\n.k-ie .k-menu .k-animation-container,\n.k-ie .k-popup .k-animation-container {\n  margin-top: -2px;\n}\n.k-popup .k-animation-container .k-popup {\n  margin-left: -1px;\n}\nul.k-menu .k-separator {\n  padding: 0.25em 0;\n  height: 100%;\n  width: 1px;\n  font-size: 0;\n  line-height: 0;\n  border-width: 0 1px 0 0;\n}\nul.k-menu-vertical .k-separator,\n.k-menu .k-menu-group .k-separator {\n  padding: 0;\n  height: 1px;\n  width: 100%;\n  border-width: 1px 0 0;\n}\n/* Context Menu */\n.k-context-menu {\n  border: 0;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  user-select: none;\n}\n/* Grid */\n.k-grid,\n.k-listview {\n  position: relative;\n  zoom: 1;\n}\n.k-grid table {\n  width: 100%;\n  margin: 0;\n  /* override CSS libraries */\n  max-width: none;\n  border-collapse: separate;\n  border-spacing: 0;\n  empty-cells: show;\n  border-width: 0;\n  outline: none;\n}\n.k-header.k-drag-clue {\n  overflow: hidden;\n}\n.k-grid-header th.k-header,\n.k-filter-row th {\n  overflow: hidden;\n  border-style: solid;\n  border-width: 0 0 1px 1px;\n  padding: .5em .6em .4em .6em;\n  font-weight: normal;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  text-align: left;\n}\n.k-grid-header th.k-header {\n  vertical-align: bottom;\n}\n.k-filtercell,\n.k-filtercell > span,\n.k-filtercell .k-widget {\n  display: block;\n  width: auto;\n}\n.k-filtercell > span {\n  padding-right: 4.8em;\n  position: relative;\n  min-height: 2em;\n  line-height: 2em;\n}\n.k-filtercell > .k-operator-hidden {\n  padding-right: 2.3em;\n}\n.k-filtercell > span > .k-button,\n.k-filter-row .k-dropdown-operator {\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.k-filter-row .k-dropdown-operator {\n  width: 2.1em;\n  right: 2.5em;\n}\n.k-filtercell > span > label {\n  vertical-align: middle;\n}\n.k-filter-row label > input[type=\"radio\"] {\n  vertical-align: middle;\n  position: relative;\n  bottom: 2px;\n}\n.k-ie10 .k-grid-header a:active {\n  background-color: transparent;\n  /*remove gray background*/\n}\n.k-grid-header th.k-header > .k-link {\n  display: block;\n  min-height: 18px;\n  line-height: 18px;\n  /* due to sorting icons*/\n  margin: -0.5em -0.6em -0.4em -0.6em;\n  padding: .5em .6em .4em .6em;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.k-grid-header th.k-with-icon .k-link {\n  margin-right: 18px;\n}\n.k-grid-header th.k-header .k-icon {\n  position: static;\n}\n.k-grid-header th > .k-link > .k-icon {\n  vertical-align: text-top;\n}\n.k-grid .k-state-hover {\n  cursor: pointer;\n}\n/*fixes Chrome 38+ column resizing glitches*/\n.k-grid-column-resizing th,\n.k-grid-column-resizing td {\n  -webkit-transform: translateZ(0);\n}\n.k-grid td {\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  padding: .4em .6em;\n  overflow: hidden;\n  line-height: 1.6em;\n  vertical-align: middle;\n  text-overflow: ellipsis;\n}\n.k-grid .k-grouping-row td,\n.k-grid .k-hierarchy-cell {\n  overflow: visible;\n}\n.k-grid-edit-row td {\n  text-overflow: clip;\n}\n.k-grid-edit-row .k-textbox,\n.k-grid-edit-row .text-box {\n  /*reset default webkit styles*/\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.k-grid-header-wrap,\n.k-grid-footer-wrap {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n  border-style: solid;\n  border-width: 0 1px 0 0;\n  zoom: 1;\n}\ndiv.k-grid-header,\ndiv.k-grid-footer {\n  padding-right: 17px;\n  /* scrollbar width; may vary; can be calculated */\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  zoom: 1;\n}\n.k-grid-header-wrap > table,\n.k-grid-header-locked > table {\n  margin-bottom: -1px;\n}\n.k-grid-content {\n  position: relative;\n  width: 100%;\n  overflow: auto;\n  overflow-x: auto;\n  overflow-y: scroll;\n  zoom: 1;\n}\n.k-mobile .k-grid tbody {\n  -webkit-backface-visibility: hidden;\n}\n.k-mobile .k-grid-backface tbody {\n  -webkit-backface-visibility: visible;\n}\n.k-grid-content-expander {\n  position: absolute;\n  visibility: hidden;\n  height: 1px;\n}\n@media print {\n  .k-grid {\n    height: auto !important;\n  }\n  .k-grid-header {\n    padding: 0 !important;\n  }\n  .k-grid-header-wrap,\n  .k-grid-content {\n    overflow: visible;\n    height: auto !important;\n  }\n}\n.k-virtual-scrollable-wrap {\n  height: 100%;\n  overflow-y: hidden;\n  position: relative;\n}\n.k-grid-header table,\n.k-grid-content table,\n.k-grid-footer table,\n.k-grid-content-locked > table {\n  table-layout: fixed;\n}\n.k-ie7 .k-grid-content table {\n  width: auto;\n}\n/* Grid :: locked columns */\n.k-grid-lockedcolumns {\n  white-space: nowrap;\n}\n.k-grid-content-locked,\n.k-grid-content,\n.k-pager-wrap {\n  white-space: normal;\n}\n.k-grid-header-locked,\n.k-grid-content-locked,\n.k-grid-footer-locked {\n  display: inline-block;\n  vertical-align: top;\n  overflow: hidden;\n  /* generally uneeded */\n  position: relative;\n  border-style: solid;\n  border-width: 0 1px 0 0;\n}\n.k-grid-header-locked + .k-grid-header-wrap,\n.k-grid-content-locked + .k-grid-content,\n.k-grid-footer-locked + .k-grid-footer-wrap {\n  display: inline-block;\n  vertical-align: top;\n}\n.k-grid-toolbar {\n  border-style: solid;\n  border-width: 1px 0 0;\n}\n.k-grid-header th.k-header:first-child,\n.k-grid tbody td:first-child,\n.k-grid tfoot td:first-child,\n.k-filter-row > th:first-child {\n  border-left-width: 0;\n}\n.k-grid-header th.k-header.k-first {\n  border-left-width: 1px;\n}\n.k-grid-toolbar:first-child,\n.k-grouping-header + .k-grid-toolbar {\n  border-width: 0 0 1px;\n}\n/* Grid :: footer */\n.k-footer-template td {\n  border-style: solid;\n  border-width: 1px 0 0 1px;\n}\n.k-group-footer td {\n  border-style: solid;\n  border-width: 1px 0;\n}\n.k-group-footer .k-group-cell + td {\n  border-left-width: 1px;\n}\n.k-grid-footer {\n  border-style: solid;\n  border-width: 1px 0 0;\n}\n.k-grid-footer td {\n  border-top-width: 0;\n}\n.k-grid-footer > td {\n  border-top-width: 1px;\n}\n/* Grid :: paging */\n.k-pager-wrap {\n  clear: both;\n  overflow: hidden;\n  border-style: solid;\n  border-width: 1px;\n  line-height: 2.0em;\n  padding: 0.333em 0 0.333em 0.250em;\n}\n.k-grid-pager {\n  border-width: 1px 0 0;\n}\n.k-grid .k-pager-numbers,\n.k-pager-numbers .k-link,\n.k-pager-numbers .k-state-selected {\n  display: inline-block;\n  vertical-align: top;\n  margin-right: 1px;\n}\n.k-pager-numbers {\n  margin: 0 2px;\n}\n.k-pager-numbers .k-state-selected {\n  vertical-align: top;\n}\n.k-pager-numbers li,\n.k-pager-input {\n  float: left;\n}\n.k-grid .k-pager-numbers {\n  float: left;\n  cursor: default;\n}\n.k-pager-info {\n  float: right;\n  padding: 0 1.333em;\n}\n.k-pager-numbers .k-link {\n  text-decoration: none;\n}\n.k-pager-wrap > .k-link,\n.k-pager-numbers .k-link,\n.k-pager-numbers .k-state-selected {\n  min-width: 2em;\n}\n.k-pager-wrap > .k-link {\n  float: left;\n  margin: 0 0.08333em;\n  height: 2em;\n  /*IE7*/\n  line-height: 2em;\n  /*IE7*/\n  border-radius: 1.0833em;\n  cursor: pointer;\n  text-align: center;\n}\n.k-pager-wrap > a.k-state-disabled:hover {\n  background: none;\n  cursor: default;\n}\n.k-pager-numbers .k-link {\n  text-align: center;\n  line-height: 2em;\n  border-style: solid;\n  border-width: 1px;\n  border-radius: 1.0833em;\n}\n.k-pager-wrap > .k-link {\n  border-style: solid;\n  border-width: 1px;\n}\n.k-pager-wrap .k-pager-refresh {\n  float: right;\n  margin-right: 0.5em;\n  border-width: 0;\n  border-radius: 0;\n}\n.k-pager-numbers .k-state-selected {\n  border-style: solid;\n  border-width: 1px;\n  text-align: center;\n  border-radius: 1.0833em;\n}\n.k-pager-wrap .k-textbox {\n  width: 3.333em;\n}\n.k-ie7 .k-pager-wrap .k-textbox {\n  height: 1.3333em;\n  margin-top: 0.16666em;\n  display: inline;\n}\n.k-pager-wrap .k-dropdown {\n  width: 4.500em;\n}\n.k-pager-refresh {\n  float: right;\n}\n.k-pager-input,\n.k-pager-sizes {\n  padding: 0 1.4166em;\n}\n.k-pager-sizes {\n  display: inline-block;\n  padding-top: 1px;\n}\n.k-pager-sizes .k-widget.k-dropdown {\n  margin-top: -2px;\n}\n.k-ie7 .k-pager-sizes {\n  float: left;\n}\n.k-pager-wrap .k-textbox,\n.k-pager-wrap .k-widget {\n  margin: 0 .4em 0;\n}\n/* Grid :: filtering */\n.k-header > .k-grid-filter,\n.k-header > .k-header-column-menu {\n  float: right;\n  margin: -0.5em -0.6em -0.4em;\n  padding: .5em .2em .4em;\n  position: relative;\n  z-index: 1;\n  /*mvc site.css*/\n}\n.k-grid .k-animation-container {\n  position: absolute;\n}\n.k-filter-menu {\n  padding: .5em;\n}\nform.k-filter-menu .k-widget,\nform.k-filter-menu .k-textbox {\n  display: block;\n}\n.k-filter-help-text,\n.k-filter-menu .k-widget,\n.k-filter-menu .k-textbox {\n  margin: .19em 0 0;\n}\n.k-filter-menu span.k-filter-and {\n  width: 6em;\n  margin: .5em 0 .5em;\n}\n.k-filter-menu .k-button {\n  width: 48%;\n  margin: .5em 4% 0 0;\n}\n.k-filter-menu .k-button + .k-button {\n  margin-right: 0;\n}\n/* Grid :: grouping */\n.k-grouping-row .k-icon {\n  margin: -3px 4px 0 2px;\n}\n.k-grouping-row p {\n  display: inline-block;\n  vertical-align: middle;\n  margin-left: -0.6em;\n  padding: 0 .6em;\n}\n.k-grouping-row + tr td {\n  border-top-width: 1px;\n}\n.k-grouping-row .k-group-cell,\n.k-grouping-row + tr .k-group-cell {\n  border-top-width: 0;\n  text-overflow: none;\n}\n.k-grid .k-hierarchy-cell + td {\n  border-left-width: 0;\n}\n.k-grid .k-group-col,\n.k-grid .k-hierarchy-col {\n  width: 27px;\n}\n.k-grouping-header {\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n}\n.k-grouping-header {\n  line-height: 2;\n}\n.k-grouping-dropclue {\n  position: absolute;\n  width: 6px;\n  height: 25px;\n  background-repeat: no-repeat;\n  background-position: -165px -148px;\n}\n.k-grouping-header .k-group-indicator {\n  display: inline-block;\n  border-style: solid;\n  border-width: 1px;\n  margin: 0 3px;\n  padding: .15em .15em .15em .4em;\n  line-height: 1.5em;\n}\n.k-grouping-header .k-link {\n  display: inline-block;\n  border-width: 0;\n  padding: 0;\n  line-height: normal;\n  text-decoration: none;\n}\n.k-grouping-header .k-button {\n  border: 0;\n  padding: 0;\n  background: transparent;\n  line-height: 1;\n}\n.k-grouping-header .k-link .k-icon {\n  margin: 0 0 0 -3px;\n}\n.k-grouping-header .k-button .k-icon {\n  margin: 0 0 0 3px;\n}\n.k-grouping-header a,\n.k-grouping-header .k-button {\n  display: inline-block;\n  vertical-align: middle;\n}\n/* Grid :: editing */\n.k-dirty-cell:before {\n  content: \"\\a0\";\n  display: inline-block;\n  width: 0;\n  float: left;\n}\n.k-ie7 .k-dirty-cell {\n  position: relative;\n}\n.k-ie7 .k-dirty {\n  top: 5px;\n}\n.k-dirty {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 3px;\n  border-color: #f00 transparent transparent #f00;\n  margin: -0.45em 0 0 -0.6em;\n  padding: 0;\n  overflow: hidden;\n  vertical-align: top;\n}\n.k-grouping-header,\n.k-grid-toolbar {\n  margin: 0;\n  padding: 0.22em 0.2em 0.28em;\n  cursor: default;\n}\n.k-grid .k-edit-container {\n  padding: 0;\n}\n.k-grid .field-validation-error {\n  display: block;\n}\n.k-grid .input-validation-error {\n  border-style: ridge;\n  border-color: #f00;\n  background-color: #ffc0cb;\n}\n.k-grid-toolbar .k-button {\n  vertical-align: middle;\n}\n.k-grid-actions {\n  display: inline-block;\n}\n.k-ie7 .k-grid-actions {\n  vertical-align: bottom;\n}\n.k-grid .k-button {\n  margin: 0 .16em;\n}\n.k-grid tbody .k-button,\n.k-ie8 .k-grid tbody button.k-button {\n  min-width: 64px;\n}\n.k-grid tbody button.k-button {\n  min-width: 78px;\n  /* for all except IE8 */\n}\n.k-ie7 .k-grid tbody a.k-button {\n  min-width: 62px;\n  /* for IE7 link buttons */\n}\nhtml body .k-grid tbody .k-button-icon {\n  width: auto;\n  min-width: 0;\n}\n.k-detail-row {\n  position: relative;\n}\n.k-grid .k-detail-cell {\n  overflow: visible;\n}\n.k-grid .k-edit-cell {\n  padding: 0 .3em;\n  white-space: nowrap;\n}\n.k-grid .k-edit-cell .k-tooltip {\n  white-space: normal;\n}\n.k-edit-cell > .k-textbox,\n.k-edit-cell > .k-widget,\n.k-grid-edit-row > td > .k-textbox,\n.k-grid-edit-row > td > .k-widget,\n.k-grid-edit-row > td > .text-box {\n  width: 100%;\n}\n.k-ie7 .k-edit-cell > .text-box,\n.k-ie7 .k-edit-cell > .k-textbox,\n.k-ie7 .k-edit-cell > .k-widget,\n.k-ie7 .k-grid-edit-row > td > .k-textbox,\n.k-ie7 .k-grid-edit-row > td > .k-widget,\n.k-ie7 .k-grid-edit-row > td > .text-box {\n  display: block;\n  width: 90%;\n}\nhtml .k-edit-cell .k-tooltip,\nhtml .k-grid-edit-row .k-tooltip {\n  width: auto;\n  max-width: 300px;\n}\n.k-edit-cell input[type=\"checkbox\"] {\n  margin-left: .6em;\n}\n.k-grid tbody td > .k-grid-delete {\n  margin-top: -0.2em;\n  margin-bottom: -0.2em;\n}\n/* Grid :: resizing */\n.k-grid-resize-indicator {\n  position: absolute;\n  width: 2px;\n  background-color: #aaa;\n}\n.k-grid-header .k-resize-handle,\n.k-grid > .k-resize-handle {\n  position: absolute;\n  height: 25px;\n  cursor: col-resize;\n  z-index: 2;\n}\n.k-marquee {\n  position: absolute;\n  z-index: 100000;\n}\n.k-marquee-color,\n.k-marquee-text {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.k-marquee-color {\n  filter: alpha(opacity=60);\n  opacity: .6;\n}\n.k-ie9 .k-column-menu {\n  width: 160px;\n  /*fix flicker on item hover*/\n}\n.k-ie8 .k-grid-filter,\n.k-ie8 .k-header-column-menu {\n  font-size: 100%;\n  /* Fix small menus in IE8 */\n}\n.k-column-menu {\n  min-width: 160px;\n}\n.k-column-menu .k-sprite {\n  margin-right: 10px;\n}\n.k-column-menu > .k-menu {\n  border-width: 0;\n}\n.k-columns-item .k-group {\n  max-height: 200px;\n  overflow: auto;\n}\n.k-treelist .k-status {\n  padding: .4em .6em;\n  line-height: 1.6em;\n}\n.k-treelist .k-status .k-loading {\n  vertical-align: baseline;\n  margin-right: 5px;\n}\n.k-treelist tr.k-hidden {\n  display: none;\n}\n/* Gantt Chart start */\n/* Gantt Main Layout */\n.k-gantt {\n  white-space: nowrap;\n  position: relative;\n}\n.k-gantt-layout {\n  display: inline-block;\n  white-space: normal;\n  vertical-align: top;\n}\n.k-gantt .k-splitbar {\n  position: relative;\n  cursor: e-resize;\n  width: 5px;\n  border-width: 0 1px;\n  background-repeat: repeat-y;\n}\n.k-gantt .k-gantt-layout th {\n  vertical-align: bottom;\n}\n.k-gantt td {\n  overflow: hidden;\n  white-space: nowrap;\n  vertical-align: top;\n}\n.k-gantt .k-grid .k-edit-cell {\n  vertical-align: middle;\n}\n.k-gantt-treelist > .k-treelist,\n.k-gantt-timeline > .k-timeline {\n  border-width: 0;\n  height: 100%;\n}\n/* Gantt Toolbar, footer */\n.k-gantt-toolbar {\n  border-style: solid;\n  border-width: 0 0 1px;\n  line-height: 2.4em;\n  padding: .5em;\n}\n.k-gantt-layout + .k-gantt-toolbar {\n  border-width: 1px 0 0;\n}\n.k-gantt-actions,\n.k-gantt-toolbar > ul {\n  float: left;\n  margin-right: .6em;\n}\n.k-gantt-toolbar > .k-gantt-views {\n  float: right;\n  margin-right: 0;\n}\n.k-gantt-toolbar > ul > li {\n  display: inline-block;\n  border-style: solid;\n  border-width: 1px 1px 1px 0;\n}\n.k-gantt-toolbar > ul > li:first-child {\n  border-left-width: 1px;\n}\n.k-gantt-toolbar .k-link {\n  display: inline-block;\n  padding: 0 1.1em;\n}\n.k-gantt-toolbar li:first-child,\n.k-gantt-toolbar li:first-child > .k-link {\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.k-gantt-toolbar li:last-child,\n.k-gantt-toolbar li:last-child > .k-link {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.k-gantt-toolbar li.k-button {\n  line-height: inherit;\n  padding-top: 0;\n  padding-bottom: 0;\n}\n/* Gantt TreeList */\n.k-gantt-treelist .k-grid-header tr {\n  height: 5em;\n}\n.k-gantt .k-treelist .k-grid-header {\n  padding: 0 !important;\n}\n.k-gantt .k-treelist .k-grid-content {\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.k-treelist-group > tr > span {\n  font-weight: bold;\n}\n.k-treelist-group .k-widget {\n  font-weight: normal;\n}\n/* Gantt TimeLine */\n.k-gantt-timeline .k-grid-header tr {\n  height: 2.5em;\n}\n.k-gantt-rows tr,\n.k-gantt-tasks tr,\n.k-gantt .k-grid-content tr {\n  height: 2.3em;\n}\n.k-gantt .k-gantt-tasks td:after {\n  content: \"\\a0\";\n}\n.k-gantt-timeline {\n  background: transparent;\n}\n.k-gantt-rows,\n.k-gantt-columns,\n.k-gantt-dependencies {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.k-gantt-tables {\n  position: relative;\n}\n.k-gantt .k-gantt-timeline th {\n  text-align: center;\n}\n.k-gantt .k-gantt-timeline tr:first-child th {\n  border-bottom-width: 1px;\n}\n/* Gantt TimeLine objects */\n/* Summary */\n.k-task-summary {\n  height: 10px;\n  display: inline-block;\n  vertical-align: top;\n  margin-top: 3px;\n}\n.k-task-summary-complete {\n  height: 10px;\n  position: relative;\n  z-index: 2;\n}\n.k-task-summary-progress {\n  height: 15px;\n  overflow: hidden;\n}\n.k-task-summary:before,\n.k-task-summary-complete:before,\n.k-task-summary:after,\n.k-task-summary-complete:after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 8px;\n  border-color: transparent;\n}\n.k-task-summary:before,\n.k-task-summary-complete:before {\n  left: 0;\n  border-left-color: inherit;\n}\n.k-task-summary:after,\n.k-task-summary-complete:after {\n  right: 0;\n  border-right-color: inherit;\n}\n/* Lines */\n.k-line-h,\n.k-line-v {\n  position: absolute;\n}\n.k-line-h {\n  height: 2px;\n}\n.k-line-v {\n  width: 2px;\n}\n.k-arrow-e,\n.k-arrow-w {\n  position: absolute;\n  top: -4px;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 5px;\n}\n.k-arrow-e {\n  right: -6px;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n  border-right-color: transparent;\n}\n.k-arrow-w {\n  left: -6px;\n  border-top-color: transparent;\n  border-bottom-color: transparent;\n  border-left-color: transparent;\n}\n/* Milestone */\n.k-task-milestone {\n  width: 13px;\n  height: 13px;\n  margin-top: 3px;\n  border-style: solid;\n  border-width: 1px;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.k-ie8 .k-task-milestone,\n.k-ie7 .k-task-milestone {\n  margin-left: 1px;\n}\n/* Button */\n.k-gantt .k-gantt-treelist .k-button,\n.k-gantt .k-gantt-tasks .k-button-icon {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n.k-gantt .k-gantt-tasks .k-button-icon {\n  margin-top: 4px;\n}\n.k-gantt .k-gantt-treelist .k-button {\n  margin-top: -4px;\n  margin-bottom: -2px;\n}\n.k-gantt .k-gantt-tasks .k-button-icon {\n  padding-left: 2px;\n  padding-right: 2px;\n}\n.k-gantt .k-gantt-treelist .k-button .k-icon,\n.k-gantt .k-gantt-tasks .k-button .k-icon {\n  vertical-align: text-top;\n}\n.k-rel .k-button-icon {\n  position: absolute;\n  left: 200px;\n}\n/* Tasks */\n.k-rel {\n  position: relative;\n  height: 0;\n  top: -0.3em;\n}\n.k-task-wrap {\n  position: absolute;\n  padding: 0 23px 5px;\n  margin: -1px -23px 0;\n  z-index: 2;\n}\n.k-task-wrap:hover,\n.k-line.k-state-selected {\n  z-index: 3;\n}\n.k-milestone-wrap {\n  margin: 0 -13px 0 -27px;\n}\n.k-task-content {\n  position: relative;\n  z-index: 2;\n}\n.k-task-complete {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 20%;\n  z-index: 1;\n}\n.k-task-dot {\n  position: absolute;\n  top: 0;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  display: none;\n  cursor: pointer;\n}\n.k-task-dot.k-state-hover {\n  background-color: transparent;\n}\n.k-task-single + .k-task-dot,\n.k-task-single + .k-task-dot + .k-task-dot {\n  top: .2em;\n}\n.k-task-wrap:hover .k-task-dot,\n.k-task-wrap-active .k-task-dot {\n  display: block;\n}\n.k-task-dot:before {\n  content: \"\\a0\";\n  display: inline-block;\n  width: 0;\n  height: 16px;\n}\n.k-task-dot:after {\n  content: \"\";\n  display: inline-block;\n  vertical-align: middle;\n  width: 8px;\n  height: 8px;\n  border-radius: 4px;\n  margin-left: 4px;\n}\n.k-task-dot:hover:after,\n.k-task-dot.k-state-hover:after,\n.k-task-wrap-active .k-task-dot:after {\n  border-style: solid;\n  border-width: 1px;\n  margin-left: 3px;\n}\n.k-task-start {\n  left: 0;\n}\n.k-task-end {\n  right: 0;\n}\n.k-task-single {\n  border-style: solid;\n  border-width: 1px;\n  text-align: left;\n  overflow: hidden;\n  cursor: default;\n  min-height: 1.3em;\n  white-space: nowrap;\n}\n.k-task-template {\n  padding: .2em 1.4em .2em .6em;\n  line-height: normal;\n}\n.k-task-actions,\n.k-task-content > .k-link {\n  position: absolute;\n  top: 0;\n  right: 4px;\n  white-space: nowrap;\n}\n.k-task-actions {\n  z-index: 1;\n}\n.k-task-actions:first-child {\n  position: static;\n  float: left;\n  margin: 4px 2px 0 4px;\n}\n.k-webkit .k-task-actions:first-child {\n  margin-top: 3px;\n}\n.k-task-actions:first-child > .k-link {\n  display: inline-block;\n}\n.k-task-delete {\n  display: none;\n}\n.k-task-wrap:hover .k-task-delete,\n.k-task-wrap-active .k-task-delete {\n  display: inline-block;\n}\n.k-task-single .k-resize-handle {\n  position: absolute;\n  visibility: hidden;\n  z-index: 2;\n  height: auto;\n}\n.k-task-single:hover .k-resize-handle,\n.k-task-wrap-active .k-resize-handle {\n  visibility: visible;\n}\n.k-task-single .k-resize-handle:after {\n  content: \"\";\n  position: absolute;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.k-task-content > .k-resize-e {\n  right: 0;\n  top: 0;\n  bottom: 0;\n  width: .4em;\n}\n.k-task-content > .k-resize-w {\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: .4em;\n}\n.k-task-content > .k-resize-e:after,\n.k-task-content > .k-resize-w:after {\n  left: 1px;\n  top: 50%;\n  margin-top: -0.7em;\n  height: 1.4em;\n  width: 1px;\n}\n.k-task-content > .k-resize-e:after {\n  left: auto;\n  right: 1px;\n}\n.k-task-draghandle {\n  position: absolute;\n  bottom: 0;\n  width: 0;\n  height: 0;\n  margin-left: 16px;\n  border-width: 5px;\n  border-style: solid;\n  border-top-color: transparent;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  display: none;\n  cursor: e-resize;\n}\n.k-task-wrap:hover .k-task-draghandle,\n.k-task-wrap-active .k-task-draghandle {\n  display: block;\n}\n.k-dependency-hint {\n  z-index: 4;\n}\n/*Task Hover Tooltip*/\n.k-task-details {\n  padding: .4em;\n  text-align: left;\n  white-space: nowrap;\n}\n.k-task-details > strong {\n  font-size: 120%;\n  display: block;\n}\n.k-task-pct {\n  margin: .5em 0 .1em;\n  font-size: 170%;\n}\n.k-task-details > ul {\n  line-height: 1.2;\n}\n/*Resources*/\n.k-resources-wrap {\n  position: absolute;\n  z-index: 2;\n  zoom: 1;\n  margin-left: 20px;\n  margin-top: -2px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.k-resources-wrap .k-resource {\n  margin: 0px 5px;\n}\n/* Gantt Edit form */\n.k-gantt-edit-form > .k-edit-form-container {\n  width: 430px;\n}\n.k-gantt-edit-form > .k-resources-form-container {\n  width: 506px;\n}\n.k-resources-form-container > .k-grid {\n  margin: 0 .9em;\n}\n.k-gantt-edit-form > .k-edit-form-container .k-textbox,\n.k-gantt-edit-form > .k-edit-form-container .k-numerictextbox {\n  width: 15em;\n}\n.k-gantt-edit-form .k-edit-buttons .k-gantt-delete {\n  float: left;\n}\n/* Gantt Chart end */\n/* Pivot start */\n.k-pivot-toolbar {\n  padding: .2em;\n  border-bottom-width: 1px;\n  border-bottom-style: solid;\n}\n.k-pivot .k-pivot-toolbar {\n  padding: .6em;\n}\n.k-pivot-toolbar .k-button {\n  margin-right: .4em;\n  line-height: 1.2em;\n  font-size: .9em;\n  text-align: left;\n  position: relative;\n  padding: .3em 5em .3em .3em;\n}\n.k-field-actions {\n  position: absolute;\n  right: 2px;\n  top: 3px;\n}\n/*IE7 requires the following style to be applied to cells directly*/\n.k-pivot .k-grid td {\n  white-space: nowrap;\n}\n.k-pivot-layout {\n  border-spacing: 0;\n  table-layout: auto;\n}\n.k-pivot-layout > tbody > tr > td {\n  vertical-align: top;\n  padding: 0;\n}\n.k-pivot td {\n  vertical-align: top;\n}\n.k-pivot-rowheaders > .k-grid,\n.k-pivot-table > .k-grid {\n  border-width: 0;\n}\n.k-pivot-rowheaders > .k-grid td:first-child,\n.k-pivot-table .k-grid-header .k-header.k-first {\n  border-left-width: 1px;\n}\n.k-pivot-rowheaders > .k-grid td.k-first {\n  border-left-width: 0;\n}\n.k-pivot-rowheaders > .k-grid {\n  overflow: hidden;\n}\n.k-pivot-table {\n  border-left-width: 1px;\n  border-left-style: solid;\n}\n.k-pivot-table .k-grid-header-wrap > table {\n  height: 100%;\n}\n.k-pivot .k-grid-header .k-header {\n  vertical-align: top;\n}\n.k-header.k-alt,\ntd.k-alt {\n  font-weight: bold;\n}\n.k-header.k-alt {\n  background-image: none;\n}\n.k-pivot-layout .k-grid td {\n  border-bottom-width: 1px;\n}\n.k-pivot-layout .k-grid-footer > td {\n  border-top-width: 0;\n}\n.k-pivot-filter-window .k-treeview {\n  max-height: 600px;\n}\n/* selector */\n.k-fieldselector .k-edit-buttons {\n  bottom: auto;\n}\n.k-fieldselector .k-edit-label {\n  width: 16%;\n}\n.k-fieldselector .k-edit-field {\n  width: 77%;\n}\n.k-fieldselector .k-edit-field > .k-widget,\n.k-fieldselector .k-edit-field > .k-textbox {\n  width: 99%;\n}\n.k-fieldselector .k-edit-buttons > input,\n.k-fieldselector .k-edit-buttons > label {\n  float: left;\n  margin-top: .4em;\n}\n.k-fieldselector p {\n  margin: 0 0 .2em .5em;\n  text-transform: uppercase;\n}\n.k-fieldselector p .k-icon {\n  margin: 0 5px 0 0;\n}\n.k-fieldselector .k-columns {\n  border-style: solid;\n  border-width: 0;\n}\n.k-fieldselector .k-columns > div {\n  overflow: auto;\n  padding: .6em;\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  float: left;\n  width: 45%;\n}\n.k-fieldselector .k-columns > div:first-child {\n  border-width: 0;\n  margin-right: -1px;\n}\n.k-fieldselector .k-columns > div + div {\n  float: right;\n  border-width: 0;\n}\n.k-fieldselector div.k-treeview {\n  border-width: 0;\n  margin-right: -1px;\n  padding-left: 4px;\n  overflow: visible;\n}\n.k-fieldselector .k-list-container {\n  margin-left: .5em;\n  margin-bottom: 1em;\n  padding: .2em 0 0;\n  border-style: solid;\n  border-width: 1px;\n}\n.k-fieldselector .k-list {\n  padding-bottom: 2em;\n}\n.k-fieldselector .k-list li.k-item {\n  padding: .3em 3.3em .3em .3em;\n  margin: 0 .2em.2em;\n  position: relative;\n  font-size: .9em;\n  line-height: 1.2em;\n  min-height: 1em;\n}\n/* KPI icons */\n.k-i-kpi-decrease {\n  background-position: 0 0;\n}\n.k-i-kpi-denied {\n  background-position: -16px 0;\n}\n.k-i-kpi-equal {\n  background-position: -32px 0;\n}\n.k-i-kpi-hold {\n  background-position: -48px 0;\n}\n.k-i-kpi-increase {\n  background-position: -64px 0;\n}\n.k-i-kpi-open {\n  background-position: -80px 0;\n}\n/* Pivot end */\n/* Calendar */\n.k-calendar {\n  position: relative;\n  display: inline-block;\n  width: 16.917em;\n  overflow: hidden;\n}\n.k-calendar td,\n.k-calendar .k-link {\n  text-decoration: none;\n}\n.k-calendar .k-action-link {\n  text-decoration: underline;\n}\n.k-calendar .k-header,\n.k-calendar .k-footer {\n  position: relative;\n  text-align: center;\n  zoom: 1;\n}\n.k-widget.k-calendar .k-nav-prev,\n.k-widget.k-calendar .k-nav-next {\n  position: absolute;\n  top: 0.16666em;\n  line-height: 1.8333em;\n  height: 1.8333em;\n}\n.k-widget.k-calendar .k-nav-prev {\n  left: 1%;\n}\n.k-widget.k-calendar .k-nav-next {\n  right: 1%;\n}\n.k-calendar .k-content {\n  float: left;\n  border-spacing: 0;\n  width: 100%;\n  height: 14.167em;\n  border-width: 0;\n  margin: 0;\n  table-layout: fixed;\n  outline: 0;\n}\n.k-calendar .k-content,\n.k-calendar .k-content th {\n  text-align: right;\n}\n.k-calendar .k-animation-container .k-content {\n  height: 100%;\n}\n.k-widget.k-calendar .k-nav-fast {\n  display: inline-block;\n  width: 75%;\n  height: 1.8333em;\n  line-height: 1.8333em;\n  margin: 0.16666em -0.08333em 0.3333em 0;\n}\n.k-calendar .k-header .k-icon {\n  vertical-align: middle;\n}\n.k-calendar .k-header .k-link.k-nav-prev,\n.k-calendar .k-header .k-link.k-nav-next {\n  height: 1.8333em;\n  width: 1.8333em;\n}\n.k-calendar th {\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  padding: .4em .45em .4em .1em;\n  font-weight: normal;\n  cursor: default;\n}\n.k-calendar td {\n  padding: 0.08333em;\n  cursor: pointer;\n}\n.k-calendar .k-state-focus {\n  border-style: dotted;\n  border-width: 0.08333em;\n  padding: 0;\n}\n.k-calendar .k-content .k-link {\n  display: block;\n  overflow: hidden;\n  min-height: 1.8333em;\n  line-height: 1.8333em;\n  padding: 0 .45em 0 .1em;\n}\n.k-calendar .k-meta-view .k-link {\n  padding: .25em 0 .3em;\n  text-align: center;\n}\n.k-calendar .k-footer {\n  clear: both;\n}\n.k-calendar .k-footer .k-nav-today,\n.k-calendar .k-footer > .k-state-disabled {\n  display: block;\n  height: 100%;\n  padding: .5em 0;\n}\n.k-calendar .k-nav-today:hover {\n  text-decoration: underline;\n}\n/* TreeView */\ndiv.k-treeview {\n  /* due to k-widget */\n  border-width: 0;\n  background: none;\n  overflow: auto;\n  white-space: nowrap;\n}\n.k-treeview .k-item {\n  display: block;\n  border-width: 0;\n  margin: 0;\n  padding: 0 0 0 16px;\n}\n.k-treeview > .k-group,\n.k-treeview .k-item > .k-group,\n.k-treeview .k-content {\n  margin: 0;\n  padding: 0;\n  background: none;\n  list-style-type: none;\n  position: relative;\n}\n.k-treeview .k-icon,\n.k-treeview .k-image,\n.k-treeview .k-sprite,\n.k-treeview .k-checkbox,\n.k-treeview .k-in {\n  display: inline-block;\n  vertical-align: top;\n}\n.k-treeview .k-checkbox {\n  margin-top: .2em;\n}\n.k-treeview .k-icon,\n.k-treeview .k-in {\n  vertical-align: middle;\n}\n.k-treeview .k-request-retry {\n  vertical-align: baseline;\n}\n.k-treeview .k-plus,\n.k-treeview .k-minus,\n.k-treeview .k-plus-disabled,\n.k-treeview .k-minus-disabled {\n  margin-top: 0.25em;\n  margin-left: -16px;\n  cursor: pointer;\n}\n.k-treeview .k-plus-disabled,\n.k-treeview .k-minus-disabled {\n  cursor: default;\n}\n.k-treeview .k-sprite,\n.k-treeview .k-image {\n  margin-right: 3px;\n}\n.k-treeview .k-in {\n  margin: 1px 0 1px 0.16666em;\n  padding: 1px 0.3333em 1px 0.25em;\n  line-height: 1.3333em;\n  text-decoration: none;\n  border-style: solid;\n  border-width: 1px;\n}\n.k-treeview span.k-in {\n  cursor: default;\n}\n.k-treeview .k-drop-hint {\n  position: absolute;\n  z-index: 10000;\n  visibility: hidden;\n  width: 80px;\n  height: 5px;\n  margin-top: -3px;\n  background-color: transparent;\n  background-repeat: no-repeat;\n}\n/* ComboBox & DropDownList */\nspan.k-datepicker,\nspan.k-timepicker,\nspan.k-datetimepicker,\nspan.k-colorpicker,\nspan.k-numerictextbox,\nspan.k-combobox,\nspan.k-dropdown,\n.k-toolbar .k-split-button {\n  background-image: none;\n}\n.k-autocomplete,\n.k-combobox,\n.k-datepicker,\n.k-timepicker,\n.k-datetimepicker,\n.k-colorpicker,\n.k-numerictextbox,\n.k-dropdown,\n.k-selectbox,\n.k-textbox,\n.k-toolbar .k-split-button {\n  position: relative;\n  display: inline-block;\n  width: 12.4em;\n  overflow: visible;\n  border-width: 0;\n  vertical-align: middle;\n}\n.k-filter-menu .k-combobox,\n.k-filter-menu .k-datepicker,\n.k-filter-menu .k-timepicker,\n.k-filter-menu .k-datetimepicker,\n.k-filter-menu .k-numerictextbox,\n.k-filter-menu .k-dropdown,\n.k-filter-menu .k-textbox {\n  width: 13.2em;\n}\n.k-autocomplete,\n.k-combobox,\n.k-datepicker,\n.k-timepicker,\n.k-datetimepicker,\n.k-colorpicker,\n.k-numerictextbox,\n.k-dropdown,\n.k-selectbox,\n.k-toolbar .k-split-button {\n  white-space: nowrap;\n}\n.k-colorpicker,\n.k-toolbar .k-split-button {\n  width: auto;\n}\n.k-datetimepicker {\n  width: 15em;\n}\n.k-autocomplete,\n.k-picker-wrap,\n.k-numeric-wrap {\n  position: relative;\n  cursor: default;\n}\n.k-dropdown-wrap {\n  position: relative;\n}\n.k-dropdown-wrap,\n.k-picker-wrap,\n.k-numeric-wrap {\n  display: block;\n}\n.k-block,\n.k-widget,\n.k-grid,\n.k-slider,\n.k-splitter,\n.k-treeview,\n.k-panelbar,\n.k-content,\n.k-header-column-menu {\n  outline: 0;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.k-block,\n.k-slider,\n.k-splitbar,\n.k-calendar,\n.k-treeview,\n.k-pager-wrap,\n.k-grid-header .k-link,\n.k-header-column-menu {\n  -webkit-touch-callout: none;\n}\n.k-popup.k-list-container,\n.k-popup.k-calendar-container {\n  -webkit-touch-callout: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n}\n.k-list-container.k-state-border-down,\n.k-autocomplete.k-state-border-down,\n.k-dropdown-wrap.k-state-border-down,\n.k-picker-wrap.k-state-border-down,\n.k-numeric-wrap.k-state-border-down {\n  border-bottom-width: 0;\n  padding-bottom: 1px;\n}\n.k-list-container .km-scroll-container {\n  padding-bottom: 6px;\n}\n.k-textbox,\n.k-autocomplete,\n.k-dropdown-wrap,\n.k-picker-wrap,\n.k-numeric-wrap {\n  border-width: 1px;\n  border-style: solid;\n  padding: 0 1.9em 0 0;\n}\n.k-numeric-wrap.k-expand-padding {\n  padding-right: 0;\n}\n.k-textbox,\n.k-autocomplete {\n  padding: 0;\n}\n.k-textbox.k-space-left {\n  padding-left: 1.9em;\n}\n.k-textbox.k-space-right {\n  padding-right: 1.9em;\n}\n.k-textbox .k-icon {\n  top: 50%;\n  margin: -8px 0 0;\n  position: absolute;\n}\n.k-space-left .k-icon {\n  left: 3px;\n}\n.k-space-right .k-icon {\n  right: 3px;\n}\n.k-autocomplete,\n.k-dropdown-wrap.k-state-focused,\n.k-dropdown-wrap.k-state-hover,\n.k-picker-wrap.k-state-focused,\n.k-picker-wrap.k-state-hover,\n.k-numeric-wrap.k-state-focused,\n.k-numeric-wrap.k-state-hover {\n  -webkit-transition: box-shadow .15s ease-out;\n  -moz-transition: box-shadow .15s ease-out;\n  -o-transition: box-shadow .15s ease-out;\n  transition: box-shadow .15s ease-out;\n  -webkit-transition: \"box-shadow .15s ease-out\";\n  -moz-transition: \"box-shadow .15s ease-out\";\n  -ms-transition: \"box-shadow .15s ease-out\";\n  -o-transition: \"box-shadow .15s ease-out\";\n  transition: \"box-shadow .15s ease-out\";\n}\n.k-textbox > input,\n.k-picker-wrap .k-input,\n.k-numeric-wrap .k-input,\n.k-combobox .k-input {\n  width: 100%;\n  vertical-align: top;\n}\n.k-picker-wrap .k-input,\n.k-numeric-wrap .k-input,\n.k-dropdown-wrap .k-input,\n.k-selectbox .k-input {\n  font-family: inherit;\n  border-width: 0;\n  outline: 0;\n}\n.k-dropdown .k-input,\n.k-selectbox .k-input {\n  background: transparent;\n}\n.k-ie7 .k-picker-wrap .k-input,\n.k-ie7 .k-numeric-wrap .k-input,\n.k-ie7 .k-combobox .k-input {\n  margin: -1px 0;\n}\n/* removes excessive spacing */\n.k-picker-wrap .k-select,\n.k-numeric-wrap .k-select,\n.k-dropdown-wrap .k-select {\n  position: absolute;\n  /* icon positioning */\n  top: 0;\n  right: 0;\n  display: inline-block;\n  vertical-align: top;\n  text-decoration: none;\n}\n.k-combobox .k-select,\n.k-picker-wrap .k-select,\n.k-numeric-wrap .k-select {\n  border-style: solid;\n  border-width: 0 0 0 1px;\n  border-color: inherit;\n  /* skin-related, inherit does not work in ie7- */\n}\nspan.k-datetimepicker .k-select,\nspan.k-datetimepicker .k-select + .k-select {\n  right: 0;\n}\n.k-textbox > input,\n.k-autocomplete .k-input {\n  display: block;\n}\n.k-combobox .k-icon {\n  /*margin-top: 1px;*/\n}\n.k-dropdown .k-select,\n.k-selectbox .k-select {\n  overflow: hidden;\n  border: 0;\n  text-decoration: none;\n  font: inherit;\n  color: inherit;\n}\n.k-dropdown .k-input,\n.k-selectbox .k-input {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.k-textbox > input,\n.k-autocomplete .k-input,\n.k-picker-wrap .k-input,\n.k-numeric-wrap .k-input,\n.k-dropdown-wrap .k-input,\n.k-selectbox .k-input {\n  height: 1.65em;\n  line-height: 1.65em;\n  padding: 0.177em 0;\n  text-indent: 0.33em;\n  border: 0;\n  margin: 0;\n}\n/* fix missing bottom border on browser zoom in Chrome */\n.k-webkit .k-combobox .k-dropdown-wrap:before,\n.k-webkit .k-picker-wrap:before,\n.k-webkit .k-numeric-wrap:before {\n  content: \"\\a0\";\n  display: inline-block;\n  width: 0;\n  height: 1.65em;\n  padding-bottom: 0.4em;\n}\n/* above style breaks NumericTextBox layout due display:block style applied to the input */\n.km.root .k-combobox .k-dropdown-wrap:before,\n.km.root .k-picker-wrap:before,\n.km.root .k-numeric-wrap:before {\n  content: none;\n}\n.k-combobox .k-input,\n.k-picker-wrap .k-input,\n.k-numeric-wrap .k-input {\n  display: inline;\n}\n.k-ie7 .k-autocomplete .k-input,\n.k-ie7 .k-picker-wrap .k-input,\n.k-ie7 .k-numeric-wrap .k-input,\n.k-ie7 .k-dropdown-wrap .k-input,\n.k-ie7 .k-selectbox .k-input {\n  text-indent: 0;\n}\n.k-picker-wrap .k-select,\n.k-numeric-wrap .k-select,\n.k-dropdown-wrap .k-select {\n  min-height: 1.65em;\n  line-height: 2em;\n  vertical-align: middle;\n  -moz-box-sizing: border-box;\n  text-align: center;\n  width: 1.9em;\n  height: 100%;\n}\n.k-numeric-wrap .k-select {\n  padding: 0;\n}\nbody .k-datetimepicker .k-select {\n  border-radius: 0;\n}\n.k-ie7 .k-picker-wrap .k-icon,\n.k-ie7 .k-dropdown-wrap .k-icon {\n  line-height: 2em;\n  font-size: 1em;\n  padding-top: 16px;\n  height: 0;\n}\n.k-combobox .k-icon,\n.k-dropdown,\n.k-selectbox .k-icon {\n  cursor: pointer;\n}\n.k-popup {\n  border-style: solid;\n  border-width: 1px;\n}\n.k-popup .k-item {\n  cursor: default;\n}\n.k-popup .k-calendar {\n  border: 0;\n}\n.k-list {\n  height: 100%;\n}\n.k-popup .k-list .k-item,\n.k-fieldselector .k-list .k-item {\n  padding: 1px 5px 1px 5px;\n  line-height: 1.8em;\n  min-height: 1.8em;\n}\n.k-overflow-container .k-item {\n  padding: 1px;\n}\n.k-overflow-container > .k-state-disabled .k-button,\n.k-overflow-container .k-button.k-state-disabled,\n.k-overflow-container .k-button.k-state-disabled:hover {\n  border: 0 ;\n  background: none;\n}\n.k-popup .k-list .k-state-hover,\n.k-popup .k-list .k-state-focused,\n.k-popup .k-list .k-state-selected,\n.k-overflow-container .k-state-hover,\n.k-overflow-container .k-state-focused,\n.k-overflow-container .k-state-selected,\n.k-fieldselector .k-list .k-item {\n  padding: 0 4px;\n  border-width: 1px;\n  border-style: solid;\n}\n.k-list-filter {\n  position: relative;\n}\n.k-list-filter > .k-textbox {\n  padding-right: 20px;\n  width: 100%;\n}\n.k-list-filter > .k-icon {\n  position: absolute;\n  right: 4px;\n  top: 3px;\n}\n/* MultiSelect */\n.k-multiselect-wrap {\n  position: relative;\n  border-width: 0px;\n  border-style: solid;\n  border-radius: 4px;\n  border-color: #C5C5C5;\n  background-color: #FFF;\n  min-height: 2.04em;\n}\n.k-multiselect-wrap .k-input {\n  background-color: transparent;\n  height: 1.31em;\n  line-height: 1.31em;\n  padding: 0.18em 0;\n  text-indent: 0.33em;\n  border: 0;\n  margin: 1px 0 0;\n  float: left;\n}\n.k-multiselect-wrap li {\n  margin: 1px 0 1px 1px;\n  padding: .1em .15em .1em .4em;\n  line-height: 1.5em;\n  float: left;\n}\n.k-autocomplete .k-loading,\n.k-multiselect .k-loading {\n  position: absolute;\n  right: 3px;\n  bottom: 4px;\n}\n.k-multiselect .k-loading-hidden {\n  visibility: hidden;\n}\n/* Date/Time Pickers */\n.k-datetimepicker .k-picker-wrap {\n  padding-right: 3.8em;\n}\n.k-datetimepicker .k-select {\n  width: 3.8em;\n}\n.k-datetimepicker .k-picker-wrap .k-icon {\n  margin: 0 2px;\n}\n.k-picker-wrap .k-icon {\n  cursor: pointer;\n}\n.k-button,\n.k-textbox,\n.k-timepicker,\n.k-datepicker,\n.k-datetimepicker {\n  display: inline-block;\n  vertical-align: middle;\n}\n.k-picker-wrap .k-input {\n  margin: 0;\n}\n.k-time-popup .k-item {\n  padding: 1px 3px;\n}\n/* inputs */\n.k-input {\n  padding: 0.25em 0;\n}\n.k-input,\n.k-textbox > input {\n  outline: 0;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.k-textbox {\n  outline: 0;\n  padding: 2px .3em;\n  line-height: 1.6em;\n}\ninput.k-textbox {\n  height: 2.13em;\n  text-indent: 0.33em;\n}\n.k-ie input.k-textbox {\n  text-indent: 0.165em;\n}\n.k-ff input.k-textbox {\n  height: 2.17em;\n}\n.k-ie7 input.k-textbox {\n  line-height: 1.72em;\n  height: 1.72em;\n  text-indent: 0.33em;\n}\ntextarea.k-textbox {\n  height: auto;\n}\n.k-ie7 .k-textbox {\n  padding: 1px 0;\n  text-indent: 0;\n}\n/* NumericTextBox */\nspan.k-numerictextbox {\n  background-color: transparent;\n}\n.k-numerictextbox .k-input {\n  margin: 0;\n}\n.k-numerictextbox .k-link {\n  display: block;\n  height: 1em;\n  line-height: 1em;\n  vertical-align: middle;\n  border-width: 0;\n  padding: 0;\n}\n.k-numerictextbox .k-icon {\n  height: 11px;\n}\n.k-numeric-wrap .k-input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n/* ColorPicker */\n.k-colorpicker .k-picker-wrap {\n  line-height: 2em;\n}\n.k-colorpicker .k-selected-color {\n  vertical-align: top;\n  line-height: 0;\n  display: inline-block;\n  height: 2em;\n  width: 2em;\n}\n.k-colorpicker .k-tool-icon {\n  position: relative;\n  top: -2px;\n  display: inline-block;\n  padding: 3px 3px 2px;\n  font-size: 0;\n  line-height: 0;\n  margin-right: 3px;\n  margin-left: 2px;\n  margin-bottom: 3px;\n  background-repeat: no-repeat;\n  vertical-align: middle;\n  width: 16px;\n  height: 16px;\n  -ms-high-contrast-adjust: none;\n}\n.k-colorpicker .k-tool-icon .k-selected-color {\n  display: block;\n  height: 3px;\n  width: 16px;\n  position: absolute;\n  left: 3px;\n  bottom: -3px;\n  border-radius: 0 !important;\n}\n.k-colorpicker .k-icon {\n  cursor: pointer;\n}\n.k-disabled-overlay {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #fff;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.k-colorpalette {\n  position: relative;\n  line-height: 0;\n  border-width: 0;\n  display: inline-block;\n}\n.k-colorpalette .k-palette {\n  border-collapse: collapse;\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n.k-colorpalette .k-item {\n  width: 14px;\n  height: 14px;\n  overflow: hidden;\n  -ms-high-contrast-adjust: none;\n}\n.k-colorpalette .k-item.k-state-selected {\n  z-index: 100;\n  background: transparent;\n  box-shadow: 0 1px 4px #000, inset 0 0 3px #fff;\n  position: relative;\n}\n.k-flatcolorpicker {\n  position: relative;\n  display: inline-block;\n  width: 250px;\n  padding-bottom: 5px;\n}\ndiv.k-flatcolorpicker {\n  background-color: transparent;\n  background-image: none;\n}\n.k-flatcolorpicker .k-selected-color {\n  background-image: url(\"textures/transtexture.png\");\n  background-position: 50% 50%;\n  text-align: right;\n}\n.k-flatcolorpicker .k-selected-color input.k-color-value {\n  font-family: Consolas, \"Ubuntu Mono\", \"Lucida Console\", \"Courier New\", monospace;\n  padding: .75em .3em .65em 1em;\n  border: 0;\n  margin: 0;\n  width: 70%;\n}\n.k-flatcolorpicker .k-hsv-rectangle {\n  position: relative;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n  -ms-touch-action: pinch-zoom double-tap-zoom;\n}\n.k-flatcolorpicker .k-hsv-rectangle .k-draghandle {\n  cursor: pointer;\n  position: absolute;\n  z-index: 10;\n  left: 50%;\n  top: 50%;\n  width: 8px;\n  height: 8px;\n  border: 1px solid #eee;\n  margin-left: -5px;\n  margin-top: -5px;\n  border-radius: 6px;\n  -webkit-box-shadow: 0 1px 2px #444444;\n  box-shadow: 0 1px 2px #444444;\n  background: transparent;\n}\n.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:hover,\n.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:focus {\n  background: transparent;\n  border-color: #fff;\n  -webkit-box-shadow: 0 1px 5px #000000;\n  box-shadow: 0 1px 5px #000000;\n}\n.k-flatcolorpicker .k-hsv-rectangle.k-dragging,\n.k-flatcolorpicker .k-hsv-rectangle.k-dragging * {\n  cursor: none;\n}\n.k-flatcolorpicker .k-slider-horizontal {\n  height: 20px;\n  width: 90%;\n  margin: 0 5%;\n}\n.k-flatcolorpicker .k-slider-horizontal .k-slider-track {\n  -webkit-box-shadow: 0 1px 0 #fff, 0 -1px 0 #999;\n  box-shadow: 0 1px 0 #fff, 0 -1px 0 #999;\n}\n.k-flatcolorpicker .k-hue-slider,\n.k-flatcolorpicker .k-transparency-slider {\n  display: block;\n}\n.k-flatcolorpicker .k-hue-slider .k-slider-selection,\n.k-flatcolorpicker .k-transparency-slider .k-slider-selection {\n  background: transparent;\n}\n.k-flatcolorpicker .k-hue-slider .k-draghandle,\n.k-flatcolorpicker .k-transparency-slider .k-draghandle {\n  background: transparent;\n  border: 3px solid #eee;\n  margin-top: 1px;\n  height: 8px;\n  width: 8px;\n  -webkit-box-shadow: 0 1px 4px #444444;\n  box-shadow: 0 1px 4px #444444;\n}\n.k-flatcolorpicker .k-hue-slider .k-draghandle:hover,\n.k-flatcolorpicker .k-transparency-slider .k-draghandle:hover,\n.k-flatcolorpicker .k-hue-slider .k-draghandle:focus,\n.k-flatcolorpicker .k-transparency-slider .k-draghandle:focus {\n  background: transparent;\n  border-color: #fff;\n  -webkit-box-shadow: 0 1px 5px #000000;\n  box-shadow: 0 1px 5px #000000;\n  border-width: 2px;\n  padding: 1px;\n}\n.k-flatcolorpicker .k-hue-slider .k-slider-track {\n  background: -moz-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%);\n  /* FF3.6+ */\n  background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ff0000), color-stop(16%, #ffff00), color-stop(33%, #00ff00), color-stop(50%, #00ffff), color-stop(67%, #0000ff), color-stop(84%, #ff00ff), color-stop(100%, #ff0004));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%);\n  /* Opera 11.10+ */\n  background: -ms-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%);\n  /* IE10+ */\n  background: -left-linear-gradient(left,#ff0000 0%,#ffff00 16%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 84%,#ff0004 100%);\n  /* W3C */\n}\n.k-flatcolorpicker .k-transparency-slider .k-slider-track {\n  background-image: url(\"textures/transparency.png\");\n  background-size: 100% auto;\n  background-position: 100% 50%;\n  background-repeat: no-repeat;\n}\n.k-flatcolorpicker .k-controls {\n  margin-top: 10px;\n  margin-bottom: 5px;\n  text-align: center;\n  font-size: 90%;\n}\n.k-flatcolorpicker .k-controls .k-button {\n  width: 6em;\n}\n.k-flatcolorpicker .k-hsv-gradient {\n  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* FF3.6+ */ -moz-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%);\n  /* FF3.6+ */\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #000000)), /* Chrome,Safari4+ */ -webkit-gradient(linear, left top, right top, color-stop(0%, #ffffff), color-stop(100%, rgba(255, 255, 255, 0)));\n  /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* Chrome10+,Safari5.1+ */ -webkit-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%);\n  /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* Opera 11.10+ */ -o-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%);\n  /* Opera 11.10+ */\n  background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* IE10+ */ -ms-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%);\n  /* IE10+ */\n  background: -top-linear-gradient(top,rgba(0,0,0,0) 0%,#000000 100%), /* W3C */ -left-linear-gradient(left,#ffffff 0%,rgba(255,255,255,0) 100%);\n  /* W3C */\n  height: 180px;\n  margin-bottom: 5px;\n}\n.k-ie9 .k-flatcolorpicker .k-hue-slider .k-slider-track {\n  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iI2ZmZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjMzJSIgc3RvcC1jb2xvcj0iIzAwZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjY3JSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijg0JSIgc3RvcC1jb2xvcj0iI2ZmMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZjAwMDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\n}\n.k-ie9 .k-flatcolorpicker .k-hsv-gradient {\n  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\n}\n.k-ie7 .k-flatcolorpicker .k-hue-slider .k-slider-track,\n.k-ie8 .k-flatcolorpicker .k-hue-slider .k-slider-track {\n  background: url(\"textures/hue.png\") repeat 0 50%;\n}\n.k-ie7 .k-flatcolorpicker .k-transparency-slider .k-slider-track,\n.k-ie8 .k-flatcolorpicker .k-transparency-slider .k-slider-track {\n  background: url(\"textures/transparency.png\") repeat 0 50%;\n}\n.k-ie7 .k-flatcolorpicker .k-hsv-gradient,\n.k-ie8 .k-flatcolorpicker .k-hsv-gradient {\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#00ffffff',GradientType=1) progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#ff000000',GradientType=0);\n}\n/* Editor */\ntable.k-editor {\n  width: 100%;\n  height: 250px;\n  table-layout: fixed;\n  border-style: solid;\n  border-width: 1px;\n  border-collapse: separate;\n  border-spacing: 4px;\n  font-size: 100%;\n  vertical-align: top;\n}\n.k-editor-inline {\n  border-width: 2px;\n  padding: .3em .5em;\n  word-wrap: break-word;\n}\n.k-editortoolbar-dragHandle {\n  cursor: move;\n  padding-left: 0;\n  padding-right: 3px;\n  box-shadow: none !important;\n}\n.k-editor .k-editor-toolbar-wrap {\n  border: 0;\n  padding: 0;\n}\n.k-editor-toolbar {\n  margin: 0;\n  padding: .1em 0;\n  list-style-type: none;\n  line-height: 1.3em;\n  cursor: default;\n}\n.k-editor-toolbar li {\n  display: inline-block;\n  vertical-align: middle;\n}\n.k-ie7 .k-editor-toolbar li {\n  display: inline;\n  /* mandatory for IE7. Floats and the inline-block hack break it */\n}\n.k-webkit .k-editor-toolbar,\n.k-ff .k-editor-toolbar,\n.k-ie9 .k-editor-toolbar {\n  padding: 0;\n}\n.k-webkit .k-editor-toolbar li,\n.k-safari .k-editor-toolbar li,\n.k-ff .k-editor-toolbar li,\n.k-ie9 .k-editor-toolbar li,\n.k-ie10 .k-editor-toolbar li {\n  display: inline-block;\n  padding: .1em 0;\n}\n.k-editor-toolbar .k-editor-widget,\n.k-editor-toolbar > li {\n  margin-right: 6px;\n}\n.k-group-start.k-group-end .k-editor-widget {\n  margin-right: 0;\n}\n.k-editor-toolbar .k-editor-dropdown {\n  position: relative;\n}\n.k-select-overlay {\n  -webkit-appearance: none;\n  opacity: 0;\n  z-index: 11000;\n  top: 0;\n  left: 0;\n  position: absolute;\n  height: 26px;\n  width: 100%;\n  margin: -4px 0 0;\n}\n.k-editor-toolbar .k-separator {\n  position: relative;\n  top: 1px;\n  border-style: solid;\n  border-width: 0 1px 0 0;\n  margin: 0 .3em 0 .1em;\n  padding: 0 0 0 1px;\n  font-size: 1.3em;\n}\n.k-editor-toolbar .k-break {\n  display: block;\n  height: 1px;\n  font-size: 0;\n  line-height: 0;\n}\n.k-editor-toolbar .k-dropdown,\n.k-editor-toolbar .k-combobox,\n.k-editor-toolbar .k-selectbox,\n.k-editor-toolbar .k-colorpicker {\n  vertical-align: middle;\n}\n.k-button-group {\n  white-space: nowrap;\n}\n.k-button-group .k-tool {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 1px 0;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n}\n.k-button-group .k-tool-icon {\n  width: 24px;\n  height: 24px;\n  vertical-align: middle;\n  -ms-high-contrast-adjust: none;\n}\n.k-i-move {\n  background-position: -160px -288px;\n}\n.k-bold {\n  background-position: -240px 0;\n}\n.k-state-hover .k-bold,\n.k-state-selected .k-bold {\n  background-position: -264px 0;\n}\n.k-italic {\n  background-position: -240px -24px;\n}\n.k-state-hover .k-italic,\n.k-state-selected .k-italic {\n  background-position: -264px -24px;\n}\n.k-underline {\n  background-position: -240px -48px;\n}\n.k-state-hover .k-underline,\n.k-state-selected .k-underline {\n  background-position: -264px -48px;\n}\n.k-strikethrough {\n  background-position: -240px -72px;\n}\n.k-state-hover .k-strikethrough,\n.k-state-selected .k-strikethrough {\n  background-position: -264px -72px;\n}\n.k-foreColor {\n  background-position: -240px -96px;\n}\n.k-state-hover .k-foreColor,\n.k-state-selected .k-foreColor {\n  background-position: -264px -96px;\n}\n.k-backColor {\n  background-position: -240px -120px;\n}\n.k-state-hover .k-backColor,\n.k-state-selected .k-backColor {\n  background-position: -264px -120px;\n}\n.k-colorpicker .k-foreColor {\n  background-position: -240px -96px;\n}\n.k-colorpicker .k-backColor {\n  background-position: -240px -120px;\n}\n.k-justifyLeft {\n  background-position: -240px -144px;\n}\n.k-state-hover .k-justifyLeft,\n.k-state-selected .k-justifyLeft {\n  background-position: -264px -144px;\n}\n.k-justifyCenter {\n  background-position: -240px -168px;\n}\n.k-state-hover .k-justifyCenter,\n.k-state-selected .k-justifyCenter {\n  background-position: -264px -168px;\n}\n.k-justifyRight {\n  background-position: -240px -192px;\n}\n.k-state-hover .k-justifyRight,\n.k-state-selected .k-justifyRight {\n  background-position: -264px -192px;\n}\n.k-justifyFull {\n  background-position: -240px -216px;\n}\n.k-state-hover .k-justifyFull,\n.k-state-selected .k-justifyFull {\n  background-position: -264px -216px;\n}\n.k-insertUnorderedList {\n  background-position: -240px -264px;\n}\n.k-state-hover .k-insertUnorderedList,\n.k-state-selected .k-insertUnorderedList {\n  background-position: -264px -264px;\n}\n.k-insertOrderedList {\n  background-position: -240px -288px;\n}\n.k-state-hover .k-insertOrderedList,\n.k-state-selected .k-insertOrderedList {\n  background-position: -264px -288px;\n}\n.k-indent,\n.k-rtl .k-outdent {\n  background-position: -288px 0;\n}\n.k-state-hover .k-indent,\n.k-state-hover .k-rtl .k-outdent,\n.k-state-selected .k-indent,\n.k-state-selected .k-rtl .k-outdent {\n  background-position: -312px 0;\n}\n.k-outdent,\n.k-rtl .k-indent {\n  background-position: -288px -24px;\n}\n.k-state-hover .k-outdent,\n.k-state-hover .k-rtl .k-indent,\n.k-state-selected .k-outdent,\n.k-state-selected .k-rtl .k-indent {\n  background-position: -312px -24px;\n}\n.k-createLink {\n  background-position: -288px -48px;\n}\n.k-state-hover .k-createLink,\n.k-state-selected .k-createLink {\n  background-position: -312px -48px;\n}\n.k-unlink {\n  background-position: -288px -72px;\n}\n.k-state-hover .k-unlink,\n.k-state-selected .k-unlink {\n  background-position: -312px -72px;\n}\n.k-insertImage {\n  background-position: -288px -96px;\n}\n.k-state-hover .k-insertImage,\n.k-state-selected .k-insertImage {\n  background-position: -312px -96px;\n}\n.k-insertFile {\n  background-position: -288px -216px;\n}\n.k-state-hover .k-insertFile,\n.k-state-selected .k-insertFile {\n  background-position: -312px -216px;\n}\n.k-subscript {\n  background-position: -288px -144px;\n}\n.k-state-hover .k-subscript,\n.k-state-selected .k-subscript {\n  background-position: -312px -144px;\n}\n.k-superscript {\n  background-position: -288px -168px;\n}\n.k-state-hover .k-superscript,\n.k-state-selected .k-superscript {\n  background-position: -312px -168px;\n}\n.k-cleanFormatting {\n  background-position: -288px -192px;\n}\n.k-state-hover .k-cleanFormatting,\n.k-state-selected .k-cleanFormatting {\n  background-position: -312px -192px;\n}\n.k-createTable {\n  background-position: -192px 0;\n}\n.k-state-hover .k-createTable,\n.k-state-selected .k-createTable {\n  background-position: -216px 0;\n}\n.k-addColumnLeft {\n  background-position: -192px -24px;\n}\n.k-state-hover .k-addColumnLeft,\n.k-state-selected .k-addColumnLeft {\n  background-position: -216px -24px;\n}\n.k-addColumnRight {\n  background-position: -192px -48px;\n}\n.k-state-hover .k-addColumnRight,\n.k-state-selected .k-addColumnRight {\n  background-position: -216px -48px;\n}\n.k-addRowAbove {\n  background-position: -192px -72px;\n}\n.k-state-hover .k-addRowAbove,\n.k-state-selected .k-addRowAbove {\n  background-position: -216px -72px;\n}\n.k-addRowBelow {\n  background-position: -192px -96px;\n}\n.k-state-hover .k-addRowBelow,\n.k-state-selected .k-addRowBelow {\n  background-position: -216px -96px;\n}\n.k-deleteRow {\n  background-position: -192px -120px;\n}\n.k-state-hover .k-deleteRow,\n.k-state-selected .k-deleteRow {\n  background-position: -216px -120px;\n}\n.k-deleteColumn {\n  background-position: -192px -144px;\n}\n.k-state-hover .k-deleteColumn,\n.k-state-selected .k-deleteColumn {\n  background-position: -216px -144px;\n}\n.k-mergeCells {\n  background-position: -192px -168px;\n}\n.k-state-hover .k-mergeCells,\n.k-state-selected .k-mergeCells {\n  background-position: -216px -168px;\n}\n/* default tool widths */\n.k-fontName {\n  width: 110px;\n}\n.k-fontSize {\n  width: 124px;\n}\n.k-formatBlock {\n  width: 147px;\n}\n.k-editortoolbar-dragHandle {\n  float: left;\n  margin: 1px 0 0;\n}\n.k-editor-toolbar .k-button-group {\n  padding: 1px;\n}\n.k-editor .k-editor-toolbar .k-row-break {\n  display: block;\n  height: 0;\n  font-size: 0;\n  line-height: 0;\n}\n.k-button-group .k-tool {\n  border-style: solid;\n  border-width: 1px;\n  margin-right: -1px;\n}\n.k-button-group .k-tool.k-state-hover,\n.k-button-group .k-tool:focus {\n  position: relative;\n  z-index: 1;\n}\n.k-rtl .k-button-group .k-tool {\n  border-style: solid;\n  border-width: 1px;\n}\n.k-button-group .k-tool.k-group-end {\n  border-right-width: 1px;\n}\n.k-rtl .k-button-group .k-tool.k-group-end {\n  border-left-width: 1px;\n}\n.k-button-group .k-state-disabled {\n  display: none;\n}\n.k-button-group .k-state-hover,\n.k-button-group .k-state-active {\n  vertical-align: middle;\n}\n.k-button-group .k-state-disabled {\n  filter: alpha(opacity=30);\n  opacity: .3;\n}\n.k-editor .k-editable-area {\n  width: 100%;\n  height: 100%;\n  border-style: solid;\n  border-width: 1px;\n  outline: 0;\n}\n.k-editor .k-content {\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: 0;\n  margin: 0;\n  padding: 0;\n  background: #fff;\n}\n.k-editor .k-tool {\n  outline: 0;\n}\n.k-editor iframe.k-content {\n  display: inline;\n  vertical-align: top;\n  /*fixes missing top border caused by the inline display*/\n}\n.k-editor .k-raw-content {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.k-editor .k-raw-content,\n.k-editor-dialog .k-editor-textarea {\n  font-size: inherit;\n  font-family: consolas, \"courier new\", monospace;\n}\n.k-editor-dialog {\n  padding: 1em;\n  width: 400px;\n}\n.k-editor-dialog .k-edit-label {\n  width: 25%;\n}\n.k-editor-dialog .k-edit-field {\n  width: 66%;\n}\n.k-editor-dialog .k-edit-field .k-textbox {\n  width: 96%;\n}\n.k-viewhtml-dialog {\n  width: auto;\n}\n.k-filebrowser-dialog {\n  width: auto;\n  min-width: 350px;\n}\n.k-filebrowser-dialog .k-filebrowser {\n  margin: 0 1em 0;\n}\n.k-filebrowser-dialog .k-edit-label {\n  width: 18%;\n}\n.k-filebrowser-dialog .k-edit-field {\n  width: 75%;\n}\n.k-filebrowser-dialog .k-edit-field .k-textbox {\n  width: 70%;\n}\n#k-editor-image-width,\n#k-editor-image-height {\n  width: 5em;\n}\n.k-editor-dialog .k-button {\n  display: inline-block;\n}\n.k-editor-dialog .k-editor-textarea {\n  width: 600px;\n  height: 350px;\n  padding: .2em .2em .2em .4em;\n  border-width: 1px;\n  border-style: solid;\n  overflow: auto;\n}\n.k-button-wrapper .k-link:hover {\n  text-decoration: underline;\n}\n.k-ct-popup {\n  width: 180.39999999999998px;\n  padding: .65em .5em .5em;\n}\n.k-ct-popup .k-status {\n  margin: .3em 0;\n}\n.k-ct-cell {\n  border-width: 1px;\n  border-style: solid;\n  width: 18px;\n  height: 18px;\n  margin: 1px;\n  vertical-align: top;\n  display: inline-block;\n  overflow: hidden;\n  -ms-high-contrast-adjust: none;\n}\n/* Notification */\n.k-notification-wrap {\n  padding: .6em .5em;\n  cursor: default;\n  position: relative;\n  white-space: nowrap;\n}\n.k-notification-button .k-notification-wrap {\n  padding-right: 20px;\n}\n.k-notification-wrap > .k-i-note {\n  vertical-align: text-bottom;\n  margin-right: 4px;\n}\n.k-notification-wrap > .k-i-close {\n  position: absolute;\n  top: 7px;\n  right: 4px;\n  display: none;\n}\n.k-notification-button .k-notification-wrap > .k-i-close {\n  display: block;\n}\n/* Progressbar */\n.k-progressbar {\n  display: inline-block;\n  position: relative;\n  vertical-align: middle;\n}\n.k-progressbar {\n  border-radius: 4px;\n}\n.k-progressbar-horizontal {\n  width: 27em;\n  height: 1.9em;\n}\n.k-progressbar-vertical {\n  width: 1.9em;\n  height: 27em;\n}\n.k-progressbar > .k-state-selected {\n  position: absolute;\n  border-style: solid;\n  border-width: 1px;\n  overflow: hidden;\n}\n.k-progressbar-horizontal > .k-state-selected,\n.k-rtl .k-progressbar-horizontal.k-progressbar-reverse > .k-state-selected {\n  left: -1px;\n  right: auto;\n  top: -1px;\n  height: 100%;\n  border-radius: 4px 0 0 4px;\n}\n.k-progressbar-horizontal.k-progressbar-reverse > .k-state-selected,\n.k-rtl .k-progressbar-horizontal > .k-state-selected {\n  left: auto;\n  right: -1px;\n  border-radius: 0 4px 4px 0;\n}\n.k-progressbar-vertical > .k-state-selected {\n  left: -1px;\n  bottom: -1px;\n  width: 100%;\n  border-radius: 0 0 4px 4px;\n}\n.k-progressbar-vertical.k-progressbar-reverse > .k-state-selected {\n  bottom: auto;\n  top: -1px;\n  border-radius: 4px 4px 0 0;\n}\n.k-progressbar > .k-state-selected.k-complete,\n.k-rtl .k-progressbar > .k-state-selected.k-complete {\n  border-radius: 4px;\n}\n.k-progressbar > .k-reset {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  left: -1px;\n  top: -1px;\n  width: 100%;\n  height: 100%;\n  border-radius: 4px;\n  white-space: nowrap;\n}\n.k-progressbar-horizontal .k-item {\n  display: inline-block;\n  height: 100%;\n  border-style: solid;\n  margin-left: -1px;\n}\n.k-progressbar-horizontal .k-item.k-first {\n  margin-left: 0;\n}\n.k-progressbar-horizontal .k-item.k-last {\n  border-right-width: 0;\n}\n.k-progressbar-horizontal .k-item,\n.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-item {\n  border-width: 1px 1px 1px 0;\n}\n.k-progressbar-horizontal.k-progressbar-reverse .k-item,\n.k-rtl .k-progressbar-horizontal .k-item {\n  border-width: 1px 0 1px 1px;\n}\n.k-progressbar-horizontal .k-first,\n.k-rtl .k-progressbar-horizontal .k-last,\n.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-last {\n  border-radius: 4px 0 0 4px;\n  border-left-width: 1px;\n}\n.k-progressbar-horizontal .k-last,\n.k-rtl .k-progressbar-horizontal .k-first {\n  border-radius: 0 4px 4px 0;\n}\n.k-progressbar-horizontal.k-progressbar-reverse .k-last,\n.k-rtl .k-progressbar-horizontal .k-first {\n  border-right-width: 1px;\n}\n.k-progressbar-vertical .k-item {\n  width: 100%;\n  border-style: solid;\n  border-width: 1px 1px 0 1px;\n  margin-top: -1px;\n}\n.k-progressbar-vertical .k-item.k-first {\n  margin-top: 0;\n}\n.k-progressbar-vertical li.k-item.k-last {\n  border-bottom-width: 0;\n}\n.k-progressbar-vertical .k-first {\n  border-radius: 4px 4px 0 0;\n}\n.k-progressbar-vertical .k-last {\n  border-radius: 0 0 4px 4px;\n  border-bottom-width: 1px;\n}\n.k-progressbar-vertical.k-progressbar-reverse .k-item {\n  border-width: 0 1px 1px 1px;\n}\n.k-progressbar-vertical.k-progressbar-reverse .k-first {\n  border-top-width: 1px;\n}\n.k-progress-status-wrap {\n  position: absolute;\n  top: -1px;\n  border: 1px solid transparent;\n  line-height: 2em;\n  width: 100%;\n  height: 100%;\n}\n.k-progress-status-wrap,\n.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-progress-status-wrap {\n  left: -1px;\n  right: auto;\n  text-align: right;\n}\n.k-progressbar-horizontal.k-progressbar-reverse .k-progress-status-wrap,\n.k-rtl .k-progressbar-horizontal .k-progress-status-wrap {\n  left: auto;\n  right: -1px;\n  text-align: left;\n}\n.k-progressbar-vertical .k-progress-status-wrap {\n  top: auto;\n  bottom: -1px;\n}\n.k-progressbar-vertical.k-progressbar-reverse .k-progress-status-wrap {\n  bottom: auto;\n  top: -1px;\n}\n.k-progress-status {\n  display: inline-block;\n  padding: 0 .5em;\n  min-width: 10px;\n  white-space: nowrap;\n}\n.k-progressbar-vertical.k-progressbar-reverse .k-progress-status {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n}\n.k-progressbar-vertical .k-progress-status {\n  -webkit-transform: rotate(-90deg) translateX(-100%);\n  -moz-transform: rotate(-90deg) translateX(-100%);\n  -ms-transform: rotate(-90deg) translateX(-100%);\n  -o-transform: rotate(-90deg) translateX(-100%);\n  transform: rotate(-90deg) translateX(-100%);\n  -webkit-transform-origin: 0 0;\n  -moz-transform-origin: 0 0;\n  -ms-transform-origin: 0 0;\n  -o-transform-origin: 0 0;\n  transform-origin: 0 0;\n}\n.k-progressbar-vertical.k-progressbar-reverse .k-progress-status {\n  -webkit-transform: rotate(90deg) translateX(-100%);\n  -moz-transform: rotate(90deg) translateX(-100%);\n  -ms-transform: rotate(90deg) translateX(-100%);\n  -o-transform: rotate(90deg) translateX(-100%);\n  transform: rotate(90deg) translateX(-100%);\n  -webkit-transform-origin: 0 100%;\n  -moz-transform-origin: 0 100%;\n  -ms-transform-origin: 0 100%;\n  -o-transform-origin: 0 100%;\n  transform-origin: 0 100%;\n}\n.k-ie7 .k-progressbar-vertical .k-progress-status {\n  writing-mode: tb-rl;\n  padding: .5em 0;\n}\n.k-ie8 .k-progressbar-vertical .k-progress-status {\n  writing-mode: bt-lr;\n  padding: .5em 0;\n}\n/* Slider */\ndiv.k-slider {\n  position: relative;\n  border-width: 0;\n  background-color: transparent;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.k-slider-vertical {\n  width: 26px;\n  height: 200px;\n  /* default height */\n}\n.k-slider-horizontal {\n  display: inline-block;\n  width: 200px;\n  /* default width */\n  height: 26px;\n}\n.k-slider-wrap {\n  width: 100%;\n  height: 100%;\n}\n.k-slider .k-button,\n.k-grid .k-slider .k-button {\n  position: absolute;\n  top: 0;\n  width: 24px;\n  min-width: 0;\n  height: 24px;\n  margin: 0;\n  padding: 0;\n  outline: 0;\n}\n.k-slider .k-button .k-icon {\n  margin-top: 3px;\n  vertical-align: top;\n}\n.k-state-disabled .k-slider-wrap {\n  filter: alpha(opacity=60);\n  opacity: .6;\n}\n.k-state-disabled .k-slider-wrap .k-slider-items {\n  color: #333;\n}\n.k-slider .k-button-decrease {\n  left: 0;\n}\n.k-slider-vertical .k-button-decrease,\n.k-grid .k-slider-vertical .k-button-decrease {\n  top: auto;\n  bottom: 0;\n}\n.k-slider .k-button-increase {\n  right: 0;\n}\n.k-slider .k-icon,\n.k-slider-track,\n.k-slider .k-tick {\n  cursor: pointer;\n}\n.k-ie7 .k-slider .k-icon {\n  margin-top: 2px;\n}\n.k-slider-track,\n.k-slider-selection {\n  position: absolute;\n  margin: 0;\n  padding: 0;\n}\n.k-slider-horizontal .k-slider-track,\n.k-slider-horizontal .k-slider-selection {\n  top: 50%;\n  left: 0;\n  height: 8px;\n  margin-top: -4px;\n  background-repeat: repeat-x;\n}\n.k-slider-horizontal .k-slider-buttons .k-slider-track {\n  left: 34px;\n}\n.k-slider-vertical .k-slider-track,\n.k-slider-vertical .k-slider-selection {\n  left: 50%;\n  bottom: 0;\n  width: 8px;\n  margin-left: -4px;\n  background-repeat: repeat-y;\n}\n.k-slider-vertical .k-slider-buttons .k-slider-track {\n  bottom: 34px;\n}\n.k-draghandle {\n  position: absolute;\n  background-repeat: no-repeat;\n  background-color: transparent;\n  text-indent: -3333px;\n  overflow: hidden;\n  text-decoration: none;\n  text-align: center;\n  outline: 0;\n}\n.k-slider-horizontal .k-draghandle {\n  top: -4px;\n  width: 13px;\n  height: 14px;\n}\n.k-slider-vertical .k-draghandle {\n  left: -4px;\n  width: 14px;\n  height: 13px;\n}\n.k-slider-buttons .k-slider-items {\n  margin-left: 34px;\n}\n.k-slider-horizontal .k-slider-items {\n  height: 100%;\n}\n.k-slider-vertical .k-slider-items {\n  padding-top: 1px;\n}\n.k-slider-vertical .k-slider-buttons .k-slider-items {\n  padding-top: 0;\n}\n.k-slider-vertical .k-slider-buttons .k-slider-items {\n  margin: 0;\n  padding-top: 35px;\n}\n.k-slider .k-tick {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-position: center center;\n}\n.k-slider-horizontal .k-tick {\n  float: left;\n  height: 100%;\n  text-align: center;\n}\n/* fixes ticks position and removes spacing between them in IE7 */\n.k-ie7 .k-slider-vertical .k-tick {\n  float: left;\n  clear: left;\n  width: 100%;\n}\n.k-slider-horizontal .k-tick {\n  background-position: center -92px;\n}\n.k-slider-horizontal .k-slider-topleft .k-tick {\n  background-position: center -122px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-tick {\n  background-position: center -152px;\n}\n.k-slider-horizontal .k-tick-large {\n  background-position: center -2px;\n}\n.k-slider-horizontal .k-slider-topleft .k-tick-large {\n  background-position: center -32px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-tick-large {\n  background-position: center -62px;\n}\n.k-slider-vertical .k-tick {\n  background-position: -92px center;\n}\n.k-slider-vertical .k-slider-topleft .k-tick {\n  background-position: -122px center;\n}\n.k-slider-vertical .k-slider-bottomright .k-tick {\n  background-position: -152px center;\n}\n.k-slider-vertical .k-tick-large {\n  background-position: -2px center;\n}\n.k-slider-vertical .k-slider-topleft .k-tick-large {\n  background-position: -32px center;\n}\n.k-slider-vertical .k-slider-bottomright .k-tick-large {\n  background-position: -62px center;\n}\n.k-slider-horizontal .k-first {\n  background-position: 0 -92px;\n}\n.k-slider-horizontal .k-tick-large.k-first {\n  background-position: 0 -2px;\n}\n.k-slider-horizontal .k-slider-topleft .k-first {\n  background-position: 0 -122px;\n}\n.k-slider-horizontal .k-slider-topleft .k-tick-large.k-first {\n  background-position: 0 -32px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-first {\n  background-position: 0 -152px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-tick-large.k-first {\n  background-position: 0 -62px;\n}\n.k-slider-horizontal .k-last {\n  background-position: 100% -92px;\n}\n.k-slider-horizontal .k-tick-large.k-last {\n  background-position: 100% -2px;\n}\n.k-slider-horizontal .k-slider-topleft .k-last {\n  background-position: 100% -122px;\n}\n.k-slider-horizontal .k-slider-topleft .k-tick-large.k-last {\n  background-position: 100% -32px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-last {\n  background-position: 100% -152px;\n}\n.k-slider-horizontal .k-slider-bottomright .k-tick-large.k-last {\n  background-position: 100% -62px;\n}\n.k-slider-vertical .k-first {\n  background-position: -92px 100%;\n}\n.k-slider-vertical .k-tick-large.k-first {\n  background-position: -2px 100%;\n}\n.k-slider-vertical .k-slider-topleft .k-first {\n  background-position: -122px 100%;\n}\n.k-slider-vertical .k-slider-topleft .k-tick-large.k-first {\n  background-position: -32px 100%;\n}\n.k-slider-vertical .k-slider-bottomright .k-first {\n  background-position: -152px 100%;\n}\n.k-slider-vertical .k-slider-bottomright .k-tick-large.k-first {\n  background-position: -62px 100%;\n}\n.k-slider-vertical .k-last {\n  background-position: -92px 0;\n}\n.k-slider-vertical .k-tick-large.k-last {\n  background-position: -2px 0;\n}\n.k-slider-vertical .k-slider-topleft .k-last {\n  background-position: -122px 0;\n}\n.k-slider-vertical .k-slider-topleft .k-tick-large.k-last {\n  background-position: -32px 0;\n}\n.k-slider-vertical .k-slider-bottomright .k-last {\n  background-position: -152px 0;\n}\n.k-slider-vertical .k-slider-bottomright .k-tick-large.k-last {\n  background-position: -62px 0;\n}\n.k-slider-vertical .k-tick {\n  text-align: right;\n}\n.k-slider-vertical .k-slider-topleft .k-tick {\n  text-align: left;\n}\n.k-slider .k-label {\n  position: absolute;\n  white-space: nowrap;\n  font-size: .92em;\n}\n.k-slider-horizontal .k-label {\n  left: 0;\n  width: 100%;\n  line-height: 1;\n}\n.k-slider-horizontal .k-first .k-label {\n  left: -50%;\n}\n.k-slider-horizontal .k-last .k-label {\n  left: auto;\n  right: -50%;\n}\n.k-slider-horizontal .k-label {\n  bottom: -1.2em;\n}\n.k-slider-horizontal .k-slider-topleft .k-label {\n  top: -1.2em;\n}\n.k-slider-vertical .k-label {\n  left: 120%;\n  display: block;\n  text-align: left;\n}\n.k-slider-vertical .k-last .k-label {\n  top: -0.5em;\n}\n.k-slider-vertical .k-first .k-label {\n  bottom: -0.5em;\n}\n.k-slider-vertical .k-slider-topleft .k-label {\n  left: auto;\n  right: 120%;\n}\n.k-slider-tooltip {\n  top: -4444px;\n  /*prevent window resize in IE8 when appending*/\n}\n/* Scheduler */\n.k-scheduler-toolbar,\n.k-scheduler-footer {\n  border-style: solid;\n}\n.k-scheduler-toolbar,\n.k-scheduler-footer {\n  line-height: 28px;\n  padding: 6px;\n}\n.k-scheduler-toolbar {\n  border-width: 0 0 1px;\n}\n.k-edit-field.k-scheduler-toolbar {\n  border-width: 0;\n  padding-top: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.k-scheduler-header {\n  text-align: center;\n}\n.k-scheduler-footer {\n  border-width: 1px 0 0;\n}\n.k-scheduler-toolbar > ul {\n  float: right;\n}\n.k-scheduler-toolbar > ul:first-child {\n  float: left;\n}\n.k-scheduler-toolbar > .k-scheduler-tools {\n  float: left;\n  margin-bottom: .5em;\n}\n.k-scheduler-tools + .k-scheduler-navigation {\n  float: left;\n  clear: left;\n}\n.k-scheduler-toolbar > ul > li,\n.k-scheduler-footer > ul > li {\n  display: inline-block;\n  border-style: solid;\n  border-width: 1px 1px 1px 0;\n}\n.k-scheduler .k-scheduler-toolbar .k-nav-current,\n.k-scheduler .k-scheduler-toolbar .k-scheduler-tools > li {\n  border-width: 0;\n}\n.k-scheduler-toolbar > ul > li:first-child {\n  border-left-width: 1px;\n}\n.k-scheduler div.k-scheduler-footer ul li {\n  margin-right: .6em;\n  border-width: 1px;\n}\n.k-scheduler-toolbar .k-link,\n.k-scheduler-footer .k-link {\n  display: inline-block;\n  padding: 0 1.1em;\n}\n.k-scheduler-toolbar .k-nav-prev .k-link,\n.k-scheduler-toolbar .k-nav-next .k-link {\n  padding-left: .6em;\n  padding-right: .6em;\n}\n.k-ie7 .k-scheduler-toolbar .k-nav-prev .k-link,\n.k-ie7 .k-scheduler-toolbar .k-nav-next .k-link {\n  height: 2.3em;\n  margin-top: -1px;\n  vertical-align: middle;\n}\n.k-ie7 .k-scheduler-toolbar .k-nav-prev .k-link .k-icon,\n.k-ie7 .k-scheduler-toolbar .k-nav-next .k-link .k-icon {\n  margin-top: .5em;\n}\n.k-scheduler-toolbar .k-nav-current .k-link {\n  padding: 0;\n}\n.k-scheduler-toolbar .k-nav-current {\n  margin: 0 1.1em;\n}\n.k-scheduler div.k-scheduler-toolbar > ul > li.k-nav-current,\n.k-scheduler .k-nav-current > .k-state-active {\n  background: none;\n}\n.k-scheduler-phone .k-scheduler-toolbar + .k-scheduler-toolbar .k-scheduler-navigation {\n  width: 100%;\n  text-align: center;\n}\n.k-scheduler-phone .k-scheduler-toolbar + .k-scheduler-toolbar .k-scheduler-navigation > li {\n  background: none;\n  border: 0;\n}\n.k-scheduler-phone .k-toolbar .k-nav-next {\n  float: right;\n}\n.k-scheduler-phone .k-toolbar .k-nav-prev {\n  float: left;\n}\n.k-scheduler-toolbar .k-i-calendar,\n.k-scheduler-footer .k-icon {\n  margin: -2px 6px 0 0;\n}\n.k-scheduler-header,\n.k-scheduler-header-wrap {\n  overflow: hidden;\n}\n.k-scheduler-header-wrap {\n  position: relative;\n  border-style: solid;\n  border-width: 0;\n}\n.k-scheduler .k-scrollbar-v .k-scheduler-header-wrap {\n  border-right-width: 1px;\n}\n.k-scheduler-times,\n.k-scheduler-content {\n  position: relative;\n}\n.k-scheduler-times {\n  overflow: hidden;\n  border-style: solid;\n  border-width: 0;\n}\n.k-scheduler-content {\n  overflow: auto;\n}\n.k-scheduler-layout,\n.k-scheduler-table {\n  border-spacing: 0;\n  width: 100%;\n  margin: 0;\n  border-collapse: separate;\n}\n.k-ie7 .k-scheduler-content .k-scheduler-table {\n  width: auto;\n}\n.k-scheduler-layout > tbody > tr > td {\n  padding: 0;\n  vertical-align: top;\n}\n/* fix smashed second layout column in iPad */\n.k-safari .k-scheduler-layout > tbody > tr > td + td {\n  width: 100%;\n}\n.k-scheduler-table {\n  table-layout: fixed;\n}\n.k-scheduler-times .k-scheduler-table {\n  table-layout: auto;\n}\n.k-scheduler-monthview .k-scheduler-content .k-scheduler-table {\n  height: 100%;\n}\n.k-scheduler-table td,\n.k-scheduler-table th {\n  height: 1.5em;\n  padding: .334em .5em;\n  font-size: 100%;\n}\n.k-scheduler .k-scheduler-table td,\n.k-scheduler .k-scheduler-table th {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.k-scheduler-monthview .k-hidden,\n.k-scheduler-monthview .k-hidden > div {\n  width: 0 !important;\n  overflow: hidden !important;\n}\n.k-scheduler-monthview .k-hidden {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n  border-right-width: 0 !important;\n}\n.k-scheduler-monthview > tbody > tr:first-child .k-scheduler-times {\n  margin-right: 1px;\n}\n.k-scheduler-monthview > tbody > tr:first-child .k-scheduler-times .k-hidden {\n  height: auto;\n}\n.k-scheduler-monthview .k-scheduler-table td,\n.k-scheduler-monthview .k-hidden {\n  height: 80px;\n  text-align: right;\n}\n.k-scheduler-phone .k-scheduler-monthview .k-scheduler-table td,\n.k-scheduler-phone .k-scheduler-monthview .k-hidden {\n  height: 40px;\n}\n.k-scheduler-table td,\n.k-slot-cell {\n  vertical-align: top;\n}\n/* separate due to old IEs */\n.k-scheduler-layout tr + tr .k-scheduler-times th:last-child {\n  vertical-align: top;\n}\n.k-scheduler-phone .k-scheduler-monthview .k-scheduler-table td {\n  text-align: center;\n  vertical-align: middle;\n}\n.k-scheduler-phone .k-scheduler-monthview .k-scheduler-table td span {\n  font-size: 1.5em;\n}\n.k-scheduler-header th {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.k-scheduler-table td,\n.k-scheduler-header th {\n  border-style: solid;\n  border-width: 0 0 1px 1px;\n}\n.k-scheduler-table td:first-child,\n.k-scheduler-header th:first-child {\n  border-left-width: 0;\n}\n.k-scheduler-agendaview .k-scheduler-table td:first-child {\n  border-left-width: 1px;\n}\n.k-scheduler-agendaview .k-scheduler-table td.k-first {\n  border-left-width: 0;\n}\n.k-scheduler-layout tr + tr .k-scheduler-times tr:last-child > th,\n.k-scheduler-layout tr + tr .k-scheduler-table > tbody > tr:last-child > td,\n.k-scheduler-table > tbody > tr > .k-last {\n  border-bottom-width: 0;\n}\n.k-scrollbar-h tr + tr .k-scheduler-times,\n.k-scrollbar-h .k-scheduler-content .k-scheduler-table > tbody > tr:last-child > td,\n.k-scheduler-agendaview.k-scrollbar-h .k-scheduler-table > tbody > tr > td.k-last {\n  border-bottom-width: 1px;\n}\n.k-scheduler-times th {\n  text-align: right;\n  padding-right: .6em;\n  border-style: solid;\n  border-width: 0 1px 1px 0;\n  border-color: transparent;\n  white-space: nowrap;\n}\n.k-scheduler-layout tr + tr .k-scheduler-times th {\n  border-bottom-color: transparent;\n}\n.k-scheduler-layout tr + tr .k-scheduler-times th.k-slot-cell,\n.k-scheduler-layout tr + tr .k-scheduler-times th.k-scheduler-times-all-day {\n  border-bottom-color: inherit;\n}\n.k-scheduler .k-middle-row td {\n  border-bottom-style: dotted;\n}\n.k-scheduler-now-arrow,\n.k-scheduler-now-line {\n  position: absolute;\n}\n.k-scheduler-now-arrow {\n  width: 0;\n  height: 0;\n  border: solid 5px transparent;\n  left: 0;\n}\n.k-scheduler-now-line {\n  left: 5px;\n  right: 0;\n  height: 1px;\n}\n.k-task {\n  position: relative;\n}\ndiv.k-more-events {\n  text-align: center;\n  font-size: 18px;\n  line-height: 1.2;\n  padding: 0;\n}\n.k-more-events > span {\n  display: block;\n  margin-top: -0.6em;\n}\n.k-event,\n.k-more-events {\n  position: absolute;\n  border-style: solid;\n  border-width: 1px;\n  text-align: left;\n  overflow: hidden;\n}\n.k-event {\n  cursor: default;\n  min-height: 1.3em;\n}\n.k-event-drag-hint {\n  filter: alpha(opacity=60);\n  opacity: .6;\n  cursor: -webkit-grabbing;\n  cursor: -moz-grabbing;\n}\n.k-scheduler-header .k-event {\n  white-space: nowrap;\n}\n.k-event-template {\n  padding: .3em 1.4em .3em .6em;\n}\n.k-event-time {\n  display: none;\n  padding-bottom: 0;\n  font-size: .9em;\n}\n.k-event-drag-hint .k-event-time {\n  display: block;\n}\n.k-event-actions,\n.k-event > .k-link,\n.k-task > .k-link {\n  position: absolute;\n  top: 3px;\n  right: 4px;\n  white-space: nowrap;\n}\n.k-event-actions {\n  z-index: 1;\n}\n.k-scheduler-agendaview .k-task > .k-link {\n  top: 0;\n  right: 0;\n}\n.k-event-actions:first-child {\n  position: static;\n  float: left;\n  margin: 4px 2px 0 4px;\n}\n.k-webkit .k-event-actions:first-child {\n  margin-top: 3px;\n}\n.k-event-actions:first-child > .k-link {\n  display: inline-block;\n}\n.k-event-delete {\n  display: none;\n}\n.k-event:hover .k-event-delete,\ntr:hover > td > .k-task .k-event-delete {\n  display: inline-block;\n}\n.k-event .k-event-top-actions,\n.k-event .k-event-bottom-actions {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.k-event .k-event-bottom-actions {\n  top: auto;\n  bottom: 0;\n}\n.k-event .k-resize-handle,\n.k-scheduler-mobile .k-event:hover .k-resize-handle {\n  position: absolute;\n  visibility: hidden;\n  z-index: 2;\n}\n.k-event:hover .k-resize-handle,\n.k-event-active .k-resize-handle,\n.k-scheduler-mobile .k-event-active:hover .k-resize-handle {\n  visibility: visible;\n}\n.k-event .k-resize-handle:after {\n  content: \"\";\n  position: absolute;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.k-scheduler-mobile .k-event .k-resize-handle:after {\n  filter: none;\n  opacity: 1;\n}\n.k-event > .k-resize-n {\n  top: 0;\n  left: 0;\n  right: 0;\n  height: .4em;\n}\n.k-event > .k-resize-s {\n  bottom: 0;\n  left: 0;\n  right: 0;\n  height: .4em;\n}\n.k-event > .k-resize-e {\n  right: 0;\n  top: 0;\n  bottom: 0;\n  width: .4em;\n}\n.k-event > .k-resize-w {\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: .4em;\n}\n.k-event > .k-resize-n:after,\n.k-event > .k-resize-s:after {\n  top: 1px;\n  left: 50%;\n  margin-left: -1em;\n  width: 2em;\n  height: 1px;\n}\n.k-event > .k-resize-s:after {\n  top: auto;\n  bottom: 1px;\n}\n.k-event > .k-resize-e:after,\n.k-event > .k-resize-w:after {\n  left: 1px;\n  top: 50%;\n  margin-top: -0.7em;\n  height: 1.4em;\n  width: 1px;\n}\n.k-event > .k-resize-e:after {\n  left: auto;\n  right: 1px;\n}\n.k-scheduler-mobile .k-event > .k-resize-n,\n.k-scheduler-mobile .k-event > .k-resize-s {\n  height: .6em;\n}\n.k-scheduler-mobile .k-event > .k-resize-e,\n.k-scheduler-mobile .k-event > .k-resize-w {\n  width: .6em;\n}\n.k-scheduler-mobile .k-event > .k-resize-n:after,\n.k-scheduler-mobile .k-event > .k-resize-s:after {\n  top: 0;\n  margin-left: -3em;\n  width: 4em;\n  height: .6em;\n}\n.k-scheduler-mobile .k-event > .k-resize-s:after {\n  bottom: 0;\n}\n.k-scheduler-mobile .k-event > .k-resize-e:after,\n.k-scheduler-mobile .k-event > .k-resize-w:after {\n  left: 0;\n  margin-top: -0.7em;\n  height: 1.4em;\n  width: .6em;\n}\n.k-scheduler-mobile .k-event > .k-resize-e:after {\n  right: 0;\n}\n.k-scheduler-mobile .k-event > .k-resize-n:after {\n  border-radius: 0 0 4px 4px;\n}\n.k-scheduler-mobile .k-event > .k-resize-s:after {\n  border-radius: 4px 4px 0 0;\n}\n.k-scheduler-mobile .k-event > .k-resize-w:after {\n  border-radius: 0 4px 4px 0;\n}\n.k-scheduler-mobile .k-event > .k-resize-e:after {\n  border-radius: 4px 0 0 4px;\n}\n.k-scheduler-phone .k-scheduler-monthview .k-events-container {\n  position: absolute;\n  text-align: center;\n  height: 6px;\n  line-height: 6px;\n}\n.k-scheduler-phone .k-scheduler-monthview .k-event {\n  position: static;\n  display: inline-block;\n  width: 4px;\n  height: 4px;\n  min-height: 0;\n  margin: 1px;\n}\n.k-scheduler-marquee {\n  border-style: solid;\n  border-width: 0;\n}\n.k-scheduler-marquee.k-first:before,\n.k-scheduler-marquee.k-last:after {\n  content: \"\";\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 3px;\n}\ndiv.k-scheduler-marquee:before {\n  top: 0;\n  left: 0;\n  border-right-color: transparent;\n  border-bottom-color: transparent;\n}\ndiv.k-scheduler-marquee:after {\n  bottom: 0;\n  right: 0;\n  border-top-color: transparent;\n  border-left-color: transparent;\n}\n.k-scheduler-marquee .k-label-top {\n  position: absolute;\n  top: .3em;\n  left: .8em;\n  font-size: .8em;\n}\n.k-scheduler-marquee .k-label-bottom {\n  position: absolute;\n  bottom: .3em;\n  right: .81em;\n  font-size: .8em;\n}\n.k-scheduler-quickedit .k-textbox {\n  width: 200px;\n}\n.k-tooltip-bottom {\n  text-align: left;\n}\n.k-tooltip-bottom .k-button {\n  float: left;\n  margin-right: .3em;\n}\n.k-tooltip-bottom .k-quickedit-details {\n  float: right;\n  margin-right: 0;\n}\n.k-scheduler-agendaview .k-scheduler-table th,\n.k-scheduler-agendaview .k-scheduler-table td {\n  text-align: left;\n}\n.k-scheduler-times .k-slot-cell,\n.k-scheduler-groupcolumn {\n  width: 6em;\n}\n.k-scheduler-datecolumn {\n  width: 12em;\n}\n.k-scheduler-timecolumn {\n  width: 11em;\n}\n.k-scheduler-timecolumn > div {\n  position: relative;\n  vertical-align: top;\n}\n.k-webkit .k-scheduler-timecolumn > div > .k-icon {\n  vertical-align: top;\n}\n.k-scheduler-timecolumn > div > .k-i-arrow-e {\n  position: absolute;\n  right: -4px;\n}\n.k-scheduler-timecolumn .k-i-arrow-w {\n  margin-left: -4px;\n}\n.k-scheduler-mark {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  vertical-align: middle;\n  margin-right: .5em;\n}\n.k-scheduler-agendaday {\n  float: left;\n  margin: 0 .2em 0 0;\n  font-size: 3em;\n  font-weight: normal;\n}\n.k-scheduler-agendaweek {\n  display: block;\n  margin: .4em 0 0;\n  font-size: 1.1em;\n  font-style: normal;\n}\n.k-scheduler-agendadate {\n  font-size: .8em;\n}\n.k-scheduler-timecolumn {\n  white-space: nowrap;\n}\n.k-scheduler-edit-form .k-edit-form-container,\n.k-scheduler-timezones .k-edit-form-container {\n  width: 520px;\n}\n.k-scheduler-edit-form .k-edit-label {\n  width: 17%;\n}\n.k-scheduler-edit-form .k-edit-field {\n  width: 77%;\n}\n.k-scheduler-edit-form .k-textbox[name=\"title\"],\n.k-scheduler-edit-form textarea.k-textbox {\n  width: 100%;\n}\n.k-scheduler-edit-form textarea.k-textbox {\n  min-height: 4em;\n  resize: vertical;\n}\n.k-scheduler-edit-form > .k-edit-box:first-child .k-datetimepicker {\n  margin-right: 1em;\n}\n.km-pane-wrapper .k-scheduler-edit-form .k-edit-buttons {\n  clear: right;\n  margin-right: 2%;\n  margin-left: 2%;\n  padding: 0 0 .6em;\n}\n.k-edit-box {\n  float: left;\n}\n.k-edit-box + .k-edit-box {\n  float: right;\n}\n.k-scheduler-edit-form label + input {\n  margin-left: 1em;\n}\n.k-edit-field > ul.k-reset > li {\n  margin: .2em 0 .4em;\n  line-height: 2.4;\n}\n.k-edit-field > ul.k-reset.k-toolbar > li {\n  margin: 0;\n}\n.k-edit-field > ul.k-reset .k-widget {\n  margin-left: .8em;\n}\n.k-edit-field > ul.k-reset .k-numerictextbox,\n.k-edit-field span.k-recur-interval {\n  width: 5em;\n}\n.k-edit-field > ul.k-reset .k-dropdown,\n.k-edit-field > ul.k-reset .k-datepicker,\ndiv[name=\"recurrenceRule\"] > .k-dropdown {\n  width: 9em;\n}\n.k-scheduler-edit-form .k-edit-buttons .k-scheduler-delete {\n  float: left;\n}\n.k-popup-message {\n  margin: 0;\n  padding: 1em 0 2em;\n  text-align: center;\n}\n.k-scheduler-timezones .k-dropdown:first-child {\n  width: 100%;\n}\n.k-scheduler-timezones .k-dropdown + .k-dropdown {\n  margin: .5em 0 .7em;\n}\n/* Tooltip */\n.k-tooltip {\n  position: absolute;\n  z-index: 12000;\n  border-style: solid;\n  border-width: 1px;\n  padding: 4px 5px 4px 6px;\n  background-repeat: repeat-x;\n  min-width: 20px;\n  /*slider tooltip only*/\n  text-align: center;\n  /*slider tooltip only*/\n}\n.k-tooltip-button {\n  text-align: right;\n  height: 0;\n}\n.k-tooltip-content {\n  height: 100%;\n}\n.k-tooltip-closable .k-tooltip-content {\n  padding-right: 20px;\n}\nspan.k-tooltip {\n  position: static;\n  display: inline-block;\n  border-width: 1px;\n  padding: 2px 5px 1px 6px;\n}\n.k-invalid-msg {\n  display: none;\n}\n.k-callout {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n}\n.k-callout-n {\n  top: -13px;\n  left: 50%;\n}\n.k-callout-w {\n  top: 50%;\n  left: -13px;\n}\n.k-callout-s {\n  left: 50%;\n  bottom: -13px;\n}\n.k-callout-e {\n  top: 50%;\n  right: -13px;\n}\n.k-slider-tooltip .k-callout-n,\n.k-slider-tooltip .k-callout-s {\n  margin-left: -6px;\n}\n.k-slider-tooltip .k-callout-w,\n.k-slider-tooltip .k-callout-e {\n  margin-top: -6px;\n}\n.k-tooltip-validation .k-warning {\n  vertical-align: text-top;\n  margin-right: 3px;\n}\n.k-tooltip-validation {\n  z-index: 9999;\n}\n/* Toolbar */\n.k-toolbar {\n  position: relative;\n  display: block;\n  vertical-align: middle;\n  line-height: 2.9em;\n}\n.k-toolbar .k-button .k-icon,\n.k-toolbar .k-button .k-sprite,\n.k-overflow-container .k-button .k-icon,\n.k-overflow-container .k-button .k-sprite {\n  vertical-align: middle;\n  margin-top: -7px;\n  margin-bottom: -5px;\n}\n.k-toolbar .k-input {\n  line-height: inherit;\n  height: inherit;\n  padding-top: 2px;\n  padding-bottom: 2px;\n}\n.k-toolbar .k-input:before {\n  content: \"\\a0\";\n  display: inline-block;\n  width: 0;\n}\n.k-ie .k-toolbar .k-input {\n  height: 1.65em;\n}\n.k-toolbar .k-combobox .k-dropdown-wrap:before,\n.k-toolbar .k-picker-wrap:before,\n.k-toolbar .k-numeric-wrap:before {\n  display: none;\n}\n.k-overflow-container .k-sprite {\n  margin-left: -4px;\n}\n.k-toolbar-resizable {\n  overflow: hidden;\n  white-space: nowrap;\n}\n.k-toolbar > .k-align-left {\n  float: none;\n}\n.k-toolbar > .k-align-right {\n  float: right;\n}\n.k-toolbar > *,\n.k-toolbar .k-button {\n  display: inline-block;\n  vertical-align: middle;\n  line-height: 1.72em;\n}\n.k-toolbar .k-separator {\n  border-width: 0 0 0 1px;\n  border-style: solid;\n  width: 1px;\n  line-height: inherit;\n}\n.k-toolbar .k-button-group {\n  list-style-type: none;\n}\n.k-toolbar .k-button-group > li {\n  display: inline-block;\n}\n.k-toolbar .k-button-group .k-button {\n  margin: 0 0 0 -1px;\n  border-radius: 0;\n}\n.k-toolbar .k-button,\n.k-toolbar .k-split-button,\n.k-toolbar .k-button-group,\n.k-toolbar .k-widget,\n.k-toolbar .k-textbox,\n.k-toolbar label,\n.k-toolbar .k-separator {\n  margin: 0 .2em;\n  line-height: 1.72em;\n  vertical-align: middle;\n}\n.k-toolbar .k-split-button {\n  padding-left: 0;\n}\n.k-toolbar .k-split-button .k-button,\n.k-toolbar .k-button-group .k-group-start {\n  margin: 0;\n}\n.k-toolbar .k-split-button .k-split-button-arrow {\n  margin: 0 0 0 -1px;\n}\n.k-toolbar .k-overflow-anchor {\n  border-width: 0 0 0 1px;\n  border-style: solid;\n  height: 3em;\n  width: 3em;\n  line-height: inherit;\n  padding: 0 .5em;\n  margin: 0;\n  position: relative;\n  float: right;\n  border-radius: 0;\n}\n.k-overflow-container .k-item {\n  float: none;\n  border: 0;\n}\n.k-overflow-container .k-separator {\n  border-width: 0 0 1px;\n  border-style: solid;\n  height: 1px;\n  line-height: 0;\n  font-size: 0;\n  padding: 0;\n}\n.k-overflow-container .k-overflow-button,\n.k-split-container .k-button {\n  text-align: left;\n  display: block;\n  background: none;\n  border-color: transparent;\n  white-space: nowrap;\n}\n.k-split-container {\n  margin-top: -1px;\n}\n.k-overflow-container .k-button-group {\n  padding: 0;\n}\n.k-overflow-container .k-button-group > li {\n  display: block;\n}\n.k-overflow-container .k-overflow-group {\n  border-width: 1px 0;\n  border-style: solid;\n  border-radius: 0;\n  padding: 2px 0;\n  margin: 1px 0;\n}\n.k-overflow-container .k-overflow-hidden {\n  display: none;\n}\n.k-overflow-container .k-toolbar-first-visible,\n.k-overflow-container .k-overflow-group + .k-overflow-group,\n.k-overflow-container .k-separator + .k-overflow-group {\n  border-top: 0;\n  margin-top: 0;\n  padding-top: 1px;\n}\n.k-overflow-container .k-overflow-group + .k-separator {\n  display: none;\n}\n.k-overflow-container .k-toolbar-last-visible {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 1px;\n}\n/* Splitter */\n.k-splitter {\n  position: relative;\n  height: 300px;\n}\n.k-pane > .k-splitter {\n  border-width: 0;\n  overflow: hidden;\n}\n.k-splitter .k-pane {\n  overflow: hidden;\n}\n.k-splitter .k-scrollable {\n  overflow: auto;\n}\n.k-splitter .k-pane-loading {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: -8px 0 0 -8px;\n}\n.k-ghost-splitbar,\n.k-splitbar {\n  position: absolute;\n  border-style: solid;\n  font-size: 0;\n  outline: 0;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.k-splitter .k-ghost-splitbar-horizontal,\n.k-splitter .k-splitbar-horizontal {\n  top: 0;\n  width: 5px;\n  border-width: 0 1px;\n  background-repeat: repeat-y;\n}\n.k-ghost-splitbar-vertical,\n.k-splitbar-vertical {\n  left: 0;\n  height: 5px;\n  border-width: 1px 0;\n  background-repeat: repeat-x;\n}\n.k-splitbar-draggable-horizontal {\n  cursor: w-resize;\n}\n.k-splitbar-draggable-vertical {\n  cursor: n-resize;\n}\n.k-splitbar .k-resize-handle {\n  display: none;\n}\n.k-restricted-size-horizontal,\n.k-restricted-size-vertical {\n  background-color: #f00;\n}\n.k-splitbar-horizontal .k-icon {\n  position: absolute;\n  top: 50%;\n  width: 5px;\n  height: 20px;\n  margin-top: -10px;\n}\n.k-collapse-prev,\n.k-collapse-next,\n.k-expand-prev,\n.k-expand-next {\n  cursor: pointer;\n}\n.k-splitbar-horizontal .k-collapse-prev {\n  margin-top: -31px;\n}\n.k-splitbar-horizontal .k-collapse-next {\n  margin-top: 11px;\n}\n.k-splitbar-static-horizontal {\n  width: 1px;\n}\n.k-splitbar-static-vertical {\n  height: 1px;\n}\n.k-splitbar-vertical .k-icon {\n  position: absolute;\n  left: 50%;\n  width: 20px;\n  height: 5px;\n  margin-left: -10px;\n}\n.k-splitbar-vertical .k-collapse-prev {\n  margin-left: -31px;\n}\n.k-splitbar-vertical .k-collapse-next {\n  margin-left: 11px;\n}\n.k-splitbar-draggable-vertical .k-resize-handle,\n.k-splitbar-draggable-horizontal .k-resize-handle {\n  display: inline-block;\n}\n.k-splitbar-horizontal .k-resize-handle {\n  background-position: -165px -6px;\n}\n.k-splitbar-horizontal-hover > .k-resize-handle {\n  background-position: -181px -6px;\n}\n.k-splitbar-horizontal .k-collapse-prev,\n.k-splitbar-horizontal .k-expand-next {\n  background-position: -6px -174px;\n}\n.k-splitbar-horizontal-hover > .k-collapse-prev,\n.k-splitbar-horizontal-hover > .k-expand-next {\n  background-position: -22px -174px;\n}\n.k-splitbar-horizontal .k-collapse-next,\n.k-splitbar-horizontal .k-expand-prev {\n  background-position: -5px -142px;\n}\n.k-splitbar-horizontal-hover > .k-collapse-next,\n.k-splitbar-horizontal-hover > .k-expand-prev {\n  background-position: -21px -142px;\n}\n.k-splitbar-vertical .k-resize-handle {\n  background-position: -38px -309px;\n}\n.k-splitbar-vertical-hover > .k-resize-handle {\n  background-position: -70px -309px;\n}\n.k-splitbar-vertical .k-collapse-prev,\n.k-splitbar-vertical .k-expand-next {\n  background-position: 2px -134px;\n}\n.k-splitbar-vertical-hover > .k-collapse-prev,\n.k-splitbar-vertical-hover > .k-expand-next {\n  background-position: -14px -134px;\n}\n.k-splitbar-vertical .k-collapse-next,\n.k-splitbar-vertical .k-expand-prev {\n  background-position: 2px -165px;\n}\n.k-splitbar-vertical-hover > .k-collapse-next,\n.k-splitbar-vertical-hover > .k-expand-prev {\n  background-position: -14px -165px;\n}\n/* Upload */\nhtml .k-upload {\n  position: relative;\n}\nhtml .k-upload-empty {\n  border-width: 0;\n  background: none;\n}\n.k-dropzone em,\n.k-upload-button {\n  vertical-align: middle;\n}\n.k-ie7 .k-dropzone em,\n.k-ie7 .k-upload-button {\n  vertical-align: baseline;\n}\n.k-dropzone,\n.k-file {\n  position: relative;\n}\n.k-dropzone {\n  border-style: solid;\n  border-width: 0;\n  padding: .8em;\n  background-color: transparent;\n}\n.k-dropzone em {\n  visibility: hidden;\n  margin-left: .6em;\n}\n.k-dropzone-active em {\n  visibility: visible;\n}\n.k-upload-button {\n  position: relative;\n  min-width: 7.167em;\n  overflow: hidden !important;\n  /* important required by IE7 */\n  direction: ltr;\n}\n.k-upload-sync .k-upload-button,\n.k-ie7 .k-upload-button,\n.k-ie8 .k-upload-button,\n.k-ie9 .k-upload-button {\n  margin: .8em;\n}\n.k-upload-button input {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  font: 170px monospace !important;\n  /* critical for correct operation; larger values lead to ignoring or text layout problems in IE */\n  filter: alpha(opacity=0);\n  opacity: 0;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n}\n.k-upload-files {\n  margin: 0 0 .6em;\n  line-height: 2.66;\n  border-style: solid;\n  border-width: 1px 0 0;\n}\n.k-upload-files .k-button {\n  padding: 0;\n}\n.k-upload-files .k-button,\n.k-upload-status-total .k-icon {\n  margin-left: 8px;\n}\n.k-ie7 .k-upload-files .k-button {\n  line-height: 1;\n}\n/*IE7*/\n.k-upload .k-fail {\n  background-position: -161px -111px;\n}\n.k-si-refresh {\n  background-position: -160px -128px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-refresh,\n.k-state-hover > .k-si-refresh,\n.k-state-hover > * > .k-si-refresh,\n.k-button:not(.k-state-disabled):hover .k-si-refresh,\n.k-textbox:hover .k-si-refresh,\n.k-button:active .k-si-refresh {\n  background-position: -176px -128px;\n}\n.k-si-tick,\n.k-success {\n  background-position: -160px -96px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-tick,\n.k-link:not(.k-state-disabled):hover > .k-success,\n.k-state-hover > .k-si-tick,\n.k-state-hover > .k-success,\n.k-state-hover > * > .k-si-tick,\n.k-state-hover > * > .k-success,\n.k-button:not(.k-state-disabled):hover .k-si-tick,\n.k-button:not(.k-state-disabled):hover .k-success,\n.k-textbox:hover .k-si-tick,\n.k-textbox:hover .k-success,\n.k-button:active .k-si-tick,\n.k-button:active .k-success {\n  background-position: -176px -96px;\n}\n.k-si-cancel {\n  background-position: -160px -112px;\n}\n.k-link:not(.k-state-disabled):hover > .k-si-cancel,\n.k-state-hover > .k-si-cancel,\n.k-state-hover > * > .k-si-cancel,\n.k-button:not(.k-state-disabled):hover .k-si-cancel,\n.k-textbox:hover .k-si-cancel,\n.k-button:active .k-si-cancel {\n  background-position: -176px -112px;\n}\n.k-file {\n  border-style: solid;\n  border-width: 0 0 1px;\n  padding: .167em .167em .167em .8em;\n}\n.k-file .k-icon {\n  position: relative;\n}\n.k-file > .k-icon {\n  background-position: -112px -288px;\n}\n.k-link:not(.k-state-disabled):hover > .k-file > .k-icon,\n.k-state-hover > .k-file > .k-icon,\n.k-state-hover > * > .k-file > .k-icon,\n.k-button:not(.k-state-disabled):hover .k-file > .k-icon,\n.k-textbox:hover .k-file > .k-icon,\n.k-button:active .k-file > .k-icon {\n  background-position: -128px -288px;\n}\n.k-filename {\n  position: relative;\n  display: inline-block;\n  min-width: 10em;\n  max-width: 16.667em;\n  vertical-align: middle;\n  margin-left: 1em;\n  padding-bottom: 0.167em;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.k-upload-status {\n  position: absolute;\n  right: 12px;\n  top: .6em;\n  line-height: .7em;\n}\n.k-upload-status .k-button,\n.k-upload-status .k-warning {\n  vertical-align: text-bottom;\n}\n.k-dropzone .k-upload-status {\n  line-height: 2.4;\n}\n.k-upload-pct {\n  line-height: 20px;\n}\n.k-ie8 .k-upload-status-total {\n  line-height: 29px;\n}\n.k-progress {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n}\n.k-upload-selected {\n  min-width: 7.167em;\n  margin: 0.25em 0 0;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.k-ie7 .k-upload-selected {\n  min-width: 100px;\n}\n.k-upload-selected,\n.k-upload-cancel {\n  margin-bottom: .8em;\n}\n.k-upload-selected {\n  margin-left: .8em;\n  margin-right: .2em;\n}\n/* ImageBrowser */\n.k-toolbar-wrap .k-dropzone em,\n.k-toolbar-wrap .k-upload-files {\n  display: none;\n}\n.k-toolbar-wrap .k-dropzone {\n  border: 0;\n  padding: 0;\n}\n.k-toolbar-wrap .k-dropzone-active {\n  text-align: center;\n}\n.k-toolbar-wrap .k-dropzone-active em {\n  display: inline;\n  margin: 0;\n  font-size: 5em;\n  font-style: normal;\n}\n.k-toolbar-wrap .k-dropzone-active .k-upload-button {\n  display: none;\n}\n.k-filebrowser-dropzone {\n  z-index: 10010;\n  filter: alpha(opacity=40);\n  opacity: .4;\n  position: fixed;\n}\n.k-search-wrap {\n  position: relative;\n  float: right;\n  width: 20%;\n  padding: 0;\n}\n.k-search-wrap label {\n  position: absolute;\n  top: 0;\n  left: 4px;\n  line-height: 20px;\n  font-style: italic;\n}\n.k-search-wrap input.k-input {\n  padding-left: 0;\n  padding-right: 0;\n}\n.k-search-wrap .k-search {\n  position: absolute;\n  top: 4px;\n  right: 2px;\n  margin: 0;\n}\n.k-breadcrumbs {\n  position: relative;\n  float: left;\n  width: 79%;\n}\n.k-breadcrumbs-wrap {\n  position: absolute;\n  top: 3px;\n  left: 0;\n  z-index: 1;\n  padding-left: 5px;\n  line-height: 18px;\n}\n.k-breadcrumbs > .k-input {\n  width: 100%;\n  font-size: inherit;\n  font-family: inherit;\n  border: 0;\n}\n.k-breadcrumbs .k-link,\n.k-breadcrumbs-wrap .k-icon {\n  margin-top: 0;\n  text-decoration: none;\n  vertical-align: middle;\n  position: static;\n}\n.k-breadcrumbs .k-link:hover {\n  text-decoration: underline;\n}\n.k-filebrowser .k-breadcrumbs .k-i-seek-w {\n  text-decoration: none;\n  cursor: default;\n}\n.k-filebrowser .k-filebrowser-toolbar {\n  border-style: solid;\n  border-width: 1px;\n  margin: 8px 0 0;\n  padding: .25em;\n  line-height: 23px;\n  white-space: nowrap;\n  /*required by WebKit*/\n}\n.k-filebrowser .k-filebrowser-toolbar .k-button.k-state-disabled {\n  display: none;\n}\n.k-filebrowser .k-toolbar-wrap {\n  float: left;\n}\n.k-filebrowser .k-tiles-arrange {\n  float: right;\n}\n.k-filebrowser .k-tiles-arrange .k-dropdown {\n  width: 75px;\n}\n.k-filebrowser .k-upload {\n  float: left;\n  z-index: 10010;\n  border-width: 0;\n  background-color: transparent;\n}\n.k-filebrowser .k-upload .k-upload-status {\n  display: none;\n}\n.k-filebrowser .k-upload .k-upload-button {\n  width: auto;\n  margin-left: 0;\n  vertical-align: top;\n}\n.k-filebrowser .k-upload .k-icon {\n  vertical-align: bottom;\n}\n.k-ie7 .k-filebrowser .k-upload-button,\n.k-ie7 .k-filebrowser .k-upload .k-icon {\n  vertical-align: baseline;\n  position: relative;\n  top: 1px;\n}\n.k-ie7 .k-filebrowser .k-upload .k-icon {\n  top: 2px;\n}\n.k-ie7 .k-filebrowser .k-filebrowser-toolbar .k-button-icon {\n  vertical-align: middle;\n}\n.k-tiles {\n  clear: both;\n  height: 390px;\n  border-style: solid;\n  border-width: 1px;\n  border-top-width: 0;\n  margin: 0 0 1.4em;\n  padding: 9px;\n  overflow: auto;\n  line-height: 1.2;\n}\n.k-tile {\n  float: left;\n  width: 223px;\n  height: 88px;\n  overflow: hidden;\n  border-style: solid;\n  border-width: 1px;\n  margin: 1px;\n  padding: 0 0 4px;\n  background-position: 0 100px;\n  background-repeat: repeat-x;\n  cursor: pointer;\n}\n.k-tiles li.k-state-hover,\n.k-tiles li.k-state-selected {\n  background-position: 0 center;\n}\n.k-filebrowser .k-thumb {\n  float: left;\n  display: inline;\n  width: 80px;\n  height: 80px;\n  margin: 4px 10px 0 4px;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.k-filebrowser .k-file {\n  width: 80px;\n  height: 80px;\n}\n.k-filebrowser .k-image {\n  margin: 2px 0 0 2px;\n}\n.k-filebrowser .k-folder {\n  width: 80px;\n  height: 80px;\n  background-position: 0 -200px;\n  background-repeat: no-repeat;\n}\n.k-filebrowser .k-loading {\n  margin: 35px 0 0 33px;\n}\n.k-tile strong,\n.k-tile input {\n  margin: 10px 0 4px;\n  font-weight: normal;\n}\n.k-tile strong {\n  float: left;\n  width: 120px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.k-tile input {\n  width: 100px;\n}\n.k-tile strong,\n.k-tile input,\n.k-tile .k-filesize {\n  display: block;\n}\n.k-filebrowser .k-form-text-row {\n  text-align: right;\n}\n.k-filebrowser .k-form-text-row label {\n  width: 14%;\n}\n.k-filebrowser .k-form-text-row input {\n  width: 80%;\n}\n.k-tile-empty {\n  margin: 160px 0 0;\n}\n.k-tile-empty .k-dialog-upload {\n  font-weight: bold;\n  font-size: 120%;\n}\n.k-tile-empty strong {\n  display: block;\n  margin: 0 0 0.2em;\n  font-size: 3em;\n  font-weight: normal;\n}\n.k-tile-empty,\n.k-tile-empty .k-button-wrapper {\n  text-align: center;\n}\n/* IE7 inline-block behavior */\n.k-ie7 .k-button,\n.k-ie7 .k-grid-filter,\n.k-ie7 .k-header-column-menu,\n.k-ie7 .k-grid .k-pager-numbers,\n.k-ie7 .k-grid .k-status-text,\n.k-ie7 .k-pager-numbers .k-link,\n.k-ie7 .k-pager-numbers span,\n.k-ie7 .k-pager-numbers input,\n.k-ie7 .k-grouping-row p,\n.k-ie7 .k-grouping-header a,\n.k-ie7 .k-grouping-header .k-group-indicator,\n.k-ie7 .k-grouping-header .k-link,\n.k-ie7 .k-grouping-header .k-button,\n.k-ie7 .k-grid-actions,\n.k-ie7 .k-edit-label,\n.k-ie7 .k-edit-field,\n.k-ie7 .k-edit-form-container .editor-label,\n.k-ie7 .k-edit-form-container .editor-field,\n.k-ie7 .k-combobox,\n.k-ie7 .k-dropdown,\n.k-ie7 .k-selectbox,\n.k-ie7 .k-picker-wrap .k-select,\n.k-ie7 .k-dropdown-wrap .k-select,\n.k-ie7 .k-numerictextbox,\n.k-ie7 .k-timepicker,\n.k-ie7 .k-datepicker,\n.k-ie7 .k-datetimepicker,\n.k-ie7 .k-colorpicker,\n.k-ie7 .k-calendar,\n.k-ie7 .k-calendar .k-nav-fast,\n.k-ie7 .k-treeview .k-icon,\n.k-ie7 .k-treeview .k-image,\n.k-ie7 .k-treeview .k-sprite,\n.k-ie7 .k-treeview .k-in,\n.k-ie7 .k-colorpicker,\n.k-ie7 .k-colorpicker .k-tool-icon,\n.k-ie7 .k-palette.k-reset,\n.k-ie7 .k-editor-dialog .k-button,\n.k-ie7 .k-form-text-row label,\n.k-ie7 .k-tabstrip-items .k-item,\n.k-ie7 .k-tabstrip-items .k-link,\n.k-ie7 .k-slider-horizontal,\n.k-ie7 .k-splitbar-draggable-vertical .k-resize-handle,\n.k-ie7 .k-splitbar-draggable-horizontal .k-resize-handle,\n.k-ie7 .t-filename,\n.k-ie7 div.k-window,\n.k-ie7 .k-window-titlebar .k-window-action,\n.k-ie7 .k-scheduler-toolbar > ul > li,\n.k-ie7 .k-scheduler-footer > ul > li,\n.k-ie7 .k-scheduler-toolbar > ul > li,\n.k-ie7 .k-scheduler-footer > ul > li,\n.k-ie7 .k-event:hover .k-event-delete,\n.k-ie7 tr:hover > td > .k-task .k-event-delete,\n.k-ie7 .k-progressbar,\n.k-ie7 .k-progressbar-horizontal .k-item,\n.k-ie7 .k-progress-status,\n.k-ie7 .k-grid-header-locked,\n.k-ie7 .k-grid-content-locked,\n.k-ie7 .k-grid-header-locked + .k-grid-header-wrap,\n.k-ie7 .k-grid-content-locked + .k-grid-content,\n.k-ie7 .k-grid-footer-locked,\n.k-ie7 .k-gantt-layout,\n.k-ie7 .k-gantt-toolbar > ul > li,\n.k-ie7 .k-gantt-toolbar .k-link,\n.k-ie7 .k-task-summary,\n.k-ie7 .k-task-actions:first-child > .k-link,\n.k-ie7 .k-task-wrap:hover .k-task-delete,\n.k-ie7 .k-task-wrap-active .k-task-delete {\n  display: inline;\n  zoom: 1;\n}\n.k-ie7 .k-treeview .k-item,\n.k-ie7 .k-treeview .k-group {\n  zoom: 1;\n}\n.k-ie7 .k-edit-field > .k-textbox {\n  text-indent: 0;\n}\n/* common mobile css */\n.km-root,\n.km-pane,\n.km-pane-wrapper {\n  width: 100%;\n  height: 100%;\n  -ms-touch-action: none;\n  -ms-content-zooming: none;\n  -ms-user-select: none;\n  -webkit-user-select: none;\n  -webkit-text-size-adjust: none;\n  -moz-text-size-adjust: none;\n  text-size-adjust: none;\n}\n.km-pane-wrapper {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n}\n.km-pane,\n.km-shim {\n  font-family: sans-serif;\n}\n.km-pane {\n  overflow-x: hidden;\n}\n.km-view {\n  top: 0;\n  left: 0;\n  position: absolute;\n  display: -moz-box;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  height: 100%;\n  width: 100%;\n  -moz-box-orient: vertical;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-align-items: stretch;\n  align-items: stretch;\n  -webkit-align-content: stretch;\n  align-content: stretch;\n  vertical-align: top;\n}\n.k-ff .km-view,\n.k-ff .km-pane {\n  overflow: hidden;\n}\n.k-ff18 .km-view,\n.k-ff18 .km-pane,\n.k-ff19 .km-view,\n.k-ff19 .km-pane,\n.k-ff20 .km-view,\n.k-ff20 .km-pane,\n.k-ff21 .km-view,\n.k-ff21 .km-pane {\n  position: relative;\n}\n.k-ff .km-view {\n  display: -moz-inline-box;\n  display: flex;\n}\n.km-content {\n  min-height: 1px;\n  -moz-box-flex: 1;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -moz-box-align: stretch;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  flex-align: stretch;\n  display: block;\n  width: auto;\n  overflow: hidden;\n  position: relative;\n}\n.km-actionsheet > li {\n  list-style-type: none;\n  padding: inherit 1em;\n  line-height: 2em;\n}\n.km-actionsheet {\n  padding: 0;\n  margin: 0;\n}\n.km-shim {\n  left: 0;\n  bottom: 0;\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.6);\n  z-index: 10001;\n}\n.km-shim .k-animation-container,\n.km-actionsheet-wrapper {\n  width: 100%;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 0;\n}\n.km-shim .k-animation-container {\n  width: auto;\n}\n/* /common mobile css */\n.km-pane-wrapper .k-grid-edit-form > .km-header,\n.km-pane-wrapper .k-grid-column-menu > .km-header,\n.km-pane-wrapper .k-grid-filter-menu > .km-header,\n.km-pane-wrapper .k-scheduler-edit-form > .km-header {\n  border-style: solid;\n  border-width: 1px;\n  padding: .3em .6em;\n  text-align: center;\n  width: auto;\n  line-height: 2em;\n}\n.k-ie .km-pane-wrapper .k-scheduler > .k-scheduler-toolbar,\n.k-ie .km-pane-wrapper .k-scheduler > .k-scheduler-footer {\n  line-height: 2em;\n}\n.km-pane-wrapper .k-grid-edit-form .k-multiselect,\n.km-pane-wrapper .k-scheduler-edit-form .k-multiselect {\n  width: 15em;\n}\n.km-pane-wrapper .k-grid-edit-form .k-dropdown-wrap,\n.km-pane-wrapper .k-scheduler-edit-form .k-dropdown-wrap {\n  display: block;\n}\n.km-pane-wrapper .k-grid-column-menu .k-done,\n.km-pane-wrapper .k-grid-filter-menu .k-submit,\n.km-pane-wrapper .k-grid-edit-form .k-grid-update,\n.km-pane-wrapper .k-scheduler-edit-form .k-scheduler-update {\n  float: right;\n}\n.km-pane-wrapper .k-grid-filter-menu .k-cancel,\n.km-pane-wrapper .k-grid-edit-form .k-grid-cancel,\n.km-pane-wrapper .k-scheduler-edit-form .k-scheduler-cancel {\n  float: left;\n}\n/* Actiosheet Styles */\n.km-pane-wrapper .k-scheduler-edit-form .k-scheduler-delete,\n*:not(.km-pane) > .km-shim .km-actionsheet .k-button {\n  display: block;\n  text-align: center;\n}\n*:not(.km-pane) > .km-shim .km-actionsheet .k-button {\n  font-size: 1.4em;\n  margin: .3em 1em;\n}\n*:not(.km-pane) > .km-shim .km-actionsheet-title {\n  text-align: center;\n  line-height: 3em;\n  margin-bottom: -0.3em;\n}\n*:not(.km-pane) > .km-shim > .k-animation-container {\n  margin: 0 !important;\n  padding: 0 !important;\n  left: 0 !important;\n}\n/* Adaptive Grid */\n.km-pane-wrapper > div.km-pane {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  font-weight: normal;\n}\n.km-pane-wrapper .k-popup-edit-form .km-content > .km-scroll-container,\n.km-pane-wrapper .k-grid-edit-form .km-content > .km-scroll-container,\n.km-pane-wrapper .k-grid-column-menu .km-content > .km-scroll-container,\n.km-pane-wrapper .k-grid-filter-menu .km-content > .km-scroll-container {\n  position: absolute;\n  width: 100%;\n  min-height: 100%;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field {\n  width: 74%;\n}\n.km-pane-wrapper .k-grid-edit-form .k-popup-edit-form,\n.km-pane-wrapper .k-grid-edit-form .k-edit-form-container {\n  width: auto;\n}\n.km-pane-wrapper .k-filter-menu .k-button {\n  width: 100%;\n  margin: 0;\n}\n.k-grid-mobile {\n  border-width: 0;\n}\n.k-grid-mobile .k-resize-handle-inner {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  left: -7px;\n  width: 17px;\n  height: 17px;\n  border-style: solid;\n  border-width: 2px;\n  border-radius: 10px;\n}\n.k-grid-mobile .k-resize-handle-inner:before {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  margin-top: -3px;\n  left: 1px;\n  width: 6px;\n  height: 6px;\n  background-position: -5px -53px;\n}\n.k-grid-mobile .k-resize-handle-inner:after {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  margin-top: -3px;\n  right: 1px;\n  width: 6px;\n  height: 6px;\n  background-position: -5px -21px;\n}\n/* Adaptive Grid & Scheduler */\n.km-pane-wrapper .km-pane * {\n  -webkit-background-clip: border-box;\n  background-clip: border-box;\n}\n.km-pane-wrapper .km-pane .k-mobile-list,\n.km-pane-wrapper .k-mobile-list ul {\n  padding: 0;\n  margin: 0;\n  list-style-type: none;\n  border-radius: 0;\n  background: none;\n}\n.km-pane-wrapper .km-switch {\n  top: 50%;\n  right: .8rem;\n  position: absolute;\n  margin-top: -1.1rem;\n}\n.km-pane-wrapper .k-mobile-list .k-state-disabled {\n  opacity: 1;\n}\n.km-pane-wrapper .k-mobile-list .k-state-disabled > * {\n  opacity: .7;\n}\n.km-pane-wrapper .k-mobile-list .k-item,\n.km-pane-wrapper .k-mobile-list .k-item > .k-link,\n.km-pane-wrapper .k-mobile-list .k-item > .k-label,\n.km-pane-wrapper .k-mobile-list .k-edit-label {\n  display: block;\n  position: relative;\n  list-style-type: none;\n  vertical-align: middle;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: .5em 0 .5em 1em;\n  font-size: 1em;\n}\n.km-pane-wrapper .k-edit-form-container,\n.km-pane-wrapper .k-scheduler-edit-form .km-scroll-container {\n  padding-top: 1em;\n  width: 100%;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-label {\n  position: absolute;\n  margin: 0;\n  float: none;\n  clear: none;\n  width: 100%;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field,\n.km-pane-wrapper .k-mobile-list .k-edit-label label {\n  display: block;\n  text-align: left;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: .1em 0;\n  margin: 0;\n}\n.km-pane-wrapper .k-mobile-list .k-item,\n.km-pane-wrapper .k-mobile-list .k-edit-field,\n.km-pane-wrapper .k-mobile-list .k-edit-label {\n  font-size: 1em;\n  line-height: 1.6em;\n  overflow: hidden;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field,\n.km-pane-wrapper .k-mobile-list .k-edit-label {\n  width: 100%;\n  float: none;\n  clear: none;\n  min-height: 2.7em;\n}\n.km-pane-wrapper .km-header .k-icon,\n.km-pane-wrapper .k-grid-toolbar .k-icon,\n.km-pane-wrapper .k-grid-edit .k-icon,\n.km-pane-wrapper .k-grid-delete .k-icon {\n  display: none;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field {\n  padding: .5em 0;\n}\n.km-pane-wrapper .k-mobile-list .k-scheduler-toolbar {\n  padding: .3em 0;\n}\n.km-pane-wrapper .k-mobile-list .k-scheduler-toolbar ul li {\n  line-height: 2em;\n}\n.km-pane-wrapper .k-mobile-list .k-item > * {\n  line-height: normal;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-buttons,\n.km-pane-wrapper .k-mobile-list .k-button-container {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: .5em 1em;\n  margin: 0;\n}\n.km-pane-wrapper .k-mobile-list > ul > li > .k-link,\n.km-pane-wrapper .k-mobile-list .k-filter-help-text > li > .k-link,\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-label:nth-child(3),\n.km-pane-wrapper #recurrence .km-scroll-container > .k-edit-label:first-child {\n  display: block;\n  padding: .2em 1em;\n  font-size: .95em;\n  position: -webkit-sticky;\n  margin: 0;\n  font-weight: normal;\n  line-height: 2em;\n  background: transparent;\n  border-top: 1em solid transparent;\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-label:nth-child(3),\n.km-pane-wrapper #recurrence .km-scroll-container > .k-edit-label:first-child {\n  position: relative;\n}\n.km-pane-wrapper .k-mobile-list .k-item:first-child {\n  border-top: 0;\n}\n.km-pane-wrapper .k-mobile-list .k-item:last-child {\n  border-bottom: 0;\n}\n.km-pane-wrapper .k-mobile-list .k-item > .k-link,\n.km-pane-wrapper .k-mobile-list .k-item > .k-label {\n  line-height: inherit;\n  text-decoration: none;\n  margin: -0.5em 0 -0.5em -1em;\n}\n/* Mobile list form elements */\n.k-check[type=checkbox],\n.k-check[type=radio],\n.k-mobile-list .k-edit-field [type=checkbox],\n.k-mobile-list .k-edit-field [type=radio] {\n  appearance: none;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  background-color: transparent;\n}\n.km-pane-wrapper .k-mobile-list .k-link .k-check,\n.km-pane-wrapper .k-mobile-list .k-label .k-check,\n.k-mobile-list .k-edit-field [type=checkbox],\n.k-mobile-list .k-edit-field [type=radio] {\n  border: 0;\n  font-size: inherit;\n  width: 13px;\n  height: 13px;\n  margin: .26em 1em .26em 0;\n}\n.k-ie .km-pane-wrapper .k-icon,\n.k-ie .km-pane-wrapper .k-mobile-list .k-link .k-check,\n.k-ie .km-pane-wrapper .k-mobile-list .k-label .k-check,\n.k-ie .k-mobile-list .k-edit-field [type=checkbox],\n.k-ie .k-mobile-list .k-edit-field [type=radio] {\n  font-size: inherit;\n  text-indent: -9999px;\n  width: 1.01em;\n  height: 1em;\n}\n/* IE Adaptive icons in em */\n@media screen and (-ms-high-contrast: active) and (-ms-high-contrast: none) {\n  .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n {\n    background-position: 0em 0em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-n {\n    background-position: -1em 0em;\n  }\n  .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s {\n    background-position: 0em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-select .k-link span.k-i-arrow-s {\n    background-position: -1em -2em;\n  }\n  .km-pane-wrapper .k-state-selected .k-i-arrow-n {\n    background-position: -1em 0em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-state-selected .k-i-arrow-n,\n  .k-state-hover > .km-pane-wrapper .k-state-selected .k-i-arrow-n,\n  .k-state-hover > * > .km-pane-wrapper .k-state-selected .k-i-arrow-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-state-selected .k-i-arrow-n,\n  .k-textbox:hover .km-pane-wrapper .k-state-selected .k-i-arrow-n,\n  .k-button:active .km-pane-wrapper .k-state-selected .k-i-arrow-n {\n    background-position: -2em 0em;\n  }\n  .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n {\n    background-position: -1em 0em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n {\n    background-position: -2em 0em;\n  }\n  .km-pane-wrapper .k-state-selected .k-i-arrow-s {\n    background-position: -1em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-state-selected .k-i-arrow-s,\n  .k-state-hover > .km-pane-wrapper .k-state-selected .k-i-arrow-s,\n  .k-state-hover > * > .km-pane-wrapper .k-state-selected .k-i-arrow-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-state-selected .k-i-arrow-s,\n  .k-textbox:hover .km-pane-wrapper .k-state-selected .k-i-arrow-s,\n  .k-button:active .km-pane-wrapper .k-state-selected .k-i-arrow-s {\n    background-position: -2em -2em;\n  }\n  .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s {\n    background-position: -1em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-state-hover > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-state-hover > * > .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-textbox:hover .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,\n  .k-button:active .km-pane-wrapper .k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s {\n    background-position: -2em -2em;\n  }\n  .km-pane-wrapper .k-i-arrow-n {\n    background-position: 0em 0em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-n,\n  .k-state-hover > .km-pane-wrapper .k-i-arrow-n,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrow-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-n,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrow-n,\n  .k-button:active .km-pane-wrapper .k-i-arrow-n {\n    background-position: -1em 0em;\n  }\n  .km-pane-wrapper .k-i-arrow-e {\n    background-position: 0em -1em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-e,\n  .k-state-hover > .km-pane-wrapper .k-i-arrow-e,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrow-e,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-e,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrow-e,\n  .k-button:active .km-pane-wrapper .k-i-arrow-e {\n    background-position: -1em -1em;\n  }\n  .k-rtl .km-pane-wrapper .k-i-arrow-w {\n    background-position: 0em -1em;\n  }\n  .k-rtl .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-w,\n  .k-rtl .k-state-hover > .km-pane-wrapper .k-i-arrow-w,\n  .k-rtl .k-state-hover > * > .km-pane-wrapper .k-i-arrow-w,\n  .k-rtl .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-w,\n  .k-rtl .k-textbox:hover .km-pane-wrapper .k-i-arrow-w,\n  .k-rtl .k-button:active .km-pane-wrapper .k-i-arrow-w {\n    background-position: -1em -1em;\n  }\n  .km-pane-wrapper .k-i-arrow-s {\n    background-position: 0em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-s,\n  .k-state-hover > .km-pane-wrapper .k-i-arrow-s,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrow-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-s,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrow-s,\n  .k-button:active .km-pane-wrapper .k-i-arrow-s {\n    background-position: -1em -2em;\n  }\n  .km-pane-wrapper .k-i-arrow-w {\n    background-position: 0em -3em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-w,\n  .k-state-hover > .km-pane-wrapper .k-i-arrow-w,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrow-w,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-w,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrow-w,\n  .k-button:active .km-pane-wrapper .k-i-arrow-w {\n    background-position: -1em -3em;\n  }\n  .k-rtl .km-pane-wrapper .k-i-arrow-e {\n    background-position: 0em -3em;\n  }\n  .k-rtl .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrow-e,\n  .k-rtl .k-state-hover > .km-pane-wrapper .k-i-arrow-e,\n  .k-rtl .k-state-hover > * > .km-pane-wrapper .k-i-arrow-e,\n  .k-rtl .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrow-e,\n  .k-rtl .k-textbox:hover .km-pane-wrapper .k-i-arrow-e,\n  .k-rtl .k-button:active .km-pane-wrapper .k-i-arrow-e {\n    background-position: -1em -3em;\n  }\n  .km-pane-wrapper .k-i-seek-n {\n    background-position: 0em -4em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-n,\n  .k-state-hover > .km-pane-wrapper .k-i-seek-n,\n  .k-state-hover > * > .km-pane-wrapper .k-i-seek-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-n,\n  .k-textbox:hover .km-pane-wrapper .k-i-seek-n,\n  .k-button:active .km-pane-wrapper .k-i-seek-n {\n    background-position: -1em -4em;\n  }\n  .km-pane-wrapper .k-i-seek-e {\n    background-position: 0em -5em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-e,\n  .k-state-hover > .km-pane-wrapper .k-i-seek-e,\n  .k-state-hover > * > .km-pane-wrapper .k-i-seek-e,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-e,\n  .k-textbox:hover .km-pane-wrapper .k-i-seek-e,\n  .k-button:active .km-pane-wrapper .k-i-seek-e {\n    background-position: -1em -5em;\n  }\n  .k-rtl .km-pane-wrapper .k-i-seek-w {\n    background-position: 0em -5em;\n  }\n  .k-rtl .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-w,\n  .k-rtl .k-state-hover > .km-pane-wrapper .k-i-seek-w,\n  .k-rtl .k-state-hover > * > .km-pane-wrapper .k-i-seek-w,\n  .k-rtl .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-w,\n  .k-rtl .k-textbox:hover .km-pane-wrapper .k-i-seek-w,\n  .k-rtl .k-button:active .km-pane-wrapper .k-i-seek-w {\n    background-position: -1em -5em;\n  }\n  .km-pane-wrapper .k-i-seek-s {\n    background-position: 0em -6em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-s,\n  .k-state-hover > .km-pane-wrapper .k-i-seek-s,\n  .k-state-hover > * > .km-pane-wrapper .k-i-seek-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-s,\n  .k-textbox:hover .km-pane-wrapper .k-i-seek-s,\n  .k-button:active .km-pane-wrapper .k-i-seek-s {\n    background-position: -1em -6em;\n  }\n  .km-pane-wrapper .k-i-seek-w {\n    background-position: 0em -7em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-w,\n  .k-state-hover > .km-pane-wrapper .k-i-seek-w,\n  .k-state-hover > * > .km-pane-wrapper .k-i-seek-w,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-w,\n  .k-textbox:hover .km-pane-wrapper .k-i-seek-w,\n  .k-button:active .km-pane-wrapper .k-i-seek-w {\n    background-position: -1em -7em;\n  }\n  .k-rtl .km-pane-wrapper .k-i-seek-e {\n    background-position: 0em -7em;\n  }\n  .k-rtl .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-seek-e,\n  .k-rtl .k-state-hover > .km-pane-wrapper .k-i-seek-e,\n  .k-rtl .k-state-hover > * > .km-pane-wrapper .k-i-seek-e,\n  .k-rtl .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-seek-e,\n  .k-rtl .k-textbox:hover .km-pane-wrapper .k-i-seek-e,\n  .k-rtl .k-button:active .km-pane-wrapper .k-i-seek-e {\n    background-position: -1em -7em;\n  }\n  .km-pane-wrapper .k-i-arrowhead-n {\n    background-position: 0em -16em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrowhead-n,\n  .k-state-hover > .km-pane-wrapper .k-i-arrowhead-n,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrowhead-n,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrowhead-n,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrowhead-n,\n  .k-button:active .km-pane-wrapper .k-i-arrowhead-n {\n    background-position: -1em -16em;\n  }\n  .km-pane-wrapper .k-i-arrowhead-e {\n    background-position: 0em -17em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrowhead-e,\n  .k-state-hover > .km-pane-wrapper .k-i-arrowhead-e,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrowhead-e,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrowhead-e,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrowhead-e,\n  .k-button:active .km-pane-wrapper .k-i-arrowhead-e {\n    background-position: -1em -17em;\n  }\n  .km-pane-wrapper .k-i-arrowhead-s {\n    background-position: 0em -18em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrowhead-s,\n  .k-state-hover > .km-pane-wrapper .k-i-arrowhead-s,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrowhead-s,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrowhead-s,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrowhead-s,\n  .k-button:active .km-pane-wrapper .k-i-arrowhead-s {\n    background-position: -1em -18em;\n  }\n  .km-pane-wrapper .k-i-arrowhead-w {\n    background-position: 0em -19em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-arrowhead-w,\n  .k-state-hover > .km-pane-wrapper .k-i-arrowhead-w,\n  .k-state-hover > * > .km-pane-wrapper .k-i-arrowhead-w,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-arrowhead-w,\n  .k-textbox:hover .km-pane-wrapper .k-i-arrowhead-w,\n  .k-button:active .km-pane-wrapper .k-i-arrowhead-w {\n    background-position: -1em -19em;\n  }\n  .km-pane-wrapper .k-i-expand,\n  .km-pane-wrapper .k-plus,\n  .km-pane-wrapper .k-plus-disabled {\n    background-position: 0em -12em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-expand,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-plus,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-plus-disabled,\n  .k-state-hover > .km-pane-wrapper .k-i-expand,\n  .k-state-hover > .km-pane-wrapper .k-plus,\n  .k-state-hover > .km-pane-wrapper .k-plus-disabled,\n  .k-state-hover > * > .km-pane-wrapper .k-i-expand,\n  .k-state-hover > * > .km-pane-wrapper .k-plus,\n  .k-state-hover > * > .km-pane-wrapper .k-plus-disabled,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-expand,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-plus,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-plus-disabled,\n  .k-textbox:hover .km-pane-wrapper .k-i-expand,\n  .k-textbox:hover .km-pane-wrapper .k-plus,\n  .k-textbox:hover .km-pane-wrapper .k-plus-disabled,\n  .k-button:active .km-pane-wrapper .k-i-expand,\n  .k-button:active .km-pane-wrapper .k-plus,\n  .k-button:active .km-pane-wrapper .k-plus-disabled {\n    background-position: -1em -12em;\n  }\n  .km-pane-wrapper .k-i-expand-w,\n  .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-rtl .km-pane-wrapper .k-plus,\n  .k-rtl .km-pane-wrapper .k-plus-disabled {\n    background-position: 0em -13em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-expand-w,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-plus,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-plus-disabled,\n  .k-state-hover > .km-pane-wrapper .k-i-expand-w,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-plus,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-plus-disabled,\n  .k-state-hover > * > .km-pane-wrapper .k-i-expand-w,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-plus,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-plus-disabled,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-expand-w,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-plus,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-plus-disabled,\n  .k-textbox:hover .km-pane-wrapper .k-i-expand-w,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-plus,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-plus-disabled,\n  .k-button:active .km-pane-wrapper .k-i-expand-w,\n  .k-button:active .k-rtl .km-pane-wrapper .k-i-expand,\n  .k-button:active .k-rtl .km-pane-wrapper .k-plus,\n  .k-button:active .k-rtl .km-pane-wrapper .k-plus-disabled {\n    background-position: -1em -13em;\n  }\n  .km-pane-wrapper .k-i-collapse,\n  .km-pane-wrapper .k-minus,\n  .km-pane-wrapper .k-minus-disabled {\n    background-position: 0em -14em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-collapse,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-minus,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-minus-disabled,\n  .k-state-hover > .km-pane-wrapper .k-i-collapse,\n  .k-state-hover > .km-pane-wrapper .k-minus,\n  .k-state-hover > .km-pane-wrapper .k-minus-disabled,\n  .k-state-hover > * > .km-pane-wrapper .k-i-collapse,\n  .k-state-hover > * > .km-pane-wrapper .k-minus,\n  .k-state-hover > * > .km-pane-wrapper .k-minus-disabled,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-collapse,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-minus,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-minus-disabled,\n  .k-textbox:hover .km-pane-wrapper .k-i-collapse,\n  .k-textbox:hover .km-pane-wrapper .k-minus,\n  .k-textbox:hover .km-pane-wrapper .k-minus-disabled,\n  .k-button:active .km-pane-wrapper .k-i-collapse,\n  .k-button:active .km-pane-wrapper .k-minus,\n  .k-button:active .km-pane-wrapper .k-minus-disabled {\n    background-position: -1em -14em;\n  }\n  .km-pane-wrapper .k-i-collapse-w,\n  .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-rtl .km-pane-wrapper .k-minus,\n  .k-rtl .km-pane-wrapper .k-minus-disabled {\n    background-position: 0em -15em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-collapse-w,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-minus,\n  .k-link:not(.k-state-disabled):hover > .k-rtl .km-pane-wrapper .k-minus-disabled,\n  .k-state-hover > .km-pane-wrapper .k-i-collapse-w,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-minus,\n  .k-state-hover > .k-rtl .km-pane-wrapper .k-minus-disabled,\n  .k-state-hover > * > .km-pane-wrapper .k-i-collapse-w,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-minus,\n  .k-state-hover > * > .k-rtl .km-pane-wrapper .k-minus-disabled,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-collapse-w,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-minus,\n  .k-button:not(.k-state-disabled):hover .k-rtl .km-pane-wrapper .k-minus-disabled,\n  .k-textbox:hover .km-pane-wrapper .k-i-collapse-w,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-minus,\n  .k-textbox:hover .k-rtl .km-pane-wrapper .k-minus-disabled,\n  .k-button:active .km-pane-wrapper .k-i-collapse-w,\n  .k-button:active .k-rtl .km-pane-wrapper .k-i-collapse,\n  .k-button:active .k-rtl .km-pane-wrapper .k-minus,\n  .k-button:active .k-rtl .km-pane-wrapper .k-minus-disabled {\n    background-position: -1em -15em;\n  }\n  .km-pane-wrapper .k-i-pencil,\n  .km-pane-wrapper .k-edit {\n    background-position: -2em 0em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-pencil,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-edit,\n  .k-state-hover > .km-pane-wrapper .k-i-pencil,\n  .k-state-hover > .km-pane-wrapper .k-edit,\n  .k-state-hover > * > .km-pane-wrapper .k-i-pencil,\n  .k-state-hover > * > .km-pane-wrapper .k-edit,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-pencil,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-edit,\n  .k-textbox:hover .km-pane-wrapper .k-i-pencil,\n  .k-textbox:hover .km-pane-wrapper .k-edit,\n  .k-button:active .km-pane-wrapper .k-i-pencil,\n  .k-button:active .km-pane-wrapper .k-edit {\n    background-position: -3em 0em;\n  }\n  .km-pane-wrapper .k-i-close,\n  .km-pane-wrapper .k-delete,\n  .km-pane-wrapper .k-group-delete {\n    background-position: -2em -1em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-close,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-delete,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-group-delete,\n  .k-state-hover > .km-pane-wrapper .k-i-close,\n  .k-state-hover > .km-pane-wrapper .k-delete,\n  .k-state-hover > .km-pane-wrapper .k-group-delete,\n  .k-state-hover > * > .km-pane-wrapper .k-i-close,\n  .k-state-hover > * > .km-pane-wrapper .k-delete,\n  .k-state-hover > * > .km-pane-wrapper .k-group-delete,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-close,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-delete,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-group-delete,\n  .k-textbox:hover .km-pane-wrapper .k-i-close,\n  .k-textbox:hover .km-pane-wrapper .k-delete,\n  .k-textbox:hover .km-pane-wrapper .k-group-delete,\n  .k-button:active .km-pane-wrapper .k-i-close,\n  .k-button:active .km-pane-wrapper .k-delete,\n  .k-button:active .km-pane-wrapper .k-group-delete {\n    background-position: -3em -1em;\n  }\n  .km-pane-wrapper .k-si-close {\n    background-position: -10em -5em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-si-close,\n  .k-state-hover > .km-pane-wrapper .k-si-close,\n  .k-state-hover > * > .km-pane-wrapper .k-si-close,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-si-close,\n  .k-textbox:hover .km-pane-wrapper .k-si-close,\n  .k-button:active .km-pane-wrapper .k-si-close {\n    background-position: -11em -5em;\n  }\n  .km-pane-wrapper .k-multiselect .k-delete {\n    background-position: -10em -5em;\n  }\n  .km-pane-wrapper .k-multiselect .k-state-hover .k-delete {\n    background-position: -11em -5em;\n  }\n  .km-pane-wrapper .k-i-tick,\n  .km-pane-wrapper .k-insert,\n  .km-pane-wrapper .k-update {\n    background-position: -2em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-tick,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-insert,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-update,\n  .k-state-hover > .km-pane-wrapper .k-i-tick,\n  .k-state-hover > .km-pane-wrapper .k-insert,\n  .k-state-hover > .km-pane-wrapper .k-update,\n  .k-state-hover > * > .km-pane-wrapper .k-i-tick,\n  .k-state-hover > * > .km-pane-wrapper .k-insert,\n  .k-state-hover > * > .km-pane-wrapper .k-update,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-tick,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-insert,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-update,\n  .k-textbox:hover .km-pane-wrapper .k-i-tick,\n  .k-textbox:hover .km-pane-wrapper .k-insert,\n  .k-textbox:hover .km-pane-wrapper .k-update,\n  .k-button:active .km-pane-wrapper .k-i-tick,\n  .k-button:active .km-pane-wrapper .k-insert,\n  .k-button:active .km-pane-wrapper .k-update {\n    background-position: -3em -2em;\n  }\n  .km-pane-wrapper .k-check:checked,\n  .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio] {\n    background-position: -2em -2em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-check:checked,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio],\n  .k-state-hover > .km-pane-wrapper .k-check:checked,\n  .k-state-hover > .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-state-hover > .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio],\n  .k-state-hover > * > .km-pane-wrapper .k-check:checked,\n  .k-state-hover > * > .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-state-hover > * > .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio],\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-check:checked,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio],\n  .k-textbox:hover .km-pane-wrapper .k-check:checked,\n  .k-textbox:hover .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-textbox:hover .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio],\n  .k-button:active .km-pane-wrapper .k-check:checked,\n  .k-button:active .km-pane-wrapper .k-mobile-list .k-edit-field [type=checkbox],\n  .k-button:active .km-pane-wrapper .k-mobile-list .k-edit-field [type=radio] {\n    background-position: -3em -2em;\n  }\n  .km-pane-wrapper .k-i-cancel,\n  .km-pane-wrapper .k-cancel,\n  .km-pane-wrapper .k-denied {\n    background-position: -2em -3em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-cancel,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-cancel,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-denied,\n  .k-state-hover > .km-pane-wrapper .k-i-cancel,\n  .k-state-hover > .km-pane-wrapper .k-cancel,\n  .k-state-hover > .km-pane-wrapper .k-denied,\n  .k-state-hover > * > .km-pane-wrapper .k-i-cancel,\n  .k-state-hover > * > .km-pane-wrapper .k-cancel,\n  .k-state-hover > * > .km-pane-wrapper .k-denied,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-cancel,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-cancel,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-denied,\n  .k-textbox:hover .km-pane-wrapper .k-i-cancel,\n  .k-textbox:hover .km-pane-wrapper .k-cancel,\n  .k-textbox:hover .km-pane-wrapper .k-denied,\n  .k-button:active .km-pane-wrapper .k-i-cancel,\n  .k-button:active .km-pane-wrapper .k-cancel,\n  .k-button:active .km-pane-wrapper .k-denied {\n    background-position: -3em -3em;\n  }\n  .km-pane-wrapper .k-i-plus,\n  .km-pane-wrapper .k-add {\n    background-position: -2em -4em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-plus,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-add,\n  .k-state-hover > .km-pane-wrapper .k-i-plus,\n  .k-state-hover > .km-pane-wrapper .k-add,\n  .k-state-hover > * > .km-pane-wrapper .k-i-plus,\n  .k-state-hover > * > .km-pane-wrapper .k-add,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-plus,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-add,\n  .k-textbox:hover .km-pane-wrapper .k-i-plus,\n  .k-textbox:hover .km-pane-wrapper .k-add,\n  .k-button:active .km-pane-wrapper .k-i-plus,\n  .k-button:active .km-pane-wrapper .k-add {\n    background-position: -3em -4em;\n  }\n  .km-pane-wrapper .k-i-funnel,\n  .km-pane-wrapper .k-filter {\n    background-position: -2em -5em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-funnel,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-filter,\n  .k-state-hover > .km-pane-wrapper .k-i-funnel,\n  .k-state-hover > .km-pane-wrapper .k-filter,\n  .k-state-hover > * > .km-pane-wrapper .k-i-funnel,\n  .k-state-hover > * > .km-pane-wrapper .k-filter,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-funnel,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-filter,\n  .k-textbox:hover .km-pane-wrapper .k-i-funnel,\n  .k-textbox:hover .km-pane-wrapper .k-filter,\n  .k-button:active .km-pane-wrapper .k-i-funnel,\n  .k-button:active .km-pane-wrapper .k-filter {\n    background-position: -3em -5em;\n  }\n  .km-pane-wrapper .k-i-funnel-clear,\n  .km-pane-wrapper .k-clear-filter {\n    background-position: -2em -6em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-funnel-clear,\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-clear-filter,\n  .k-state-hover > .km-pane-wrapper .k-i-funnel-clear,\n  .k-state-hover > .km-pane-wrapper .k-clear-filter,\n  .k-state-hover > * > .km-pane-wrapper .k-i-funnel-clear,\n  .k-state-hover > * > .km-pane-wrapper .k-clear-filter,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-funnel-clear,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-clear-filter,\n  .k-textbox:hover .km-pane-wrapper .k-i-funnel-clear,\n  .k-textbox:hover .km-pane-wrapper .k-clear-filter,\n  .k-button:active .km-pane-wrapper .k-i-funnel-clear,\n  .k-button:active .km-pane-wrapper .k-clear-filter {\n    background-position: -3em -6em;\n  }\n  .km-pane-wrapper .k-i-refresh {\n    background-position: -2em -7em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-refresh,\n  .k-state-hover > .km-pane-wrapper .k-i-refresh,\n  .k-state-hover > * > .km-pane-wrapper .k-i-refresh,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-refresh,\n  .k-textbox:hover .km-pane-wrapper .k-i-refresh,\n  .k-button:active .km-pane-wrapper .k-i-refresh {\n    background-position: -3em -7em;\n  }\n  .km-pane-wrapper .k-i-exception {\n    background-position: -10em -19em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-exception,\n  .k-state-hover > .km-pane-wrapper .k-i-exception,\n  .k-state-hover > * > .km-pane-wrapper .k-i-exception,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-exception,\n  .k-textbox:hover .km-pane-wrapper .k-i-exception,\n  .k-button:active .km-pane-wrapper .k-i-exception {\n    background-position: -11em -19em;\n  }\n  .km-pane-wrapper .k-i-restore {\n    background-position: -2em -8em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-restore,\n  .k-state-hover > .km-pane-wrapper .k-i-restore,\n  .k-state-hover > * > .km-pane-wrapper .k-i-restore,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-restore,\n  .k-textbox:hover .km-pane-wrapper .k-i-restore,\n  .k-button:active .km-pane-wrapper .k-i-restore {\n    background-position: -3em -8em;\n  }\n  .km-pane-wrapper .k-i-maximize {\n    background-position: -2em -9em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-maximize,\n  .k-state-hover > .km-pane-wrapper .k-i-maximize,\n  .k-state-hover > * > .km-pane-wrapper .k-i-maximize,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-maximize,\n  .k-textbox:hover .km-pane-wrapper .k-i-maximize,\n  .k-button:active .km-pane-wrapper .k-i-maximize {\n    background-position: -3em -9em;\n  }\n  .km-pane-wrapper .k-i-minimize {\n    background-position: -4em -18em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-minimize,\n  .k-state-hover > .km-pane-wrapper .k-i-minimize,\n  .k-state-hover > * > .km-pane-wrapper .k-i-minimize,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-minimize,\n  .k-textbox:hover .km-pane-wrapper .k-i-minimize,\n  .k-button:active .km-pane-wrapper .k-i-minimize {\n    background-position: -5em -18em;\n  }\n  .km-pane-wrapper .k-i-pin {\n    background-position: -10em -16em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-pin,\n  .k-state-hover > .km-pane-wrapper .k-i-pin,\n  .k-state-hover > * > .km-pane-wrapper .k-i-pin,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-pin,\n  .k-textbox:hover .km-pane-wrapper .k-i-pin,\n  .k-button:active .km-pane-wrapper .k-i-pin {\n    background-position: -11em -16em;\n  }\n  .km-pane-wrapper .k-i-unpin {\n    background-position: -10em -17em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-unpin,\n  .k-state-hover > .km-pane-wrapper .k-i-unpin,\n  .k-state-hover > * > .km-pane-wrapper .k-i-unpin,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-unpin,\n  .k-textbox:hover .km-pane-wrapper .k-i-unpin,\n  .k-button:active .km-pane-wrapper .k-i-unpin {\n    background-position: -11em -17em;\n  }\n  .km-pane-wrapper .k-resize-se {\n    background-position: -2em -10em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-resize-se,\n  .k-state-hover > .km-pane-wrapper .k-resize-se,\n  .k-state-hover > * > .km-pane-wrapper .k-resize-se,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-resize-se,\n  .k-textbox:hover .km-pane-wrapper .k-resize-se,\n  .k-button:active .km-pane-wrapper .k-resize-se {\n    background-position: -3em -10em;\n  }\n  .km-pane-wrapper .k-i-calendar {\n    background-position: -2em -11em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-calendar,\n  .k-state-hover > .km-pane-wrapper .k-i-calendar,\n  .k-state-hover > * > .km-pane-wrapper .k-i-calendar,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-calendar,\n  .k-textbox:hover .km-pane-wrapper .k-i-calendar,\n  .k-button:active .km-pane-wrapper .k-i-calendar {\n    background-position: -3em -11em;\n  }\n  .km-pane-wrapper .k-i-clock {\n    background-position: -2em -12em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-i-clock,\n  .k-state-hover > .km-pane-wrapper .k-i-clock,\n  .k-state-hover > * > .km-pane-wrapper .k-i-clock,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-i-clock,\n  .k-textbox:hover .km-pane-wrapper .k-i-clock,\n  .k-button:active .km-pane-wrapper .k-i-clock {\n    background-position: -3em -12em;\n  }\n  .km-pane-wrapper .k-si-plus {\n    background-position: -2em -13em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-si-plus,\n  .k-state-hover > .km-pane-wrapper .k-si-plus,\n  .k-state-hover > * > .km-pane-wrapper .k-si-plus,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-si-plus,\n  .k-textbox:hover .km-pane-wrapper .k-si-plus,\n  .k-button:active .km-pane-wrapper .k-si-plus {\n    background-position: -3em -13em;\n  }\n  .km-pane-wrapper .k-si-minus {\n    background-position: -2em -14em;\n  }\n  .k-link:not(.k-state-disabled):hover > .km-pane-wrapper .k-si-minus,\n  .k-state-hover > .km-pane-wrapper .k-si-minus,\n  .k-state-hover > * > .km-pane-wrapper .k-si-minus,\n  .k-button:not(.k-state-disabled):hover .km-pane-wrapper .k-si-minus,\n  .k-textbox:hover .km-pane-wrapper .k-si-minus,\n  .k-button:active .km-pane-wrapper .k-si-minus {\n    background-position: -3em -14em;\n  }\n}\n.km-pane-wrapper .km-pane .k-mobile-list input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n.km-pane-wrapper .km-pane .k-mobile-list select:not([multiple]),\n.km-pane-wrapper .km-pane .k-mobile-list textarea,\n.km-pane-wrapper .k-mobile-list .k-widget,\n.km-pane-wrapper .k-edit-field > *:not([type=\"checkbox\"]):not([type=\"radio\"]):not(.k-button) {\n  text-indent: 0;\n  font-size: 1em;\n  line-height: 1.6em;\n  vertical-align: middle;\n  height: auto;\n  padding: 0;\n  border: 0;\n  margin: 0;\n  background: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n}\n.km-pane-wrapper .k-mobile-list .k-widget {\n  border: 0;\n  border-radius: 0;\n}\n.k-ie .km-pane-wrapper .k-mobile-list .k-widget {\n  height: initial;\n}\n.km-pane-wrapper .k-mobile-list .k-widget .k-input,\n.km-pane-wrapper .k-mobile-list .k-widget .k-state-default {\n  border: 0;\n  background: transparent;\n}\n.km-pane-wrapper *:not(.k-state-default) > input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n.km-pane-wrapper .k-mobile-list select:not([multiple]),\n.km-pane-wrapper .k-mobile-list textarea,\n.km-pane-wrapper .k-mobile-list .k-widget,\n.km-pane-wrapper .k-edit-field > *:not([type=\"checkbox\"]):not([type=\"radio\"]):not(.k-button) {\n  width: 80%;\n  padding: .6em 0;\n  margin: -0.5em 0;\n}\n.km-pane-wrapper .km-pane .k-mobile-list input,\n.km-pane-wrapper .km-pane .k-mobile-list select:not([multiple]),\n.km-pane-wrapper .km-pane .k-mobile-list textarea,\n.km-pane-wrapper .k-mobile-list .k-widget,\n.km-pane-wrapper .k-mobile-list .k-edit-field > * {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  float: right;\n  z-index: 1;\n  position: relative;\n}\n.km-pane-wrapper .k-scheduler-views {\n  width: 18em;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field.k-scheduler-toolbar {\n  background: transparent;\n  border: 0;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  padding: .5em 1em;\n}\n.km-pane-wrapper #recurrence .k-scheduler-navigation {\n  width: 100%;\n}\n.km-pane-wrapper .k-scheduler-views,\n.km-pane-wrapper .k-mobile-list .k-scheduler-navigation {\n  display: table;\n  table-layout: fixed;\n}\n.km-pane-wrapper .k-scheduler-views li,\n.km-pane-wrapper .k-mobile-list .k-scheduler-navigation li {\n  display: table-cell;\n  text-align: center;\n}\n.km-pane-wrapper .k-scheduler-views li a,\n.km-pane-wrapper .k-mobile-list .k-scheduler-navigation li a {\n  padding-left: 0;\n  padding-right: 0;\n  width: 100%;\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check {\n  margin: 0;\n  padding-left: 1em;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check:first-child {\n  margin-top: -0.5em;\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check:last-child {\n  margin-bottom: -0.5em;\n}\n.km-pane-wrapper .k-mobile-list .k-scheduler-timezones .k-edit-field label.k-check {\n  text-indent: 1em;\n}\n.km-pane-wrapper .k-mobile-list .k-edit-field > .k-button {\n  margin-left: 20%;\n  float: left;\n}\n.km-pane-wrapper .k-mobile-list .k-picker-wrap,\n.km-pane-wrapper .k-mobile-list .k-numeric-wrap,\n.km-pane-wrapper .k-mobile-list .k-dropdown-wrap {\n  position: static;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.km-pane-wrapper .k-mobile-list .k-datepicker .k-select,\n.km-pane-wrapper .k-mobile-list .k-datetimepicker .k-select,\n.km-pane-wrapper .k-mobile-list .k-numerictextbox .k-select {\n  position: absolute;\n  top: 0;\n  right: 0;\n  line-height: auto;\n}\n.km-pane-wrapper .k-mobile-list .k-datepicker .k-select:before,\n.km-pane-wrapper .k-mobile-list .k-datetimepicker .k-select:before {\n  content: \"\\a0\";\n  display: inline-block;\n  width: 0;\n  height: 100%;\n  vertical-align: middle;\n}\n.km-pane-wrapper .k-mobile-list .k-numerictextbox .k-link {\n  height: 50%;\n}\n.km-pane-wrapper .k-grid .k-button,\n.km-pane-wrapper .k-edit-form-container .k-button {\n  margin: 0;\n}\n.km-pane-wrapper .k-grid .k-button + .k-button,\n.km-pane-wrapper .k-edit-form-container .k-button + .k-button {\n  margin: 0 0 0 .18em;\n}\n.km-pane-wrapper .k-pager-numbers .k-link,\n.km-pane-wrapper .k-pager-numbers .k-state-selected,\n.km-pane-wrapper .k-pager-wrap > .k-link {\n  width: 2.4em;\n  height: 2.4em;\n  line-height: 2.1em;\n  border-radius: 2em;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.km-pane-wrapper .k-pager-numbers .k-link,\n.km-pane-wrapper .k-pager-numbers .k-state-selected {\n  width: auto;\n  line-height: 2.2em;\n  padding: 0 .86em;\n  min-width: .7em;\n}\n.km-pane-wrapper .k-pager-wrap {\n  line-height: 2.4em;\n}\n@media all and (max-width: 699px), (-ms-high-contrast: active) and (-ms-high-contrast: none) and (max-width: 800px) {\n  .km-pane-wrapper *:not(.k-state-default) > input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n  .km-pane-wrapper .k-mobile-list select:not([multiple]),\n  .km-pane-wrapper .k-mobile-list textarea,\n  .km-pane-wrapper .k-mobile-list .k-widget,\n  .km-pane-wrapper .k-edit-field > *:not([type=\"checkbox\"]):not([type=\"radio\"]):not(.k-button) {\n    width: 50%;\n  }\n  .km-pane-wrapper .k-mobile-list .k-edit-field > .k-button {\n    margin-left: 50%;\n  }\n  .km-pane-wrapper .k-mobile-list .k-edit-field > .k-timezone-button {\n    margin-left: 1em;\n  }\n  .km-pane-wrapper .k-scheduler-views {\n    width: 15em;\n  }\n  .km-pane-wrapper .k-nav-today a {\n    padding-left: .6em;\n    padding-right: .6em;\n  }\n  .km-pane-wrapper li.k-nav-current {\n    margin-left: 0;\n    margin-right: 0;\n  }\n  .km-pane-wrapper .k-pager-wrap {\n    position: relative;\n  }\n  .km-pane-wrapper .k-pager-numbers {\n    width: auto;\n    display: block;\n    overflow: hidden;\n    margin-right: 5.5em;\n    float: none;\n    text-overflow: ellipsis;\n    height: 2.4em;\n    text-align: center;\n  }\n  .km-pane-wrapper .k-pager-numbers li {\n    float: none;\n    display: inline-block;\n  }\n  .km-pane-wrapper .k-pager-nav {\n    float: left;\n  }\n  .km-pane-wrapper .k-pager-nav + .k-pager-nav ~ .k-pager-nav {\n    position: absolute;\n    right: .3em;\n    top: .3em;\n  }\n  .km-pane-wrapper .k-pager-wrap .k-pager-numbers + .k-pager-nav,\n  .km-pane-wrapper .k-pager-nav:first-child + .k-pager-nav + .k-pager-nav {\n    right: 3em;\n  }\n  .km-pane-wrapper .k-pager-info {\n    display: none;\n  }\n}\n.km-pane-wrapper .k-mobile-list .k-recur-view > .k-edit-field .k-check,\n.km-pane-wrapper .k-mobile-list .k-edit-field > * > select:not([multiple]),\n.km-pane-wrapper .k-mobile-list .k-scheduler-timezones .k-edit-field label.k-check {\n  width: 100%;\n}\n/* Mobile Scroller */\n.km-scroll-container {\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-margin-collapse: separate;\n  -webkit-transform: translatez(0);\n}\n.k-widget .km-scroll-wrapper {\n  position: relative;\n  padding-bottom: 0;\n}\n.km-touch-scrollbar {\n  position: absolute;\n  visibility: hidden;\n  z-index: 200000;\n  height: .3em;\n  width: .3em;\n  background-color: rgba(0, 0, 0, 0.7);\n  opacity: 0;\n  -webkit-transition: opacity 0.3s linear;\n  -moz-transition: opacity 0.3s linear;\n  -o-transition: opacity 0.3s linear;\n  transition: opacity 0.3s linear;\n  -webkit-transition: \"opacity 0.3s linear\";\n  -moz-transition: \"opacity 0.3s linear\";\n  -ms-transition: \"opacity 0.3s linear\";\n  -o-transition: \"opacity 0.3s linear\";\n  transition: \"opacity 0.3s linear\";\n}\n.km-vertical-scrollbar {\n  height: 100%;\n  right: 2px;\n  top: 2px;\n}\n.km-horizontal-scrollbar {\n  width: 100%;\n  left: 2px;\n  bottom: 2px;\n}\n/* animation classes */\n.k-fx-end .k-fx-next,\n.k-fx-end .k-fx-current {\n  -webkit-transition: all 350ms ease-out;\n  -moz-transition: all 350ms ease-out;\n  -ms-transition: all 350ms ease-out;\n  -o-transition: all 350ms ease-out;\n  transition: all 350ms ease-out;\n}\n.k-fx {\n  position: relative;\n}\n.k-fx .k-fx-current {\n  z-index: 0;\n}\n.k-fx .k-fx-next {\n  z-index: 1;\n}\n.k-fx-hidden,\n.k-fx-hidden * {\n  visibility: hidden !important;\n}\n.k-fx-reverse .k-fx-current {\n  z-index: 1;\n}\n.k-fx-reverse .k-fx-next {\n  z-index: 0;\n}\n/* Zoom */\n.k-fx-zoom.k-fx-start .k-fx-next {\n  -webkit-transform: scale(0) !important;\n  -moz-transform: scale(0) !important;\n  -ms-transform: scale(0) !important;\n  -o-transform: scale(0) !important;\n  transform: scale(0) !important;\n}\n.k-fx-zoom.k-fx-end .k-fx-next {\n  -webkit-transform: scale(1) !important;\n  -moz-transform: scale(1) !important;\n  -ms-transform: scale(1) !important;\n  -o-transform: scale(1) !important;\n  transform: scale(1) !important;\n}\n.k-fx-zoom.k-fx-reverse.k-fx-start .k-fx-next,\n.k-fx-zoom.k-fx-reverse.k-fx-end .k-fx-next {\n  -webkit-transform: scale(1) !important;\n  -moz-transform: scale(1) !important;\n  -ms-transform: scale(1) !important;\n  -o-transform: scale(1) !important;\n  transform: scale(1) !important;\n}\n.k-fx-zoom.k-fx-reverse.k-fx-start .k-fx-current {\n  -webkit-transform: scale(1) !important;\n  -moz-transform: scale(1) !important;\n  -ms-transform: scale(1) !important;\n  -o-transform: scale(1) !important;\n  transform: scale(1) !important;\n}\n.k-fx-zoom.k-fx-reverse.k-fx-end .k-fx-current {\n  -webkit-transform: scale(0) !important;\n  -moz-transform: scale(0) !important;\n  -ms-transform: scale(0) !important;\n  -o-transform: scale(0) !important;\n  transform: scale(0) !important;\n}\n/* Fade */\n.k-fx-fade.k-fx-start .k-fx-next {\n  will-change: opacity;\n  opacity: 0;\n}\n.k-fx-fade.k-fx-end .k-fx-next {\n  opacity: 1;\n}\n.k-fx-fade.k-fx-reverse.k-fx-start .k-fx-current {\n  will-change: opacity;\n  opacity: 1;\n}\n.k-fx-fade.k-fx-reverse.k-fx-end .k-fx-current {\n  opacity: 0;\n}\n/* Slide */\n.k-fx-slide {\n  /* left */\n  /* left reverse */\n  /* right */\n}\n.k-fx-slide.k-fx-end .k-fx-next .km-content,\n.k-fx-slide.k-fx-end .k-fx-next .km-header,\n.k-fx-slide.k-fx-end .k-fx-next .km-footer,\n.k-fx-slide.k-fx-end .k-fx-current .km-content,\n.k-fx-slide.k-fx-end .k-fx-current .km-header,\n.k-fx-slide.k-fx-end .k-fx-current .km-footer {\n  -webkit-transition: all 350ms ease-out;\n  -moz-transition: all 350ms ease-out;\n  -ms-transition: all 350ms ease-out;\n  -o-transition: all 350ms ease-out;\n  transition: all 350ms ease-out;\n}\n.k-fx-slide.k-fx-start .k-fx-next .km-content {\n  will-change: transform;\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-slide.k-fx-start .k-fx-next .km-header,\n.k-fx-slide.k-fx-start .k-fx-next .km-footer {\n  will-change: opacity;\n  opacity: 0;\n}\n.k-fx-slide.k-fx-end .k-fx-current .km-content {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-slide.k-fx-end .k-fx-next .km-header,\n.k-fx-slide.k-fx-end .k-fx-next .km-footer {\n  opacity: 1;\n}\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-content {\n  will-change: transform;\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-content {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-content {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-content {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-header,\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-footer {\n  will-change: opacity;\n  opacity: 1;\n}\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-header,\n.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-footer {\n  opacity: 1;\n}\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-header,\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-footer {\n  opacity: 0;\n}\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-header,\n.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-footer {\n  opacity: 1;\n}\n.k-fx-slide.k-fx-right {\n  /* right reverse */\n}\n.k-fx-slide.k-fx-right.k-fx-start .k-fx-next .km-content {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-slide.k-fx-right.k-fx-end .k-fx-current .km-content {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current .km-content {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current .km-content {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next .km-content {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next .km-content {\n  -webkit-transform: translatex(0%);\n  -moz-transform: translatex(0%);\n  -ms-transform: translatex(0%);\n  -o-transform: translatex(0%);\n  transform: translatex(0%);\n}\n/* Tile */\n.k-fx-tile {\n  /* left */\n  /* left reverse */\n  /* right */\n}\n.k-fx-tile.k-fx-start .k-fx-next {\n  will-change: transform;\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-current {\n  will-change: transform;\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-next {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-right {\n  /* right reverse */\n}\n.k-fx-tile.k-fx-right.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-right.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next {\n  -webkit-transform: translatex(0%);\n  -moz-transform: translatex(0%);\n  -ms-transform: translatex(0%);\n  -o-transform: translatex(0%);\n  transform: translatex(0%);\n}\n/* Tile */\n.k-fx-tile {\n  /* left */\n  /* left reverse */\n  /* right */\n}\n.k-fx-tile.k-fx-start .k-fx-next {\n  will-change: transform;\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-current {\n  will-change: transform;\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-next {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-right {\n  /* right reverse */\n}\n.k-fx-tile.k-fx-right.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-right.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current {\n  -webkit-transform: translatex(0);\n  -moz-transform: translatex(0);\n  -ms-transform: translatex(0);\n  -o-transform: translatex(0);\n  transform: translatex(0);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next {\n  -webkit-transform: translatex(0%);\n  -moz-transform: translatex(0%);\n  -ms-transform: translatex(0%);\n  -o-transform: translatex(0%);\n  transform: translatex(0%);\n}\n/* Overlay */\n.k-fx.k-fx-overlay.k-fx-start .k-fx-next,\n.k-fx.k-fx-overlay.k-fx-left.k-fx-start .k-fx-next {\n  will-change: transform;\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx.k-fx-overlay.k-fx-right.k-fx-start .k-fx-next {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx.k-fx-overlay.k-fx-up.k-fx-start .k-fx-next {\n  -webkit-transform: translatey(100%);\n  -moz-transform: translatey(100%);\n  -ms-transform: translatey(100%);\n  -o-transform: translatey(100%);\n  transform: translatey(100%);\n}\n.k-fx.k-fx-overlay.k-fx-down.k-fx-start .k-fx-next {\n  -webkit-transform: translatey(-100%);\n  -moz-transform: translatey(-100%);\n  -ms-transform: translatey(-100%);\n  -o-transform: translatey(-100%);\n  transform: translatey(-100%);\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-start .k-fx-next {\n  -webkit-transform: none;\n  -moz-transform: none;\n  -ms-transform: none;\n  -o-transform: none;\n  transform: none;\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-start .k-fx-current {\n  will-change: transform;\n  -webkit-transform: none;\n  -moz-transform: none;\n  -ms-transform: none;\n  -o-transform: none;\n  transform: none;\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-end .k-fx-current,\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-left.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(100%);\n  -moz-transform: translatex(100%);\n  -ms-transform: translatex(100%);\n  -o-transform: translatex(100%);\n  transform: translatex(100%);\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-right.k-fx-end .k-fx-current {\n  -webkit-transform: translatex(-100%);\n  -moz-transform: translatex(-100%);\n  -ms-transform: translatex(-100%);\n  -o-transform: translatex(-100%);\n  transform: translatex(-100%);\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-up.k-fx-end .k-fx-current {\n  -webkit-transform: translatey(100%);\n  -moz-transform: translatey(100%);\n  -ms-transform: translatey(100%);\n  -o-transform: translatey(100%);\n  transform: translatey(100%);\n}\n.k-fx.k-fx-overlay.k-fx-reverse.k-fx-down.k-fx-end .k-fx-current {\n  -webkit-transform: translatey(-100%);\n  -moz-transform: translatey(-100%);\n  -ms-transform: translatey(-100%);\n  -o-transform: translatey(-100%);\n  transform: translatey(-100%);\n}\n/* Default fonts for PDF export */\n/* sans-serif */\n@font-face {\n  font-family: \"DejaVu Sans\";\n  src: url(\"fonts/DejaVu/DejaVuSans.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Sans\";\n  font-weight: bold;\n  src: url(\"fonts/DejaVu/DejaVuSans-Bold.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Sans\";\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSans-Oblique.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Sans\";\n  font-weight: bold;\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSans-BoldOblique.ttf\") format(\"truetype\");\n}\n/* serif */\n@font-face {\n  font-family: \"DejaVu Serif\";\n  src: url(\"fonts/DejaVu/DejaVuSerif.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Serif\";\n  font-weight: bold;\n  src: url(\"fonts/DejaVu/DejaVuSerif-Bold.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Serif\";\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSerif-Italic.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Serif\";\n  font-weight: bold;\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSerif-BoldItalic.ttf\") format(\"truetype\");\n}\n/* monospace */\n@font-face {\n  font-family: \"DejaVu Mono\";\n  src: url(\"fonts/DejaVu/DejaVuSansMono.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Mono\";\n  font-weight: bold;\n  src: url(\"fonts/DejaVu/DejaVuSansMono-Bold.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Mono\";\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSansMono-Oblique.ttf\") format(\"truetype\");\n}\n@font-face {\n  font-family: \"DejaVu Mono\";\n  font-weight: bold;\n  font-style: italic;\n  src: url(\"fonts/DejaVu/DejaVuSansMono-BoldOblique.ttf\") format(\"truetype\");\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/Site.css",
    "content": "﻿@charset \"UTF-8\";\n\nbody {\n    /* padding-top: 60px; */\n    padding-bottom: 40px;\n}\n\npre {\n    background-color: #AAAAAA;\n    border-color: #AAAAAA;\n}\n\n/* styles for validation helpers */\n.field-validation-error {\n    color: #b94a48;\n}\n\n.field-validation-valid {\n    display: none;\n}\n\ninput.input-validation-error {\n    border: 1px solid #b94a48;\n}\n\ninput[type=\"checkbox\"].input-validation-error {\n    border: 0 none;\n}\n\n.validation-summary-errors {\n    color: #b94a48;\n}\n\n.validation-summary-valid {\n    display: none;\n}\n\n/* override bootstrap styles */\n.jumbotron {\n    padding: 40px;\n    padding-top: 20px;\n    padding-bottom: 20px;\n    margin-top: 20px; /* its buggy without it */\n}\n\n    .jumbotron h1 {\n        color: #FFF;\n    }\n\n@media (max-width: 767px) {\n    .jumbotron h1 {\n        font-size: 48px;\n    }\n}\n\n.news-content {\n    background-color: #FFF;\n    border: 1px solid #000;\n    border-radius: 20px;\n    color: #000;\n    margin-top: 20px;\n}\n\n.profile-info-label {\n    display: inline;\n    cursor: none;\n}\n\n.k-upload {\n    display: inline-block;\n    width: auto;\n}\n\n.test-file-dropdown {\n    width: 100%;\n}\n\n.text-white {\n    color: white;\n}\n\n.drop-down-width {\n    width: 175px;\n}\n\n.full-editor {\n    width: 100%;\n    height: 30px;\n}\n\n.full-kendo-editor {\n    width: 100%;\n}\n\n.form-control {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.hidden-file-upload {\n    height: 0;\n    width: 0;\n    overflow: hidden;\n}\n\n.small-margin-top {\n    margin-top: 10px;\n}\n\n.captcha-container input {\n    line-height: normal !important;\n}\n\n/* Code mirror fix for the matrix theme */\n.cm-s-the-matrix span.cm-builtin {\n    color: #2A9FD6 !important;\n}\n\n/* Kendo */\n.k-alt,\n.k-separator {\n  background-color: #282828;\n}\n\n.k-state-selected {\n    background-color: initial;\n}\n\n.width100percent {\n    width: 100%;\n}\n\n.search-box {\n    height: 32px;\n}\n\n.btn-search {\n    padding: 4px 12px;\n}\n\n.search-form {\n    line-height: 36px;\n}\n\n.btn-search-small {\n    line-height: 48px;\n}\n\n@media (min-width: 991px) {\n    .nav > li > a {\n        padding: 15px 10px;\n    }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n    .nav > li > a {\n        padding: 15px 7px;\n    }\n}\n\n.no-padding-right {\n    padding-right: 0;\n}\n\n#cookies-notification {\n    position: fixed !important;\n    z-index: 99999998 !important;\n    width: 100% !important;\n    margin: 0;\n    padding: 13px;\n    display: block;\n    bottom: 0;\n    background-color: #000000;\n    font-weight: bold;\n    font-size: 16px;\n    text-align: center;\n    display: none;\n}\n\n#cookies-notification-button {\n    color: #00AA00;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/bootstrap-theme-cyborg.css",
    "content": "@import url(\"//fonts.googleapis.com/css?family=Droid+Sans:400,700\");\n\n/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden] {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\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}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !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  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]: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  @page  {\n    margin: 2cm .5cm;\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  .table td,\n  .table th {\n    background-color: #fff !important;\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-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Droid Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #888888;\n  background-color: #060606;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\na {\n  color: #2a9fd6;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a9fd6;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #060606;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #282828;\n}\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\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16.099999999999998px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #888888;\n}\n\n.text-primary {\n  color: #2a9fd6;\n}\n\n.text-warning {\n  color: #ffffff;\n}\n\n.text-danger {\n  color: #ffffff;\n}\n\n.text-success {\n  color: #ffffff;\n}\n\n.text-info {\n  color: #ffffff;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Droid Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n}\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 {\n  font-weight: normal;\n  line-height: 1;\n  color: #888888;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 18px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\nh1 small,\n.h1 small {\n  font-size: 24px;\n}\n\nh2 small,\n.h2 small {\n  font-size: 18px;\n}\n\nh3 small,\n.h3 small,\nh4 small,\n.h4 small {\n  font-size: 14px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #282828;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\n\n@media (min-width: 800px) {\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  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #888888;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #282828;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #555555;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #282828;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #282828;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre.prettyprint {\n  margin-bottom: 20px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: #181818;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\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.428571429;\n  vertical-align: top;\n  border-top: 1px solid #282828;\n}\n\n.table thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #282828;\n}\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\n.table tbody + tbody {\n  border-top: 2px solid #282828;\n}\n\n.table .table {\n  background-color: #060606;\n}\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\n.table-bordered {\n  border: 1px solid #282828;\n}\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 #282828;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #080808;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #282828;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\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: #282828;\n}\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: #77b300;\n  border-color: #809a00;\n}\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  background-color: #669a00;\n  border-color: #6a8000;\n}\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: #cc0000;\n  border-color: #bd001f;\n}\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  background-color: #b30000;\n  border-color: #a3001b;\n}\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: #ff8800;\n  border-color: #f05800;\n}\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  background-color: #e67a00;\n  border-color: #d64f00;\n}\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #282828;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n    background-color: #fff;\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 > thead > tr:last-child > th,\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 > thead > tr:last-child > td,\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}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\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: #888888;\n  border: 0;\n  border-bottom: 1px solid #282828;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\n.form-control:-moz-placeholder {\n  color: #888888;\n}\n\n.form-control::-moz-placeholder {\n  color: #888888;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #888888;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #888888;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 38px;\n  padding: 8px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #888888;\n  vertical-align: middle;\n  background-color: #ffffff;\n  border: 1px solid #282828;\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 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #adafae;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\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  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\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\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\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}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 56px;\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 56px;\n  line-height: 56px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #ffffff;\n}\n\n.has-warning .form-control {\n  border-color: #ffffff;\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\n.has-warning .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-warning .input-group-addon {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #ffffff;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #ffffff;\n}\n\n.has-error .form-control {\n  border-color: #ffffff;\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\n.has-error .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-error .input-group-addon {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #ffffff;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #ffffff;\n}\n\n.has-success .form-control {\n  border-color: #ffffff;\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\n.has-success .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-success .input-group-addon {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #ffffff;\n}\n\n.form-control-static {\n  padding-top: 9px;\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #c8c8c8;\n}\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  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 9px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n\n.btn {\n  display: inline-block;\n  padding: 8px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #ffffff;\n  text-decoration: none;\n}\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, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #ffffff;\n  background-color: #424242;\n  border-color: #424242;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #ffffff;\n  background-color: #2d2d2d;\n  border-color: #232323;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\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: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: #424242;\n  border-color: #424242;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #2386b4;\n  border-color: #1f79a3;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\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: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: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #ff8800;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #d67200;\n  border-color: #c26700;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\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: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: #ff8800;\n  border-color: #ff8800;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #cc0000;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #a30000;\n  border-color: #8f0000;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\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: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: #cc0000;\n  border-color: #cc0000;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #5c8a00;\n  border-color: #4e7600;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\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: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: #77b300;\n  border-color: #77b300;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #9933cc;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #812bab;\n  border-color: #74279b;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\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: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: #9933cc;\n  border-color: #9933cc;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #2a9fd6;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\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\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a9fd6;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #888888;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\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.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\1f512\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\1f514\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\1f525\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\";\n}\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 solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n  content: \"\";\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\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  list-style: none;\n  background-color: #222222;\n  border: 1px solid #444444;\n  border: 1px solid rgba(255, 255, 255, 0.1);\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\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: rgba(255, 255, 255, 0.1);\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #ffffff;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #888888;\n}\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\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #888888;\n}\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\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #ffffff;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #ffffff;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\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\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\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\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\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\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\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\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\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\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\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 56px;\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 56px;\n  line-height: 56px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\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}\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}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\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\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 8px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #adafae;\n  border: 1px solid #282828;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 14px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #222222;\n}\n\n.nav > li.disabled > a {\n  color: #888888;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #888888;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #222222;\n  border-color: #2a9fd6;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #282828;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: transparent transparent #282828;\n}\n\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #ffffff;\n  cursor: default;\n  background-color: #2a9fd6;\n  border: 1px solid #282828;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs.nav-justified > .active > a {\n  border-bottom-color: #060606;\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 5px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #2a9fd6;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs-justified > .active > a {\n  border-bottom-color: #060606;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #2a9fd6;\n  border-bottom-color: #2a9fd6;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a9fd6;\n  border-bottom-color: #2a9fd6;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\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\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\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-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  z-index: 1030;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\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  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\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\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\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 6px;\n  margin-right: -15px;\n  margin-bottom: 6px;\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, 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}\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  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\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\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 6px;\n  margin-bottom: 6px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #060606;\n  border-color: #000000;\n}\n\n.navbar-default .navbar-brand {\n  color: #ffffff;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #888888;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #888888;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\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: #ffffff;\n  background-color: transparent;\n}\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: #888888;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #282828;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #282828;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #000000;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\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: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #888888;\n  border-bottom-color: #888888;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #888888;\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: #ffffff;\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: #ffffff;\n    background-color: transparent;\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: #888888;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #888888;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #ffffff;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #ffffff;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\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: #ffffff;\n  background-color: transparent;\n}\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: #aaaaaa;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\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: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #888888;\n  border-bottom-color: #888888;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\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 > li > a {\n    color: #888888;\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: #ffffff;\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: #ffffff;\n    background-color: transparent;\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: #aaaaaa;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #222222;\n  border-radius: 4px;\n}\n\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ffffff;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #888888;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 8px 12px;\n  margin-left: -1px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #222222;\n  border: 1px solid #282828;\n}\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\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\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #adafae;\n}\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: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #888888;\n  cursor: not-allowed;\n  background-color: #222222;\n  border-color: #282828;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 14px 16px;\n  font-size: 18px;\n}\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\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\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\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\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\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #222222;\n  border: 1px solid #282828;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #adafae;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #888888;\n  cursor: not-allowed;\n  background-color: #222222;\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #424242;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #282828;\n}\n\n.label-primary {\n  background-color: #2a9fd6;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #2180ac;\n}\n\n.label-success {\n  background-color: #77b300;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #558000;\n}\n\n.label-info {\n  background-color: #9933cc;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #7a29a3;\n}\n\n.label-warning {\n  background-color: #ff8800;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #cc6d00;\n}\n\n.label-danger {\n  background-color: #cc0000;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #990000;\n}\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #2a9fd6;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #2a9fd6;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #151515;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #060606;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #2a9fd6;\n}\n\n.thumbnail > img {\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #888888;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #809a00;\n}\n\n.alert-success hr {\n  border-top-color: #6a8000;\n}\n\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-info {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #6e2caf;\n}\n\n.alert-info hr {\n  border-top-color: #61279b;\n}\n\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-warning {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #f05800;\n}\n\n.alert-warning hr {\n  border-top-color: #d64f00;\n}\n\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-danger {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #bd001f;\n}\n\n.alert-danger hr {\n  border-top-color: #a3001b;\n}\n\n.alert-danger .alert-link {\n  color: #e6e6e6;\n}\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\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\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\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #222222;\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\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #2a9fd6;\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          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-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\n.progress-bar-success {\n  background-color: #77b300;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-info {\n  background-color: #9933cc;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-warning {\n  background-color: #ff8800;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-danger {\n  background-color: #cc0000;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #222222;\n  border: 1px solid #282828;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #888888;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #ffffff;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #484848;\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\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  color: inherit;\n}\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: #d5ecf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #222222;\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\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #282828;\n}\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\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #3c3c3c;\n  border-top: 1px solid #282828;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #282828;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #282828;\n}\n\n.panel-default {\n  border-color: #282828;\n}\n\n.panel-default > .panel-heading {\n  color: #282828;\n  background-color: #3c3c3c;\n  border-color: #282828;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #282828;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #282828;\n}\n\n.panel-primary {\n  border-color: #2a9fd6;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #2a9fd6;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #2a9fd6;\n}\n\n.panel-success {\n  border-color: #809a00;\n}\n\n.panel-success > .panel-heading {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #809a00;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #809a00;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #809a00;\n}\n\n.panel-warning {\n  border-color: #f05800;\n}\n\n.panel-warning > .panel-heading {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #f05800;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #f05800;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #f05800;\n}\n\n.panel-danger {\n  border-color: #bd001f;\n}\n\n.panel-danger > .panel-heading {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #bd001f;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bd001f;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bd001f;\n}\n\n.panel-info {\n  border-color: #6e2caf;\n}\n\n.panel-info > .panel-heading {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #6e2caf;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #6e2caf;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #6e2caf;\n}\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #151515;\n  border: 1px solid #030303;\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\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\nbody.modal-open,\n.modal-open .navbar-fixed-top,\n.modal-open .navbar-fixed-bottom {\n  margin-right: 15px;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-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\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #202020;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\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}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #282828;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #282828;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    right: auto;\n    left: 50%;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\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}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: rgba(0, 0, 0, 0.9);\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #202020;\n  border: 1px solid #999999;\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  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #181818;\n  border-bottom: 1px solid #0b0b0b;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\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\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #202020;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #202020;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #202020;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #202020;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-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\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-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\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\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  left: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\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\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  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\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\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px;\n  }\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.visible-xs {\n  display: none !important;\n}\n\ntr.visible-xs {\n  display: none !important;\n}\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !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\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm {\n  display: none !important;\n}\n\ntr.visible-sm {\n  display: none !important;\n}\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !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\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md {\n  display: none !important;\n}\n\ntr.visible-md {\n  display: none !important;\n}\n\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !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\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg {\n  display: none !important;\n}\n\ntr.visible-lg {\n  display: none !important;\n}\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !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\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-md {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-md {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n  tr.hidden-md {\n    display: none !important;\n  }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-md {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print {\n  display: none !important;\n}\n\ntr.visible-print {\n  display: none !important;\n}\n\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !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  .hidden-print {\n    display: none !important;\n  }\n  tr.hidden-print {\n    display: none !important;\n  }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}\n\n.navbar {\n  border-bottom: 1px solid #282828;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  color: #fff;\n}\n\n.text-primary {\n  color: #2a9fd6;\n}\n\n.text-success {\n  color: #77b300;\n}\n\n.text-danger {\n  color: #cc0000;\n}\n\n.text-warning {\n  color: #ff8800;\n}\n\n.text-info {\n  color: #9933cc;\n}\n\n.table tr.success,\n.table tr.warning,\n.table tr.danger {\n  color: #fff;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #ff8800;\n}\n\n.has-warning .form-control,\n.has-warning .form-control:focus {\n  border-color: #ff8800;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #cc0000;\n}\n\n.has-error .form-control,\n.has-error .form-control:focus {\n  border-color: #cc0000;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #77b300;\n}\n\n.has-success .form-control,\n.has-success .form-control:focus {\n  border-color: #77b300;\n}\n\nlegend {\n  color: #fff;\n}\n\n.input-group-addon {\n  background-color: #424242;\n}\n\n.nav .caret,\n.nav a:hover .caret {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n\n.nav-tabs a,\n.nav-pills a,\n.breadcrumb a,\n.pagination a,\n.pager a {\n  color: #fff;\n}\n\n.alert .alert-link,\n.alert a {\n  color: #ffffff;\n  text-decoration: underline;\n}\n\n.jumbotron h1,\n.jumbotron h2,\n.jumbotron h3,\n.jumbotron h4,\n.jumbotron h5,\n.jumbotron h6 {\n  color: #fff;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\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\n.affix {\n  position: fixed;\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/bootstrap-theme.css",
    "content": ".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\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\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6));\n  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%);\n  background-repeat: repeat-x;\n  border-color: #e0e0e0;\n  border-color: #ccc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);\n}\n\n.btn-default:active,\n.btn-default.active {\n  background-color: #e6e6e6;\n  border-color: #e0e0e0;\n}\n\n.btn-primary {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  background-repeat: repeat-x;\n  border-color: #2d6ca2;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #3071a9;\n  border-color: #2d6ca2;\n}\n\n.btn-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));\n  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);\n  background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  background-repeat: repeat-x;\n  border-color: #419641;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n\n.btn-success:active,\n.btn-success.active {\n  background-color: #449d44;\n  border-color: #419641;\n}\n\n.btn-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));\n  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);\n  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  background-repeat: repeat-x;\n  border-color: #eb9316;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #ec971f;\n  border-color: #eb9316;\n}\n\n.btn-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));\n  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);\n  background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  background-repeat: repeat-x;\n  border-color: #c12e2a;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c9302c;\n  border-color: #c12e2a;\n}\n\n.btn-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));\n  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);\n  background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  background-repeat: repeat-x;\n  border-color: #2aabd2;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n\n.btn-info:active,\n.btn-info.active {\n  background-color: #31b0d5;\n  border-color: #2aabd2;\n}\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\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #357ebd;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.navbar {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));\n  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\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\n.navbar .navbar-nav > .active > a {\n  background-color: #f8f8f8;\n}\n\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n\n.navbar-inverse {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));\n  background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);\n  background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n}\n\n.navbar-inverse .navbar-nav > .active > a {\n  background-color: #222222;\n}\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\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 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\n.alert-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));\n  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);\n  background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n}\n\n.alert-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));\n  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);\n  background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n}\n\n.alert-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));\n  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);\n  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n}\n\n.alert-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));\n  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);\n  background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n}\n\n.progress {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);\n  background-image: -moz-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\n.progress-bar {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n\n.progress-bar-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));\n  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);\n  background-image: -moz-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\n.progress-bar-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));\n  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);\n  background-image: -moz-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\n.progress-bar-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));\n  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);\n  background-image: -moz-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\n.progress-bar-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));\n  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);\n  background-image: -moz-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\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\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #3071a9;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  background-repeat: repeat-x;\n  border-color: #3278b3;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n}\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\n.panel-default > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));\n  background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);\n  background-image: -moz-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\n.panel-primary > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.panel-success > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));\n  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);\n  background-image: -moz-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\n.panel-info > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));\n  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);\n  background-image: -moz-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\n.panel-warning > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));\n  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);\n  background-image: -moz-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\n.panel-danger > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));\n  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);\n  background-image: -moz-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\n.well {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);\n  background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\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}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden] {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\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}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !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  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]: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  @page  {\n    margin: 2cm .5cm;\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  .table td,\n  .table th {\n    background-color: #fff !important;\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-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #ffffff;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\na {\n  color: #428bca;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\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\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16.099999999999998px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #999999;\n}\n\n.text-primary {\n  color: #428bca;\n}\n\n.text-warning {\n  color: #c09853;\n}\n\n.text-danger {\n  color: #b94a48;\n}\n\n.text-success {\n  color: #468847;\n}\n\n.text-info {\n  color: #3a87ad;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n}\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 {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 18px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\nh1 small,\n.h1 small {\n  font-size: 24px;\n}\n\nh2 small,\n.h2 small {\n  font-size: 18px;\n}\n\nh3 small,\n.h3 small,\nh4 small,\n.h4 small {\n  font-size: 14px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\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  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre.prettyprint {\n  margin-bottom: 20px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\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.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n\n.table thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\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\n.table tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n\n.table .table {\n  background-color: #ffffff;\n}\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\n.table-bordered {\n  border: 1px solid #dddddd;\n}\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 #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\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\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  border-color: #d6e9c6;\n}\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  background-color: #d0e9c6;\n  border-color: #c9e2b3;\n}\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  border-color: #eed3d7;\n}\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  background-color: #ebcccc;\n  border-color: #e6c1c7;\n}\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  border-color: #fbeed5;\n}\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  background-color: #faf2cc;\n  border-color: #f8e5be;\n}\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #dddddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n    background-color: #fff;\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 > thead > tr:last-child > th,\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 > thead > tr:last-child > td,\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}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\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}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\n.form-control:-moz-placeholder {\n  color: #999999;\n}\n\n.form-control::-moz-placeholder {\n  color: #999999;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\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.428571429;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\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 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\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  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\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\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\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}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #c09853;\n}\n\n.has-warning .form-control {\n  border-color: #c09853;\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\n.has-warning .form-control:focus {\n  border-color: #a47e3c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n}\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #c09853;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #b94a48;\n}\n\n.has-error .form-control {\n  border-color: #b94a48;\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\n.has-error .form-control:focus {\n  border-color: #953b39;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n}\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #b94a48;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #468847;\n}\n\n.has-success .form-control {\n  border-color: #468847;\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\n.has-success .form-control:focus {\n  border-color: #356635;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n}\n\n.has-success .input-group-addon {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #468847;\n}\n\n.form-control-static {\n  padding-top: 7px;\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\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  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\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\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\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.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\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, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\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: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: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\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: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: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\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: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: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\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: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: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\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: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: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\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: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: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\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\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999999;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\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.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\1f512\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\1f514\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\1f525\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\";\n}\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 solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n  content: \"\";\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\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  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\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\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #333333;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\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\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #999999;\n}\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\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #333333;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333333;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\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\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\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\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\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\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\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\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\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\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\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\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}\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}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\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\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.nav > li.disabled > a {\n  color: #999999;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\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  cursor: default;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs.nav-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 5px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #428bca;\n  border-bottom-color: #428bca;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\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\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\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-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  z-index: 1030;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\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  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\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\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\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\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, 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}\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  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\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\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\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: #555555;\n  background-color: #e7e7e7;\n}\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: #cccccc;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e6e6e6;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #333333;\n  border-bottom-color: #333333;\n}\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: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #555555;\n  border-bottom-color: #555555;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #777777;\n  border-bottom-color: #777777;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\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: #333333;\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: #555555;\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: #cccccc;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #777777;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\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: #ffffff;\n  background-color: #080808;\n}\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: #444444;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\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: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #999999;\n  border-bottom-color: #999999;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\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 > li > a {\n    color: #999999;\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: #ffffff;\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: #ffffff;\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: #444444;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\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\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #cccccc;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #999999;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\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.428571429;\n  text-decoration: none;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\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\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\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #eeeeee;\n}\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: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n  border-color: #dddddd;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\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\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\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\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\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\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #999999;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n\n.label-primary {\n  background-color: #428bca;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n\n.label-success {\n  background-color: #5cb85c;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n\n.label-info {\n  background-color: #5bc0de;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n\n.label-warning {\n  background-color: #f0ad4e;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n\n.label-danger {\n  background-color: #d9534f;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999999;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #eeeeee;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #428bca;\n}\n\n.thumbnail > img {\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n\n.alert-success .alert-link {\n  color: #356635;\n}\n\n.alert-info {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n\n.alert-info .alert-link {\n  color: #2d6987;\n}\n\n.alert-warning {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.alert-warning hr {\n  border-top-color: #f8e5be;\n}\n\n.alert-warning .alert-link {\n  color: #a47e3c;\n}\n\n.alert-danger {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.alert-danger hr {\n  border-top-color: #e6c1c7;\n}\n\n.alert-danger .alert-link {\n  color: #953b39;\n}\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\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\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\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, 0.1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\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          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-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\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #555555;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\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  color: inherit;\n}\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: #e1edf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #ffffff;\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\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #dddddd;\n}\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\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n\n.panel-default {\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n\n.panel-primary {\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n\n.panel-success {\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n\n.panel-warning {\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #fbeed5;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #fbeed5;\n}\n\n.panel-danger {\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #eed3d7;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #eed3d7;\n}\n\n.panel-info {\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\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\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\nbody.modal-open,\n.modal-open .navbar-fixed-top,\n.modal-open .navbar-fixed-bottom {\n  margin-right: 15px;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-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\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\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}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    right: auto;\n    left: 50%;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\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}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: #000000;\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: #000000;\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\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  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\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\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #ffffff;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #ffffff;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #ffffff;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #ffffff;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-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\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-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\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\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  left: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\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\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  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\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\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px;\n  }\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.visible-xs {\n  display: none !important;\n}\n\ntr.visible-xs {\n  display: none !important;\n}\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !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\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm {\n  display: none !important;\n}\n\ntr.visible-sm {\n  display: none !important;\n}\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !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\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md {\n  display: none !important;\n}\n\ntr.visible-md {\n  display: none !important;\n}\n\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !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\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg {\n  display: none !important;\n}\n\ntr.visible-lg {\n  display: none !important;\n}\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !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\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-md {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-md {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n  tr.hidden-md {\n    display: none !important;\n  }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-md {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print {\n  display: none !important;\n}\n\ntr.visible-print {\n  display: none !important;\n}\n\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !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  .hidden-print {\n    display: none !important;\n  }\n  tr.hidden-print {\n    display: none !important;\n  }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/themes/bootstrap-theme-cosmo.css",
    "content": "@import url(\"//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700\");\n/*!\n * Bootswatch v3.1.1+1\n * Homepage: http://bootswatch.com\n * Copyright 2012-2014 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\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,\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: 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  -moz-box-sizing: content-box;\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  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\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@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !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^=\"javascript:\"]:after,\n  a[href^=\"#\"]: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  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\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-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\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: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Open Sans\", Calibri, Candara, Arial, sans-serif;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #007fff;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #0059b3;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\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: 0;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0;\n  -webkit-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: 21px;\n  margin-bottom: 21px;\n  border: 0;\n  border-top: 1px solid #e6e6e6;\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}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Open Sans\", Calibri, Candara, Arial, sans-serif;\n  font-weight: 300;\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: #999999;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 21px;\n  margin-bottom: 10.5px;\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: 10.5px;\n  margin-bottom: 10.5px;\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: 39px;\n}\nh2,\n.h2 {\n  font-size: 32px;\n}\nh3,\n.h3 {\n  font-size: 26px;\n}\nh4,\n.h4 {\n  font-size: 19px;\n}\nh5,\n.h5 {\n  font-size: 15px;\n}\nh6,\n.h6 {\n  font-size: 13px;\n}\np {\n  margin: 0 0 10.5px;\n}\n.lead {\n  margin-bottom: 21px;\n  font-size: 17px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 22.5px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\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-muted {\n  color: #999999;\n}\n.text-primary {\n  color: #007fff;\n}\na.text-primary:hover {\n  color: #0066cc;\n}\n.text-success {\n  color: #ffffff;\n}\na.text-success:hover {\n  color: #e6e6e6;\n}\n.text-info {\n  color: #ffffff;\n}\na.text-info:hover {\n  color: #e6e6e6;\n}\n.text-warning {\n  color: #ffffff;\n}\na.text-warning:hover {\n  color: #e6e6e6;\n}\n.text-danger {\n  color: #ffffff;\n}\na.text-danger:hover {\n  color: #e6e6e6;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #007fff;\n}\na.bg-primary:hover {\n  background-color: #0066cc;\n}\n.bg-success {\n  background-color: #3fb618;\n}\na.bg-success:hover {\n  background-color: #2f8912;\n}\n.bg-info {\n  background-color: #9954bb;\n}\na.bg-info:hover {\n  background-color: #7e3f9d;\n}\n.bg-warning {\n  background-color: #ff7518;\n}\na.bg-warning:hover {\n  background-color: #e45c00;\n}\n.bg-danger {\n  background-color: #ff0039;\n}\na.bg-danger:hover {\n  background-color: #cc002e;\n}\n.page-header {\n  padding-bottom: 9.5px;\n  margin: 42px 0 21px;\n  border-bottom: 1px solid #e6e6e6;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10.5px;\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: 21px;\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 #999999;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10.5px 21px;\n  margin: 0 0 21px;\n  font-size: 18.75px;\n  border-left: 5px solid #e6e6e6;\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: #999999;\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 #e6e6e6;\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}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 21px;\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  white-space: nowrap;\n  border-radius: 0;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #ffffff;\n  background-color: #333333;\n  border-radius: 0;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\npre {\n  display: block;\n  padding: 10px;\n  margin: 0 0 10.5px;\n  font-size: 14px;\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 #cccccc;\n  border-radius: 0;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 21px;\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 #dddddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\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 #dddddd;\n}\n.table .table {\n  background-color: #ffffff;\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 #dddddd;\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 #dddddd;\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-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\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.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: #3fb618;\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.success:hover > th {\n  background-color: #379f15;\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: #9954bb;\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.info:hover > th {\n  background-color: #8d46b0;\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: #ff7518;\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.warning:hover > th {\n  background-color: #fe6600;\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: #ff0039;\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.danger:hover > th {\n  background-color: #e60033;\n}\n@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15.75px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #dddddd;\n    -webkit-overflow-scrolling: touch;\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: 21px;\n  font-size: 22.5px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\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  /* IE8-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: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 11px;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #333333;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 43px;\n  padding: 10px 18px;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #ffffff;\n  background-image: none;\n  border: 1px solid #cccccc;\n  border-radius: 0;\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  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: #999999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #e6e6e6;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 43px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  display: block;\n  min-height: 21px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n}\n.radio label,\n.checkbox label {\n  display: inline;\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  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\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],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.input-sm {\n  height: 31px;\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 0;\n}\nselect.input-sm {\n  height: 31px;\n  line-height: 31px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 64px;\n  padding: 18px 30px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 0;\n}\nselect.input-lg {\n  height: 64px;\n  line-height: 64px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 53.75px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 26px;\n  right: 0;\n  display: block;\n  width: 43px;\n  height: 43px;\n  line-height: 43px;\n  text-align: center;\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  color: #ffffff;\n}\n.has-success .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-success .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #3fb618;\n}\n.has-success .form-control-feedback {\n  color: #ffffff;\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  color: #ffffff;\n}\n.has-warning .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-warning .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #ff7518;\n}\n.has-warning .form-control-feedback {\n  color: #ffffff;\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  color: #ffffff;\n}\n.has-error .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-error .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #ff0039;\n}\n.has-error .form-control-feedback {\n  color: #ffffff;\n}\n.form-control-static {\n  margin-bottom: 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 .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    padding-left: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .control-label,\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: 11px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 32px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 11px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 10px 18px;\n  font-size: 15px;\n  line-height: 1.42857143;\n  border-radius: 0;\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  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #ffffff;\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  pointer-events: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default {\n  color: #ffffff;\n  background-color: #222222;\n  border-color: #222222;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #ffffff;\n  background-color: #0e0e0e;\n  border-color: #040404;\n}\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\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: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: #222222;\n  border-color: #222222;\n}\n.btn-default .badge {\n  color: #222222;\n  background-color: #ffffff;\n}\n.btn-primary {\n  color: #ffffff;\n  background-color: #007fff;\n  border-color: #007fff;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #006bd6;\n  border-color: #0061c2;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\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: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: #007fff;\n  border-color: #007fff;\n}\n.btn-primary .badge {\n  color: #007fff;\n  background-color: #ffffff;\n}\n.btn-success {\n  color: #ffffff;\n  background-color: #3fb618;\n  border-color: #3fb618;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #339213;\n  border-color: #2c8011;\n}\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\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: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: #3fb618;\n  border-color: #3fb618;\n}\n.btn-success .badge {\n  color: #3fb618;\n  background-color: #ffffff;\n}\n.btn-info {\n  color: #ffffff;\n  background-color: #9954bb;\n  border-color: #9954bb;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #8441a5;\n  border-color: #783c96;\n}\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\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: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: #9954bb;\n  border-color: #9954bb;\n}\n.btn-info .badge {\n  color: #9954bb;\n  background-color: #ffffff;\n}\n.btn-warning {\n  color: #ffffff;\n  background-color: #ff7518;\n  border-color: #ff7518;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ee6000;\n  border-color: #da5800;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\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: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: #ff7518;\n  border-color: #ff7518;\n}\n.btn-warning .badge {\n  color: #ff7518;\n  background-color: #ffffff;\n}\n.btn-danger {\n  color: #ffffff;\n  background-color: #ff0039;\n  border-color: #ff0039;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d60030;\n  border-color: #c2002b;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\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: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: #ff0039;\n  border-color: #ff0039;\n}\n.btn-danger .badge {\n  color: #ff0039;\n  background-color: #ffffff;\n}\n.btn-link {\n  color: #007fff;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\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: #0059b3;\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: #999999;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 18px 30px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 0;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 0;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 0;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\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  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}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n  transition: height 0.35s ease;\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.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: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro: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.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\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: 15px;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0;\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: 9.5px 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: #ffffff;\n  background-color: #007fff;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #007fff;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\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: 13px;\n  line-height: 1.42857143;\n  color: #999999;\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 solid;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\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:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\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-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 > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-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: 0;\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-bottom-left-radius: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\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[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: 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-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 64px;\n  padding: 18px 30px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 0;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 64px;\n  line-height: 64px;\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: 31px;\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 0;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 31px;\n  line-height: 31px;\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: 10px 18px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 1;\n  color: #333333;\n  text-align: center;\n  background-color: #e6e6e6;\n  border: 1px solid #cccccc;\n  border-radius: 0;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 13px;\n  border-radius: 0;\n}\n.input-group-addon.input-lg {\n  padding: 18px 30px;\n  font-size: 19px;\n  border-radius: 0;\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  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: #e6e6e6;\n}\n.nav > li.disabled > a {\n  color: #999999;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\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: #e6e6e6;\n  border-color: #007fff;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9.5px 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 #dddddd;\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: 0 0 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #e6e6e6 #e6e6e6 #dddddd;\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: #ffffff;\n  border: 1px solid #dddddd;\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: 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: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 0 0 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: #ffffff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 0;\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: #ffffff;\n  background-color: #007fff;\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: 0;\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 #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 0 0 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: #ffffff;\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: 21px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  max-height: 340px;\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.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: 14.5px 15px;\n  font-size: 19px;\n  line-height: 21px;\n  height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\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: 0;\n}\n.navbar-toggle:focus {\n  outline: none;\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.25px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 21px;\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: 21px;\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: 14.5px;\n    padding-bottom: 14.5px;\n  }\n  .navbar-nav.navbar-right:last-child {\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  }\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: 3.5px;\n  margin-bottom: 3.5px;\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 .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    padding-left: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\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}\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  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\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  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 3.5px;\n  margin-bottom: 3.5px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 9.5px;\n  margin-bottom: 9.5px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 14.5px;\n  margin-bottom: 14.5px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #222222;\n  border-color: #121212;\n}\n.navbar-default .navbar-brand {\n  color: #ffffff;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #ffffff;\n  background-color: none;\n}\n.navbar-default .navbar-text {\n  color: #ffffff;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: #090909;\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: #ffffff;\n  background-color: #090909;\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: #cccccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: transparent;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #090909;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #121212;\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: #090909;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\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: #ffffff;\n    background-color: #090909;\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: #ffffff;\n    background-color: #090909;\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: #cccccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #ffffff;\n}\n.navbar-default .navbar-link:hover {\n  color: #ffffff;\n}\n.navbar-inverse {\n  background-color: #007fff;\n  border-color: #0066cc;\n}\n.navbar-inverse .navbar-brand {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: none;\n}\n.navbar-inverse .navbar-text {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: #0066cc;\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: #ffffff;\n  background-color: #0066cc;\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: #ffffff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: transparent;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #0066cc;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #006ddb;\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: #0066cc;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #0066cc;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #0066cc;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\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: #ffffff;\n    background-color: #0066cc;\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: #ffffff;\n    background-color: #0066cc;\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: #ffffff;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 21px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 0;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  content: \"/\\00a0\";\n  padding: 0 5px;\n  color: #cccccc;\n}\n.breadcrumb > .active {\n  color: #999999;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 21px 0;\n  border-radius: 0;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 10px 18px;\n  line-height: 1.42857143;\n  text-decoration: none;\n  color: #007fff;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\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: 0;\n  border-top-left-radius: 0;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #0059b3;\n  background-color: #e6e6e6;\n  border-color: #dddddd;\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: 2;\n  color: #999999;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\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: #999999;\n  background-color: #ffffff;\n  border-color: #dddddd;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 18px 30px;\n  font-size: 19px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 13px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.pager {\n  padding-left: 0;\n  margin: 21px 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: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #e6e6e6;\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: #999999;\n  background-color: #ffffff;\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\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: #222222;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #090909;\n}\n.label-primary {\n  background-color: #007fff;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #0066cc;\n}\n.label-success {\n  background-color: #3fb618;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #2f8912;\n}\n.label-info {\n  background-color: #9954bb;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #7e3f9d;\n}\n.label-warning {\n  background-color: #ff7518;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #e45c00;\n}\n.label-danger {\n  background-color: #ff0039;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #cc002e;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 13px;\n  font-weight: bold;\n  color: #ffffff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #007fff;\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  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #007fff;\n  background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #e6e6e6;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 23px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 0;\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    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 67.5px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 21px;\n  line-height: 1.42857143;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0;\n  -webkit-transition: all 0.2s ease-in-out;\n  transition: all 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: #007fff;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 21px;\n  border: 1px solid transparent;\n  border-radius: 0;\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  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #3fb618;\n  border-color: #4e9f15;\n  color: #ffffff;\n}\n.alert-success hr {\n  border-top-color: #438912;\n}\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n.alert-info {\n  background-color: #9954bb;\n  border-color: #7643a8;\n  color: #ffffff;\n}\n.alert-info hr {\n  border-top-color: #693c96;\n}\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n.alert-warning {\n  background-color: #ff7518;\n  border-color: #ff4309;\n  color: #ffffff;\n}\n.alert-warning hr {\n  border-top-color: #ee3800;\n}\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n.alert-danger {\n  background-color: #ff0039;\n  border-color: #f0005e;\n  color: #ffffff;\n}\n.alert-danger hr {\n  border-top-color: #d60054;\n}\n.alert-danger .alert-link {\n  color: #e6e6e6;\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: 21px;\n  margin-bottom: 21px;\n  background-color: #cccccc;\n  border-radius: 0;\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: 13px;\n  line-height: 21px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #007fff;\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  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar {\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: 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  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #3fb618;\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: 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: #9954bb;\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: 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: #ff7518;\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: 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: #ff0039;\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: 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.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\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: #ffffff;\n  border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #007fff;\n  border-color: #007fff;\n}\na.list-group-item.active .list-group-item-heading,\na.list-group-item.active:hover .list-group-item-heading,\na.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item.active .list-group-item-text,\na.list-group-item.active:hover .list-group-item-text,\na.list-group-item.active:focus .list-group-item-text {\n  color: #cce5ff;\n}\n.list-group-item-success {\n  color: #ffffff;\n  background-color: #3fb618;\n}\na.list-group-item-success {\n  color: #ffffff;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #ffffff;\n  background-color: #379f15;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-info {\n  color: #ffffff;\n  background-color: #9954bb;\n}\na.list-group-item-info {\n  color: #ffffff;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #ffffff;\n  background-color: #8d46b0;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-warning {\n  color: #ffffff;\n  background-color: #ff7518;\n}\na.list-group-item-warning {\n  color: #ffffff;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #ffffff;\n  background-color: #fe6600;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-danger {\n  color: #ffffff;\n  background-color: #ff0039;\n}\na.list-group-item-danger {\n  color: #ffffff;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #ffffff;\n  background-color: #e60033;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\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: 21px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 0;\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: -1;\n  border-top-left-radius: -1;\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: 17px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: -1;\n  border-bottom-left-radius: -1;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .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  border-top: 0;\n  border-top-right-radius: -1;\n  border-top-left-radius: -1;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: -1;\n  border-bottom-left-radius: -1;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-right-radius: -1;\n  border-top-left-radius: -1;\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: -1;\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: -1;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: -1;\n  border-bottom-left-radius: -1;\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: -1;\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: -1;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\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: 21px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 0;\n  overflow: hidden;\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  border-top: 1px solid #dddddd;\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 #dddddd;\n}\n.panel-default {\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n.panel-primary {\n  border-color: #007fff;\n}\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #007fff;\n  border-color: #007fff;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #007fff;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #007fff;\n}\n.panel-success {\n  border-color: #4e9f15;\n}\n.panel-success > .panel-heading {\n  color: #ffffff;\n  background-color: #3fb618;\n  border-color: #4e9f15;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #4e9f15;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #4e9f15;\n}\n.panel-info {\n  border-color: #7643a8;\n}\n.panel-info > .panel-heading {\n  color: #ffffff;\n  background-color: #9954bb;\n  border-color: #7643a8;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #7643a8;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #7643a8;\n}\n.panel-warning {\n  border-color: #ff4309;\n}\n.panel-warning > .panel-heading {\n  color: #ffffff;\n  background-color: #ff7518;\n  border-color: #ff4309;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ff4309;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ff4309;\n}\n.panel-danger {\n  border-color: #f0005e;\n}\n.panel-danger > .panel-heading {\n  color: #ffffff;\n  background-color: #ff0039;\n  border-color: #f0005e;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #f0005e;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #f0005e;\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: 0;\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: 0;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 0;\n}\n.close {\n  float: right;\n  font-size: 22.5px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n  color: #000000;\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: auto;\n  overflow-y: scroll;\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  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  transform: translate(0, 0);\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\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: none;\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: #000000;\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  min-height: 16.42857143px;\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: 20px;\n}\n.modal-footer {\n  margin-top: 15px;\n  padding: 19px 20px 20px;\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@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: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 13px;\n  line-height: 1.4;\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: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: rgba(0, 0, 0, 0.9);\n  border-radius: 0;\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: rgba(0, 0, 0, 0.9);\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #ffffff;\n  background-clip: padding-box;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\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  white-space: normal;\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: 15px;\n  font-weight: normal;\n  line-height: 18px;\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: #ffffff;\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: #ffffff;\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: #ffffff;\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: #ffffff;\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  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.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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(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, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(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: none;\n  color: #ffffff;\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  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\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 #ffffff;\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: #ffffff;\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: #ffffff;\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: -15px;\n    margin-left: -15px;\n    font-size: 30px;\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.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-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.clearfix: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-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  visibility: hidden !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@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\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 (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\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: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\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: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\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 (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;\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@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n.navbar-inverse .badge {\n  background-color: #fff;\n  color: #007fff;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding-top: 19px;\n}\n.text-primary,\n.text-primary:hover {\n  color: #007fff;\n}\n.text-success,\n.text-success:hover {\n  color: #3fb618;\n}\n.text-danger,\n.text-danger:hover {\n  color: #ff0039;\n}\n.text-warning,\n.text-warning:hover {\n  color: #ff7518;\n}\n.text-info,\n.text-info:hover {\n  color: #9954bb;\n}\ntable a,\n.table a {\n  text-decoration: underline;\n}\ntable .success,\n.table .success,\ntable .warning,\n.table .warning,\ntable .danger,\n.table .danger,\ntable .info,\n.table .info {\n  color: #fff;\n}\ntable .success a,\n.table .success a,\ntable .warning a,\n.table .warning a,\ntable .danger a,\n.table .danger a,\ntable .info a,\n.table .info a {\n  color: #fff;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .form-control-feedback {\n  color: #ff7518;\n}\n.has-warning .form-control,\n.has-warning .form-control:focus {\n  border: 1px solid #ff7518;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .form-control-feedback {\n  color: #ff0039;\n}\n.has-error .form-control,\n.has-error .form-control:focus {\n  border: 1px solid #ff0039;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .form-control-feedback {\n  color: #3fb618;\n}\n.has-success .form-control,\n.has-success .form-control:focus {\n  border: 1px solid #3fb618;\n}\n.nav-pills > li > a {\n  border-radius: 0;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: none;\n}\n.alert {\n  border: none;\n}\n.alert .alert-link {\n  text-decoration: underline;\n  color: #fff;\n}\n.alert .close {\n  color: #fff;\n  text-decoration: none;\n  opacity: 0.4;\n}\n.alert .close:hover,\n.alert .close:focus {\n  color: #fff;\n  opacity: 1;\n}\n.label {\n  border-radius: 0;\n}\n.progress {\n  height: 8px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress .progress-bar {\n  font-size: 8px;\n  line-height: 8px;\n}\n.panel-heading,\n.panel-footer {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/themes/bootstrap-theme-cyborg.css",
    "content": "@import url(\"//fonts.googleapis.com/css?family=Droid+Sans:400,700\");\n\n/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden] {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\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}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !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  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]: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  @page  {\n    margin: 2cm .5cm;\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  .table td,\n  .table th {\n    background-color: #fff !important;\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-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Droid Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #888888;\n  background-color: #060606;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\na {\n  color: #2a9fd6;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a9fd6;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #060606;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #282828;\n}\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\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16.099999999999998px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #888888;\n}\n\n.text-primary {\n  color: #2a9fd6;\n}\n\n.text-warning {\n  color: #ffffff;\n}\n\n.text-danger {\n  color: #ffffff;\n}\n\n.text-success {\n  color: #ffffff;\n}\n\n.text-info {\n  color: #ffffff;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Droid Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n}\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 {\n  font-weight: normal;\n  line-height: 1;\n  color: #888888;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 18px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\nh1 small,\n.h1 small {\n  font-size: 24px;\n}\n\nh2 small,\n.h2 small {\n  font-size: 18px;\n}\n\nh3 small,\n.h3 small,\nh4 small,\n.h4 small {\n  font-size: 14px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #282828;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\n\n@media (min-width: 800px) {\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  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #888888;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #282828;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #555555;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #282828;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #282828;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre.prettyprint {\n  margin-bottom: 20px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: #181818;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\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.428571429;\n  vertical-align: top;\n  border-top: 1px solid #282828;\n}\n\n.table thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #282828;\n}\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\n.table tbody + tbody {\n  border-top: 2px solid #282828;\n}\n\n.table .table {\n  background-color: #060606;\n}\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\n.table-bordered {\n  border: 1px solid #282828;\n}\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 #282828;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #080808;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #282828;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\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: #282828;\n}\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: #77b300;\n  border-color: #809a00;\n}\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  background-color: #669a00;\n  border-color: #6a8000;\n}\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: #cc0000;\n  border-color: #bd001f;\n}\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  background-color: #b30000;\n  border-color: #a3001b;\n}\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: #ff8800;\n  border-color: #f05800;\n}\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  background-color: #e67a00;\n  border-color: #d64f00;\n}\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #282828;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n    background-color: #fff;\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 > thead > tr:last-child > th,\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 > thead > tr:last-child > td,\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}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\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: #888888;\n  border: 0;\n  border-bottom: 1px solid #282828;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\n.form-control:-moz-placeholder {\n  color: #888888;\n}\n\n.form-control::-moz-placeholder {\n  color: #888888;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #888888;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #888888;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 38px;\n  padding: 8px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #888888;\n  vertical-align: middle;\n  background-color: #ffffff;\n  border: 1px solid #282828;\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 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #adafae;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\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  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\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\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\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}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 56px;\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 56px;\n  line-height: 56px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #ffffff;\n}\n\n.has-warning .form-control {\n  border-color: #ffffff;\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\n.has-warning .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-warning .input-group-addon {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #ffffff;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #ffffff;\n}\n\n.has-error .form-control {\n  border-color: #ffffff;\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\n.has-error .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-error .input-group-addon {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #ffffff;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #ffffff;\n}\n\n.has-success .form-control {\n  border-color: #ffffff;\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\n.has-success .form-control:focus {\n  border-color: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n\n.has-success .input-group-addon {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #ffffff;\n}\n\n.form-control-static {\n  padding-top: 9px;\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #c8c8c8;\n}\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  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 9px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n\n.btn {\n  display: inline-block;\n  padding: 8px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #ffffff;\n  text-decoration: none;\n}\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, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #ffffff;\n  background-color: #424242;\n  border-color: #424242;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #ffffff;\n  background-color: #2d2d2d;\n  border-color: #232323;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\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: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: #424242;\n  border-color: #424242;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #2386b4;\n  border-color: #1f79a3;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\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: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: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #ff8800;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #d67200;\n  border-color: #c26700;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\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: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: #ff8800;\n  border-color: #ff8800;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #cc0000;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #a30000;\n  border-color: #8f0000;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\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: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: #cc0000;\n  border-color: #cc0000;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #5c8a00;\n  border-color: #4e7600;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\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: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: #77b300;\n  border-color: #77b300;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #9933cc;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #812bab;\n  border-color: #74279b;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\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: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: #9933cc;\n  border-color: #9933cc;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #2a9fd6;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\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\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a9fd6;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #888888;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\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.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\1f512\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\1f514\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\1f525\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\";\n}\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 solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n  content: \"\";\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\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  list-style: none;\n  background-color: #222222;\n  border: 1px solid #444444;\n  border: 1px solid rgba(255, 255, 255, 0.1);\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\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: rgba(255, 255, 255, 0.1);\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #ffffff;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #888888;\n}\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\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #888888;\n}\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\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #ffffff;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #ffffff;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\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\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\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\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\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\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\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\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\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\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\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 56px;\n  padding: 14px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 56px;\n  line-height: 56px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\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}\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}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\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\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 8px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #adafae;\n  border: 1px solid #282828;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 14px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\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 > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #222222;\n}\n\n.nav > li.disabled > a {\n  color: #888888;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #888888;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #222222;\n  border-color: #2a9fd6;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #282828;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: transparent transparent #282828;\n}\n\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #ffffff;\n  cursor: default;\n  background-color: #2a9fd6;\n  border: 1px solid #282828;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs.nav-justified > .active > a {\n  border-bottom-color: #060606;\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 5px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #2a9fd6;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs-justified > .active > a {\n  border-bottom-color: #060606;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #2a9fd6;\n  border-bottom-color: #2a9fd6;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a9fd6;\n  border-bottom-color: #2a9fd6;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\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\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\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-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  z-index: 1030;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\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  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\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\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\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 6px;\n  margin-right: -15px;\n  margin-bottom: 6px;\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, 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}\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  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\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\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 6px;\n  margin-bottom: 6px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #060606;\n  border-color: #000000;\n}\n\n.navbar-default .navbar-brand {\n  color: #ffffff;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #888888;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #888888;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\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: #ffffff;\n  background-color: transparent;\n}\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: #888888;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #282828;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #282828;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #000000;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\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: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #888888;\n  border-bottom-color: #888888;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #888888;\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: #ffffff;\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: #ffffff;\n    background-color: transparent;\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: #888888;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #888888;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #ffffff;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #ffffff;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\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: #ffffff;\n  background-color: transparent;\n}\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: #aaaaaa;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\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: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #888888;\n  border-bottom-color: #888888;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\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 > li > a {\n    color: #888888;\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: #ffffff;\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: #ffffff;\n    background-color: transparent;\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: #aaaaaa;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #888888;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #222222;\n  border-radius: 4px;\n}\n\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ffffff;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #888888;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 8px 12px;\n  margin-left: -1px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #222222;\n  border: 1px solid #282828;\n}\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\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\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #adafae;\n}\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: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #888888;\n  cursor: not-allowed;\n  background-color: #222222;\n  border-color: #282828;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 14px 16px;\n  font-size: 18px;\n}\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\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\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\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\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\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #222222;\n  border: 1px solid #282828;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #adafae;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #888888;\n  cursor: not-allowed;\n  background-color: #222222;\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #424242;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #282828;\n}\n\n.label-primary {\n  background-color: #2a9fd6;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #2180ac;\n}\n\n.label-success {\n  background-color: #77b300;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #558000;\n}\n\n.label-info {\n  background-color: #9933cc;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #7a29a3;\n}\n\n.label-warning {\n  background-color: #ff8800;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #cc6d00;\n}\n\n.label-danger {\n  background-color: #cc0000;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #990000;\n}\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #2a9fd6;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #2a9fd6;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #151515;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #060606;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #2a9fd6;\n}\n\n.thumbnail > img {\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #888888;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #809a00;\n}\n\n.alert-success hr {\n  border-top-color: #6a8000;\n}\n\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-info {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #6e2caf;\n}\n\n.alert-info hr {\n  border-top-color: #61279b;\n}\n\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-warning {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #f05800;\n}\n\n.alert-warning hr {\n  border-top-color: #d64f00;\n}\n\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n\n.alert-danger {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #bd001f;\n}\n\n.alert-danger hr {\n  border-top-color: #a3001b;\n}\n\n.alert-danger .alert-link {\n  color: #e6e6e6;\n}\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\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\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\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #222222;\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\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #2a9fd6;\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          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-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\n.progress-bar-success {\n  background-color: #77b300;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-info {\n  background-color: #9933cc;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-warning {\n  background-color: #ff8800;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.progress-bar-danger {\n  background-color: #cc0000;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\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: -moz-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\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #222222;\n  border: 1px solid #282828;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #888888;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #ffffff;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #484848;\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\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  color: inherit;\n}\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: #d5ecf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #222222;\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\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #282828;\n}\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\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #3c3c3c;\n  border-top: 1px solid #282828;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #282828;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #282828;\n}\n\n.panel-default {\n  border-color: #282828;\n}\n\n.panel-default > .panel-heading {\n  color: #282828;\n  background-color: #3c3c3c;\n  border-color: #282828;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #282828;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #282828;\n}\n\n.panel-primary {\n  border-color: #2a9fd6;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #2a9fd6;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #2a9fd6;\n}\n\n.panel-success {\n  border-color: #809a00;\n}\n\n.panel-success > .panel-heading {\n  color: #ffffff;\n  background-color: #77b300;\n  border-color: #809a00;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #809a00;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #809a00;\n}\n\n.panel-warning {\n  border-color: #f05800;\n}\n\n.panel-warning > .panel-heading {\n  color: #ffffff;\n  background-color: #ff8800;\n  border-color: #f05800;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #f05800;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #f05800;\n}\n\n.panel-danger {\n  border-color: #bd001f;\n}\n\n.panel-danger > .panel-heading {\n  color: #ffffff;\n  background-color: #cc0000;\n  border-color: #bd001f;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bd001f;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bd001f;\n}\n\n.panel-info {\n  border-color: #6e2caf;\n}\n\n.panel-info > .panel-heading {\n  color: #ffffff;\n  background-color: #9933cc;\n  border-color: #6e2caf;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #6e2caf;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #6e2caf;\n}\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #151515;\n  border: 1px solid #030303;\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\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\nbody.modal-open,\n.modal-open .navbar-fixed-top,\n.modal-open .navbar-fixed-bottom {\n  margin-right: 15px;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-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\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #202020;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\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}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #282828;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #282828;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    right: auto;\n    left: 50%;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\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}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: rgba(0, 0, 0, 0.9);\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: rgba(0, 0, 0, 0.9);\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #202020;\n  border: 1px solid #999999;\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  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #181818;\n  border-bottom: 1px solid #0b0b0b;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\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\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #202020;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #202020;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #202020;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #202020;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-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\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-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\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\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  left: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\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\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  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\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\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px;\n  }\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.visible-xs {\n  display: none !important;\n}\n\ntr.visible-xs {\n  display: none !important;\n}\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !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\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm {\n  display: none !important;\n}\n\ntr.visible-sm {\n  display: none !important;\n}\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !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\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md {\n  display: none !important;\n}\n\ntr.visible-md {\n  display: none !important;\n}\n\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !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\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg {\n  display: none !important;\n}\n\ntr.visible-lg {\n  display: none !important;\n}\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !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\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-md {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-md {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n  tr.hidden-md {\n    display: none !important;\n  }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-md {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print {\n  display: none !important;\n}\n\ntr.visible-print {\n  display: none !important;\n}\n\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !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  .hidden-print {\n    display: none !important;\n  }\n  tr.hidden-print {\n    display: none !important;\n  }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}\n\n.navbar {\n  border-bottom: 1px solid #282828;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  color: #fff;\n}\n\n.text-primary {\n  color: #2a9fd6;\n}\n\n.text-success {\n  color: #77b300;\n}\n\n.text-danger {\n  color: #cc0000;\n}\n\n.text-warning {\n  color: #ff8800;\n}\n\n.text-info {\n  color: #9933cc;\n}\n\n.table tr.success,\n.table tr.warning,\n.table tr.danger {\n  color: #fff;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #ff8800;\n}\n\n.has-warning .form-control,\n.has-warning .form-control:focus {\n  border-color: #ff8800;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #cc0000;\n}\n\n.has-error .form-control,\n.has-error .form-control:focus {\n  border-color: #cc0000;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #77b300;\n}\n\n.has-success .form-control,\n.has-success .form-control:focus {\n  border-color: #77b300;\n}\n\nlegend {\n  color: #fff;\n}\n\n.input-group-addon {\n  background-color: #424242;\n}\n\n.nav .caret,\n.nav a:hover .caret {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n\n.nav-tabs a,\n.nav-pills a,\n.breadcrumb a,\n.pagination a,\n.pager a {\n  color: #fff;\n}\n\n.alert .alert-link,\n.alert a {\n  color: #ffffff;\n  text-decoration: underline;\n}\n\n.jumbotron h1,\n.jumbotron h2,\n.jumbotron h3,\n.jumbotron h4,\n.jumbotron h5,\n.jumbotron h6 {\n  color: #fff;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\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\n.affix {\n  position: fixed;\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/themes/bootstrap-theme-flatly.css",
    "content": "@import url(\"//fonts.googleapis.com/css?family=Lato:400,700,400italic\");\n/*!\n * Bootswatch v3.1.1+1\n * Homepage: http://bootswatch.com\n * Copyright 2012-2014 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\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,\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: 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  -moz-box-sizing: content-box;\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  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\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@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !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^=\"javascript:\"]:after,\n  a[href^=\"#\"]: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  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\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-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\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: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Lato\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #2c3e50;\n  background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #18bc9c;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #18bc9c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\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: #ffffff;\n  border: 1px solid #ecf0f1;\n  border-radius: 4px;\n  -webkit-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: 21px;\n  margin-bottom: 21px;\n  border: 0;\n  border-top: 1px solid #ecf0f1;\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}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Lato\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 400;\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: #b4bcc2;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 21px;\n  margin-bottom: 10.5px;\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: 10.5px;\n  margin-bottom: 10.5px;\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: 39px;\n}\nh2,\n.h2 {\n  font-size: 32px;\n}\nh3,\n.h3 {\n  font-size: 26px;\n}\nh4,\n.h4 {\n  font-size: 19px;\n}\nh5,\n.h5 {\n  font-size: 15px;\n}\nh6,\n.h6 {\n  font-size: 13px;\n}\np {\n  margin: 0 0 10.5px;\n}\n.lead {\n  margin-bottom: 21px;\n  font-size: 17px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 22.5px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\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-muted {\n  color: #b4bcc2;\n}\n.text-primary {\n  color: #2c3e50;\n}\na.text-primary:hover {\n  color: #1a242f;\n}\n.text-success {\n  color: #ffffff;\n}\na.text-success:hover {\n  color: #e6e6e6;\n}\n.text-info {\n  color: #ffffff;\n}\na.text-info:hover {\n  color: #e6e6e6;\n}\n.text-warning {\n  color: #ffffff;\n}\na.text-warning:hover {\n  color: #e6e6e6;\n}\n.text-danger {\n  color: #ffffff;\n}\na.text-danger:hover {\n  color: #e6e6e6;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #2c3e50;\n}\na.bg-primary:hover {\n  background-color: #1a242f;\n}\n.bg-success {\n  background-color: #18bc9c;\n}\na.bg-success:hover {\n  background-color: #128f76;\n}\n.bg-info {\n  background-color: #3498db;\n}\na.bg-info:hover {\n  background-color: #217dbb;\n}\n.bg-warning {\n  background-color: #f39c12;\n}\na.bg-warning:hover {\n  background-color: #c87f0a;\n}\n.bg-danger {\n  background-color: #e74c3c;\n}\na.bg-danger:hover {\n  background-color: #d62c1a;\n}\n.page-header {\n  padding-bottom: 9.5px;\n  margin: 42px 0 21px;\n  border-bottom: 1px solid transparent;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10.5px;\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: 21px;\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 #b4bcc2;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10.5px 21px;\n  margin: 0 0 21px;\n  font-size: 18.75px;\n  border-left: 5px solid #ecf0f1;\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: #b4bcc2;\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 #ecf0f1;\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}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 21px;\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  white-space: nowrap;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #ffffff;\n  background-color: #333333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\npre {\n  display: block;\n  padding: 10px;\n  margin: 0 0 10.5px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #7b8a8b;\n  background-color: #ecf0f1;\n  border: 1px solid #cccccc;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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: 0%;\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  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 21px;\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 #ecf0f1;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ecf0f1;\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 #ecf0f1;\n}\n.table .table {\n  background-color: #ffffff;\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 #ecf0f1;\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 #ecf0f1;\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-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #ecf0f1;\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: #ecf0f1;\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.active:hover > th {\n  background-color: #dde4e6;\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: #18bc9c;\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.success:hover > th {\n  background-color: #15a589;\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: #3498db;\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.info:hover > th {\n  background-color: #258cd1;\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: #f39c12;\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.warning:hover > th {\n  background-color: #e08e0b;\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: #e74c3c;\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.danger:hover > th {\n  background-color: #e43725;\n}\n@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15.75px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ecf0f1;\n    -webkit-overflow-scrolling: touch;\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: 21px;\n  font-size: 22.5px;\n  line-height: inherit;\n  color: #2c3e50;\n  border: 0;\n  border-bottom: 1px solid transparent;\n}\nlabel {\n  display: inline-block;\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  /* IE8-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: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 11px;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #2c3e50;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 43px;\n  padding: 10px 15px;\n  font-size: 15px;\n  line-height: 1.42857143;\n  color: #2c3e50;\n  background-color: #ffffff;\n  background-image: none;\n  border: 1px solid #dce4ec;\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  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #2c3e50;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #acb6c0;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #acb6c0;\n}\n.form-control::-webkit-input-placeholder {\n  color: #acb6c0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #ecf0f1;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 43px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  display: block;\n  min-height: 21px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n}\n.radio label,\n.checkbox label {\n  display: inline;\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  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\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],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.input-sm {\n  height: 33px;\n  padding: 6px 9px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 33px;\n  line-height: 33px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 64px;\n  padding: 18px 27px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 64px;\n  line-height: 64px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 53.75px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 26px;\n  right: 0;\n  display: block;\n  width: 43px;\n  height: 43px;\n  line-height: 43px;\n  text-align: center;\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  color: #ffffff;\n}\n.has-success .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-success .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #18bc9c;\n}\n.has-success .form-control-feedback {\n  color: #ffffff;\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  color: #ffffff;\n}\n.has-warning .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-warning .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #f39c12;\n}\n.has-warning .form-control-feedback {\n  color: #ffffff;\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  color: #ffffff;\n}\n.has-error .form-control {\n  border-color: #ffffff;\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: #e6e6e6;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;\n}\n.has-error .input-group-addon {\n  color: #ffffff;\n  border-color: #ffffff;\n  background-color: #e74c3c;\n}\n.has-error .form-control-feedback {\n  color: #ffffff;\n}\n.form-control-static {\n  margin-bottom: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #597ea2;\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 .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    padding-left: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .control-label,\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: 11px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 32px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 11px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 10px 15px;\n  font-size: 15px;\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  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #ffffff;\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  pointer-events: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default {\n  color: #ffffff;\n  background-color: #95a5a6;\n  border-color: #95a5a6;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #ffffff;\n  background-color: #7f9293;\n  border-color: #74898a;\n}\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\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: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: #95a5a6;\n  border-color: #95a5a6;\n}\n.btn-default .badge {\n  color: #95a5a6;\n  background-color: #ffffff;\n}\n.btn-primary {\n  color: #ffffff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #1e2a36;\n  border-color: #161f29;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\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: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: #2c3e50;\n  border-color: #2c3e50;\n}\n.btn-primary .badge {\n  color: #2c3e50;\n  background-color: #ffffff;\n}\n.btn-success {\n  color: #ffffff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #13987e;\n  border-color: #11866f;\n}\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\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: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: #18bc9c;\n  border-color: #18bc9c;\n}\n.btn-success .badge {\n  color: #18bc9c;\n  background-color: #ffffff;\n}\n.btn-info {\n  color: #ffffff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #2383c4;\n  border-color: #2077b2;\n}\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\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: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: #3498db;\n  border-color: #3498db;\n}\n.btn-info .badge {\n  color: #3498db;\n  background-color: #ffffff;\n}\n.btn-warning {\n  color: #ffffff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #d2850b;\n  border-color: #be780a;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\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: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: #f39c12;\n  border-color: #f39c12;\n}\n.btn-warning .badge {\n  color: #f39c12;\n  background-color: #ffffff;\n}\n.btn-danger {\n  color: #ffffff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #df2e1b;\n  border-color: #cd2a19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\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: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: #e74c3c;\n  border-color: #e74c3c;\n}\n.btn-danger .badge {\n  color: #e74c3c;\n  background-color: #ffffff;\n}\n.btn-link {\n  color: #18bc9c;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\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: #18bc9c;\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: #b4bcc2;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 18px 27px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 6px 9px;\n  font-size: 13px;\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: 13px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\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  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}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n  transition: height 0.35s ease;\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.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: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro: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.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\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: 15px;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\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: 9.5px 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: #7b8a8b;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #ffffff;\n  background-color: #2c3e50;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #2c3e50;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #b4bcc2;\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: 13px;\n  line-height: 1.42857143;\n  color: #b4bcc2;\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 solid;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\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:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\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-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 > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-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-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 4px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\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[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: 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-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 64px;\n  padding: 18px 27px;\n  font-size: 19px;\n  line-height: 1.33;\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: 64px;\n  line-height: 64px;\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: 33px;\n  padding: 6px 9px;\n  font-size: 13px;\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: 33px;\n  line-height: 33px;\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: 10px 15px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 1;\n  color: #2c3e50;\n  text-align: center;\n  background-color: #ecf0f1;\n  border: 1px solid #dce4ec;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 6px 9px;\n  font-size: 13px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 18px 27px;\n  font-size: 19px;\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  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: #ecf0f1;\n}\n.nav > li.disabled > a {\n  color: #b4bcc2;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #b4bcc2;\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: #ecf0f1;\n  border-color: #18bc9c;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9.5px 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 #ecf0f1;\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: #ecf0f1 #ecf0f1 #ecf0f1;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #2c3e50;\n  background-color: #ffffff;\n  border: 1px solid #ecf0f1;\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 #ecf0f1;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ecf0f1;\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: #ffffff;\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: #ffffff;\n  background-color: #2c3e50;\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 #ecf0f1;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ecf0f1;\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: #ffffff;\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: 60px;\n  margin-bottom: 21px;\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  max-height: 340px;\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.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: 19.5px 15px;\n  font-size: 19px;\n  line-height: 21px;\n  height: 60px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\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: 13px;\n  margin-bottom: 13px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: none;\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: 9.75px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 21px;\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: 21px;\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: 19.5px;\n    padding-bottom: 19.5px;\n  }\n  .navbar-nav.navbar-right:last-child {\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  }\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: 8.5px;\n  margin-bottom: 8.5px;\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 .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    padding-left: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\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}\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  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\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  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8.5px;\n  margin-bottom: 8.5px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 13.5px;\n  margin-bottom: 13.5px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 19px;\n  margin-bottom: 19px;\n}\n.navbar-text {\n  margin-top: 19.5px;\n  margin-bottom: 19.5px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #2c3e50;\n  border-color: transparent;\n}\n.navbar-default .navbar-brand {\n  color: #ffffff;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #18bc9c;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #18bc9c;\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: #ffffff;\n  background-color: #1a242f;\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: #cccccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #1a242f;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #1a242f;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: transparent;\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: #1a242f;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\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: #18bc9c;\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: #ffffff;\n    background-color: #1a242f;\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: #cccccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #ffffff;\n}\n.navbar-default .navbar-link:hover {\n  color: #18bc9c;\n}\n.navbar-inverse {\n  background-color: #18bc9c;\n  border-color: transparent;\n}\n.navbar-inverse .navbar-brand {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #2c3e50;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #2c3e50;\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: #ffffff;\n  background-color: #15a589;\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: #cccccc;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #128f76;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #128f76;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #149c82;\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: #15a589;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\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: #2c3e50;\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: #ffffff;\n    background-color: #15a589;\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: #cccccc;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #2c3e50;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 21px;\n  list-style: none;\n  background-color: #ecf0f1;\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: #cccccc;\n}\n.breadcrumb > .active {\n  color: #95a5a6;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 21px 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: 10px 15px;\n  line-height: 1.42857143;\n  text-decoration: none;\n  color: #ffffff;\n  background-color: #18bc9c;\n  border: 1px solid transparent;\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  color: #ffffff;\n  background-color: #0f7864;\n  border-color: transparent;\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: 2;\n  color: #ffffff;\n  background-color: #0f7864;\n  border-color: transparent;\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: #ecf0f1;\n  background-color: #3be6c4;\n  border-color: transparent;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 18px 27px;\n  font-size: 19px;\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: 6px 9px;\n  font-size: 13px;\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: 21px 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: #18bc9c;\n  border: 1px solid transparent;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #0f7864;\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: #ffffff;\n  background-color: #18bc9c;\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: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\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: #95a5a6;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #798d8f;\n}\n.label-primary {\n  background-color: #2c3e50;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #1a242f;\n}\n.label-success {\n  background-color: #18bc9c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #128f76;\n}\n.label-info {\n  background-color: #3498db;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #217dbb;\n}\n.label-warning {\n  background-color: #f39c12;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #c87f0a;\n}\n.label-danger {\n  background-color: #e74c3c;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #d62c1a;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 13px;\n  font-weight: bold;\n  color: #ffffff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #2c3e50;\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  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #2c3e50;\n  background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #ecf0f1;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 23px;\n  font-weight: 200;\n}\n.container .jumbotron {\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    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 67.5px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 21px;\n  line-height: 1.42857143;\n  background-color: #ffffff;\n  border: 1px solid #ecf0f1;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  transition: all 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: #18bc9c;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #2c3e50;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 21px;\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  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n  color: #ffffff;\n}\n.alert-success hr {\n  border-top-color: #15a589;\n}\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n.alert-info {\n  background-color: #3498db;\n  border-color: #3498db;\n  color: #ffffff;\n}\n.alert-info hr {\n  border-top-color: #258cd1;\n}\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n.alert-warning {\n  background-color: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.alert-warning hr {\n  border-top-color: #e08e0b;\n}\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n.alert-danger {\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n  color: #ffffff;\n}\n.alert-danger hr {\n  border-top-color: #e43725;\n}\n.alert-danger .alert-link {\n  color: #e6e6e6;\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: 21px;\n  margin-bottom: 21px;\n  background-color: #ecf0f1;\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: 13px;\n  line-height: 21px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #2c3e50;\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  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar {\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: 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  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #18bc9c;\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: 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: #3498db;\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: 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: #f39c12;\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: 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: #e74c3c;\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: 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.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\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: #ffffff;\n  border: 1px solid #ecf0f1;\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}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #ecf0f1;\n}\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\na.list-group-item.active .list-group-item-heading,\na.list-group-item.active:hover .list-group-item-heading,\na.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item.active .list-group-item-text,\na.list-group-item.active:hover .list-group-item-text,\na.list-group-item.active:focus .list-group-item-text {\n  color: #8aa4be;\n}\n.list-group-item-success {\n  color: #ffffff;\n  background-color: #18bc9c;\n}\na.list-group-item-success {\n  color: #ffffff;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #ffffff;\n  background-color: #15a589;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-info {\n  color: #ffffff;\n  background-color: #3498db;\n}\na.list-group-item-info {\n  color: #ffffff;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #ffffff;\n  background-color: #258cd1;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-warning {\n  color: #ffffff;\n  background-color: #f39c12;\n}\na.list-group-item-warning {\n  color: #ffffff;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #ffffff;\n  background-color: #e08e0b;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\n}\n.list-group-item-danger {\n  color: #ffffff;\n  background-color: #e74c3c;\n}\na.list-group-item-danger {\n  color: #ffffff;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #ffffff;\n  background-color: #e43725;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #ffffff;\n  border-color: #ffffff;\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: 21px;\n  background-color: #ffffff;\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: 17px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #ecf0f1;\n  border-top: 1px solid #ecf0f1;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .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  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  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\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 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 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  border-top: 1px solid #ecf0f1;\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: 21px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n  overflow: hidden;\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  border-top: 1px solid #ecf0f1;\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 #ecf0f1;\n}\n.panel-default {\n  border-color: #ecf0f1;\n}\n.panel-default > .panel-heading {\n  color: #2c3e50;\n  background-color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ecf0f1;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ecf0f1;\n}\n.panel-primary {\n  border-color: #2c3e50;\n}\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #2c3e50;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #2c3e50;\n}\n.panel-success {\n  border-color: #18bc9c;\n}\n.panel-success > .panel-heading {\n  color: #ffffff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #18bc9c;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #18bc9c;\n}\n.panel-info {\n  border-color: #3498db;\n}\n.panel-info > .panel-heading {\n  color: #ffffff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #3498db;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #3498db;\n}\n.panel-warning {\n  border-color: #f39c12;\n}\n.panel-warning > .panel-heading {\n  color: #ffffff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #f39c12;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #f39c12;\n}\n.panel-danger {\n  border-color: #e74c3c;\n}\n.panel-danger > .panel-heading {\n  color: #ffffff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #e74c3c;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #e74c3c;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #ecf0f1;\n  border: 1px solid transparent;\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: 22.5px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: none;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n  color: #000000;\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: auto;\n  overflow-y: scroll;\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  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  transform: translate(0, 0);\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\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: none;\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: #000000;\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  min-height: 16.42857143px;\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: 20px;\n}\n.modal-footer {\n  margin-top: 15px;\n  padding: 19px 20px 20px;\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@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: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 13px;\n  line-height: 1.4;\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: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\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: rgba(0, 0, 0, 0.9);\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: rgba(0, 0, 0, 0.9);\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #ffffff;\n  background-clip: padding-box;\n  border: 1px solid #cccccc;\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  white-space: normal;\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: 15px;\n  font-weight: normal;\n  line-height: 18px;\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: #ffffff;\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: #ffffff;\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: #ffffff;\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: #ffffff;\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  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.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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(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, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(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: none;\n  color: #ffffff;\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  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\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 #ffffff;\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: #ffffff;\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: #ffffff;\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: -15px;\n    margin-left: -15px;\n    font-size: 30px;\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.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-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.clearfix: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-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  visibility: hidden !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@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\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 (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\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: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\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: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\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 (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;\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@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n.navbar {\n  border-width: 0;\n}\n.navbar-default .badge {\n  background-color: #fff;\n  color: #2c3e50;\n}\n.navbar-inverse .badge {\n  background-color: #fff;\n  color: #18bc9c;\n}\n.navbar-brand {\n  padding: 18.5px 15px 20.5px;\n}\n.btn:active {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.text-primary,\n.text-primary:hover {\n  color: #2c3e50;\n}\n.text-success,\n.text-success:hover {\n  color: #18bc9c;\n}\n.text-danger,\n.text-danger:hover {\n  color: #e74c3c;\n}\n.text-warning,\n.text-warning:hover {\n  color: #f39c12;\n}\n.text-info,\n.text-info:hover {\n  color: #3498db;\n}\ntable a,\n.table a {\n  text-decoration: underline;\n}\ntable .success,\n.table .success,\ntable .warning,\n.table .warning,\ntable .danger,\n.table .danger,\ntable .info,\n.table .info {\n  color: #fff;\n}\ntable .success a,\n.table .success a,\ntable .warning a,\n.table .warning a,\ntable .danger a,\n.table .danger a,\ntable .info a,\n.table .info a {\n  color: #fff;\n}\ntable > thead > tr > th,\n.table > thead > tr > th,\ntable > tbody > tr > th,\n.table > tbody > tr > th,\ntable > tfoot > tr > th,\n.table > tfoot > tr > th,\ntable > thead > tr > td,\n.table > thead > tr > td,\ntable > tbody > tr > td,\n.table > tbody > tr > td,\ntable > tfoot > tr > td,\n.table > tfoot > tr > td {\n  border: none;\n}\ntable-bordered > thead > tr > th,\n.table-bordered > thead > tr > th,\ntable-bordered > tbody > tr > th,\n.table-bordered > tbody > tr > th,\ntable-bordered > tfoot > tr > th,\n.table-bordered > tfoot > tr > th,\ntable-bordered > thead > tr > td,\n.table-bordered > thead > tr > td,\ntable-bordered > tbody > tr > td,\n.table-bordered > tbody > tr > td,\ntable-bordered > tfoot > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ecf0f1;\n}\n.form-control,\ninput {\n  border-width: 2px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.form-control:focus,\ninput:focus {\n  -webkit-box-shadow: none;\n  box-shadow: none;\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 .form-control-feedback {\n  color: #f39c12;\n}\n.has-warning .form-control,\n.has-warning .form-control:focus {\n  border: 2px solid #f39c12;\n}\n.has-warning .input-group-addon {\n  border-color: #f39c12;\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 .form-control-feedback {\n  color: #e74c3c;\n}\n.has-error .form-control,\n.has-error .form-control:focus {\n  border: 2px solid #e74c3c;\n}\n.has-error .input-group-addon {\n  border-color: #e74c3c;\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 .form-control-feedback {\n  color: #18bc9c;\n}\n.has-success .form-control,\n.has-success .form-control:focus {\n  border: 2px solid #18bc9c;\n}\n.has-success .input-group-addon {\n  border-color: #18bc9c;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  border-color: transparent;\n}\n.pager a,\n.pager a:hover {\n  color: #fff;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  background-color: #3be6c4;\n}\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert .close {\n  color: #fff;\n  text-decoration: none;\n  opacity: 0.4;\n}\n.alert .close:hover,\n.alert .close:focus {\n  color: #fff;\n  opacity: 1;\n}\n.progress {\n  height: 10px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress .progress-bar {\n  font-size: 10px;\n  line-height: 10px;\n}\n.well {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/bootstrap/themes/bootstrap-theme.css",
    "content": ".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\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\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6));\n  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%);\n  background-repeat: repeat-x;\n  border-color: #e0e0e0;\n  border-color: #ccc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);\n}\n\n.btn-default:active,\n.btn-default.active {\n  background-color: #e6e6e6;\n  border-color: #e0e0e0;\n}\n\n.btn-primary {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  background-repeat: repeat-x;\n  border-color: #2d6ca2;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #3071a9;\n  border-color: #2d6ca2;\n}\n\n.btn-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));\n  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);\n  background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  background-repeat: repeat-x;\n  border-color: #419641;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n\n.btn-success:active,\n.btn-success.active {\n  background-color: #449d44;\n  border-color: #419641;\n}\n\n.btn-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));\n  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);\n  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  background-repeat: repeat-x;\n  border-color: #eb9316;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #ec971f;\n  border-color: #eb9316;\n}\n\n.btn-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));\n  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);\n  background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  background-repeat: repeat-x;\n  border-color: #c12e2a;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c9302c;\n  border-color: #c12e2a;\n}\n\n.btn-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));\n  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);\n  background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  background-repeat: repeat-x;\n  border-color: #2aabd2;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n\n.btn-info:active,\n.btn-info.active {\n  background-color: #31b0d5;\n  border-color: #2aabd2;\n}\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\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #357ebd;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.navbar {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));\n  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\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\n.navbar .navbar-nav > .active > a {\n  background-color: #f8f8f8;\n}\n\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n\n.navbar-inverse {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));\n  background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);\n  background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n}\n\n.navbar-inverse .navbar-nav > .active > a {\n  background-color: #222222;\n}\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\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 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\n.alert-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));\n  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);\n  background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n}\n\n.alert-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));\n  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);\n  background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n}\n\n.alert-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));\n  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);\n  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n}\n\n.alert-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));\n  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);\n  background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n}\n\n.progress {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);\n  background-image: -moz-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\n.progress-bar {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n\n.progress-bar-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));\n  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);\n  background-image: -moz-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\n.progress-bar-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));\n  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);\n  background-image: -moz-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\n.progress-bar-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));\n  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);\n  background-image: -moz-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\n.progress-bar-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));\n  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);\n  background-image: -moz-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\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\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #3071a9;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  background-repeat: repeat-x;\n  border-color: #3278b3;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n}\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\n.panel-default > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));\n  background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);\n  background-image: -moz-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\n.panel-primary > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.panel-success > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));\n  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);\n  background-image: -moz-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\n.panel-info > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));\n  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);\n  background-image: -moz-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\n.panel-warning > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));\n  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);\n  background-image: -moz-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\n.panel-danger > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));\n  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);\n  background-image: -moz-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\n.well {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);\n  background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\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}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Content/docs.css",
    "content": "body {\n  font-weight: 300;\n}\n\na:hover,\na:focus {\n  text-decoration: none;\n}\n\n.container {\n  max-width: 700px;\n}\n\nh2 {\n  text-align: center;\n  font-weight: 300;\n}\n\n\n/* Header\n-------------------------------------------------- */\n\n.jumbotron {\n  position: relative;\n  font-size: 16px;\n  color: #fff;\n  color: rgba(255,255,255,.75);\n  text-align: center;\n  background-color: #b94a48;\n  border-radius: 0;\n}\n.jumbotron h1,\n.jumbotron .glyphicon-ok {\n  margin-bottom: 15px;\n  font-weight: 300;\n  letter-spacing: -1px;\n  color: #fff;\n}\n.jumbotron .glyphicon-ok {\n  font-size: 40px;\n  line-height: 1;\n}\n.btn-outline {\n  margin-top: 15px;\n  margin-bottom: 15px;\n  padding: 18px 24px;\n  font-size: inherit;\n  font-weight: 500;\n  color: #fff; /* redeclare to override the `.jumbotron a` */\n  background-color: transparent;\n  border-color: #fff;\n  border-color: rgba(255,255,255,.5);\n  transition: all .1s ease-in-out;\n}\n.btn-outline:hover,\n.btn-outline:active {\n  color: #b94a48;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.jumbotron:after {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  content: \"\";\n  height: 30px;\n  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0), rgba(0,0,0,.1));\n  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0), rgba(0,0,0,.1));\n}\n\n.jumbotron p a,\n.jumbotron-links a {\n  font-weight: 500;\n  color: #fff;\n  transition: all .1s ease-in-out;\n}\n.jumbotron p a:hover,\n.jumbotron-links a:hover {\n  text-shadow: 0 0 10px rgba(255,255,255,.55);\n}\n\n/* Textual links */\n.jumbotron-links {\n  margin-top: 15px;\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n  font-size: 14px;\n}\n.jumbotron-links li {\n  display: inline;\n}\n.jumbotron-links li + li {\n  margin-left: 20px;\n}\n\n@media (min-width: 768px) {\n  .jumbotron {\n    padding-top: 100px;\n    padding-bottom: 100px;\n    font-size: 21px;\n  }\n  .jumbotron h1,\n  .jumbotron .glyphicon-ok {\n    font-size: 50px;\n  }\n}\n\n/* Steps for setup\n-------------------------------------------------- */\n\n.how-to {\n  padding: 50px 20px;\n  border-top: 1px solid #eee;\n}\n.how-to li {\n  font-size: 21px;\n  line-height: 1.5;\n  margin-top: 20px;\n}\n.how-to li p {\n  font-size: 16px;\n  color: #555;\n}\n.how-to code {\n  font-size: 85%;\n  color: #b94a48;\n  background-color: #fcf3f2;\n  word-wrap: break-word;\n  white-space: normal;\n}\n\n/* Icons\n-------------------------------------------------- */\n\n.the-icons {\n  padding: 40px 10px;\n  font-size: 20px;\n  line-height: 2;\n  color: #333;\n  text-align: center;\n}\n.the-icons .glyphicon {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n/* Footer\n-------------------------------------------------- */\n\n.footer {\n  padding: 50px 30px;\n  color: #777;\n  text-align: center;\n  border-top: 1px solid #eee;\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/AccountController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System;\n    using System.Linq;\n    using System.Net;\n    using System.Security.Claims;\n    using System.Text.RegularExpressions;\n    using System.Threading.Tasks;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using Microsoft.AspNet.Identity;\n    using Microsoft.AspNet.Identity.EntityFramework;\n    using Microsoft.Owin.Security;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Common;\n    using OJS.Web.ViewModels.Account;\n\n    using Recaptcha;\n\n    [Authorize]\n    public class AccountController : BaseController\n    {\n        // Used for XSRF protection when adding external logins\n        private const string XsrfKey = \"XsrfId\";\n\n        public AccountController(IOjsData data)\n            : this(data, new OjsUserManager<UserProfile>(new UserStore<UserProfile>(data.Context.DbContext)))\n        {\n        }\n\n        public AccountController(IOjsData data, UserManager<UserProfile> userManager)\n            : base(data)\n        {\n            this.UserManager = userManager;\n        }\n\n        public UserManager<UserProfile> UserManager { get; private set; }\n\n        private IAuthenticationManager AuthenticationManager => this.HttpContext.GetOwinContext().Authentication;\n\n        // GET: /Account/Login\n        [AllowAnonymous]\n        public ActionResult Login(string returnUrl)\n        {\n            this.ViewBag.ReturnUrl = returnUrl;\n            return this.View();\n        }\n\n        // POST: /Account/Login\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)\n        {\n            if (this.ModelState.IsValid)\n            {\n                var user = await this.UserManager.FindAsync(model.UserName, model.Password);\n                if (user != null)\n                {\n                    await this.SignInAsync(user, model.RememberMe);\n                    return this.RedirectToLocal(returnUrl);\n                }\n\n                this.ModelState.AddModelError(string.Empty, Resources.Account.AccountViewModels.Invalid_username_or_password);\n            }\n\n            // If we got this far, something failed, redisplay form\n            return this.View(model);\n        }\n\n        // GET: /Account/Register\n        [AllowAnonymous]\n        public ActionResult Register()\n        {\n            if (this.User.Identity.IsAuthenticated)\n            {\n                return this.RedirectToAction(\"Manage\");\n            }\n\n            return this.View();\n        }\n\n        // POST: /Account/Register\n        [HttpPost]\n        [AllowAnonymous]\n        [RecaptchaControlMvc.CaptchaValidator]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Register(RegisterViewModel model, bool captchaValid)\n        {\n            if (this.Data.Users.All().Any(x => x.Email == model.Email))\n            {\n                this.ModelState.AddModelError(\"Email\", Resources.Account.AccountViewModels.Email_already_registered);\n            }\n\n            if (this.Data.Users.All().Any(x => x.UserName == model.UserName))\n            {\n                this.ModelState.AddModelError(\"UserName\", Resources.Account.AccountViewModels.User_already_registered);\n            }\n\n            if (!captchaValid)\n            {\n                this.ModelState.AddModelError(\"Captcha\", Resources.Account.Views.General.Captcha_invalid);\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var user = new UserProfile { UserName = model.UserName, Email = model.Email };\n                var result = await this.UserManager.CreateAsync(user, model.Password);\n                if (result.Succeeded)\n                {\n                    await this.SignInAsync(user, isPersistent: false);\n                    return this.RedirectToAction(GlobalConstants.Index, \"Home\");\n                }\n\n                this.AddErrors(result);\n            }\n\n            // If we got this far, something failed, redisplay form\n            return this.View(model);\n        }\n\n        // POST: /Account/Disassociate\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Disassociate(string loginProvider, string providerKey)\n        {\n            IdentityResult result =\n                await\n                this.UserManager.RemoveLoginAsync(this.User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));\n            if (result.Succeeded)\n            {\n                this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.Disassociate.External_login_removed;\n            }\n            else\n            {\n                this.TempData[GlobalConstants.DangerMessage] = Resources.Account.Views.Disassociate.Error;\n            }\n\n            return this.RedirectToAction(\"Manage\");\n        }\n\n        // GET: /Account/Manage\n        public ActionResult Manage()\n        {\n            this.ViewBag.HasLocalPassword = this.HasPassword();\n            this.ViewBag.ReturnUrl = this.Url.Action(\"Manage\");\n            return this.View();\n        }\n\n        // POST: /Account/Manage\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Manage(ManageUserViewModel model)\n        {\n            bool hasPassword = this.HasPassword();\n            this.ViewBag.HasLocalPassword = hasPassword;\n            this.ViewBag.ReturnUrl = this.Url.Action(\"Manage\");\n            if (hasPassword)\n            {\n                if (this.ModelState.IsValid)\n                {\n                    IdentityResult result =\n                        await\n                        this.UserManager.ChangePasswordAsync(this.User.Identity.GetUserId(), model.OldPassword, model.NewPassword);\n                    if (result.Succeeded)\n                    {\n                        this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.Manage.Password_updated;\n                        return this.RedirectToAction(GlobalConstants.Index, new { controller = \"Settings\", area = \"Users\" });\n                    }\n\n                    this.ModelState.AddModelError(string.Empty, Resources.Account.AccountViewModels.Password_incorrect);\n                }\n            }\n            else\n            {\n                // User does not have a password so remove any validation errors caused by a missing OldPassword field\n                var state = this.ModelState[\"OldPassword\"];\n                state?.Errors.Clear();\n\n                if (this.ModelState.IsValid)\n                {\n                    var result =\n                        await this.UserManager.AddPasswordAsync(this.User.Identity.GetUserId(), model.NewPassword);\n                    if (result.Succeeded)\n                    {\n                        this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.Manage.Password_updated;\n                        return this.RedirectToAction(GlobalConstants.Index, new { controller = \"Settings\", area = \"Users\" });\n                    }\n\n                    this.AddErrors(result);\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return this.View(model);\n        }\n\n        // POST: /Account/ExternalLogin\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult ExternalLogin(string provider, string returnUrl)\n        {\n            // Request a redirect to the external login provider\n            return new ChallengeResult(\n                provider,\n                this.Url.Action(\"ExternalLoginCallback\", \"Account\", new { ReturnUrl = returnUrl }));\n        }\n\n        // GET: /Account/ExternalLoginCallback\n        [AllowAnonymous]\n        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)\n        {\n            var loginInfo = await this.AuthenticationManager.GetExternalLoginInfoAsync();\n            if (loginInfo == null)\n            {\n                return this.RedirectToAction(\"Login\");\n            }\n\n            // Sign in the user with this external login provider if the user already has a login\n            var user = await this.UserManager.FindAsync(loginInfo.Login);\n            if (user != null)\n            {\n                await this.SignInAsync(user, isPersistent: false);\n                return this.RedirectToLocal(returnUrl);\n            }\n\n            // If a user account was not found - check if he has already registered his email.\n            ClaimsIdentity claimsIdentity = this.AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie).Result;\n            var email = claimsIdentity.FindFirstValue(ClaimTypes.Email);\n\n            if (this.Data.Users.All().Any(x => x.Email == email))\n            {\n                this.TempData[GlobalConstants.DangerMessage] = Resources.Account.Views.ExternalLoginCallback.Email_already_registered;\n                return this.RedirectToAction(\"Login\");\n            }\n\n            // If the user does not have an account, then prompt the user to create an account\n            this.ViewBag.ReturnUrl = returnUrl;\n            this.ViewBag.LoginProvider = loginInfo.Login.LoginProvider;\n\n            return this.View(\n                \"ExternalLoginConfirmation\",\n                new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName, Email = email });\n        }\n\n        // POST: /Account/LinkLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LinkLogin(string provider)\n        {\n            // Request a redirect to the external login provider to link a login for the current user\n            return new ChallengeResult(provider, this.Url.Action(\"LinkLoginCallback\", \"Account\"), this.User.Identity.GetUserId());\n        }\n\n        // GET: /Account/LinkLoginCallback\n        public async Task<ActionResult> LinkLoginCallback()\n        {\n            var loginInfo = await this.AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, this.User.Identity.GetUserId());\n            if (loginInfo != null)\n            {\n                var result = await this.UserManager.AddLoginAsync(this.User.Identity.GetUserId(), loginInfo.Login);\n                if (result.Succeeded)\n                {\n                    return this.RedirectToAction(\"Manage\");\n                }\n            }\n\n            this.TempData[GlobalConstants.DangerMessage] = Resources.Account.Views.ExternalLoginConfirmation.Error;\n            return this.RedirectToAction(\"Manage\");\n        }\n\n        // POST: /Account/ExternalLoginConfirmation\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ExternalLoginConfirmation(\n            ExternalLoginConfirmationViewModel model,\n            string returnUrl)\n        {\n            if (this.User.Identity.IsAuthenticated)\n            {\n                return this.RedirectToAction(\"Manage\");\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                // Get the information about the user from the external login provider\n                var info = await this.AuthenticationManager.GetExternalLoginInfoAsync();\n                if (info == null)\n                {\n                    return this.View(\"ExternalLoginFailure\");\n                }\n\n                if (this.Data.Users.All().Any(x => x.Email == model.Email))\n                {\n                    this.TempData[GlobalConstants.DangerMessage] = Resources.Account.Views.ExternalLoginConfirmation.Email_already_registered;\n                    return this.RedirectToAction(\"ForgottenPassword\");\n                }\n\n                if (this.Data.Users.All().Any(x => x.UserName == model.UserName))\n                {\n                    this.ModelState.AddModelError(\"Username\", Resources.Account.Views.ExternalLoginConfirmation.User_already_registered);\n                }\n\n                if (!this.ModelState.IsValid)\n                {\n                    return this.View(model);\n                }\n\n                var user = new UserProfile { UserName = model.UserName, Email = model.Email };\n                var result = await this.UserManager.CreateAsync(user);\n                if (result.Succeeded)\n                {\n                    result = await this.UserManager.AddLoginAsync(user.Id, info.Login);\n                    if (result.Succeeded)\n                    {\n                        await this.SignInAsync(user, isPersistent: false);\n                        return this.RedirectToLocal(returnUrl);\n                    }\n                }\n\n                this.AddErrors(result);\n            }\n\n            this.ViewBag.ReturnUrl = returnUrl;\n            return this.View(model);\n        }\n\n        // POST: /Account/LogOff\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LogOff()\n        {\n            this.AuthenticationManager.SignOut();\n            return this.RedirectToAction(GlobalConstants.Index, \"Home\");\n        }\n\n        // GET: /Account/ExternalLoginFailure\n        [AllowAnonymous]\n        public ActionResult ExternalLoginFailure()\n        {\n            return this.View();\n        }\n\n        [ChildActionOnly]\n        public ActionResult RemoveAccountList()\n        {\n            var linkedAccounts = this.UserManager.GetLogins(this.User.Identity.GetUserId());\n            this.ViewBag.ShowRemoveButton = this.HasPassword() || linkedAccounts.Count > 1;\n            return this.PartialView(\"_RemoveAccountPartial\", linkedAccounts);\n        }\n\n        [AllowAnonymous]\n        public ActionResult ForgottenPassword()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        public ActionResult ForgottenPassword(string emailOrUsername)\n        {\n            if (string.IsNullOrEmpty(emailOrUsername))\n            {\n                this.ModelState.AddModelError(\"emailOrUsername\", Resources.Account.Views.ForgottenPassword.Email_or_username_required);\n                return this.View();\n            }\n\n            var userByUsername = this.Data.Users.GetByUsername(emailOrUsername);\n\n            if (userByUsername != null)\n            {\n                userByUsername.ForgottenPasswordToken = Guid.NewGuid();\n                this.Data.SaveChanges();\n                this.SendForgottenPasswordToUser(userByUsername);\n                this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.ForgottenPassword.Email_sent;\n                return this.RedirectToAction(\"ForgottenPassword\");\n            }\n\n            // using Where() because duplicate email addresses were allowed in the previous\n            // judge system\n            var usersByEmail = this.Data.Users\n                                    .All()\n                                    .Where(x => x.Email == emailOrUsername).ToList();\n\n            var usersCount = usersByEmail.Count();\n\n            // notify the user if there are no users registered with this email or username\n            if (usersCount == 0)\n            {\n                this.ModelState.AddModelError(\"emailOrUsername\", Resources.Account.Views.ForgottenPassword.Email_or_username_not_registered);\n                return this.View();\n            }\n\n            // if there are users registered with this email - send a forgotten password email\n            // to each one of them\n            foreach (var user in usersByEmail)\n            {\n                user.ForgottenPasswordToken = Guid.NewGuid();\n                this.Data.SaveChanges();\n                this.SendForgottenPasswordToUser(user);\n            }\n\n            this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.ForgottenPassword.Email_sent;\n            return this.RedirectToAction(\"ForgottenPassword\");\n        }\n\n        [AllowAnonymous]\n        public ActionResult ChangePassword(string token)\n        {\n            Guid guid;\n\n            if (!Guid.TryParse(token, out guid))\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, \"Invalid token!\");\n            }\n\n            var user = this.Data.Users.All().FirstOrDefault(x => x.ForgottenPasswordToken == guid);\n\n            if (user == null)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, \"Invalid token!\");\n            }\n\n            var forgottenPasswordModel = new ForgottenPasswordViewModel\n            {\n                Token = guid\n            };\n\n            return this.View(forgottenPasswordModel);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        public async Task<ActionResult> ChangePassword(ForgottenPasswordViewModel model)\n        {\n            var user = this.Data.Users.All()\n                .FirstOrDefault(x => x.ForgottenPasswordToken == model.Token);\n\n            if (user == null)\n            {\n                throw new HttpException((int)HttpStatusCode.BadRequest, \"Invalid token!\");\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var removePassword = await this.UserManager.RemovePasswordAsync(user.Id);\n                if (removePassword.Succeeded)\n                {\n                    var changePassword = await this.UserManager.AddPasswordAsync(user.Id, model.Password);\n                    if (changePassword.Succeeded)\n                    {\n                        user.ForgottenPasswordToken = null;\n                        this.Data.SaveChanges();\n\n                        this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.ChangePasswordView.Password_updated;\n                        return this.RedirectToAction(\"Login\");\n                    }\n\n                    this.AddErrors(changePassword);\n                }\n\n                this.AddErrors(removePassword);\n            }\n\n            return this.View(model);\n        }\n\n        public ActionResult ChangeEmail()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        public ActionResult ChangeEmail(ChangeEmailViewModel model)\n        {\n            if (this.ModelState.IsValid)\n            {\n                if (this.Data.Users.All().Any(x => x.Email == model.Email))\n                {\n                    this.ModelState.AddModelError(\"Email\", Resources.Account.AccountViewModels.Email_already_registered);\n                }\n\n                var passwordVerificationResult = this.UserManager.PasswordHasher.VerifyHashedPassword(this.UserProfile.PasswordHash, model.Password);\n\n                if (passwordVerificationResult != PasswordVerificationResult.Success)\n                {\n                    this.ModelState.AddModelError(\"Password\", Resources.Account.AccountViewModels.Incorrect_password);\n                }\n\n                if (this.ModelState.IsValid)\n                {\n                    var currentUser = this.Data.Users.GetById(this.UserProfile.Id);\n\n                    currentUser.Email = model.Email;\n                    this.Data.SaveChanges();\n                    this.TempData[GlobalConstants.InfoMessage] = \"Success\";\n                    return this.RedirectToAction(\"Profile\", new { controller = \"Users\", area = string.Empty });\n                }\n            }\n\n            return this.View(model);\n        }\n\n        [Authorize]\n        [HttpGet]\n        public ActionResult ChangeUsername()\n        {\n            if (Regex.IsMatch(this.UserProfile.UserName, GlobalConstants.UserNameRegEx)\n                && this.UserProfile.UserName.Length >= GlobalConstants.UserNameMinLength\n                && this.UserProfile.UserName.Length <= GlobalConstants.UserNameMaxLength)\n            {\n                return this.RedirectToAction(GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\" });\n            }\n\n            return this.View();\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult ChangeUsername(ChangeUsernameViewModel model)\n        {\n            if (Regex.IsMatch(this.UserProfile.UserName, GlobalConstants.UserNameRegEx)\n                && this.UserProfile.UserName.Length >= GlobalConstants.UserNameMinLength\n                && this.UserProfile.UserName.Length <= GlobalConstants.UserNameMaxLength)\n            {\n                return this.RedirectToAction(GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\" });\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                if (this.Data.Users.All().Any(x => x.UserName == model.Username))\n                {\n                    this.ModelState.AddModelError(\"Username\", \"This username is not available\");\n                    return this.View(model);\n                }\n\n                this.UserProfile.UserName = model.Username;\n                this.Data.SaveChanges();\n\n                this.TempData[GlobalConstants.InfoMessage] = Resources.Account.Views.ChangeUsernameView.Username_changed;\n                this.AuthenticationManager.SignOut();\n                return this.RedirectToAction(\"Login\", new { controller = \"Account\", area = string.Empty });\n            }\n\n            return this.View(model);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && this.UserManager != null)\n            {\n                this.UserManager.Dispose();\n                this.UserManager = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n        private void SendForgottenPasswordToUser(UserProfile user)\n        {\n            var mailSender = MailSender.Instance;\n\n            var forgottenPasswordEmailTitle = string.Format(\n                                                        Resources.Account.AccountEmails.Forgotten_password_title,\n                                                        user.UserName);\n\n            var forgottenPasswordEmailBody = string.Format(\n                Resources.Account.AccountEmails.Forgotten_password_body,\n                user.UserName,\n                this.Url.Action(\"ChangePassword\", \"Account\", new { token = user.ForgottenPasswordToken }, this.Request.Url.Scheme));\n\n            mailSender.SendMail(user.Email, forgottenPasswordEmailTitle, forgottenPasswordEmailBody);\n        }\n\n        private async Task SignInAsync(UserProfile user, bool isPersistent)\n        {\n            this.AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);\n            var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);\n            this.AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, identity);\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                this.ModelState.AddModelError(string.Empty, error);\n            }\n        }\n\n        private bool HasPassword()\n        {\n            var user = this.UserManager.FindById(this.User.Identity.GetUserId());\n            return user?.PasswordHash != null;\n        }\n\n        private ActionResult RedirectToLocal(string returnUrl)\n        {\n            if (this.Url.IsLocalUrl(returnUrl))\n            {\n                return this.Redirect(returnUrl);\n            }\n\n            return this.RedirectToAction(GlobalConstants.Index, \"Home\");\n        }\n\n        private class ChallengeResult : HttpUnauthorizedResult\n        {\n            public ChallengeResult(string provider, string redirectUri, string userId = null)\n            {\n                this.LoginProvider = provider;\n                this.RedirectUri = redirectUri;\n                this.UserId = userId;\n            }\n\n            private string LoginProvider { get; set; }\n\n            private string RedirectUri { get; set; }\n\n            private string UserId { get; set; }\n\n            public override void ExecuteResult(ControllerContext context)\n            {\n                var properties = new AuthenticationProperties { RedirectUri = this.RedirectUri };\n                if (this.UserId != null)\n                {\n                    properties.Dictionary[AccountController.XsrfKey] = this.UserId;\n                }\n\n                context.HttpContext.GetOwinContext().Authentication.Challenge(properties, this.LoginProvider);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/AdministrationController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.ComponentModel.DataAnnotations;\n    using System.IO;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using NPOI.HSSF.UserModel;\n\n    using OJS.Common;\n    using OJS.Common.DataAnnotations;\n    using OJS.Data;\n    using OJS.Web.Common.Attributes;\n\n    [LogAccess]\n    [Authorize(Roles = GlobalConstants.AdministratorRoleName)]\n    public class AdministrationController : BaseController\n    {\n        public AdministrationController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [NonAction]\n        protected FileResult ExportToExcel([DataSourceRequest]DataSourceRequest request, IEnumerable data)\n        {\n            if (data == null)\n            {\n                throw new Exception(\"GetData() and DataType must be overridden\");\n            }\n\n            // Get the data representing the current grid state - page, sort and filter\n            request.PageSize = 0;\n            IEnumerable items = data.ToDataSourceResult(request).Data;\n            return this.CreateExcelFile(items);\n        }\n\n        [NonAction]\n        protected FileResult CreateExcelFile(IEnumerable items)\n        {\n            Type dataType = items.GetType().GetGenericArguments()[0];\n\n            var dataTypeProperties = dataType.GetProperties();\n\n            // Create new Excel workbook\n            var workbook = new HSSFWorkbook();\n\n            // Create new Excel sheet\n            var sheet = workbook.CreateSheet();\n\n            // Create a header row\n            var headerRow = sheet.CreateRow(0);\n            int columnNumber = 0;\n            foreach (var property in dataTypeProperties)\n            {\n                bool include = true;\n                object[] excludeAttributes = property.GetCustomAttributes(typeof(ExcludeFromExcelAttribute), true);\n                if (excludeAttributes.Any())\n                {\n                    include = false;\n                }\n\n                if (include)\n                {\n                    string cellName = property.Name;\n                    object[] attributes = property.GetCustomAttributes(typeof(DisplayAttribute), true);\n                    if (attributes.Any())\n                    {\n                        var attribute = attributes[0] as DisplayAttribute;\n                        if (attribute != null)\n                        {\n                            cellName = attribute.Name ?? property.Name;\n                        }\n                    }\n\n                    headerRow.CreateCell(columnNumber++).SetCellValue(cellName);\n                }\n            }\n\n            // (Optional) freeze the header row so it is not scrolled\n            sheet.CreateFreezePane(0, 1, 0, 1);\n\n            int rowNumber = 1;\n\n            // Populate the sheet with values from the grid data\n            foreach (object item in items)\n            {\n                // Create a new row\n                var row = sheet.CreateRow(rowNumber++);\n\n                int cellNumber = 0;\n                foreach (var property in dataTypeProperties)\n                {\n                    bool include = true;\n                    object[] excludeAttributes = property.GetCustomAttributes(typeof(ExcludeFromExcelAttribute), true);\n                    if (excludeAttributes.Any())\n                    {\n                        include = false;\n                    }\n\n                    if (include)\n                    {\n                        object propertyValue = item.GetType().GetProperty(property.Name).GetValue(item, null);\n                        if (propertyValue == null)\n                        {\n                            row.CreateCell(cellNumber).SetCellType(NPOI.SS.UserModel.CellType.Blank);\n                        }\n                        else\n                        {\n                            var cell = row.CreateCell(cellNumber);\n                            double value;\n                            var typeCode = Type.GetTypeCode(property.PropertyType);\n                            if (typeCode == TypeCode.Single || typeCode == TypeCode.Char)\n                            {\n                                cell.SetCellValue(propertyValue.ToString());\n                            }\n\n                            if (double.TryParse(propertyValue.ToString(), out value))\n                            {\n                                cell.SetCellValue(value);\n                                cell.SetCellType(NPOI.SS.UserModel.CellType.Numeric);\n                            }\n                            else if (typeCode == TypeCode.DateTime)\n                            {\n                                cell.SetCellValue((DateTime)propertyValue);\n                            }\n                            else\n                            {\n                                string propertyValueAsString = propertyValue.ToString();\n                                if (propertyValue.ToString().Length > 10000)\n                                {\n                                    propertyValueAsString = \"THIS CELL DOES NOT CONTAIN FULL INFORMATION: \" + propertyValueAsString.Substring(0, 10000);\n                                }\n\n                                cell.SetCellValue(propertyValueAsString);\n                            }\n                        }\n\n                        cellNumber++;\n                    }\n                }\n            }\n\n            // Auto-size all columns\n            for (int i = 0; i < columnNumber; i++)\n            {\n                sheet.AutoSizeColumn(i);\n            }\n\n            // Write the workbook to a memory stream\n            var outputStream = new MemoryStream();\n            workbook.Write(outputStream);\n\n            // Return the result to the end user\n            return this.File(\n                outputStream.ToArray(), // The binary data of the XLS file\n                GlobalConstants.ExcelMimeType, // MIME type of Excel files\n                string.Format(\"{0}.xls\", this.GetType().Name)); // Suggested file name in the \"Save as\" dialog which will be displayed to the end user\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/BaseController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System;\n    using System.Linq;\n    using System.Linq.Expressions;\n    using System.Text.RegularExpressions;\n    using System.Web;\n    using System.Web.Mvc;\n    using System.Web.Routing;\n    using System.Web.Script.Serialization;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Common;\n    using OJS.Web.ViewModels;\n\n    public class BaseController : Controller\n    {\n        public BaseController(IOjsData data)\n        {\n            this.Data = data;\n        }\n\n        public BaseController(IOjsData data, UserProfile profile)\n            : this(data)\n        {\n            this.UserProfile = profile;\n        }\n\n        protected IOjsData Data { get; set; }\n\n        protected UserProfile UserProfile { get; set; }\n\n        protected internal RedirectToRouteResult RedirectToAction<TController>(Expression<Action<TController>> expression)\n            where TController : Controller\n        {\n            var method = expression.Body as MethodCallExpression;\n            if (method == null)\n            {\n                throw new ArgumentException(\"Expected method call\");\n            }\n\n            return this.RedirectToAction(method.Method.Name);\n        }\n\n        protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)\n        {\n            // Work with data before BeginExecute to prevent \"NotSupportedException: A second operation started on this context before a previous asynchronous operation completed.\"\n            this.UserProfile = this.Data.Users.GetByUsername(requestContext.HttpContext.User.Identity.Name);\n\n            this.ViewBag.MainCategories =\n                this.Data.ContestCategories.All()\n                    .Where(x => x.IsVisible && !x.ParentId.HasValue)\n                    .OrderBy(x => x.OrderBy)\n                    .Select(CategoryMenuItemViewModel.FromCategory);\n\n            // Calling BeginExecute before PrepareSystemMessages for the TempData to has values\n            var result = base.BeginExecute(requestContext, callback, state);\n\n            var systemMessages = this.PrepareSystemMessages();\n            this.ViewBag.SystemMessages = systemMessages;\n\n            return result;\n        }\n\n        protected override void OnException(ExceptionContext filterContext)\n        {\n            if (filterContext.ExceptionHandled)\n            {\n                return;\n            }\n\n            if (this.Request.IsAjaxRequest())\n            {\n                var exception = filterContext.Exception as HttpException;\n\n                if (exception != null)\n                {\n                    this.Response.StatusCode = exception.GetHttpCode();\n                    this.Response.StatusDescription = exception.Message;\n                }\n            }\n            else\n            {\n                var controllerName = this.ControllerContext.RouteData.Values[\"Controller\"].ToString();\n                var actionName = this.ControllerContext.RouteData.Values[\"Action\"].ToString();\n                this.View(\"Error\", new HandleErrorInfo(filterContext.Exception, controllerName, actionName)).ExecuteResult(this.ControllerContext);\n            }\n\n            filterContext.ExceptionHandled = true;\n        }\n\n        /// <summary>\n        /// Creates a JSON object with maximum size.\n        /// </summary>\n        /// <param name=\"data\">JSON data.</param>\n        /// <returns>Returns a JSON as content result.</returns>\n        protected ContentResult LargeJson(object data)\n        {\n            var serializer = new JavaScriptSerializer { MaxJsonLength = int.MaxValue, RecursionLimit = 100 };\n\n            return new ContentResult\n            {\n                Content = serializer.Serialize(data),\n                ContentType = GlobalConstants.JsonMimeType,\n            };\n        }\n\n        private SystemMessageCollection PrepareSystemMessages()\n        {\n            // Warning: always escape data to prevent XSS\n            var messages = new SystemMessageCollection();\n\n            if (this.TempData.ContainsKey(GlobalConstants.InfoMessage))\n            {\n                messages.Add(this.TempData[GlobalConstants.InfoMessage].ToString(), SystemMessageType.Success, 1000);\n            }\n\n            if (this.TempData.ContainsKey(GlobalConstants.DangerMessage))\n            {\n                messages.Add(this.TempData[GlobalConstants.DangerMessage].ToString(), SystemMessageType.Error, 1000);\n            }\n\n            if (this.UserProfile != null)\n            {\n                if (this.UserProfile.PasswordHash == null)\n                {\n                    messages.Add(Resources.Base.Main.Password_not_set, SystemMessageType.Warning, 0);\n                }\n\n                if (!Regex.IsMatch(this.UserProfile.UserName, GlobalConstants.UserNameRegEx)\n                    || this.UserProfile.UserName.Length < GlobalConstants.UserNameMinLength\n                    || this.UserProfile.UserName.Length > GlobalConstants.UserNameMaxLength)\n                {\n                    messages.Add(Resources.Base.Main.Username_in_invalid_format, SystemMessageType.Warning, 0);\n                }\n            }\n\n            return messages;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/FeedbackController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.ViewModels.Feedback;\n\n    using Recaptcha;\n\n    using Resource = Resources.Feedback.Views;\n\n    public class FeedbackController : BaseController\n    {\n        public FeedbackController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        [HttpGet]\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        [HttpPost]\n        [RecaptchaControlMvc.CaptchaValidator]\n        public ActionResult Index(FeedbackViewModel model, bool captchaValid)\n        {\n            if (!captchaValid)\n            {\n                this.ModelState.AddModelError(\"Captcha\", Resource.FeedbackIndex.Invalid_captcha);\n            }\n\n            if (this.ModelState.IsValid)\n            {\n                var report = new FeedbackReport\n                {\n                    Content = model.Content,\n                    Email = model.Email,\n                    Name = model.Name\n                };\n\n                if (this.User.Identity.IsAuthenticated)\n                {\n                    var userProfile = this.Data.Users.GetByUsername(this.User.Identity.Name);\n                    report.User = userProfile;\n                }\n\n                this.Data.FeedbackReports.Add(report);\n                this.Data.SaveChanges();\n\n                this.TempData[GlobalConstants.InfoMessage] = Resource.FeedbackIndex.Feedback_submitted;\n                return this.RedirectToAction(\"Submitted\");\n            }\n\n            return this.View(model);\n        }\n\n        [HttpGet]\n        public ActionResult Submitted()\n        {\n            return this.View();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/HomeController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Linq;\n    using System.Text;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.ViewModels.Home.Index;\n\n    public class HomeController : BaseController\n    {\n        public HomeController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            var indexViewModel = new IndexViewModel\n            {\n                ActiveContests = this.Data.Contests.AllActive()\n                    .OrderByDescending(x => x.StartTime)\n                    .Select(HomeContestViewModel.FromContest)\n                    .ToList(),\n                FutureContests = this.Data.Contests.AllFuture()\n                    .OrderBy(x => x.StartTime)\n                    .Select(HomeContestViewModel.FromContest)\n                    .ToList(),\n                PastContests = this.Data.Contests.AllPast()\n                    .OrderByDescending(x => x.StartTime)\n                    .Select(HomeContestViewModel.FromContest)\n                    .Take(5)\n                    .ToList()\n            };\n\n            return this.View(indexViewModel);\n        }\n\n        /// <summary>\n        /// Gets the robots.txt file.\n        /// </summary>\n        /// <returns>Returns a robots.txt file.</returns>\n        [HttpGet]\n        [OutputCache(Duration = 3600)]\n        public FileResult RobotsTxt()\n        {\n            var robotsTxtContent = new StringBuilder();\n            robotsTxtContent.AppendLine(\"User-Agent: *\");\n            robotsTxtContent.AppendLine(\"Allow: /\");\n\n            return this.File(Encoding.ASCII.GetBytes(robotsTxtContent.ToString()), \"text/plain\");\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/KendoGridAdministrationController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System;\n    using System.Collections;\n    using System.ComponentModel.DataAnnotations;\n    using System.Data.Entity;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using Newtonsoft.Json;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Web.Common.Interfaces;\n\n    public abstract class KendoGridAdministrationController : AdministrationController, IKendoGridAdministrationController\n    {\n        private const string CreatedOnPropertyName = \"CreatedOn\";\n        private const string ModifiedOnPropertyName = \"ModifiedOn\";\n\n        protected KendoGridAdministrationController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public abstract IEnumerable GetData();\n\n        public abstract object GetById(object id);\n\n        public virtual string GetEntityKeyName()\n        {\n            throw new InvalidOperationException(\"GetEntityKeyName method required but not implemented in derived controller\");\n        }\n\n        [HttpPost]\n        public virtual ActionResult Read([DataSourceRequest]DataSourceRequest request)\n        {\n            var data = this.GetData();\n            var serializationSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };\n            var json = JsonConvert.SerializeObject(data.ToDataSourceResult(request), Formatting.None, serializationSettings);\n            return this.Content(json, GlobalConstants.JsonMimeType);\n        }\n\n        [HttpGet]\n        public FileResult ExportToExcel([DataSourceRequest] DataSourceRequest request)\n        {\n            return this.ExportToExcel(request, this.GetData());\n        }\n\n        protected object BaseCreate(object model)\n        {\n            if (model != null && this.ModelState.IsValid)\n            {\n                var itemForAdding = this.Data.Context.Entry(model);\n                itemForAdding.State = EntityState.Added;\n                this.Data.SaveChanges();\n                var databaseValues = itemForAdding.GetDatabaseValues();\n                return databaseValues[this.GetEntityKeyName()];\n            }\n\n            return null;\n        }\n\n        protected void BaseUpdate(object model)\n        {\n            if (model != null && this.ModelState.IsValid)\n            {\n                var itemForUpdating = this.Data.Context.Entry(model);\n                itemForUpdating.State = EntityState.Modified;\n                this.Data.SaveChanges();\n            }\n        }\n\n        protected void BaseDestroy(object id)\n        {\n            var model = this.GetById(id);\n            if (model != null)\n            {\n                var itemForDeletion = this.Data.Context.Entry(model);\n                if (itemForDeletion != null)\n                {\n                    itemForDeletion.State = EntityState.Deleted;\n                    this.Data.SaveChanges();\n                }\n            }\n        }\n\n        [NonAction]\n        protected JsonResult GridOperation([DataSourceRequest]DataSourceRequest request, object model)\n        {\n            return this.Json(new[] { model }.ToDataSourceResult(request, this.ModelState));\n        }\n\n        protected string GetEntityKeyNameByType(Type type)\n        {\n            return type.GetProperties()\n                .FirstOrDefault(pr => pr.GetCustomAttributes(typeof(KeyAttribute), true).Any())\n                .Name;\n        }\n\n        protected void UpdateAuditInfoValues<T>(IAdministrationViewModel<T> viewModel, object databaseModel)\n            where T : class, new()\n        {\n            var entry = this.Data.Context.Entry(databaseModel);\n            viewModel.CreatedOn = (DateTime?)entry.Property(CreatedOnPropertyName).CurrentValue;\n            viewModel.ModifiedOn = (DateTime?)entry.Property(ModifiedOnPropertyName).CurrentValue;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/NewsController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Net;\n    using System.Web;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.ViewModels.News;\n\n    using Resource = Resources.News;\n\n    public class NewsController : BaseController\n    {\n        public NewsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult All(int id = 1, int pageSize = 10)\n        {\n            var newsCount = this.Data.News.All().Count(x => x.IsVisible);\n\n            IEnumerable<NewsViewModel> news;\n            int page = 0;\n            int pages = 0;\n\n            if (newsCount == 0)\n            {\n                news = new List<NewsViewModel>();\n            }\n            else\n            {\n                if (newsCount % pageSize == 0)\n                {\n                    pages = newsCount / pageSize;\n                }\n                else\n                {\n                    pages = (newsCount / pageSize) + 1;\n                }\n\n                if (id < 1)\n                {\n                    id = 1;\n                }\n                else if (id > pages)\n                {\n                    id = pages;\n                }\n\n                if (pageSize < 1)\n                {\n                    pageSize = 10;\n                }\n\n                page = id;\n\n                news = this.Data.News.All()\n                    .Where(x => x.IsVisible)\n                    .OrderByDescending(x => x.CreatedOn)\n                    .Skip((page - 1) * pageSize)\n                    .Take(pageSize)\n                    .Select(NewsViewModel.FromNews)\n                    .ToList();\n            }\n\n            var allNewsModel = new AllNewsViewModel\n            {\n                AllNews = news,\n                CurrentPage = page,\n                PageSize = pageSize,\n                AllPages = pages\n            };\n\n            return this.View(allNewsModel);\n        }\n\n        public ActionResult Selected(int id = 1)\n        {\n            var currentNews = this.Data.News.GetById(id);\n\n            if (currentNews == null || currentNews.IsDeleted)\n            {\n                throw new HttpException((int)HttpStatusCode.NotFound, Resource.Views.Selected.Invalid_news_id);\n            }\n\n            var previousNews =\n                this.Data.News.All()\n                    .OrderByDescending(x => x.Id)\n                    .FirstOrDefault(x => x.Id < currentNews.Id && x.IsVisible && !x.IsDeleted)\n                ?? this.Data.News.All().OrderByDescending(x => x.Id).First(x => x.IsVisible && !x.IsDeleted);\n\n            var nextNews =\n                this.Data.News.All()\n                    .OrderBy(x => x.Id)\n                    .FirstOrDefault(x => x.Id > currentNews.Id && x.IsVisible && !x.IsDeleted)\n                ?? this.Data.News.All().OrderBy(x => x.Id).First(x => x.IsVisible && !x.IsDeleted);\n\n            var newsContentViewModel = new SelectedNewsViewModel\n            {\n                Id = currentNews.Id,\n                Title = currentNews.Title,\n                Author = currentNews.Author,\n                Source = currentNews.Source,\n                TimeCreated = currentNews.CreatedOn,\n                Content = currentNews.Content,\n                PreviousId = previousNews.Id,\n                NextId = nextNews.Id\n            };\n\n            return this.View(newsContentViewModel);\n        }\n\n        [ChildActionOnly]\n        public ActionResult LatestNews(int newsCount = 5)\n        {\n            var latestNews =\n                this.Data.News.All()\n                    .OrderByDescending(x => x.CreatedOn)\n                    .Where(x => x.IsVisible && !x.IsDeleted)\n                    .Select(SelectedNewsViewModel.FromNews)\n                    .Take(newsCount)\n                    .ToList();\n\n            return this.PartialView(\"_LatestNews\", latestNews);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/RedirectsController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Common.Models;\n    using OJS.Data;\n\n    public class RedirectsController : BaseController\n    {\n        public RedirectsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public static List<KeyValuePair<string, string>> OldSystemRedirects { get; } = new List<KeyValuePair<string, string>>\n                {\n                    new KeyValuePair<string, string>(\"Contest/List\", \"/Contests\"),\n                    new KeyValuePair<string, string>(\"Home/SubmissionLog\", \"/Submissions\"),\n                    new KeyValuePair<string, string>(\"Home/ReportBug\", \"/Feedback\"),\n                    new KeyValuePair<string, string>(\"Home/SendBugReport\", \"/Feedback\"),\n                    new KeyValuePair<string, string>(\"Account/LogOn\", \"/Account/Login\"),\n                    new KeyValuePair<string, string>(\"Account/Profile\", \"/Users/Profile\"),\n                };\n\n        public RedirectResult Index(int id)\n        {\n            return this.RedirectPermanent(OldSystemRedirects[id].Value);\n        }\n\n        public RedirectResult ProfileView(int id)\n        {\n            var username = this.Data.Users.All().Where(x => x.OldId == id).Select(x => x.UserName).FirstOrDefault();\n            return this.RedirectPermanent($\"/Users/{username}\");\n        }\n\n        public RedirectResult ContestCompete(int id)\n        {\n            var newId = this.Data.Contests.All().Where(x => x.OldId == id).Select(x => x.Id).FirstOrDefault();\n            return this.RedirectPermanent($\"/Contests/Compete/Index/{newId}\");\n        }\n\n        public RedirectResult ContestPractice(int id)\n        {\n            var newId = this.Data.Contests.All().Where(x => x.OldId == id).Select(x => x.Id).FirstOrDefault();\n            return this.RedirectPermanent($\"/Contests/Practice/Index/{newId}\");\n        }\n\n        public RedirectResult ContestResults(int id)\n        {\n            var newId = this.Data.Contests.All().Where(x => x.OldId == id).Select(x => x.Id).FirstOrDefault();\n            return this.RedirectPermanent($\"/Contests/Compete/Results/Simple/{newId}\");\n        }\n\n        public RedirectResult PracticeResults(int id)\n        {\n            var newId = this.Data.Contests.All().Where(x => x.OldId == id).Select(x => x.Id).FirstOrDefault();\n            return this.RedirectPermanent($\"/Contests/Practice/Results/Simple/{newId}\");\n        }\n\n        public RedirectResult DownloadTask(int id)\n        {\n            var resourceId =\n                this.Data.Resources.All()\n                    .Where(x => x.Problem.OldId == id && x.Type == ProblemResourceType.ProblemDescription)\n                    .Select(x => x.Id)\n                    .FirstOrDefault();\n            return this.RedirectPermanent($\"/Contests/Practice/DownloadResource/{resourceId}\");\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/SearchController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Data.Entity;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Data;\n    using OJS.Web.Common;\n    using OJS.Web.ViewModels.Search;\n\n    public class SearchController : BaseController\n    {\n        public SearchController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            return this.View();\n        }\n\n        public ActionResult Results(string searchTerm)\n        {\n            var searchResult = new SearchResultGroupViewModel(searchTerm);\n\n            if (searchResult.IsSearchTermValid)\n            {\n                var problemSearchResults = this.Data.Problems.All().Include(x => x.Contest)\n                                        .Where(x => !x.IsDeleted && x.Name.Contains(searchResult.SearchTerm))\n                                        .ToList()\n                                        .AsQueryable()\n                                        .Where(x => x.Contest.CanBeCompeted || x.Contest.CanBePracticed)\n                                        .Select(SearchResultViewModel.FromProblem);\n\n                searchResult.SearchResults.Add(SearchResultType.Problem, problemSearchResults);\n\n                var contestSearchResults = this.Data.Contests.All()\n                                        .Where(x => x.IsVisible && !x.IsDeleted && x.Name.Contains(searchResult.SearchTerm))\n                                        .ToList()\n                                        .AsQueryable()\n                                        .Where(x => x.CanBeCompeted || x.CanBePracticed)\n                                        .Select(SearchResultViewModel.FromContest);\n\n                searchResult.SearchResults.Add(SearchResultType.Contest, contestSearchResults);\n\n                var userSearchResults = this.Data.Users.All()\n                                        .Where(x => !x.IsDeleted && x.UserName.Contains(searchResult.SearchTerm))\n                                        .Select(SearchResultViewModel.FromUser);\n\n                searchResult.SearchResults.Add(SearchResultType.User, userSearchResults);\n            }\n\n            return this.View(searchResult);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Controllers/SubmissionsController.cs",
    "content": "﻿namespace OJS.Web.Controllers\n{\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.Extensions;\n    using Kendo.Mvc.UI;\n\n    using Newtonsoft.Json;\n\n    using OJS.Common;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Web.Common.Extensions;\n    using OJS.Web.ViewModels.Submission;\n\n    public class SubmissionsController : BaseController\n    {\n        public SubmissionsController(IOjsData data)\n            : base(data)\n        {\n        }\n\n        public ActionResult Index()\n        {\n            if (this.User.Identity.IsAuthenticated)\n            {\n                return this.View(\"AdvancedSubmissions\");\n            }\n\n            var submissions = this.Data.Submissions\n                .GetLastFiftySubmissions()\n                .Select(SubmissionViewModel.FromSubmission)\n                .ToList();\n\n            return this.View(\"BasicSubmissions\", submissions.ToList());\n        }\n\n        [HttpPost]\n        public ActionResult ReadSubmissions([DataSourceRequest] DataSourceRequest request, string userId)\n        {\n            IQueryable<Submission> data;\n\n            if (this.User.IsAdmin())\n            {\n                data = this.Data.Submissions.All();\n                if (userId != null)\n                {\n                    data = data.Where(s => s.Participant.UserId == userId);\n                }\n            }\n            else\n            {\n                data = this.Data.Submissions.AllPublic();\n                if (userId != null)\n                {\n                    data = data.Where(s => s.Participant.UserId == userId);\n                }\n            }\n\n            var result = data.Select(SubmissionViewModel.FromSubmission);\n\n            var serializationSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };\n            string json = JsonConvert.SerializeObject(result.ToDataSourceResult(request), Formatting.None, serializationSettings);\n            return this.Content(json, GlobalConstants.JsonMimeType);\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"OJS.Web.MvcApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Global.asax.cs",
    "content": "﻿namespace OJS.Web\n{\n    using System.Data.Entity;\n    using System.Web.Mvc;\n    using System.Web.Optimization;\n    using System.Web.Routing;\n\n    using OJS.Data;\n    using OJS.Data.Migrations;\n    using OJS.Data.Providers.Registries;\n\n#pragma warning disable SA1649 // File name must match first type name\n    public class MvcApplication : System.Web.HttpApplication\n#pragma warning restore SA1649 // File name must match first type name\n    {\n        protected void Application_Start()\n        {\n            // Database.SetInitializer(new DropCreateDatabaseIfModelChanges<OjsDbContext>());\n            Database.SetInitializer(new MigrateDatabaseToLatestVersion<OjsDbContext, DefaultMigrationConfiguration>());\n            EfBulkInsertGlimpseProviderRegistry.Execute();\n\n            AreaRegistration.RegisterAllAreas();\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n            ViewEngineConfig.RegisterViewEngines(ViewEngines.Engines);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/JSLintNet.json",
    "content": "﻿{\n  \"output\": \"Error\",\n  \"runOnSave\": false,\n  \"runOnBuild\": false,\n  \"cancelBuild\": false,\n  \"ignore\": [\n    \"\\\\Scripts\\\\Administration\\\\Tests\\\\tests-details.js\"\n  ]\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/OJS.Web.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>\r\n    </ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{C2EF4F1B-A694-4E52-935C-7872F6CAD37C}</ProjectGuid>\r\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>OJS.Web</RootNamespace>\r\n    <AssemblyName>OJS.Web</AssemblyName>\r\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r\n    <MvcBuildViews>true</MvcBuildViews>\r\n    <UseIISExpress>true</UseIISExpress>\r\n    <IISExpressSSLPort />\r\n    <IISExpressAnonymousAuthentication />\r\n    <IISExpressWindowsAuthentication />\r\n    <IISExpressUseClassicPipelineMode />\r\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\r\n    <UseGlobalApplicationHostFile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Glimpse.Ado, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Glimpse.Ado.1.7.3\\lib\\net45\\Glimpse.Ado.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Glimpse.AspNet, Version=1.9.2.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Glimpse.AspNet.1.9.2\\lib\\net45\\Glimpse.AspNet.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Glimpse.Core, Version=1.8.2.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Glimpse.1.8.6\\lib\\net45\\Glimpse.Core.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Glimpse.EF6, Version=1.6.5.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Glimpse.EF6.1.6.5\\lib\\net45\\Glimpse.EF6.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Glimpse.Mvc4, Version=1.5.3.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Glimpse.Mvc4.1.5.3\\lib\\net40\\Glimpse.Mvc4.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\HtmlAgilityPack.1.4.9\\lib\\Net45\\HtmlAgilityPack.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\NPOI.2.1.3.1\\lib\\net40\\ICSharpCode.SharpZipLib.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Ionic.Zip, Version=1.9.8.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\DotNetZip.1.9.8\\lib\\net20\\Ionic.Zip.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Kendo.Mvc, Version=2013.2.1111.340, Culture=neutral, PublicKeyToken=121fae78165ba3d4, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\External Libraries\\Kendo.Mvc.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Owin.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.2.1.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Host.SystemWeb.2.1.0\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.2.1.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.Cookies, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Cookies.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.Facebook, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Facebook.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.Google, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Google.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.MicrosoftAccount.2.1.0\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.OAuth, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.OAuth.2.1.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Twitter.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.8.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Ninject.3.2.2.0\\lib\\net45-full\\Ninject.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Ninject.Web.Common, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Ninject.Web.Common.3.2.3.0\\lib\\net45-full\\Ninject.Web.Common.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Ninject.Web.Mvc, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Ninject.MVC5.3.2.1.0\\lib\\net45-full\\Ninject.Web.Mvc.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"NPOI, Version=2.1.3.1, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\NPOI.2.1.3.1\\lib\\net40\\NPOI.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"NPOI.OOXML, Version=2.1.3.1, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\NPOI.2.1.3.1\\lib\\net40\\NPOI.OOXML.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"NPOI.OpenXml4Net, Version=2.1.3.1, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\NPOI.2.1.3.1\\lib\\net40\\NPOI.OpenXml4Net.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"NPOI.OpenXmlFormats, Version=2.1.3.1, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\NPOI.2.1.3.1\\lib\\net40\\NPOI.OpenXmlFormats.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"Owin\">\r\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Recaptcha\">\r\n      <HintPath>..\\..\\packages\\recaptcha.1.0.5.0\\lib\\.NetFramework 4.0\\Recaptcha.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Web.DynamicData\" />\r\n    <Reference Include=\"System.Web.Entity\" />\r\n    <Reference Include=\"System.Web.ApplicationServices\" />\r\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.Extensions\" />\r\n    <Reference Include=\"System.Web.Abstractions\" />\r\n    <Reference Include=\"System.Web.Routing\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Web.Services\" />\r\n    <Reference Include=\"System.EnterpriseServices\" />\r\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <Private>True</Private>\r\n      <HintPath>..\\..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System.Net.Http\">\r\n    </Reference>\r\n    <Reference Include=\"System.Net.Http.WebRequest\">\r\n    </Reference>\r\n    <Reference Include=\"WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\packages\\WebActivatorEx.2.1.0\\lib\\net40\\WebActivatorEx.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"App_GlobalResources\\Account\\AccountEmails.bg.Designer.cs\">\r\n      <DependentUpon>AccountEmails.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\AccountEmails.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccountEmails.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\ViewModels\\AccountViewModels.bg.Designer.cs\">\r\n      <DependentUpon>AccountViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\ViewModels\\AccountViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccountViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangeEmailView.bg.designer.cs\">\r\n      <DependentUpon>ChangeEmailView.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangeEmailView.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ChangeEmailView.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangeUsernameView.bg.designer.cs\">\r\n      <DependentUpon>ChangeUsernameView.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangeUsernameView.designer.cs\">\r\n      <DependentUpon>ChangeUsernameView.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangePasswordView.bg.designer.cs\">\r\n      <DependentUpon>ChangePasswordView.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ChangePasswordView.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ChangePasswordView.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Disassociate.bg.designer.cs\">\r\n      <DependentUpon>Disassociate.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginCallback.bg.designer.cs\">\r\n      <DependentUpon>ExternalLoginCallback.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginConfirmation.designer.cs\">\r\n      <DependentUpon>ExternalLoginConfirmation.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginConfirmation.bg.designer.cs\">\r\n      <DependentUpon>ExternalLoginConfirmation.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Disassociate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Disassociate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginCallback.designer.cs\">\r\n      <DependentUpon>ExternalLoginCallback.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginFailure.bg.designer.cs\">\r\n      <DependentUpon>ExternalLoginFailure.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginFailure.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ExternalLoginFailure.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ForgottenPassword.bg.designer.cs\">\r\n      <DependentUpon>ForgottenPassword.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\ForgottenPassword.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ForgottenPassword.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\General.bg.designer.cs\">\r\n      <DependentUpon>General.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\General.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>General.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Login.bg.designer.cs\">\r\n      <DependentUpon>Login.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Login.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Login.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Manage.bg.designer.cs\">\r\n      <DependentUpon>Manage.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Manage.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Manage.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\ChangePassword.bg.designer.cs\">\r\n      <DependentUpon>ChangePassword.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\ChangePassword.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ChangePassword.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\ExternalLoginsList.bg.designer.cs\">\r\n      <DependentUpon>ExternalLoginsList.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\ExternalLoginsList.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ExternalLoginsList.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\RemoveAccount.bg.designer.cs\">\r\n      <DependentUpon>RemoveAccount.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\RemoveAccount.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>RemoveAccount.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\SetPassword.bg.designer.cs\">\r\n      <DependentUpon>SetPassword.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Partial\\SetPassword.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SetPassword.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Register.bg.designer.cs\">\r\n      <DependentUpon>Register.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Account\\Views\\Register.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Register.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\ViewModels\\AccessLogGridViewModel.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccessLogGridViewModel.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\ViewModels\\AccessLogGridViewModel.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccessLogGridViewModel.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\Views\\AccessLogsIndex.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccessLogsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\Views\\AccessLogsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AccessLogsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AdministrationGeneral.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdministrationGeneral.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AdministrationGeneral.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdministrationGeneral.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AntiCheat\\Views\\AntiCheatViews.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AntiCheatViews.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\AntiCheat\\Views\\AntiCheatViews.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AntiCheatViews.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\ViewModels\\CheckerAdministrationViewModel.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CheckerAdministrationViewModel.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\ViewModels\\CheckerAdministrationViewModel.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CheckerAdministrationViewModel.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\Views\\CheckersIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CheckersIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\Views\\CheckersIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CheckersIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\ViewModels\\ContestCategoryAdministrationViewModel.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCategoryAdministrationViewModel.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\ViewModels\\ContestCategoryAdministrationViewModel.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCategoryAdministrationViewModel.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\Views\\ContestCategoriesViews.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCategoriesViews.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\Views\\ContestCategoriesViews.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCategoriesViews.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ContestsControllers.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsControllers.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ContestsControllers.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsControllers.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestCreate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCreate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestCreate.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestCreate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestEdit.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestEdit.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestEdit.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestEdit.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestAdministration.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestion.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestion.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestion.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestion.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestionAnswer.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestionAnswer.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestionAnswer.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestionAnswer.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ShortContestAdministration.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ShortContestAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ShortContestAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ShortContestAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\CategoryDropDown.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CategoryDropDown.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\CategoryDropDown.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CategoryDropDown.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\SubmissionTypeCheckBoxes.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypeCheckBoxes.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\SubmissionTypeCheckBoxes.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypeCheckBoxes.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\Partials\\ContestEditor.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestEditor.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\Partials\\ContestEditor.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestEditor.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\ViewModels\\FeedbackReport.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackReport.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\ViewModels\\FeedbackReport.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackReport.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\Views\\FeedbackIndexAdmin.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackIndexAdmin.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\Views\\FeedbackIndexAdmin.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackIndexAdmin.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\News\\ViewModels\\NewsAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>NewsAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\News\\ViewModels\\NewsAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>NewsAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\News\\Views\\NewsIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>NewsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\News\\Views\\NewsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>NewsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\ViewModels\\ParticipantViewModels.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantViewModels.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\ViewModels\\ParticipantViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\EditorTemplates\\ParticipantEditorTemplates.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantEditorTemplates.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\EditorTemplates\\ParticipantEditorTemplates.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantEditorTemplates.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\Partials\\Participants.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Participants.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\Partials\\Participants.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Participants.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsContest.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantsContest.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsContest.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantsContest.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ParticipantsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ProblemsControllers.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsControllers.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ProblemsControllers.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsControllers.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\DetailedProblem.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>DetailedProblem.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\DetailedProblem.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>DetailedProblem.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\ProblemResources.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemResources.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\ProblemResources.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemResources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\Partials\\ProblemsPartials.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsPartials.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\Partials\\ProblemsPartials.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsPartials.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsCreate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsCreate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsCreate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsCreate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDelete.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDelete.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDelete.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDelete.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDeleteAll.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDeleteAll.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDeleteAll.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDeleteAll.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDetails.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDetails.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDetails.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsDetails.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsEdit.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsEdit.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsEdit.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsEdit.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\ResourcesControllers.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesControllers.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\ResourcesControllers.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesControllers.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesCreate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesCreate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesCreate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesCreate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesEdit.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesEdit.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesEdit.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResourcesEdit.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\ViewModels\\RolesViewModels.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>RolesViewModels.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\ViewModels\\RolesViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>RolesViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\Views\\RolesIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>RolesIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\Views\\RolesIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>RolesIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\ViewModels\\SettingAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SettingAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\ViewModels\\SettingAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SettingAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\Views\\SettingsAdministrationIndex.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SettingsAdministrationIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\Views\\SettingsAdministrationIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SettingsAdministrationIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Shared\\Views\\Partials\\Partials.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Partials.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Shared\\Views\\Partials\\Partials.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Partials.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\SubmissionsControllers.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsControllers.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\SubmissionsControllers.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsControllers.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\ViewModels\\SubmissionAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\ViewModels\\SubmissionAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionsGrid.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsGrid.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionsGrid.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsGrid.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\ViewModels\\SubmissionTypeAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypeAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\ViewModels\\SubmissionTypeAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypeAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\EditorTemplates\\SubmissionsEditorTemplates.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsEditorTemplates.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\EditorTemplates\\SubmissionsEditorTemplates.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsEditorTemplates.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionForm.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionForm.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionForm.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionForm.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsCreate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsCreate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsCreate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsCreate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsDelete.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsDelete.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsDelete.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsDelete.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsUpdate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsUpdate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsUpdate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsUpdate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\Views\\SubmissionTypesIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypesIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\Views\\SubmissionTypesIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionTypesIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\TestsControllers.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsControllers.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\TestsControllers.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsControllers.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\ViewModels\\TestAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\ViewModels\\TestAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsCreate.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsCreate.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDelete.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDelete.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDeleteAll.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDeleteAll.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDetails.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDetails.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDetails.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDetails.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsCreate.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsCreate.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDelete.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDelete.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDeleteAll.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsDeleteAll.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsEdit.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsEdit.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsEdit.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsEdit.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>TestsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Users\\ViewModels\\UserProfileAdministration.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>UserProfileAdministration.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Users\\ViewModels\\UserProfileAdministration.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>UserProfileAdministration.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Users\\Views\\UsersIndex.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>UsersIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Administration\\Users\\Views\\UsersIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>UsersIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ContestsGeneral.bg.Designer.cs\">\r\n      <DependentUpon>ContestsGeneral.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ContestsGeneral.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsGeneral.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsAllContestSubmissionsByUser.bg.designer.cs\">\r\n      <DependentUpon>ContestsAllContestSubmissionsByUser.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsAllContestSubmissionsByUser.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsAllContestSubmissionsByUser.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsProblemPartial.bg.Designer.cs\">\r\n      <DependentUpon>ContestsProblemPartial.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsProblemPartial.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsProblemPartial.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ContestsViewModels.bg.designer.cs\">\r\n      <DependentUpon>ContestsViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ContestsViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ProblemsViewModels.bg.designer.cs\">\r\n      <DependentUpon>ProblemsViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ProblemsViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProblemsViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\SubmissionsViewModels.bg.designer.cs\">\r\n      <DependentUpon>SubmissionsViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\SubmissionsViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteIndex.bg.designer.cs\">\r\n      <DependentUpon>CompeteIndex.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CompeteIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteRegister.bg.Designer.cs\">\r\n      <DependentUpon>CompeteRegister.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteRegister.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>CompeteRegister.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\Partials\\StatsPartial.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>StatsPartial.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\Partials\\StatsPartial.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>StatsPartial.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Contests\\ContestsDetails.bg.designer.cs\">\r\n      <DependentUpon>ContestsDetails.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Contests\\ContestsDetails.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestsDetails.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListIndex.bg.designer.cs\">\r\n      <DependentUpon>ListIndex.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListIndex.designer.cs\">\r\n      <DependentUpon>ListIndex.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByType.bg.designer.cs\">\r\n      <DependentUpon>ListByType.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByType.Designer.cs\">\r\n      <DependentUpon>ListByType.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByCategory.bg.Designer.cs\">\r\n      <DependentUpon>ListByCategory.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByCategory.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ListByCategory.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsFull.bg.Designer.cs\">\r\n      <DependentUpon>ResultsFull.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsFull.designer.cs\">\r\n      <DependentUpon>ResultsFull.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsSimple.bg.Designer.cs\">\r\n      <DependentUpon>ResultsSimple.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsSimple.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ResultsSimple.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Submissions\\SubmissionsView.bg.designer.cs\">\r\n      <DependentUpon>SubmissionsView.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Submissions\\SubmissionsView.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SubmissionsView.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\ViewModels\\ProfileViewModels.bg.Designer.cs\">\r\n      <DependentUpon>ProfileViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\ViewModels\\ProfileViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProfileViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Views\\Profile\\ProfileIndex.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProfileIndex.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Views\\Profile\\ProfileIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProfileIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Shared\\ProfileProfileInfo.bg.Designer.cs\">\r\n      <DependentUpon>ProfileProfileInfo.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Shared\\ProfileProfileInfo.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ProfileProfileInfo.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Views\\Settings\\SettingsIndex.bg.designer.cs\">\r\n      <DependentUpon>SettingsIndex.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Areas\\Users\\Views\\Settings\\SettingsIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SettingsIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\ViewModels\\FeedbackViewModels.bg.designer.cs\">\r\n      <DependentUpon>FeedbackViewModels.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\ViewModels\\FeedbackViewModels.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackViewModels.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackIndex.bg.designer.cs\">\r\n      <DependentUpon>FeedbackIndex.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackIndex.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackIndex.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackSubmitted.bg.designer.cs\">\r\n      <DependentUpon>FeedbackSubmitted.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackSubmitted.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>FeedbackSubmitted.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Models\\ContestQuestionTypeResource.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestionTypeResource.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Models\\ContestQuestionTypeResource.bg.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>ContestQuestionTypeResource.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\All.bg.designer.cs\">\r\n      <DependentUpon>All.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\All.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>All.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\LatestNews.bg.designer.cs\">\r\n      <DependentUpon>LatestNews.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\LatestNews.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>LatestNews.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\Selected.bg.designer.cs\">\r\n      <DependentUpon>Selected.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\News\\Views\\Selected.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Selected.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Search\\Views\\SearchIndex.bg.Designer.cs\">\r\n      <DependentUpon>SearchIndex.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Search\\Views\\SearchIndex.designer.cs\">\r\n      <DependentUpon>SearchIndex.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Search\\Views\\SearchResults.bg.Designer.cs\">\r\n      <DependentUpon>SearchResults.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Search\\Views\\SearchResults.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>SearchResults.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\AdvancedSubmissions.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdvancedSubmissions.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\AdvancedSubmissions.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdvancedSubmissions.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\BasicSubmissions.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>BasicSubmissions.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\BasicSubmissions.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>BasicSubmissions.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\Partial\\AdvancedSubmissionsGridPartial.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdvancedSubmissionsGridPartial.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Submissions\\Views\\Partial\\AdvancedSubmissionsGridPartial.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>AdvancedSubmissionsGridPartial.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Views\\Shared\\LoginPartial.bg.designer.cs\">\r\n      <DependentUpon>LoginPartial.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Views\\Shared\\LoginPartial.designer.cs\">\r\n      <DependentUpon>LoginPartial.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Views\\Shared\\Layout.bg.designer.cs\">\r\n      <DependentUpon>Layout.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Views\\Shared\\Layout.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Layout.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Base\\Main.bg.Designer.cs\">\r\n      <DependentUpon>Main.bg.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Base\\Main.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Main.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Global.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Global.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Home\\Views\\Index.designer.cs\">\r\n      <DependentUpon>Index.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"App_GlobalResources\\Home\\Views\\Index.bg.designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Index.bg.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\r\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\r\n    <Compile Include=\"App_Start\\GlimpseSecurityPolicy.cs\" />\r\n    <Compile Include=\"App_Start\\LoggingModule.cs\" />\r\n    <Compile Include=\"App_Start\\NinjectWebCommon.cs\" />\r\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\r\n    <Compile Include=\"App_Start\\Settings.cs\" />\r\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\r\n    <Compile Include=\"App_Start\\ViewEngineConfig.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\AdministrationAreaRegistration.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\AccessLogsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\AntiCheatController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\CheckersController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ContestCategoriesController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ContestQuestionAnswersController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ContestQuestionsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ContestsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ContestsExportController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\FeedbackController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\NavigationController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\NewsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ParticipantsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ProblemsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\ResourcesController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\RolesController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\SettingsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\SubmissionsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\SubmissionTypesController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\TestsController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Controllers\\UsersController.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Providers\\Common\\BaseNewsProvider.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Providers\\Contracts\\INewsProvider.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Providers\\InfoManNewsProvider.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\Providers\\InfosNewsProvider.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\AccessLogs\\AccessLogGridViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\AntiCheat\\SubmissionSimilarityFiltersInputModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\AntiCheat\\SubmissionSimilarityViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\AntiCheat\\AntiCheatByIpAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\AntiCheat\\IpSubmissionsAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Common\\AdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\ContestCategory\\ContestCategoryAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\ContestQuestionAnswer\\ContestQuestionAnswerViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\ContestQuestion\\ContestQuestionViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Contest\\ContestAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Participant\\ContestViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Participant\\ParticipantAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Participant\\ParticipantAnswerViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Participant\\UserViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Problem\\DetailedProblemViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\FeedbackReport\\FeedbackReportViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\News\\NewsAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\ProblemResource\\ProblemResourceGridViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\ProblemResource\\ProblemResourceViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Problem\\ProblemViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Contest\\ShortContestAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Roles\\RoleAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Roles\\UserInRoleAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Setting\\SettingAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\SubmissionType\\SubmissionTypeAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\SubmissionType\\SubmissionTypeViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Submission\\SubmissionAdministrationGridViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Submission\\SubmissionAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\TestRun\\TestRunViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Test\\TestViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\User\\UserProfileAdministrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Api\\ApiAreaRegistration.cs\" />\r\n    <Compile Include=\"Areas\\Api\\Controllers\\ApiController.cs\" />\r\n    <Compile Include=\"Areas\\Api\\Controllers\\ResultsController.cs\" />\r\n    <Compile Include=\"Areas\\Api\\Models\\ErrorMessageViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ContestsAreaRegistration.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\CompeteController.cs\">\r\n      <ExcludeFromStyleCop>False</ExcludeFromStyleCop>\r\n    </Compile>\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\ContestsController.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\ListController.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\ParticipantsAnswersController.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\ResultsController.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Controllers\\SubmissionsController.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Helpers\\ContestExtensions.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Models\\BinarySubmissionModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Models\\ContestQuestionAnswerModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Models\\ContestRegistrationModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\Models\\SubmissionModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestCategoryListViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestPointsRangeViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestProblemResourceViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestProblemStatsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestProblemViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestRegistrationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestStatsChartViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestStatsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\DropDownAnswerViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\ParticipantsAnswers\\ParticipantsAnswersViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\BestSubmissionViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ContestFullResultsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ContestResultsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Participants\\ParticipantViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Problems\\ProblemListItemViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ParticipantFullResultViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ProblemFullResultViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ProblemResultPairViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ProblemResultViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\QuestionViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\ParticipantResultViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\SubmissionFullResultsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\TestRunFullResultsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Results\\SubmissionResultIsCompiledViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Submissions\\SubmissionResultViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Submissions\\SubmissionDetailsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Submissions\\TestRunDetailsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Submissions\\SubmissionTypeViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Users\\Controllers\\ProfileController.cs\" />\r\n    <Compile Include=\"Areas\\Users\\Controllers\\SettingsController.cs\" />\r\n    <Compile Include=\"Areas\\Users\\Helpers\\NullDisplayFormatAttribute.cs\" />\r\n    <Compile Include=\"Areas\\Users\\UsersAreaRegistration.cs\" />\r\n    <Compile Include=\"Controllers\\RedirectsController.cs\" />\r\n    <Compile Include=\"Controllers\\SearchController.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\ChangeUsernameViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Users\\ViewModels\\UserParticipationViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Users\\ViewModels\\UserSettingsViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Users\\ViewModels\\UserProfileViewModel.cs\" />\r\n    <Compile Include=\"Controllers\\AccountController.cs\" />\r\n    <Compile Include=\"Controllers\\AdministrationController.cs\" />\r\n    <Compile Include=\"Controllers\\BaseController.cs\" />\r\n    <Compile Include=\"Controllers\\FeedbackController.cs\" />\r\n    <Compile Include=\"Controllers\\HomeController.cs\" />\r\n    <Compile Include=\"Controllers\\KendoGridAdministrationController.cs\" />\r\n    <Compile Include=\"Controllers\\NewsController.cs\" />\r\n    <Compile Include=\"Controllers\\SubmissionsController.cs\" />\r\n    <Compile Include=\"Global.asax.cs\">\r\n      <DependentUpon>Global.asax</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"ViewModels\\Account\\ChangeEmailViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\ExternalLoginConfirmationViewModel.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Startup.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\ForgottenPasswordViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\LoginViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\ManageUserViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Account\\RegisterViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestCategoryViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Contests\\ViewModels\\Contests\\ContestViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\CategoryMenuItemViewModel.cs\" />\r\n    <Compile Include=\"Areas\\Administration\\ViewModels\\Checker\\CheckerAdministrationViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Feedback\\FeedbackViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Home\\Index\\HomeContestViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Home\\Index\\IndexViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\News\\AllNewsViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\News\\NewsViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\News\\SelectedNewsViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Search\\SearchResultGroupViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Search\\SearchResultViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Shared\\PaginationViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\Submission\\SubmissionViewModel.cs\" />\r\n    <Compile Include=\"ViewModels\\TestRun\\TestRunViewModel.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Content\\bootstrap\\fonts\\glyphicons-halflings-regular.svg\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-cosmo.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-cosmo.min.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-cyborg.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-cyborg.min.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-flatly.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme-flatly.min.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme.css\" />\r\n    <Content Include=\"Content\\bootstrap\\themes\\bootstrap-theme.min.css\" />\r\n    <Content Include=\"Content\\bootstrap\\bootstrap.css\" />\r\n    <Content Include=\"Content\\bootstrap\\bootstrap.min.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\addon\\merge.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\codemirror.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\3024-day.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\3024-night.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\ambiance-mobile.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\ambiance.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\base16-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\base16-light.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\blackboard.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\cobalt.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\eclipse.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\elegant.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\erlang-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\lesser-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\mbo.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\mdn-like.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\midnight.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\monokai.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\neat.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\night.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\paraiso-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\paraiso-light.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\pastel-on-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\rubyblue.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\solarized.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\the-matrix.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\tomorrow-night-eighties.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\twilight.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\vibrant-ink.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\xq-dark.css\" />\r\n    <Content Include=\"Content\\CodeMirror\\theme\\xq-light.css\" />\r\n    <Content Include=\"Content\\Contests\\results-page.css\" />\r\n    <Content Include=\"Content\\Contests\\submission-page.css\" />\r\n    <Content Include=\"Content\\Contests\\submission-view-page.css\" />\r\n    <Content Include=\"Content\\docs.css\" />\r\n    <Content Include=\"Content\\fonts\\glyphicons-halflings-regular.svg\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\editor.png\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\imagebrowser.png\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\indeterminate.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\loading-image.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\loading.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\loading_2x.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\slider-h.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\slider-v.gif\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\sprite.png\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\sprite_2x.png\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\sprite_kpi.png\" />\r\n    <Content Include=\"Content\\KendoUI\\Black\\sprite_kpi_2x.png\" />\r\n    <Content Include=\"Content\\KendoUI\\kendo.black.css\" />\r\n    <Content Include=\"Content\\KendoUI\\kendo.common.css\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\brushed-metal.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots1.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots10.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots11.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots12.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots13.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots2.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots3.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots4.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots5.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots6.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots7.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots8.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\dots9.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\glass-lighter.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\glass.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\highlight.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\hsv-gradient.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\hue.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\leather1.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\leather2.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\noise.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe1.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe2.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe3.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe4.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe5.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\stripe6.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\transparency.png\" />\r\n    <Content Include=\"Content\\KendoUI\\textures\\transtexture.png\" />\r\n    <Content Include=\"favicon.ico\" />\r\n    <Content Include=\"Global.asax\" />\r\n    <Content Include=\"Content\\Site.css\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Web.Config\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\News\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Navigation\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\Index.cshtml\" />\r\n    <Content Include=\"google95e631afa25e7960.html\" />\r\n    <Content Include=\"robots.txt\" />\r\n    <Content Include=\"Scripts\\Administration\\administration-global.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Contests\\contests-index.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Problems\\problems-create.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Problems\\problems-edit.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Problems\\problems-index.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Resources\\resources-create.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Resources\\resources-edit.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Tests\\tests-details.js\" />\r\n    <Content Include=\"Scripts\\Administration\\Tests\\tests-index.js\" />\r\n    <Content Include=\"Scripts\\bootstrap.js\" />\r\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\r\n    <Content Include=\"Scripts\\CodeMirror\\addon\\diff_match_patch.js\" />\r\n    <Content Include=\"Scripts\\CodeMirror\\addon\\merge.js\" />\r\n    <Content Include=\"Scripts\\CodeMirror\\codemirror.js\" />\r\n    <Content Include=\"Scripts\\CodeMirror\\mode\\clike.js\" />\r\n    <Content Include=\"Scripts\\CodeMirror\\mode\\javascript.js\" />\r\n    <Content Include=\"Scripts\\Contests\\list-categories-page.js\" />\r\n    <Content Include=\"Scripts\\Contests\\submission-page.js\" />\r\n    <Content Include=\"Scripts\\Countdown\\countdown.min.js\" />\r\n    <Content Include=\"Scripts\\global.js\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\ContestCategories\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\ContestCategories\\Hierarchy.cshtml\" />\r\n    <Content Include=\"App_Code\\ContestsHelper.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Feedback\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Users\\Views\\Web.Config\" />\r\n    <Content Include=\"Areas\\Users\\Views\\Profile\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Users\\Views\\Shared\\_ProfileInfo.cshtml\" />\r\n    <Content Include=\"Areas\\Users\\Views\\Settings\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Web.Config\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\List\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\List\\ByCategory.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Contests\\Details.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Compete\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Results\\Simple.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Compete\\Register.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\Index.cshtml\" />\r\n    <Content Include=\"Content\\fonts\\glyphicons-halflings-regular.woff\" />\r\n    <Content Include=\"Content\\fonts\\glyphicons-halflings-regular.ttf\" />\r\n    <Content Include=\"Content\\fonts\\glyphicons-halflings-regular.eot\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\Create.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\Edit.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\Delete.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\DeleteAll.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Tests\\Details.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\Create.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\DeleteAll.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\Edit.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\Delete.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Shared\\_ProblemPartial.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\_QuickContestsGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\_ProblemResourceForm.cshtml\" />\r\n    <Content Include=\"Content\\Demos\\DemoTests.zip\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Resources\\Create.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Resources\\Edit.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\List\\BySubmissionType.cshtml\" />\r\n    <Content Include=\"JSLintNet.json\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\NonEditable.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\MultiLineText.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\SingleLineText.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\PositiveInteger.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\DateAndTime.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\DropDownList.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Submissions\\View.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Settings\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\DisabledCheckbox.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Users\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\Date.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Shared\\_AllContestSubmissionsByUser.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\EditorTemplates\\ParticipantDropDownList.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\EditorTemplates\\SubmissionTypesDropDownList.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\Create.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\_SubmissionForm.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\Update.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\EditorTemplates\\ProblemComboBox.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\Delete.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Roles\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Roles\\EditorTemplates\\AddUserToRole.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\_SubmissionsGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\_AdministrationLayout.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\_ViewStart.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Submissions\\EditorTemplates\\SubmissionAdministrationViewModel.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\_CopyQuestionsFromContest.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AntiCheat\\ByIp.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AntiCheat\\_IpGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AntiCheat\\BySubmissionSimilarity.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AntiCheat\\_ContestsComboBox.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AntiCheat\\_SubmissionsGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Results\\_StatsPartial.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Results\\_StatsChartPartial.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\SubmissionTypes\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\Enum.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\AccessLogs\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\ParticipantsAnswers\\Details.cshtml\" />\r\n    <Content Include=\"Content\\bootstrap\\fonts\\glyphicons-halflings-regular.eot\" />\r\n    <Content Include=\"Content\\bootstrap\\fonts\\glyphicons-halflings-regular.ttf\" />\r\n    <Content Include=\"Content\\bootstrap\\fonts\\glyphicons-halflings-regular.woff\" />\r\n    <Content Include=\"Content\\bootstrap\\fonts\\glyphicons-halflings-regular.woff2\" />\r\n    <None Include=\"Properties\\PublishProfiles\\bgcoder.com.pubxml\" />\r\n    <None Include=\"Properties\\PublishProfiles\\File System.pubxml\" />\r\n    <None Include=\"Scripts\\jquery-2.1.4.intellisense.js\" />\r\n    <Content Include=\"Scripts\\jquery-2.1.4.js\" />\r\n    <Content Include=\"Scripts\\jquery-2.1.4.min.js\" />\r\n    <Content Include=\"Scripts\\jquery-2.1.4.min.map\" />\r\n    <Content Include=\"Scripts\\jquery.unobtrusive-ajax.js\" />\r\n    <Content Include=\"Scripts\\jquery.unobtrusive-ajax.min.js\" />\r\n    <None Include=\"Scripts\\jquery.validate-vsdoc.js\" />\r\n    <Content Include=\"Scripts\\jquery.validate.js\" />\r\n    <Content Include=\"Scripts\\jquery.validate.min.js\" />\r\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.js\" />\r\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.min.js\" />\r\n    <Content Include=\"Scripts\\KendoUI\\2014.3.1411\\cultures\\kendo.culture.bg.js\" />\r\n    <Content Include=\"Scripts\\KendoUI\\2014.3.1411\\cultures\\kendo.culture.en-GB.js\" />\r\n    <Content Include=\"Scripts\\KendoUI\\2014.3.1411\\kendo.all.js\" />\r\n    <Content Include=\"Scripts\\KendoUI\\2014.3.1411\\kendo.aspnetmvc.js\" />\r\n    <Content Include=\"Views\\Account\\ChangeUsername.cshtml\" />\r\n    <Content Include=\"Areas\\Contests\\Views\\Results\\Full.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\EditorTemplates\\SubmissionTypeCheckBoxes.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\Create.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\EditorTemplates\\CategoryDropDown.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\_ContestEditor.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\Edit.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\HtmlContent.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Shared\\EditorTemplates\\Integer.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Checkers\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Participants\\Index.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Participants\\_Participants.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Participants\\Contest.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Participants\\EditorTemplates\\ContestsComboBox.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Participants\\EditorTemplates\\UsersComboBox.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\Details.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\_SubmissionsGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Problems\\_ResourcesGrid.cshtml\" />\r\n    <Content Include=\"Areas\\Administration\\Views\\Contests\\EditorTemplates\\ContestQuestionType.cshtml\" />\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\Views\\AccessLogsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccessLogsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AccessLogs.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\Views\\AccessLogsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccessLogsIndex.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AccessLogs.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\ViewModels\\AccessLogGridViewModel.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccessLogGridViewModel.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AccessLogs.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AccessLogs\\ViewModels\\AccessLogGridViewModel.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccessLogGridViewModel.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AccessLogs.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AdministrationGeneral.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdministrationGeneral.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AdministrationGeneral.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdministrationGeneral.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AntiCheat\\Views\\AntiCheatViews.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AntiCheatViews.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AntiCheat.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\AntiCheat\\Views\\AntiCheatViews.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AntiCheatViews.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.AntiCheat.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\Views\\CheckersIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CheckersIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Checkers.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\Views\\CheckersIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CheckersIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Checkers.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\ViewModels\\CheckerAdministrationViewModel.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CheckerAdministrationViewModel.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Checkers.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Checkers\\ViewModels\\CheckerAdministrationViewModel.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CheckerAdministrationViewModel.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Checkers.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\ViewModels\\ContestCategoryAdministrationViewModel.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCategoryAdministrationViewModel.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.ContestCategories.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\ViewModels\\ContestCategoryAdministrationViewModel.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCategoryAdministrationViewModel.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.ContestCategories.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\Views\\ContestCategoriesViews.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCategoriesViews.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.ContestCategories.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\ContestCategories\\Views\\ContestCategoriesViews.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCategoriesViews.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.ContestCategories.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ContestsControllers.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsControllers.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ContestsControllers.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsControllers.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestCreate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCreate.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestCreate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestCreate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestEdit.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestEdit.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestEdit.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestEdit.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\ContestIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestAdministration.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestion.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestQuestion.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestion.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestQuestion.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestionAnswer.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestQuestionAnswer.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ContestQuestionAnswer.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestQuestionAnswer.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ShortContestAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ShortContestAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\ViewModels\\ShortContestAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ShortContestAdministration.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\CategoryDropDown.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CategoryDropDown.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\CategoryDropDown.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CategoryDropDown.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\SubmissionTypeCheckBoxes.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypeCheckBoxes.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\EditorTemplates\\SubmissionTypeCheckBoxes.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypeCheckBoxes.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\Partials\\ContestEditor.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestEditor.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Contests\\Views\\Partials\\ContestEditor.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestEditor.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Contests.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\Views\\FeedbackIndexAdmin.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackIndexAdmin.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\Views\\FeedbackIndexAdmin.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackIndexAdmin.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\ViewModels\\FeedbackReport.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackReport.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Feedback.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Feedback\\ViewModels\\FeedbackReport.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackReport.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Feedback.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\News\\Views\\NewsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>NewsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\News\\Views\\NewsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>NewsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\News\\ViewModels\\NewsAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>NewsAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.News.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\News\\ViewModels\\NewsAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>NewsAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.News.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\ViewModels\\ParticipantViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\ViewModels\\ParticipantViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\EditorTemplates\\ParticipantEditorTemplates.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantEditorTemplates.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\EditorTemplates\\ParticipantEditorTemplates.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantEditorTemplates.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\Partials\\Participants.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Participants.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\Partials\\Participants.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Participants.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsContest.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantsContest.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsContest.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantsContest.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Participants\\Views\\ParticipantsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ParticipantsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Participants.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ProblemsControllers.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsControllers.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ProblemsControllers.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsControllers.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\DetailedProblem.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>DetailedProblem.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\DetailedProblem.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>DetailedProblem.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\ProblemResources.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemResources.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\ViewModels\\ProblemResources.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemResources.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\Partials\\ProblemsPartials.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsPartials.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\Partials\\ProblemsPartials.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsPartials.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsCreate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsCreate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsCreate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsCreate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDelete.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDelete.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDelete.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDelete.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDeleteAll.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDeleteAll.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDeleteAll.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDeleteAll.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDetails.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDetails.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsDetails.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsDetails.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsEdit.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsEdit.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsEdit.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsEdit.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Problems\\Views\\ProblemsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Problems.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\ResourcesControllers.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesControllers.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\ResourcesControllers.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesControllers.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesCreate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesCreate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesEdit.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesEdit.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesCreate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesCreate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Resources\\Views\\ResourcesEdit.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResourcesEdit.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Resources.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\ViewModels\\RolesViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RolesViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Roles.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\ViewModels\\RolesViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RolesViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Roles.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\Views\\RolesIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RolesIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Roles.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Roles\\Views\\RolesIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RolesIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Roles.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\ViewModels\\SettingAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Settings.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\ViewModels\\SettingAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Settings.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\Views\\SettingsAdministrationIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingsAdministrationIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Settings.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Settings\\Views\\SettingsAdministrationIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingsAdministrationIndex.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Settings.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Shared\\Views\\Partials\\Partials.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Partials.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Shared.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Shared\\Views\\Partials\\Partials.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Partials.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Shared.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\SubmissionsControllers.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsControllers.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\SubmissionsControllers.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsControllers.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\ViewModels\\SubmissionAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\ViewModels\\SubmissionAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionsGrid.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsGrid.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionsGrid.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsGrid.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\ViewModels\\SubmissionTypeAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypeAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.SubmissionTypes.ViewModels</CustomToolNamespace>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\ViewModels\\SubmissionTypeAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypeAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.SubmissionTypes.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\EditorTemplates\\SubmissionsEditorTemplates.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsEditorTemplates.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\EditorTemplates\\SubmissionsEditorTemplates.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsEditorTemplates.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.EditorTemplates</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionForm.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionForm.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\Partials\\SubmissionForm.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionForm.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsCreate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsCreate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsDelete.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsDelete.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsUpdate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsUpdate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsCreate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsCreate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsDelete.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsDelete.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Submissions\\Views\\SubmissionsUpdate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsUpdate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\Views\\SubmissionTypesIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypesIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.SubmissionTypes.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\SubmissionTypes\\Views\\SubmissionTypesIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionTypesIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.SubmissionTypes.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\TestsControllers.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsControllers.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <Content Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\TestsControllers.bg.resx\">\r\n      <Generator>GlobalResourceProxyGenerator</Generator>\r\n      <LastGenOutput>TestsControllers.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests</CustomToolNamespace>\r\n    </Content>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\ViewModels\\TestAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\ViewModels\\TestAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsCreate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsCreate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDelete.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDelete.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDeleteAll.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDeleteAll.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsEdit.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsEdit.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDetails.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDetails.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsCreate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsCreate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDelete.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDelete.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDeleteAll.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDeleteAll.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsDetails.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsDetails.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsEdit.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsEdit.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Tests\\Views\\TestsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>TestsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Tests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Users\\ViewModels\\UserProfileAdministration.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>UserProfileAdministration.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Users.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Users\\ViewModels\\UserProfileAdministration.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>UserProfileAdministration.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Users.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Users\\Views\\UsersIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>UsersIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Users.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Administration\\Users\\Views\\UsersIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>UsersIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Administration.Users.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\Partials\\StatsPartial.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>StatsPartial.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\Partials\\StatsPartial.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>StatsPartial.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views.Partials</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Models\\ContestQuestionTypeResource.bg.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestQuestionTypeResource.bg.Designer.cs</LastGenOutput>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n    <Content Include=\"Scripts\\Helpers\\test-results.js\" />\r\n    <Content Include=\"Scripts\\_references.js\" />\r\n    <Content Include=\"Web.config\">\r\n      <SubType>Designer</SubType>\r\n    </Content>\r\n    <Content Include=\"Web.Debug.config\">\r\n      <DependentUpon>Web.config</DependentUpon>\r\n    </Content>\r\n    <Content Include=\"Web.Release.config\">\r\n      <DependentUpon>Web.config</DependentUpon>\r\n    </Content>\r\n    <Content Include=\"Views\\Web.config\" />\r\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\r\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\r\n    <Content Include=\"Views\\Account\\_ChangePasswordPartial.cshtml\" />\r\n    <Content Include=\"Views\\Account\\_ExternalLoginsListPartial.cshtml\" />\r\n    <Content Include=\"Views\\Account\\_RemoveAccountPartial.cshtml\" />\r\n    <Content Include=\"Views\\Account\\_SetPasswordPartial.cshtml\" />\r\n    <Content Include=\"Views\\Account\\ExternalLoginConfirmation.cshtml\" />\r\n    <Content Include=\"Views\\Account\\ExternalLoginFailure.cshtml\" />\r\n    <Content Include=\"Views\\Account\\Login.cshtml\" />\r\n    <Content Include=\"Views\\Account\\Manage.cshtml\" />\r\n    <Content Include=\"Views\\Account\\Register.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\_LoginPartial.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Currency.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Date.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\DateTime.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\GridForeignKey.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Integer.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Number.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\String.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Time.cshtml\" />\r\n    <Content Include=\"Views\\News\\Selected.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\_LatestNews.cshtml\" />\r\n    <Content Include=\"_ViewStart.cshtml\" />\r\n    <Content Include=\"Views\\Feedback\\Index.cshtml\" />\r\n    <Content Include=\"Views\\Feedback\\Submitted.cshtml\" />\r\n    <Content Include=\"Views\\News\\All.cshtml\" />\r\n    <Content Include=\"Views\\Submissions\\BasicSubmissions.cshtml\" />\r\n    <Content Include=\"Views\\Submissions\\AdvancedSubmissions.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\QuestionViewModel.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\EmailAddress.cshtml\" />\r\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\r\n    <Content Include=\"Views\\Account\\ForgottenPassword.cshtml\" />\r\n    <Content Include=\"Views\\Account\\ChangePassword.cshtml\" />\r\n    <Content Include=\"Views\\Account\\ChangeEmail.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\Password.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\EditorTemplates\\MultilineText.cshtml\" />\r\n    <Content Include=\"Views\\Search\\Results.cshtml\" />\r\n    <Content Include=\"Views\\Search\\Index.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\_Pagination.cshtml\" />\r\n    <Content Include=\"Views\\Shared\\_AdvancedSubmissionsGridPartial.cshtml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"App_Data\\\" />\r\n    <Folder Include=\"App_GlobalResources\\Areas\\Administration\\Shared\\Views\\EditorTemplates\\\" />\r\n    <Folder Include=\"App_GlobalResources\\Home\\ViewModels\\\" />\r\n    <Folder Include=\"App_GlobalResources\\Submissions\\ViewModels\\\" />\r\n    <Folder Include=\"Files\\\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App_GlobalResources\\Global.resx\">\r\n      <Generator>GlobalResourceProxyGenerator</Generator>\r\n      <LastGenOutput>Global.Designer.cs</LastGenOutput>\r\n    </Content>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\AccountEmails.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccountEmails.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\AccountEmails.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccountEmails.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\ViewModels\\AccountViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccountViewModels.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\ViewModels\\AccountViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AccountViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangeEmailView.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangeEmailView.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangeEmailView.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangeEmailView.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangeUsernameView.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangeUsernameView.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangeUsernameView.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangeUsernameView.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangePasswordView.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangePasswordView.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ChangePasswordView.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangePasswordView.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginCallback.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginCallback.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginConfirmation.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginConfirmation.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Disassociate.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Disassociate.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginConfirmation.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginConfirmation.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Disassociate.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Disassociate.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginCallback.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginCallback.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginFailure.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginFailure.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ExternalLoginFailure.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginFailure.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ForgottenPassword.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ForgottenPassword.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\ForgottenPassword.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ForgottenPassword.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\General.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>General.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\General.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>General.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Login.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Login.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Login.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Login.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Manage.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Manage.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Manage.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Manage.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\ChangePassword.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangePassword.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\ChangePassword.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ChangePassword.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\ExternalLoginsList.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginsList.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\ExternalLoginsList.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ExternalLoginsList.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\RemoveAccount.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RemoveAccount.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\RemoveAccount.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>RemoveAccount.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\SetPassword.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SetPassword.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Partial\\SetPassword.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SetPassword.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Register.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Register.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Account\\Views\\Register.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Register.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Account.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ContestsGeneral.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsGeneral.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ContestsGeneral.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsGeneral.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsAllContestSubmissionsByUser.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsAllContestSubmissionsByUser.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsAllContestSubmissionsByUser.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsAllContestSubmissionsByUser.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsProblemPartial.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsProblemPartial.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Shared\\ContestsProblemPartial.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsProblemPartial.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ContestsViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ContestsViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ProblemsViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\ProblemsViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProblemsViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\SubmissionsViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\ViewModels\\SubmissionsViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CompeteIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CompeteIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteRegister.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CompeteRegister.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Compete\\CompeteRegister.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>CompeteRegister.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Contests\\ContestsDetails.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsDetails.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Contests\\ContestsDetails.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ContestsDetails.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListIndex.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByType.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListByType.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByType.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListByType.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByCategory.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListByCategory.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\List\\ListByCategory.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ListByCategory.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsFull.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResultsFull.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsFull.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResultsFull.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsSimple.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResultsSimple.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Results\\ResultsSimple.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ResultsSimple.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Submissions\\SubmissionsView.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsView.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Contests\\Views\\Submissions\\SubmissionsView.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SubmissionsView.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Contests.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\ViewModels\\ProfileViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileViewModels.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\ViewModels\\ProfileViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Views\\Profile\\ProfileIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileIndex.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Views.Profile</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Views\\Profile\\ProfileIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Views.Profile</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Shared\\ProfileProfileInfo.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileProfileInfo.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Shared\\ProfileProfileInfo.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>ProfileProfileInfo.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Views\\Settings\\SettingsIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingsIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Views.Settings</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Areas\\Users\\Views\\Settings\\SettingsIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SettingsIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Areas.Users.Views.Settings</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\ViewModels\\FeedbackViewModels.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackViewModels.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\ViewModels\\FeedbackViewModels.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackViewModels.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.ViewModels</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackIndex.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackIndex.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackSubmitted.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackSubmitted.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Feedback\\Views\\FeedbackSubmitted.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>FeedbackSubmitted.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Feedback.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <Content Include=\"App_GlobalResources\\Models\\ContestQuestionTypeResource.resx\">\r\n      <Generator>GlobalResourceProxyGenerator</Generator>\r\n      <LastGenOutput>ContestQuestionTypeResource.designer.cs</LastGenOutput>\r\n    </Content>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\All.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>All.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\LatestNews.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>LatestNews.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\LatestNews.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>LatestNews.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\Selected.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Selected.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\All.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>All.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\News\\Views\\Selected.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Selected.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.News.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Search\\Views\\SearchIndex.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SearchIndex.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Search.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Search\\Views\\SearchIndex.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SearchIndex.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Search.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Search\\Views\\SearchResults.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SearchResults.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Search.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Search\\Views\\SearchResults.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>SearchResults.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Search.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\AdvancedSubmissions.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdvancedSubmissions.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\AdvancedSubmissions.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdvancedSubmissions.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\BasicSubmissions.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>BasicSubmissions.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\BasicSubmissions.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>BasicSubmissions.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\Partial\\AdvancedSubmissionsGridPartial.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdvancedSubmissionsGridPartial.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Submissions\\Views\\Partial\\AdvancedSubmissionsGridPartial.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>AdvancedSubmissionsGridPartial.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Submissions.Views.Partial</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Views\\Shared\\LoginPartial.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>LoginPartial.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Base.Views.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Views\\Shared\\LoginPartial.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>LoginPartial.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Views.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Views\\Shared\\Layout.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Layout.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Views.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Views\\Shared\\Layout.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Layout.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Views.Shared</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Base\\Main.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Main.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Base</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Base\\Main.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Main.bg.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Base</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Home\\Views\\Index.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Index.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Home.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"App_GlobalResources\\Home\\Views\\Index.bg.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Index.bg.designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>Resources.Home.Views</CustomToolNamespace>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\r\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\r\n      <Name>OJS.Data.Contracts</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Models\\OJS.Data.Models.csproj\">\r\n      <Project>{341ca732-d483-4487-923e-27ed2a6e9a4f}</Project>\r\n      <Name>OJS.Data.Models</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data\\OJS.Data.csproj\">\r\n      <Project>{1807194c-9e25-4365-b3be-fe1df627612b}</Project>\r\n      <Name>OJS.Data</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\r\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\r\n      <Name>OJS.Common</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Workers\\OJS.Workers.Tools\\OJS.Workers.Tools.csproj\">\r\n      <Project>{a1f48412-495a-434c-bdd0-e70aedad6897}</Project>\r\n      <Name>OJS.Workers.Tools</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\OJS.Web.Common\\OJS.Web.Common.csproj\">\r\n      <Project>{2e08e0af-0e51-47ca-947b-4c66086fa030}</Project>\r\n      <Name>OJS.Web.Common</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\r\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\r\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\r\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\r\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\r\n  </Target>\r\n  <ProjectExtensions>\r\n    <VisualStudio>\r\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\r\n        <WebProjectProperties>\r\n          <UseIIS>False</UseIIS>\r\n          <AutoAssignPort>True</AutoAssignPort>\r\n          <DevelopmentServerPort>1721</DevelopmentServerPort>\r\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\r\n          <IISUrl>http://localhost:5414/</IISUrl>\r\n          <NTLMAuthentication>False</NTLMAuthentication>\r\n          <UseCustomServer>False</UseCustomServer>\r\n          <CustomServerUrl>\r\n          </CustomServerUrl>\r\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\r\n        </WebProjectProperties>\r\n      </FlavorProperties>\r\n    </VisualStudio>\r\n  </ProjectExtensions>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target> -->\r\n</Project>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Web\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Web\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"4853a279-a968-461e-a246-7760e7ec5e0e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Properties/PublishProfiles/File System.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file is used by the publish/package process of your Web project. You can customize the behavior of this process\nby editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <WebPublishMethod>FileSystem</WebPublishMethod>\n    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <SiteUrlToLaunchAfterPublish />\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <publishUrl>C:\\Temp\\OJS</publishUrl>\n    <DeleteExistingFiles>False</DeleteExistingFiles>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Properties/PublishProfiles/bgcoder.com.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file is used by the publish/package process of your Web project. You can customize the behavior of this process\nby editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <WebPublishMethod>MSDeploy</WebPublishMethod>\n    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <SiteUrlToLaunchAfterPublish>http://bgcoder.com</SiteUrlToLaunchAfterPublish>\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <MSDeployServiceURL>https://79.124.44.83:8172/MsDeploy.axd</MSDeployServiceURL>\n    <DeployIisAppPath>bgcoder.com</DeployIisAppPath>\n    <RemoteSitePhysicalPath />\n    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>\n    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>\n    <EnableMSDeployBackup>True</EnableMSDeployBackup>\n    <UserName>acadwebadmin</UserName>\n    <_SavePWD>False</_SavePWD>\n    <PublishDatabaseSettings>\n      <Objects xmlns=\"\">\n        <ObjectGroup Name=\"DefaultConnection\" Order=\"3\" Enabled=\"False\">\n          <Destination Path=\"\" />\n          <Object Type=\"DbCodeFirst\">\n            <Source Path=\"DBMigration\" DbContext=\"OJS.Data.OjsDbContext, OJS.Data\" MigrationConfiguration=\"OJS.Data.Migrations.DefaultMigrationConfiguration, OJS.Data\" Origin=\"Configuration\" />\n          </Object>\n        </ObjectGroup>\n      </Objects>\n    </PublishDatabaseSettings>\n  </PropertyGroup>\n  <ItemGroup>\n    <MSDeployParameterValue Include=\"$(DeployParameterPrefix)DefaultConnection-Web.config Connection String\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Contests/contests-index.js",
    "content": "﻿function getTypeName(type) {\n    switch (type) {\n        case 0: return \"Default\";\n        case 1: return \"Drop-down list\";\n        case 2: return \"Single line text\";\n        case 3: return \"Multi-line text\";\n    }\n}\n\nfunction copyFromContest(ev, contestId) {\n    ev.preventDefault();\n    var copyWindow = $('#CopyFromContestWindow_' + contestId);\n    copyWindow.data('kendoWindow').open().center();\n\n    var form = copyWindow.children('form');\n\n    form.one('submit', function () {\n        $.post('/Administration/ContestQuestions/CopyTo/' + contestId, form.serialize(), function () {\n            copyWindow.data('kendoWindow').close();\n            var grid = $('#DetailQuestionsGrid_' + contestId).data(\"kendoGrid\");\n            grid.dataSource.read();\n            grid.refresh();\n        });\n\n        return false;\n    });\n}\n\n$(document).ready(function () {\n    $('table').on('click', \"#delete-all-answers\", function(e) {\n        e.preventDefault();\n        var confirmation = confirm(\"Are you sure you want to delete all answers?\");\n        if (confirmation) {\n            var questionId = $(e.target).attr('data-question-id');\n\n            $.get('/Administration/ContestQuestionAnswers/DeleteAllAnswers/' + questionId, function() {\n                var grid = $('#DetailAnswerGrid_' + questionId).data(\"kendoGrid\");\n                grid.dataSource.read();\n                grid.refresh();\n            });\n        }\n    });\n})"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Problems/problems-create.js",
    "content": "﻿// TODO: Convert these events to unobtrusive with $(parent).on('click')...\n\nfunction startUploadForm(e) {\n    var id = $(e).data('id');\n    $(\"#Resources_\" + id + \"__File\").click();\n}\n\nfunction selectedFile(e) {\n    var id = $(e).data('id');\n    var fileName = e.files[0].name;\n\n    $('#file-button-' + id).text(fileName.length > 20 ? fileName.substring(0, 20) + '...' : fileName);\n}\n\nfunction onResourceTypeSelect() {\n    var val = this.value();\n    var id = this.element.attr('modelid');\n\n    var resourceContainer = $('#resource-row-' + id + ' [data-type=\"resource-content\"]');\n\n    // TODO: Refactor these either with methods to generate HTML or better - use hidden div and .hide()/.show()\n\n    if (val == 3) {\n        resourceContainer.html('<div class=\"pull-right\" data-type=\"resource-content\">' +\n                                    '<label for=\"Resources_' + id + '__Link\">Линк</label>' +\n                                    '<input type=\"text\" class = \"form-control full-editor\" name=\"Resources[' + id + '].Link\" id=\"Resources_' + id + '__Link\" />' +\n                                '</div>');\n    }\n    else {\n        resourceContainer.html('<div><strong>Файл</strong></div>' +\n                                '<div id=\"file-button-' + id + '\" data-file-upload-button=\"true\" data-id=\"' + id + '\" class=\"btn btn-sm btn-primary\" onclick=\"startUploadForm(this)\">Избери ресурс</div>' +\n                                '<div class=\"hidden-file-upload\">' +\n                                    '<input type=\"file\" name=\"Resources[' + id + '].File\" id=\"Resources_' + id + '__File\" data-id=\"' + id + '\" onchange=\"selectedFile(this)\" />' +\n                                '</div>');\n    }\n}\n\n$(document).ready(function () {\n\n    $.validator.setDefaults({ ignore: '' });\n\n    $('#enable-sclimit').change(function () {\n        var input = $(\"#SourceCodeSizeLimit\");\n        var numericTextBox = input.data(\"kendoNumericTextBox\");\n\n        if ($(this).is(':checked')) {\n            numericTextBox.enable(true);\n            numericTextBox.value(1024);\n            input.attr(\"data-val-required\", \"Лимита е задължителен!\");\n            \n            $(\"form\").removeData(\"validator\");\n            $(\"form\").removeData(\"unobtrusiveValidation\");\n            $.validator.unobtrusive.parse($('form'));\n        }\n        else {\n            numericTextBox.value(null);\n            numericTextBox.enable(false);\n            input.removeAttr(\"data-val-required\");\n\n            $(\"form\").removeData(\"validator\");\n            $(\"form\").removeData(\"unobtrusiveValidation\");\n            $.validator.unobtrusive.parse($('form'));\n        }\n    });\n\n    $('#checkers-tooltip').kendoTooltip({\n        content: kendo.template($(\"#checkers-template\").html()),\n        width: 580,\n        position: \"bottom\"\n    });\n\n    $('#tests-tooltip').kendoTooltip({\n        content: kendo.template($(\"#tests-template\").html()),\n        width: 440,\n        position: \"bottom\"\n    });\n\n    $('#add-resource').click(function (e) {\n        e.preventDefault();\n\n        var itemIndex = $(\"#resources input.hidden-field\").length;\n\n        $.get(\"/Administration/Problems/AddResourceForm/\" + itemIndex, function (data) {\n            $(\"#resources\").append(data);\n\n            $('#remove-resource').removeAttr('disabled');\n\n            $('#resources .required-resource-field').each(function() {\n                $(this).rules(\"add\", { required: true, messages: { required: \"Задължително поле\" } });\n            });\n        });\n    });\n\n    $('#remove-resource').click(function (e) {\n        e.preventDefault();\n\n        if ($(this).is(':disabled')) {\n            return false;\n        }\n\n        var itemIndex = $(\"#resources input.hidden-field\").length - 1;\n\n        $('#resource-row-' + itemIndex).remove();\n\n        if (itemIndex == 0) {\n            $('#remove-resource').attr('disabled', 'disabled');\n        }\n    });\n\n    $('#tests-file-button').click(function (e) {\n        $('#tests-upload-input').click();\n    });\n\n    $('#tests-upload-input').change(function (e) {\n        var fileName = this.files[0].name;\n        $('#tests-file-button').text(fileName.length > 30 ? fileName.substring(0, 30) + '...' : fileName);\n    });\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Problems/problems-edit.js",
    "content": "﻿$(document).ready(function () {\n    $.validator.setDefaults({ ignore: '' });\n\n    var input = $(\"#SourceCodeSizeLimit\");\n    var numericTextBox = input.data(\"kendoNumericTextBox\");\n    var checkbox = $('#enable-sclimit');\n\n    if (numericTextBox.value() != null && numericTextBox.value() != 0)\n    {\n        checkbox.attr('checked', true);\n        numericTextBox.enable(true);\n        input.attr(\"data-val-required\", \"Лимита е задължителен!\");\n\n        $(\"form\").removeData(\"validator\");\n        $(\"form\").removeData(\"unobtrusiveValidation\");\n        $.validator.unobtrusive.parse($('form'));\n    }\n\n    checkbox.change(function () {\n\n        if ($(this).is(':checked')) {\n            numericTextBox.enable(true);\n            input.attr(\"data-val-required\", \"Лимита е задължителен!\");\n\n            $(\"form\").removeData(\"validator\");\n            $(\"form\").removeData(\"unobtrusiveValidation\");\n            $.validator.unobtrusive.parse($('form'));\n        }\n        else {\n            numericTextBox.enable(false);\n            input.removeAttr(\"data-val-required\");\n\n            $(\"form\").removeData(\"validator\");\n            $(\"form\").removeData(\"unobtrusiveValidation\");\n            $.validator.unobtrusive.parse($('form'));\n        }\n    });\n\n    $('#checkers-tooltip').kendoTooltip({\n        content: kendo.template($(\"#checkers-template\").html()),\n        width: 580,\n        position: \"bottom\"\n    });\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Problems/problems-index.js",
    "content": "﻿function onAdditionalData() {\n    return {\n        text: $(\"#search\").val()\n    };\n}\n\nfunction onSearchSelect(e) {\n    var contestId = this.dataItem(e.item.index()).Id;\n    populateDropDowns(contestId);\n}\n\nfunction onContestSelect() {\n    initializeGrid(parseInt($('#contests').val()));\n}\n\nfunction filterContests() {\n    return {\n        categories: $(\"#categories\").val()\n    };\n}\n\nfunction populateDropDowns(contestIdAsString) {\n\n    var response;\n\n    $.get('/Administration/Problems/GetContestInformation/' + contestIdAsString, function(data) {\n        response = data;\n\n        var categoryId = response.category;\n        var contestId = response.contest;\n\n        var categories = $(\"#categories\").data(\"kendoDropDownList\");\n        var contests = $(\"#contests\").data(\"kendoDropDownList\");\n\n        var categoriesData = new kendo.data.DataSource({\n            transport: {\n                read: {\n                    url: '/Administration/Problems/GetCascadeCategories',\n                    dataType: 'json'\n                }\n            }\n        });\n\n        var contestsData = new kendo.data.DataSource({\n            transport: {\n                read: {\n                    url: '/Administration/Problems/GetCascadeContests/' + categoryId.toString(),\n                    dataType: 'json'\n                }\n            }\n        });\n\n        categoriesData.fetch(function() {\n            categories.dataSource.data(categoriesData);\n            categories.setDataSource(categoriesData);\n            categories.refresh();\n\n            contestsData.fetch(function() {\n                contests.dataSource.data(contestsData);\n                contests.refresh();\n\n                categories.select(function(dataItem) {\n                    return dataItem.Id === categoryId;\n                });\n\n                // TODO: Improve by using success callback or promises, not setTimeout - Cascade event on widgets might work too\n\n                window.setTimeout(function() {\n\n                    contests.select(function(dataItem) {\n                        return dataItem.Id === contestId;\n                    });\n\n                }, 500);\n\n            });\n        });\n\n        initializeGrid(contestId);\n    });\n}\n\nfunction initializeGrid(contestId) {\n\n    var response;\n    var grid;\n\n    $('#status').show();\n\n    var request = $.get('/Administration/Problems/ByContest/' + contestId, function (data) {\n        response = data;\n    })\n    .then(function () {\n\n        $('#status').hide();\n        $('#problems-grid').html('');\n\n        $('#problems-grid').kendoGrid({\n            dataSource: new kendo.data.DataSource({\n                data: response\n            }),\n            scrollable: false,\n            toolbar: [{\n                template: '<a href=\"/Administration/Problems/Create/' + contestId + '\" class=\"btn btn-sm btn-primary\">Добавяне</a>' +\n                    ' <a href=\"/Administration/Problems/DeleteAll/' + contestId + '\" class=\"btn btn-sm btn-primary\">Изтриване на всички</a>' +\n                    ' <a href=\"/Administration/Problems/ExportToExcel?contestId=' + contestId + '\" id=\"export\" class=\"btn btn-sm btn-primary\"><span></span>Експорт към Excel</a>',\n            }],\n            columns: [\n                { field: \"Id\", title: \"Номер\" },\n                { field: \"Name\", title: \"Име\" },\n                { field: \"ContestName\", title: \"Състезание\" },\n                { title: \"Тестове\", template: '<div> Пробни: #= TrialTests # </div><div> Състезателни: #= CompeteTests # </div>' },\n                { title: \"Операции\", width: '50%', template: '<div class=\"text-center\"><a href=\"/Administration/Problems/Details/#= Id #\" class=\"btn btn-sm btn-primary\">Детайли</a>&nbsp;<a href=\"/Administration/Tests/Problem/#= Id #\" class=\"btn btn-sm btn-primary\">Тестове</a>&nbsp;<button class=\"btn btn-sm btn-primary resource-btn\" id=\"resource-btn-#= Id #\">Ресурси</button>&nbsp;<a href=\"/Administration/Problems/Retest/#= Id #\" class=\"btn btn-sm btn-primary\">Ретест</a>&nbsp;<a href=\"/Administration/Problems/Edit/#= Id #\" class=\"btn btn-sm btn-primary\">Промяна</a>&nbsp;<a href=\"/Administration/Problems/Delete/#= Id #\" class=\"btn btn-sm btn-primary\">Изтриване</a></div>' }\n            ],\n            detailInit: detailInit,\n        });\n\n        function detailInit(e) {\n            $(\"<div/>\").appendTo(e.detailCell).kendoGrid({\n                dataSource: {\n                    transport: {\n                        read: \"/Administration/Resources/GetAll/\" + e.data.Id,\n                        destroy: \"/Administration/Resources/Delete\"\n                    },\n                    type: \"aspnetmvc-ajax\",\n                    pageSize: 5,\n                    schema: {\n                        data: \"Data\",\n                        total: \"Total\",\n                        errors: \"Errors\",\n                        model: {\n                            id: \"Id\",\n                            fields: {\n                                Id: { type: \"number\", editable: false },\n                                Name: { type: \"string\" },\n                                Type: { type: \"number\" },\n                                TypeName: { type: \"string\" },\n                                OrderBy: { type: \"number\" },\n                                Link: { type: \"string\" },\n                            }\n                        },\n                    },\n                    sort: { field: \"OrderBy\", dir: \"asc\" },\n                    serverSorting: true,\n                    serverPaging: true,\n                    serverFiltering: true,\n                },\n                editable: \"popup\",\n                pagable: true,\n                sortable: true,\n                filterable: true,\n                scrollable: false,\n                toolbar: [{ template: '<a href=\"/Administration/Resources/Create/' + e.data.Id + '\" class=\"btn btn-sm btn-primary\">Добави ресурс</a>' }],\n                columns: [\n                    { field: \"Id\", title: \"Номер\" },\n                    { field: \"Name\", title: \"Име\" },\n                    { field: \"Type\", title: \"Тип\", template: \"#= TypeName #\" },\n                    { field: \"OrderBy\", title: \"Подредба\" },\n                    { title: \"Линк\", template: '# if(Type == 3) { # <a href=\"#= Link #\" class=\"btn btn-sm btn-primary\" target=\"_blank\">Видео</a> # } else { # <a href=\"/Administration/Resources/Download/#= Id #\" class=\"btn btn-sm btn-primary\" >Свали</a> # } #' },\n                    { title: \"Операции\", template: \"<a href='/Administration/Resources/Edit/#= Id #' class='btn btn-sm btn-primary'>Промяна</a> <a href='\\\\#' class='btn btn-sm btn-primary k-grid-delete'>Изтрий</a>\" }\n                ]\n            });\n        }\n\n            $('.resource-btn').click(function(e) {\n                var target = $(e.target);\n                var tr = target.closest(\"tr\");\n                var grid = $(\"#problems-grid\").data(\"kendoGrid\");\n\n                if (target.data('expanded') == false) {\n                    grid.collapseRow(tr);\n                    target.removeData('expanded');\n                } else {\n                    grid.expandRow(tr);\n                    target.data('expanded', false);\n                }\n            });\n\n        if ($('#problemId').val()) {\n            $('#resource-btn-' + $('#problemId').val()).click();\n        }\n    });\n}\n\nfunction hideTheadFromGrid() {\n    $('#future-grid thead').hide();\n\n    $('[data-clickable=\"grid-click\"]').click(function () {\n        var id = $(this).data('id');\n\n        populateDropDowns(id);\n    });\n};\n\n$(document).ready(function () {\n    $('#status').hide();\n\n    if ($('#contestId').val()) {\n        populateDropDowns($('#contestId').val());\n    }\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Resources/resources-create.js",
    "content": "﻿function onEditResourceTypeSelect() {\n    var val = this.value();\n\n    if (val == 3) {\n        $('#file-select').hide();\n        $('#link-input').show();\n    }\n    else {\n        $('#link-input').hide();\n        $('#file-select').show();\n    }\n}\n\n$(document).ready(function () {\n    $('#link-input').hide();\n\n    $('#file-button-resource').click(function() {\n        $('#input-file-resource').click();\n    });\n\n    $('#input-file-resource').change(function() {\n        var fileName = this.files[0].name;\n        $('#file-button-resource').text(fileName.length > 20 ? fileName.substring(0, 20) + '...' : fileName);\n    });\n})"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Resources/resources-edit.js",
    "content": "﻿function onEditResourceTypeSelect() {\n    var val = this.value();\n    hideInput(val);\n}\n\nfunction hideInput(val) {\n    if (val == 3) {\n        $('#file-select').hide();\n        $('#link-input').show();\n    }\n    else {\n        $('#link-input').hide();\n        $('#file-select').show();\n    }\n}\n\n$(document).ready(function () {\n    var value = $('#Type').data('kendoDropDownList').value();\n    hideInput(value);\n\n    $('#file-button-resource').click(function() {\n        $('#input-file-resource').click();\n    });\n\n    $('#input-file-resource').change(function() {\n        var fileName = this.files[0].name;\n        $('#file-button-resource').text(fileName.length > 20 ? fileName.substring(0, 20) + '...' : fileName);\n    });\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Tests/tests-details.js",
    "content": "﻿function removeOutputAjaxLink() {\n    $('#ajax-output-link').hide();\n}\n\nfunction removeInputAjaxLink() {\n    $('#ajax-input-link').hide();\n}\n\nfunction testResult(test) {\n    var result = '';\n\n    switch (test) {\n        case 0: result += '<span class=\"glyphicon glyphicon-ok text-success\" title=\"Correct answer\"></span>'; break;\n        case 1: result += '<span class=\"glyphicon glyphicon-remove text-danger\" title=\"Wrong answer\"></span>'; break;\n        case 2: result += '<span class=\"glyphicon glyphicon-time text-danger\" title=\"Time limit\"></span>'; break;\n        case 3: result += '<span class=\"glyphicon glyphicon-hdd text-danger\" title=\"Memory limit\"></span>'; break;\n        case 4: result += '<span class=\"glyphicon glyphicon-asterisk text-danger\" title=\"Run-time error\"></span>'; break;\n    }\n\n    return result;\n};\n\nfunction initilizeTestRuns(response) {\n    $('#test-runs-button').hide();\n\n    $('#test-runs-grid').kendoGrid({\n        dataSource: new kendo.data.DataSource({\n            data: response.responseJSON,\n            pageSize: 25,\n        }),\n        pageable: true,\n        scrollable: false,\n        columns: [\n            { field: \"Id\", title: \"Номер\" },\n            { field: \"TimeUsed\", title: \"Време\" },\n            { field: \"MemoryUsed\", title: \"Памет\" },\n            { title: \"Резултат\", template: '<div> #= testResult(ExecutionResult) # </div>' },\n            { field: \"CheckerComment\", title: \"Чекер\" },\n            { field: \"ExecutionComment\", title: \"Екзекютор\" },\n            { title: \"Решение\", template: '<a href=\"/Contests/Submissions/View/#= SubmissionId #\" target=\"_blank\">№#= SubmissionId #</a>' }\n        ],\n    });\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/Tests/tests-index.js",
    "content": "﻿function onAdditionalData() {\n    return {\n        text: $(\"#search\").val()\n    };\n}\n\nfunction onSearchSelect(e) {\n    \n    var problemId = this.dataItem(e.item.index()).Id;\n    $('#problemId').val(problemId);\n    populateDropDowns(problemId);\n}\n\nfunction filterContests() {\n    return {\n        id: $(\"#categories\").val()\n    };\n}\n\nfunction filterProblems() {\n    return {\n        id: $(\"#contests\").val()\n    };\n}\n\nfunction onProblemSelect(e) {\n    var problemId = $('#problems').val();\n\n    if (problemId != \"\") {\n        $('#controls').show();\n        $('#problemId').val(problemId);\n        $('#exportFile').attr('href', '/Administration/Tests/Export/' + problemId);\n\n        initializeGrid(parseInt(problemId), parseInt($(\"#contests\").val()));\n        $('#grid').show();\n    }\n    else {\n        $('#controls').hide();\n        $('#grid').hide();\n    }\n}\n\nfunction populateDropDowns(problemIdAsString) {\n\n    $('#controls').show();\n    $('#exportFile').attr('href', '/Administration/Tests/Export/' + problemIdAsString);\n\n    var response;\n\n    $.get('/Administration/Tests/GetProblemInformation/' + problemIdAsString, function(data) {\n        response = data;\n\n        var categoryId = response.Category;\n        var contestId = response.Contest;\n        var problemId = parseInt(problemIdAsString);\n\n        var categories = $(\"#categories\").data(\"kendoDropDownList\");\n        var contests = $(\"#contests\").data(\"kendoDropDownList\");\n        var problems = $(\"#problems\").data(\"kendoDropDownList\");\n\n        var categoriesData = new kendo.data.DataSource({\n            transport: {\n                read: {\n                    url: '/Administration/Tests/GetCascadeCategories',\n                    dataType: 'json'\n                }\n            }\n        });\n\n        var contestsData = new kendo.data.DataSource({\n            transport: {\n                read: {\n                    url: '/Administration/Tests/GetCascadeContests/' + categoryId.toString(),\n                    dataType: 'json'\n                }\n            }\n        });\n\n        var problemsData = new kendo.data.DataSource({\n            transport: {\n                read: {\n                    url: '/Administration/Tests/GetCascadeProblems/' + contestId.toString(),\n                    dataType: 'json'\n                }\n            }\n        });\n\n        function categoriesCascade() {\n            contests.dataSource.fetch(function() {\n                contests.dataSource.read();\n\n                contests.select(function(dataItem) {\n                    return dataItem.Id == contestId;\n                });\n            });\n        }\n\n        function contestsCascade() {\n            problems.dataSource.fetch(function() {\n                problems.dataSource.read();\n\n                problems.select(function(dataItem) {\n                    return dataItem.Id == problemId;\n                });\n            });\n        }\n\n        categories.bind(\"cascade\", categoriesCascade);\n        contests.bind(\"cascade\", contestsCascade);\n\n        categoriesData.fetch(function() {\n            categories.dataSource.data(categoriesData);\n            categories.setDataSource(categoriesData);\n            categories.refresh();\n        });\n\n        categories.select(function(dataItem) {\n            return dataItem.Id === categoryId;\n        });\n\n        initializeGrid(problemId, contestId);\n    });\n}\n\nfunction initializeGrid(problemId, contestId) {\n\n    var response;\n    var grid;\n\n    $('#status').show();\n\n    var request = $.get('/Administration/Tests/ProblemTests/' + problemId, function (data) {\n        response = data;\n    })\n    .then(function () {\n\n        $('#status').hide();\n        $('#grid').html('');\n\n        $('#grid').kendoGrid({\n            dataSource: new kendo.data.DataSource({\n                data: response\n            }),\n            scrollable: false,\n            toolbar: [{\n                template: '<a href=\"/Administration/Tests/Create/' + problemId + '\" class=\"btn btn-sm btn-primary\">Добавяне</a>' +\n                    ' <a href=\"/Administration/Tests/DeleteAll/' + problemId + '\" class=\"btn btn-sm btn-primary\">Изтриване на всички</a>' +\n                    ' <a href=\"/Administration/Problems/Contest/' + contestId + '\" class=\"btn btn-sm btn-primary\">Към задачата</a>' +\n                    ' <a href=\"/Administration/Tests/ExportToExcel?id=' + problemId + '\" id=\"export\" class=\"btn btn-sm btn-primary\"><span></span>Експорт към Excel</a>' +\n                    ' <a  href=\"/Administration/Tests/Export/' + problemId + '\" class=\"btn btn-sm btn-primary\" id=\"exportFile\">Експортиране към ZIP файл</a>',\n            }],\n            columns: [\n                { field: \"Input\", title: \"Вход\" },\n                { field: \"Output\", title: \"Изход\" },\n                { field: \"TrialTestName\", title: \"Вид тест\" },\n                { field: \"OrderBy\", title: \"Подредба\" },\n                { field: \"TestRunsCount\", title: \"Изпълнения\" },\n                { title: \"Операции\", width: \"25%\", template: '<a href=\"/Administration/Tests/Details/#= Id #\" class=\"btn btn-sm btn-primary\">Детайли</a>&nbsp;<a href=\"/Administration/Tests/Edit/#= Id #\" class=\"btn btn-sm btn-primary\">Промяна</a>&nbsp;<a href=\"/Administration/Tests/Delete/#= Id #\" class=\"btn btn-sm btn-primary\">Изтриване</a>' }\n            ],\n            sortable: true\n        });\n    });\n}\n\n$(document).ready(function () {\n    $('#status').hide();\n    $('#controls').hide();\n    $('#problemId').hide();\n\n    if ($('#problemId').val() != '') {\n        populateDropDowns($('#problemId').val());\n    }\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Administration/administration-global.js",
    "content": "﻿function validateModelStateErrors(args) {\n    if (args.errors) {\n        var grid = $(\"#DataGrid\").data(\"kendoGrid\");\n        var validationTemplate = kendo.template($(\"#model-state-errors-template\").html());\n        $('.k-edit-form-container').prepend('<div id=\"errors\" class=\"alert alert-danger\"></div>');\n        grid.one(\"dataBinding\", function(e) {\n            e.preventDefault();\n\n            $.each(args.errors, function(propertyName) {\n                var renderedTemplate = validationTemplate({ field: propertyName, errors: this.errors });\n                grid.editable.element.find(\"#errors\").append(renderedTemplate);\n            });\n\n            $('.k-grid-update').click(function(ev) {\n                ev.preventDefault();\n                $('#errors').remove();\n            });\n        });\n    }\n};\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/CodeMirror/addon/diff_match_patch.js",
    "content": "﻿(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[0,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,\nd):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>=\nu)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];\nd=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=\nh,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-\ng),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,\na[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,\"&amp;\").replace(d,\"&lt;\").replace(e,\"&gt;\").replace(f,\"&para;<br>\");switch(h){case 1:b[g]='<ins style=\"background:#e6ffe6;\">'+j+\"</ins>\";break;case -1:b[g]='<del style=\"background:#ffe6e6;\">'+j+\"</del>\";break;case 0:b[g]=\"<span>\"+j+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]=\"+\"+encodeURI(a[c][1]);break;case -1:b[c]=\"-\"+a[c][1].length;break;case 0:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=i);\"=\"==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+\nk)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=\nc.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){var d;if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&\ne&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);\nif(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0,\nj+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,\nc]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),\nj=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);\"\"!==i&&\n(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([-1,g]);else if(\"+\"==e)f.diffs.push([1,g]);else if(\" \"==e)f.diffs.push([0,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1;b=0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2;a=[\"@@ -\"+a+\" +\"+b+\" @@\\n\"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c=\"+\";break;case -1:c=\"-\";break;case 0:c=\" \"}a[b+1]=c+encodeURI(this.diffs[b][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})()"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/CodeMirror/addon/merge.js",
    "content": "﻿// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"diff_match_patch\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"diff_match_patch\"], mod);\n  else // Plain browser env\n    mod(CodeMirror, diff_match_patch);\n})(function(CodeMirror, diff_match_patch) {\n  \"use strict\";\n  var Pos = CodeMirror.Pos;\n  var svgNS = \"http://www.w3.org/2000/svg\";\n\n  function DiffView(mv, type) {\n    this.mv = mv;\n    this.type = type;\n    this.classes = type == \"left\"\n      ? {chunk: \"CodeMirror-merge-l-chunk\",\n         start: \"CodeMirror-merge-l-chunk-start\",\n         end: \"CodeMirror-merge-l-chunk-end\",\n         insert: \"CodeMirror-merge-l-inserted\",\n         del: \"CodeMirror-merge-l-deleted\",\n         connect: \"CodeMirror-merge-l-connect\"}\n      : {chunk: \"CodeMirror-merge-r-chunk\",\n         start: \"CodeMirror-merge-r-chunk-start\",\n         end: \"CodeMirror-merge-r-chunk-end\",\n         insert: \"CodeMirror-merge-r-inserted\",\n         del: \"CodeMirror-merge-r-deleted\",\n         connect: \"CodeMirror-merge-r-connect\"};\n  }\n\n  DiffView.prototype = {\n    constructor: DiffView,\n    init: function(pane, orig, options) {\n      this.edit = this.mv.edit;\n      this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options)));\n\n      this.diff = getDiff(asString(orig), asString(options.value));\n      this.chunks = getChunks(this.diff);\n      this.diffOutOfDate = this.dealigned = false;\n\n      this.showDifferences = options.showDifferences !== false;\n      this.forceUpdate = registerUpdate(this);\n      setScrollLock(this, true, false);\n      registerScroll(this);\n    },\n    setShowDifferences: function(val) {\n      val = val !== false;\n      if (val != this.showDifferences) {\n        this.showDifferences = val;\n        this.forceUpdate(\"full\");\n      }\n    }\n  };\n\n  function ensureDiff(dv) {\n    if (dv.diffOutOfDate) {\n      dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue());\n      dv.chunks = getChunks(dv.diff);\n      dv.diffOutOfDate = false;\n      CodeMirror.signal(dv.edit, \"updateDiff\", dv.diff);\n    }\n  }\n\n  var updating = false;\n  function registerUpdate(dv) {\n    var edit = {from: 0, to: 0, marked: []};\n    var orig = {from: 0, to: 0, marked: []};\n    var debounceChange, updatingFast = false;\n    function update(mode) {\n      updating = true;\n      updatingFast = false;\n      if (mode == \"full\") {\n        if (dv.svg) clear(dv.svg);\n        if (dv.copyButtons) clear(dv.copyButtons);\n        clearMarks(dv.edit, edit.marked, dv.classes);\n        clearMarks(dv.orig, orig.marked, dv.classes);\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      ensureDiff(dv);\n      if (dv.showDifferences) {\n        updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);\n        updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);\n      }\n      makeConnections(dv);\n\n      if (dv.mv.options.connect == \"align\")\n        alignChunks(dv);\n      updating = false;\n    }\n    function setDealign(fast) {\n      if (updating) return;\n      dv.dealigned = true;\n      set(fast);\n    }\n    function set(fast) {\n      if (updating || updatingFast) return;\n      clearTimeout(debounceChange);\n      if (fast === true) updatingFast = true;\n      debounceChange = setTimeout(update, fast === true ? 20 : 250);\n    }\n    function change(_cm, change) {\n      if (!dv.diffOutOfDate) {\n        dv.diffOutOfDate = true;\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      // Update faster when a line was added/removed\n      setDealign(change.text.length - 1 != change.to.line - change.from.line);\n    }\n    dv.edit.on(\"change\", change);\n    dv.orig.on(\"change\", change);\n    dv.edit.on(\"markerAdded\", setDealign);\n    dv.edit.on(\"markerCleared\", setDealign);\n    dv.orig.on(\"markerAdded\", setDealign);\n    dv.orig.on(\"markerCleared\", setDealign);\n    dv.edit.on(\"viewportChange\", function() { set(false); });\n    dv.orig.on(\"viewportChange\", function() { set(false); });\n    update();\n    return update;\n  }\n\n  function registerScroll(dv) {\n    dv.edit.on(\"scroll\", function() {\n      syncScroll(dv, DIFF_INSERT) && makeConnections(dv);\n    });\n    dv.orig.on(\"scroll\", function() {\n      syncScroll(dv, DIFF_DELETE) && makeConnections(dv);\n    });\n  }\n\n  function syncScroll(dv, type) {\n    // Change handler will do a refresh after a timeout when diff is out of date\n    if (dv.diffOutOfDate) return false;\n    if (!dv.lockScroll) return true;\n    var editor, other, now = +new Date;\n    if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; }\n    else { editor = dv.orig; other = dv.edit; }\n    // Don't take action if the position of this editor was recently set\n    // (to prevent feedback loops)\n    if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false;\n\n    var sInfo = editor.getScrollInfo();\n    if (dv.mv.options.connect == \"align\") {\n      targetPos = sInfo.top;\n    } else {\n      var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;\n      var mid = editor.lineAtHeight(midY, \"local\");\n      var around = chunkBoundariesAround(dv.chunks, mid, type == DIFF_INSERT);\n      var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig);\n      var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit);\n      var ratio = (midY - off.top) / (off.bot - off.top);\n      var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);\n\n      var botDist, mix;\n      // Some careful tweaking to make sure no space is left out of view\n      // when scrolling to top or bottom.\n      if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {\n        targetPos = targetPos * mix + sInfo.top * (1 - mix);\n      } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {\n        var otherInfo = other.getScrollInfo();\n        var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;\n        if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)\n          targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);\n      }\n    }\n\n    other.scrollTo(sInfo.left, targetPos);\n    other.state.scrollSetAt = now;\n    other.state.scrollSetBy = dv;\n    return true;\n  }\n\n  function getOffsets(editor, around) {\n    var bot = around.after;\n    if (bot == null) bot = editor.lastLine() + 1;\n    return {top: editor.heightAtLine(around.before || 0, \"local\"),\n            bot: editor.heightAtLine(bot, \"local\")};\n  }\n\n  function setScrollLock(dv, val, action) {\n    dv.lockScroll = val;\n    if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv);\n    dv.lockButton.innerHTML = val ? \"\\u21db\\u21da\" : \"\\u21db&nbsp;&nbsp;\\u21da\";\n  }\n\n  // Updating the marks for editor content\n\n  function clearMarks(editor, arr, classes) {\n    for (var i = 0; i < arr.length; ++i) {\n      var mark = arr[i];\n      if (mark instanceof CodeMirror.TextMarker) {\n        mark.clear();\n      } else if (mark.parent) {\n        editor.removeLineClass(mark, \"background\", classes.chunk);\n        editor.removeLineClass(mark, \"background\", classes.start);\n        editor.removeLineClass(mark, \"background\", classes.end);\n      }\n    }\n    arr.length = 0;\n  }\n\n  // FIXME maybe add a margin around viewport to prevent too many updates\n  function updateMarks(editor, diff, state, type, classes) {\n    var vp = editor.getViewport();\n    editor.operation(function() {\n      if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n        clearMarks(editor, state.marked, classes);\n        markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);\n        state.from = vp.from; state.to = vp.to;\n      } else {\n        if (vp.from < state.from) {\n          markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);\n          state.from = vp.from;\n        }\n        if (vp.to > state.to) {\n          markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);\n          state.to = vp.to;\n        }\n      }\n    });\n  }\n\n  function markChanges(editor, diff, type, marks, from, to, classes) {\n    var pos = Pos(0, 0);\n    var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));\n    var cls = type == DIFF_DELETE ? classes.del : classes.insert;\n    function markChunk(start, end) {\n      var bfrom = Math.max(from, start), bto = Math.min(to, end);\n      for (var i = bfrom; i < bto; ++i) {\n        var line = editor.addLineClass(i, \"background\", classes.chunk);\n        if (i == start) editor.addLineClass(line, \"background\", classes.start);\n        if (i == end - 1) editor.addLineClass(line, \"background\", classes.end);\n        marks.push(line);\n      }\n      // When the chunk is empty, make sure a horizontal line shows up\n      if (start == end && bfrom == end && bto == end) {\n        if (bfrom)\n          marks.push(editor.addLineClass(bfrom - 1, \"background\", classes.end));\n        else\n          marks.push(editor.addLineClass(bfrom, \"background\", classes.start));\n      }\n    }\n\n    var chunkStart = 0;\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0], str = part[1];\n      if (tp == DIFF_EQUAL) {\n        var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);\n        moveOver(pos, str);\n        var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);\n        if (cleanTo > cleanFrom) {\n          if (i) markChunk(chunkStart, cleanFrom);\n          chunkStart = cleanTo;\n        }\n      } else {\n        if (tp == type) {\n          var end = moveOver(pos, str, true);\n          var a = posMax(top, pos), b = posMin(bot, end);\n          if (!posEq(a, b))\n            marks.push(editor.markText(a, b, {className: cls}));\n          pos = end;\n        }\n      }\n    }\n    if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1);\n  }\n\n  // Updating the gap between editor and original\n\n  function makeConnections(dv) {\n    if (!dv.showDifferences) return;\n\n    if (dv.svg) {\n      clear(dv.svg);\n      var w = dv.gap.offsetWidth;\n      attrs(dv.svg, \"width\", w, \"height\", dv.gap.offsetHeight);\n    }\n    if (dv.copyButtons) clear(dv.copyButtons);\n\n    var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();\n    var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top;\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var ch = dv.chunks[i];\n      if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from &&\n          ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from)\n        drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w);\n    }\n  }\n\n  function getMatchingOrigLine(editLine, chunks) {\n    var editStart = 0, origStart = 0;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null;\n      if (chunk.editFrom > editLine) break;\n      editStart = chunk.editTo;\n      origStart = chunk.origTo;\n    }\n    return origStart + (editLine - editStart);\n  }\n\n  function findAlignedLines(dv, other) {\n    var linesToAlign = [];\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var chunk = dv.chunks[i];\n      linesToAlign.push([chunk.origTo, chunk.editTo, other ? getMatchingOrigLine(chunk.editTo, other.chunks) : null]);\n    }\n    if (other) {\n      for (var i = 0; i < other.chunks.length; i++) {\n        var chunk = other.chunks[i];\n        for (var j = 0; j < linesToAlign.length; j++) {\n          var align = linesToAlign[j];\n          if (align[1] == chunk.editTo) {\n            j = -1;\n            break;\n          } else if (align[1] > chunk.editTo) {\n            break;\n          }\n        }\n        if (j > -1)\n          linesToAlign.splice(j - 1, 0, [getMatchingOrigLine(chunk.editTo, dv.chunks), chunk.editTo, chunk.origTo]);\n      }\n    }\n    return linesToAlign;\n  }\n\n  function alignChunks(dv, force) {\n    if (!dv.dealigned && !force) return;\n    if (!dv.orig.curOp) return dv.orig.operation(function() {\n      alignChunks(dv, force);\n    });\n\n    dv.dealigned = false;\n    var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left;\n    if (other) {\n      ensureDiff(other);\n      other.dealigned = false;\n    }\n    var linesToAlign = findAlignedLines(dv, other);\n\n    // Clear old aligners\n    var aligners = dv.mv.aligners;\n    for (var i = 0; i < aligners.length; i++)\n      aligners[i].clear();\n    aligners.length = 0;\n\n    var cm = [dv.orig, dv.edit], scroll = [];\n    if (other) cm.push(other.orig);\n    for (var i = 0; i < cm.length; i++)\n      scroll.push(cm[i].getScrollInfo().top);\n\n    for (var ln = 0; ln < linesToAlign.length; ln++)\n      alignLines(cm, linesToAlign[ln], aligners);\n\n    for (var i = 0; i < cm.length; i++)\n      cm[i].scrollTo(null, scroll[i]);\n  }\n\n  function alignLines(cm, lines, aligners) {\n    var maxOffset = 0, offset = [];\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var off = cm[i].heightAtLine(lines[i], \"local\");\n      offset[i] = off;\n      maxOffset = Math.max(maxOffset, off);\n    }\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var diff = maxOffset - offset[i];\n      if (diff > 1)\n        aligners.push(padAbove(cm[i], lines[i], diff));\n    }\n  }\n\n  function padAbove(cm, line, size) {\n    var above = true;\n    if (line > cm.lastLine()) {\n      line--;\n      above = false;\n    }\n    var elt = document.createElement(\"div\");\n    elt.className = \"CodeMirror-merge-spacer\";\n    elt.style.height = size + \"px\"; elt.style.minWidth = \"1px\";\n    return cm.addLineWidget(line, elt, {height: size, above: above});\n  }\n\n  function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {\n    var flip = dv.type == \"left\";\n    var top = dv.orig.heightAtLine(chunk.origFrom, \"local\") - sTopOrig;\n    if (dv.svg) {\n      var topLpx = top;\n      var topRpx = dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit;\n      if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }\n      var botLpx = dv.orig.heightAtLine(chunk.origTo, \"local\") - sTopOrig;\n      var botRpx = dv.edit.heightAtLine(chunk.editTo, \"local\") - sTopEdit;\n      if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }\n      var curveTop = \" C \" + w/2 + \" \" + topRpx + \" \" + w/2 + \" \" + topLpx + \" \" + (w + 2) + \" \" + topLpx;\n      var curveBot = \" C \" + w/2 + \" \" + botLpx + \" \" + w/2 + \" \" + botRpx + \" -1 \" + botRpx;\n      attrs(dv.svg.appendChild(document.createElementNS(svgNS, \"path\")),\n            \"d\", \"M -1 \" + topRpx + curveTop + \" L \" + (w + 2) + \" \" + botLpx + curveBot + \" z\",\n            \"class\", dv.classes.connect);\n    }\n    if (dv.copyButtons) {\n      var copy = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"left\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                \"CodeMirror-merge-copy\"));\n      var editOriginals = dv.mv.options.allowEditingOriginals;\n      copy.title = editOriginals ? \"Push to left\" : \"Revert chunk\";\n      copy.chunk = chunk;\n      copy.style.top = top + \"px\";\n\n      if (editOriginals) {\n        var topReverse = dv.orig.heightAtLine(chunk.editFrom, \"local\") - sTopEdit;\n        var copyReverse = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"right\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                         \"CodeMirror-merge-copy-reverse\"));\n        copyReverse.title = \"Push to right\";\n        copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo,\n                             origFrom: chunk.editFrom, origTo: chunk.editTo};\n        copyReverse.style.top = topReverse + \"px\";\n        dv.type == \"right\" ? copyReverse.style.left = \"2px\" : copyReverse.style.right = \"2px\";\n      }\n    }\n  }\n\n  function copyChunk(dv, to, from, chunk) {\n    if (dv.diffOutOfDate) return;\n    to.replaceRange(from.getRange(Pos(chunk.origFrom, 0), Pos(chunk.origTo, 0)),\n                         Pos(chunk.editFrom, 0), Pos(chunk.editTo, 0));\n  }\n\n  // Merge view, containing 0, 1, or 2 diff views.\n\n  var MergeView = CodeMirror.MergeView = function(node, options) {\n    if (!(this instanceof MergeView)) return new MergeView(node, options);\n\n    this.options = options;\n    var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;\n\n    var hasLeft = origLeft != null, hasRight = origRight != null;\n    var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);\n    var wrap = [], left = this.left = null, right = this.right = null;\n    var self = this;\n\n    if (hasLeft) {\n      left = this.left = new DiffView(this, \"left\");\n      var leftPane = elt(\"div\", null, \"CodeMirror-merge-pane\");\n      wrap.push(leftPane);\n      wrap.push(buildGap(left));\n    }\n\n    var editPane = elt(\"div\", null, \"CodeMirror-merge-pane\");\n    wrap.push(editPane);\n\n    if (hasRight) {\n      right = this.right = new DiffView(this, \"right\");\n      wrap.push(buildGap(right));\n      var rightPane = elt(\"div\", null, \"CodeMirror-merge-pane\");\n      wrap.push(rightPane);\n    }\n\n    (hasRight ? rightPane : editPane).className += \" CodeMirror-merge-pane-rightmost\";\n\n    wrap.push(elt(\"div\", null, null, \"height: 0; clear: both;\"));\n\n    var wrapElt = this.wrap = node.appendChild(elt(\"div\", wrap, \"CodeMirror-merge CodeMirror-merge-\" + panes + \"pane\"));\n    this.edit = CodeMirror(editPane, copyObj(options));\n\n    if (left) left.init(leftPane, origLeft, options);\n    if (right) right.init(rightPane, origRight, options);\n\n    if (options.collapseIdentical) {\n      updating = true;\n      this.editor().operation(function() {\n        collapseIdenticalStretches(self, options.collapseIdentical);\n      });\n      updating = false;\n    }\n    if (options.connect == \"align\") {\n      this.aligners = [];\n      alignChunks(this.left || this.right, true);\n    }\n\n    var onResize = function() {\n      if (left) makeConnections(left);\n      if (right) makeConnections(right);\n    };\n    CodeMirror.on(window, \"resize\", onResize);\n    var resizeInterval = setInterval(function() {\n      for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}\n      if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, \"resize\", onResize); }\n    }, 5000);\n  };\n\n  function buildGap(dv) {\n    var lock = dv.lockButton = elt(\"div\", null, \"CodeMirror-merge-scrolllock\");\n    lock.title = \"Toggle locked scrolling\";\n    var lockWrap = elt(\"div\", [lock], \"CodeMirror-merge-scrolllock-wrap\");\n    CodeMirror.on(lock, \"click\", function() { setScrollLock(dv, !dv.lockScroll); });\n    var gapElts = [lockWrap];\n    if (dv.mv.options.revertButtons !== false) {\n      dv.copyButtons = elt(\"div\", null, \"CodeMirror-merge-copybuttons-\" + dv.type);\n      CodeMirror.on(dv.copyButtons, \"click\", function(e) {\n        var node = e.target || e.srcElement;\n        if (!node.chunk) return;\n        if (node.className == \"CodeMirror-merge-copy-reverse\") {\n          copyChunk(dv, dv.orig, dv.edit, node.chunk);\n          return;\n        }\n        copyChunk(dv, dv.edit, dv.orig, node.chunk);\n      });\n      gapElts.unshift(dv.copyButtons);\n    }\n    if (dv.mv.options.connect != \"align\") {\n      var svg = document.createElementNS && document.createElementNS(svgNS, \"svg\");\n      if (svg && !svg.createSVGRect) svg = null;\n      dv.svg = svg;\n      if (svg) gapElts.push(svg);\n    }\n\n    return dv.gap = elt(\"div\", gapElts, \"CodeMirror-merge-gap\");\n  }\n\n  MergeView.prototype = {\n    constuctor: MergeView,\n    editor: function() { return this.edit; },\n    rightOriginal: function() { return this.right && this.right.orig; },\n    leftOriginal: function() { return this.left && this.left.orig; },\n    setShowDifferences: function(val) {\n      if (this.right) this.right.setShowDifferences(val);\n      if (this.left) this.left.setShowDifferences(val);\n    },\n    rightChunks: function() {\n      if (this.right) { ensureDiff(this.right); return this.right.chunks; }\n    },\n    leftChunks: function() {\n      if (this.left) { ensureDiff(this.left); return this.left.chunks; }\n    }\n  };\n\n  function asString(obj) {\n    if (typeof obj == \"string\") return obj;\n    else return obj.getValue();\n  }\n\n  // Operations on diffs\n\n  var dmp = new diff_match_patch();\n  function getDiff(a, b) {\n    var diff = dmp.diff_main(a, b);\n    dmp.diff_cleanupSemantic(diff);\n    // The library sometimes leaves in empty parts, which confuse the algorithm\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i];\n      if (!part[1]) {\n        diff.splice(i--, 1);\n      } else if (i && diff[i - 1][0] == part[0]) {\n        diff.splice(i--, 1);\n        diff[i][1] += part[1];\n      }\n    }\n    return diff;\n  }\n\n  function getChunks(diff) {\n    var chunks = [];\n    var startEdit = 0, startOrig = 0;\n    var edit = Pos(0, 0), orig = Pos(0, 0);\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0];\n      if (tp == DIFF_EQUAL) {\n        var startOff = startOfLineClean(diff, i) ? 0 : 1;\n        var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;\n        moveOver(edit, part[1], null, orig);\n        var endOff = endOfLineClean(diff, i) ? 1 : 0;\n        var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;\n        if (cleanToEdit > cleanFromEdit) {\n          if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig,\n                              editFrom: startEdit, editTo: cleanFromEdit});\n          startEdit = cleanToEdit; startOrig = cleanToOrig;\n        }\n      } else {\n        moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);\n      }\n    }\n    if (startEdit <= edit.line || startOrig <= orig.line)\n      chunks.push({origFrom: startOrig, origTo: orig.line + 1,\n                   editFrom: startEdit, editTo: edit.line + 1});\n    return chunks;\n  }\n\n  function endOfLineClean(diff, i) {\n    if (i == diff.length - 1) return true;\n    var next = diff[i + 1][1];\n    if (next.length == 1 || next.charCodeAt(0) != 10) return false;\n    if (i == diff.length - 2) return true;\n    next = diff[i + 2][1];\n    return next.length > 1 && next.charCodeAt(0) == 10;\n  }\n\n  function startOfLineClean(diff, i) {\n    if (i == 0) return true;\n    var last = diff[i - 1][1];\n    if (last.charCodeAt(last.length - 1) != 10) return false;\n    if (i == 1) return true;\n    last = diff[i - 2][1];\n    return last.charCodeAt(last.length - 1) == 10;\n  }\n\n  function chunkBoundariesAround(chunks, n, nInEdit) {\n    var beforeE, afterE, beforeO, afterO;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom;\n      var toLocal = nInEdit ? chunk.editTo : chunk.origTo;\n      if (afterE == null) {\n        if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; }\n        else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; }\n      }\n      if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; }\n      else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; }\n    }\n    return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};\n  }\n\n  function collapseSingle(cm, from, to) {\n    cm.addLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    var widget = document.createElement(\"span\");\n    widget.className = \"CodeMirror-merge-collapsed-widget\";\n    widget.title = \"Identical text collapsed. Click to expand.\";\n    var mark = cm.markText(Pos(from, 0), Pos(to - 1), {\n      inclusiveLeft: true,\n      inclusiveRight: true,\n      replacedWith: widget,\n      clearOnEnter: true\n    });\n    function clear() {\n      mark.clear();\n      cm.removeLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    }\n    widget.addEventListener(\"click\", clear);\n    return {mark: mark, clear: clear};\n  }\n\n  function collapseStretch(size, editors) {\n    var marks = [];\n    function clear() {\n      for (var i = 0; i < marks.length; i++) marks[i].clear();\n    }\n    for (var i = 0; i < editors.length; i++) {\n      var editor = editors[i];\n      var mark = collapseSingle(editor.cm, editor.line, editor.line + size);\n      marks.push(mark);\n      mark.mark.on(\"clear\", clear);\n    }\n    return marks[0].mark;\n  }\n\n  function unclearNearChunks(dv, margin, off, clear) {\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var chunk = dv.chunks[i];\n      for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) {\n        var pos = l + off;\n        if (pos >= 0 && pos < clear.length) clear[pos] = false;\n      }\n    }\n  }\n\n  function collapseIdenticalStretches(mv, margin) {\n    if (typeof margin != \"number\") margin = 2;\n    var clear = [], edit = mv.editor(), off = edit.firstLine();\n    for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true);\n    if (mv.left) unclearNearChunks(mv.left, margin, off, clear);\n    if (mv.right) unclearNearChunks(mv.right, margin, off, clear);\n\n    for (var i = 0; i < clear.length; i++) {\n      if (clear[i]) {\n        var line = i + off;\n        for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {}\n        if (size > margin) {\n          var editors = [{line: line, cm: edit}];\n          if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig});\n          if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig});\n          var mark = collapseStretch(size, editors);\n          if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark);\n        }\n      }\n    }\n  }\n\n  // General utilities\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  function clear(node) {\n    for (var count = node.childNodes.length; count > 0; --count)\n      node.removeChild(node.firstChild);\n  }\n\n  function attrs(elt) {\n    for (var i = 1; i < arguments.length; i += 2)\n      elt.setAttribute(arguments[i], arguments[i+1]);\n  }\n\n  function copyObj(obj, target) {\n    if (!target) target = {};\n    for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];\n    return target;\n  }\n\n  function moveOver(pos, str, copy, other) {\n    var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;\n    for (;;) {\n      var nl = str.indexOf(\"\\n\", at);\n      if (nl == -1) break;\n      ++out.line;\n      if (other) ++other.line;\n      at = nl + 1;\n    }\n    out.ch = (at ? 0 : out.ch) + (str.length - at);\n    if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);\n    return out;\n  }\n\n  function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }\n  function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n});"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/CodeMirror/codemirror.js",
    "content": "// CodeMirror version 3.22\n//\n// CodeMirror is the only global var we claim\nwindow.CodeMirror = (function() {\n  \"use strict\";\n\n  // BROWSER SNIFFING\n\n  // Crude, but necessary to handle a number of hard-to-feature-detect\n  // bugs and behavior differences.\n  var gecko = /gecko\\/\\d/i.test(navigator.userAgent);\n  // IE11 currently doesn't count as 'ie', since it has almost none of\n  // the same bugs as earlier versions. Use ie_gt10 to handle\n  // incompatibilities in that version.\n  var old_ie = /MSIE \\d/.test(navigator.userAgent);\n  var ie_lt8 = old_ie && (document.documentMode == null || document.documentMode < 8);\n  var ie_lt9 = old_ie && (document.documentMode == null || document.documentMode < 9);\n  var ie_lt10 = old_ie && (document.documentMode == null || document.documentMode < 10);\n  var ie_gt10 = /Trident\\/([7-9]|\\d{2,})\\./.test(navigator.userAgent);\n  var ie = old_ie || ie_gt10;\n  var webkit = /WebKit\\//.test(navigator.userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(navigator.userAgent);\n  var chrome = /Chrome\\//.test(navigator.userAgent);\n  var opera = /Opera\\//.test(navigator.userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var khtml = /KHTML\\//.test(navigator.userAgent);\n  var mac_geLion = /Mac OS X 1\\d\\D([7-9]|\\d\\d)\\D/.test(navigator.userAgent);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(navigator.userAgent);\n  var phantom = /PhantomJS/.test(navigator.userAgent);\n\n  var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);\n  var mac = ios || /Mac/.test(navigator.platform);\n  var windows = /win/i.test(navigator.platform);\n\n  var opera_version = opera && navigator.userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (opera_version) opera_version = Number(opera_version[1]);\n  if (opera_version && opera_version >= 15) { opera = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));\n  var captureMiddleClick = gecko || (ie && !ie_lt9);\n\n  // Optimize some code when these features are not used\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  // CONSTRUCTOR\n\n  function CodeMirror(place, options) {\n    if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);\n\n    this.options = options = options || {};\n    // Determine effective options based on given values and defaults.\n    for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt))\n      options[opt] = defaults[opt];\n    setGuttersForLineNumbers(options);\n\n    var docStart = typeof options.value == \"string\" ? 0 : options.value.first;\n    var display = this.display = makeDisplay(place, docStart);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    if (options.autofocus && !mobile) focusInput(this);\n\n    this.state = {keyMaps: [],\n                  overlays: [],\n                  modeGen: 0,\n                  overwrite: false, focused: false,\n                  suppressEdits: false,\n                  pasteIncoming: false, cutIncoming: false,\n                  draggingText: false,\n                  highlight: new Delayed()};\n\n    themeChanged(this);\n    if (options.lineWrapping)\n      this.display.wrapper.className += \" CodeMirror-wrap\";\n\n    var doc = options.value;\n    if (typeof doc == \"string\") doc = new Doc(options.value, options.mode);\n    operation(this, attachDoc)(this, doc);\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (old_ie) setTimeout(bind(resetInput, this, true), 20);\n\n    registerEventHandlers(this);\n    // IE throws unspecified error in certain cases, when\n    // trying to access activeElement before onload\n    var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { }\n    if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20);\n    else onBlur(this);\n\n    operation(this, function() {\n      for (var opt in optionHandlers)\n        if (optionHandlers.propertyIsEnumerable(opt))\n          optionHandlers[opt](this, options[opt], Init);\n      for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);\n    })();\n  }\n\n  // DISPLAY CONSTRUCTOR\n\n  function makeDisplay(place, docStart) {\n    var d = {};\n\n    var input = d.input = elt(\"textarea\", null, null, \"position: absolute; padding: 0; width: 1px; height: 1em; outline: none\");\n    if (webkit) input.style.width = \"1000px\";\n    else input.setAttribute(\"wrap\", \"off\");\n    // if border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) input.style.border = \"1px solid black\";\n    input.setAttribute(\"autocorrect\", \"off\"); input.setAttribute(\"autocapitalize\", \"off\"); input.setAttribute(\"spellcheck\", \"false\");\n\n    // Wraps and hides input textarea\n    d.inputDiv = elt(\"div\", [input], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The actual fake scrollbars.\n    d.scrollbarH = elt(\"div\", [elt(\"div\", null, null, \"height: 1px\")], \"CodeMirror-hscrollbar\");\n    d.scrollbarV = elt(\"div\", [elt(\"div\", null, null, \"width: 1px\")], \"CodeMirror-vscrollbar\");\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    // DIVs containing the selection and the actual code\n    d.lineDiv = elt(\"div\", null, \"CodeMirror-code\");\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    // Blinky cursor, and element used to ensure cursor fits at the end of a line\n    d.cursor = elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\");\n    // Secondary cursor, shown when on a 'jump' in bi-directional text\n    d.otherCursor = elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\");\n    // Used to measure text size\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = elt(\"div\", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor],\n                         null, \"position: relative; outline: none\");\n    // Moved around its parent to cover visible view\n    d.mover = elt(\"div\", [elt(\"div\", [d.lineSpace], \"CodeMirror-lines\")], null, \"position: relative\");\n    // Set to the height of the text, causes scrolling\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    // D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerCutOff + \"px; width: 1px;\");\n    // Will contain the gutters, if any\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Provides scrolling\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.inputDiv, d.scrollbarH, d.scrollbarV,\n                            d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n    // Work around IE7 z-index bug\n    if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari\n    if (ios) input.style.width = \"0px\";\n    if (!webkit) d.scroller.draggable = true;\n    // Needed to handle Tab key in KHTML\n    if (khtml) { d.inputDiv.style.height = \"1px\"; d.inputDiv.style.position = \"absolute\"; }\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = \"18px\";\n\n    // Current visible range (may be bigger than the view window).\n    d.viewOffset = d.lastSizeC = 0;\n    d.showingFrom = d.showingTo = docStart;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // See readInput and resetInput\n    d.prevInput = \"\";\n    // Set to true when a non-horizontal-scrolling widget is added. As\n    // an optimization, widget aligning is skipped when d is false.\n    d.alignWidgets = false;\n    // Flag that indicates whether we currently expect input to appear\n    // (after some event like 'keypress' or 'input') and are polling\n    // intensively.\n    d.pollingFast = false;\n    // Self-resetting timeout for the poller\n    d.poll = new Delayed();\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.measureLineCache = [];\n    d.measureLineCachePos = 0;\n\n    // Tracks when resetInput has punted to just putting a short\n    // string instead of the (large) selection.\n    d.inaccurateSelection = false;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    return d;\n  }\n\n  // STATE UPDATES\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function(line) {\n      if (line.stateAfter) line.stateAfter = null;\n      if (line.styles) line.styles = null;\n    });\n    cm.doc.frontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) regChange(cm);\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      cm.display.wrapper.className += \" CodeMirror-wrap\";\n      cm.display.sizer.style.minWidth = \"\";\n    } else {\n      cm.display.wrapper.className = cm.display.wrapper.className.replace(\" CodeMirror-wrap\", \"\");\n      computeMaxLength(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function(){updateScrollbars(cm);}, 100);\n  }\n\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function(line) {\n      if (lineIsHidden(cm.doc, line))\n        return 0;\n      else if (wrapping)\n        return (Math.ceil(line.text.length / perLine) || 1) * th;\n      else\n        return th;\n    };\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function(line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) updateLineHeight(line, estHeight);\n    });\n  }\n\n  function keyMapChanged(cm) {\n    var map = keyMap[cm.options.keyMap], style = map.style;\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-keymap-\\S+/g, \"\") +\n      (style ? \" cm-keymap-\" + style : \"\");\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  function guttersChanged(cm) {\n    updateGutters(cm);\n    regChange(cm);\n    setTimeout(function(){alignHorizontally(cm);}, 20);\n  }\n\n  function updateGutters(cm) {\n    var gutters = cm.display.gutters, specs = cm.options.gutters;\n    removeChildren(gutters);\n    for (var i = 0; i < specs.length; ++i) {\n      var gutterClass = specs[i];\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n      if (gutterClass == \"CodeMirror-linenumbers\") {\n        cm.display.lineGutter = gElt;\n        gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = i ? \"\" : \"none\";\n  }\n\n  function lineLength(doc, line) {\n    if (line.height == 0) return 0;\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find();\n      cur = getLine(doc, found.from.line);\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found = merged.find();\n      len -= cur.text.length - found.from.ch;\n      cur = getLine(doc, found.to.line);\n      len += cur.text.length - found.to.ch;\n    }\n    return len;\n  }\n\n  function computeMaxLength(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(doc, d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function(line) {\n      var len = lineLength(doc, line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // Make sure the gutters options contains the element\n  // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n  function setGuttersForLineNumbers(options) {\n    var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n    if (found == -1 && options.lineNumbers) {\n      options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n    } else if (found > -1 && !options.lineNumbers) {\n      options.gutters = options.gutters.slice(0);\n      options.gutters.splice(found, 1);\n    }\n  }\n\n  // SCROLLBARS\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content. Optionally force a scrollTop.\n  function updateScrollbars(cm) {\n    var d = cm.display, docHeight = cm.doc.height;\n    var totalHeight = docHeight + paddingVert(d);\n    d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + \"px\";\n    d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + \"px\";\n    var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight);\n    var needsH = d.scroller.scrollWidth > (d.scroller.clientWidth + 1);\n    var needsV = scrollHeight > (d.scroller.clientHeight + 1);\n    if (needsV) {\n      d.scrollbarV.style.display = \"block\";\n      d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + \"px\" : \"0\";\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      d.scrollbarV.firstChild.style.height =\n        Math.max(0, scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + \"px\";\n    } else {\n      d.scrollbarV.style.display = \"\";\n      d.scrollbarV.firstChild.style.height = \"0\";\n    }\n    if (needsH) {\n      d.scrollbarH.style.display = \"block\";\n      d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + \"px\" : \"0\";\n      d.scrollbarH.firstChild.style.width =\n        (d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + \"px\";\n    } else {\n      d.scrollbarH.style.display = \"\";\n      d.scrollbarH.firstChild.style.width = \"0\";\n    }\n    if (needsH && needsV) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + \"px\";\n    } else d.scrollbarFiller.style.display = \"\";\n    if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = scrollbarWidth(d.measure) + \"px\";\n      d.gutterFiller.style.width = d.gutters.offsetWidth + \"px\";\n    } else d.gutterFiller.style.display = \"\";\n\n    if (mac_geLion && scrollbarWidth(d.measure) === 0) {\n      d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? \"18px\" : \"12px\";\n      d.scrollbarV.style.pointerEvents = d.scrollbarH.style.pointerEvents = \"none\";\n    }\n  }\n\n  function visibleLines(display, doc, viewPort) {\n    var top = display.scroller.scrollTop, height = display.wrapper.clientHeight;\n    if (typeof viewPort == \"number\") top = viewPort;\n    else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;}\n    top = Math.floor(top - paddingTop(display));\n    var bottom = Math.ceil(top + height);\n    return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)};\n  }\n\n  // LINE NUMBERS\n\n  function alignHorizontally(cm) {\n    var display = cm.display;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, l = comp + \"px\";\n    for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) {\n      for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l;\n    }\n    if (cm.options.fixedGutter)\n      display.gutters.style.left = (comp + gutterW) + \"px\";\n  }\n\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) return false;\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      return true;\n    }\n    return false;\n  }\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber));\n  }\n  function compensateForHScroll(display) {\n    return getRect(display.scroller).left - getRect(display.sizer).left;\n  }\n\n  // DISPLAY DRAWING\n\n  function updateDisplay(cm, changes, viewPort, forced) {\n    var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated;\n    var visible = visibleLines(cm.display, cm.doc, viewPort);\n    for (var first = true;; first = false) {\n      var oldWidth = cm.display.scroller.clientWidth;\n      if (!updateDisplayInner(cm, changes, visible, forced)) break;\n      updated = true;\n      changes = [];\n      updateSelection(cm);\n      updateScrollbars(cm);\n      if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {\n        forced = true;\n        continue;\n      }\n      forced = false;\n\n      // Clip forced viewport to actual scrollable area\n      if (viewPort)\n        viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight,\n                            typeof viewPort == \"number\" ? viewPort : viewPort.top);\n      visible = visibleLines(cm.display, cm.doc, viewPort);\n      if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo)\n        break;\n    }\n\n    if (updated) {\n      signalLater(cm, \"update\", cm);\n      if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo)\n        signalLater(cm, \"viewportChange\", cm, cm.display.showingFrom, cm.display.showingTo);\n    }\n    return updated;\n  }\n\n  // Uses a set of changes plus the current scroll position to\n  // determine which DOM updates have to be made, and makes the\n  // updates.\n  function updateDisplayInner(cm, changes, visible, forced) {\n    var display = cm.display, doc = cm.doc;\n    if (!display.wrapper.offsetWidth) {\n      display.showingFrom = display.showingTo = doc.first;\n      display.viewOffset = 0;\n      return;\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!forced && changes.length == 0 &&\n        visible.from > display.showingFrom && visible.to < display.showingTo)\n      return;\n\n    if (maybeUpdateLineNumberWidth(cm))\n      changes = [{from: doc.first, to: doc.first + doc.size}];\n    var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + \"px\";\n    display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : \"0\";\n\n    // Used to determine which lines need their line numbers updated\n    var positionsChangedFrom = Infinity;\n    if (cm.options.lineNumbers)\n      for (var i = 0; i < changes.length; ++i)\n        if (changes[i].diff && changes[i].from < positionsChangedFrom) { positionsChangedFrom = changes[i].from; }\n\n    var end = doc.first + doc.size;\n    var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, visible.to + cm.options.viewportMargin);\n    if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom);\n    if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo);\n    if (sawCollapsedSpans) {\n      from = lineNo(visualLine(doc, getLine(doc, from)));\n      while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to;\n    }\n\n    // Create a range of theoretically intact lines, and punch holes\n    // in that using the change info.\n    var intact = [{from: Math.max(display.showingFrom, doc.first),\n                   to: Math.min(display.showingTo, end)}];\n    if (intact[0].from >= intact[0].to) intact = [];\n    else intact = computeIntact(intact, changes);\n    // When merged lines are present, we might have to reduce the\n    // intact ranges because changes in continued fragments of the\n    // intact lines do require the lines to be redrawn.\n    if (sawCollapsedSpans)\n      for (var i = 0; i < intact.length; ++i) {\n        var range = intact[i], merged;\n        while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) {\n          var newTo = merged.find().from.line;\n          if (newTo > range.from) range.to = newTo;\n          else { intact.splice(i--, 1); break; }\n        }\n      }\n\n    // Clip off the parts that won't be visible\n    var intactLines = 0;\n    for (var i = 0; i < intact.length; ++i) {\n      var range = intact[i];\n      if (range.from < from) range.from = from;\n      if (range.to > to) range.to = to;\n      if (range.from >= range.to) intact.splice(i--, 1);\n      else intactLines += range.to - range.from;\n    }\n    if (!forced && intactLines == to - from && from == display.showingFrom && to == display.showingTo) {\n      updateViewOffset(cm);\n      return;\n    }\n    intact.sort(function(a, b) {return a.from - b.from;});\n\n    // Avoid crashing on IE's \"unspecified error\" when in iframes\n    try {\n      var focused = document.activeElement;\n    } catch(e) {}\n    if (intactLines < (to - from) * .7) display.lineDiv.style.display = \"none\";\n    patchDisplay(cm, from, to, intact, positionsChangedFrom);\n    display.lineDiv.style.display = \"\";\n    if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus();\n\n    var different = from != display.showingFrom || to != display.showingTo ||\n      display.lastSizeC != display.wrapper.clientHeight;\n    // This is just a bogus formula that detects when the editor is\n    // resized or the font size changes.\n    if (different) {\n      display.lastSizeC = display.wrapper.clientHeight;\n      startWorker(cm, 400);\n    }\n    display.showingFrom = from; display.showingTo = to;\n\n    display.gutters.style.height = \"\";\n    updateHeightsInViewport(cm);\n    updateViewOffset(cm);\n\n    return true;\n  }\n\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) {\n      if (ie_lt8) {\n        var bot = node.offsetTop + node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = getRect(node);\n        height = box.bottom - box.top;\n      }\n      var diff = node.lineObj.height - height;\n      if (height < 2) height = textHeight(display);\n      if (diff > .001 || diff < -.001) {\n        updateLineHeight(node.lineObj, height);\n        var widgets = node.lineObj.widgets;\n        if (widgets) for (var i = 0; i < widgets.length; ++i)\n          widgets[i].height = widgets[i].node.offsetHeight;\n      }\n    }\n  }\n\n  function updateViewOffset(cm) {\n    var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom));\n    // Position the mover div to align with the current virtual scroll position\n    cm.display.mover.style.top = off + \"px\";\n  }\n\n  function computeIntact(intact, changes) {\n    for (var i = 0, l = changes.length || 0; i < l; ++i) {\n      var change = changes[i], intact2 = [], diff = change.diff || 0;\n      for (var j = 0, l2 = intact.length; j < l2; ++j) {\n        var range = intact[j];\n        if (change.to <= range.from && change.diff) {\n          intact2.push({from: range.from + diff, to: range.to + diff});\n        } else if (change.to <= range.from || change.from >= range.to) {\n          intact2.push(range);\n        } else {\n          if (change.from > range.from)\n            intact2.push({from: range.from, to: change.from});\n          if (change.to < range.to)\n            intact2.push({from: change.to + diff, to: range.to + diff});\n        }\n      }\n      intact = intact2;\n    }\n    return intact;\n  }\n\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft;\n      width[cm.options.gutters[i]] = n.offsetWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth};\n  }\n\n  function patchDisplay(cm, from, to, intact, updateNumbersFrom) {\n    var dims = getDimensions(cm);\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    if (!intact.length && (!webkit || !cm.display.currentWheelTarget))\n      removeChildren(display.lineDiv);\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      if (webkit && mac && cm.display.currentWheelTarget == node) {\n        node.style.display = \"none\";\n        node.lineObj = null;\n      } else {\n        node.parentNode.removeChild(node);\n      }\n      return next;\n    }\n\n    var nextIntact = intact.shift(), lineN = from;\n    cm.doc.iter(from, to, function(line) {\n      if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift();\n      if (lineIsHidden(cm.doc, line)) {\n        if (line.height != 0) updateLineHeight(line, 0);\n        if (line.widgets && cur && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {\n          var w = line.widgets[i];\n          if (w.showIfHidden) {\n            var prev = cur.previousSibling;\n            if (/pre/i.test(prev.nodeName)) {\n              var wrap = elt(\"div\", null, null, \"position: relative\");\n              prev.parentNode.replaceChild(wrap, prev);\n              wrap.appendChild(prev);\n              prev = wrap;\n            }\n            var wnode = prev.appendChild(elt(\"div\", [w.node], \"CodeMirror-linewidget\"));\n            if (!w.handleMouseEvents) wnode.ignoreEvents = true;\n            positionLineWidget(w, wnode, prev, dims);\n          }\n        }\n      } else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) {\n        // This line is intact. Skip to the actual node. Update its\n        // line number if needed.\n        while (cur.lineObj != line) cur = rm(cur);\n        if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber)\n          setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN));\n        cur = cur.nextSibling;\n      } else {\n        // For lines with widgets, make an attempt to find and reuse\n        // the existing element, so that widgets aren't needlessly\n        // removed and re-inserted into the dom\n        if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling)\n          if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; }\n        // This line needs to be generated.\n        var lineNode = buildLineElement(cm, line, lineN, dims, reuse);\n        if (lineNode != reuse) {\n          container.insertBefore(lineNode, cur);\n        } else {\n          while (cur != reuse) cur = rm(cur);\n          cur = cur.nextSibling;\n        }\n\n        lineNode.lineObj = line;\n      }\n      ++lineN;\n    });\n    while (cur) cur = rm(cur);\n  }\n\n  function buildLineElement(cm, line, lineNo, dims, reuse) {\n    var built = buildLineContent(cm, line), lineElement = built.pre;\n    var markers = line.gutterMarkers, display = cm.display, wrap;\n\n    var bgClass = built.bgClass ? built.bgClass + \" \" + (line.bgClass || \"\") : line.bgClass;\n    if (!cm.options.lineNumbers && !markers && !bgClass && !line.wrapClass && !line.widgets)\n      return lineElement;\n\n    // Lines with gutter elements, widgets or a background class need\n    // to be wrapped again, and have the extra elements added to the\n    // wrapper div\n\n    if (reuse) {\n      reuse.alignable = null;\n      var isOk = true, widgetsSeen = 0, insertBefore = null;\n      for (var n = reuse.firstChild, next; n; n = next) {\n        next = n.nextSibling;\n        if (!/\\bCodeMirror-linewidget\\b/.test(n.className)) {\n          reuse.removeChild(n);\n        } else {\n          for (var i = 0; i < line.widgets.length; ++i) {\n            var widget = line.widgets[i];\n            if (widget.node == n.firstChild) {\n              if (!widget.above && !insertBefore) insertBefore = n;\n              positionLineWidget(widget, n, reuse, dims);\n              ++widgetsSeen;\n              break;\n            }\n          }\n          if (i == line.widgets.length) { isOk = false; break; }\n        }\n      }\n      reuse.insertBefore(lineElement, insertBefore);\n      if (isOk && widgetsSeen == line.widgets.length) {\n        wrap = reuse;\n        reuse.className = line.wrapClass || \"\";\n      }\n    }\n    if (!wrap) {\n      wrap = elt(\"div\", null, line.wrapClass, \"position: relative\");\n      wrap.appendChild(lineElement);\n    }\n    // Kludge to make sure the styled element lies behind the selection (by z-index)\n    if (bgClass)\n      wrap.insertBefore(elt(\"div\", null, bgClass + \" CodeMirror-linebackground\"), wrap.firstChild);\n    if (cm.options.lineNumbers || markers) {\n      var gutterWrap = wrap.insertBefore(elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"position: absolute; left: \" +\n                                             (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"),\n                                         lineElement);\n      if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        wrap.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineNo),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \"\n              + display.lineNumInnerWidth + \"px\"));\n      if (markers)\n        for (var k = 0; k < cm.options.gutters.length; ++k) {\n          var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n          if (found)\n            gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" +\n                                       dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n        }\n    }\n    if (ie_lt8) wrap.style.zIndex = 2;\n    if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n      if (!widget.handleMouseEvents) node.ignoreEvents = true;\n      positionLineWidget(widget, node, wrap, dims);\n      if (widget.above)\n        wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement);\n      else\n        wrap.appendChild(node);\n      signalLater(widget, \"redraw\");\n    }\n    return wrap;\n  }\n\n  function positionLineWidget(widget, node, wrap, dims) {\n    if (widget.noHScroll) {\n      (wrap.alignable || (wrap.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n    }\n  }\n\n  // SELECTION / CURSOR\n\n  function updateSelection(cm) {\n    var display = cm.display;\n    var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to);\n    if (collapsed || cm.options.showCursorWhenSelecting)\n      updateSelectionCursor(cm);\n    else\n      display.cursor.style.display = display.otherCursor.style.display = \"none\";\n    if (!collapsed)\n      updateSelectionRange(cm);\n    else\n      display.selectionDiv.style.display = \"none\";\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, cm.doc.sel.head, \"div\");\n      var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv);\n      display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                                        headPos.top + lineOff.top - wrapOff.top)) + \"px\";\n      display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                                         headPos.left + lineOff.left - wrapOff.left)) + \"px\";\n    }\n  }\n\n  // No selection, plain cursor\n  function updateSelectionCursor(cm) {\n    var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, \"div\");\n    display.cursor.style.left = pos.left + \"px\";\n    display.cursor.style.top = pos.top + \"px\";\n    display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n    display.cursor.style.display = \"\";\n\n    if (pos.other) {\n      display.otherCursor.style.display = \"\";\n      display.otherCursor.style.left = pos.other.left + \"px\";\n      display.otherCursor.style.top = pos.other.top + \"px\";\n      display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    } else { display.otherCursor.style.display = \"none\"; }\n  }\n\n  // Highlight selection\n  function updateSelectionRange(cm) {\n    var display = cm.display, doc = cm.doc, sel = cm.doc.sel;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right;\n\n    function add(left, top, width, bottom) {\n      if (top < 0) top = 0;\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left +\n                               \"px; top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) +\n                               \"px; height: \" + (bottom - top) + \"px\"));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n      }\n\n      iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {\n        var leftPos = coords(from, \"left\"), rightPos, left, right;\n        if (from == to) {\n          rightPos = leftPos;\n          left = right = leftPos.left;\n        } else {\n          rightPos = coords(to - 1, \"right\");\n          if (dir == \"rtl\") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }\n          left = leftPos.left;\n          right = rightPos.right;\n        }\n        if (fromArg == null && from == 0) left = leftSide;\n        if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part\n          add(left, leftPos.top, null, leftPos.bottom);\n          left = leftSide;\n          if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);\n        }\n        if (toArg == null && to == lineLen) right = rightSide;\n        if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)\n          start = leftPos;\n        if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)\n          end = rightPos;\n        if (left < leftSide + 1) left = leftSide;\n        add(left, rightPos.top, right - left, rightPos.bottom);\n      });\n      return {start: start, end: end};\n    }\n\n    if (sel.from.line == sel.to.line) {\n      drawForLine(sel.from.line, sel.from.ch, sel.to.ch);\n    } else {\n      var fromLine = getLine(doc, sel.from.line), toLine = getLine(doc, sel.to.line);\n      var singleVLine = visualLine(doc, fromLine) == visualLine(doc, toLine);\n      var leftEnd = drawForLine(sel.from.line, sel.from.ch, singleVLine ? fromLine.text.length : null).end;\n      var rightStart = drawForLine(sel.to.line, singleVLine ? 0 : null, sel.to.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        add(leftSide, leftEnd.bottom, null, rightStart.top);\n    }\n\n    removeChildrenAndAdd(display.selectionDiv, fragment);\n    display.selectionDiv.style.display = \"\";\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) return;\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursor.style.visibility = display.otherCursor.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      display.blinker = setInterval(function() {\n        display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate);\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo)\n      cm.state.highlight.set(time, bind(highlightWorker, cm));\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.frontier < doc.first) doc.frontier = doc.first;\n    if (doc.frontier >= cm.display.showingTo) return;\n    var end = +new Date + cm.options.workTime;\n    var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));\n    var changed = [], prevChange;\n    doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) {\n      if (doc.frontier >= cm.display.showingFrom) { // Visible\n        var oldStyles = line.styles;\n        line.styles = highlightLine(cm, line, state, true);\n        var ischange = !oldStyles || oldStyles.length != line.styles.length;\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];\n        if (ischange) {\n          if (prevChange && prevChange.end == doc.frontier) prevChange.end++;\n          else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1});\n        }\n        line.stateAfter = copyState(doc.mode, state);\n      } else {\n        processLine(cm, line.text, state);\n        line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;\n      }\n      ++doc.frontier;\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true;\n      }\n    });\n    if (changed.length)\n      operation(cm, function() {\n        for (var i = 0; i < changed.length; ++i)\n          regChange(this, changed[i].start, changed[i].end);\n      })();\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) return doc.first;\n      var line = getLine(doc, search - 1);\n      if (line.stateAfter && (!precise || search <= doc.frontier)) return search;\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline;\n  }\n\n  function getStateBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) return true;\n    var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;\n    if (!state) state = startState(doc.mode);\n    else state = copyState(doc.mode, state);\n    doc.iter(pos, n, function(line) {\n      processLine(cm, line.text, state);\n      var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo;\n      line.stateAfter = save ? copyState(doc.mode, state) : null;\n      ++pos;\n    });\n    if (precise) doc.frontier = pos;\n    return state;\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop;}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}\n  function paddingH(display) {\n    if (display.cachedPaddingH) return display.cachedPaddingH;\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    return display.cachedPaddingH = {left: parseInt(style.paddingLeft),\n                                     right: parseInt(style.paddingRight)};\n  }\n\n  function measureChar(cm, line, ch, data, bias) {\n    var dir = -1;\n    data = data || measureLine(cm, line);\n    if (data.crude) {\n      var left = data.left + ch * data.width;\n      return {left: left, right: left + data.width, top: data.top, bottom: data.bottom};\n    }\n\n    for (var pos = ch;; pos += dir) {\n      var r = data[pos];\n      if (r) break;\n      if (dir < 0 && pos == 0) dir = 1;\n    }\n    bias = pos > ch ? \"left\" : pos < ch ? \"right\" : bias;\n    if (bias == \"left\" && r.leftSide) r = r.leftSide;\n    else if (bias == \"right\" && r.rightSide) r = r.rightSide;\n    return {left: pos < ch ? r.right : r.left,\n            right: pos > ch ? r.left : r.right,\n            top: r.top,\n            bottom: r.bottom};\n  }\n\n  function findCachedMeasurement(cm, line) {\n    var cache = cm.display.measureLineCache;\n    for (var i = 0; i < cache.length; ++i) {\n      var memo = cache[i];\n      if (memo.text == line.text && memo.markedSpans == line.markedSpans &&\n          cm.display.scroller.clientWidth == memo.width &&\n          memo.classes == line.textClass + \"|\" + line.wrapClass)\n        return memo;\n    }\n  }\n\n  function clearCachedMeasurement(cm, line) {\n    var exists = findCachedMeasurement(cm, line);\n    if (exists) exists.text = exists.measure = exists.markedSpans = null;\n  }\n\n  function measureLine(cm, line) {\n    // First look in the cache\n    var cached = findCachedMeasurement(cm, line);\n    if (cached) return cached.measure;\n\n    // Failing that, recompute and store result in cache\n    var measure = measureLineInner(cm, line);\n    var cache = cm.display.measureLineCache;\n    var memo = {text: line.text, width: cm.display.scroller.clientWidth,\n                markedSpans: line.markedSpans, measure: measure,\n                classes: line.textClass + \"|\" + line.wrapClass};\n    if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;\n    else cache.push(memo);\n    return measure;\n  }\n\n  function measureLineInner(cm, line) {\n    if (!cm.options.lineWrapping && line.text.length >= cm.options.crudeMeasuringFrom)\n      return crudelyMeasureLine(cm, line);\n\n    var display = cm.display, measure = emptyArray(line.text.length);\n    var pre = buildLineContent(cm, line, measure, true).pre;\n\n    // IE does not cache element positions of inline elements between\n    // calls to getBoundingClientRect. This makes the loop below,\n    // which gathers the positions of all the characters on the line,\n    // do an amount of layout work quadratic to the number of\n    // characters. When line wrapping is off, we try to improve things\n    // by first subdividing the line into a bunch of inline blocks, so\n    // that IE can reuse most of the layout information from caches\n    // for those blocks. This does interfere with line wrapping, so it\n    // doesn't work when wrapping is on, but in that case the\n    // situation is slightly better, since IE does cache line-wrapping\n    // information and only recomputes per-line.\n    if (old_ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {\n      var fragment = document.createDocumentFragment();\n      var chunk = 10, n = pre.childNodes.length;\n      for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) {\n        var wrap = elt(\"div\", null, null, \"display: inline-block\");\n        for (var j = 0; j < chunk && n; ++j) {\n          wrap.appendChild(pre.firstChild);\n          --n;\n        }\n        fragment.appendChild(wrap);\n      }\n      pre.appendChild(fragment);\n    }\n\n    removeChildrenAndAdd(display.measure, pre);\n\n    var outer = getRect(display.lineDiv);\n    var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight;\n    // Work around an IE7/8 bug where it will sometimes have randomly\n    // replaced our pre with a clone at this point.\n    if (ie_lt9 && display.measure.first != pre)\n      removeChildrenAndAdd(display.measure, pre);\n\n    function measureRect(rect) {\n      var top = rect.top - outer.top, bot = rect.bottom - outer.top;\n      if (bot > maxBot) bot = maxBot;\n      if (top < 0) top = 0;\n      for (var i = vranges.length - 2; i >= 0; i -= 2) {\n        var rtop = vranges[i], rbot = vranges[i+1];\n        if (rtop > bot || rbot < top) continue;\n        if (rtop <= top && rbot >= bot ||\n            top <= rtop && bot >= rbot ||\n            Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) {\n          vranges[i] = Math.min(top, rtop);\n          vranges[i+1] = Math.max(bot, rbot);\n          break;\n        }\n      }\n      if (i < 0) { i = vranges.length; vranges.push(top, bot); }\n      return {left: rect.left - outer.left,\n              right: rect.right - outer.left,\n              top: i, bottom: null};\n    }\n    function finishRect(rect) {\n      rect.bottom = vranges[rect.top+1];\n      rect.top = vranges[rect.top];\n    }\n\n    for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) {\n      var node = cur, rect = null;\n      // A widget might wrap, needs special care\n      if (/\\bCodeMirror-widget\\b/.test(cur.className) && cur.getClientRects) {\n        if (cur.firstChild.nodeType == 1) node = cur.firstChild;\n        var rects = node.getClientRects();\n        if (rects.length > 1) {\n          rect = data[i] = measureRect(rects[0]);\n          rect.rightSide = measureRect(rects[rects.length - 1]);\n        }\n      }\n      if (!rect) rect = data[i] = measureRect(getRect(node));\n      if (cur.measureRight) rect.right = getRect(cur.measureRight).left - outer.left;\n      if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));\n    }\n    removeChildren(cm.display.measure);\n    for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) {\n      finishRect(cur);\n      if (cur.leftSide) finishRect(cur.leftSide);\n      if (cur.rightSide) finishRect(cur.rightSide);\n    }\n    return data;\n  }\n\n  function crudelyMeasureLine(cm, line) {\n    var copy = new Line(line.text.slice(0, 100), null);\n    if (line.textClass) copy.textClass = line.textClass;\n    var measure = measureLineInner(cm, copy);\n    var left = measureChar(cm, copy, 0, measure, \"left\");\n    var right = measureChar(cm, copy, 99, measure, \"right\");\n    return {crude: true, top: left.top, left: left.left, bottom: left.bottom, width: (right.right - left.left) / 100};\n  }\n\n  function measureLineWidth(cm, line) {\n    var hasBadSpan = false;\n    if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) {\n      var sp = line.markedSpans[i];\n      if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true;\n    }\n    var cached = !hasBadSpan && findCachedMeasurement(cm, line);\n    if (cached || line.text.length >= cm.options.crudeMeasuringFrom)\n      return measureChar(cm, line, line.text.length, cached && cached.measure, \"right\").right;\n\n    var pre = buildLineContent(cm, line, null, true).pre;\n    var end = pre.appendChild(zeroWidthElement(cm.display.measure));\n    removeChildrenAndAdd(cm.display.measure, pre);\n    return getRect(end).right - getRect(cm.display.lineDiv).left;\n  }\n\n  function clearCaches(cm) {\n    cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0;\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }\n  function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }\n\n  // Context is one of \"line\", \"div\" (display.lineDiv), \"local\"/null (editor), or \"page\"\n  function intoCoordSystem(cm, lineObj, rect, context) {\n    if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {\n      var size = widgetHeight(lineObj.widgets[i]);\n      rect.top += size; rect.bottom += size;\n    }\n    if (context == \"line\") return rect;\n    if (!context) context = \"local\";\n    var yOff = heightAtLine(cm, lineObj);\n    if (context == \"local\") yOff += paddingTop(cm.display);\n    else yOff -= cm.display.viewOffset;\n    if (context == \"page\" || context == \"window\") {\n      var lOff = getRect(cm.display.lineSpace);\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect;\n  }\n\n  // Context may be \"window\", \"page\", \"div\", or \"local\"/null\n  // Result is in \"div\" coords\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") return coords;\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = getRect(cm.display.sizer);\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = getRect(cm.display.lineSpace);\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) lineObj = getLine(cm.doc, pos.line);\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, null, bias), context);\n  }\n\n  function cursorCoords(cm, pos, context, lineObj, measurement) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!measurement) measurement = measureLine(cm, lineObj);\n    function get(ch, right) {\n      var m = measureChar(cm, lineObj, ch, measurement, right ? \"right\" : \"left\");\n      if (right) m.left = m.right; else m.right = m.left;\n      return intoCoordSystem(cm, lineObj, m, context);\n    }\n    function getBidi(ch, partPos) {\n      var part = order[partPos], right = part.level % 2;\n      if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {\n        part = order[--partPos];\n        ch = bidiRight(part) - (part.level % 2 ? 0 : 1);\n        right = true;\n      } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {\n        part = order[++partPos];\n        ch = bidiLeft(part) - part.level % 2;\n        right = false;\n      }\n      if (right && ch == part.to && ch > part.from) return get(ch - 1);\n      return get(ch, right);\n    }\n    var order = getOrder(lineObj), ch = pos.ch;\n    if (!order) return get(ch);\n    var partPos = getBidiPartAt(order, ch);\n    var val = getBidi(ch, partPos);\n    if (bidiOther != null) val.other = getBidi(ch, bidiOther);\n    return val;\n  }\n\n  function PosWithInfo(line, ch, outside, xRel) {\n    var pos = new Pos(line, ch);\n    pos.xRel = xRel;\n    if (outside) pos.outside = true;\n    return pos;\n  }\n\n  // Coords must be lineSpace-local\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) return PosWithInfo(doc.first, 0, true, -1);\n    var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineNo > last)\n      return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);\n    if (x < 0) x = 0;\n\n    for (;;) {\n      var lineObj = getLine(doc, lineNo);\n      var found = coordsCharInner(cm, lineObj, lineNo, x, y);\n      var merged = collapsedSpanAtEnd(lineObj);\n      var mergedPos = merged && merged.find();\n      if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n        lineNo = mergedPos.to.line;\n      else\n        return found;\n    }\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    var innerOff = y - heightAtLine(cm, lineObj);\n    var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;\n    var measurement = measureLine(cm, lineObj);\n\n    function getX(ch) {\n      var sp = cursorCoords(cm, Pos(lineNo, ch), \"line\",\n                            lineObj, measurement);\n      wrongLine = true;\n      if (innerOff > sp.bottom) return sp.left - adjust;\n      else if (innerOff < sp.top) return sp.left + adjust;\n      else wrongLine = false;\n      return sp.left;\n    }\n\n    var bidi = getOrder(lineObj), dist = lineObj.text.length;\n    var from = lineLeft(lineObj), to = lineRight(lineObj);\n    var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;\n\n    if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);\n    // Do a binary search between these bounds.\n    for (;;) {\n      if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {\n        var ch = x < fromX || x - fromX <= toX - x ? from : to;\n        var xDiff = x - (ch == from ? fromX : toX);\n        while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;\n        var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,\n                              xDiff < 0 ? -1 : xDiff ? 1 : 0);\n        return pos;\n      }\n      var step = Math.ceil(dist / 2), middle = from + step;\n      if (bidi) {\n        middle = from;\n        for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);\n      }\n      var middleX = getX(middle);\n      if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}\n      else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}\n    }\n  }\n\n  var measureText;\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) return display.cachedTextHeight;\n    if (measureText == null) {\n      measureText = elt(\"pre\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) display.cachedTextHeight = height;\n    removeChildren(display.measure);\n    return height || 1;\n  }\n\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) return display.cachedCharWidth;\n    var anchor = elt(\"span\", \"x\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var width = anchor.offsetWidth;\n    if (width > 2) display.cachedCharWidth = width;\n    return width || 10;\n  }\n\n  // OPERATIONS\n\n  // Operations are used to wrap changes in such a way that each\n  // change won't have to update the cursor and display (which would\n  // be awkward, slow, and error-prone), but instead updates are\n  // batched and then all combined and executed at once.\n\n  var nextOpId = 0;\n  function startOperation(cm) {\n    cm.curOp = {\n      // An array of ranges of lines that have to be updated. See\n      // updateDisplay.\n      changes: [],\n      forceUpdate: false,\n      updateInput: null,\n      userSelChange: null,\n      textChanged: null,\n      selectionChanged: false,\n      cursorActivity: false,\n      updateMaxLine: false,\n      updateScrollPos: false,\n      id: ++nextOpId\n    };\n    if (!delayedCallbackDepth++) delayedCallbacks = [];\n  }\n\n  function endOperation(cm) {\n    var op = cm.curOp, doc = cm.doc, display = cm.display;\n    cm.curOp = null;\n\n    if (op.updateMaxLine) computeMaxLength(cm);\n    if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) {\n      var width = measureLineWidth(cm, display.maxLine);\n      display.sizer.style.minWidth = Math.max(0, width + 3) + \"px\";\n      display.maxLineChanged = false;\n      var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth);\n      if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos)\n        setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);\n    }\n    var newScrollPos, updated;\n    if (op.updateScrollPos) {\n      newScrollPos = op.updateScrollPos;\n    } else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible\n      var coords = cursorCoords(cm, doc.sel.head);\n      newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom);\n    }\n    if (op.changes.length || op.forceUpdate || newScrollPos && newScrollPos.scrollTop != null) {\n      updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop, op.forceUpdate);\n      if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop;\n    }\n    if (!updated && op.selectionChanged) updateSelection(cm);\n    if (op.updateScrollPos) {\n      var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, newScrollPos.scrollTop));\n      var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, newScrollPos.scrollLeft));\n      display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top;\n      display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left;\n      alignHorizontally(cm);\n      if (op.scrollToPos)\n        scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos.from),\n                          clipPos(cm.doc, op.scrollToPos.to), op.scrollToPos.margin);\n    } else if (newScrollPos) {\n      scrollCursorIntoView(cm);\n    }\n    if (op.selectionChanged) restartBlink(cm);\n\n    if (cm.state.focused && op.updateInput)\n      resetInput(cm, op.userSelChange);\n\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) for (var i = 0; i < hidden.length; ++i)\n      if (!hidden[i].lines.length) signal(hidden[i], \"hide\");\n    if (unhidden) for (var i = 0; i < unhidden.length; ++i)\n      if (unhidden[i].lines.length) signal(unhidden[i], \"unhide\");\n\n    var delayed;\n    if (!--delayedCallbackDepth) {\n      delayed = delayedCallbacks;\n      delayedCallbacks = null;\n    }\n    if (op.textChanged)\n      signal(cm, \"change\", cm, op.textChanged);\n    if (op.cursorActivity) signal(cm, \"cursorActivity\", cm);\n    if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i]();\n  }\n\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm1, f) {\n    return function() {\n      var cm = cm1 || this, withOp = !cm.curOp;\n      if (withOp) startOperation(cm);\n      try { var result = f.apply(cm, arguments); }\n      finally { if (withOp) endOperation(cm); }\n      return result;\n    };\n  }\n  function docOperation(f) {\n    return function() {\n      var withOp = this.cm && !this.cm.curOp, result;\n      if (withOp) startOperation(this.cm);\n      try { result = f.apply(this, arguments); }\n      finally { if (withOp) endOperation(this.cm); }\n      return result;\n    };\n  }\n  function runInOp(cm, f) {\n    var withOp = !cm.curOp, result;\n    if (withOp) startOperation(cm);\n    try { result = f(); }\n    finally { if (withOp) endOperation(cm); }\n    return result;\n  }\n\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) from = cm.doc.first;\n    if (to == null) to = cm.doc.first + cm.doc.size;\n    cm.curOp.changes.push({from: from, to: to, diff: lendiff});\n  }\n\n  // INPUT HANDLING\n\n  function slowPoll(cm) {\n    if (cm.display.pollingFast) return;\n    cm.display.poll.set(cm.options.pollInterval, function() {\n      readInput(cm);\n      if (cm.state.focused) slowPoll(cm);\n    });\n  }\n\n  function fastPoll(cm) {\n    var missed = false;\n    cm.display.pollingFast = true;\n    function p() {\n      var changed = readInput(cm);\n      if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}\n      else {cm.display.pollingFast = false; slowPoll(cm);}\n    }\n    cm.display.poll.set(20, p);\n  }\n\n  // prevInput is a hack to work with IME. If we reset the textarea\n  // on every change, that breaks IME. So we look for changes\n  // compared to the previous content instead. (Modern browsers have\n  // events that indicate IME taking place, but these are not widely\n  // supported or compatible enough yet to rely on.)\n  function readInput(cm) {\n    var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;\n    if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.options.disableInput) return false;\n    if (cm.state.pasteIncoming && cm.state.fakedLastChar) {\n      input.value = input.value.substring(0, input.value.length - 1);\n      cm.state.fakedLastChar = false;\n    }\n    var text = input.value;\n    if (text == prevInput && posEq(sel.from, sel.to)) return false;\n    if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {\n      resetInput(cm, true);\n      return false;\n    }\n\n    var withOp = !cm.curOp;\n    if (withOp) startOperation(cm);\n    sel.shift = false;\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;\n    var from = sel.from, to = sel.to;\n    var inserted = text.slice(same);\n    if (same < prevInput.length)\n      from = Pos(from.line, from.ch - (prevInput.length - same));\n    else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming)\n      to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + inserted.length));\n\n    var updateInput = cm.curOp.updateInput;\n    var changeEvent = {from: from, to: to, text: splitLines(inserted),\n                       origin: cm.state.pasteIncoming ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\"};\n    makeChange(cm.doc, changeEvent, \"end\");\n    cm.curOp.updateInput = updateInput;\n    signalLater(cm, \"inputRead\", cm, changeEvent);\n    if (inserted && !cm.state.pasteIncoming && cm.options.electricChars &&\n        cm.options.smartIndent && sel.head.ch < 100) {\n      var electric = cm.getModeAt(sel.head).electricChars;\n      if (electric) for (var i = 0; i < electric.length; i++)\n        if (inserted.indexOf(electric.charAt(i)) > -1) {\n          indentLine(cm, sel.head.line, \"smart\");\n          break;\n        }\n    }\n\n    if (text.length > 1000 || text.indexOf(\"\\n\") > -1) input.value = cm.display.prevInput = \"\";\n    else cm.display.prevInput = text;\n    if (withOp) endOperation(cm);\n    cm.state.pasteIncoming = cm.state.cutIncoming = false;\n    return true;\n  }\n\n  function resetInput(cm, user) {\n    var minimal, selected, doc = cm.doc;\n    if (!posEq(doc.sel.from, doc.sel.to)) {\n      cm.display.prevInput = \"\";\n      minimal = hasCopyEvent &&\n        (doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000);\n      var content = minimal ? \"-\" : selected || cm.getSelection();\n      cm.display.input.value = content;\n      if (cm.state.focused) selectInput(cm.display.input);\n      if (ie && !ie_lt9) cm.display.inputHasSelection = content;\n    } else if (user) {\n      cm.display.prevInput = cm.display.input.value = \"\";\n      if (ie && !ie_lt9) cm.display.inputHasSelection = null;\n    }\n    cm.display.inaccurateSelection = minimal;\n  }\n\n  function focusInput(cm) {\n    if (cm.options.readOnly != \"nocursor\" && (!mobile || document.activeElement != cm.display.input))\n      cm.display.input.focus();\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { focusInput(cm); onFocus(cm); }\n  }\n\n  function isReadOnly(cm) {\n    return cm.options.readOnly || cm.doc.cantEdit;\n  }\n\n  // EVENT HANDLERS\n\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    if (old_ie)\n      on(d.scroller, \"dblclick\", operation(cm, function(e) {\n        if (signalDOMEvent(cm, e)) return;\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;\n        e_preventDefault(e);\n        var word = findWordAt(getLine(cm.doc, pos.line).text, pos);\n        extendSelection(cm.doc, word.from, word.to);\n      }));\n    else\n      on(d.scroller, \"dblclick\", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });\n    on(d.lineSpace, \"selectstart\", function(e) {\n      if (!eventInWidget(d, e)) e_preventDefault(e);\n    });\n    // Gecko browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for Gecko.\n    if (!captureMiddleClick) on(d.scroller, \"contextmenu\", function(e) {onContextMenu(cm, e);});\n\n    on(d.scroller, \"scroll\", function() {\n      if (d.scroller.clientHeight) {\n        setScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n    on(d.scrollbarV, \"scroll\", function() {\n      if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop);\n    });\n    on(d.scrollbarH, \"scroll\", function() {\n      if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft);\n    });\n\n    on(d.scroller, \"mousewheel\", function(e){onScrollWheel(cm, e);});\n    on(d.scroller, \"DOMMouseScroll\", function(e){onScrollWheel(cm, e);});\n\n    function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); }\n    on(d.scrollbarH, \"mousedown\", reFocus);\n    on(d.scrollbarV, \"mousedown\", reFocus);\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    var resizeTimer;\n    function onResize() {\n      if (resizeTimer == null) resizeTimer = setTimeout(function() {\n        resizeTimer = null;\n        // Might be a text scaling operation, clear size caches.\n        d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = knownScrollbarWidth = null;\n        clearCaches(cm);\n        runInOp(cm, bind(regChange, cm));\n      }, 100);\n    }\n    on(window, \"resize\", onResize);\n    // Above handler holds on to the editor and its data structures.\n    // Here we poll to unregister it when the editor is no longer in\n    // the document, so that it can be garbage-collected.\n    function unregister() {\n      for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {}\n      if (p) setTimeout(unregister, 5000);\n      else off(window, \"resize\", onResize);\n    }\n    setTimeout(unregister, 5000);\n\n    on(d.input, \"keyup\", operation(cm, onKeyUp));\n    on(d.input, \"input\", function() {\n      if (ie && !ie_lt9 && cm.display.inputHasSelection) cm.display.inputHasSelection = null;\n      fastPoll(cm);\n    });\n    on(d.input, \"keydown\", operation(cm, onKeyDown));\n    on(d.input, \"keypress\", operation(cm, onKeyPress));\n    on(d.input, \"focus\", bind(onFocus, cm));\n    on(d.input, \"blur\", bind(onBlur, cm));\n\n    function drag_(e) {\n      if (signalDOMEvent(cm, e) || cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return;\n      e_stop(e);\n    }\n    if (cm.options.dragDrop) {\n      on(d.scroller, \"dragstart\", function(e){onDragStart(cm, e);});\n      on(d.scroller, \"dragenter\", drag_);\n      on(d.scroller, \"dragover\", drag_);\n      on(d.scroller, \"drop\", operation(cm, onDrop));\n    }\n    on(d.scroller, \"paste\", function(e) {\n      if (eventInWidget(d, e)) return;\n      focusInput(cm);\n      fastPoll(cm);\n    });\n    on(d.input, \"paste\", function() {\n      // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206\n      // Add a char to the end of textarea before paste occur so that\n      // selection doesn't span to the end of textarea.\n      if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) {\n        var start = d.input.selectionStart, end = d.input.selectionEnd;\n        d.input.value += \"$\";\n        d.input.selectionStart = start;\n        d.input.selectionEnd = end;\n        cm.state.fakedLastChar = true;\n      }\n      cm.state.pasteIncoming = true;\n      fastPoll(cm);\n    });\n\n    function prepareCopy(e) {\n      if (d.inaccurateSelection) {\n        d.prevInput = \"\";\n        d.inaccurateSelection = false;\n        d.input.value = cm.getSelection();\n        selectInput(d.input);\n      }\n      if (e.type == \"cut\") cm.state.cutIncoming = true;\n    }\n    on(d.input, \"cut\", prepareCopy);\n    on(d.input, \"copy\", prepareCopy);\n\n    // Needed to handle Tab key in KHTML\n    if (khtml) on(d.sizer, \"mouseup\", function() {\n      if (document.activeElement == d.input) d.input.blur();\n      focusInput(cm);\n    });\n  }\n\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true;\n    }\n  }\n\n  function posFromMouse(cm, e, liberal) {\n    var display = cm.display;\n    if (!liberal) {\n      var target = e_target(e);\n      if (target == display.scrollbarH || target == display.scrollbarH.firstChild ||\n          target == display.scrollbarV || target == display.scrollbarV.firstChild ||\n          target == display.scrollbarFiller || target == display.gutterFiller) return null;\n    }\n    var x, y, space = getRect(display.lineSpace);\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX; y = e.clientY; } catch (e) { return null; }\n    return coordsChar(cm, x - space.left, y - space.top);\n  }\n\n  var lastClick, lastDoubleClick;\n  function onMouseDown(e) {\n    if (signalDOMEvent(this, e)) return;\n    var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel;\n    sel.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        display.scroller.draggable = false;\n        setTimeout(function(){display.scroller.draggable = true;}, 100);\n      }\n      return;\n    }\n    if (clickInGutter(cm, e)) return;\n    var start = posFromMouse(cm, e);\n    window.focus();\n\n    switch (e_button(e)) {\n    case 3:\n      if (captureMiddleClick) onContextMenu.call(cm, cm, e);\n      return;\n    case 2:\n      if (webkit) cm.state.lastMiddleDown = +new Date;\n      if (start) extendSelection(cm.doc, start);\n      setTimeout(bind(focusInput, cm), 20);\n      e_preventDefault(e);\n      return;\n    }\n    // For button 1, if it was clicked inside the editor\n    // (posFromMouse returning non-null), we have to adjust the\n    // selection.\n    if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;}\n\n    setTimeout(bind(ensureFocus, cm), 0);\n\n    var now = +new Date, type = \"single\";\n    if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {\n      type = \"triple\";\n      e_preventDefault(e);\n      setTimeout(bind(focusInput, cm), 20);\n      selectLine(cm, start.line);\n    } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {\n      type = \"double\";\n      lastDoubleClick = {time: now, pos: start};\n      e_preventDefault(e);\n      var word = findWordAt(getLine(doc, start.line).text, start);\n      extendSelection(cm.doc, word.from, word.to);\n    } else { lastClick = {time: now, pos: start}; }\n\n    var last = start;\n    if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) &&\n        !posLess(start, sel.from) && !posLess(sel.to, start) && type == \"single\") {\n      var dragEnd = operation(cm, function(e2) {\n        if (webkit) display.scroller.draggable = false;\n        cm.state.draggingText = false;\n        off(document, \"mouseup\", dragEnd);\n        off(display.scroller, \"drop\", dragEnd);\n        if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n          e_preventDefault(e2);\n          extendSelection(cm.doc, start);\n          focusInput(cm);\n          // Work around unexplainable focus problem in IE9 (#2127)\n          if (old_ie && !ie_lt9)\n            setTimeout(function() {document.body.focus(); focusInput(cm);}, 20);\n        }\n      });\n      // Let the drag handler handle this.\n      if (webkit) display.scroller.draggable = true;\n      cm.state.draggingText = dragEnd;\n      // IE's approach to draggable\n      if (display.scroller.dragDrop) display.scroller.dragDrop();\n      on(document, \"mouseup\", dragEnd);\n      on(display.scroller, \"drop\", dragEnd);\n      return;\n    }\n    e_preventDefault(e);\n    if (type == \"single\") extendSelection(cm.doc, clipPos(doc, start));\n\n    var startstart = sel.from, startend = sel.to, lastPos = start;\n\n    function doSelect(cur) {\n      if (posEq(lastPos, cur)) return;\n      lastPos = cur;\n\n      if (type == \"single\") {\n        extendSelection(cm.doc, clipPos(doc, start), cur);\n        return;\n      }\n\n      startstart = clipPos(doc, startstart);\n      startend = clipPos(doc, startend);\n      if (type == \"double\") {\n        var word = findWordAt(getLine(doc, cur.line).text, cur);\n        if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend);\n        else extendSelection(cm.doc, startstart, word.to);\n      } else if (type == \"triple\") {\n        if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0)));\n        else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0)));\n      }\n    }\n\n    var editorSize = getRect(display.wrapper);\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true);\n      if (!cur) return;\n      if (!posEq(cur, last)) {\n        ensureFocus(cm);\n        last = cur;\n        doSelect(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) setTimeout(operation(cm, function() {\n          if (counter != curCount) return;\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50);\n      }\n    }\n\n    function done(e) {\n      counter = Infinity;\n      e_preventDefault(e);\n      focusInput(cm);\n      off(document, \"mousemove\", move);\n      off(document, \"mouseup\", up);\n    }\n\n    var move = operation(cm, function(e) {\n      if ((ie && !ie_lt10) ?  !e.buttons : !e_button(e)) done(e);\n      else extend(e);\n    });\n    var up = operation(cm, done);\n    on(document, \"mousemove\", move);\n    on(document, \"mouseup\", up);\n  }\n\n  function gutterEvent(cm, e, type, prevent, signalfn) {\n    try { var mX = e.clientX, mY = e.clientY; }\n    catch(e) { return false; }\n    if (mX >= Math.floor(getRect(cm.display.gutters).right)) return false;\n    if (prevent) e_preventDefault(e);\n\n    var display = cm.display;\n    var lineBox = getRect(display.lineDiv);\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e);\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.options.gutters.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && getRect(g).right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.options.gutters[i];\n        signalfn(cm, type, cm, line, gutter, e);\n        return e_defaultPrevented(e);\n      }\n    }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) return false;\n    return gutterEvent(cm, e, \"gutterContextMenu\", false, signal);\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true, signalLater);\n  }\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))))\n      return;\n    e_preventDefault(e);\n    if (ie) lastDrop = +new Date;\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || isReadOnly(cm)) return;\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var loadFile = function(file, i) {\n        var reader = new FileReader;\n        reader.onload = function() {\n          text[i] = reader.result;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join(\"\\n\")), origin: \"paste\"}, \"around\");\n          }\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) loadFile(files[i], i);\n    } else {\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(bind(focusInput, cm), 20);\n        return;\n      }\n      try {\n        var text = e.dataTransfer.getData(\"Text\");\n        if (text) {\n          var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to;\n          setSelection(cm.doc, pos, pos);\n          if (cm.state.draggingText) replaceRange(cm.doc, \"\", curFrom, curTo, \"paste\");\n          cm.replaceSelection(text, null, \"paste\");\n          focusInput(cm);\n        }\n      }\n      catch(e){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;\n\n    var txt = cm.getSelection();\n    e.dataTransfer.setData(\"Text\", txt);\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (opera) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (opera) img.parentNode.removeChild(img);\n    }\n  }\n\n  function setScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) return;\n    cm.doc.scrollTop = val;\n    if (!gecko) updateDisplay(cm, [], val);\n    if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;\n    if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val;\n    if (gecko) updateDisplay(cm, []);\n    startWorker(cm, 100);\n  }\n  function setScrollLeft(cm, val, isScroller) {\n    if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;\n    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;\n    if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val;\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) wheelPixelsPerUnit = -.53;\n  else if (gecko) wheelPixelsPerUnit = 15;\n  else if (chrome) wheelPixelsPerUnit = -.7;\n  else if (safari) wheelPixelsPerUnit = -1/3;\n\n  function onScrollWheel(cm, e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;\n    else if (dy == null) dy = e.wheelDelta;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    if (!(dx && scroll.scrollWidth > scroll.clientWidth ||\n          dy && scroll.scrollHeight > scroll.clientHeight)) return;\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      for (var cur = e.target; cur != scroll; cur = cur.parentNode) {\n        if (cur.lineObj) {\n          cm.display.currentWheelTarget = cur;\n          break;\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !opera && wheelPixelsPerUnit != null) {\n      if (dy)\n        setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));\n      setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));\n      e_preventDefault(e);\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return;\n    }\n\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) top = Math.max(0, top + pixels - 50);\n      else bot = Math.min(cm.doc.height, bot + pixels + 50);\n      updateDisplay(cm, [], {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function() {\n          if (display.wheelStartX == null) return;\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) return;\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) return false;\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;\n    var doc = cm.doc, prevShift = doc.sel.shift, done = false;\n    try {\n      if (isReadOnly(cm)) cm.state.suppressEdits = true;\n      if (dropShift) doc.sel.shift = false;\n      done = bound(cm) != Pass;\n    } finally {\n      doc.sel.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done;\n  }\n\n  function allKeyMaps(cm) {\n    var maps = cm.state.keyMaps.slice(0);\n    if (cm.options.extraKeys) maps.push(cm.options.extraKeys);\n    maps.push(cm.options.keyMap);\n    return maps;\n  }\n\n  var maybeTransition;\n  function handleKeyBinding(cm, e) {\n    // Handle auto keymap transitions\n    var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto;\n    clearTimeout(maybeTransition);\n    if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {\n      if (getKeyMap(cm.options.keyMap) == startMap) {\n        cm.options.keyMap = (next.call ? next.call(null, cm) : next);\n        keyMapChanged(cm);\n      }\n    }, 50);\n\n    var name = keyName(e, true), handled = false;\n    if (!name) return false;\n    var keymaps = allKeyMaps(cm);\n\n    if (e.shiftKey) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      handled = lookupKey(\"Shift-\" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);})\n             || lookupKey(name, keymaps, function(b) {\n                  if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                    return doHandleBinding(cm, b);\n                });\n    } else {\n      handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); });\n    }\n\n    if (handled) {\n      e_preventDefault(e);\n      restartBlink(cm);\n      if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }\n      signalLater(cm, \"keyHandled\", cm, name, e);\n    }\n    return handled;\n  }\n\n  function handleCharBinding(cm, e, ch) {\n    var handled = lookupKey(\"'\" + ch + \"'\", allKeyMaps(cm),\n                            function(b) { return doHandleBinding(cm, b, true); });\n    if (handled) {\n      e_preventDefault(e);\n      restartBlink(cm);\n      signalLater(cm, \"keyHandled\", cm, \"'\" + ch + \"'\", e);\n    }\n    return handled;\n  }\n\n  function onKeyUp(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;\n    if (e.keyCode == 16) cm.doc.sel.shift = false;\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    ensureFocus(cm);\n    if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;\n    if (old_ie && e.keyCode == 27) e.returnValue = false;\n    var code = e.keyCode;\n    // IE does strange things with escape.\n    cm.doc.sel.shift = code == 16 || e.shiftKey;\n    // First give onKeyEvent option a chance to handle this.\n    var handled = handleKeyBinding(cm, e);\n    if (opera) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        cm.replaceSelection(\"\");\n    }\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n    if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    if (handleCharBinding(cm, e, ch)) return;\n    if (ie && !ie_lt9) cm.display.inputHasSelection = null;\n    fastPoll(cm);\n  }\n\n  function onFocus(cm) {\n    if (cm.options.readOnly == \"nocursor\") return;\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm);\n      cm.state.focused = true;\n      if (cm.display.wrapper.className.search(/\\bCodeMirror-focused\\b/) == -1)\n        cm.display.wrapper.className += \" CodeMirror-focused\";\n      if (!cm.curOp) {\n        resetInput(cm, true);\n        if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730\n      }\n    }\n    slowPoll(cm);\n    restartBlink(cm);\n  }\n  function onBlur(cm) {\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm);\n      cm.state.focused = false;\n      cm.display.wrapper.className = cm.display.wrapper.className.replace(\" CodeMirror-focused\", \"\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150);\n  }\n\n  var detectingSelectAll;\n  function onContextMenu(cm, e) {\n    if (signalDOMEvent(cm, e, \"contextmenu\")) return;\n    var display = cm.display, sel = cm.doc.sel;\n    if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return;\n\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || opera) return; // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)))\n      operation(cm, setSelection)(cm.doc, pos, pos);\n\n    var oldCSS = display.input.style.cssText;\n    display.inputDiv.style.position = \"absolute\";\n    display.input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n      \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: transparent; outline: none;\" +\n      \"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);\";\n    focusInput(cm);\n    resetInput(cm, true);\n    // Adds \"Select all\" to context menu in FF\n    if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = \" \";\n\n    function prepareSelectAllHack() {\n      if (display.input.selectionStart != null) {\n        var extval = display.input.value = \"\\u200b\" + (posEq(sel.from, sel.to) ? \"\" : display.input.value);\n        display.prevInput = \"\\u200b\";\n        display.input.selectionStart = 1; display.input.selectionEnd = extval.length;\n      }\n    }\n    function rehide() {\n      display.inputDiv.style.position = \"relative\";\n      display.input.style.cssText = oldCSS;\n      if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;\n      slowPoll(cm);\n\n      // Try to detect the user choosing select-all\n      if (display.input.selectionStart != null) {\n        if (!ie || ie_lt9) prepareSelectAllHack();\n        clearTimeout(detectingSelectAll);\n        var i = 0, poll = function(){\n          if (display.prevInput == \"\\u200b\" && display.input.selectionStart == 0)\n            operation(cm, commands.selectAll)(cm);\n          else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500);\n          else resetInput(cm);\n        };\n        detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && !ie_lt9) prepareSelectAllHack();\n    if (captureMiddleClick) {\n      e_stop(e);\n      var mouseup = function() {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  }\n\n  // UPDATING\n\n  var changeEnd = CodeMirror.changeEnd = function(change) {\n    if (!change.text) return change.to;\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n  };\n\n  // Make sure a position will be valid after the given change.\n  function clipPostChange(doc, change, pos) {\n    if (!posLess(change.from, pos)) return clipPos(doc, pos);\n    var diff = (change.text.length - 1) - (change.to.line - change.from.line);\n    if (pos.line > change.to.line + diff) {\n      var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1;\n      if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length);\n      return clipToLen(pos, getLine(doc, preLine).text.length);\n    }\n    if (pos.line == change.to.line + diff)\n      return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) +\n                       getLine(doc, change.to.line).text.length - change.to.ch);\n    var inside = pos.line - change.from.line;\n    return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch));\n  }\n\n  // Hint can be null|\"end\"|\"start\"|\"around\"|{anchor,head}\n  function computeSelAfterChange(doc, change, hint) {\n    if (hint && typeof hint == \"object\") // Assumed to be {anchor, head} object\n      return {anchor: clipPostChange(doc, change, hint.anchor),\n              head: clipPostChange(doc, change, hint.head)};\n\n    if (hint == \"start\") return {anchor: change.from, head: change.from};\n\n    var end = changeEnd(change);\n    if (hint == \"around\") return {anchor: change.from, head: end};\n    if (hint == \"end\") return {anchor: end, head: end};\n\n    // hint is null, leave the selection alone as much as possible\n    var adjustPos = function(pos) {\n      if (posLess(pos, change.from)) return pos;\n      if (!posLess(change.to, pos)) return end;\n\n      var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n      if (pos.line == change.to.line) ch += end.ch - change.to.ch;\n      return Pos(line, ch);\n    };\n    return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)};\n  }\n\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function() { this.canceled = true; }\n    };\n    if (update) obj.update = function(from, to, text, origin) {\n      if (from) this.from = clipPos(doc, from);\n      if (to) this.to = clipPos(doc, to);\n      if (text) this.text = text;\n      if (origin !== undefined) this.origin = origin;\n    };\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeChange\", doc.cm, obj);\n\n    if (obj.canceled) return null;\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};\n  }\n\n  // Replace the range from from to to by the strings in replacement.\n  // change is a {from, to, text [, origin]} object\n  function makeChange(doc, change, selUpdate, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly);\n      if (doc.cm.state.suppressEdits) return;\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) return;\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 1; --i)\n        makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [\"\"]});\n      if (split.length)\n        makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate);\n    } else {\n      makeChangeNoReadonly(doc, change, selUpdate);\n    }\n  }\n\n  function makeChangeNoReadonly(doc, change, selUpdate) {\n    if (change.text.length == 1 && change.text[0] == \"\" && posEq(change.from, change.to)) return;\n    var selAfter = computeSelAfterChange(doc, change, selUpdate);\n    addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function(doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  function makeChangeFromHistory(doc, type) {\n    if (doc.cm && doc.cm.state.suppressEdits) return;\n\n    var hist = doc.history;\n    var event = (type == \"undo\" ? hist.done : hist.undone).pop();\n    if (!event) return;\n\n    var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter,\n                anchorAfter: event.anchorBefore, headAfter: event.headBefore,\n                generation: hist.generation};\n    (type == \"undo\" ? hist.undone : hist.done).push(anti);\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    for (var i = event.changes.length - 1; i >= 0; --i) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        (type == \"undo\" ? hist.done : hist.undone).length = 0;\n        return;\n      }\n\n      anti.changes.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change, null)\n                    : {anchor: event.anchorBefore, head: event.headBefore};\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      var rebased = [];\n\n      linkedDocs(doc, function(doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    }\n  }\n\n  function shiftDoc(doc, distance) {\n    function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);}\n    doc.first += distance;\n    if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance);\n    doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor);\n    doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to);\n  }\n\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return;\n    }\n    if (change.from.line > doc.lastLine()) return;\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) selAfter = computeSelAfterChange(doc, change, null);\n    if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter);\n    else updateDoc(doc, change, spans, selAfter);\n  }\n\n  function makeChangeSingleDocInEditor(cm, change, spans, selAfter) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function(line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true;\n        }\n      });\n    }\n\n    if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head))\n      cm.curOp.cursorActivity = true;\n\n    updateDoc(doc, change, spans, selAfter, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function(line) {\n        var len = lineLength(doc, line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) cm.curOp.updateMaxLine = true;\n    }\n\n    // Adjust frontier, schedule worker\n    doc.frontier = Math.min(doc.frontier, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    regChange(cm, from.line, to.line + 1, lendiff);\n\n    if (hasHandler(cm, \"change\")) {\n      var changeObj = {from: from, to: to,\n                       text: change.text,\n                       removed: change.removed,\n                       origin: change.origin};\n      if (cm.curOp.textChanged) {\n        for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {}\n        cur.next = changeObj;\n      } else cm.curOp.textChanged = changeObj;\n    }\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    if (!to) to = from;\n    if (posLess(to, from)) { var tmp = to; to = from; from = tmp; }\n    if (typeof code == \"string\") code = splitLines(code);\n    makeChange(doc, {from: from, to: to, text: code, origin: origin}, null);\n  }\n\n  // POSITION OBJECT\n\n  function Pos(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  }\n  CodeMirror.Pos = Pos;\n\n  function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}\n  function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}\n  function cmp(a, b) {return a.line - b.line || a.ch - b.ch;}\n  function copyPos(x) {return Pos(x.line, x.ch);}\n\n  // SELECTION\n\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) return Pos(doc.first, 0);\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) return Pos(last, getLine(doc, last).text.length);\n    return clipToLen(pos, getLine(doc, pos.line).text.length);\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) return Pos(pos.line, linelen);\n    else if (ch < 0) return Pos(pos.line, 0);\n    else return pos;\n  }\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}\n\n  // If shift is held, this will move the selection anchor. Otherwise,\n  // it'll set the whole selection.\n  function extendSelection(doc, pos, other, bias) {\n    if (doc.sel.shift || doc.sel.extend) {\n      var anchor = doc.sel.anchor;\n      if (other) {\n        var posBefore = posLess(pos, anchor);\n        if (posBefore != posLess(other, anchor)) {\n          anchor = pos;\n          pos = other;\n        } else if (posBefore != posLess(pos, other)) {\n          pos = other;\n        }\n      }\n      setSelection(doc, anchor, pos, bias);\n    } else {\n      setSelection(doc, pos, other || pos, bias);\n    }\n    if (doc.cm) doc.cm.curOp.userSelChange = true;\n  }\n\n  function filterSelectionChange(doc, anchor, head) {\n    var obj = {anchor: anchor, head: head};\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n    obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head);\n    return obj;\n  }\n\n  // Update the selection. Last two args are only used by\n  // updateDoc, since they have to be expressed in the line\n  // numbers before the update.\n  function setSelection(doc, anchor, head, bias, checkAtomic) {\n    if (!checkAtomic && hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\")) {\n      var filtered = filterSelectionChange(doc, anchor, head);\n      head = filtered.head;\n      anchor = filtered.anchor;\n    }\n\n    var sel = doc.sel;\n    sel.goalColumn = null;\n    if (bias == null) bias = posLess(head, sel.head) ? -1 : 1;\n    // Skip over atomic spans.\n    if (checkAtomic || !posEq(anchor, sel.anchor))\n      anchor = skipAtomic(doc, anchor, bias, checkAtomic != \"push\");\n    if (checkAtomic || !posEq(head, sel.head))\n      head = skipAtomic(doc, head, bias, checkAtomic != \"push\");\n\n    if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return;\n\n    sel.anchor = anchor; sel.head = head;\n    var inv = posLess(head, anchor);\n    sel.from = inv ? head : anchor;\n    sel.to = inv ? anchor : head;\n\n    if (doc.cm)\n      doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =\n        doc.cm.curOp.cursorActivity = true;\n\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  function reCheckSelection(cm) {\n    setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, \"push\");\n  }\n\n  function skipAtomic(doc, pos, bias, mayClear) {\n    var flipped = false, curPos = pos;\n    var dir = bias || 1;\n    doc.cantEdit = false;\n    search: for (;;) {\n      var line = getLine(doc, curPos.line);\n      if (line.markedSpans) {\n        for (var i = 0; i < line.markedSpans.length; ++i) {\n          var sp = line.markedSpans[i], m = sp.marker;\n          if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&\n              (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {\n            if (mayClear) {\n              signal(m, \"beforeCursorEnter\");\n              if (m.explicitlyCleared) {\n                if (!line.markedSpans) break;\n                else {--i; continue;}\n              }\n            }\n            if (!m.atomic) continue;\n            var newPos = m.find()[dir < 0 ? \"from\" : \"to\"];\n            if (posEq(newPos, curPos)) {\n              newPos.ch += dir;\n              if (newPos.ch < 0) {\n                if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));\n                else newPos = null;\n              } else if (newPos.ch > line.text.length) {\n                if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);\n                else newPos = null;\n              }\n              if (!newPos) {\n                if (flipped) {\n                  // Driven in a corner -- no valid cursor position found at all\n                  // -- try again *with* clearing, if we didn't already\n                  if (!mayClear) return skipAtomic(doc, pos, bias, true);\n                  // Otherwise, turn off editing until further notice, and return the start of the doc\n                  doc.cantEdit = true;\n                  return Pos(doc.first, 0);\n                }\n                flipped = true; newPos = pos; dir = -dir;\n              }\n            }\n            curPos = newPos;\n            continue search;\n          }\n        }\n      }\n      return curPos;\n    }\n  }\n\n  // SCROLLING\n\n  function scrollCursorIntoView(cm) {\n    var coords = scrollPosIntoView(cm, cm.doc.sel.head, null, cm.options.cursorScrollMargin);\n    if (!cm.state.focused) return;\n    var display = cm.display, box = getRect(display.sizer), doScroll = null;\n    if (coords.top + box.top < 0) doScroll = true;\n    else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute; top: \" +\n                           (coords.top - display.viewOffset) + \"px; height: \" +\n                           (coords.bottom - coords.top + scrollerCutOff) + \"px; left: \" +\n                           coords.left + \"px; width: 2px;\");\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) margin = 0;\n    for (;;) {\n      var changed = false, coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),\n                                         Math.min(coords.top, endCoords.top) - margin,\n                                         Math.max(coords.left, endCoords.left),\n                                         Math.max(coords.bottom, endCoords.bottom) + margin);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        setScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;\n      }\n      if (!changed) return coords;\n    }\n  }\n\n  function scrollIntoView(cm, x1, y1, x2, y2) {\n    var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);\n    if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);\n    if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);\n  }\n\n  function calculateScrollPos(cm, x1, y1, x2, y2) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (y1 < 0) y1 = 0;\n    var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {};\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;\n    if (y1 < screentop) {\n      result.scrollTop = atTop ? 0 : y1;\n    } else if (y2 > screentop + screen) {\n      var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);\n      if (newTop != screentop) result.scrollTop = newTop;\n    }\n\n    var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft;\n    x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth;\n    var gutterw = display.gutters.offsetWidth;\n    var atLeft = x1 < gutterw + 10;\n    if (x1 < screenleft + gutterw || atLeft) {\n      if (atLeft) x1 = 0;\n      result.scrollLeft = Math.max(0, x1 - 10 - gutterw);\n    } else if (x2 > screenw + screenleft - 3) {\n      result.scrollLeft = x2 + 10 - screenw;\n    }\n    return result;\n  }\n\n  function updateScrollPos(cm, left, top) {\n    cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left,\n                                scrollTop: top == null ? cm.doc.scrollTop : top};\n  }\n\n  function addToScrollPos(cm, left, top) {\n    var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop});\n    var scroll = cm.display.scroller;\n    pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top));\n    pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left));\n  }\n\n  // API UTILITIES\n\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) how = \"add\";\n    if (how == \"smart\") {\n      if (!cm.doc.mode.indent) how = \"prev\";\n      else state = getStateBefore(cm, n);\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) line.stateAfter = null;\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass) {\n        if (!aggressive) return;\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);\n      else indentation = 0;\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";}\n    if (pos < indentation) indentString += spaceStr(indentation - pos);\n\n    if (indentString != curSpaceString)\n      replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n    else if (doc.sel.head.line == n && doc.sel.head.ch < curSpaceString.length)\n      setSelection(doc, Pos(n, curSpaceString.length), Pos(n, curSpaceString.length), 1);\n    line.stateAfter = null;\n  }\n\n  function changeLine(cm, handle, op) {\n    var no = handle, line = handle, doc = cm.doc;\n    if (typeof handle == \"number\") line = getLine(doc, clipLine(doc, handle));\n    else no = lineNo(handle);\n    if (no == null) return null;\n    if (op(line, no)) regChange(cm, no, no + 1);\n    else return null;\n    return line;\n  }\n\n  function findPosH(doc, pos, dir, unit, visually) {\n    var line = pos.line, ch = pos.ch, origDir = dir;\n    var lineObj = getLine(doc, line);\n    var possible = true;\n    function findNextLine() {\n      var l = line + dir;\n      if (l < doc.first || l >= doc.first + doc.size) return (possible = false);\n      line = l;\n      return lineObj = getLine(doc, l);\n    }\n    function moveOnce(boundToLine) {\n      var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);\n      if (next == null) {\n        if (!boundToLine && findNextLine()) {\n          if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);\n          else ch = dir < 0 ? lineObj.text.length : 0;\n        } else return (possible = false);\n      } else ch = next;\n      return true;\n    }\n\n    if (unit == \"char\") moveOnce();\n    else if (unit == \"column\") moveOnce(true);\n    else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) break;\n        var cur = lineObj.text.charAt(ch) || \"\\n\";\n        var type = isWordChar(cur) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) type = \"s\";\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce();}\n          break;\n        }\n\n        if (type) sawType = type;\n        if (dir > 0 && !moveOnce(!first)) break;\n      }\n    }\n    var result = skipAtomic(doc, Pos(line, ch), origDir, true);\n    if (!possible) result.hitSide = true;\n    return result;\n  }\n\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    for (;;) {\n      var target = coordsChar(cm, x, y);\n      if (!target.outside) break;\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }\n      y += dir * 5;\n    }\n    return target;\n  }\n\n  function findWordAt(line, pos) {\n    var start = pos.ch, end = pos.ch;\n    if (line) {\n      if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;\n      var startChar = line.charAt(start);\n      var check = isWordChar(startChar) ? isWordChar\n        : /\\s/.test(startChar) ? function(ch) {return /\\s/.test(ch);}\n        : function(ch) {return !/\\s/.test(ch) && !isWordChar(ch);};\n      while (start > 0 && check(line.charAt(start - 1))) --start;\n      while (end < line.length && check(line.charAt(end))) ++end;\n    }\n    return {from: Pos(pos.line, start), to: Pos(pos.line, end)};\n  }\n\n  function selectLine(cm, line) {\n    extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0)));\n  }\n\n  // PROTOTYPE\n\n  // The publicly visible API. Note that operation(null, f) means\n  // 'wrap f in an operation, performed on its `this` parameter'\n\n  CodeMirror.prototype = {\n    constructor: CodeMirror,\n    focus: function(){window.focus(); focusInput(this); fastPoll(this);},\n\n    setOption: function(option, value) {\n      var options = this.options, old = options[option];\n      if (options[option] == value && option != \"mode\") return;\n      options[option] = value;\n      if (optionHandlers.hasOwnProperty(option))\n        operation(this, optionHandlers[option])(this, value, old);\n    },\n\n    getOption: function(option) {return this.options[option];},\n    getDoc: function() {return this.doc;},\n\n    addKeyMap: function(map, bottom) {\n      this.state.keyMaps[bottom ? \"push\" : \"unshift\"](map);\n    },\n    removeKeyMap: function(map) {\n      var maps = this.state.keyMaps;\n      for (var i = 0; i < maps.length; ++i)\n        if (maps[i] == map || (typeof maps[i] != \"string\" && maps[i].name == map)) {\n          maps.splice(i, 1);\n          return true;\n        }\n    },\n\n    addOverlay: operation(null, function(spec, options) {\n      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n      if (mode.startState) throw new Error(\"Overlays may not be stateful.\");\n      this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});\n      this.state.modeGen++;\n      regChange(this);\n    }),\n    removeOverlay: operation(null, function(spec) {\n      var overlays = this.state.overlays;\n      for (var i = 0; i < overlays.length; ++i) {\n        var cur = overlays[i].modeSpec;\n        if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n          overlays.splice(i, 1);\n          this.state.modeGen++;\n          regChange(this);\n          return;\n        }\n      }\n    }),\n\n    indentLine: operation(null, function(n, dir, aggressive) {\n      if (typeof dir != \"string\" && typeof dir != \"number\") {\n        if (dir == null) dir = this.options.smartIndent ? \"smart\" : \"prev\";\n        else dir = dir ? \"add\" : \"subtract\";\n      }\n      if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);\n    }),\n    indentSelection: operation(null, function(how) {\n      var sel = this.doc.sel;\n      if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how, true);\n      var e = sel.to.line - (sel.to.ch ? 0 : 1);\n      for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how);\n    }),\n\n    // Fetch the parser token for a given character. Useful for hacks\n    // that want to inspect the mode state (say, for completion).\n    getTokenAt: function(pos, precise) {\n      var doc = this.doc;\n      pos = clipPos(doc, pos);\n      var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode;\n      var line = getLine(doc, pos.line);\n      var stream = new StringStream(line.text, this.options.tabSize);\n      while (stream.pos < pos.ch && !stream.eol()) {\n        stream.start = stream.pos;\n        var style = mode.token(stream, state);\n      }\n      return {start: stream.start,\n              end: stream.pos,\n              string: stream.current(),\n              className: style || null, // Deprecated, use 'type' instead\n              type: style || null,\n              state: state};\n    },\n\n    getTokenTypeAt: function(pos) {\n      pos = clipPos(this.doc, pos);\n      var styles = getLineStyles(this, getLine(this.doc, pos.line));\n      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n      if (ch == 0) return styles[2];\n      for (;;) {\n        var mid = (before + after) >> 1;\n        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;\n        else if (styles[mid * 2 + 1] < ch) before = mid + 1;\n        else return styles[mid * 2 + 2];\n      }\n    },\n\n    getModeAt: function(pos) {\n      var mode = this.doc.mode;\n      if (!mode.innerMode) return mode;\n      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n    },\n\n    getHelper: function(pos, type) {\n      return this.getHelpers(pos, type)[0];\n    },\n\n    getHelpers: function(pos, type) {\n      var found = [];\n      if (!helpers.hasOwnProperty(type)) return helpers;\n      var help = helpers[type], mode = this.getModeAt(pos);\n      if (typeof mode[type] == \"string\") {\n        if (help[mode[type]]) found.push(help[mode[type]]);\n      } else if (mode[type]) {\n        for (var i = 0; i < mode[type].length; i++) {\n          var val = help[mode[type][i]];\n          if (val) found.push(val);\n        }\n      } else if (mode.helperType && help[mode.helperType]) {\n        found.push(help[mode.helperType]);\n      } else if (help[mode.name]) {\n        found.push(help[mode.name]);\n      }\n      for (var i = 0; i < help._global.length; i++) {\n        var cur = help._global[i];\n        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n          found.push(cur.val);\n      }\n      return found;\n    },\n\n    getStateAfter: function(line, precise) {\n      var doc = this.doc;\n      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n      return getStateBefore(this, line + 1, precise);\n    },\n\n    cursorCoords: function(start, mode) {\n      var pos, sel = this.doc.sel;\n      if (start == null) pos = sel.head;\n      else if (typeof start == \"object\") pos = clipPos(this.doc, start);\n      else pos = start ? sel.from : sel.to;\n      return cursorCoords(this, pos, mode || \"page\");\n    },\n\n    charCoords: function(pos, mode) {\n      return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n    },\n\n    coordsChar: function(coords, mode) {\n      coords = fromCoordSystem(this, coords, mode || \"page\");\n      return coordsChar(this, coords.left, coords.top);\n    },\n\n    lineAtHeight: function(height, mode) {\n      height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n      return lineAtHeight(this.doc, height + this.display.viewOffset);\n    },\n    heightAtLine: function(line, mode) {\n      var end = false, last = this.doc.first + this.doc.size - 1;\n      if (line < this.doc.first) line = this.doc.first;\n      else if (line > last) { line = last; end = true; }\n      var lineObj = getLine(this.doc, line);\n      return intoCoordSystem(this, getLine(this.doc, line), {top: 0, left: 0}, mode || \"page\").top +\n        (end ? lineObj.height : 0);\n    },\n\n    defaultTextHeight: function() { return textHeight(this.display); },\n    defaultCharWidth: function() { return charWidth(this.display); },\n\n    setGutterMarker: operation(null, function(line, gutterID, value) {\n      return changeLine(this, line, function(line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) line.gutterMarkers = null;\n        return true;\n      });\n    }),\n\n    clearGutter: operation(null, function(gutterID) {\n      var cm = this, doc = cm.doc, i = doc.first;\n      doc.iter(function(line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          line.gutterMarkers[gutterID] = null;\n          regChange(cm, i, i + 1);\n          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;\n        }\n        ++i;\n      });\n    }),\n\n    addLineClass: operation(null, function(handle, where, cls) {\n      return changeLine(this, handle, function(line) {\n        var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : \"wrapClass\";\n        if (!line[prop]) line[prop] = cls;\n        else if (new RegExp(\"(?:^|\\\\s)\" + cls + \"(?:$|\\\\s)\").test(line[prop])) return false;\n        else line[prop] += \" \" + cls;\n        return true;\n      });\n    }),\n\n    removeLineClass: operation(null, function(handle, where, cls) {\n      return changeLine(this, handle, function(line) {\n        var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) return false;\n        else if (cls == null) line[prop] = null;\n        else {\n          var found = cur.match(new RegExp(\"(?:^|\\\\s+)\" + cls + \"(?:$|\\\\s+)\"));\n          if (!found) return false;\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true;\n      });\n    }),\n\n    addLineWidget: operation(null, function(handle, node, options) {\n      return addLineWidget(this, handle, node, options);\n    }),\n\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    lineInfo: function(line) {\n      if (typeof line == \"number\") {\n        if (!isLine(this.doc, line)) return null;\n        var n = line;\n        line = getLine(this.doc, line);\n        if (!line) return null;\n      } else {\n        var n = lineNo(line);\n        if (n == null) return null;\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets};\n    },\n\n    getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};},\n\n    addWidget: function(pos, node, scroll, vert, horiz) {\n      var display = this.display;\n      pos = cursorCoords(this, clipPos(this.doc, pos));\n      var top = pos.bottom, left = pos.left;\n      node.style.position = \"absolute\";\n      display.sizer.appendChild(node);\n      if (vert == \"over\") {\n        top = pos.top;\n      } else if (vert == \"above\" || vert == \"near\") {\n        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n        // Default to positioning above (if specified and possible); otherwise default to positioning below\n        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n          top = pos.top - node.offsetHeight;\n        else if (pos.bottom + node.offsetHeight <= vspace)\n          top = pos.bottom;\n        if (left + node.offsetWidth > hspace)\n          left = hspace - node.offsetWidth;\n      }\n      node.style.top = top + \"px\";\n      node.style.left = node.style.right = \"\";\n      if (horiz == \"right\") {\n        left = display.sizer.clientWidth - node.offsetWidth;\n        node.style.right = \"0px\";\n      } else {\n        if (horiz == \"left\") left = 0;\n        else if (horiz == \"middle\") left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n        node.style.left = left + \"px\";\n      }\n      if (scroll)\n        scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);\n    },\n\n    triggerOnKeyDown: operation(null, onKeyDown),\n    triggerOnKeyPress: operation(null, onKeyPress),\n    triggerOnKeyUp: operation(null, onKeyUp),\n\n    execCommand: function(cmd) {\n      if (commands.hasOwnProperty(cmd))\n        return commands[cmd](this);\n    },\n\n    findPosH: function(from, amount, unit, visually) {\n      var dir = 1;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        cur = findPosH(this.doc, cur, dir, unit, visually);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveH: operation(null, function(dir, unit) {\n      var sel = this.doc.sel, pos;\n      if (sel.shift || sel.extend || posEq(sel.from, sel.to))\n        pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually);\n      else\n        pos = dir < 0 ? sel.from : sel.to;\n      extendSelection(this.doc, pos, pos, dir);\n    }),\n\n    deleteH: operation(null, function(dir, unit) {\n      var sel = this.doc.sel;\n      if (!posEq(sel.from, sel.to)) replaceRange(this.doc, \"\", sel.from, sel.to, \"+delete\");\n      else replaceRange(this.doc, \"\", sel.from, findPosH(this.doc, sel.head, dir, unit, false), \"+delete\");\n      this.curOp.userSelChange = true;\n    }),\n\n    findPosV: function(from, amount, unit, goalColumn) {\n      var dir = 1, x = goalColumn;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        var coords = cursorCoords(this, cur, \"div\");\n        if (x == null) x = coords.left;\n        else coords.left = x;\n        cur = findPosV(this, coords, dir, unit);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveV: operation(null, function(dir, unit) {\n      var sel = this.doc.sel, target, goal;\n      if (sel.shift || sel.extend || posEq(sel.from, sel.to)) {\n        var pos = cursorCoords(this, sel.head, \"div\");\n        if (sel.goalColumn != null) pos.left = sel.goalColumn;\n        target = findPosV(this, pos, dir, unit);\n        if (unit == \"page\") addToScrollPos(this, 0, charCoords(this, target, \"div\").top - pos.top);\n        goal = pos.left;\n      } else {\n        target = dir < 0 ? sel.from : sel.to;\n      }\n      extendSelection(this.doc, target, target, dir);\n      if (goal != null) sel.goalColumn = goal;\n    }),\n\n    toggleOverwrite: function(value) {\n      if (value != null && value == this.state.overwrite) return;\n      if (this.state.overwrite = !this.state.overwrite)\n        this.display.cursor.className += \" CodeMirror-overwrite\";\n      else\n        this.display.cursor.className = this.display.cursor.className.replace(\" CodeMirror-overwrite\", \"\");\n\n      signal(this, \"overwriteToggle\", this, this.state.overwrite);\n    },\n    hasFocus: function() { return document.activeElement == this.display.input; },\n\n    scrollTo: operation(null, function(x, y) {\n      updateScrollPos(this, x, y);\n    }),\n    getScrollInfo: function() {\n      var scroller = this.display.scroller, co = scrollerCutOff;\n      return {left: scroller.scrollLeft, top: scroller.scrollTop,\n              height: scroller.scrollHeight - co, width: scroller.scrollWidth - co,\n              clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};\n    },\n\n    scrollIntoView: operation(null, function(range, margin) {\n      if (range == null) range = {from: this.doc.sel.head, to: null};\n      else if (typeof range == \"number\") range = {from: Pos(range, 0), to: null};\n      else if (range.from == null) range = {from: range, to: null};\n      if (!range.to) range.to = range.from;\n      if (!margin) margin = 0;\n\n      var coords = range;\n      if (range.from.line != null) {\n        this.curOp.scrollToPos = {from: range.from, to: range.to, margin: margin};\n        coords = {from: cursorCoords(this, range.from),\n                  to: cursorCoords(this, range.to)};\n      }\n      var sPos = calculateScrollPos(this, Math.min(coords.from.left, coords.to.left),\n                                    Math.min(coords.from.top, coords.to.top) - margin,\n                                    Math.max(coords.from.right, coords.to.right),\n                                    Math.max(coords.from.bottom, coords.to.bottom) + margin);\n      updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop);\n    }),\n\n    setSize: operation(null, function(width, height) {\n      function interpret(val) {\n        return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n      }\n      if (width != null) this.display.wrapper.style.width = interpret(width);\n      if (height != null) this.display.wrapper.style.height = interpret(height);\n      if (this.options.lineWrapping)\n        this.display.measureLineCache.length = this.display.measureLineCachePos = 0;\n      this.curOp.forceUpdate = true;\n      signal(this, \"refresh\", this);\n    }),\n\n    operation: function(f){return runInOp(this, f);},\n\n    refresh: operation(null, function() {\n      var oldHeight = this.display.cachedTextHeight;\n      clearCaches(this);\n      updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop);\n      regChange(this);\n      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n        estimateLineHeights(this);\n      signal(this, \"refresh\", this);\n    }),\n\n    swapDoc: operation(null, function(doc) {\n      var old = this.doc;\n      old.cm = null;\n      attachDoc(this, doc);\n      clearCaches(this);\n      resetInput(this, true);\n      updateScrollPos(this, doc.scrollLeft, doc.scrollTop);\n      signalLater(this, \"swapDoc\", this, old);\n      return old;\n    }),\n\n    getInputField: function(){return this.display.input;},\n    getWrapperElement: function(){return this.display.wrapper;},\n    getScrollerElement: function(){return this.display.scroller;},\n    getGutterElement: function(){return this.display.gutters;}\n  };\n  eventMixin(CodeMirror);\n\n  // OPTION DEFAULTS\n\n  var optionHandlers = CodeMirror.optionHandlers = {};\n\n  // The default configuration options.\n  var defaults = CodeMirror.defaults = {};\n\n  function option(name, deflt, handle, notOnInit) {\n    CodeMirror.defaults[name] = deflt;\n    if (handle) optionHandlers[name] =\n      notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;\n  }\n\n  var Init = CodeMirror.Init = {toString: function(){return \"CodeMirror.Init\";}};\n\n  // These two are, on init, called from the constructor because they\n  // have to be initialized before the editor can start at all.\n  option(\"value\", \"\", function(cm, val) {\n    cm.setValue(val);\n  }, true);\n  option(\"mode\", null, function(cm, val) {\n    cm.doc.modeOption = val;\n    loadMode(cm);\n  }, true);\n\n  option(\"indentUnit\", 2, loadMode, true);\n  option(\"indentWithTabs\", false);\n  option(\"smartIndent\", true);\n  option(\"tabSize\", 4, function(cm) {\n    resetModeState(cm);\n    clearCaches(cm);\n    regChange(cm);\n  }, true);\n  option(\"specialChars\", /[\\t\\u0000-\\u0019\\u00ad\\u200b\\u2028\\u2029\\ufeff]/g, function(cm, val) {\n    cm.options.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n    cm.refresh();\n  }, true);\n  option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);\n  option(\"electricChars\", true);\n  option(\"rtlMoveVisually\", !windows);\n  option(\"wholeLineUpdateBefore\", true);\n\n  option(\"theme\", \"default\", function(cm) {\n    themeChanged(cm);\n    guttersChanged(cm);\n  }, true);\n  option(\"keyMap\", \"default\", keyMapChanged);\n  option(\"extraKeys\", null);\n\n  option(\"onKeyEvent\", null);\n  option(\"onDragEvent\", null);\n\n  option(\"lineWrapping\", false, wrappingChanged, true);\n  option(\"gutters\", [], function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"fixedGutter\", true, function(cm, val) {\n    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n    cm.refresh();\n  }, true);\n  option(\"coverGutterNextToScrollbar\", false, updateScrollbars, true);\n  option(\"lineNumbers\", false, function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"firstLineNumber\", 1, guttersChanged, true);\n  option(\"lineNumberFormatter\", function(integer) {return integer;}, guttersChanged, true);\n  option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n  option(\"resetSelectionOnContextMenu\", true);\n\n  option(\"readOnly\", false, function(cm, val) {\n    if (val == \"nocursor\") {\n      onBlur(cm);\n      cm.display.input.blur();\n      cm.display.disabled = true;\n    } else {\n      cm.display.disabled = false;\n      if (!val) resetInput(cm, true);\n    }\n  });\n  option(\"disableInput\", false, function(cm, val) {if (!val) resetInput(cm, true);}, true);\n  option(\"dragDrop\", true);\n\n  option(\"cursorBlinkRate\", 530);\n  option(\"cursorScrollMargin\", 0);\n  option(\"cursorHeight\", 1);\n  option(\"workTime\", 100);\n  option(\"workDelay\", 100);\n  option(\"flattenSpans\", true, resetModeState, true);\n  option(\"addModeClass\", false, resetModeState, true);\n  option(\"pollInterval\", 100);\n  option(\"undoDepth\", 40, function(cm, val){cm.doc.history.undoDepth = val;});\n  option(\"historyEventDelay\", 500);\n  option(\"viewportMargin\", 10, function(cm){cm.refresh();}, true);\n  option(\"maxHighlightLength\", 10000, resetModeState, true);\n  option(\"crudeMeasuringFrom\", 10000);\n  option(\"moveInputWithCursor\", true, function(cm, val) {\n    if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;\n  });\n\n  option(\"tabindex\", null, function(cm, val) {\n    cm.display.input.tabIndex = val || \"\";\n  });\n  option(\"autofocus\", null);\n\n  // MODE DEFINITION AND QUERYING\n\n  // Known modes, by name and by MIME\n  var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};\n\n  CodeMirror.defineMode = function(name, mode) {\n    if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n    if (arguments.length > 2) {\n      mode.dependencies = [];\n      for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);\n    }\n    modes[name] = mode;\n  };\n\n  CodeMirror.defineMIME = function(mime, spec) {\n    mimeModes[mime] = spec;\n  };\n\n  CodeMirror.resolveMode = function(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") found = {name: found};\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return CodeMirror.resolveMode(\"application/xml\");\n    }\n    if (typeof spec == \"string\") return {name: spec};\n    else return spec || {name: \"null\"};\n  };\n\n  CodeMirror.getMode = function(options, spec) {\n    var spec = CodeMirror.resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) return CodeMirror.getMode(options, \"text/plain\");\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) continue;\n        if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop];\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) modeObj.helperType = spec.helperType;\n    if (spec.modeProps) for (var prop in spec.modeProps)\n      modeObj[prop] = spec.modeProps[prop];\n\n    return modeObj;\n  };\n\n  CodeMirror.defineMode(\"null\", function() {\n    return {token: function(stream) {stream.skipToEnd();}};\n  });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  var modeExtensions = CodeMirror.modeExtensions = {};\n  CodeMirror.extendMode = function(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  };\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function(name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function(name, func) {\n    Doc.prototype[name] = func;\n  };\n  CodeMirror.defineOption = option;\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function(f) {initHooks.push(f);};\n\n  var helpers = CodeMirror.helpers = {};\n  CodeMirror.registerHelper = function(type, name, value) {\n    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};\n    helpers[type][name] = value;\n  };\n  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n    CodeMirror.registerHelper(type, name, value);\n    helpers[type]._global.push({pred: predicate, val: value});\n  };\n\n  // UTILITIES\n\n  CodeMirror.isWordChar = isWordChar;\n\n  // MODE STATE HANDLING\n\n  // Utility functions for working with state. Exported because modes\n  // sometimes need to do this.\n  function copyState(mode, state) {\n    if (state === true) return state;\n    if (mode.copyState) return mode.copyState(state);\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) val = val.concat([]);\n      nstate[n] = val;\n    }\n    return nstate;\n  }\n  CodeMirror.copyState = copyState;\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true;\n  }\n  CodeMirror.startState = startState;\n\n  CodeMirror.innerMode = function(mode, state) {\n    while (mode.innerMode) {\n      var info = mode.innerMode(state);\n      if (!info || info.mode == mode) break;\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state};\n  };\n\n  // STANDARD COMMANDS\n\n  var commands = CodeMirror.commands = {\n    selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));},\n    killLine: function(cm) {\n      var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);\n      if (!sel && cm.getLine(from.line).length == from.ch)\n        cm.replaceRange(\"\", from, Pos(from.line + 1, 0), \"+delete\");\n      else cm.replaceRange(\"\", from, sel ? to : Pos(from.line), \"+delete\");\n    },\n    deleteLine: function(cm) {\n      var l = cm.getCursor().line;\n      cm.replaceRange(\"\", Pos(l, 0), Pos(l + 1, 0), \"+delete\");\n    },\n    delLineLeft: function(cm) {\n      var cur = cm.getCursor();\n      cm.replaceRange(\"\", Pos(cur.line, 0), cur, \"+delete\");\n    },\n    undo: function(cm) {cm.undo();},\n    redo: function(cm) {cm.redo();},\n    goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},\n    goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},\n    goLineStart: function(cm) {\n      cm.extendSelection(lineStart(cm, cm.getCursor().line));\n    },\n    goLineStartSmart: function(cm) {\n      var cur = cm.getCursor(), start = lineStart(cm, cur.line);\n      var line = cm.getLineHandle(start.line);\n      var order = getOrder(line);\n      if (!order || order[0].level == 0) {\n        var firstNonWS = Math.max(0, line.text.search(/\\S/));\n        var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch;\n        cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS));\n      } else cm.extendSelection(start);\n    },\n    goLineEnd: function(cm) {\n      cm.extendSelection(lineEnd(cm, cm.getCursor().line));\n    },\n    goLineRight: function(cm) {\n      var top = cm.charCoords(cm.getCursor(), \"div\").top + 5;\n      cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\"));\n    },\n    goLineLeft: function(cm) {\n      var top = cm.charCoords(cm.getCursor(), \"div\").top + 5;\n      cm.extendSelection(cm.coordsChar({left: 0, top: top}, \"div\"));\n    },\n    goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n    goLineDown: function(cm) {cm.moveV(1, \"line\");},\n    goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n    goPageDown: function(cm) {cm.moveV(1, \"page\");},\n    goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n    goCharRight: function(cm) {cm.moveH(1, \"char\");},\n    goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n    goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n    goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n    goGroupRight: function(cm) {cm.moveH(1, \"group\");},\n    goGroupLeft: function(cm) {cm.moveH(-1, \"group\");},\n    goWordRight: function(cm) {cm.moveH(1, \"word\");},\n    delCharBefore: function(cm) {cm.deleteH(-1, \"char\");},\n    delCharAfter: function(cm) {cm.deleteH(1, \"char\");},\n    delWordBefore: function(cm) {cm.deleteH(-1, \"word\");},\n    delWordAfter: function(cm) {cm.deleteH(1, \"word\");},\n    delGroupBefore: function(cm) {cm.deleteH(-1, \"group\");},\n    delGroupAfter: function(cm) {cm.deleteH(1, \"group\");},\n    indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n    indentMore: function(cm) {cm.indentSelection(\"add\");},\n    indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n    insertTab: function(cm) {\n      cm.replaceSelection(\"\\t\", \"end\", \"+input\");\n    },\n    defaultTab: function(cm) {\n      if (cm.somethingSelected()) cm.indentSelection(\"add\");\n      else cm.replaceSelection(\"\\t\", \"end\", \"+input\");\n    },\n    transposeChars: function(cm) {\n      var cur = cm.getCursor(), line = cm.getLine(cur.line);\n      if (cur.ch > 0 && cur.ch < line.length - 1)\n        cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),\n                        Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1));\n    },\n    newlineAndIndent: function(cm) {\n      operation(cm, function() {\n        cm.replaceSelection(\"\\n\", \"end\", \"+input\");\n        cm.indentLine(cm.getCursor().line, null, true);\n      })();\n    },\n    toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n  };\n\n  // STANDARD KEYMAPS\n\n  var keyMap = CodeMirror.keyMap = {};\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. Unknown commands are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    fallthrough: \"basic\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delLineLeft\",\n    fallthrough: [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n  };\n\n  // KEYMAP DISPATCH\n\n  function getKeyMap(val) {\n    if (typeof val == \"string\") return keyMap[val];\n    else return val;\n  }\n\n  function lookupKey(name, maps, handle) {\n    function lookup(map) {\n      map = getKeyMap(map);\n      var found = map[name];\n      if (found === false) return \"stop\";\n      if (found != null && handle(found)) return true;\n      if (map.nofallthrough) return \"stop\";\n\n      var fallthrough = map.fallthrough;\n      if (fallthrough == null) return false;\n      if (Object.prototype.toString.call(fallthrough) != \"[object Array]\")\n        return lookup(fallthrough);\n      for (var i = 0, e = fallthrough.length; i < e; ++i) {\n        var done = lookup(fallthrough[i]);\n        if (done) return done;\n      }\n      return false;\n    }\n\n    for (var i = 0; i < maps.length; ++i) {\n      var done = lookup(maps[i]);\n      if (done) return done != \"stop\";\n    }\n  }\n  function isModifierKey(event) {\n    var name = keyNames[event.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n  }\n  function keyName(event, noShift) {\n    if (opera && event.keyCode == 34 && event[\"char\"]) return false;\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) return false;\n    if (event.altKey) name = \"Alt-\" + name;\n    if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = \"Ctrl-\" + name;\n    if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = \"Cmd-\" + name;\n    if (!noShift && event.shiftKey) name = \"Shift-\" + name;\n    return name;\n  }\n  CodeMirror.lookupKey = lookupKey;\n  CodeMirror.isModifierKey = isModifierKey;\n  CodeMirror.keyName = keyName;\n\n  // FROMTEXTAREA\n\n  CodeMirror.fromTextArea = function(textarea, options) {\n    if (!options) options = {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabindex)\n      options.tabindex = textarea.tabindex;\n    if (!options.placeholder && textarea.placeholder)\n      options.placeholder = textarea.placeholder;\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = document.body;\n      // doc.activeElement occasionally throws on IE\n      try { hasFocus = document.activeElement; } catch(e) {}\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form, realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function() {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function(node) {\n      textarea.parentNode.insertBefore(node, textarea.nextSibling);\n    }, options);\n    cm.save = save;\n    cm.getTextArea = function() { return textarea; };\n    cm.toTextArea = function() {\n      save();\n      textarea.parentNode.removeChild(cm.getWrapperElement());\n      textarea.style.display = \"\";\n      if (textarea.form) {\n        off(textarea.form, \"submit\", save);\n        if (typeof textarea.form.submit == \"function\")\n          textarea.form.submit = realSubmit;\n      }\n    };\n    return cm;\n  };\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  // The character stream used by a mode's parser.\n  function StringStream(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  }\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      if (this.lastColumnPos < this.start) {\n        this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n        this.lastColumnPos = this.start;\n      }\n      return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    indentation: function() {\n      return countColumn(this.string, null, this.tabSize) -\n        (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\n  CodeMirror.StringStream = StringStream;\n\n  // TEXTMARKERS\n\n  function TextMarker(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n  }\n  CodeMirror.TextMarker = TextMarker;\n  eventMixin(TextMarker);\n\n  TextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) startOperation(cm);\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) signalLater(this, \"clear\", found.from, found.to);\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.to != null) max = lineNo(line);\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from != null)\n        min = lineNo(line);\n      else if (this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        updateLineHeight(line, textHeight(cm.display));\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {\n      var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    }\n\n    if (min != null && cm) regChange(cm, min, max + 1);\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) reCheckSelection(cm);\n    }\n    if (withOp) endOperation(cm);\n  };\n\n  TextMarker.prototype.find = function(bothSides) {\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null || span.to != null) {\n        var found = lineNo(line);\n        if (span.from != null) from = Pos(found, span.from);\n        if (span.to != null) to = Pos(found, span.to);\n      }\n    }\n    if (this.type == \"bookmark\" && !bothSides) return from;\n    return from && {from: from, to: to};\n  };\n\n  TextMarker.prototype.changed = function() {\n    var pos = this.find(), cm = this.doc.cm;\n    if (!pos || !cm) return;\n    if (this.type != \"bookmark\") pos = pos.from;\n    var line = getLine(this.doc, pos.line);\n    clearCachedMeasurement(cm, line);\n    if (pos.line >= cm.display.showingFrom && pos.line < cm.display.showingTo) {\n      for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) {\n        if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight);\n        break;\n      }\n      runInOp(cm, function() {\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = cm.curOp.updateMaxLine = true;\n      });\n    }\n  };\n\n  TextMarker.prototype.attachLine = function(line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n    }\n    this.lines.push(line);\n  };\n  TextMarker.prototype.detachLine = function(line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n\n  var nextMarkerId = 0;\n\n  function markText(doc, from, to, options, type) {\n    if (options && options.shared) return markTextShared(doc, from, to, options, type);\n    if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);\n\n    var marker = new TextMarker(doc, type);\n    if (options) copyObj(options, marker);\n    if (posLess(to, from) || posEq(from, to) && marker.clearWhenEmpty !== false)\n      return marker;\n    if (marker.replacedWith) {\n      marker.collapsed = true;\n      marker.replacedWith = elt(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true;\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n      sawCollapsedSpans = true;\n    }\n\n    if (marker.addToHistory)\n      addToHistory(doc, {from: from, to: to, origin: \"markText\"},\n                   {head: doc.sel.head, anchor: doc.sel.anchor}, NaN);\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function(line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine)\n        updateMaxLine = true;\n      var span = {from: null, to: null, marker: marker};\n      if (curLine == from.line) span.from = from.ch;\n      if (curLine == to.line) span.to = to.ch;\n      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);\n      addMarkedSpan(line, span);\n      ++curLine;\n    });\n    if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {\n      if (lineIsHidden(doc, line)) updateLineHeight(line, 0);\n    });\n\n    if (marker.clearOnEnter) on(marker, \"beforeCursorEnter\", function() { marker.clear(); });\n\n    if (marker.readOnly) {\n      sawReadOnlySpans = true;\n      if (doc.history.done.length || doc.history.undone.length)\n        doc.clearHistory();\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      if (updateMaxLine) cm.curOp.updateMaxLine = true;\n      if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.collapsed)\n        regChange(cm, from.line, to.line + 1);\n      if (marker.atomic) reCheckSelection(cm);\n    }\n    return marker;\n  }\n\n  // SHARED TEXTMARKERS\n\n  function SharedTextMarker(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0, me = this; i < markers.length; ++i) {\n      markers[i].parent = this;\n      on(markers[i], \"clear\", function(){me.clear();});\n    }\n  }\n  CodeMirror.SharedTextMarker = SharedTextMarker;\n  eventMixin(SharedTextMarker);\n\n  SharedTextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      this.markers[i].clear();\n    signalLater(this, \"clear\");\n  };\n  SharedTextMarker.prototype.find = function() {\n    return this.primary.find();\n  };\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.replacedWith;\n    linkedDocs(doc, function(doc) {\n      if (widget) options.replacedWith = widget.cloneNode(true);\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        if (doc.linked[i].isParent) return;\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary);\n  }\n\n  // TEXTMARKER SPANS\n\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) return span;\n    }\n  }\n  function removeMarkedSpan(spans, span) {\n    for (var r, i = 0; i < spans.length; ++i)\n      if (spans[i] != span) (r || (r = [])).push(spans[i]);\n    return r;\n  }\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  function markedSpansBefore(old, startCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n        (nw || (nw = [])).push({from: span.from,\n                                to: endsAfter ? null : span.to,\n                                marker: marker});\n      }\n    }\n    return nw;\n  }\n\n  function markedSpansAfter(old, endCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n        (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh,\n                                to: span.to == null ? null : span.to - endCh,\n                                marker: marker});\n      }\n    }\n    return nw;\n  }\n\n  function stretchSpansOverChange(doc, change) {\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) return null;\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to);\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) span.to = startCh;\n          else if (sameLine) span.to = found.to == null ? null : found.to + offset;\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i = 0; i < last.length; ++i) {\n        var span = last[i];\n        if (span.to != null) span.to += offset;\n        if (span.from == null) {\n          var found = getMarkedSpanFor(first, span.marker);\n          if (!found) {\n            span.from = offset;\n            if (sameLine) (first || (first = [])).push(span);\n          }\n        } else {\n          span.from += offset;\n          if (sameLine) (first || (first = [])).push(span);\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) first = clearEmptySpans(first);\n    if (last && last != first) last = clearEmptySpans(last);\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        for (var i = 0; i < first.length; ++i)\n          if (first[i].to == null)\n            (gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker});\n      for (var i = 0; i < gap; ++i)\n        newMarkers.push(gapMarkers);\n      newMarkers.push(last);\n    }\n    return newMarkers;\n  }\n\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        spans.splice(i--, 1);\n    }\n    if (!spans.length) return null;\n    return spans;\n  }\n\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) return stretched;\n    if (!stretched) return old;\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            if (oldCur[k].marker == span.marker) continue spans;\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old;\n  }\n\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function(line) {\n      if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          (markers || (markers = [])).push(mark);\n      }\n    });\n    if (!markers) return null;\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find();\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue;\n        var newParts = [j, 1];\n        if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from))\n          newParts.push({from: p.from, to: m.from});\n        if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to))\n          newParts.push({from: m.to, to: p.to});\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 1;\n      }\n    }\n    return parts;\n  }\n\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }\n\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) return lenDiff;\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) return -fromCmp;\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) return toCmp;\n    return b.id - a.id;\n  }\n\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        found = sp.marker;\n    }\n    return found;\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }\n\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      var found = sp.marker.find(true);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;\n      if (fromCmp <= 0 && (cmp(found.to, from) || extraRight(sp.marker) - extraLeft(marker)) > 0 ||\n          fromCmp >= 0 && (cmp(found.from, to) || extraLeft(sp.marker) - extraRight(marker)) < 0)\n        return true;\n    }\n  }\n\n  function visualLine(doc, line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      line = getLine(doc, merged.find().from.line);\n    return line;\n  }\n\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      if (sp.from == null) return true;\n      if (sp.marker.replacedWith) continue;\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        return true;\n    }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find().to, endLine = getLine(doc, end.line);\n      return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker));\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      return true;\n    for (var sp, i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) return true;\n    }\n  }\n\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.detachLine(line);\n    line.markedSpans = null;\n  }\n\n  function attachMarkedSpans(line, spans) {\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.attachLine(line);\n    line.markedSpans = spans;\n  }\n\n  // LINE WIDGETS\n\n  var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {\n    if (options) for (var opt in options) if (options.hasOwnProperty(opt))\n      this[opt] = options[opt];\n    this.cm = cm;\n    this.node = node;\n  };\n  eventMixin(LineWidget);\n  function widgetOperation(f) {\n    return function() {\n      var withOp = !this.cm.curOp;\n      if (withOp) startOperation(this.cm);\n      try {var result = f.apply(this, arguments);}\n      finally {if (withOp) endOperation(this.cm);}\n      return result;\n    };\n  }\n  LineWidget.prototype.clear = widgetOperation(function() {\n    var ws = this.line.widgets, no = lineNo(this.line);\n    if (no == null || !ws) return;\n    for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);\n    if (!ws.length) this.line.widgets = null;\n    var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop;\n    updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this)));\n    if (aboveVisible) addToScrollPos(this.cm, 0, -this.height);\n    regChange(this.cm, no, no + 1);\n  });\n  LineWidget.prototype.changed = widgetOperation(function() {\n    var oldH = this.height;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) return;\n    updateLineHeight(this.line, this.line.height + diff);\n    var no = lineNo(this.line);\n    regChange(this.cm, no, no + 1);\n  });\n\n  function widgetHeight(widget) {\n    if (widget.height != null) return widget.height;\n    if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1)\n      removeChildrenAndAdd(widget.cm.display.measure, elt(\"div\", [widget.node], null, \"position: relative\"));\n    return widget.height = widget.node.offsetHeight;\n  }\n\n  function addLineWidget(cm, handle, node, options) {\n    var widget = new LineWidget(cm, node, options);\n    if (widget.noHScroll) cm.display.alignWidgets = true;\n    changeLine(cm, handle, function(line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) widgets.push(widget);\n      else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n      widget.line = line;\n      if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) {\n        var aboveVisible = heightAtLine(cm, line) < cm.doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) addToScrollPos(cm, 0, widget.height);\n        cm.curOp.forceUpdate = true;\n      }\n      return true;\n    });\n    return widget;\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n  eventMixin(Line);\n  Line.prototype.lineNo = function() { return lineNo(this); };\n\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) line.stateAfter = null;\n    if (line.styles) line.styles = null;\n    if (line.order != null) line.order = null;\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) updateLineHeight(line, estHeight);\n  }\n\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Run the given mode's parser over a line, update the styles\n  // array, which contains alternating fragments of text and CSS\n  // classes.\n  function runMode(cm, text, mode, state, f, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize), style;\n    if (text == \"\" && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) processLine(cm, text, state, stream.pos);\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = mode.token(stream, state);\n      }\n      if (cm.options.addModeClass) {\n        var mName = CodeMirror.innerMode(mode, state).mode.name;\n        if (mName) style = \"m-\" + (style ? mName + \" \" + style : mName);\n      }\n      if (!flattenSpans || curStyle != style) {\n        if (curStart < stream.start) f(stream.start, curStyle);\n        curStart = stream.start; curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444 characters\n      var pos = Math.min(stream.pos, curStart + 50000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  function highlightLine(cm, line, state, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen];\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {\n      st.push(end, style);\n    }, forceToEnd);\n\n    // Run overlays, adjust style array.\n    for (var o = 0; o < cm.state.overlays.length; ++o) {\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      runMode(cm, line.text, overlay.mode, true, function(end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            st.splice(i, 1, end, st[i+1], i_end);\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) return;\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = cur ? cur + \" \" + style : style;\n          }\n        }\n      });\n    }\n\n    return st;\n  }\n\n  function getLineStyles(cm, line) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen)\n      line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));\n    return line.styles;\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array.\n  function processLine(cm, text, state, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\" && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {\n      mode.token(stream, state);\n      stream.start = stream.pos;\n    }\n  }\n\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, builder) {\n    if (!style) return null;\n    for (;;) {\n      var lineClass = style.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) break;\n      style = style.slice(0, lineClass.index) + style.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (builder[prop] == null)\n        builder[prop] = lineClass[2];\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(builder[prop]))\n        builder[prop] += \" \" + lineClass[2];\n    }\n    if (/^\\s*$/.test(style)) return null;\n    var cache = builder.cm.options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n  }\n\n  function buildLineContent(cm, realLine, measure, copyWidgets) {\n    var merged, line = realLine, empty = true;\n    while (merged = collapsedSpanAtStart(line))\n      line = getLine(cm.doc, merged.find().from.line);\n\n    var builder = {pre: elt(\"pre\"), col: 0, pos: 0,\n                   measure: null, measuredSomething: false, cm: cm,\n                   copyWidgets: copyWidgets};\n\n    do {\n      if (line.text) empty = false;\n      builder.measure = line == realLine && measure;\n      builder.pos = 0;\n      builder.addToken = builder.measure ? buildTokenMeasure : buildToken;\n      if ((ie || webkit) && cm.getOption(\"lineWrapping\"))\n        builder.addToken = buildTokenSplitSpaces(builder.addToken);\n      var next = insertLineContent(line, builder, getLineStyles(cm, line));\n      if (measure && line == realLine && !builder.measuredSomething) {\n        measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure));\n        builder.measuredSomething = true;\n      }\n      if (next) line = getLine(cm.doc, next.to.line);\n    } while (next);\n\n    if (measure && !builder.measuredSomething && !measure[0])\n      measure[0] = builder.pre.appendChild(empty ? elt(\"span\", \"\\u00a0\") : zeroWidthElement(cm.display.measure));\n    if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine))\n      builder.pre.appendChild(document.createTextNode(\"\\u00a0\"));\n\n    var order;\n    // Work around problem with the reported dimensions of single-char\n    // direction spans on IE (issue #1129). See also the comment in\n    // cursorCoords.\n    if (measure && ie && (order = getOrder(line))) {\n      var l = order.length - 1;\n      if (order[l].from == order[l].to) --l;\n      var last = order[l], prev = order[l - 1];\n      if (last.from + 1 == last.to && prev && last.level < prev.level) {\n        var span = measure[builder.pos - 1];\n        if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure),\n                                               span.nextSibling);\n      }\n    }\n\n    var textClass = builder.textClass ? builder.textClass + \" \" + (realLine.textClass || \"\") : realLine.textClass;\n    if (textClass) builder.pre.className = textClass;\n\n    signal(cm, \"renderLine\", cm, realLine, builder.pre);\n    return builder;\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    return token;\n  }\n\n  function buildToken(builder, text, style, startStyle, endStyle, title) {\n    if (!text) return;\n    var special = builder.cm.options.specialChars;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      var content = document.createTextNode(text);\n    } else {\n      var content = document.createDocumentFragment(), pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          content.appendChild(document.createTextNode(text.slice(pos, pos + skipped)));\n          builder.col += skipped;\n        }\n        if (!m) break;\n        pos += skipped + 1;\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          builder.col += tabWidth;\n        } else {\n          var token = builder.cm.options.specialCharPlaceholder(m[0]);\n          content.appendChild(token);\n          builder.col += 1;\n        }\n      }\n    }\n    if (style || startStyle || endStyle || builder.measure) {\n      var fullStyle = style || \"\";\n      if (startStyle) fullStyle += startStyle;\n      if (endStyle) fullStyle += endStyle;\n      var token = elt(\"span\", [content], fullStyle);\n      if (title) token.title = title;\n      return builder.pre.appendChild(token);\n    }\n    builder.pre.appendChild(content);\n  }\n\n  function buildTokenMeasure(builder, text, style, startStyle, endStyle) {\n    var wrapping = builder.cm.options.lineWrapping;\n    for (var i = 0; i < text.length; ++i) {\n      var start = i == 0, to = i + 1;\n      while (to < text.length && isExtendingChar(text.charAt(to))) ++to;\n      var ch = text.slice(i, to);\n      i = to - 1;\n      if (i && wrapping && spanAffectsWrapping(text, i))\n        builder.pre.appendChild(elt(\"wbr\"));\n      var old = builder.measure[builder.pos];\n      var span = builder.measure[builder.pos] =\n        buildToken(builder, ch, style,\n                   start && startStyle, i == text.length - 1 && endStyle);\n      if (old) span.leftSide = old.leftSide || old;\n      // In IE single-space nodes wrap differently than spaces\n      // embedded in larger text nodes, except when set to\n      // white-space: normal (issue #1268).\n      if (old_ie && wrapping && ch == \" \" && i && !/\\s/.test(text.charAt(i - 1)) &&\n          i < text.length - 1 && !/\\s/.test(text.charAt(i + 1)))\n        span.style.whiteSpace = \"normal\";\n      builder.pos += ch.length;\n    }\n    if (text.length) builder.measuredSomething = true;\n  }\n\n  function buildTokenSplitSpaces(inner) {\n    function split(old) {\n      var out = \" \";\n      for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? \" \" : \"\\u00a0\";\n      out += \" \";\n      return out;\n    }\n    return function(builder, text, style, startStyle, endStyle, title) {\n      return inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title);\n    };\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.replacedWith;\n    if (widget) {\n      if (builder.copyWidgets) widget = widget.cloneNode(true);\n      builder.pre.appendChild(widget);\n      if (builder.measure) {\n        if (size) {\n          builder.measure[builder.pos] = widget;\n        } else {\n          var elt = zeroWidthElement(builder.cm.display.measure);\n          if (marker.type == \"bookmark\" && !marker.insertLeft)\n            builder.measure[builder.pos] = builder.pre.appendChild(elt);\n          else if (builder.measure[builder.pos])\n            return;\n          else\n            builder.measure[builder.pos] = builder.pre.insertBefore(elt, widget);\n        }\n        builder.measuredSomething = true;\n      }\n    }\n    builder.pos += size;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i = 1; i < styles.length; i+=2)\n        builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder));\n      return;\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = title = \"\";\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [];\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (sp.from <= pos && (sp.to == null || sp.to > pos)) {\n            if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = \"\"; }\n            if (m.className) spanStyle += \" \" + m.className;\n            if (m.startStyle && sp.from == pos) spanStartStyle += \" \" + m.startStyle;\n            if (m.endStyle && sp.to == nextChange) spanEndStyle += \" \" + m.endStyle;\n            if (m.title && !title) title = m.title;\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              collapsed = sp;\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n          if (m.type == \"bookmark\" && sp.from == pos && m.replacedWith) foundBookmarks.push(m);\n        }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) return collapsed.marker.find();\n        }\n        if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j)\n          buildCollapsedSpan(builder, 0, foundBookmarks[j]);\n      }\n      if (pos >= len) break;\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder);\n      }\n    }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null;}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // First adjust the line structure\n    if (from.ch == 0 && to.ch == 0 && lastText == \"\" &&\n        (!doc.cm || doc.cm.options.wholeLineUpdateBefore)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      for (var i = 0, e = text.length - 1, added = []; i < e; ++i)\n        added.push(new Line(text[i], spansFor(i), estimateHeight));\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) doc.remove(from.line, nlines);\n      if (added.length) doc.insert(from.line, added);\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        for (var added = [], i = 1, e = text.length - 1; i < e; ++i)\n          added.push(new Line(text[i], spansFor(i), estimateHeight));\n        added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      for (var i = 1, e = text.length - 1, added = []; i < e; ++i)\n        added.push(new Line(text[i], spansFor(i), estimateHeight));\n      if (nlines > 1) doc.remove(from.line + 1, nlines - 1);\n      doc.insert(from.line + 1, added);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n    setSelection(doc, selAfter.anchor, selAfter.head, null, true);\n  }\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    for (var i = 0, e = lines.length, height = 0; i < e; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length; },\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n    collapse: function(lines) {\n      lines.splice.apply(lines, [lines.length, 0].concat(this.lines));\n    },\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;\n    },\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        if (op(this.lines[at])) return true;\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0, e = children.length; i < e; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size; },\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n      if (this.size - n < 25) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n    collapse: function(lines) {\n      for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);\n    },\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0, e = this.children.length; i < e; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            while (child.lines.length > 50) {\n              var spilled = child.lines.splice(child.lines.length - 25, 25);\n              var newleaf = new LeafChunk(spilled);\n              child.height -= newleaf.height;\n              this.children.splice(i + 1, 0, newleaf);\n              newleaf.parent = this;\n            }\n            this.maybeSpill();\n          }\n          break;\n        }\n        at -= sz;\n      }\n    },\n    maybeSpill: function() {\n      if (this.children.length <= 10) return;\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n        } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10);\n      me.parent.maybeSpill();\n    },\n    iterN: function(at, n, op) {\n      for (var i = 0, e = this.children.length; i < e; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) return true;\n          if ((n -= used) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n    }\n  };\n\n  var nextDocId = 0;\n  var Doc = CodeMirror.Doc = function(text, mode, firstLine) {\n    if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);\n    if (firstLine == null) firstLine = 0;\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.history = makeHistory();\n    this.cleanGeneration = 1;\n    this.frontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null};\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n\n    if (typeof text == \"string\") text = splitLines(text);\n    updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start});\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    iter: function(from, to, op) {\n      if (op) this.iterN(from - this.first, to - from, op);\n      else this.iterN(this.first, this.first + this.size, from);\n    },\n\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || \"\\n\");\n    },\n    setValue: function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: splitLines(code), origin: \"setValue\"},\n                 {head: top, anchor: top}, true);\n    },\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || \"\\n\");\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},\n    setLine: function(line, text) {\n      if (isLine(this, line))\n        replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line)));\n    },\n    removeLine: function(line) {\n      if (line) replaceRange(this, \"\", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line)));\n      else replaceRange(this, \"\", Pos(0, 0), clipPos(this, Pos(1, 0)));\n    },\n\n    getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},\n    getLineNumber: function(line) {return lineNo(line);},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") line = getLine(this, line);\n      return visualLine(this, line);\n    },\n\n    lineCount: function() {return this.size;},\n    firstLine: function() {return this.first;},\n    lastLine: function() {return this.first + this.size - 1;},\n\n    clipPos: function(pos) {return clipPos(this, pos);},\n\n    getCursor: function(start) {\n      var sel = this.sel, pos;\n      if (start == null || start == \"head\") pos = sel.head;\n      else if (start == \"anchor\") pos = sel.anchor;\n      else if (start == \"end\" || start === false) pos = sel.to;\n      else pos = sel.from;\n      return copyPos(pos);\n    },\n    somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);},\n\n    setCursor: docOperation(function(line, ch, extend) {\n      var pos = clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line);\n      if (extend) extendSelection(this, pos);\n      else setSelection(this, pos, pos);\n    }),\n    setSelection: docOperation(function(anchor, head, bias) {\n      setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), bias);\n    }),\n    extendSelection: docOperation(function(from, to, bias) {\n      extendSelection(this, clipPos(this, from), to && clipPos(this, to), bias);\n    }),\n\n    getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);},\n    replaceSelection: function(code, collapse, origin) {\n      makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || \"around\");\n    },\n    undo: docOperation(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docOperation(function() {makeChangeFromHistory(this, \"redo\");}),\n\n    setExtending: function(val) {this.sel.extend = val;},\n\n    historySize: function() {\n      var hist = this.history;\n      return {undo: hist.done.length, redo: hist.undone.length};\n    },\n    clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);},\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        this.history.lastOp = this.history.lastOrigin = null;\n      return this.history.generation;\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration);\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)};\n    },\n    setHistory: function(histData) {\n      var hist = this.history = makeHistory(this.history.maxGeneration);\n      hist.done = histData.done.slice(0);\n      hist.undone = histData.undone.slice(0);\n    },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, \"range\");\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\");\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          markers.push(span.marker.parent || span.marker);\n      }\n      return markers;\n    },\n    findMarks: function(from, to) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function(line) {\n        var spans = line.markedSpans;\n        if (spans) for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(lineNo == from.line && from.ch > span.to ||\n                span.from == null && lineNo != from.line||\n                lineNo == to.line && span.from > to.ch))\n            found.push(span.marker.parent || span.marker);\n        }\n        ++lineNo;\n      });\n      return found;\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function(line) {\n        var sps = line.markedSpans;\n        if (sps) for (var i = 0; i < sps.length; ++i)\n          if (sps[i].from != null) markers.push(sps[i].marker);\n      });\n      return markers;\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first;\n      this.iter(function(line) {\n        var sz = line.text.length + 1;\n        if (sz > off) { ch = off; return true; }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch));\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) return 0;\n      this.iter(this.first, coords.line, function (line) {\n        index += line.text.length + 1;\n      });\n      return index;\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = {from: this.sel.from, to: this.sel.to, head: this.sel.head, anchor: this.sel.anchor,\n                 shift: this.sel.shift, extend: false, goalColumn: this.sel.goalColumn};\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc;\n    },\n\n    linkedDoc: function(options) {\n      if (!options) options = {};\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) from = options.from;\n      if (options.to != null && options.to < to) to = options.to;\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from);\n      if (options.sharedHist) copy.history = this.history;\n      (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      return copy;\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) other = other.doc;\n      if (this.linked) for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) continue;\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        break;\n      }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);\n        other.history = makeHistory();\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode;},\n    getEditor: function() {return this.cm;}\n  });\n\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // The Doc methods that should be available on CodeMirror instances\n  var dontDelegate = \"iter insert remove copy getEditor\".split(\" \");\n  for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments);};\n    })(Doc.prototype[prop]);\n\n  eventMixin(Doc);\n\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) continue;\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) continue;\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      }\n    }\n    propagate(doc, null, true);\n  }\n\n  function attachDoc(cm, doc) {\n    if (doc.cm) throw new Error(\"This document is already in use.\");\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    if (!cm.options.lineWrapping) computeMaxLength(cm);\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  // LINE UTILITIES\n\n  function getLine(chunk, n) {\n    n -= chunk.first;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break; }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n];\n  }\n\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function(line) {\n      var text = line.text;\n      if (n == end.line) text = text.slice(0, end.ch);\n      if (n == start.line) text = text.slice(start.ch);\n      out.push(text);\n      ++n;\n    });\n    return out;\n  }\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function(line) { out.push(line.text); });\n    return out;\n  }\n\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    for (var n = line; n; n = n.parent) n.height += diff;\n  }\n\n  function lineNo(line) {\n    if (line.parent == null) return null;\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) break;\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first;\n  }\n\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i = 0, e = chunk.children.length; i < e; ++i) {\n        var child = chunk.children[i], ch = child.height;\n        if (h < ch) { chunk = child; continue outer; }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n;\n    } while (!chunk.lines);\n    for (var i = 0, e = chunk.lines.length; i < e; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) break;\n      h -= lh;\n    }\n    return n + i;\n  }\n\n  function heightAtLine(cm, lineObj) {\n    lineObj = visualLine(cm.doc, lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) break;\n      else h += line.height;\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i = 0; i < p.children.length; ++i) {\n        var cur = p.children[i];\n        if (cur == chunk) break;\n        else h += cur.height;\n      }\n    }\n    return h;\n  }\n\n  function getOrder(line) {\n    var order = line.order;\n    if (order == null) order = line.order = bidiOrdering(line.text);\n    return order;\n  }\n\n  // HISTORY\n\n  function makeHistory(startGen) {\n    return {\n      // Arrays of history events. Doing something adds an event to\n      // done and clears undo. Undoing moves events from done to\n      // undone, redoing moves them in the other direction.\n      done: [], undone: [], undoDepth: Infinity,\n      // Used to track when changes can be merged into a single undo\n      // event\n      lastTime: 0, lastOp: null, lastOrigin: null,\n      // Used by the isClean() method\n      generation: startGen || 1, maxGeneration: startGen || 1\n    };\n  }\n\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {\n      if (line.markedSpans)\n        (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n      ++n;\n    });\n  }\n\n  function historyChangeFromChange(doc, change) {\n    var from = { line: change.from.line, ch: change.from.ch };\n    var histChange = {from: from, to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);\n    return histChange;\n  }\n\n  function addToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur = lst(hist.done);\n\n    if (cur &&\n        (hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastTime > time - doc.cm.options.historyEventDelay) ||\n          change.origin.charAt(0) == \"*\"))) {\n      // Merge this change into the last event\n      var last = lst(cur.changes);\n      if (posEq(change.from, change.to) && posEq(change.from, last.to)) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n      cur.anchorAfter = selAfter.anchor; cur.headAfter = selAfter.head;\n    } else {\n      // Can not be merged, start a new event.\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation,\n             anchorBefore: doc.sel.anchor, headBefore: doc.sel.head,\n             anchorAfter: selAfter.anchor, headAfter: selAfter.head};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth)\n        hist.done.shift();\n    }\n    hist.generation = ++hist.maxGeneration;\n    hist.lastTime = time;\n    hist.lastOp = opId;\n    hist.lastOrigin = change.origin;\n\n    if (!last) signal(doc, \"historyAdded\");\n  }\n\n  function removeClearedSpans(spans) {\n    if (!spans) return null;\n    for (var i = 0, out; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }\n      else if (out) out.push(spans[i]);\n    }\n    return !out ? spans : out.length ? out : null;\n  }\n\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) return null;\n    for (var i = 0, nw = []; i < change.text.length; ++i)\n      nw.push(removeClearedSpans(found[i]));\n    return nw;\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup) {\n    for (var i = 0, copy = []; i < events.length; ++i) {\n      var event = events[i], changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges, anchorBefore: event.anchorBefore, headBefore: event.headBefore,\n                 anchorAfter: event.anchorAfter, headAfter: event.headAfter});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m;\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        }\n      }\n    }\n    return copy;\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSel(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      for (var j = 0; j < sub.changes.length; ++j) {\n        var cur = sub.changes[j];\n        if (!sub.copied) { cur.from = copyPos(cur.from); cur.to = copyPos(cur.to); }\n        if (to < cur.from.line) {\n          cur.from.line += diff;\n          cur.to.line += diff;\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break;\n        }\n      }\n      if (!sub.copied) {\n        sub.anchorBefore = copyPos(sub.anchorBefore); sub.headBefore = copyPos(sub.headBefore);\n        sub.anchorAfter = copyPos(sub.anchorAfter); sub.readAfter = copyPos(sub.headAfter);\n        sub.copied = true;\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      } else {\n        rebaseHistSel(sub.anchorBefore); rebaseHistSel(sub.headBefore);\n        rebaseHistSel(sub.anchorAfter); rebaseHistSel(sub.headAfter);\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // EVENT OPERATORS\n\n  function stopMethod() {e_stop(this);}\n  // Ensure an event has a stop method.\n  function addStop(event) {\n    if (!event.stop) event.stop = stopMethod;\n    return event;\n  }\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) e.stopPropagation();\n    else e.cancelBubble = true;\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n  CodeMirror.e_stop = e_stop;\n  CodeMirror.e_preventDefault = e_preventDefault;\n  CodeMirror.e_stopPropagation = e_stopPropagation;\n\n  function e_target(e) {return e.target || e.srcElement;}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) b = 1;\n      else if (e.button & 2) b = 3;\n      else if (e.button & 4) b = 2;\n    }\n    if (mac && e.ctrlKey && b == 1) b = 3;\n    return b;\n  }\n\n  // EVENT HANDLING\n\n  function on(emitter, type, f) {\n    if (emitter.addEventListener)\n      emitter.addEventListener(type, f, false);\n    else if (emitter.attachEvent)\n      emitter.attachEvent(\"on\" + type, f);\n    else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      var arr = map[type] || (map[type] = []);\n      arr.push(f);\n    }\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener)\n      emitter.removeEventListener(type, f, false);\n    else if (emitter.detachEvent)\n      emitter.detachEvent(\"on\" + type, f);\n    else {\n      var arr = emitter._handlers && emitter._handlers[type];\n      if (!arr) return;\n      for (var i = 0; i < arr.length; ++i)\n        if (arr[i] == f) { arr.splice(i, 1); break; }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    if (!arr) return;\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args);\n  }\n\n  var delayedCallbacks, delayedCallbackDepth = 0;\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    if (!arr) return;\n    var args = Array.prototype.slice.call(arguments, 2);\n    if (!delayedCallbacks) {\n      ++delayedCallbackDepth;\n      delayedCallbacks = [];\n      setTimeout(fireDelayed, 0);\n    }\n    function bnd(f) {return function(){f.apply(null, args);};};\n    for (var i = 0; i < arr.length; ++i)\n      delayedCallbacks.push(bnd(arr[i]));\n  }\n\n  function signalDOMEvent(cm, e, override) {\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore;\n  }\n\n  function fireDelayed() {\n    --delayedCallbackDepth;\n    var delayed = delayedCallbacks;\n    delayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) delayed[i]();\n  }\n\n  function hasHandler(emitter, type) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    return arr && arr.length > 0;\n  }\n\n  CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal;\n\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // MISC UTILITIES\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerCutOff = 30;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = CodeMirror.Pass = {toString: function(){return \"CodeMirror.Pass\";}};\n\n  function Delayed() {this.id = null;}\n  Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) end = string.length;\n    }\n    for (var i = startIndex || 0, n = startValue || 0; i < end; ++i) {\n      if (string.charAt(i) == \"\\t\") n += tabSize - (n % tabSize);\n      else ++n;\n    }\n    return n;\n  }\n  CodeMirror.countColumn = countColumn;\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      spaceStrs.push(lst(spaceStrs) + \" \");\n    return spaceStrs[n];\n  }\n\n  function lst(arr) { return arr[arr.length-1]; }\n\n  function selectInput(node) {\n    if (ios) { // Mobile Safari apparently has a bug where select() is broken.\n      node.selectionStart = 0;\n      node.selectionEnd = node.value.length;\n    } else {\n      // Suppress mysterious IE10 errors\n      try { node.select(); }\n      catch(_e) {}\n    }\n  }\n\n  function indexOf(collection, elt) {\n    if (collection.indexOf) return collection.indexOf(elt);\n    for (var i = 0, e = collection.length; i < e; ++i)\n      if (collection[i] == elt) return i;\n    return -1;\n  }\n\n  function createObj(base, props) {\n    function Obj() {}\n    Obj.prototype = base;\n    var inst = new Obj();\n    if (props) copyObj(props, inst);\n    return inst;\n  }\n\n  function copyObj(obj, target) {\n    if (!target) target = {};\n    for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];\n    return target;\n  }\n\n  function emptyArray(size) {\n    for (var a = [], i = 0; i < size; ++i) a.push(undefined);\n    return a;\n  }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args);};\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordChar(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;\n    return true;\n  }\n\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }\n\n  // DOM UTILITIES\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") setTextContent(e, content);\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      e.removeChild(e.firstChild);\n    return e;\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e);\n  }\n\n  function setTextContent(e, str) {\n    if (ie_lt9) {\n      e.innerHTML = \"\";\n      e.appendChild(document.createTextNode(str));\n    } else e.textContent = str;\n  }\n\n  function getRect(node) {\n    return node.getBoundingClientRect();\n  }\n  CodeMirror.replaceGetRect = function(f) { getRect = f; };\n\n  // FEATURE DETECTION\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie_lt9) return false;\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div;\n  }();\n\n  // For a reason I have yet to figure out, some browsers disallow\n  // word wrapping between certain characters *only* if a new inline\n  // element is started between them. This makes it hard to reliably\n  // measure the position of things, since that requires inserting an\n  // extra span. This terribly fragile set of tests matches the\n  // character combinations that suffer from this phenomenon on the\n  // various browsers.\n  function spanAffectsWrapping() { return false; }\n  if (gecko) // Only for \"$'\"\n    spanAffectsWrapping = function(str, i) {\n      return str.charCodeAt(i - 1) == 36 && str.charCodeAt(i) == 39;\n    };\n  else if (safari && !/Version\\/([6-9]|\\d\\d)\\b/.test(navigator.userAgent))\n    spanAffectsWrapping = function(str, i) {\n      return /\\-[^ \\-?]|\\?[^ !\\'\\\"\\),.\\-\\/:;\\?\\]\\}]/.test(str.slice(i - 1, i + 1));\n    };\n  else if (webkit && /Chrome\\/(?:29|[3-9]\\d|\\d\\d\\d)\\./.test(navigator.userAgent))\n    spanAffectsWrapping = function(str, i) {\n      var code = str.charCodeAt(i - 1);\n      return code >= 8208 && code <= 8212;\n    };\n  else if (webkit)\n    spanAffectsWrapping = function(str, i) {\n      if (i > 1 && str.charCodeAt(i - 1) == 45) {\n        if (/\\w/.test(str.charAt(i - 2)) && /[^\\-?\\.]/.test(str.charAt(i))) return true;\n        if (i > 2 && /[\\d\\.,]/.test(str.charAt(i - 2)) && /[\\d\\.,]/.test(str.charAt(i))) return false;\n      }\n      return /[~!#%&*)=+}\\]\\\\|\\\"\\.>,:;][({[<]|-[^\\-?\\.\\u2010-\\u201f\\u2026]|\\?[\\w~`@#$%\\^&*(_=+{[|><]|\\u2026[\\w~`@#$%\\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1));\n    };\n\n  var knownScrollbarWidth;\n  function scrollbarWidth(measure) {\n    if (knownScrollbarWidth != null) return knownScrollbarWidth;\n    var test = elt(\"div\", null, null, \"width: 50px; height: 50px; overflow-x: scroll\");\n    removeChildrenAndAdd(measure, test);\n    if (test.offsetWidth)\n      knownScrollbarWidth = test.offsetHeight - test.clientHeight;\n    return knownScrollbarWidth || 0;\n  }\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8;\n    }\n    if (zwspSupported) return elt(\"span\", \"\\u200b\");\n    else return elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) nl = string.length;\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result;\n  } : function(string){return string.split(/\\r\\n?|\\n/);};\n  CodeMirror.splitLines = splitLines;\n\n  var hasSelection = window.getSelection ? function(te) {\n    try { return te.selectionStart != te.selectionEnd; }\n    catch(e) { return false; }\n  } : function(te) {\n    try {var range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) return false;\n    return range.compareEndPoints(\"StartToEnd\", range) != 0;\n  };\n\n  var hasCopyEvent = (function() {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) return true;\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == 'function';\n  })();\n\n  // KEY NAMING\n\n  var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n                  19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n                  36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n                  46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 107: \"=\", 109: \"-\", 127: \"Delete\",\n                  173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n                  221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n                  63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"};\n  CodeMirror.keyNames = keyNames;\n  (function() {\n    // Number keys\n    for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);\n    // Alphabetic keys\n    for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n    // Function keys\n    for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n  })();\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) return f(from, to, \"ltr\");\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\");\n        found = true;\n      }\n    }\n    if (!found) f(from, to, \"ltr\");\n  }\n\n  function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }\n  function bidiRight(part) { return part.level % 2 ? part.from : part.to; }\n\n  function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }\n  function lineRight(line) {\n    var order = getOrder(line);\n    if (!order) return line.text.length;\n    return bidiRight(lst(order));\n  }\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(cm.doc, line);\n    if (visual != line) lineN = lineNo(visual);\n    var order = getOrder(visual);\n    var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);\n    return Pos(lineN, ch);\n  }\n  function lineEnd(cm, lineN) {\n    var merged, line;\n    while (merged = collapsedSpanAtEnd(line = getLine(cm.doc, lineN)))\n      lineN = merged.find().to.line;\n    var order = getOrder(line);\n    var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);\n    return Pos(lineN, ch);\n  }\n\n  function compareBidiLevel(order, a, b) {\n    var linedir = order[0].level;\n    if (a == linedir) return true;\n    if (b == linedir) return false;\n    return a < b;\n  }\n  var bidiOther;\n  function getBidiPartAt(order, pos) {\n    bidiOther = null;\n    for (var i = 0, found; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < pos && cur.to > pos) return i;\n      if ((cur.from == pos || cur.to == pos)) {\n        if (found == null) {\n          found = i;\n        } else if (compareBidiLevel(order, cur.level, order[found].level)) {\n          if (cur.from != cur.to) bidiOther = found;\n          return i;\n        } else {\n          if (cur.from != cur.to) bidiOther = i;\n          return found;\n        }\n      }\n    }\n    return found;\n  }\n\n  function moveInLine(line, pos, dir, byUnit) {\n    if (!byUnit) return pos + dir;\n    do pos += dir;\n    while (pos > 0 && isExtendingChar(line.text.charAt(pos)));\n    return pos;\n  }\n\n  // This is somewhat involved. It is needed in order to move\n  // 'visually' through bi-directional text -- i.e., pressing left\n  // should make the cursor go left, even when in RTL text. The\n  // tricky part is the 'jumps', where RTL and LTR text touch each\n  // other. This often requires the cursor offset to move more than\n  // one unit, in order to visually move one unit.\n  function moveVisually(line, start, dir, byUnit) {\n    var bidi = getOrder(line);\n    if (!bidi) return moveLogically(line, start, dir, byUnit);\n    var pos = getBidiPartAt(bidi, start), part = bidi[pos];\n    var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);\n\n    for (;;) {\n      if (target > part.from && target < part.to) return target;\n      if (target == part.from || target == part.to) {\n        if (getBidiPartAt(bidi, target) == pos) return target;\n        part = bidi[pos += dir];\n        return (dir > 0) == part.level % 2 ? part.to : part.from;\n      } else {\n        part = bidi[pos += dir];\n        if (!part) return null;\n        if ((dir > 0) == part.level % 2)\n          target = moveInLine(line, part.to, -1, byUnit);\n        else\n          target = moveInLine(line, part.from, 1, byUnit);\n      }\n    }\n  }\n\n  function moveLogically(line, start, dir, byUnit) {\n    var target = start + dir;\n    if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;\n    return target < 0 || target > line.text.length ? null : target;\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL\";\n    // Character types for codepoints 0x600 to 0x6ff\n    var arabicTypes = \"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr\";\n    function charType(code) {\n      if (code <= 0xff) return lowTypes.charAt(code);\n      else if (0x590 <= code && code <= 0x5f4) return \"R\";\n      else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600);\n      else if (0x700 <= code && code <= 0x8ac) return \"r\";\n      else return \"L\";\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n    // Browsers seem to always treat the boundaries of block elements as being L.\n    var outerType = \"L\";\n\n    return function(str) {\n      if (!bidiRE.test(str)) return false;\n      var len = str.length, types = [];\n      for (var i = 0, type; i < len; ++i)\n        types.push(type = charType(str.charCodeAt(i)));\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i = 0, prev = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"m\") types[i] = prev;\n        else prev = type;\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"1\" && cur == \"r\") types[i] = \"n\";\n        else if (isStrong.test(type)) { cur = type; if (type == \"r\") types[i] = \"R\"; }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i = 1, prev = types[0]; i < len - 1; ++i) {\n        var type = types[i];\n        if (type == \"+\" && prev == \"1\" && types[i+1] == \"1\") types[i] = \"1\";\n        else if (type == \",\" && prev == types[i+1] &&\n                 (prev == \"1\" || prev == \"n\")) types[i] = prev;\n        prev = type;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i = 0; i < len; ++i) {\n        var type = types[i];\n        if (type == \",\") types[i] = \"N\";\n        else if (type == \"%\") {\n          for (var end = i + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i && types[i-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (cur == \"L\" && type == \"1\") types[i] = \"L\";\n        else if (isStrong.test(type)) cur = type;\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i = 0; i < len; ++i) {\n        if (isNeutral.test(types[i])) {\n          for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}\n          var before = (i ? types[i-1] : outerType) == \"L\";\n          var after = (end < len ? types[end] : outerType) == \"L\";\n          var replace = before || after ? \"L\" : \"R\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i = 0; i < len;) {\n        if (countsAsLeft.test(types[i])) {\n          var start = i;\n          for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}\n          order.push({from: start, to: i, level: 0});\n        } else {\n          var pos = i, at = order.length;\n          for (++i; i < len && types[i] != \"L\"; ++i) {}\n          for (var j = pos; j < i;) {\n            if (countsAsNum.test(types[j])) {\n              if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1});\n              var nstart = j;\n              for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n              order.splice(at, 0, {from: nstart, to: j, level: 2});\n              pos = j;\n            } else ++j;\n          }\n          if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1});\n        }\n      }\n      if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n        order[0].from = m[0].length;\n        order.unshift({from: 0, to: m[0].length, level: 0});\n      }\n      if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n        lst(order).to -= m[0].length;\n        order.push({from: len - m[0].length, to: len, level: 0});\n      }\n      if (order[0].level != lst(order).level)\n        order.push({from: len, to: len, level: order[0].level});\n\n      return order;\n    };\n  })();\n\n  // THE END\n\n  CodeMirror.version = \"3.22.0\";\n\n  return CodeMirror;\n})();\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/CodeMirror/mode/clike.js",
    "content": "CodeMirror.defineMode(\"clike\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit,\n      statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,\n      dontAlignCalls = parserConfig.dontAlignCalls,\n      keywords = parserConfig.keywords || {},\n      builtin = parserConfig.builtin || {},\n      blockKeywords = parserConfig.blockKeywords || {},\n      atoms = parserConfig.atoms || {},\n      hooks = parserConfig.hooks || {},\n      multiLineStrings = parserConfig.multiLineStrings;\n  var isOperatorChar = /[+\\-*&%=<>!?|\\/]/;\n\n  var curPunc;\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (hooks[ch]) {\n      var result = hooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n    if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      curPunc = ch;\n      return null;\n    }\n    if (/\\d/.test(ch)) {\n      stream.eatWhile(/[\\w\\.]/);\n      return \"number\";\n    }\n    if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n    }\n    if (isOperatorChar.test(ch)) {\n      stream.eatWhile(isOperatorChar);\n      return \"operator\";\n    }\n    stream.eatWhile(/[\\w\\$_]/);\n    var cur = stream.current();\n    if (keywords.propertyIsEnumerable(cur)) {\n      if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n      return \"keyword\";\n    }\n    if (builtin.propertyIsEnumerable(cur)) {\n      if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n      return \"builtin\";\n    }\n    if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n    return \"variable\";\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {end = true; break;}\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end || !(escaped || multiLineStrings))\n        state.tokenize = null;\n      return \"string\";\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function Context(indented, column, type, align, prev) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.align = align;\n    this.prev = prev;\n  }\n  function pushContext(state, col, type) {\n    var indent = state.indented;\n    if (state.context && state.context.type == \"statement\")\n      indent = state.context.indented;\n    return state.context = new Context(indent, col, type, null, state.context);\n  }\n  function popContext(state) {\n    var t = state.context.type;\n    if (t == \")\" || t == \"]\" || t == \"}\")\n      state.indented = state.context.indented;\n    return state.context = state.context.prev;\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      return {\n        tokenize: null,\n        context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", false),\n        indented: 0,\n        startOfLine: true\n      };\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n      }\n      if (stream.eatSpace()) return null;\n      curPunc = null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style == \"comment\" || style == \"meta\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if ((curPunc == \";\" || curPunc == \":\" || curPunc == \",\") && ctx.type == \"statement\") popContext(state);\n      else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n      else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n      else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n      else if (curPunc == \"}\") {\n        while (ctx.type == \"statement\") ctx = popContext(state);\n        if (ctx.type == \"}\") ctx = popContext(state);\n        while (ctx.type == \"statement\") ctx = popContext(state);\n      }\n      else if (curPunc == ctx.type) popContext(state);\n      else if (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != ';') || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n        pushContext(state, stream.column(), \"statement\");\n      state.startOfLine = false;\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;\n      var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n      if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n      var closing = firstChar == ctx.type;\n      if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit);\n      else if (ctx.align && (!dontAlignCalls || ctx.type != \")\")) return ctx.column + (closing ? 0 : 1);\n      else if (ctx.type == \")\" && !closing) return ctx.indented + statementIndentUnit;\n      else return ctx.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricChars: \"{}\",\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    lineComment: \"//\",\n    fold: \"brace\"\n  };\n});\n\n(function() {\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n  var cKeywords = \"auto if break int case long char register continue return default short do sizeof \" +\n    \"double static else struct entry switch extern typedef float union for unsigned \" +\n    \"goto while enum void const signed volatile\";\n\n  function cppHook(stream, state) {\n    if (!state.startOfLine) return false;\n    for (;;) {\n      if (stream.skipTo(\"\\\\\")) {\n        stream.next();\n        if (stream.eol()) {\n          state.tokenize = cppHook;\n          break;\n        }\n      } else {\n        stream.skipToEnd();\n        state.tokenize = null;\n        break;\n      }\n    }\n    return \"meta\";\n  }\n\n  // C#-style strings where \"\" escapes a quote.\n  function tokenAtString(stream, state) {\n    var next;\n    while ((next = stream.next()) != null) {\n      if (next == '\"' && !stream.eat('\"')) {\n        state.tokenize = null;\n        break;\n      }\n    }\n    return \"string\";\n  }\n\n  function def(mimes, mode) {\n    var words = [];\n    function add(obj) {\n      if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop))\n        words.push(prop);\n    }\n    add(mode.keywords);\n    add(mode.builtin);\n    add(mode.atoms);\n    if (words.length) {\n      mode.helperType = mimes[0];\n      CodeMirror.registerHelper(\"hintWords\", mimes[0], words);\n    }\n\n    for (var i = 0; i < mimes.length; ++i)\n      CodeMirror.defineMIME(mimes[i], mode);\n  }\n\n  def([\"text/x-csrc\", \"text/x-c\", \"text/x-chdr\"], {\n    name: \"clike\",\n    keywords: words(cKeywords),\n    blockKeywords: words(\"case do else for if switch while struct\"),\n    atoms: words(\"null\"),\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def([\"text/x-c++src\", \"text/x-c++hdr\"], {\n    name: \"clike\",\n    keywords: words(cKeywords + \" asm dynamic_cast namespace reinterpret_cast try bool explicit new \" +\n                    \"static_cast typeid catch operator template typename class friend private \" +\n                    \"this using const_cast inline public throw virtual delete mutable protected \" +\n                    \"wchar_t\"),\n    blockKeywords: words(\"catch class do else finally for if struct switch try while\"),\n    atoms: words(\"true false null\"),\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n  CodeMirror.defineMIME(\"text/x-java\", {\n    name: \"clike\",\n    keywords: words(\"abstract assert boolean break byte case catch char class const continue default \" +\n                    \"do double else enum extends final finally float for goto if implements import \" +\n                    \"instanceof int interface long native new package private protected public \" +\n                    \"return short static strictfp super switch synchronized this throw throws transient \" +\n                    \"try void volatile while\"),\n    blockKeywords: words(\"catch class do else finally for if switch try while\"),\n    atoms: words(\"true false null\"),\n    hooks: {\n      \"@\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      }\n    },\n    modeProps: {fold: [\"brace\", \"import\"]}\n  });\n  CodeMirror.defineMIME(\"text/x-csharp\", {\n    name: \"clike\",\n    keywords: words(\"abstract as base break case catch checked class const continue\" +\n                    \" default delegate do else enum event explicit extern finally fixed for\" +\n                    \" foreach goto if implicit in interface internal is lock namespace new\" +\n                    \" operator out override params private protected public readonly ref return sealed\" +\n                    \" sizeof stackalloc static struct switch this throw try typeof unchecked\" +\n                    \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" +\n                    \" global group into join let orderby partial remove select set value var yield\"),\n    blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n    builtin: words(\"Boolean Byte Char DateTime DateTimeOffset Decimal Double\" +\n                    \" Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32\" +\n                    \" UInt64 bool byte char decimal double short int long object\"  +\n                    \" sbyte float string ushort uint ulong\"),\n    atoms: words(\"true false null\"),\n    hooks: {\n      \"@\": function(stream, state) {\n        if (stream.eat('\"')) {\n          state.tokenize = tokenAtString;\n          return tokenAtString(stream, state);\n        }\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      }\n    }\n  });\n  CodeMirror.defineMIME(\"text/x-scala\", {\n    name: \"clike\",\n    keywords: words(\n\n      /* scala */\n      \"abstract case catch class def do else extends false final finally for forSome if \" +\n      \"implicit import lazy match new null object override package private protected return \" +\n      \"sealed super this throw trait try trye type val var while with yield _ : = => <- <: \" +\n      \"<% >: # @ \" +\n\n      /* package scala */\n      \"assert assume require print println printf readLine readBoolean readByte readShort \" +\n      \"readChar readInt readLong readFloat readDouble \" +\n\n      \"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" +\n      \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable \" +\n      \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" +\n      \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" +\n      \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: \" +\n\n      /* package java.lang */\n      \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"\n\n\n    ),\n    blockKeywords: words(\"catch class do else finally for forSome if match switch try while\"),\n    atoms: words(\"true false null\"),\n    hooks: {\n      \"@\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      }\n    }\n  });\n  def([\"x-shader/x-vertex\", \"x-shader/x-fragment\"], {\n    name: \"clike\",\n    keywords: words(\"float int bool void \" +\n                    \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" +\n                    \"mat2 mat3 mat4 \" +\n                    \"sampler1D sampler2D sampler3D samplerCube \" +\n                    \"sampler1DShadow sampler2DShadow\" +\n                    \"const attribute uniform varying \" +\n                    \"break continue discard return \" +\n                    \"for while do if else struct \" +\n                    \"in out inout\"),\n    blockKeywords: words(\"for while do if else struct\"),\n    builtin: words(\"radians degrees sin cos tan asin acos atan \" +\n                    \"pow exp log exp2 sqrt inversesqrt \" +\n                    \"abs sign floor ceil fract mod min max clamp mix step smootstep \" +\n                    \"length distance dot cross normalize ftransform faceforward \" +\n                    \"reflect refract matrixCompMult \" +\n                    \"lessThan lessThanEqual greaterThan greaterThanEqual \" +\n                    \"equal notEqual any all not \" +\n                    \"texture1D texture1DProj texture1DLod texture1DProjLod \" +\n                    \"texture2D texture2DProj texture2DLod texture2DProjLod \" +\n                    \"texture3D texture3DProj texture3DLod texture3DProjLod \" +\n                    \"textureCube textureCubeLod \" +\n                    \"shadow1D shadow2D shadow1DProj shadow2DProj \" +\n                    \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" +\n                    \"dFdx dFdy fwidth \" +\n                    \"noise1 noise2 noise3 noise4\"),\n    atoms: words(\"true false \" +\n                \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" +\n                \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" +\n                \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" +\n                \"gl_FogCoord \" +\n                \"gl_Position gl_PointSize gl_ClipVertex \" +\n                \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" +\n                \"gl_TexCoord gl_FogFragCoord \" +\n                \"gl_FragCoord gl_FrontFacing \" +\n                \"gl_FragColor gl_FragData gl_FragDepth \" +\n                \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" +\n                \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" +\n                \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" +\n                \"gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" +\n                \"gl_ProjectionMatrixInverseTranspose \" +\n                \"gl_ModelViewProjectionMatrixInverseTranspose \" +\n                \"gl_TextureMatrixInverseTranspose \" +\n                \"gl_NormalScale gl_DepthRange gl_ClipPlane \" +\n                \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" +\n                \"gl_FrontLightModelProduct gl_BackLightModelProduct \" +\n                \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" +\n                \"gl_FogParameters \" +\n                \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" +\n                \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" +\n                \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" +\n                \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" +\n                \"gl_MaxDrawBuffers\"),\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n}());\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/CodeMirror/mode/javascript.js",
    "content": "// TODO actually recognize syntax of TypeScript constructs\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var statementIndent = parserConfig.statementIndent;\n  var jsonldMode = parserConfig.jsonld;\n  var jsonMode = parserConfig.json || jsonldMode;\n  var isTS = parserConfig.typescript;\n\n  // Tokenizer\n\n  var keywords = function(){\n    function kw(type) {return {type: type, style: \"keyword\"};}\n    var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n    var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n    var jsKeywords = {\n      \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n      \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C, \"debugger\": C,\n      \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n      \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n      \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n      \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n      \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n      \"this\": kw(\"this\"), \"module\": kw(\"module\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n      \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C\n    };\n\n    // Extend the 'normal' keywords with the TypeScript language extensions\n    if (isTS) {\n      var type = {type: \"variable\", style: \"variable-3\"};\n      var tsKeywords = {\n        // object-like things\n        \"interface\": kw(\"interface\"),\n        \"extends\": kw(\"extends\"),\n        \"constructor\": kw(\"constructor\"),\n\n        // scope modifiers\n        \"public\": kw(\"public\"),\n        \"private\": kw(\"private\"),\n        \"protected\": kw(\"protected\"),\n        \"static\": kw(\"static\"),\n\n        // types\n        \"string\": type, \"number\": type, \"bool\": type, \"any\": type\n      };\n\n      for (var attr in tsKeywords) {\n        jsKeywords[attr] = tsKeywords[attr];\n      }\n    }\n\n    return jsKeywords;\n  }();\n\n  var isOperatorChar = /[+\\-*&%=<>!?|~^]/;\n  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n  function readRegexp(stream) {\n    var escaped = false, next, inSet = false;\n    while ((next = stream.next()) != null) {\n      if (!escaped) {\n        if (next == \"/\" && !inSet) return;\n        if (next == \"[\") inSet = true;\n        else if (inSet && next == \"]\") inSet = false;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n      return ret(\"number\", \"number\");\n    } else if (ch == \".\" && stream.match(\"..\")) {\n      return ret(\"spread\", \"meta\");\n    } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      return ret(ch);\n    } else if (ch == \"=\" && stream.eat(\">\")) {\n      return ret(\"=>\", \"operator\");\n    } else if (ch == \"0\" && stream.eat(/x/i)) {\n      stream.eatWhile(/[\\da-f]/i);\n      return ret(\"number\", \"number\");\n    } else if (/\\d/.test(ch)) {\n      stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      } else if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return ret(\"comment\", \"comment\");\n      } else if (state.lastType == \"operator\" || state.lastType == \"keyword c\" ||\n               state.lastType == \"sof\" || /^[\\[{}\\(,;:]$/.test(state.lastType)) {\n        readRegexp(stream);\n        stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n        return ret(\"regexp\", \"string-2\");\n      } else {\n        stream.eatWhile(isOperatorChar);\n        return ret(\"operator\", \"operator\", stream.current());\n      }\n    } else if (ch == \"`\") {\n      state.tokenize = tokenQuasi;\n      return tokenQuasi(stream, state);\n    } else if (ch == \"#\") {\n      stream.skipToEnd();\n      return ret(\"error\", \"error\");\n    } else if (isOperatorChar.test(ch)) {\n      stream.eatWhile(isOperatorChar);\n      return ret(\"operator\", \"operator\", stream.current());\n    } else {\n      stream.eatWhile(/[\\w\\$_]/);\n      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n      return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n                     ret(\"variable\", \"variable\", word);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next;\n      if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n        state.tokenize = tokenBase;\n        return ret(\"jsonld-keyword\", \"meta\");\n      }\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) break;\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenQuasi(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    return ret(\"quasi\", \"string-2\", stream.current());\n  }\n\n  var brackets = \"([{}])\";\n  // This is a crude lookahead trick to try and notice that we're\n  // parsing the argument patterns for a fat-arrow function before we\n  // actually hit the arrow token. It only works if the arrow is on\n  // the same line as the arguments and there's no strange noise\n  // (comments) in between. Fallback is to only notice when we hit the\n  // arrow, and not declare the arguments as locals for the arrow\n  // body.\n  function findFatArrow(stream, state) {\n    if (state.fatArrowAt) state.fatArrowAt = null;\n    var arrow = stream.string.indexOf(\"=>\", stream.start);\n    if (arrow < 0) return;\n\n    var depth = 0, sawSomething = false;\n    for (var pos = arrow - 1; pos >= 0; --pos) {\n      var ch = stream.string.charAt(pos);\n      var bracket = brackets.indexOf(ch);\n      if (bracket >= 0 && bracket < 3) {\n        if (!depth) { ++pos; break; }\n        if (--depth == 0) break;\n      } else if (bracket >= 3 && bracket < 6) {\n        ++depth;\n      } else if (/[$\\w]/.test(ch)) {\n        sawSomething = true;\n      } else if (sawSomething && !depth) {\n        ++pos;\n        break;\n      }\n    }\n    if (sawSomething && !depth) state.fatArrowAt = pos;\n  }\n\n  // Parser\n\n  var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n  function JSLexical(indented, column, type, align, prev, info) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.prev = prev;\n    this.info = info;\n    if (align != null) this.align = align;\n  }\n\n  function inScope(state, varname) {\n    for (var v = state.localVars; v; v = v.next)\n      if (v.name == varname) return true;\n    for (var cx = state.context; cx; cx = cx.prev) {\n      for (var v = cx.vars; v; v = v.next)\n        if (v.name == varname) return true;\n    }\n  }\n\n  function parseJS(state, style, type, content, stream) {\n    var cc = state.cc;\n    // Communicate our context to the combinators.\n    // (Less wasteful than consing up a hundred closures on every call.)\n    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n    if (!state.lexical.hasOwnProperty(\"align\"))\n      state.lexical.align = true;\n\n    while(true) {\n      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n      if (combinator(type, content)) {\n        while(cc.length && cc[cc.length - 1].lex)\n          cc.pop()();\n        if (cx.marked) return cx.marked;\n        if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n        return style;\n      }\n    }\n  }\n\n  // Combinator utils\n\n  var cx = {state: null, column: null, marked: null, cc: null};\n  function pass() {\n    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n  }\n  function cont() {\n    pass.apply(null, arguments);\n    return true;\n  }\n  function register(varname) {\n    function inList(list) {\n      for (var v = list; v; v = v.next)\n        if (v.name == varname) return true;\n      return false;\n    }\n    var state = cx.state;\n    if (state.context) {\n      cx.marked = \"def\";\n      if (inList(state.localVars)) return;\n      state.localVars = {name: varname, next: state.localVars};\n    } else {\n      if (inList(state.globalVars)) return;\n      if (parserConfig.globalVars)\n        state.globalVars = {name: varname, next: state.globalVars};\n    }\n  }\n\n  // Combinators\n\n  var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n  function pushcontext() {\n    cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    cx.state.localVars = defaultVars;\n  }\n  function popcontext() {\n    cx.state.localVars = cx.state.context.vars;\n    cx.state.context = cx.state.context.prev;\n  }\n  function pushlex(type, info) {\n    var result = function() {\n      var state = cx.state, indent = state.indented;\n      if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n    };\n    result.lex = true;\n    return result;\n  }\n  function poplex() {\n    var state = cx.state;\n    if (state.lexical.prev) {\n      if (state.lexical.type == \")\")\n        state.indented = state.lexical.indented;\n      state.lexical = state.lexical.prev;\n    }\n  }\n  poplex.lex = true;\n\n  function expect(wanted) {\n    return function(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\") return pass();\n      else return cont(arguments.callee);\n    };\n  }\n\n  function statement(type, value) {\n    if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n    if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n    if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n    if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n    if (type == \";\") return cont();\n    if (type == \"if\") return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n    if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n    if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n                                      block, poplex, poplex);\n    if (type == \"case\") return cont(expression, expect(\":\"));\n    if (type == \"default\") return cont(expect(\":\"));\n    if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n                                     statement, poplex, popcontext);\n    if (type == \"module\") return cont(pushlex(\"form\"), pushcontext, afterModule, popcontext, poplex);\n    if (type == \"class\") return cont(pushlex(\"form\"), className, objlit, poplex);\n    if (type == \"export\") return cont(pushlex(\"form\"), afterExport, poplex);\n    if (type == \"import\") return cont(pushlex(\"form\"), afterImport, poplex);\n    return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n  }\n  function expression(type) {\n    return expressionInner(type, false);\n  }\n  function expressionNoComma(type) {\n    return expressionInner(type, true);\n  }\n  function expressionInner(type, noComma) {\n    if (cx.state.fatArrowAt == cx.stream.start) {\n      var body = noComma ? arrowBodyNoComma : arrowBody;\n      if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n      else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n    }\n\n    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"keyword c\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n    if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, comprehension, expect(\")\"), poplex, maybeop);\n    if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n    if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n    return cont();\n  }\n  function maybeexpression(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expression);\n  }\n  function maybeexpressionNoComma(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expressionNoComma);\n  }\n\n  function maybeoperatorComma(type, value) {\n    if (type == \",\") return cont(expression);\n    return maybeoperatorNoComma(type, value, false);\n  }\n  function maybeoperatorNoComma(type, value, noComma) {\n    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n    var expr = noComma == false ? expression : expressionNoComma;\n    if (value == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n    if (type == \"operator\") {\n      if (/\\+\\+|--/.test(value)) return cont(me);\n      if (value == \"?\") return cont(expression, expect(\":\"), expr);\n      return cont(expr);\n    }\n    if (type == \"quasi\") { cx.cc.push(me); return quasi(value); }\n    if (type == \";\") return;\n    if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n    if (type == \".\") return cont(property, me);\n    if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n  }\n  function quasi(value) {\n    if (value.slice(value.length - 2) != \"${\") return cont();\n    return cont(expression, continueQuasi);\n  }\n  function continueQuasi(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont();\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expressionNoComma);\n  }\n  function maybelabel(type) {\n    if (type == \":\") return cont(poplex, statement);\n    return pass(maybeoperatorComma, expect(\";\"), poplex);\n  }\n  function property(type) {\n    if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n  }\n  function objprop(type, value) {\n    if (type == \"variable\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (type + \" property\");\n    } else if (type == \"[\") {\n      return cont(expression, expect(\"]\"), afterprop);\n    }\n    if (atomicTypes.hasOwnProperty(type)) return cont(afterprop);\n  }\n  function getterSetter(type) {\n    if (type != \"variable\") return pass(afterprop);\n    cx.marked = \"property\";\n    return cont(functiondef);\n  }\n  function afterprop(type) {\n    if (type == \":\") return cont(expressionNoComma);\n    if (type == \"(\") return pass(functiondef);\n  }\n  function commasep(what, end) {\n    function proceed(type) {\n      if (type == \",\") {\n        var lex = cx.state.lexical;\n        if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n        return cont(what, proceed);\n      }\n      if (type == end) return cont();\n      return cont(expect(end));\n    }\n    return function(type) {\n      if (type == end) return cont();\n      return pass(what, proceed);\n    };\n  }\n  function contCommasep(what, end, info) {\n    for (var i = 3; i < arguments.length; i++)\n      cx.cc.push(arguments[i]);\n    return cont(pushlex(end, info), commasep(what, end), poplex);\n  }\n  function block(type) {\n    if (type == \"}\") return cont();\n    return pass(statement, block);\n  }\n  function maybetype(type) {\n    if (isTS && type == \":\") return cont(typedef);\n  }\n  function typedef(type) {\n    if (type == \"variable\"){cx.marked = \"variable-3\"; return cont();}\n  }\n  function vardef() {\n    return pass(pattern, maybetype, maybeAssign, vardefCont);\n  }\n  function pattern(type, value) {\n    if (type == \"variable\") { register(value); return cont(); }\n    if (type == \"[\") return contCommasep(pattern, \"]\");\n    if (type == \"{\") return contCommasep(proppattern, \"}\");\n  }\n  function proppattern(type, value) {\n    if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n      register(value);\n      return cont(maybeAssign);\n    }\n    if (type == \"variable\") cx.marked = \"property\";\n    return cont(expect(\":\"), pattern, maybeAssign);\n  }\n  function maybeAssign(_type, value) {\n    if (value == \"=\") return cont(expressionNoComma);\n  }\n  function vardefCont(type) {\n    if (type == \",\") return cont(vardef);\n  }\n  function maybeelse(type, value) {\n    if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\"), statement, poplex);\n  }\n  function forspec(type) {\n    if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n  }\n  function forspec1(type) {\n    if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n    if (type == \";\") return cont(forspec2);\n    if (type == \"variable\") return cont(formaybeinof);\n    return pass(expression, expect(\";\"), forspec2);\n  }\n  function formaybeinof(_type, value) {\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return cont(maybeoperatorComma, forspec2);\n  }\n  function forspec2(type, value) {\n    if (type == \";\") return cont(forspec3);\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return pass(expression, expect(\";\"), forspec3);\n  }\n  function forspec3(type) {\n    if (type != \")\") cont(expression);\n  }\n  function functiondef(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n    if (type == \"variable\") {register(value); return cont(functiondef);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, statement, popcontext);\n  }\n  function funarg(type) {\n    if (type == \"spread\") return cont(funarg);\n    return pass(pattern, maybetype);\n  }\n  function className(type, value) {\n    if (type == \"variable\") {register(value); return cont(classNameAfter);}\n  }\n  function classNameAfter(_type, value) {\n    if (value == \"extends\") return cont(expression);\n  }\n  function objlit(type) {\n    if (type == \"{\") return contCommasep(objprop, \"}\");\n  }\n  function afterModule(type, value) {\n    if (type == \"string\") return cont(statement);\n    if (type == \"variable\") { register(value); return cont(maybeFrom); }\n  }\n  function afterExport(_type, value) {\n    if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n    if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n    return pass(statement);\n  }\n  function afterImport(type) {\n    if (type == \"string\") return cont();\n    return pass(importSpec, maybeFrom);\n  }\n  function importSpec(type, value) {\n    if (type == \"{\") return contCommasep(importSpec, \"}\");\n    if (type == \"variable\") register(value);\n    return cont();\n  }\n  function maybeFrom(_type, value) {\n    if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n  }\n  function arrayLiteral(type) {\n    if (type == \"]\") return cont();\n    return pass(expressionNoComma, maybeArrayComprehension);\n  }\n  function maybeArrayComprehension(type) {\n    if (type == \"for\") return pass(comprehension, expect(\"]\"));\n    if (type == \",\") return cont(commasep(expressionNoComma, \"]\"));\n    return pass(commasep(expressionNoComma, \"]\"));\n  }\n  function comprehension(type) {\n    if (type == \"for\") return cont(forspec, comprehension);\n    if (type == \"if\") return cont(expression, comprehension);\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      var state = {\n        tokenize: tokenBase,\n        lastType: \"sof\",\n        cc: [],\n        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n        localVars: parserConfig.localVars,\n        context: parserConfig.localVars && {vars: parserConfig.localVars},\n        indented: 0\n      };\n      if (parserConfig.globalVars) state.globalVars = parserConfig.globalVars;\n      return state;\n    },\n\n    token: function(stream, state) {\n      if (stream.sol()) {\n        if (!state.lexical.hasOwnProperty(\"align\"))\n          state.lexical.align = false;\n        state.indented = stream.indentation();\n        findFatArrow(stream, state);\n      }\n      if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n      if (type == \"comment\") return style;\n      state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n      return parseJS(state, style, type, content, stream);\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == tokenComment) return CodeMirror.Pass;\n      if (state.tokenize != tokenBase) return 0;\n      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n      // Kludge to prevent 'maybelse' from blocking lexical scope pops\n      for (var i = state.cc.length - 1; i >= 0; --i) {\n        var c = state.cc[i];\n        if (c == poplex) lexical = lexical.prev;\n        else if (c != maybeelse) break;\n      }\n      if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n      if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n        lexical = lexical.prev;\n      var type = lexical.type, closing = firstChar == type;\n\n      if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n      else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n      else if (type == \"form\") return lexical.indented + indentUnit;\n      else if (type == \"stat\")\n        return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? statementIndent || indentUnit : 0);\n      else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n        return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n      else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n      else return lexical.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricChars: \":{}\",\n    blockCommentStart: jsonMode ? null : \"/*\",\n    blockCommentEnd: jsonMode ? null : \"*/\",\n    lineComment: jsonMode ? null : \"//\",\n    fold: \"brace\",\n\n    helperType: jsonMode ? \"json\" : \"javascript\",\n    jsonldMode: jsonldMode,\n    jsonMode: jsonMode\n  };\n});\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Contests/list-categories-page.js",
    "content": "﻿// TODO: Fix nesting problem\nfunction CategoryExpander() {\n    var treeview, treeviewSelector, currentlySelectedId;\n    var data = [];\n    var firstLoad = true;\n\n    var self;\n\n    var init = function(treeView, treeViewSelector) {\n        treeview = treeView;\n        treeviewSelector = treeViewSelector;\n        self = this;\n    };\n\n    function onDataBound() {\n        var categoryId;\n        if (firstLoad && window.location.hash) {\n            categoryId = getCategoryIdFromHash();\n            self.select(categoryId);\n            firstLoad = false;\n        } else {\n            categoryId = currentlySelectedId;\n        }\n\n        var element = treeview.dataSource.get(categoryId);\n\n        var nodeToSelect = {\n            elementId: categoryId,\n            elementName: element !== undefined ? element.NameUrl : null,\n            uid: element !== undefined ? element.uid : null\n        };\n\n        if (categoryId) {\n            treeview.trigger('select', nodeToSelect);\n        }\n    }\n\n    var categorySelected = function(e) {\n        $(\"#contestsList\").html(\"\");\n        $(\"#contestsList\").addClass(\"k-loading\");\n\n        var elementId;\n        var elementName;\n        var elementNode;\n\n        if (e.elementId) {\n            elementId = parseInt(e.elementId);\n            elementName = e.elementName;\n            var el = treeview.dataSource.get(elementId);\n            if (el) {\n                elementNode = treeviewSelector.find('[data-uid=' + el.uid + ']');\n            }\n        } else {\n            elementNode = e.node;\n            var element = treeview.dataItem(elementNode);\n            elementId = element.Id;\n            elementName = element.NameUrl;\n        }\n\n        if (elementNode) {\n            treeview.expand(elementNode);\n        }\n\n        if (window.location.hash !== undefined && elementName) {\n            window.location.hash = '!/List/ByCategory/' + elementId + '/' + elementName;\n        }\n\n        var ajaxUrl = \"/Contests/List/ByCategory/\" + elementId;\n        $(\"#contestsList\").load(ajaxUrl, function() {\n            $(\"#contestsList\").removeClass(\"k-loading\");\n        });\n    };\n\n    var setNestingData = function(categoriesArray) {\n        if (categoriesArray) {\n            data = categoriesArray;\n        }\n    };\n\n    var expandSubcategories = function() {\n        for (var i = 0; i < data.length; i++) {\n            var id = data[i];\n            self.select(id);\n        }\n    };\n\n    var select = function(id) {\n        currentlySelectedId = id;\n\n        var el = treeview.dataSource.get(id);\n        if (!el && data.indexOf(id) < 0) {\n            var parentsUrl = \"/Contests/List/GetParents/\" + id;\n\n            $.ajax({\n                url: parentsUrl,\n                success: function(data) {\n                    self.setNestingData(data);\n                    self.expandSubcategories();\n                }\n            });\n        } else if (el) {\n            var element = treeviewSelector.find('[data-uid=' + el.uid + ']');\n\n            var elementObj = {\n                elementId: id\n            };\n\n            treeview.trigger('select', elementObj);\n            treeview.expand(element);\n            treeview.select(element);\n        }\n    };\n\n    var currentId = function() {\n        return currentlySelectedId;\n    };\n\n    return {\n        expandSubcategories: expandSubcategories,\n        select: select,\n        currentId: currentId,\n        setNestingData: setNestingData,\n        onDataBound: onDataBound,\n        categorySelected: categorySelected,\n        init: init\n    };\n}\n\nfunction getCategoryIdFromHash() {\n    var hash = window.location.hash;\n    var categoryId = hash.split('/')[3];\n    return categoryId;\n}\n\nvar expander = new CategoryExpander();\n\n$(document).ready(function() {\n    $(window).on(\"hashchange\", function() {\n        var categoryId = getCategoryIdFromHash();\n        if (expander && categoryId !== expander.currentId()) {\n            expander.select(categoryId);\n        }\n    });\n\n    var treeviewSelector = $(\"#contestsCategories\");\n    var treeview = treeviewSelector.data(\"kendoTreeView\");\n    expander.init(treeview, treeviewSelector);\n});\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Contests/submission-page.js",
    "content": "﻿var countdownTimer = function (endingTime) {\n    \"use strict\";\n\n    var endTime = new Date(\n        endingTime.year,\n        endingTime.month,\n        endingTime.day,\n        endingTime.hour,\n        endingTime.minute,\n        endingTime.second\n    );\n\n    var ts = countdown(null, endTime, countdown.HOURS | countdown.MINUTES | countdown.SECONDS);\n\n    var hoursContainer = $('#hours-remaining');\n    var minutesContainer = $('#minutes-remaining');\n    var secondsContainer = $('#seconds-remaining');\n    var countdownTimer = $('#countdown-timer');\n\n    var start = function () {\n        updateCountdown();\n\n        var timerId = window.setInterval(function () {\n            if (ts.hours === 0 && ts.minutes <= 4) {\n                if (!countdownTimer.hasClass('countdown-warning')) {\n                    countdownTimer.addClass('countdown-warning');\n                }\n\n                if (ts.start > ts.end) {\n                    window.clearInterval(timerId);\n                    // TODO: Handle contest over.\n                }\n            }\n\n            updateCountdown();\n            ts = countdown(null, endTime, countdown.HOURS | countdown.MINUTES | countdown.SECONDS);\n        }, 1000);\n    };\n\n    function updateCountdown() {\n        hoursContainer.text(ts.hours);\n        minutesContainer.text(ts.minutes);\n        secondsContainer.text(ts.seconds);\n        countdownTimer.show();\n    }\n\n    return {\n        start: start\n    };\n};\n\nfunction Notifier() {\n    function showMessage(data) {\n        var container = $(\"div[id^='notify-container']\").filter(':visible');\n\n        var notification = $('<div/>', {\n            text: data.message,\n            \"class\": data.cssClass,\n            style: \"display: none\"\n        }).appendTo(container);\n\n        notification.show({\n            duration: 500\n        });\n\n        if (data.response) {\n            var grid = $('#Submissions_' + data.response).getKendoGrid();\n            if (grid) {\n                grid.dataSource.read();\n            }\n        }\n\n        setTimeout(function () {\n            var dropdown = $(\"[id^=SubmissionsTabStrip-]\").filter(':visible').find('input[id^=\"dropdown_\"]').getKendoDropDownList();\n            dropdown.close();\n            notification.hide(500, function () {\n                notification.remove();\n            });\n        }, 3500);\n    }\n\n    function notifySuccess(response) {\n        var codeMirrorInstance = getCodeMirrorInstance();\n        codeMirrorInstance.setValue(\"\");\n\n        showMessage({\n            message: \"Успешно изпратено!\",\n            response: response,\n            cssClass: \"alert alert-success\"\n        });\n    }\n\n    function notifyFailure(error) {\n        showMessage({\n            message: error.statusText,\n            cssClass: \"alert alert-danger\"\n        });\n    }\n\n    function notifyWarning(warning) {\n        showMessage({\n            message: warning.statusText,\n            cssClass: \"alert alert-warning\"\n        });\n    }\n\n    return {\n        showMessage: showMessage,\n        notifySuccess: notifySuccess,\n        notifyFailure: notifyFailure,\n        notifyWarning: notifyWarning\n    };\n}\n\n//  update the code mirror textarea to display the submission content - not used\n//  $(\"#SubmissionsTabStrip\").on(\"click\", \".view-source-button\", function () {\n//      var submissionId = $(this).data(\"submission-id\");\n//\n//      $.get(\"/Contests/Compete/GetSubmissionContent/\" + submissionId, function (response) {\n//          var codeMirrorInstance = getCodeMirrorInstance();\n//          codeMirrorInstance.setValue(response);\n//      }).fail(function (err) {\n//          notifyFailure(err);\n//      });\n//  });\n\nfunction getCodeMirrorInstance() {\n    var codeMirrorContainer = $(\".CodeMirror:visible\").siblings('textarea')[0];\n    var codeMirrorInstance = $.data(codeMirrorContainer, 'CodeMirrorInstance');\n    return codeMirrorInstance;\n}\n\nvar displayMaximumValues = function(maxMemory, maxTime, memoryString, timeString) {\n    var memoryInMb = (maxMemory / 1024 / 1024).toFixed(2);\n    var maxTimeInSeconds = (maxTime / 1000).toFixed(3);\n    var result = memoryString + \": \" + memoryInMb + \" MB <br />\" + timeString + \": \" + maxTimeInSeconds + \" s\";\n    return result;\n};\n\nfunction validateSubmissionContent() {\n    var codeMirrorInstance = getCodeMirrorInstance();\n    var codeMirrorText = codeMirrorInstance.getValue();\n\n    if (!codeMirrorText || codeMirrorText.length < 5) {\n        messageNotifier.showMessage({\n            message: \"Решението трябва да съдържа поне 5 символа!\",\n            cssClass: \"alert alert-warning\"\n        });\n\n        return false;\n    }\n\n    return true;\n}\n\nfunction validateBinaryFileExists(fileInput) {\n    if (!fileInput.files[0]) {\n        messageNotifier.notifyWarning({\n            statusText: 'Моля изберете файл, който да изпратите.'\n        });\n        return false;\n    }\n\n    return true;\n}\n\nfunction validateBinaryFileSize(fileInput, size) {\n    if (!size) {\n        return true;\n    }\n\n    var file = fileInput.files[0];\n    if (file && file.size > size) {\n        messageNotifier.notifyWarning({\n            statusText: 'Избраният файл е твърде голям. Моля, изберете файл с по-малък размер.'\n        });\n\n        return false;\n    }\n\n    return true;\n}\n\nfunction validateBinaryFileAllowedExtensions(fileInput, extensions) {\n    var fileName = fileInput.files[0].name;\n    var fileExtension = fileName.split('.')[fileName.split('.').length - 1].toLowerCase();\n\n    if (!extensions || extensions.length == 0) {\n        return true;\n    }\n\n    if ($.inArray(fileExtension, extensions) < 0) {\n        messageNotifier.notifyWarning({\n            statusText: 'Избраният тип файл не е позволен. Разрешените формати са: ' + extensions.join(',') + '.'\n        });\n\n        return false;\n    }\n\n    return true;\n}\n\nvar messageNotifier = new Notifier();\n\n// validate the submission time\nvar submissionTimeValidator = function() {\n    var lastSubmissionTime;\n    var currentServerTime;\n\n    function validate(lastSubmit, limitBetweenSubmissions, serverTime) {\n        if (!lastSubmissionTime) {\n            lastSubmissionTime = lastSubmit;\n        }\n\n        if (!currentServerTime) {\n            currentServerTime = serverTime;\n            setInterval(function() {\n                currentServerTime = new Date(currentServerTime.getTime() + 1000);\n            }, 1000);\n        }\n\n        var currentTime = currentServerTime;\n        var secondsForLastSubmission = (currentTime - lastSubmissionTime) / 1000;\n\n        if (!lastSubmissionTime) {\n            lastSubmissionTime = currentServerTime;\n            return true;\n        }\n\n        var differenceBetweenSubmissionAndLimit = parseInt(limitBetweenSubmissions - secondsForLastSubmission);\n\n        if (differenceBetweenSubmissionAndLimit > 0) {\n            messageNotifier.showMessage({\n                message: \"Моля изчакайте още \" + differenceBetweenSubmissionAndLimit + \" секунди преди да изпратите решение.\",\n                cssClass: \"alert alert-warning\"\n            });\n\n            return false;\n        }\n\n        lastSubmissionTime = currentServerTime;\n        return true;\n    }\n\n    return {\n        validate: validate\n    };\n};\n\nvar tabStripManager = new TabStripManager();\n\nfunction TabStripManager() {\n    var tabStrip;\n    var index = 0;\n\n    var self;\n\n    function init(tabstrip) {\n        self = this;\n        tabStrip = tabstrip;\n\n        tabStrip = $(\"#SubmissionsTabStrip\").data(\"kendoTabStrip\");\n        if (tabstrip) {\n            var hashIndex = getSelectedIndexFromHashtag();\n            if (!hashIndex) {\n                hashIndex = 0;\n            }\n\n            selectTabWithIndex(hashIndex);\n        }\n    }\n\n    function selectTabWithIndex(ind) {\n        tabStrip.select(ind);\n        index = ind;\n    }\n\n    function tabSelected() {\n        if (tabStrip) {\n            var selectedIndex = tabStrip.select().index();\n            window.location.hash = selectedIndex;\n        }\n    }\n\n    function onContentLoad() {\n        createCodeMirrorForTextBox();\n        var hashTag = getSelectedIndexFromHashtag();\n        selectTabWithIndex(hashTag);\n    };\n\n    function createCodeMirrorForTextBox() {\n        var element = $('.code-for-problem:visible')[0];\n\n        if (!$(element).data('CodeMirrorInstance')) {\n            var editor = new CodeMirror.fromTextArea(element, {\n                lineNumbers: true,\n                matchBrackets: true,\n                mode: \"text/x-csharp\",\n                theme: \"the-matrix\",\n                showCursorWhenSelecting: true,\n                undoDepth: 100,\n                lineWrapping: true,\n            });\n\n            $.data(element, 'CodeMirrorInstance', editor);\n        }\n    };\n\n    function currentIndex() {\n        return index;\n    }\n\n    return {\n        selectTabWithIndex: selectTabWithIndex,\n        tabSelected: tabSelected,\n        onContentLoad: onContentLoad,\n        currentIndex: currentIndex,\n        init: init\n    };\n}\n\nfunction getSelectedIndexFromHashtag() {\n    return parseInt(window.location.hash.substr(1));\n}\n\n$(document).ready(function() {\n    $(window).on(\"hashchange\", function() {\n        var hashIndex = getSelectedIndexFromHashtag();\n        if (hashIndex !== tabStripManager.currentIndex()) {\n            tabStripManager.selectTabWithIndex(hashIndex);\n        }\n    });\n\n    var tabStrip = $(\"#SubmissionsTabStrip\").data(\"kendoTabStrip\");\n    tabStripManager.init(tabStrip);\n});\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/Helpers/test-results.js",
    "content": "﻿var displayTestRuns = function (testRuns) {\n    \"use strict\";\n\n    var result = \"\";\n    var i;\n\n    for (i = 0; i < testRuns.length; i++) {\n        if (testRuns[i].IsTrialTest) {\n            continue;\n        }\n\n        switch (testRuns[i].ExecutionResult) {\n            case 0:\n                result += '<span class=\"glyphicon glyphicon-ok text-success\" title=\"Правилен отговор\"></span>';\n                break;\n            case 1:\n                result += '<span class=\"glyphicon glyphicon-remove text-danger\" title=\"Грешен отговор\"></span>';\n                break;\n            case 2:\n                result += '<span class=\"glyphicon glyphicon-time\" title=\"Лимит време\"></span>';\n                break;\n            case 3:\n                result += '<span class=\"glyphicon glyphicon-hdd text-danger\" title=\"Лимит памет\"></span>';\n                break;\n            case 4:\n                result += '<span class=\"glyphicon glyphicon-asterisk text-danger\" title=\"Грешка при изпълнение\"></span>';\n                break;\n        }\n    }\n\n    result += \" \";\n    return result;\n};\n\nfunction testResult(tests, points, problemMaximumPoints, maxUsedMemory, maxUsedTime, processed, isCompiledSuccessfully, submissionType) {\n    var result = '';\n\n    if (!processed) {\n        result += '<span class=\"glyphicon glyphicon-time text-primary\" title=\"Loading...\"></span>';\n        result += '<strong class=\"text-primary\"> Обработва се...</strong>';\n    }\n    else if (!isCompiledSuccessfully) {\n        result += '<span class=\"glyphicon glyphicon-remove text-danger\" title=\"Compilation failed\"></span>';\n        result += '<strong class=\"text-danger\"> Грешка при компилация</strong>';\n    }\n    else {\n        result += \"<div><strong class ='text-primary'> \" + points + \" / \" + problemMaximumPoints + \"</strong>\" +\n        \"<small> \" + (maxUsedMemory / 1024 / 1024).toFixed(2) + \" MB | \" + (maxUsedTime / 1000).toFixed(3) + \" sec. | \" + submissionType + \"</small></div> \";\n        result += displayTestRuns(tests);\n    }\n\n    return result;\n};"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/KendoUI/2014.3.1411/cultures/kendo.culture.bg.js",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n(function(f, define){\n    define([], f);\n})(function(){\n\n(function( window, undefined ) {\n    var kendo = window.kendo || (window.kendo = { cultures: {} });\n    kendo.cultures[\"bg\"] = {\n        name: \"bg\",\n        numberFormat: {\n            pattern: [\"-n\"],\n            decimals: 2,\n            \",\": \" \",\n            \".\": \",\",\n            groupSize: [3],\n            percent: {\n                pattern: [\"-n %\",\"n %\"],\n                decimals: 2,\n                \",\": \" \",\n                \".\": \",\",\n                groupSize: [3],\n                symbol: \"%\"\n            },\n            currency: {\n                pattern: [\"-n $\",\"n $\"],\n                decimals: 2,\n                \",\": \" \",\n                \".\": \",\",\n                groupSize: [3],\n                symbol: \"лв.\"\n            }\n        },\n        calendars: {\n            standard: {\n                days: {\n                    names: [\"неделя\",\"понеделник\",\"вторник\",\"сряда\",\"четвъртък\",\"петък\",\"събота\"],\n                    namesAbbr: [\"нед\",\"пон\",\"вт\",\"ср\",\"четв\",\"пет\",\"съб\"],\n                    namesShort: [\"н\",\"п\",\"в\",\"с\",\"ч\",\"п\",\"с\"]\n                },\n                months: {\n                    names: [\"януари\",\"февруари\",\"март\",\"април\",\"май\",\"юни\",\"юли\",\"август\",\"септември\",\"октомври\",\"ноември\",\"декември\",\"\"],\n                    namesAbbr: [\"ян\",\"февр\",\"март\",\"апр\",\"май\",\"юни\",\"юли\",\"авг\",\"септ\",\"окт\",\"ноември\",\"дек\",\"\"]\n                },\n                AM: [\"\"],\n                PM: [\"\"],\n                patterns: {\n                    d: \"d.M.yyyy 'г.'\",\n                    D: \"dd MMMM yyyy 'г.'\",\n                    F: \"dd MMMM yyyy 'г.' HH:mm:ss 'ч.'\",\n                    g: \"d.M.yyyy 'г.' HH:mm 'ч.'\",\n                    G: \"d.M.yyyy 'г.' HH:mm:ss 'ч.'\",\n                    m: \"dd MMMM\",\n                    M: \"dd MMMM\",\n                    s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n                    t: \"HH:mm 'ч.'\",\n                    T: \"HH:mm:ss 'ч.'\",\n                    u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n                    y: \"MMMM yyyy 'г.'\",\n                    Y: \"MMMM yyyy 'г.'\"\n                },\n                \"/\": \".\",\n                \":\": \":\",\n                firstDay: 1\n            }\n        }\n    }\n})(this);\n\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/KendoUI/2014.3.1411/cultures/kendo.culture.en-GB.js",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n(function(f, define){\n    define([], f);\n})(function(){\n\n(function( window, undefined ) {\n    var kendo = window.kendo || (window.kendo = { cultures: {} });\n    kendo.cultures[\"en-GB\"] = {\n        name: \"en-GB\",\n        numberFormat: {\n            pattern: [\"-n\"],\n            decimals: 2,\n            \",\": \",\",\n            \".\": \".\",\n            groupSize: [3],\n            percent: {\n                pattern: [\"-n %\",\"n %\"],\n                decimals: 2,\n                \",\": \",\",\n                \".\": \".\",\n                groupSize: [3],\n                symbol: \"%\"\n            },\n            currency: {\n                pattern: [\"-$n\",\"$n\"],\n                decimals: 2,\n                \",\": \",\",\n                \".\": \".\",\n                groupSize: [3],\n                symbol: \"£\"\n            }\n        },\n        calendars: {\n            standard: {\n                days: {\n                    names: [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\n                    namesAbbr: [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\n                    namesShort: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]\n                },\n                months: {\n                    names: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\n                    namesAbbr: [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"]\n                },\n                AM: [\"AM\",\"am\",\"AM\"],\n                PM: [\"PM\",\"pm\",\"PM\"],\n                patterns: {\n                    d: \"dd/MM/yyyy\",\n                    D: \"dd MMMM yyyy\",\n                    F: \"dd MMMM yyyy HH:mm:ss\",\n                    g: \"dd/MM/yyyy HH:mm\",\n                    G: \"dd/MM/yyyy HH:mm:ss\",\n                    m: \"dd MMMM\",\n                    M: \"dd MMMM\",\n                    s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n                    t: \"HH:mm\",\n                    T: \"HH:mm:ss\",\n                    u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n                    y: \"MMMM yyyy\",\n                    Y: \"MMMM yyyy\"\n                },\n                \"/\": \"/\",\n                \":\": \":\",\n                firstDay: 1\n            }\n        }\n    }\n})(this);\n\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/KendoUI/2014.3.1411/kendo.all.js",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n(function(f, define){\n    define([], f);\n})(function(){\n\n\n\n/*jshint eqnull: true, loopfunc: true, evil: true, boss: true, freeze: false*/\n(function($, window, undefined) {\n    var kendo = window.kendo = window.kendo || { cultures: {} },\n        extend = $.extend,\n        each = $.each,\n        isArray = $.isArray,\n        proxy = $.proxy,\n        noop = $.noop,\n        math = Math,\n        Template,\n        JSON = window.JSON || {},\n        support = {},\n        percentRegExp = /%/,\n        formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n        boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n        numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n        FUNCTION = \"function\",\n        STRING = \"string\",\n        NUMBER = \"number\",\n        OBJECT = \"object\",\n        NULL = \"null\",\n        BOOLEAN = \"boolean\",\n        UNDEFINED = \"undefined\",\n        getterCache = {},\n        setterCache = {},\n        slice = [].slice,\n        globalize = window.Globalize;\n\n    kendo.version = \"2014.3.1411\";\n\n    function Class() {}\n\n    Class.extend = function(proto) {\n        var base = function() {},\n            member,\n            that = this,\n            subclass = proto && proto.init ? proto.init : function () {\n                that.apply(this, arguments);\n            },\n            fn;\n\n        base.prototype = that.prototype;\n        fn = subclass.fn = subclass.prototype = new base();\n\n        for (member in proto) {\n            if (proto[member] != null && proto[member].constructor === Object) {\n                // Merge object members\n                fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n            } else {\n                fn[member] = proto[member];\n            }\n        }\n\n        fn.constructor = subclass;\n        subclass.extend = that.extend;\n\n        return subclass;\n    };\n\n    Class.prototype._initOptions = function(options) {\n        this.options = deepExtend({}, this.options, options);\n    };\n\n    var isFunction = kendo.isFunction = function(fn) {\n        return typeof fn === \"function\";\n    };\n\n    var preventDefault = function() {\n        this._defaultPrevented = true;\n    };\n\n    var isDefaultPrevented = function() {\n        return this._defaultPrevented === true;\n    };\n\n    var Observable = Class.extend({\n        init: function() {\n            this._events = {};\n        },\n\n        bind: function(eventName, handlers, one) {\n            var that = this,\n                idx,\n                eventNames = typeof eventName === STRING ? [eventName] : eventName,\n                length,\n                original,\n                handler,\n                handlersIsFunction = typeof handlers === FUNCTION,\n                events;\n\n            if (handlers === undefined) {\n                for (idx in eventName) {\n                    that.bind(idx, eventName[idx]);\n                }\n                return that;\n            }\n\n            for (idx = 0, length = eventNames.length; idx < length; idx++) {\n                eventName = eventNames[idx];\n\n                handler = handlersIsFunction ? handlers : handlers[eventName];\n\n                if (handler) {\n                    if (one) {\n                        original = handler;\n                        handler = function() {\n                            that.unbind(eventName, handler);\n                            original.apply(that, arguments);\n                        };\n                        handler.original = original;\n                    }\n                    events = that._events[eventName] = that._events[eventName] || [];\n                    events.push(handler);\n                }\n            }\n\n            return that;\n        },\n\n        one: function(eventNames, handlers) {\n            return this.bind(eventNames, handlers, true);\n        },\n\n        first: function(eventName, handlers) {\n            var that = this,\n                idx,\n                eventNames = typeof eventName === STRING ? [eventName] : eventName,\n                length,\n                handler,\n                handlersIsFunction = typeof handlers === FUNCTION,\n                events;\n\n            for (idx = 0, length = eventNames.length; idx < length; idx++) {\n                eventName = eventNames[idx];\n\n                handler = handlersIsFunction ? handlers : handlers[eventName];\n\n                if (handler) {\n                    events = that._events[eventName] = that._events[eventName] || [];\n                    events.unshift(handler);\n                }\n            }\n\n            return that;\n        },\n\n        trigger: function(eventName, e) {\n            var that = this,\n                events = that._events[eventName],\n                idx,\n                length;\n\n            if (events) {\n                e = e || {};\n\n                e.sender = that;\n\n                e._defaultPrevented = false;\n\n                e.preventDefault = preventDefault;\n\n                e.isDefaultPrevented = isDefaultPrevented;\n\n                events = events.slice();\n\n                for (idx = 0, length = events.length; idx < length; idx++) {\n                    events[idx].call(that, e);\n                }\n\n                return e._defaultPrevented === true;\n            }\n\n            return false;\n        },\n\n        unbind: function(eventName, handler) {\n            var that = this,\n                events = that._events[eventName],\n                idx;\n\n            if (eventName === undefined) {\n                that._events = {};\n            } else if (events) {\n                if (handler) {\n                    for (idx = events.length - 1; idx >= 0; idx--) {\n                        if (events[idx] === handler || events[idx].original === handler) {\n                            events.splice(idx, 1);\n                        }\n                    }\n                } else {\n                    that._events[eventName] = [];\n                }\n            }\n\n            return that;\n        }\n    });\n\n\n     function compilePart(part, stringPart) {\n         if (stringPart) {\n             return \"'\" +\n                 part.split(\"'\").join(\"\\\\'\")\n                     .split('\\\\\"').join('\\\\\\\\\\\\\"')\n                     .replace(/\\n/g, \"\\\\n\")\n                     .replace(/\\r/g, \"\\\\r\")\n                     .replace(/\\t/g, \"\\\\t\") + \"'\";\n         } else {\n             var first = part.charAt(0),\n                 rest = part.substring(1);\n\n             if (first === \"=\") {\n                 return \"+(\" + rest + \")+\";\n             } else if (first === \":\") {\n                 return \"+$kendoHtmlEncode(\" + rest + \")+\";\n             } else {\n                 return \";\" + part + \";$kendoOutput+=\";\n             }\n         }\n     }\n\n    var argumentNameRegExp = /^\\w+/,\n        encodeRegExp = /\\$\\{([^}]*)\\}/g,\n        escapedCurlyRegExp = /\\\\\\}/g,\n        curlyRegExp = /__CURLY__/g,\n        escapedSharpRegExp = /\\\\#/g,\n        sharpRegExp = /__SHARP__/g,\n        zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n    Template = {\n        paramName: \"data\", // name of the parameter of the generated template\n        useWithBlock: true, // whether to wrap the template in a with() block\n        render: function(template, data) {\n            var idx,\n                length,\n                html = \"\";\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                html += template(data[idx]);\n            }\n\n            return html;\n        },\n        compile: function(template, options) {\n            var settings = extend({}, this, options),\n                paramName = settings.paramName,\n                argumentName = paramName.match(argumentNameRegExp)[0],\n                useWithBlock = settings.useWithBlock,\n                functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n                fn,\n                parts,\n                idx;\n\n            if (isFunction(template)) {\n                return template;\n            }\n\n            functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n            functionBody += \"$kendoOutput=\";\n\n            parts = template\n                .replace(escapedCurlyRegExp, \"__CURLY__\")\n                .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n                .replace(curlyRegExp, \"}\")\n                .replace(escapedSharpRegExp, \"__SHARP__\")\n                .split(\"#\");\n\n            for (idx = 0; idx < parts.length; idx ++) {\n                functionBody += compilePart(parts[idx], idx % 2 === 0);\n            }\n\n            functionBody += useWithBlock ? \";}\" : \";\";\n\n            functionBody += \"return $kendoOutput;\";\n\n            functionBody = functionBody.replace(sharpRegExp, \"#\");\n\n            try {\n                fn = new Function(argumentName, functionBody);\n                fn._slotCount = Math.floor(parts.length / 2);\n                return fn;\n            } catch(e) {\n                throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n            }\n        }\n    };\n\nfunction pad(number, digits, end) {\n    number = number + \"\";\n    digits = digits || 2;\n    end = digits - number.length;\n\n    if (end) {\n        return zeros[digits].substring(0, end) + number;\n    }\n\n    return number;\n}\n\n    //JSON stringify\n(function() {\n    var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n        gap,\n        indent,\n        meta = {\n            \"\\b\": \"\\\\b\",\n            \"\\t\": \"\\\\t\",\n            \"\\n\": \"\\\\n\",\n            \"\\f\": \"\\\\f\",\n            \"\\r\": \"\\\\r\",\n            \"\\\"\" : '\\\\\"',\n            \"\\\\\": \"\\\\\\\\\"\n        },\n        rep,\n        toString = {}.toString;\n\n\n    if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n        Date.prototype.toJSON = function () {\n            var that = this;\n\n            return isFinite(that.valueOf()) ?\n                pad(that.getUTCFullYear(), 4) + \"-\" +\n                pad(that.getUTCMonth() + 1)   + \"-\" +\n                pad(that.getUTCDate())        + \"T\" +\n                pad(that.getUTCHours())       + \":\" +\n                pad(that.getUTCMinutes())     + \":\" +\n                pad(that.getUTCSeconds())     + \"Z\" : null;\n        };\n\n        String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n            return this.valueOf();\n        };\n    }\n\n    function quote(string) {\n        escapable.lastIndex = 0;\n        return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function (a) {\n            var c = meta[a];\n            return typeof c === STRING ? c :\n                \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n        }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n    }\n\n    function str(key, holder) {\n        var i,\n            k,\n            v,\n            length,\n            mind = gap,\n            partial,\n            value = holder[key],\n            type;\n\n        if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n            value = value.toJSON(key);\n        }\n\n        if (typeof rep === FUNCTION) {\n            value = rep.call(holder, key, value);\n        }\n\n        type = typeof value;\n        if (type === STRING) {\n            return quote(value);\n        } else if (type === NUMBER) {\n            return isFinite(value) ? String(value) : NULL;\n        } else if (type === BOOLEAN || type === NULL) {\n            return String(value);\n        } else if (type === OBJECT) {\n            if (!value) {\n                return NULL;\n            }\n            gap += indent;\n            partial = [];\n            if (toString.apply(value) === \"[object Array]\") {\n                length = value.length;\n                for (i = 0; i < length; i++) {\n                    partial[i] = str(i, value) || NULL;\n                }\n                v = partial.length === 0 ? \"[]\" : gap ?\n                    \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n                    \"[\" + partial.join(\",\") + \"]\";\n                gap = mind;\n                return v;\n            }\n            if (rep && typeof rep === OBJECT) {\n                length = rep.length;\n                for (i = 0; i < length; i++) {\n                    if (typeof rep[i] === STRING) {\n                        k = rep[i];\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n                        }\n                    }\n                }\n            } else {\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n                        }\n                    }\n                }\n            }\n\n            v = partial.length === 0 ? \"{}\" : gap ?\n                \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n                \"{\" + partial.join(\",\") + \"}\";\n            gap = mind;\n            return v;\n        }\n    }\n\n    if (typeof JSON.stringify !== FUNCTION) {\n        JSON.stringify = function (value, replacer, space) {\n            var i;\n            gap = \"\";\n            indent = \"\";\n\n            if (typeof space === NUMBER) {\n                for (i = 0; i < space; i += 1) {\n                    indent += \" \";\n                }\n\n            } else if (typeof space === STRING) {\n                indent = space;\n            }\n\n            rep = replacer;\n            if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n                throw new Error(\"JSON.stringify\");\n            }\n\n            return str(\"\", {\"\": value});\n        };\n    }\n})();\n\n// Date and Number formatting\n(function() {\n    var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\n        standardFormatRegExp =  /^(n|c|p|e)(\\d*)$/i,\n        literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n        commaRegExp = /\\,/g,\n        EMPTY = \"\",\n        POINT = \".\",\n        COMMA = \",\",\n        SHARP = \"#\",\n        ZERO = \"0\",\n        PLACEHOLDER = \"??\",\n        EN = \"en-US\",\n        objectToString = {}.toString;\n\n    //cultures\n    kendo.cultures[\"en-US\"] = {\n        name: EN,\n        numberFormat: {\n            pattern: [\"-n\"],\n            decimals: 2,\n            \",\": \",\",\n            \".\": \".\",\n            groupSize: [3],\n            percent: {\n                pattern: [\"-n %\", \"n %\"],\n                decimals: 2,\n                \",\": \",\",\n                \".\": \".\",\n                groupSize: [3],\n                symbol: \"%\"\n            },\n            currency: {\n                pattern: [\"($n)\", \"$n\"],\n                decimals: 2,\n                \",\": \",\",\n                \".\": \".\",\n                groupSize: [3],\n                symbol: \"$\"\n            }\n        },\n        calendars: {\n            standard: {\n                days: {\n                    names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n                    namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n                    namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n                },\n                months: {\n                    names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n                    namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n                },\n                AM: [ \"AM\", \"am\", \"AM\" ],\n                PM: [ \"PM\", \"pm\", \"PM\" ],\n                patterns: {\n                    d: \"M/d/yyyy\",\n                    D: \"dddd, MMMM dd, yyyy\",\n                    F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n                    g: \"M/d/yyyy h:mm tt\",\n                    G: \"M/d/yyyy h:mm:ss tt\",\n                    m: \"MMMM dd\",\n                    M: \"MMMM dd\",\n                    s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\n                    t: \"h:mm tt\",\n                    T: \"h:mm:ss tt\",\n                    u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n                    y: \"MMMM, yyyy\",\n                    Y: \"MMMM, yyyy\"\n                },\n                \"/\": \"/\",\n                \":\": \":\",\n                firstDay: 0,\n                twoDigitYearMax: 2029\n            }\n        }\n    };\n\n\n     function findCulture(culture) {\n        if (culture) {\n            if (culture.numberFormat) {\n                return culture;\n            }\n\n            if (typeof culture === STRING) {\n                var cultures = kendo.cultures;\n                return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n            }\n\n            return null;\n        }\n\n        return null;\n    }\n\n    function getCulture(culture) {\n        if (culture) {\n            culture = findCulture(culture);\n        }\n\n        return culture || kendo.cultures.current;\n    }\n\n    function expandNumberFormat(numberFormat) {\n        numberFormat.groupSizes = numberFormat.groupSize;\n        numberFormat.percent.groupSizes = numberFormat.percent.groupSize;\n        numberFormat.currency.groupSizes = numberFormat.currency.groupSize;\n    }\n\n    kendo.culture = function(cultureName) {\n        var cultures = kendo.cultures, culture;\n\n        if (cultureName !== undefined) {\n            culture = findCulture(cultureName) || cultures[EN];\n            culture.calendar = culture.calendars.standard;\n            cultures.current = culture;\n\n            if (globalize && !globalize.load) {\n                expandNumberFormat(culture.numberFormat);\n            }\n\n        } else {\n            return cultures.current;\n        }\n    };\n\n    kendo.findCulture = findCulture;\n    kendo.getCulture = getCulture;\n\n    //set current culture to en-US.\n    kendo.culture(EN);\n\n    function formatDate(date, format, culture) {\n        culture = getCulture(culture);\n\n        var calendar = culture.calendars.standard,\n            days = calendar.days,\n            months = calendar.months;\n\n        format = calendar.patterns[format] || format;\n\n        return format.replace(dateFormatRegExp, function (match) {\n            var minutes;\n            var result;\n            var sign;\n\n            if (match === \"d\") {\n                result = date.getDate();\n            } else if (match === \"dd\") {\n                result = pad(date.getDate());\n            } else if (match === \"ddd\") {\n                result = days.namesAbbr[date.getDay()];\n            } else if (match === \"dddd\") {\n                result = days.names[date.getDay()];\n            } else if (match === \"M\") {\n                result = date.getMonth() + 1;\n            } else if (match === \"MM\") {\n                result = pad(date.getMonth() + 1);\n            } else if (match === \"MMM\") {\n                result = months.namesAbbr[date.getMonth()];\n            } else if (match === \"MMMM\") {\n                result = months.names[date.getMonth()];\n            } else if (match === \"yy\") {\n                result = pad(date.getFullYear() % 100);\n            } else if (match === \"yyyy\") {\n                result = pad(date.getFullYear(), 4);\n            } else if (match === \"h\" ) {\n                result = date.getHours() % 12 || 12;\n            } else if (match === \"hh\") {\n                result = pad(date.getHours() % 12 || 12);\n            } else if (match === \"H\") {\n                result = date.getHours();\n            } else if (match === \"HH\") {\n                result = pad(date.getHours());\n            } else if (match === \"m\") {\n                result = date.getMinutes();\n            } else if (match === \"mm\") {\n                result = pad(date.getMinutes());\n            } else if (match === \"s\") {\n                result = date.getSeconds();\n            } else if (match === \"ss\") {\n                result = pad(date.getSeconds());\n            } else if (match === \"f\") {\n                result = math.floor(date.getMilliseconds() / 100);\n            } else if (match === \"ff\") {\n                result = date.getMilliseconds();\n                if (result > 99) {\n                    result = math.floor(result / 10);\n                }\n                result = pad(result);\n            } else if (match === \"fff\") {\n                result = pad(date.getMilliseconds(), 3);\n            } else if (match === \"tt\") {\n                result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n            } else if (match === \"zzz\") {\n                minutes = date.getTimezoneOffset();\n                sign = minutes < 0;\n\n                result = math.abs(minutes / 60).toString().split(\".\")[0];\n                minutes = math.abs(minutes) - (result * 60);\n\n                result = (sign ? \"+\" : \"-\") + pad(result);\n                result += \":\" + pad(minutes);\n            } else if (match === \"zz\" || match === \"z\") {\n                result = date.getTimezoneOffset() / 60;\n                sign = result < 0;\n\n                result = math.abs(result).toString().split(\".\")[0];\n                result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n            }\n\n            return result !== undefined ? result : match.slice(1, match.length - 1);\n        });\n    }\n\n    //number formatting\n    function formatNumber(number, format, culture) {\n        culture = getCulture(culture);\n\n        var numberFormat = culture.numberFormat,\n            groupSize = numberFormat.groupSize[0],\n            groupSeparator = numberFormat[COMMA],\n            decimal = numberFormat[POINT],\n            precision = numberFormat.decimals,\n            pattern = numberFormat.pattern[0],\n            literals = [],\n            symbol,\n            isCurrency, isPercent,\n            customPrecision,\n            formatAndPrecision,\n            negative = number < 0,\n            integer,\n            fraction,\n            integerLength,\n            fractionLength,\n            replacement = EMPTY,\n            value = EMPTY,\n            idx,\n            length,\n            ch,\n            hasGroup,\n            hasNegativeFormat,\n            decimalIndex,\n            sharpIndex,\n            zeroIndex,\n            hasZero, hasSharp,\n            percentIndex,\n            currencyIndex,\n            startZeroIndex,\n            start = -1,\n            end;\n\n        //return empty string if no number\n        if (number === undefined) {\n            return EMPTY;\n        }\n\n        if (!isFinite(number)) {\n            return number;\n        }\n\n        //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n        if (!format) {\n            return culture.name.length ? number.toLocaleString() : number.toString();\n        }\n\n        formatAndPrecision = standardFormatRegExp.exec(format);\n\n        // standard formatting\n        if (formatAndPrecision) {\n            format = formatAndPrecision[1].toLowerCase();\n\n            isCurrency = format === \"c\";\n            isPercent = format === \"p\";\n\n            if (isCurrency || isPercent) {\n                //get specific number format information if format is currency or percent\n                numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n                groupSize = numberFormat.groupSize[0];\n                groupSeparator = numberFormat[COMMA];\n                decimal = numberFormat[POINT];\n                precision = numberFormat.decimals;\n                symbol = numberFormat.symbol;\n                pattern = numberFormat.pattern[negative ? 0 : 1];\n            }\n\n            customPrecision = formatAndPrecision[2];\n\n            if (customPrecision) {\n                precision = +customPrecision;\n            }\n\n            //return number in exponential format\n            if (format === \"e\") {\n                return customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n            }\n\n            // multiply if format is percent\n            if (isPercent) {\n                number *= 100;\n            }\n\n            number = round(number, precision);\n            negative = number < 0;\n            number = number.split(POINT);\n\n            integer = number[0];\n            fraction = number[1];\n\n            //exclude \"-\" if number is negative.\n            if (negative) {\n                integer = integer.substring(1);\n            }\n\n            value = integer;\n            integerLength = integer.length;\n\n            //add group separator to the number if it is longer enough\n            if (integerLength >= groupSize) {\n                value = EMPTY;\n                for (idx = 0; idx < integerLength; idx++) {\n                    if (idx > 0 && (integerLength - idx) % groupSize === 0) {\n                        value += groupSeparator;\n                    }\n                    value += integer.charAt(idx);\n                }\n            }\n\n            if (fraction) {\n                value += decimal + fraction;\n            }\n\n            if (format === \"n\" && !negative) {\n                return value;\n            }\n\n            number = EMPTY;\n\n            for (idx = 0, length = pattern.length; idx < length; idx++) {\n                ch = pattern.charAt(idx);\n\n                if (ch === \"n\") {\n                    number += value;\n                } else if (ch === \"$\" || ch === \"%\") {\n                    number += symbol;\n                } else {\n                    number += ch;\n                }\n            }\n\n            return number;\n        }\n\n        //custom formatting\n        //\n        //separate format by sections.\n\n        //make number positive\n        if (negative) {\n            number = -number;\n        }\n\n        if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n            format = format.replace(literalRegExp, function (match) {\n                var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\n                    literal = match.slice(1).replace(quoteChar, \"\");\n\n                literals.push(literal);\n\n                return PLACEHOLDER;\n            });\n        }\n\n        format = format.split(\";\");\n        if (negative && format[1]) {\n            //get negative format\n            format = format[1];\n            hasNegativeFormat = true;\n        } else if (number === 0) {\n            //format for zeros\n            format = format[2] || format[0];\n            if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n                //return format if it is string constant.\n                return format;\n            }\n        } else {\n            format = format[0];\n        }\n\n        percentIndex = format.indexOf(\"%\");\n        currencyIndex = format.indexOf(\"$\");\n\n        isPercent = percentIndex != -1;\n        isCurrency = currencyIndex != -1;\n\n        //multiply number if the format has percent\n        if (isPercent) {\n            number *= 100;\n        }\n\n        if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n            format = format.split(\"\\\\\").join(\"\");\n            isCurrency = false;\n        }\n\n        if (isCurrency || isPercent) {\n            //get specific number format information if format is currency or percent\n            numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n            groupSize = numberFormat.groupSize[0];\n            groupSeparator = numberFormat[COMMA];\n            decimal = numberFormat[POINT];\n            precision = numberFormat.decimals;\n            symbol = numberFormat.symbol;\n        }\n\n        hasGroup = format.indexOf(COMMA) > -1;\n        if (hasGroup) {\n            format = format.replace(commaRegExp, EMPTY);\n        }\n\n        decimalIndex = format.indexOf(POINT);\n        length = format.length;\n\n        if (decimalIndex != -1) {\n            fraction = number.toString().split(\"e\");\n            if (fraction[1]) {\n                fraction = round(number, Math.abs(fraction[1]));\n            } else {\n                fraction = fraction[0];\n            }\n            fraction = fraction.split(POINT)[1] || EMPTY;\n            zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n            sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n            hasZero = zeroIndex > -1;\n            hasSharp = sharpIndex > -1;\n            idx = fraction.length;\n\n            if (!hasZero && !hasSharp) {\n                format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n                length = format.length;\n                decimalIndex = -1;\n                idx = 0;\n            } if (hasZero && zeroIndex > sharpIndex) {\n                idx = zeroIndex;\n            } else if (sharpIndex > zeroIndex) {\n                if (hasSharp && idx > sharpIndex) {\n                    idx = sharpIndex;\n                } else if (hasZero && idx < zeroIndex) {\n                    idx = zeroIndex;\n                }\n            }\n\n            if (idx > -1) {\n                number = round(number, idx);\n            }\n        } else {\n            number = round(number);\n        }\n\n        sharpIndex = format.indexOf(SHARP);\n        startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n        //define the index of the first digit placeholder\n        if (sharpIndex == -1 && zeroIndex != -1) {\n            start = zeroIndex;\n        } else if (sharpIndex != -1 && zeroIndex == -1) {\n            start = sharpIndex;\n        } else {\n            start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n        }\n\n        sharpIndex = format.lastIndexOf(SHARP);\n        zeroIndex = format.lastIndexOf(ZERO);\n\n        //define the index of the last digit placeholder\n        if (sharpIndex == -1 && zeroIndex != -1) {\n            end = zeroIndex;\n        } else if (sharpIndex != -1 && zeroIndex == -1) {\n            end = sharpIndex;\n        } else {\n            end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n        }\n\n        if (start == length) {\n            end = start;\n        }\n\n        if (start != -1) {\n            value = number.toString().split(POINT);\n            integer = value[0];\n            fraction = value[1] || EMPTY;\n\n            integerLength = integer.length;\n            fractionLength = fraction.length;\n\n            if (negative && (number * -1) >= 0) {\n                negative = false;\n            }\n\n            //add group separator to the number if it is longer enough\n            if (hasGroup) {\n                if (integerLength === groupSize && integerLength < decimalIndex - startZeroIndex) {\n                    integer = groupSeparator + integer;\n                } else if (integerLength > groupSize) {\n                    value = EMPTY;\n                    for (idx = 0; idx < integerLength; idx++) {\n                        if (idx > 0 && (integerLength - idx) % groupSize === 0) {\n                            value += groupSeparator;\n                        }\n                        value += integer.charAt(idx);\n                    }\n\n                    integer = value;\n                }\n            }\n\n            number = format.substring(0, start);\n\n            if (negative && !hasNegativeFormat) {\n                number += \"-\";\n            }\n\n            for (idx = start; idx < length; idx++) {\n                ch = format.charAt(idx);\n\n                if (decimalIndex == -1) {\n                    if (end - idx < integerLength) {\n                        number += integer;\n                        break;\n                    }\n                } else {\n                    if (zeroIndex != -1 && zeroIndex < idx) {\n                        replacement = EMPTY;\n                    }\n\n                    if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n                        number += integer;\n                        idx = decimalIndex;\n                    }\n\n                    if (decimalIndex === idx) {\n                        number += (fraction ? decimal : EMPTY) + fraction;\n                        idx += end - decimalIndex + 1;\n                        continue;\n                    }\n                }\n\n                if (ch === ZERO) {\n                    number += ch;\n                    replacement = ch;\n                } else if (ch === SHARP) {\n                    number += replacement;\n                }\n            }\n\n            if (end >= start) {\n                number += format.substring(end + 1);\n            }\n\n            //replace symbol placeholders\n            if (isCurrency || isPercent) {\n                value = EMPTY;\n                for (idx = 0, length = number.length; idx < length; idx++) {\n                    ch = number.charAt(idx);\n                    value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\n                }\n                number = value;\n            }\n\n            length = literals.length;\n\n            if (length) {\n                for (idx = 0; idx < length; idx++) {\n                    number = number.replace(PLACEHOLDER, literals[idx]);\n                }\n            }\n        }\n\n        return number;\n    }\n\n    var round = function(value, precision) {\n        precision = precision || 0;\n\n        value = value.toString().split('e');\n        value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n        value = value.toString().split('e');\n        value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n        return value.toFixed(precision);\n    };\n\n    var toString = function(value, fmt, culture) {\n        if (fmt) {\n            if (objectToString.call(value) === \"[object Date]\") {\n                return formatDate(value, fmt, culture);\n            } else if (typeof value === NUMBER) {\n                return formatNumber(value, fmt, culture);\n            }\n        }\n\n        return value !== undefined ? value : \"\";\n    };\n\n    if (globalize && !globalize.load) {\n        toString = function(value, format, culture) {\n            if ($.isPlainObject(culture)) {\n                culture = culture.name;\n            }\n\n            return globalize.format(value, format, culture);\n        };\n    }\n\n    kendo.format = function(fmt) {\n        var values = arguments;\n\n        return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n            var value = values[parseInt(index, 10) + 1];\n\n            return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n        });\n    };\n\n    kendo._extractFormat = function (format) {\n        if (format.slice(0,3) === \"{0:\") {\n            format = format.slice(3, format.length - 1);\n        }\n\n        return format;\n    };\n\n    kendo._activeElement = function() {\n        try {\n            return document.activeElement;\n        } catch(e) {\n            return document.documentElement.activeElement;\n        }\n    };\n\n    kendo._round = round;\n    kendo.toString = toString;\n})();\n\n\n(function() {\n    var nonBreakingSpaceRegExp = /\\u00A0/g,\n        exponentRegExp = /[eE][\\-+]?[0-9]+/,\n        shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n        longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n        dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n        offsetRegExp = /[+-]\\d*/,\n        formatsSequence = [\"G\", \"g\", \"d\", \"F\", \"D\", \"y\", \"m\", \"T\", \"t\"],\n        numberRegExp = {\n            2: /^\\d{1,2}/,\n            3: /^\\d{1,3}/,\n            4: /^\\d{4}/\n        },\n        objectToString = {}.toString;\n\n    function outOfRange(value, start, end) {\n        return !(value >= start && value <= end);\n    }\n\n    function designatorPredicate(designator) {\n        return designator.charAt(0);\n    }\n\n    function mapDesignators(designators) {\n        return $.map(designators, designatorPredicate);\n    }\n\n    //if date's day is different than the typed one - adjust\n    function adjustDST(date, hours) {\n        if (!hours && date.getHours() === 23) {\n            date.setHours(date.getHours() + 2);\n        }\n    }\n\n    function lowerArray(data) {\n        var idx = 0,\n            length = data.length,\n            array = [];\n\n        for (; idx < length; idx++) {\n            array[idx] = (data[idx] + \"\").toLowerCase();\n        }\n\n        return array;\n    }\n\n    function lowerLocalInfo(localInfo) {\n        var newLocalInfo = {}, property;\n\n        for (property in localInfo) {\n            newLocalInfo[property] = lowerArray(localInfo[property]);\n        }\n\n        return newLocalInfo;\n    }\n\n    function parseExact(value, format, culture) {\n        if (!value) {\n            return null;\n        }\n\n        var lookAhead = function (match) {\n                var i = 0;\n                while (format[idx] === match) {\n                    i++;\n                    idx++;\n                }\n                if (i > 0) {\n                    idx -= 1;\n                }\n                return i;\n            },\n            getNumber = function(size) {\n                var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n                    match = value.substr(valueIdx, size).match(rg);\n\n                if (match) {\n                    match = match[0];\n                    valueIdx += match.length;\n                    return parseInt(match, 10);\n                }\n                return null;\n            },\n            getIndexByName = function (names, lower) {\n                var i = 0,\n                    length = names.length,\n                    name, nameLength,\n                    subValue;\n\n                for (; i < length; i++) {\n                    name = names[i];\n                    nameLength = name.length;\n                    subValue = value.substr(valueIdx, nameLength);\n\n                    if (lower) {\n                        subValue = subValue.toLowerCase();\n                    }\n\n                    if (subValue == name) {\n                        valueIdx += nameLength;\n                        return i + 1;\n                    }\n                }\n                return null;\n            },\n            checkLiteral = function() {\n                var result = false;\n                if (value.charAt(valueIdx) === format[idx]) {\n                    valueIdx++;\n                    result = true;\n                }\n                return result;\n            },\n            calendar = culture.calendars.standard,\n            year = null,\n            month = null,\n            day = null,\n            hours = null,\n            minutes = null,\n            seconds = null,\n            milliseconds = null,\n            idx = 0,\n            valueIdx = 0,\n            literal = false,\n            date = new Date(),\n            twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n            defaultYear = date.getFullYear(),\n            ch, count, length, pattern,\n            pmHour, UTC, matches,\n            amDesignators, pmDesignators,\n            hoursOffset, minutesOffset,\n            hasTime, match;\n\n        if (!format) {\n            format = \"d\"; //shord date format\n        }\n\n        //if format is part of the patterns get real format\n        pattern = calendar.patterns[format];\n        if (pattern) {\n            format = pattern;\n        }\n\n        format = format.split(\"\");\n        length = format.length;\n\n        for (; idx < length; idx++) {\n            ch = format[idx];\n\n            if (literal) {\n                if (ch === \"'\") {\n                    literal = false;\n                } else {\n                    checkLiteral();\n                }\n            } else {\n                if (ch === \"d\") {\n                    count = lookAhead(\"d\");\n                    if (!calendar._lowerDays) {\n                        calendar._lowerDays = lowerLocalInfo(calendar.days);\n                    }\n\n                    day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\n                    if (day === null || outOfRange(day, 1, 31)) {\n                        return null;\n                    }\n                } else if (ch === \"M\") {\n                    count = lookAhead(\"M\");\n                    if (!calendar._lowerMonths) {\n                        calendar._lowerMonths = lowerLocalInfo(calendar.months);\n                    }\n                    month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n\n                    if (month === null || outOfRange(month, 1, 12)) {\n                        return null;\n                    }\n                    month -= 1; //because month is zero based\n                } else if (ch === \"y\") {\n                    count = lookAhead(\"y\");\n                    year = getNumber(count);\n\n                    if (year === null) {\n                        return null;\n                    }\n\n                    if (count == 2) {\n                        if (typeof twoDigitYearMax === \"string\") {\n                            twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n                        }\n\n                        year = (defaultYear - defaultYear % 100) + year;\n                        if (year > twoDigitYearMax) {\n                            year -= 100;\n                        }\n                    }\n                } else if (ch === \"h\" ) {\n                    lookAhead(\"h\");\n                    hours = getNumber(2);\n                    if (hours == 12) {\n                        hours = 0;\n                    }\n                    if (hours === null || outOfRange(hours, 0, 11)) {\n                        return null;\n                    }\n                } else if (ch === \"H\") {\n                    lookAhead(\"H\");\n                    hours = getNumber(2);\n                    if (hours === null || outOfRange(hours, 0, 23)) {\n                        return null;\n                    }\n                } else if (ch === \"m\") {\n                    lookAhead(\"m\");\n                    minutes = getNumber(2);\n                    if (minutes === null || outOfRange(minutes, 0, 59)) {\n                        return null;\n                    }\n                } else if (ch === \"s\") {\n                    lookAhead(\"s\");\n                    seconds = getNumber(2);\n                    if (seconds === null || outOfRange(seconds, 0, 59)) {\n                        return null;\n                    }\n                } else if (ch === \"f\") {\n                    count = lookAhead(\"f\");\n\n                    match = value.substr(valueIdx, count).match(numberRegExp[3]);\n                    milliseconds = getNumber(count);\n\n                    if (milliseconds !== null) {\n                        match = match[0].length;\n\n                        if (match < 3) {\n                            milliseconds *= Math.pow(10, (3 - match));\n                        }\n\n                        if (count > 3) {\n                            milliseconds = parseInt(milliseconds.toString().substring(0, 3), 10);\n                        }\n                    }\n\n                    if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n                        return null;\n                    }\n\n                } else if (ch === \"t\") {\n                    count = lookAhead(\"t\");\n                    amDesignators = calendar.AM;\n                    pmDesignators = calendar.PM;\n\n                    if (count === 1) {\n                        amDesignators = mapDesignators(amDesignators);\n                        pmDesignators = mapDesignators(pmDesignators);\n                    }\n\n                    pmHour = getIndexByName(pmDesignators);\n                    if (!pmHour && !getIndexByName(amDesignators)) {\n                        return null;\n                    }\n                }\n                else if (ch === \"z\") {\n                    UTC = true;\n                    count = lookAhead(\"z\");\n\n                    if (value.substr(valueIdx, 1) === \"Z\") {\n                        checkLiteral();\n                        continue;\n                    }\n\n                    matches = value.substr(valueIdx, 6)\n                                   .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n                    if (!matches) {\n                        return null;\n                    }\n\n                    matches = matches[0].split(\":\");\n\n                    hoursOffset = matches[0];\n                    minutesOffset = matches[1];\n\n                    if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n                        valueIdx = hoursOffset.length - 2;\n                        minutesOffset = hoursOffset.substring(valueIdx);\n                        hoursOffset = hoursOffset.substring(0, valueIdx);\n                    }\n\n                    hoursOffset = parseInt(hoursOffset, 10);\n                    if (outOfRange(hoursOffset, -12, 13)) {\n                        return null;\n                    }\n\n                    if (count > 2) {\n                        minutesOffset = parseInt(minutesOffset, 10);\n                        if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n                            return null;\n                        }\n                    }\n                } else if (ch === \"'\") {\n                    literal = true;\n                    checkLiteral();\n                } else if (!checkLiteral()) {\n                    return null;\n                }\n            }\n        }\n\n        hasTime = hours !== null || minutes !== null || seconds || null;\n\n        if (year === null && month === null && day === null && hasTime) {\n            year = defaultYear;\n            month = date.getMonth();\n            day = date.getDate();\n        } else {\n            if (year === null) {\n                year = defaultYear;\n            }\n\n            if (day === null) {\n                day = 1;\n            }\n        }\n\n        if (pmHour && hours < 12) {\n            hours += 12;\n        }\n\n        if (UTC) {\n            if (hoursOffset) {\n                hours += -hoursOffset;\n            }\n\n            if (minutesOffset) {\n                minutes += -minutesOffset;\n            }\n\n            value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n        } else {\n            value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n            adjustDST(value, hours);\n        }\n\n        if (year < 100) {\n            value.setFullYear(year);\n        }\n\n        if (value.getDate() !== day && UTC === undefined) {\n            return null;\n        }\n\n        return value;\n    }\n\n    function parseMicrosoftFormatOffset(offset) {\n        var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n        offset = offset.substring(1);\n        offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n        return sign * offset;\n    }\n\n    kendo.parseDate = function(value, formats, culture) {\n        if (objectToString.call(value) === \"[object Date]\") {\n            return value;\n        }\n\n        var idx = 0;\n        var date = null;\n        var length, patterns;\n        var tzoffset;\n        var sign;\n\n        if (value && value.indexOf(\"/D\") === 0) {\n            date = dateRegExp.exec(value);\n            if (date) {\n                date = date[1];\n                tzoffset = offsetRegExp.exec(date.substring(1));\n\n                date = new Date(parseInt(date, 10));\n\n                if (tzoffset) {\n                    tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n                    date = kendo.timezone.apply(date, 0);\n                    date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n                }\n\n                return date;\n            }\n        }\n\n        culture = kendo.getCulture(culture);\n\n        if (!formats) {\n            formats = [];\n            patterns = culture.calendar.patterns;\n            length = formatsSequence.length;\n\n            for (; idx < length; idx++) {\n                formats[idx] = patterns[formatsSequence[idx]];\n            }\n\n            idx = 0;\n\n            formats = [\n                \"yyyy/MM/dd HH:mm:ss\",\n                \"yyyy/MM/dd HH:mm\",\n                \"yyyy/MM/dd\",\n                \"ddd MMM dd yyyy HH:mm:ss\",\n                \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\n                \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n                \"yyyy-MM-ddTHH:mm:sszzz\",\n                \"yyyy-MM-ddTHH:mm:ss.fffffff\",\n                \"yyyy-MM-ddTHH:mm:ss.fff\",\n                \"yyyy-MM-ddTHH:mmzzz\",\n                \"yyyy-MM-ddTHH:mmzz\",\n                \"yyyy-MM-ddTHH:mm:ss\",\n                \"yyyy-MM-ddTHH:mm\",\n                \"yyyy-MM-dd HH:mm:ss\",\n                \"yyyy-MM-dd HH:mm\",\n                \"yyyy-MM-dd\",\n                \"HH:mm:ss\",\n                \"HH:mm\"\n            ].concat(formats);\n        }\n\n        formats = isArray(formats) ? formats: [formats];\n        length = formats.length;\n\n        for (; idx < length; idx++) {\n            date = parseExact(value, formats[idx], culture);\n            if (date) {\n                return date;\n            }\n        }\n\n        return date;\n    };\n\n    kendo.parseInt = function(value, culture) {\n        var result = kendo.parseFloat(value, culture);\n        if (result) {\n            result = result | 0;\n        }\n        return result;\n    };\n\n    kendo.parseFloat = function(value, culture, format) {\n        if (!value && value !== 0) {\n           return null;\n        }\n\n        if (typeof value === NUMBER) {\n           return value;\n        }\n\n        value = value.toString();\n        culture = kendo.getCulture(culture);\n\n        var number = culture.numberFormat,\n            percent = number.percent,\n            currency = number.currency,\n            symbol = currency.symbol,\n            percentSymbol = percent.symbol,\n            negative = value.indexOf(\"-\"),\n            parts, isPercent;\n\n        //handle exponential number\n        if (exponentRegExp.test(value)) {\n            value = parseFloat(value.replace(number[\".\"], \".\"));\n            if (isNaN(value)) {\n                value = null;\n            }\n            return value;\n        }\n\n        if (negative > 0) {\n            return null;\n        } else {\n            negative = negative > -1;\n        }\n\n        if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\n            number = currency;\n            parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\n            if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n                value = value.replace(parts[0], \"\").replace(parts[1], \"\");\n                negative = true;\n            }\n        } else if (value.indexOf(percentSymbol) > -1) {\n            isPercent = true;\n            number = percent;\n            symbol = percentSymbol;\n        }\n\n        value = value.replace(\"-\", \"\")\n                     .replace(symbol, \"\")\n                     .replace(nonBreakingSpaceRegExp, \" \")\n                     .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n                     .replace(number[\".\"], \".\");\n\n        value = parseFloat(value);\n\n        if (isNaN(value)) {\n            value = null;\n        } else if (negative) {\n            value *= -1;\n        }\n\n        if (value && isPercent) {\n            value /= 100;\n        }\n\n        return value;\n    };\n\n    if (globalize && !globalize.load) {\n        kendo.parseDate = function (value, format, culture) {\n            if (objectToString.call(value) === \"[object Date]\") {\n                return value;\n            }\n\n            return globalize.parseDate(value, format, culture);\n        };\n\n        kendo.parseFloat = function (value, culture) {\n            if (typeof value === NUMBER) {\n                return value;\n            }\n\n            if (value === undefined || value === null) {\n               return null;\n            }\n\n            if ($.isPlainObject(culture)) {\n                culture = culture.name;\n            }\n\n            value = globalize.parseFloat(value, culture);\n\n            return isNaN(value) ? null : value;\n        };\n    }\n})();\n\n    function getShadows(element) {\n        var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\n            radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\n            blur = math.max((+radius[3]), +(radius[4] || 0));\n\n        return {\n            left: (-radius[1]) + blur,\n            right: (+radius[1]) + blur,\n            bottom: (+radius[2]) + blur\n        };\n    }\n\n    function wrap(element, autosize) {\n        var browser = support.browser,\n            percentage,\n            isRtl = element.css(\"direction\") == \"rtl\";\n\n        if (!element.parent().hasClass(\"k-animation-container\")) {\n            var shadows = getShadows(element),\n                width = element[0].style.width,\n                height = element[0].style.height,\n                percentWidth = percentRegExp.test(width),\n                percentHeight = percentRegExp.test(height);\n\n            if (browser.opera) { // Box shadow can't be retrieved in Opera\n                shadows.left = shadows.right = shadows.bottom = 5;\n            }\n\n            percentage = percentWidth || percentHeight;\n\n            if (!percentWidth && (!autosize || (autosize && width))) { width = element.outerWidth(); }\n            if (!percentHeight && (!autosize || (autosize && height))) { height = element.outerHeight(); }\n\n            element.wrap(\n                         $(\"<div/>\")\n                         .addClass(\"k-animation-container\")\n                         .css({\n                             width: width,\n                             height: height,\n                             marginLeft: shadows.left * (isRtl ? 1 : -1),\n                             paddingLeft: shadows.left,\n                             paddingRight: shadows.right,\n                             paddingBottom: shadows.bottom\n                         }));\n\n            if (percentage) {\n                element.css({\n                    width: \"100%\",\n                    height: \"100%\",\n                    boxSizing: \"border-box\",\n                    mozBoxSizing: \"border-box\",\n                    webkitBoxSizing: \"border-box\"\n                });\n            }\n        } else {\n            var wrapper = element.parent(\".k-animation-container\"),\n                wrapperStyle = wrapper[0].style;\n\n            if (wrapper.is(\":hidden\")) {\n                wrapper.show();\n            }\n\n            percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n\n            if (!percentage) {\n                wrapper.css({\n                    width: element.outerWidth(),\n                    height: element.outerHeight(),\n                    boxSizing: \"content-box\",\n                    mozBoxSizing: \"content-box\",\n                    webkitBoxSizing: \"content-box\"\n                });\n            }\n        }\n\n        if (browser.msie && math.floor(browser.version) <= 7) {\n            element.css({ zoom: 1 });\n            element.children(\".k-menu\").width(element.width());\n        }\n\n        return element.parent();\n    }\n\n    function deepExtend(destination) {\n        var i = 1,\n            length = arguments.length;\n\n        for (i = 1; i < length; i++) {\n            deepExtendOne(destination, arguments[i]);\n        }\n\n        return destination;\n    }\n\n    function deepExtendOne(destination, source) {\n        var ObservableArray = kendo.data.ObservableArray,\n            LazyObservableArray = kendo.data.LazyObservableArray,\n            DataSource = kendo.data.DataSource,\n            HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n            property,\n            propValue,\n            propType,\n            propInit,\n            destProp;\n\n        for (property in source) {\n            propValue = source[property];\n            propType = typeof propValue;\n\n            if (propType === OBJECT && propValue !== null) {\n                propInit = propValue.constructor;\n            } else {\n                propInit = null;\n            }\n\n            if (propInit &&\n                propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\n                propInit !== DataSource && propInit !== HierarchicalDataSource) {\n\n                if (propValue instanceof Date) {\n                    destination[property] = new Date(propValue.getTime());\n                } else if (isFunction(propValue.clone)) {\n                    destination[property] = propValue.clone();\n                } else {\n                    destProp = destination[property];\n                    if (typeof (destProp) === OBJECT) {\n                        destination[property] = destProp || {};\n                    } else {\n                        destination[property] = {};\n                    }\n                    deepExtendOne(destination[property], propValue);\n                }\n            } else if (propType !== UNDEFINED) {\n                destination[property] = propValue;\n            }\n        }\n\n        return destination;\n    }\n\n    function testRx(agent, rxs, dflt) {\n        for (var rx in rxs) {\n            if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n                return rx;\n            }\n        }\n        return dflt !== undefined ? dflt : agent;\n    }\n\n    function toHyphens(str) {\n        return str.replace(/([a-z][A-Z])/g, function (g) {\n            return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n        });\n    }\n\n    function toCamelCase(str) {\n        return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n            return g1.toUpperCase();\n        });\n    }\n\n    function getComputedStyles(element, properties) {\n        var styles = {}, computedStyle;\n\n        if (document.defaultView && document.defaultView.getComputedStyle) {\n            computedStyle = document.defaultView.getComputedStyle(element, \"\");\n\n            if (properties) {\n                $.each(properties, function(idx, value) {\n                    styles[value] = computedStyle.getPropertyValue(value);\n                });\n            }\n        } else {\n            computedStyle = element.currentStyle;\n\n            if (properties) {\n                $.each(properties, function(idx, value) {\n                    styles[value] = computedStyle[toCamelCase(value)];\n                });\n            }\n        }\n\n        if (!kendo.size(styles)) {\n            styles = computedStyle;\n        }\n\n        return styles;\n    }\n\n    (function () {\n        support._scrollbar = undefined;\n\n        support.scrollbar = function (refresh) {\n            if (!isNaN(support._scrollbar) && !refresh) {\n                return support._scrollbar;\n            } else {\n                var div = document.createElement(\"div\"),\n                    result;\n\n                div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n                div.innerHTML = \"&nbsp;\";\n                document.body.appendChild(div);\n\n                support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n\n                document.body.removeChild(div);\n\n                return result;\n            }\n        };\n\n        support.isRtl = function(element) {\n            return $(element).closest(\".k-rtl\").length > 0;\n        };\n\n        var table = document.createElement(\"table\");\n\n        // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\n        try {\n            table.innerHTML = \"<tr><td></td></tr>\";\n\n            support.tbodyInnerHtml = true;\n        } catch (e) {\n            support.tbodyInnerHtml = false;\n        }\n\n        support.touch = \"ontouchstart\" in window;\n        support.msPointers = window.MSPointerEvent;\n        support.pointers = window.PointerEvent;\n\n        var transitions = support.transitions = false,\n            transforms = support.transforms = false,\n            elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\n        support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in document.documentElement.style || \"msPerspective\" in document.documentElement.style;\n\n        each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function () {\n            var prefix = this.toString(),\n                hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n            if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n                var lowPrefix = prefix.toLowerCase();\n\n                transforms = {\n                    css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n                    prefix: prefix,\n                    event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n                };\n\n                if (hasTransitions) {\n                    transitions = transforms;\n                    transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n                }\n\n                return false;\n            }\n        });\n\n        table = null;\n\n        support.transforms = transforms;\n        support.transitions = transitions;\n\n        support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n\n        try {\n            support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n            support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n        } catch(e) {\n            //window.outerWidth throws error when in IE showModalDialog.\n            support.screenWidth = window.screen.availWidth;\n            support.screenHeight = window.screen.availHeight;\n        }\n\n        support.detectOS = function (ua) {\n            var os = false, minorVersion, match = [],\n                notAndroidPhone = !/mobile safari/i.test(ua),\n                agentRxs = {\n                    wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n                    ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n                    meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n                    webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n                    tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n                    sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n                    ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n                },\n                osRxs = {\n                    ios: /^i(phone|pad|pod)$/i,\n                    android: /^android|fire$/i,\n                    blackberry: /^blackberry|playbook/i,\n                    windows: /windows/,\n                    wp: /wp/,\n                    flat: /sailfish|ffos|tizen/i,\n                    meego: /meego/\n                },\n                formFactorRxs = {\n                    tablet: /playbook|ipad|fire/i\n                },\n                browserRxs = {\n                    omini: /Opera\\sMini/i,\n                    omobile: /Opera\\sMobi/i,\n                    firefox: /Firefox|Fennec/i,\n                    mobilesafari: /version\\/.*safari/i,\n                    ie: /MSIE|Windows\\sPhone/i,\n                    chrome: /chrome|crios/i,\n                    webkit: /webkit/i\n                };\n\n            for (var agent in agentRxs) {\n                if (agentRxs.hasOwnProperty(agent)) {\n                    match = ua.match(agentRxs[agent]);\n                    if (match) {\n                        if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n                        os = {};\n                        os.device = agent;\n                        os.tablet = testRx(agent, formFactorRxs, false);\n                        os.browser = testRx(ua, browserRxs, \"default\");\n                        os.name = testRx(agent, osRxs);\n                        os[os.name] = true;\n                        os.majorVersion = match[2];\n                        os.minorVersion = match[3].replace(\"_\", \".\");\n                        minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n                        os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n                        os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\n                        os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\n\n                        if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n                            os.tablet = agent;\n                        }\n\n                        break;\n                    }\n                }\n            }\n            return os;\n        };\n\n        var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n\n        support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n        support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n\n        support.hasNativeScrolling = false;\n\n        if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\n            support.hasNativeScrolling = mobileOS;\n        }\n\n        support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n\n        support.detectBrowser = function(ua) {\n            var browser = false, match = [],\n                browserRxs = {\n                    webkit: /(chrome)[ \\/]([\\w.]+)/i,\n                    safari: /(webkit)[ \\/]([\\w.]+)/i,\n                    opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n                    msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n                    mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n                };\n\n            for (var agent in browserRxs) {\n                if (browserRxs.hasOwnProperty(agent)) {\n                    match = ua.match(browserRxs[agent]);\n                    if (match) {\n                        browser = {};\n                        browser[agent] = true;\n                        browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n                        browser.version = parseInt(document.documentMode || match[2], 10);\n\n                        break;\n                    }\n                }\n            }\n\n            return browser;\n        };\n\n        support.browser = support.detectBrowser(navigator.userAgent);\n\n        support.zoomLevel = function() {\n            try {\n                return support.touch ? (document.documentElement.clientWidth / window.innerWidth) :\n                       support.browser.msie && support.browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth / (top || window).innerWidth) : 1;\n            } catch(e) {\n                return 1;\n            }\n        };\n\n        support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != \"undefined\" && !(support.browser.msie && support.browser.version < 8);\n\n        (function(browser) {\n            // add browser-specific CSS class\n            var cssClass = \"\",\n                docElement = $(document.documentElement),\n                majorVersion = parseInt(browser.version, 10);\n\n            if (browser.msie) {\n                cssClass = \"ie\";\n            } else if (browser.mozilla) {\n                cssClass = \"ff\";\n            } else if (browser.safari) {\n                cssClass = \"safari\";\n            } else if (browser.webkit) {\n                cssClass = \"webkit\";\n            } else if (browser.opera) {\n                cssClass = \"opera\";\n            }\n\n            if (cssClass) {\n                cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\n            }\n            if (support.mobileOS) {\n                cssClass += \" k-mobile\";\n            }\n\n            docElement.addClass(cssClass);\n        })(support.browser);\n\n        support.eventCapture = document.documentElement.addEventListener;\n\n        var input = document.createElement(\"input\");\n\n        support.placeholder = \"placeholder\" in input;\n        support.propertyChangeEvent = \"onpropertychange\" in input;\n\n        support.input = (function() {\n            var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\n            var length = types.length;\n            var value = \"test\";\n            var result = {};\n            var idx = 0;\n            var type;\n\n            for (;idx < length; idx++) {\n                type = types[idx];\n                input.setAttribute(\"type\", type);\n                input.value = value;\n\n                result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\n            }\n\n            return result;\n        })();\n\n        input.style.cssText = \"float:left;\";\n\n        support.cssFloat = !!input.style.cssFloat;\n\n        input = null;\n\n        support.stableSort = (function() {\n            // Chrome sort is not stable for more than *10* items\n            // IE9+ sort is not stable for than *512* items\n            var threshold = 513;\n\n            var sorted = [{\n                index: 0,\n                field: \"b\"\n            }];\n\n            for (var i = 1; i < threshold; i++) {\n                sorted.push({\n                    index: i,\n                    field: \"a\"\n                });\n            }\n\n            sorted.sort(function(a, b) {\n                return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\n            });\n\n            return sorted[0].index === 1;\n        })();\n\n        support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\n                                  elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\n                                  elementProto.matchesSelector || elementProto.matches ||\n          function( selector ) {\n              var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\n                  i = nodeList.length;\n\n              while (i--) {\n                  if (nodeList[i] == this) {\n                      return true;\n                  }\n              }\n\n              return false;\n          };\n\n        support.pushState = window.history && window.history.pushState;\n\n        var documentMode = document.documentMode;\n\n        support.hashChange = (\"onhashchange\" in window) && !(support.browser.msie && (!documentMode || documentMode <= 8)); // old IE detection\n    })();\n\n\n    function size(obj) {\n        var result = 0, key;\n        for (key in obj) {\n            if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\n                result++;\n            }\n        }\n\n        return result;\n    }\n\n    function getOffset(element, type, positioned) {\n        if (!type) {\n            type = \"offset\";\n        }\n\n        var result = element[type](),\n            mobileOS = support.mobileOS;\n\n        // IE10 touch zoom is living in a separate viewport\n        if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n            result.top -= (window.pageYOffset - document.documentElement.scrollTop);\n            result.left -= (window.pageXOffset - document.documentElement.scrollLeft);\n        }\n\n        return result;\n    }\n\n    var directions = {\n        left: { reverse: \"right\" },\n        right: { reverse: \"left\" },\n        down: { reverse: \"up\" },\n        up: { reverse: \"down\" },\n        top: { reverse: \"bottom\" },\n        bottom: { reverse: \"top\" },\n        \"in\": { reverse: \"out\" },\n        out: { reverse: \"in\" }\n    };\n\n    function parseEffects(input) {\n        var effects = {};\n\n        each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\n            effects[idx] = this;\n        });\n\n        return effects;\n    }\n\n    function fx(element) {\n        return new kendo.effects.Element(element);\n    }\n\n    var effects = {};\n\n    $.extend(effects, {\n        enabled: true,\n        Element: function(element) {\n            this.element = $(element);\n        },\n\n        promise: function(element, options) {\n            if (!element.is(\":visible\")) {\n                element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n            }\n\n            if (options.hide) {\n                element.data(\"olddisplay\", element.css(\"display\")).hide();\n            }\n\n            if (options.init) {\n                options.init();\n            }\n\n            if (options.completeCallback) {\n                options.completeCallback(element); // call the external complete callback with the element\n            }\n\n            element.dequeue();\n        },\n\n        disable: function() {\n            this.enabled = false;\n            this.promise = this.promiseShim;\n        },\n\n        enable: function() {\n            this.enabled = true;\n            this.promise = this.animatedPromise;\n        }\n    });\n\n    effects.promiseShim = effects.promise;\n\n    function prepareAnimationOptions(options, duration, reverse, complete) {\n        if (typeof options === STRING) {\n            // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\n\n            // only callback is provided e.g. animate(element, options, function() {});\n            if (isFunction(duration)) {\n                complete = duration;\n                duration = 400;\n                reverse = false;\n            }\n\n            if (isFunction(reverse)) {\n                complete = reverse;\n                reverse = false;\n            }\n\n            if (typeof duration === BOOLEAN){\n                reverse = duration;\n                duration = 400;\n            }\n\n            options = {\n                effects: options,\n                duration: duration,\n                reverse: reverse,\n                complete: complete\n            };\n        }\n\n        return extend({\n            //default options\n            effects: {},\n            duration: 400, //jQuery default duration\n            reverse: false,\n            init: noop,\n            teardown: noop,\n            hide: false\n        }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\n\n    }\n\n    function animate(element, options, duration, reverse, complete) {\n        var idx = 0,\n            length = element.length,\n            instance;\n\n        for (; idx < length; idx ++) {\n            instance = $(element[idx]);\n            instance.queue(function() {\n                effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n            });\n        }\n\n        return element;\n    }\n\n    function toggleClass(element, classes, options, add) {\n        if (classes) {\n            classes = classes.split(\" \");\n\n            each(classes, function(idx, value) {\n                element.toggleClass(value, add);\n            });\n        }\n\n        return element;\n    }\n\n    if (!(\"kendoAnimate\" in $.fn)) {\n        extend($.fn, {\n            kendoStop: function(clearQueue, gotoEnd) {\n                return this.stop(clearQueue, gotoEnd);\n            },\n\n            kendoAnimate: function(options, duration, reverse, complete) {\n                return animate(this, options, duration, reverse, complete);\n            },\n\n            kendoAddClass: function(classes, options){\n                return kendo.toggleClass(this, classes, options, true);\n            },\n\n            kendoRemoveClass: function(classes, options){\n                return kendo.toggleClass(this, classes, options, false);\n            },\n            kendoToggleClass: function(classes, options, toggle){\n                return kendo.toggleClass(this, classes, options, toggle);\n            }\n        });\n    }\n\n    var ampRegExp = /&/g,\n        ltRegExp = /</g,\n        quoteRegExp = /\"/g,\n        aposRegExp = /'/g,\n        gtRegExp = />/g;\n    function htmlEncode(value) {\n        return (\"\" + value).replace(ampRegExp, \"&amp;\").replace(ltRegExp, \"&lt;\").replace(gtRegExp, \"&gt;\").replace(quoteRegExp, \"&quot;\").replace(aposRegExp, \"&#39;\");\n    }\n\n    var eventTarget = function (e) {\n        return e.target;\n    };\n\n    if (support.touch) {\n\n        eventTarget = function(e) {\n            var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\n\n            return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n        };\n\n        each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\n            $.fn[value] = function(callback) {\n                return this.bind(value, callback);\n            };\n        });\n    }\n\n    if (support.touch) {\n        if (!support.mobileOS) {\n            support.mousedown = \"mousedown touchstart\";\n            support.mouseup = \"mouseup touchend\";\n            support.mousemove = \"mousemove touchmove\";\n            support.mousecancel = \"mouseleave touchcancel\";\n            support.click = \"click\";\n            support.resize = \"resize\";\n        } else {\n            support.mousedown = \"touchstart\";\n            support.mouseup = \"touchend\";\n            support.mousemove = \"touchmove\";\n            support.mousecancel = \"touchcancel\";\n            support.click = \"touchend\";\n            support.resize = \"orientationchange\";\n        }\n    } else if (support.pointers) {\n        support.mousemove = \"pointermove\";\n        support.mousedown = \"pointerdown\";\n        support.mouseup = \"pointerup\";\n        support.mousecancel = \"pointercancel\";\n        support.click = \"pointerup\";\n        support.resize = \"orientationchange resize\";\n    } else if (support.msPointers) {\n        support.mousemove = \"MSPointerMove\";\n        support.mousedown = \"MSPointerDown\";\n        support.mouseup = \"MSPointerUp\";\n        support.mousecancel = \"MSPointerCancel\";\n        support.click = \"MSPointerUp\";\n        support.resize = \"orientationchange resize\";\n    } else {\n        support.mousemove = \"mousemove\";\n        support.mousedown = \"mousedown\";\n        support.mouseup = \"mouseup\";\n        support.mousecancel = \"mouseleave\";\n        support.click = \"click\";\n        support.resize = \"resize\";\n    }\n\n    var wrapExpression = function(members, paramName) {\n        var result = paramName || \"d\",\n            index,\n            idx,\n            length,\n            member,\n            count = 1;\n\n        for (idx = 0, length = members.length; idx < length; idx++) {\n            member = members[idx];\n            if (member !== \"\") {\n                index = member.indexOf(\"[\");\n\n                if (index !== 0) {\n                    if (index == -1) {\n                        member = \".\" + member;\n                    } else {\n                        count++;\n                        member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\n                    }\n                }\n\n                count++;\n                result += member + ((idx < length - 1) ? \" || {})\" : \")\");\n            }\n        }\n        return new Array(count).join(\"(\") + result;\n    },\n    localUrlRe = /^([a-z]+:)?\\/\\//i;\n\n    extend(kendo, {\n        ui: kendo.ui || {},\n        fx: kendo.fx || fx,\n        effects: kendo.effects || effects,\n        mobile: kendo.mobile || { },\n        data: kendo.data || {},\n        dataviz: kendo.dataviz || {},\n        keys: {\n            INSERT: 45,\n            DELETE: 46,\n            BACKSPACE: 8,\n            TAB: 9,\n            ENTER: 13,\n            ESC: 27,\n            LEFT: 37,\n            UP: 38,\n            RIGHT: 39,\n            DOWN: 40,\n            END: 35,\n            HOME: 36,\n            SPACEBAR: 32,\n            PAGEUP: 33,\n            PAGEDOWN: 34,\n            F2: 113,\n            F10: 121,\n            F12: 123,\n            NUMPAD_PLUS: 107,\n            NUMPAD_MINUS: 109,\n            NUMPAD_DOT: 110\n        },\n        support: kendo.support || support,\n        animate: kendo.animate || animate,\n        ns: \"\",\n        attr: function(value) {\n            return \"data-\" + kendo.ns + value;\n        },\n        getShadows: getShadows,\n        wrap: wrap,\n        deepExtend: deepExtend,\n        getComputedStyles: getComputedStyles,\n        size: size,\n        toCamelCase: toCamelCase,\n        toHyphens: toHyphens,\n        getOffset: kendo.getOffset || getOffset,\n        parseEffects: kendo.parseEffects || parseEffects,\n        toggleClass: kendo.toggleClass || toggleClass,\n        directions: kendo.directions || directions,\n        Observable: Observable,\n        Class: Class,\n        Template: Template,\n        template: proxy(Template.compile, Template),\n        render: proxy(Template.render, Template),\n        stringify: proxy(JSON.stringify, JSON),\n        eventTarget: eventTarget,\n        htmlEncode: htmlEncode,\n        isLocalUrl: function(url) {\n            return url && !localUrlRe.test(url);\n        },\n\n        expr: function(expression, safe, paramName) {\n            expression = expression || \"\";\n\n            if (typeof safe == STRING) {\n                paramName = safe;\n                safe = false;\n            }\n\n            paramName = paramName || \"d\";\n\n            if (expression && expression.charAt(0) !== \"[\") {\n                expression = \".\" + expression;\n            }\n\n            if (safe) {\n                expression = wrapExpression(expression.split(\".\"), paramName);\n            } else {\n                expression = paramName + expression;\n            }\n\n            return expression;\n        },\n\n        getter: function(expression, safe) {\n            var key = expression + safe;\n            return getterCache[key] = getterCache[key] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\n        },\n\n        setter: function(expression) {\n            return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\n        },\n\n        accessor: function(expression) {\n            return {\n                get: kendo.getter(expression),\n                set: kendo.setter(expression)\n            };\n        },\n\n        guid: function() {\n            var id = \"\", i, random;\n\n            for (i = 0; i < 32; i++) {\n                random = math.random() * 16 | 0;\n\n                if (i == 8 || i == 12 || i == 16 || i == 20) {\n                    id += \"-\";\n                }\n                id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\n            }\n\n            return id;\n        },\n\n        roleSelector: function(role) {\n            return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\n        },\n\n        directiveSelector: function(directives) {\n            var selectors = directives.split(\" \");\n\n            if (selectors) {\n                for (var i = 0; i < selectors.length; i++) {\n                    if (selectors[i] != \"view\") {\n                        selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, \"$1-$2\");\n                    }\n                }\n            }\n\n            return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\n        },\n\n        triggeredByInput: function(e) {\n            return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\n        },\n\n        logToConsole: function(message) {\n            var console = window.console;\n\n            if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\n                console.log(message);\n            }\n        }\n    });\n\n    var Widget = Observable.extend( {\n        init: function(element, options) {\n            var that = this;\n\n            that.element = kendo.jQuery(element).handler(that);\n\n            that.angular(\"init\", options);\n\n            Observable.fn.init.call(that);\n\n            var dataSource = options ? options.dataSource : null;\n\n            if (dataSource) {\n                // avoid deep cloning the data source\n                options = extend({}, options, { dataSource: {} });\n            }\n\n            options = that.options = extend(true, {}, that.options, options);\n\n            if (dataSource) {\n                options.dataSource = dataSource;\n            }\n\n            if (!that.element.attr(kendo.attr(\"role\"))) {\n                that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\n            }\n\n            that.element.data(\"kendo\" + options.prefix + options.name, that);\n\n            that.bind(that.events, options);\n        },\n\n        events: [],\n\n        options: {\n            prefix: \"\"\n        },\n\n        _hasBindingTarget: function() {\n            return !!this.element[0].kendoBindingTarget;\n        },\n\n        _tabindex: function(target) {\n            target = target || this.wrapper;\n\n            var element = this.element,\n                TABINDEX = \"tabindex\",\n                tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n\n            element.removeAttr(TABINDEX);\n\n            target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n        },\n\n        setOptions: function(options) {\n            this._setEvents(options);\n            $.extend(this.options, options);\n        },\n\n        _setEvents: function(options) {\n            var that = this,\n                idx = 0,\n                length = that.events.length,\n                e;\n\n            for (; idx < length; idx ++) {\n                e = that.events[idx];\n                if (that.options[e] && options[e]) {\n                    that.unbind(e, that.options[e]);\n                }\n            }\n\n            that.bind(that.events, options);\n        },\n\n        resize: function(force) {\n            var size = this.getSize(),\n                currentSize = this._size;\n\n            if (force || !currentSize || size.width !== currentSize.width || size.height !== currentSize.height) {\n                this._size = size;\n                this._resize(size);\n                this.trigger(\"resize\", size);\n            }\n        },\n\n        getSize: function() {\n            return kendo.dimensions(this.element);\n        },\n\n        size: function(size) {\n            if (!size) {\n                return this.getSize();\n            } else {\n                this.setSize(size);\n            }\n        },\n\n        setSize: $.noop,\n        _resize: $.noop,\n\n        destroy: function() {\n            var that = this;\n\n            that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\n            that.element.removeData(\"handler\");\n            that.unbind();\n        },\n\n        angular: function(){}\n    });\n\n    var DataBoundWidget = Widget.extend({\n        // Angular consumes these.\n        dataItems: function() {\n            return this.dataSource.flatView();\n        },\n\n        _angularItems: function(cmd) {\n            var that = this;\n            that.angular(cmd, function(){\n                return {\n                    elements: that.items(),\n                    data: $.map(that.dataItems(), function(dataItem){\n                        return { dataItem: dataItem };\n                    })\n                };\n            });\n        }\n    });\n\n    kendo.dimensions = function(element, dimensions) {\n        var domElement = element[0];\n\n        if (dimensions) {\n            element.css(dimensions);\n        }\n\n        return { width: domElement.offsetWidth, height: domElement.offsetHeight };\n    };\n\n    kendo.notify = noop;\n\n    var templateRegExp = /template$/i,\n        jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\n        jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/,\n        dashRegExp = /([A-Z])/g;\n\n    function parseOption(element, option) {\n        var value;\n\n        if (option.indexOf(\"data\") === 0) {\n            option = option.substring(4);\n            option = option.charAt(0).toLowerCase() + option.substring(1);\n        }\n\n        option = option.replace(dashRegExp, \"-$1\");\n        value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n        if (value === null) {\n            value = undefined;\n        } else if (value === \"null\") {\n            value = null;\n        } else if (value === \"true\") {\n            value = true;\n        } else if (value === \"false\") {\n            value = false;\n        } else if (numberRegExp.test(value)) {\n            value = parseFloat(value);\n        } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n            value = new Function(\"return (\" + value + \")\")();\n        }\n\n        return value;\n    }\n\n    function parseOptions(element, options) {\n        var result = {},\n            option,\n            value;\n\n        for (option in options) {\n            value = parseOption(element, option);\n\n            if (value !== undefined) {\n\n                if (templateRegExp.test(option)) {\n                    value = kendo.template($(\"#\" + value).html());\n                }\n\n                result[option] = value;\n            }\n        }\n\n        return result;\n    }\n\n    kendo.initWidget = function(element, options, roles) {\n        var result,\n            option,\n            widget,\n            idx,\n            length,\n            role,\n            value,\n            dataSource,\n            fullPath,\n            widgetKeyRegExp;\n\n        // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n        if (!roles) {\n            roles = kendo.ui.roles;\n        } else if (roles.roles) {\n            roles = roles.roles;\n        }\n\n        element = element.nodeType ? element : element[0];\n\n        role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n        if (!role) {\n            return;\n        }\n\n        fullPath = role.indexOf(\".\") === -1;\n\n        // look for any widget that may be already instantiated based on this role.\n        // The prefix used is unknown, hence the regexp\n        //\n\n        if (fullPath) {\n            widget = roles[role];\n        } else { // full namespace path - like kendo.ui.Widget\n            widget = kendo.getter(role)(window);\n        }\n\n        var data = $(element).data(),\n            widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n        if (fullPath) {\n            widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n        } else { // full namespace path - like kendo.ui.Widget\n            widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n        }\n\n        for(var key in data) {\n            if (key.match(widgetKeyRegExp)) {\n                // we have detected a widget of the same kind - save its reference, we will set its options\n                if (key === widgetKey) {\n                    result = data[key];\n                } else {\n                    return data[key];\n                }\n            }\n        }\n\n        if (!widget) {\n            return;\n        }\n\n        dataSource = parseOption(element, \"dataSource\");\n\n        options = $.extend({}, parseOptions(element, widget.fn.options), options);\n\n        if (dataSource) {\n            if (typeof dataSource === STRING) {\n                options.dataSource = kendo.getter(dataSource)(window);\n            } else {\n                options.dataSource = dataSource;\n            }\n        }\n\n        for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n            option = widget.fn.events[idx];\n\n            value = parseOption(element, option);\n\n            if (value !== undefined) {\n                options[option] = kendo.getter(value)(window);\n            }\n        }\n\n        if (!result) {\n            result = new widget(element, options);\n        } else if (!$.isEmptyObject(options)) {\n            result.setOptions(options);\n        }\n\n        return result;\n    };\n\n    kendo.rolesFromNamespaces = function(namespaces) {\n        var roles = [],\n            idx,\n            length;\n\n        if (!namespaces[0]) {\n            namespaces = [kendo.ui, kendo.dataviz.ui];\n        }\n\n        for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n            roles[idx] = namespaces[idx].roles;\n        }\n\n        return extend.apply(null, [{}].concat(roles.reverse()));\n    };\n\n    kendo.init = function(element) {\n        var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n        $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n            kendo.initWidget(this, {}, roles);\n        });\n    };\n\n    kendo.destroy = function(element) {\n        $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n            var data = $(this).data();\n\n            for (var key in data) {\n                if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\n                    data[key].destroy();\n                }\n            }\n        });\n    };\n\n    function containmentComparer(a, b) {\n        return $.contains(a, b) ? -1 : 1;\n    }\n\n    function resizableWidget() {\n        var widget = $(this);\n        return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\"]) > -1) || widget.is(\":visible\");\n    }\n\n    kendo.resize = function(element, force) {\n        var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n        if (!widgets.length) {\n            return;\n        }\n\n        // sort widgets based on their parent-child relation\n        var widgetsArray = $.makeArray(widgets);\n        widgetsArray.sort(containmentComparer);\n\n        // resize widgets\n        $.each(widgetsArray, function () {\n            var widget = kendo.widgetInstance($(this));\n            if (widget) {\n                widget.resize(force);\n            }\n        });\n    };\n\n    kendo.parseOptions = parseOptions;\n\n    extend(kendo.ui, {\n        Widget: Widget,\n        DataBoundWidget: DataBoundWidget,\n        roles: {},\n        progress: function(container, toggle) {\n            var mask = container.find(\".k-loading-mask\"),\n                support = kendo.support,\n                browser = support.browser,\n                isRtl, leftRight, webkitCorrection, containerScrollLeft;\n\n            if (toggle) {\n                if (!mask.length) {\n                    isRtl = support.isRtl(container);\n                    leftRight = isRtl ? \"right\" : \"left\";\n                    containerScrollLeft = container.scrollLeft();\n                    webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n                    mask = $(\"<div class='k-loading-mask'><span class='k-loading-text'>Loading...</span><div class='k-loading-image'/><div class='k-loading-color'/></div>\")\n                        .width(\"100%\").height(\"100%\")\n                        .css(\"top\", container.scrollTop())\n                        .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n                        .prependTo(container);\n                }\n            } else if (mask) {\n                mask.remove();\n            }\n        },\n        plugin: function(widget, register, prefix) {\n            var name = widget.fn.options.name,\n                getter;\n\n            register = register || kendo.ui;\n            prefix = prefix || \"\";\n\n            register[name] = widget;\n\n            register.roles[name.toLowerCase()] = widget;\n\n            getter = \"getKendo\" + prefix + name;\n            name = \"kendo\" + prefix + name;\n\n            $.fn[name] = function(options) {\n                var value = this,\n                    args;\n\n                if (typeof options === STRING) {\n                    args = slice.call(arguments, 1);\n\n                    this.each(function(){\n                        var widget = $.data(this, name),\n                            method,\n                            result;\n\n                        if (!widget) {\n                            throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n                        }\n\n                        method = widget[options];\n\n                        if (typeof method !== FUNCTION) {\n                            throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n                        }\n\n                        result = method.apply(widget, args);\n\n                        if (result !== undefined) {\n                            value = result;\n                            return false;\n                        }\n                    });\n                } else {\n                    this.each(function() {\n                        new widget(this, options);\n                    });\n                }\n\n                return value;\n            };\n\n            $.fn[name].widget = widget;\n\n            $.fn[getter] = function() {\n                return this.data(name);\n            };\n        }\n    });\n\n    var ContainerNullObject = { bind: function () { return this; }, nullObject: true, options: {} };\n\n    var MobileWidget = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n            this.element.autoApplyNS();\n            this.wrapper = this.element;\n            this.element.addClass(\"km-widget\");\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.element.kendoDestroy();\n        },\n\n        options: {\n            prefix: \"Mobile\"\n        },\n\n        events: [],\n\n        view: function() {\n            var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\n            return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n        },\n\n        viewHasNativeScrolling: function() {\n            var view = this.view();\n            return view && view.options.useNativeScrolling;\n        },\n\n        container: function() {\n            var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\n            return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n        }\n    });\n\n    extend(kendo.mobile, {\n        init: function(element) {\n            kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n        },\n\n        appLevelNativeScrolling: function() {\n            return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n        },\n\n        roles: {},\n\n        ui: {\n            Widget: MobileWidget,\n            DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n            roles: {},\n            plugin: function(widget) {\n                kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\n            }\n        }\n    });\n\n    deepExtend(kendo.dataviz, {\n        init: function(element) {\n            kendo.init(element, kendo.dataviz.ui);\n        },\n        ui: {\n            roles: {},\n            themes: {},\n            views: [],\n            plugin: function(widget) {\n                kendo.ui.plugin(widget, kendo.dataviz.ui);\n            }\n        },\n        roles: {}\n    });\n\n    kendo.touchScroller = function(elements, options) {\n        // return the first touch scroller\n        return $(elements).map(function(idx, element) {\n            element = $(element);\n            if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\n                element.kendoMobileScroller(options);\n                return element.data(\"kendoMobileScroller\");\n            } else {\n                return false;\n            }\n        })[0];\n    };\n\n    kendo.preventDefault = function(e) {\n        e.preventDefault();\n    };\n\n    kendo.widgetInstance = function(element, suites) {\n        var role = element.data(kendo.ns + \"role\"),\n            widgets = [], i, length;\n\n        if (role) {\n            // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n            if (role === \"content\") {\n                role = \"scroller\";\n            }\n\n            if (suites) {\n                if (suites[0]) {\n                    for (i = 0, length = suites.length; i < length; i ++) {\n                        widgets.push(suites[i].roles[role]);\n                    }\n                } else {\n                    widgets.push(suites.roles[role]);\n                }\n            }\n            else {\n                widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role],  kendo.mobile.ui.roles[role] ];\n            }\n\n            if (role.indexOf(\".\") >= 0) {\n                widgets = [ kendo.getter(role)(window) ];\n            }\n\n            for (i = 0, length = widgets.length; i < length; i ++) {\n                var widget = widgets[i];\n                if (widget) {\n                    var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\n                    if (instance) {\n                        return instance;\n                    }\n                }\n            }\n        }\n    };\n\n    kendo.onResize = function(callback) {\n        var handler = callback;\n        if (support.mobileOS.android) {\n            handler = function() { setTimeout(callback, 600); };\n        }\n\n        $(window).on(support.resize, handler);\n        return handler;\n    };\n\n    kendo.unbindResize = function(callback) {\n        $(window).off(support.resize, callback);\n    };\n\n    kendo.attrValue = function(element, key) {\n        return element.data(kendo.ns + key);\n    };\n\n    kendo.days = {\n        Sunday: 0,\n        Monday: 1,\n        Tuesday: 2,\n        Wednesday: 3,\n        Thursday: 4,\n        Friday: 5,\n        Saturday: 6\n    };\n\n    function focusable(element, isTabIndexNotNaN) {\n        var nodeName = element.nodeName.toLowerCase();\n\n        return (/input|select|textarea|button|object/.test(nodeName) ?\n                !element.disabled :\n                \"a\" === nodeName ?\n                element.href || isTabIndexNotNaN :\n                isTabIndexNotNaN\n               ) &&\n            visible(element);\n    }\n\n    function visible(element) {\n        return !$(element).parents().addBack().filter(function() {\n            return $.css(this,\"visibility\") === \"hidden\" || $.expr.filters.hidden(this);\n        }).length;\n    }\n\n    $.extend($.expr[ \":\" ], {\n        kendoFocusable: function(element) {\n            var idx = $.attr(element, \"tabindex\");\n            return focusable(element, !isNaN(idx) && idx > -1);\n        }\n    });\n\n    var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n    var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n    var MouseEventNormalizer = {\n        setupMouseMute: function() {\n            var idx = 0,\n                length = MOUSE_EVENTS.length,\n                element = document.documentElement;\n\n            if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n                return;\n            }\n\n            MouseEventNormalizer.mouseTrap = true;\n\n            MouseEventNormalizer.bustClick = false;\n            MouseEventNormalizer.captureMouse = false;\n\n            var handler = function(e) {\n                if (MouseEventNormalizer.captureMouse) {\n                    if (e.type === \"click\") {\n                        if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n                            e.preventDefault();\n                            e.stopPropagation();\n                        }\n                    } else {\n                        e.stopPropagation();\n                    }\n                }\n            };\n\n            for (; idx < length; idx++) {\n                element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n            }\n        },\n\n        muteMouse: function(e) {\n            MouseEventNormalizer.captureMouse = true;\n            if (e.data.bustClick) {\n                MouseEventNormalizer.bustClick = true;\n            }\n            clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n        },\n\n        unMuteMouse: function() {\n            clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n            MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\n                MouseEventNormalizer.captureMouse = false;\n                MouseEventNormalizer.bustClick = false;\n            }, 400);\n        }\n    };\n\n    var eventMap = {\n        down: \"touchstart mousedown\",\n        move: \"mousemove touchmove\",\n        up: \"mouseup touchend touchcancel\",\n        cancel: \"mouseleave touchcancel\"\n    };\n\n    if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n        eventMap = {\n            down: \"touchstart\",\n            move: \"touchmove\",\n            up: \"touchend touchcancel\",\n            cancel: \"touchcancel\"\n        };\n    } else if (support.pointers) {\n        eventMap = {\n            down: \"pointerdown\",\n            move: \"pointermove\",\n            up: \"pointerup\",\n            cancel: \"pointercancel pointerleave\"\n        };\n    } else if (support.msPointers) {\n        eventMap = {\n            down: \"MSPointerDown\",\n            move: \"MSPointerMove\",\n            up: \"MSPointerUp\",\n            cancel: \"MSPointerCancel MSPointerLeave\"\n        };\n    }\n\n    if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n        // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n        $.each({\n            MSPointerEnter: \"MSPointerOver\",\n            MSPointerLeave: \"MSPointerOut\"\n        }, function( orig, fix ) {\n            $.event.special[ orig ] = {\n                delegateType: fix,\n                bindType: fix,\n\n                handle: function( event ) {\n                    var ret,\n                        target = this,\n                        related = event.relatedTarget,\n                        handleObj = event.handleObj;\n\n                    // For mousenter/leave call the handler if related is outside the target.\n                    // NB: No relatedTarget if the mouse left/entered the browser window\n                    if ( !related || (related !== target && !$.contains( target, related )) ) {\n                        event.type = handleObj.origType;\n                        ret = handleObj.handler.apply( this, arguments );\n                        event.type = fix;\n                    }\n                    return ret;\n                }\n            };\n        });\n    }\n\n\n    var getEventMap = function(e) { return (eventMap[e] || e); },\n        eventRegEx = /([^ ]+)/g;\n\n    kendo.applyEventMap = function(events, ns) {\n        events = events.replace(eventRegEx, getEventMap);\n\n        if (ns) {\n            events = events.replace(eventRegEx, \"$1.\" + ns);\n        }\n\n        return events;\n    };\n\n    var on = $.fn.on;\n\n    function kendoJQuery(selector, context) {\n        return new kendoJQuery.fn.init(selector, context);\n    }\n\n    extend(true, kendoJQuery, $);\n\n    kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n    kendoJQuery.fn.constructor = kendoJQuery;\n\n    kendoJQuery.fn.init = function(selector, context) {\n        if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n            context = kendoJQuery(context);\n        }\n\n        return $.fn.init.call(this, selector, context, rootjQuery);\n    };\n\n    kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n    var rootjQuery = kendoJQuery(document);\n\n    extend(kendoJQuery.fn, {\n        handler: function(handler) {\n            this.data(\"handler\", handler);\n            return this;\n        },\n\n        autoApplyNS: function(ns) {\n            this.data(\"kendoNS\", ns || kendo.guid());\n            return this;\n        },\n\n        on: function() {\n            var that = this,\n                ns = that.data(\"kendoNS\");\n\n            // support for event map signature\n            if (arguments.length === 1) {\n                return on.call(that, arguments[0]);\n            }\n\n            var context = that,\n                args = slice.call(arguments);\n\n            if (typeof args[args.length -1] === UNDEFINED) {\n                args.pop();\n            }\n\n            var callback =  args[args.length - 1],\n                events = kendo.applyEventMap(args[0], ns);\n\n            // setup mouse trap\n            if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n                MouseEventNormalizer.setupMouseMute();\n\n                var selector = args.length === 2 ? null : args[1],\n                    bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n                on.call(this,\n                    {\n                        touchstart: MouseEventNormalizer.muteMouse,\n                        touchend: MouseEventNormalizer.unMuteMouse\n                    },\n                    selector,\n                    {\n                        bustClick: bustClick\n                    });\n            }\n\n            if (typeof callback === STRING) {\n                context = that.data(\"handler\");\n                callback = context[callback];\n\n                args[args.length - 1] = function(e) {\n                    callback.call(context, e);\n                };\n            }\n\n            args[0] = events;\n\n            on.apply(that, args);\n\n            return that;\n        },\n\n        kendoDestroy: function(ns) {\n            ns = ns || this.data(\"kendoNS\");\n\n            if (ns) {\n                this.off(\".\" + ns);\n            }\n\n            return this;\n        }\n    });\n\n    kendo.jQuery = kendoJQuery;\n    kendo.eventMap = eventMap;\n\n    kendo.timezone = (function(){\n        var months =  { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n        var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n\n        function ruleToDate(year, rule) {\n            var date;\n            var targetDay;\n            var ourDay;\n            var month = rule[3];\n            var on = rule[4];\n            var time = rule[5];\n            var cache = rule[8];\n\n            if (!cache) {\n                rule[8] = cache = {};\n            }\n\n            if (cache[year]) {\n                return cache[year];\n            }\n\n            if (!isNaN(on)) {\n                date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n            } else if (on.indexOf(\"last\") === 0) {\n                date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n\n                targetDay = days[on.substr(4, 3)];\n                ourDay = date.getUTCDay();\n\n                date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n            } else if (on.indexOf(\">=\") >= 0) {\n                date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n                targetDay = days[on.substr(0, 3)];\n                ourDay = date.getUTCDay();\n\n                date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n            }\n\n            return cache[year] = date;\n        }\n\n        function findRule(utcTime, rules, zone) {\n            rules = rules[zone];\n\n            if (!rules) {\n                var time = zone.split(\":\");\n                var offset = 0;\n\n                if (time.length > 1) {\n                    offset = time[0] * 60 + Number(time[1]);\n                }\n\n                return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n            }\n\n            var year = new Date(utcTime).getUTCFullYear();\n\n            rules = jQuery.grep(rules, function(rule) {\n                var from = rule[0];\n                var to = rule[1];\n\n                return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n            });\n\n            rules.push(utcTime);\n\n            rules.sort(function(a, b) {\n                if (typeof a != \"number\") {\n                    a = Number(ruleToDate(year, a));\n                }\n\n                if (typeof b != \"number\") {\n                    b = Number(ruleToDate(year, b));\n                }\n\n                return a - b;\n            });\n\n            var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n            return isNaN(rule) ? rule : null;\n        }\n\n        function findZone(utcTime, zones, timezone) {\n            var zoneRules = zones[timezone];\n\n            if (typeof zoneRules === \"string\") {\n                zoneRules = zones[zoneRules];\n            }\n\n            if (!zoneRules) {\n                throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n            }\n\n            for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n                var until = zoneRules[idx][3];\n\n                if (until && utcTime > until) {\n                    break;\n                }\n            }\n\n            var zone = zoneRules[idx + 1];\n\n            if (!zone) {\n                throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n            }\n\n            return zone;\n        }\n\n        function zoneAndRule(utcTime, zones, rules, timezone) {\n            if (typeof utcTime != NUMBER) {\n                utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n                    utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n                    utcTime.getSeconds(), utcTime.getMilliseconds());\n            }\n\n            var zone = findZone(utcTime, zones, timezone);\n\n            return {\n                zone: zone,\n                rule: findRule(utcTime, rules, zone[1])\n            };\n        }\n\n        function offset(utcTime, timezone) {\n            if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n                return 0;\n            }\n\n            var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n            var zone = info.zone;\n            var rule = info.rule;\n\n            return kendo.parseFloat(rule? zone[0] - rule[6] : zone[0]);\n        }\n\n        function abbr(utcTime, timezone) {\n            var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n            var zone = info.zone;\n            var rule = info.rule;\n\n            var base = zone[2];\n\n            if (base.indexOf(\"/\") >= 0) {\n                return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\n            } else if (base.indexOf(\"%s\") >= 0) {\n                return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\n            }\n\n            return base;\n        }\n\n        function convert(date, fromOffset, toOffset) {\n            if (typeof fromOffset == STRING) {\n                fromOffset = this.offset(date, fromOffset);\n            }\n\n            if (typeof toOffset == STRING) {\n                toOffset = this.offset(date, toOffset);\n            }\n\n            var fromLocalOffset = date.getTimezoneOffset();\n\n            date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n            var toLocalOffset = date.getTimezoneOffset();\n\n            return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n        }\n\n        function apply(date, timezone) {\n           return this.convert(date, date.getTimezoneOffset(), timezone);\n        }\n\n        function remove(date, timezone) {\n           return this.convert(date, timezone, date.getTimezoneOffset());\n        }\n\n        function toLocalDate(time) {\n            return this.apply(new Date(time), \"Etc/UTC\");\n        }\n\n        return {\n           zones: {},\n           rules: {},\n           offset: offset,\n           convert: convert,\n           apply: apply,\n           remove: remove,\n           abbr: abbr,\n           toLocalDate: toLocalDate\n        };\n    })();\n\n    kendo.date = (function(){\n        var MS_PER_MINUTE = 60000,\n            MS_PER_DAY = 86400000;\n\n        function adjustDST(date, hours) {\n            if (hours === 0 && date.getHours() === 23) {\n                date.setHours(date.getHours() + 2);\n                return true;\n            }\n\n            return false;\n        }\n\n        function setDayOfWeek(date, day, dir) {\n            var hours = date.getHours();\n\n            dir = dir || 1;\n            day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n            date.setDate(date.getDate() + day);\n            adjustDST(date, hours);\n        }\n\n        function dayOfWeek(date, day, dir) {\n            date = new Date(date);\n            setDayOfWeek(date, day, dir);\n            return date;\n        }\n\n        function firstDayOfMonth(date) {\n            return new Date(\n                date.getFullYear(),\n                date.getMonth(),\n                1\n            );\n        }\n\n        function lastDayOfMonth(date) {\n            var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n                first = firstDayOfMonth(date),\n                timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n            if (timeOffset) {\n                last.setHours(first.getHours() + (timeOffset / 60));\n            }\n\n            return last;\n        }\n\n        function getDate(date) {\n            date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n            adjustDST(date, 0);\n            return date;\n        }\n\n        function toUtcTime(date) {\n            return Date.UTC(date.getFullYear(), date.getMonth(),\n                        date.getDate(), date.getHours(), date.getMinutes(),\n                        date.getSeconds(), date.getMilliseconds());\n        }\n\n        function getMilliseconds(date) {\n            return date.getTime() - getDate(date);\n        }\n\n        function isInTimeRange(value, min, max) {\n            var msMin = getMilliseconds(min),\n                msMax = getMilliseconds(max),\n                msValue;\n\n            if (!value || msMin == msMax) {\n                return true;\n            }\n\n            if (min >= max) {\n                max += MS_PER_DAY;\n            }\n\n            msValue = getMilliseconds(value);\n\n            if (msMin > msValue) {\n                msValue += MS_PER_DAY;\n            }\n\n            if (msMax < msMin) {\n                msMax += MS_PER_DAY;\n            }\n\n            return msValue >= msMin && msValue <= msMax;\n        }\n\n        function isInDateRange(value, min, max) {\n            var msMin = min.getTime(),\n                msMax = max.getTime(),\n                msValue;\n\n            if (msMin >= msMax) {\n                msMax += MS_PER_DAY;\n            }\n\n            msValue = value.getTime();\n\n            return msValue >= msMin && msValue <= msMax;\n        }\n\n        function addDays(date, offset) {\n            var hours = date.getHours();\n                date = new Date(date);\n\n            setTime(date, offset * MS_PER_DAY);\n            adjustDST(date, hours);\n            return date;\n        }\n\n        function setTime(date, milliseconds, ignoreDST) {\n            var offset = date.getTimezoneOffset();\n            var difference;\n\n            date.setTime(date.getTime() + milliseconds);\n\n            if (!ignoreDST) {\n                difference = date.getTimezoneOffset() - offset;\n                date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n            }\n        }\n\n        function today() {\n            return getDate(new Date());\n        }\n\n        function isToday(date) {\n           return getDate(date).getTime() == today().getTime();\n        }\n\n        function toInvariantTime(date) {\n            var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n            if (date) {\n                staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n            }\n\n            return staticDate;\n        }\n\n        return {\n            adjustDST: adjustDST,\n            dayOfWeek: dayOfWeek,\n            setDayOfWeek: setDayOfWeek,\n            getDate: getDate,\n            isInDateRange: isInDateRange,\n            isInTimeRange: isInTimeRange,\n            isToday: isToday,\n            nextDay: function(date) {\n                return addDays(date, 1);\n            },\n            previousDay: function(date) {\n                return addDays(date, -1);\n            },\n            toUtcTime: toUtcTime,\n            MS_PER_DAY: MS_PER_DAY,\n            MS_PER_HOUR: 60 * MS_PER_MINUTE,\n            MS_PER_MINUTE: MS_PER_MINUTE,\n            setTime: setTime,\n            addDays: addDays,\n            today: today,\n            toInvariantTime: toInvariantTime,\n            firstDayOfMonth: firstDayOfMonth,\n            lastDayOfMonth: lastDayOfMonth,\n            getMilliseconds: getMilliseconds\n            //TODO methods: combine date portion and time portion from arguments - date1, date 2\n        };\n    })();\n\n\n    kendo.stripWhitespace = function(element) {\n        if (document.createNodeIterator) {\n            var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\n                    return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n                }, false);\n\n            while (iterator.nextNode()) {\n                if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n                    iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n                }\n            }\n        } else { // IE7/8 support\n            for (var i = 0; i < element.childNodes.length; i++) {\n                var child = element.childNodes[i];\n\n                if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n                    element.removeChild(child);\n                    i--;\n                }\n\n                if (child.nodeType == 1) {\n                    kendo.stripWhitespace(child);\n                }\n            }\n        }\n    };\n\n    var animationFrame  = window.requestAnimationFrame       ||\n                          window.webkitRequestAnimationFrame ||\n                          window.mozRequestAnimationFrame    ||\n                          window.oRequestAnimationFrame      ||\n                          window.msRequestAnimationFrame     ||\n                          function(callback){ setTimeout(callback, 1000 / 60); };\n\n    kendo.animationFrame = function(callback) {\n        animationFrame.call(window, callback);\n    };\n\n    var animationQueue = [];\n\n    kendo.queueAnimation = function(callback) {\n        animationQueue[animationQueue.length] = callback;\n        if (animationQueue.length === 1) {\n            kendo.runNextAnimation();\n        }\n    };\n\n    kendo.runNextAnimation = function() {\n        kendo.animationFrame(function() {\n            if (animationQueue[0]) {\n                animationQueue.shift()();\n                if (animationQueue[0]) {\n                    kendo.runNextAnimation();\n                }\n            }\n        });\n    };\n\n    kendo.parseQueryStringParams = function(url) {\n        var queryString = url.split('?')[1] || \"\",\n            params = {},\n            paramParts = queryString.split(/&|=/),\n            length = paramParts.length,\n            idx = 0;\n\n        for (; idx < length; idx += 2) {\n            if(paramParts[idx] !== \"\") {\n                params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n            }\n        }\n\n        return params;\n    };\n\n    kendo.elementUnderCursor = function(e) {\n        return document.elementFromPoint(e.x.client, e.y.client);\n    };\n\n    kendo.wheelDeltaY = function(jQueryEvent) {\n        var e = jQueryEvent.originalEvent,\n            deltaY = e.wheelDeltaY,\n            delta;\n\n            if (e.wheelDelta) { // Webkit and IE\n                if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n                    delta = e.wheelDelta;\n                }\n            } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n                delta = (-e.detail) * 10;\n            }\n\n        return delta;\n    };\n\n    kendo.throttle = function(fn, delay) {\n        var timeout;\n        var lastExecTime = 0;\n\n        if (!delay || delay <= 0) {\n            return fn;\n        }\n\n        var throttled = function() {\n            var that = this;\n            var elapsed = +new Date() - lastExecTime;\n            var args = arguments;\n\n            function exec() {\n                fn.apply(that, args);\n                lastExecTime = +new Date();\n            }\n\n            // first execution\n            if (!lastExecTime) {\n                return exec();\n            }\n\n            if (timeout) {\n                clearTimeout(timeout);\n            }\n\n            if (elapsed > delay) {\n                exec();\n            } else {\n                timeout = setTimeout(exec, delay - elapsed);\n            }\n        };\n\n        throttled.cancel = function() {\n            clearTimeout(timeout);\n        };\n\n        return throttled;\n    };\n\n\n    kendo.caret = function (element, start, end) {\n        var rangeElement;\n        var isPosition = start !== undefined;\n\n        if (end === undefined) {\n            end = start;\n        }\n\n        if (element[0]) {\n            element = element[0];\n        }\n\n        if (isPosition && element.disabled) {\n            return;\n        }\n\n        try {\n            if (element.selectionStart !== undefined) {\n                if (isPosition) {\n                    element.focus();\n                    element.setSelectionRange(start, end);\n                } else {\n                    start = [element.selectionStart, element.selectionEnd];\n                }\n            } else if (document.selection) {\n                if ($(element).is(\":visible\")) {\n                    element.focus();\n                }\n\n                rangeElement = element.createTextRange();\n\n                if (isPosition) {\n                    rangeElement.collapse(true);\n                    rangeElement.moveStart(\"character\", start);\n                    rangeElement.moveEnd(\"character\", end - start);\n                    rangeElement.select();\n                } else {\n                    var rangeDuplicated = rangeElement.duplicate(),\n                        selectionStart, selectionEnd;\n\n                        rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n                        rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n                        selectionStart = rangeDuplicated.text.length;\n                        selectionEnd = selectionStart + rangeElement.text.length;\n\n                    start = [selectionStart, selectionEnd];\n                }\n            }\n        } catch(e) {\n            /* element is not focused or it is not in the DOM */\n            start = [];\n        }\n\n        return start;\n    };\n\n    kendo.compileMobileDirective = function(element, scopeSetup) {\n        var angular = window.angular;\n\n        element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n        angular.element(element).injector().invoke([\"$compile\", function($compile) {\n            var scope = angular.element(element).scope();\n            if (scopeSetup) {\n                scopeSetup(scope);\n            }\n            $compile(element)(scope);\n\n            if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n                scope.$digest();\n            }\n        }]);\n\n        return kendo.widgetInstance(element, kendo.mobile.ui);\n    };\n\n    kendo.antiForgeryTokens = function() {\n        var tokens = { },\n            csrf_token = $(\"meta[name=csrf-token]\").attr(\"content\"),\n            csrf_param = $(\"meta[name=csrf-param]\").attr(\"content\");\n\n        $(\"input[name^='__RequestVerificationToken']\").each(function() {\n            tokens[this.name] = this.value;\n        });\n\n        if (csrf_param !== undefined && csrf_token !== undefined) {\n          tokens[csrf_param] = csrf_token;\n        }\n\n        return tokens;\n    };\n\n    // kendo.saveAs -----------------------------------------------\n    (function() {\n        function postToProxy(dataURI, fileName, proxyURL) {\n            var form = $(\"<form>\").attr({\n                action: proxyURL,\n                method: \"POST\"\n            });\n\n            var data = kendo.antiForgeryTokens();\n            data.fileName = fileName;\n\n            var parts = dataURI.split(\";base64,\");\n            data.contentType = parts[0].replace(\"data:\", \"\");\n            data.base64 = parts[1];\n\n            for (var name in data) {\n                if (data.hasOwnProperty(name)) {\n                    $('<input>').attr({\n                        value: data[name],\n                        name: name,\n                        type: \"hidden\"\n                    }).appendTo(form);\n                }\n            }\n\n            form.appendTo(\"body\").submit().remove();\n        }\n\n        var fileSaver = document.createElement(\"a\");\n        var downloadAttribute = \"download\" in fileSaver;\n\n        function saveAsBlob(dataURI, fileName) {\n            var blob = dataURI; // could be a Blob object\n\n            if (typeof dataURI == \"string\") {\n                var parts = dataURI.split(\";base64,\");\n                var contentType = parts[0];\n                var base64 = atob(parts[1]);\n                var array = new Uint8Array(base64.length);\n\n                for (var idx = 0; idx < base64.length; idx++) {\n                    array[idx] = base64.charCodeAt(idx);\n                }\n                blob = new Blob([array.buffer], { type: contentType });\n            }\n\n            navigator.msSaveBlob(blob, fileName);\n        }\n\n        function saveAsDataURI(dataURI, fileName) {\n            if (window.Blob && dataURI instanceof Blob) {\n                dataURI = URL.createObjectURL(dataURI);\n            }\n\n            fileSaver.download = fileName;\n            fileSaver.href = dataURI;\n\n            var e = document.createEvent(\"MouseEvents\");\n            e.initMouseEvent(\"click\", true, false, window,\n                0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n            fileSaver.dispatchEvent(e);\n        }\n\n        kendo.saveAs = function(options) {\n            var save = postToProxy;\n\n            if (!options.forceProxy) {\n                if (downloadAttribute) {\n                    save = saveAsDataURI;\n                } else if (navigator.msSaveBlob) {\n                    save = saveAsBlob;\n                }\n            }\n\n            save(options.dataURI, options.fileName, options.proxyURL);\n        };\n    })();\n})(jQuery, window);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        CHANGE = \"change\",\n        BACK = \"back\",\n        SAME = \"same\",\n        support = kendo.support,\n        location = window.location,\n        history = window.history,\n        CHECK_URL_INTERVAL = 50,\n        BROKEN_BACK_NAV = kendo.support.browser.msie,\n        hashStrip = /^#*/,\n        document = window.document;\n\n    function absoluteURL(path, pathPrefix) {\n        if (!pathPrefix) {\n            return path;\n        }\n\n        if (path + \"/\" === pathPrefix) {\n            path = pathPrefix;\n        }\n\n        var regEx = new RegExp(\"^\" + pathPrefix, \"i\");\n\n        if (!regEx.test(path)) {\n            path = pathPrefix + \"/\" + path;\n        }\n\n        return location.protocol + '//' + (location.host + \"/\" + path).replace(/\\/\\/+/g, '/');\n    }\n\n    function hashDelimiter(bang) {\n        return bang ? \"#!\" : \"#\";\n    }\n\n    function locationHash(hashDelimiter) {\n        var href = location.href;\n\n        // ignore normal anchors if in hashbang mode - however, still return \"\" if no hash present\n        if (hashDelimiter === \"#!\" && href.indexOf(\"#\") > -1 && href.indexOf(\"#!\") < 0) {\n            return null;\n        }\n\n        return href.split(hashDelimiter)[1] || \"\";\n    }\n\n    function stripRoot(root, url) {\n        if (url.indexOf(root) === 0) {\n            return (url.substr(root.length)).replace(/\\/\\//g, '/');\n        } else {\n            return url;\n        }\n    }\n\n    var HistoryAdapter = kendo.Class.extend({\n        back: function() {\n            if (BROKEN_BACK_NAV) {\n                setTimeout(function() { history.back(); });\n            } else {\n                history.back();\n            }\n        },\n\n        forward: function() {\n            if (BROKEN_BACK_NAV) {\n                setTimeout(function() { history.forward(); });\n            } else {\n                history.forward();\n            }\n        },\n\n        length: function() {\n            return history.length;\n        },\n\n        replaceLocation: function(url) {\n            location.replace(url);\n        }\n    });\n\n    var PushStateAdapter = HistoryAdapter.extend({\n        init: function(root) {\n            this.root = root;\n        },\n\n        navigate: function(to) {\n            history.pushState({}, document.title, absoluteURL(to, this.root));\n        },\n\n        replace: function(to) {\n            history.replaceState({}, document.title, absoluteURL(to, this.root));\n        },\n\n        normalize: function(url) {\n            return stripRoot(this.root, url);\n        },\n\n        current: function() {\n            var current = location.pathname;\n\n            if (location.search) {\n                current += location.search;\n            }\n\n            return stripRoot(this.root, current);\n        },\n\n        change: function(callback) {\n            $(window).bind(\"popstate.kendo\", callback);\n        },\n\n        stop: function() {\n            $(window).unbind(\"popstate.kendo\");\n        },\n\n        normalizeCurrent: function(options) {\n            var fixedUrl,\n                root = options.root,\n                pathname = location.pathname,\n                hash = locationHash(hashDelimiter(options.hashBang));\n\n            if (root === pathname + \"/\") {\n                fixedUrl = root;\n            }\n\n            if (root === pathname && hash) {\n                fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n            }\n\n            if (fixedUrl) {\n                history.pushState({}, document.title, fixedUrl);\n            }\n        }\n    });\n\n    function fixHash(url) {\n        return url.replace(/^(#)?/, \"#\");\n    }\n\n    function fixBang(url) {\n        return url.replace(/^(#(!)?)?/, \"#!\");\n    }\n\n    var HashAdapter = HistoryAdapter.extend({\n        init: function(bang) {\n            this._id = kendo.guid();\n            this.prefix = hashDelimiter(bang);\n            this.fix = bang ? fixBang : fixHash;\n        },\n\n        navigate: function(to) {\n            location.hash = this.fix(to);\n        },\n\n        replace: function(to) {\n            this.replaceLocation(this.fix(to));\n        },\n\n        normalize: function(url) {\n            if (url.indexOf(this.prefix) < 0) {\n               return url;\n            } else {\n                return url.split(this.prefix)[1];\n            }\n        },\n\n        change: function(callback) {\n            if (support.hashChange) {\n                $(window).on(\"hashchange.\" + this._id, callback);\n            } else {\n                this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n            }\n        },\n\n        stop: function() {\n            $(window).off(\"hashchange.\" + this._id);\n            clearInterval(this._interval);\n        },\n\n        current: function() {\n            return locationHash(this.prefix);\n        },\n\n        normalizeCurrent: function(options) {\n            var pathname = location.pathname,\n                root = options.root;\n\n            if (options.pushState && root !== pathname) {\n                this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n                return true; // browser will reload at this point.\n            }\n\n            return false;\n        }\n    });\n\n    var History = kendo.Observable.extend({\n        start: function(options) {\n            options = options || {};\n\n            this.bind([CHANGE, BACK, SAME], options);\n\n            if (this._started) {\n                return;\n            }\n\n            this._started = true;\n\n            options.root = options.root || \"/\";\n\n            var adapter = this.createAdapter(options),\n                current;\n\n            // adapter may reload the document\n            if (adapter.normalizeCurrent(options)) {\n                return;\n            }\n\n            current = adapter.current();\n\n            $.extend(this, {\n                adapter: adapter,\n                root: options.root,\n                historyLength: adapter.length(),\n                current: current,\n                locations: [current]\n            });\n\n            adapter.change($.proxy(this, \"_checkUrl\"));\n        },\n\n        createAdapter:function(options) {\n           return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n        },\n\n        stop: function() {\n            if (!this._started) {\n                return;\n            }\n            this.adapter.stop();\n            this.unbind(CHANGE);\n            this._started = false;\n        },\n\n        change: function(callback) {\n            this.bind(CHANGE, callback);\n        },\n\n        replace: function(to, silent) {\n\n            this._navigate(to, silent, function(adapter) {\n                adapter.replace(to);\n                this.locations[this.locations.length - 1] = this.current;\n            });\n        },\n\n        navigate: function(to, silent) {\n            if (to === \"#:back\") {\n                this.backCalled = true;\n                this.adapter.back();\n                return;\n            }\n\n            this._navigate(to, silent, function(adapter) {\n                adapter.navigate(to);\n                this.locations.push(this.current);\n            });\n        },\n\n        _navigate: function(to, silent, callback) {\n            var adapter = this.adapter;\n\n            to = adapter.normalize(to);\n\n            if (this.current === to || this.current === decodeURIComponent(to)) {\n                this.trigger(SAME);\n                return;\n            }\n\n            if (!silent) {\n                if (this.trigger(CHANGE, { url: to })) {\n                    return;\n                }\n            }\n\n            this.current = to;\n\n            callback.call(this, adapter);\n\n            this.historyLength = adapter.length();\n        },\n\n        _checkUrl: function() {\n            var adapter = this.adapter,\n                current = adapter.current(),\n                newLength = adapter.length(),\n                navigatingInExisting = this.historyLength === newLength,\n                back = current === this.locations[this.locations.length - 2] && navigatingInExisting,\n                backCalled = this.backCalled,\n                prev = this.current;\n\n            if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n                return true;\n            }\n\n            this.historyLength = newLength;\n            this.backCalled = false;\n\n            this.current = current;\n\n            if (back && this.trigger(\"back\", { url: prev, to: current })) {\n                adapter.forward();\n                this.current = prev;\n                return;\n            }\n\n            if (this.trigger(CHANGE, { url: current, backButtonPressed: !backCalled })) {\n                if (back) {\n                    adapter.forward();\n                } else {\n                    adapter.back();\n                    this.historyLength --;\n                }\n                this.current = prev;\n                return;\n            }\n\n            if (back) {\n                this.locations.pop();\n            } else {\n                this.locations.push(current);\n            }\n        }\n    });\n\n    kendo.History = History;\n    kendo.History.HistoryAdapter = HistoryAdapter;\n    kendo.History.HashAdapter = HashAdapter;\n    kendo.History.PushStateAdapter = PushStateAdapter;\n    kendo.absoluteURL = absoluteURL;\n    kendo.history = new History();\n})(window.kendo.jQuery);\n\n(function() {\n    var kendo = window.kendo,\n        history = kendo.history,\n        Observable = kendo.Observable,\n        INIT = \"init\",\n        ROUTE_MISSING = \"routeMissing\",\n        CHANGE = \"change\",\n        BACK = \"back\",\n        SAME = \"same\",\n        optionalParam = /\\((.*?)\\)/g,\n        namedParam = /(\\(\\?)?:\\w+/g,\n        splatParam = /\\*\\w+/g,\n        escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n    function namedParamReplace(match, optional) {\n        return optional ? match : '([^\\/]+)';\n    }\n\n    function routeToRegExp(route, ignoreCase) {\n        return new RegExp('^' + route\n            .replace(escapeRegExp, '\\\\$&')\n            .replace(optionalParam, '(?:$1)?')\n            .replace(namedParam, namedParamReplace)\n            .replace(splatParam, '(.*?)') + '$', ignoreCase ? \"i\" : \"\");\n    }\n\n    function stripUrl(url) {\n        return url.replace(/(\\?.*)|(#.*)/g, \"\");\n    }\n\n    var Route = kendo.Class.extend({\n        init: function(route, callback, ignoreCase) {\n            if (!(route instanceof RegExp)) {\n                route = routeToRegExp(route, ignoreCase);\n            }\n\n            this.route = route;\n            this._callback = callback;\n        },\n\n        callback: function(url) {\n            var params,\n                idx = 0,\n                length,\n                queryStringParams = kendo.parseQueryStringParams(url);\n\n            url = stripUrl(url);\n            params = this.route.exec(url).slice(1);\n            length = params.length;\n\n            for (; idx < length; idx ++) {\n                if (typeof params[idx] !== 'undefined') {\n                    params[idx] = decodeURIComponent(params[idx]);\n                }\n            }\n\n            params.push(queryStringParams);\n\n            this._callback.apply(null, params);\n        },\n\n        worksWith: function(url) {\n            if (this.route.test(stripUrl(url))) {\n                this.callback(url);\n                return true;\n            } else {\n                return false;\n            }\n        }\n    });\n\n    var Router = Observable.extend({\n        init: function(options) {\n            if (!options) {\n                options = {};\n            }\n\n            Observable.fn.init.call(this);\n\n            this.routes = [];\n            this.pushState = options.pushState;\n            this.hashBang = options.hashBang;\n            this.root = options.root;\n            this.ignoreCase = options.ignoreCase !== false;\n\n            this.bind([INIT, ROUTE_MISSING, CHANGE, SAME], options);\n        },\n\n        destroy: function() {\n            history.unbind(CHANGE, this._urlChangedProxy);\n            history.unbind(SAME, this._sameProxy);\n            history.unbind(BACK, this._backProxy);\n            this.unbind();\n        },\n\n        start: function() {\n            var that = this,\n                sameProxy = function() { that._same(); },\n                backProxy = function(e) { that._back(e); },\n                urlChangedProxy = function(e) { that._urlChanged(e); };\n\n            history.start({\n                same: sameProxy,\n                change: urlChangedProxy,\n                back: backProxy,\n                pushState: that.pushState,\n                hashBang: that.hashBang,\n                root: that.root\n            });\n\n            var initEventObject = { url: history.current || \"/\", preventDefault: $.noop };\n\n            if (!that.trigger(INIT, initEventObject)) {\n                that._urlChanged(initEventObject);\n            }\n\n            this._urlChangedProxy = urlChangedProxy;\n            this._backProxy = backProxy;\n        },\n\n        route: function(route, callback) {\n            this.routes.push(new Route(route, callback, this.ignoreCase));\n        },\n\n        navigate: function(url, silent) {\n            kendo.history.navigate(url, silent);\n        },\n\n        replace: function(url, silent) {\n            kendo.history.replace(url, silent);\n        },\n\n        _back: function(e) {\n            if (this.trigger(BACK, { url: e.url, to: e.to })) {\n                e.preventDefault();\n            }\n        },\n\n        _same: function(e) {\n            this.trigger(SAME);\n        },\n\n        _urlChanged: function(e) {\n            var url = e.url;\n\n            if (!url) {\n                url = \"/\";\n            }\n\n            if (this.trigger(CHANGE, { url: e.url, params: kendo.parseQueryStringParams(e.url), backButtonPressed: e.backButtonPressed })) {\n                e.preventDefault();\n                return;\n            }\n\n            var idx = 0,\n                routes = this.routes,\n                route,\n                length = routes.length;\n\n            for (; idx < length; idx ++) {\n                 route = routes[idx];\n\n                 if (route.worksWith(url)) {\n                    return;\n                 }\n            }\n\n            if (this.trigger(ROUTE_MISSING, { url: url, params: kendo.parseQueryStringParams(url), backButtonPressed: e.backButtonPressed })) {\n                e.preventDefault();\n            }\n        }\n    });\n\n    kendo.Router = Router;\n})();\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        extend = $.extend,\n        odataFilters = {\n            eq: \"eq\",\n            neq: \"ne\",\n            gt: \"gt\",\n            gte: \"ge\",\n            lt: \"lt\",\n            lte: \"le\",\n            contains : \"substringof\",\n            doesnotcontain: \"substringof\",\n            endswith: \"endswith\",\n            startswith: \"startswith\"\n        },\n        odataFiltersVersionFour = extend({}, odataFilters, {\n            contains: \"contains\"\n        }),\n        mappers = {\n            pageSize: $.noop,\n            page: $.noop,\n            filter: function(params, filter, useVersionFour) {\n                if (filter) {\n                    params.$filter = toOdataFilter(filter, useVersionFour);\n                }\n            },\n            sort: function(params, orderby) {\n                var expr = $.map(orderby, function(value) {\n                    var order = value.field.replace(/\\./g, \"/\");\n\n                    if (value.dir === \"desc\") {\n                        order += \" desc\";\n                    }\n\n                    return order;\n                }).join(\",\");\n\n                if (expr) {\n                    params.$orderby = expr;\n                }\n            },\n            skip: function(params, skip) {\n                if (skip) {\n                    params.$skip = skip;\n                }\n            },\n            take: function(params, take) {\n                if (take) {\n                    params.$top = take;\n                }\n            }\n        },\n        defaultDataType = {\n            read: {\n                dataType: \"jsonp\"\n            }\n        };\n\n    function toOdataFilter(filter, useOdataFour) {\n        var result = [],\n            logic = filter.logic || \"and\",\n            idx,\n            length,\n            field,\n            type,\n            format,\n            operator,\n            value,\n            ignoreCase,\n            filters = filter.filters;\n\n        for (idx = 0, length = filters.length; idx < length; idx++) {\n            filter = filters[idx];\n            field = filter.field;\n            value = filter.value;\n            operator = filter.operator;\n\n            if (filter.filters) {\n                filter = toOdataFilter(filter, useOdataFour);\n            } else {\n                ignoreCase = filter.ignoreCase;\n                field = field.replace(/\\./g, \"/\");\n                filter = odataFilters[operator];\n                if (useOdataFour) {\n                    filter = odataFiltersVersionFour[operator];\n                }\n\n                if (filter && value !== undefined) {\n                    type = $.type(value);\n                    if (type === \"string\") {\n                        format = \"'{1}'\";\n                        value = value.replace(/'/g, \"''\");\n\n                        if (ignoreCase === true) {\n                            field = \"tolower(\" + field + \")\";\n                        }\n\n                    } else if (type === \"date\") {\n                        if (useOdataFour) {\n                            format = \"{1:yyyy-MM-ddTHH:mm:ss+00:00}\";\n                        } else {\n                            format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\n                        }\n                    } else {\n                        format = \"{1}\";\n                    }\n\n                    if (filter.length > 3) {\n                        if (filter !== \"substringof\") {\n                            format = \"{0}({2},\" + format + \")\";\n                        } else {\n                            format = \"{0}(\" + format + \",{2})\";\n                            if (operator === \"doesnotcontain\") {\n                                if (useOdataFour) {\n                                    format = \"{0}({2},'{1}') eq -1\";\n                                    filter = \"indexof\";\n                                } else {\n                                    format += \" eq false\";\n                                }\n                            }\n                        }\n                    } else {\n                        format = \"{2} {0} \" + format;\n                    }\n\n                    filter = kendo.format(format, filter, value, field);\n                }\n            }\n\n            result.push(filter);\n        }\n\n        filter = result.join(\" \" + logic + \" \");\n\n        if (result.length > 1) {\n            filter = \"(\" + filter + \")\";\n        }\n\n        return filter;\n    }\n\n    function stripMetadata(obj) {\n        for (var name in obj) {\n            if(name.indexOf(\"@odata\") === 0) {\n                delete obj[name];\n            }\n        }\n    }\n\n    extend(true, kendo.data, {\n        schemas: {\n            odata: {\n                type: \"json\",\n                data: function(data) {\n                    return data.d.results || [data.d];\n                },\n                total: \"d.__count\"\n            }\n        },\n        transports: {\n            odata: {\n                read: {\n                    cache: true, // to prevent jQuery from adding cache buster\n                    dataType: \"jsonp\",\n                    jsonp: \"$callback\"\n                },\n                update: {\n                    cache: true,\n                    dataType: \"json\",\n                    contentType: \"application/json\", // to inform the server the the request body is JSON encoded\n                    type: \"PUT\" // can be PUT or MERGE\n                },\n                create: {\n                    cache: true,\n                    dataType: \"json\",\n                    contentType: \"application/json\",\n                    type: \"POST\" // must be POST to create new entity\n                },\n                destroy: {\n                    cache: true,\n                    dataType: \"json\",\n                    type: \"DELETE\"\n                },\n                parameterMap: function(options, type, useVersionFour) {\n                    var params,\n                        value,\n                        option,\n                        dataType;\n\n                    options = options || {};\n                    type = type || \"read\";\n                    dataType = (this.options || defaultDataType)[type];\n                    dataType = dataType ? dataType.dataType : \"json\";\n\n                    if (type === \"read\") {\n                        params = {\n                            $inlinecount: \"allpages\"\n                        };\n\n                        if (dataType != \"json\") {\n                            params.$format = \"json\";\n                        }\n\n                        for (option in options) {\n                            if (mappers[option]) {\n                                mappers[option](params, options[option], useVersionFour);\n                            } else {\n                                params[option] = options[option];\n                            }\n                        }\n                    } else {\n                        if (dataType !== \"json\") {\n                            throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\n                        }\n\n                        if (type !== \"destroy\") {\n                            for (option in options) {\n                                value = options[option];\n                                if (typeof value === \"number\") {\n                                    options[option] = value + \"\";\n                                }\n                            }\n\n                            params = kendo.stringify(options);\n                        }\n                    }\n\n                    return params;\n                }\n            }\n        }\n    });\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"odata-v4\": {\n                type: \"json\",\n                data: function(data) {\n                    data = $.extend({}, data);\n                    stripMetadata(data);\n\n                    if (data.value) {\n                        return data.value;\n                    }\n                    return [data];\n                },\n                total: function(data) {\n                    return data[\"@odata.count\"];\n                }\n            }\n        },\n        transports: {\n            \"odata-v4\": {\n                read: {\n                    cache: true, // to prevent jQuery from adding cache buster\n                    dataType: \"json\"\n                },\n                update: {\n                    cache: true,\n                    dataType: \"json\",\n                    contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\n                    type: \"PUT\" // can be PUT or MERGE\n                },\n                create: {\n                    cache: true,\n                    dataType: \"json\",\n                    contentType: \"application/json;IEEE754Compatible=true\",\n                    type: \"POST\" // must be POST to create new entity\n                },\n                destroy: {\n                    cache: true,\n                    dataType: \"json\",\n                    type: \"DELETE\"\n                },\n                parameterMap: function(options, type) {\n                    var result = kendo.data.transports.odata.parameterMap(options, type, true);\n                    if (type == \"read\") {\n                        result.$count = true;\n                        delete result.$inlinecount;\n                    }\n\n                    return result;\n                }\n            }\n        }\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint  eqnull: true, boss: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        isArray = $.isArray,\n        isPlainObject = $.isPlainObject,\n        map = $.map,\n        each = $.each,\n        extend = $.extend,\n        getter = kendo.getter,\n        Class = kendo.Class;\n\n    var XmlDataReader = Class.extend({\n        init: function(options) {\n            var that = this,\n                total = options.total,\n                model = options.model,\n                parse = options.parse,\n                errors = options.errors,\n                serialize = options.serialize,\n                data = options.data;\n\n            if (model) {\n                if (isPlainObject(model)) {\n                    var base = options.modelBase || kendo.data.Model;\n\n                    if (model.fields) {\n                        each(model.fields, function(field, value) {\n                            if (isPlainObject(value) && value.field) {\n                                value = extend(value, { field: that.getter(value.field) });\n                            } else {\n                                value = { field: that.getter(value) };\n                            }\n                            model.fields[field] = value;\n                        });\n                    }\n\n                    var id = model.id;\n                    if (id) {\n                        var idField = {};\n\n                        idField[that.xpathToMember(id, true)] = { field : that.getter(id) };\n                        model.fields = extend(idField, model.fields);\n                        model.id = that.xpathToMember(id);\n                    }\n                    model = base.define(model);\n                }\n\n                that.model = model;\n            }\n\n            if (total) {\n                if (typeof total == \"string\") {\n                    total = that.getter(total);\n                    that.total = function(data) {\n                        return parseInt(total(data), 10);\n                    };\n                } else if (typeof total == \"function\"){\n                    that.total = total;\n                }\n            }\n\n            if (errors) {\n                if (typeof errors == \"string\") {\n                    errors = that.getter(errors);\n                    that.errors = function(data) {\n                        return errors(data) || null;\n                    };\n                } else if (typeof errors == \"function\"){\n                    that.errors = errors;\n                }\n            }\n\n            if (data) {\n                if (typeof data == \"string\") {\n                    data = that.xpathToMember(data);\n                    that.data = function(value) {\n                        var result = that.evaluate(value, data),\n                            modelInstance;\n\n                        result = isArray(result) ? result : [result];\n\n                        if (that.model && model.fields) {\n                            modelInstance = new that.model();\n\n                            return map(result, function(value) {\n                                if (value) {\n                                    var record = {}, field;\n\n                                    for (field in model.fields) {\n                                        record[field] = modelInstance._parse(field, model.fields[field].field(value));\n                                    }\n\n                                    return record;\n                                }\n                            });\n                        }\n\n                        return result;\n                    };\n                } else if (typeof data == \"function\") {\n                    that.data = data;\n                }\n            }\n\n            if (typeof parse == \"function\") {\n                var xmlParse = that.parse;\n\n                that.parse = function(data) {\n                    var xml = parse.call(that, data);\n                    return xmlParse.call(that, xml);\n                };\n            }\n\n            if (typeof serialize == \"function\") {\n                that.serialize = serialize;\n            }\n        },\n        total: function(result) {\n            return this.data(result).length;\n        },\n        errors: function(data) {\n            return data ? data.errors : null;\n        },\n        serialize: function(data) {\n            return data;\n        },\n        parseDOM: function(element) {\n            var result = {},\n                parsedNode,\n                node,\n                nodeType,\n                nodeName,\n                member,\n                attribute,\n                attributes = element.attributes,\n                attributeCount = attributes.length,\n                idx;\n\n            for (idx = 0; idx < attributeCount; idx++) {\n                attribute = attributes[idx];\n                result[\"@\" + attribute.nodeName] = attribute.nodeValue;\n            }\n\n            for (node = element.firstChild; node; node = node.nextSibling) {\n                nodeType = node.nodeType;\n\n                if (nodeType === 3 || nodeType === 4) {\n                    // text nodes or CDATA are stored as #text field\n                    result[\"#text\"] = node.nodeValue;\n                } else if (nodeType === 1) {\n                    // elements are stored as fields\n                    parsedNode = this.parseDOM(node);\n\n                    nodeName = node.nodeName;\n\n                    member = result[nodeName];\n\n                    if (isArray(member)) {\n                        // elements of same nodeName are stored as array\n                        member.push(parsedNode);\n                    } else if (member !== undefined) {\n                        member = [member, parsedNode];\n                    } else {\n                        member = parsedNode;\n                    }\n\n                    result[nodeName] = member;\n                }\n            }\n            return result;\n        },\n\n        evaluate: function(value, expression) {\n            var members = expression.split(\".\"),\n                member,\n                result,\n                length,\n                intermediateResult,\n                idx;\n\n            while (member = members.shift()) {\n                value = value[member];\n\n                if (isArray(value)) {\n                    result = [];\n                    expression = members.join(\".\");\n\n                    for (idx = 0, length = value.length; idx < length; idx++) {\n                        intermediateResult = this.evaluate(value[idx], expression);\n\n                        intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n\n                        result.push.apply(result, intermediateResult);\n                    }\n\n                    return result;\n                }\n            }\n\n            return value;\n        },\n\n        parse: function(xml) {\n            var documentElement,\n                tree,\n                result = {};\n\n            documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n\n            tree = this.parseDOM(documentElement);\n\n            result[documentElement.nodeName] = tree;\n\n            return result;\n        },\n\n        xpathToMember: function(member, raw) {\n            if (!member) {\n                return \"\";\n            }\n\n            member = member.replace(/^\\//, \"\") // remove the first \"/\"\n                           .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\n\n            if (member.indexOf(\"@\") >= 0) {\n                // replace @attribute with '[\"@attribute\"]'\n                return member.replace(/\\.?(@.*)/, raw? '$1':'[\"$1\"]');\n            }\n\n            if (member.indexOf(\"text()\") >= 0) {\n                // replace \".text()\" with '[\"#text\"]'\n                return member.replace(/(\\.?text\\(\\))/, raw? '#text':'[\"#text\"]');\n            }\n\n            return member;\n        },\n        getter: function(member) {\n            return getter(this.xpathToMember(member), true);\n        }\n    });\n\n    $.extend(true, kendo.data, {\n        XmlDataReader: XmlDataReader,\n        readers: {\n            xml: XmlDataReader\n        }\n    });\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true, loopfunc: true, evil: true */\n(function($, undefined) {\n    var extend = $.extend,\n        proxy = $.proxy,\n        isPlainObject = $.isPlainObject,\n        isEmptyObject = $.isEmptyObject,\n        isArray = $.isArray,\n        grep = $.grep,\n        ajax = $.ajax,\n        map,\n        each = $.each,\n        noop = $.noop,\n        kendo = window.kendo,\n        isFunction = kendo.isFunction,\n        Observable = kendo.Observable,\n        Class = kendo.Class,\n        STRING = \"string\",\n        FUNCTION = \"function\",\n        CREATE = \"create\",\n        READ = \"read\",\n        UPDATE = \"update\",\n        DESTROY = \"destroy\",\n        CHANGE = \"change\",\n        SYNC = \"sync\",\n        GET = \"get\",\n        ERROR = \"error\",\n        REQUESTSTART = \"requestStart\",\n        PROGRESS = \"progress\",\n        REQUESTEND = \"requestEnd\",\n        crud = [CREATE, READ, UPDATE, DESTROY],\n        identity = function(o) { return o; },\n        getter = kendo.getter,\n        stringify = kendo.stringify,\n        math = Math,\n        push = [].push,\n        join = [].join,\n        pop = [].pop,\n        splice = [].splice,\n        shift = [].shift,\n        slice = [].slice,\n        unshift = [].unshift,\n        toString = {}.toString,\n        stableSort = kendo.support.stableSort,\n        dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n        newLineRegExp = /(\\r+|\\n+)/g,\n        quoteRegExp = /(?=['\\\\])/g;\n\n    var ObservableArray = Observable.extend({\n        init: function(array, type) {\n            var that = this;\n\n            that.type = type || ObservableObject;\n\n            Observable.fn.init.call(that);\n\n            that.length = array.length;\n\n            that.wrapAll(array, that);\n        },\n\n        at: function(index) {\n            return this[index];\n        },\n\n        toJSON: function() {\n            var idx, length = this.length, value, json = new Array(length);\n\n            for (idx = 0; idx < length; idx++){\n                value = this[idx];\n\n                if (value instanceof ObservableObject) {\n                    value = value.toJSON();\n                }\n\n                json[idx] = value;\n            }\n\n            return json;\n        },\n\n        parent: noop,\n\n        wrapAll: function(source, target) {\n            var that = this,\n                idx,\n                length,\n                parent = function() {\n                    return that;\n                };\n\n            target = target || [];\n\n            for (idx = 0, length = source.length; idx < length; idx++) {\n                target[idx] = that.wrap(source[idx], parent);\n            }\n\n            return target;\n        },\n\n        wrap: function(object, parent) {\n            var that = this,\n                observable;\n\n            if (object !== null && toString.call(object) === \"[object Object]\") {\n                observable = object instanceof that.type || object instanceof Model;\n\n                if (!observable) {\n                    object = object instanceof ObservableObject ? object.toJSON() : object;\n                    object = new that.type(object);\n                }\n\n                object.parent = parent;\n\n                object.bind(CHANGE, function(e) {\n                    that.trigger(CHANGE, {\n                        field: e.field,\n                        node: e.node,\n                        index: e.index,\n                        items: e.items || [this],\n                        action: e.node ? (e.action || \"itemloaded\") : \"itemchange\"\n                    });\n                });\n            }\n\n            return object;\n        },\n\n        push: function() {\n            var index = this.length,\n                items = this.wrapAll(arguments),\n                result;\n\n            result = push.apply(this, items);\n\n            this.trigger(CHANGE, {\n                action: \"add\",\n                index: index,\n                items: items\n            });\n\n            return result;\n        },\n\n        slice: slice,\n\n        sort: [].sort,\n\n        join: join,\n\n        pop: function() {\n            var length = this.length, result = pop.apply(this);\n\n            if (length) {\n                this.trigger(CHANGE, {\n                    action: \"remove\",\n                    index: length - 1,\n                    items:[result]\n                });\n            }\n\n            return result;\n        },\n\n        splice: function(index, howMany, item) {\n            var items = this.wrapAll(slice.call(arguments, 2)),\n                result, i, len;\n\n            result = splice.apply(this, [index, howMany].concat(items));\n\n            if (result.length) {\n                this.trigger(CHANGE, {\n                    action: \"remove\",\n                    index: index,\n                    items: result\n                });\n\n                for (i = 0, len = result.length; i < len; i++) {\n                    if (result[i].children) {\n                        result[i].unbind(CHANGE);\n                    }\n                }\n            }\n\n            if (item) {\n                this.trigger(CHANGE, {\n                    action: \"add\",\n                    index: index,\n                    items: items\n                });\n            }\n            return result;\n        },\n\n        shift: function() {\n            var length = this.length, result = shift.apply(this);\n\n            if (length) {\n                this.trigger(CHANGE, {\n                    action: \"remove\",\n                    index: 0,\n                    items:[result]\n                });\n            }\n\n            return result;\n        },\n\n        unshift: function() {\n            var items = this.wrapAll(arguments),\n                result;\n\n            result = unshift.apply(this, items);\n\n            this.trigger(CHANGE, {\n                action: \"add\",\n                index: 0,\n                items: items\n            });\n\n            return result;\n        },\n\n        indexOf: function(item) {\n            var that = this,\n                idx,\n                length;\n\n            for (idx = 0, length = that.length; idx < length; idx++) {\n                if (that[idx] === item) {\n                    return idx;\n                }\n            }\n            return -1;\n        },\n\n        forEach: function(callback) {\n            var idx = 0,\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                callback(this[idx], idx, this);\n            }\n        },\n\n        map: function(callback) {\n            var idx = 0,\n                result = [],\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                result[idx] = callback(this[idx], idx, this);\n            }\n\n            return result;\n        },\n\n        filter: function(callback) {\n            var idx = 0,\n                result = [],\n                item,\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                item = this[idx];\n                if (callback(item, idx, this)) {\n                    result[result.length] = item;\n                }\n            }\n\n            return result;\n        },\n\n        find: function(callback) {\n            var idx = 0,\n                item,\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                item = this[idx];\n                if (callback(item, idx, this)) {\n                    return item;\n                }\n            }\n        },\n\n        every: function(callback) {\n            var idx = 0,\n                item,\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                item = this[idx];\n                if (!callback(item, idx, this)) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        some: function(callback) {\n            var idx = 0,\n                item,\n                length = this.length;\n\n            for (; idx < length; idx++) {\n                item = this[idx];\n                if (callback(item, idx, this)) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        // non-standard collection methods\n        remove: function(item) {\n            var idx = this.indexOf(item);\n\n            if (idx !== -1) {\n                this.splice(idx, 1);\n            }\n        },\n\n        empty: function() {\n            this.splice(0, this.length);\n        }\n    });\n\n    var LazyObservableArray = ObservableArray.extend({\n        init: function(data, type) {\n            Observable.fn.init.call(this);\n\n            this.type = type || ObservableObject;\n\n            for (var idx = 0; idx < data.length; idx++) {\n                this[idx] = data[idx];\n            }\n\n            this.length = idx;\n            this._parent = proxy(function() { return this; }, this);\n        },\n        at: function(index) {\n            var item = this[index];\n\n            if (!(item instanceof this.type)) {\n                item = this[index] = this.wrap(item, this._parent);\n            } else {\n                item.parent = this._parent;\n            }\n\n            return item;\n        }\n    });\n\n    function eventHandler(context, type, field, prefix) {\n        return function(e) {\n            var event = {}, key;\n\n            for (key in e) {\n                event[key] = e[key];\n            }\n\n            if (prefix) {\n                event.field = field + \".\" + e.field;\n            } else {\n                event.field = field;\n            }\n\n            if (type == CHANGE && context._notifyChange) {\n                context._notifyChange(event);\n            }\n\n            context.trigger(type, event);\n        };\n    }\n\n    var ObservableObject = Observable.extend({\n        init: function(value) {\n            var that = this,\n                member,\n                field,\n                parent = function() {\n                    return that;\n                };\n\n            Observable.fn.init.call(this);\n\n            for (field in value) {\n                member = value[field];\n\n                if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\n                    member = that.wrap(member, field, parent);\n                }\n\n                that[field] = member;\n            }\n\n            that.uid = kendo.guid();\n        },\n\n        shouldSerialize: function(field) {\n            return this.hasOwnProperty(field) && field !== \"_events\" && typeof this[field] !== FUNCTION && field !== \"uid\";\n        },\n\n        forEach: function(f) {\n            for (var i in this) {\n                if (this.shouldSerialize(i)) {\n                    f(this[i], i);\n                }\n            }\n        },\n\n        toJSON: function() {\n            var result = {}, value, field;\n\n            for (field in this) {\n                if (this.shouldSerialize(field)) {\n                    value = this[field];\n\n                    if (value instanceof ObservableObject || value instanceof ObservableArray) {\n                        value = value.toJSON();\n                    }\n\n                    result[field] = value;\n                }\n            }\n\n            return result;\n        },\n\n        get: function(field) {\n            var that = this, result;\n\n            that.trigger(GET, { field: field });\n\n            if (field === \"this\") {\n                result = that;\n            } else {\n                result = kendo.getter(field, true)(that);\n            }\n\n            return result;\n        },\n\n        _set: function(field, value) {\n            var that = this;\n            var composite = field.indexOf(\".\") >= 0;\n\n            if (composite) {\n                var paths = field.split(\".\"),\n                    path = \"\";\n\n                while (paths.length > 1) {\n                    path += paths.shift();\n                    var obj = kendo.getter(path, true)(that);\n                    if (obj instanceof ObservableObject) {\n                        obj.set(paths.join(\".\"), value);\n                        return composite;\n                    }\n                    path += \".\";\n                }\n            }\n\n            kendo.setter(field)(that, value);\n\n            return composite;\n        },\n\n        set: function(field, value) {\n            var that = this,\n                composite = field.indexOf(\".\") >= 0,\n                current = kendo.getter(field, true)(that);\n\n            if (current !== value) {\n\n                if (!that.trigger(\"set\", { field: field, value: value })) {\n                    if (!composite) {\n                        value = that.wrap(value, field, function() { return that; });\n                    }\n                    if (!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\n                        that.trigger(CHANGE, { field: field });\n                    }\n                }\n            }\n        },\n\n        parent: noop,\n\n        wrap: function(object, field, parent) {\n            var that = this,\n                type = toString.call(object);\n\n            if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\n                var isObservableArray = object instanceof ObservableArray;\n                var isDataSource = object instanceof DataSource;\n\n                if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\n                    if (!(object instanceof ObservableObject)) {\n                        object = new ObservableObject(object);\n                    }\n\n                    if (object.parent() != parent()) {\n                        object.bind(GET, eventHandler(that, GET, field, true));\n                        object.bind(CHANGE, eventHandler(that, CHANGE, field, true));\n                    }\n                } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\n                    if (!isObservableArray && !isDataSource) {\n                        object = new ObservableArray(object);\n                    }\n\n                    if (object.parent() != parent()) {\n                        object.bind(CHANGE, eventHandler(that, CHANGE, field, false));\n                    }\n                }\n\n                object.parent = parent;\n            }\n\n            return object;\n        }\n    });\n\n    function equal(x, y) {\n        if (x === y) {\n            return true;\n        }\n\n        var xtype = $.type(x), ytype = $.type(y), field;\n\n        if (xtype !== ytype) {\n            return false;\n        }\n\n        if (xtype === \"date\") {\n            return x.getTime() === y.getTime();\n        }\n\n        if (xtype !== \"object\" && xtype !== \"array\") {\n            return false;\n        }\n\n        for (field in x) {\n            if (!equal(x[field], y[field])) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    var parsers = {\n        \"number\": function(value) {\n            return kendo.parseFloat(value);\n        },\n\n        \"date\": function(value) {\n            return kendo.parseDate(value);\n        },\n\n        \"boolean\": function(value) {\n            if (typeof value === STRING) {\n                return value.toLowerCase() === \"true\";\n            }\n            return value != null ? !!value : value;\n        },\n\n        \"string\": function(value) {\n            return value != null ? (value + \"\") : value;\n        },\n\n        \"default\": function(value) {\n            return value;\n        }\n    };\n\n    var defaultValues = {\n        \"string\": \"\",\n        \"number\": 0,\n        \"date\": new Date(),\n        \"boolean\": false,\n        \"default\": \"\"\n    };\n\n    function getFieldByName(obj, name) {\n        var field,\n            fieldName;\n\n        for (fieldName in obj) {\n            field = obj[fieldName];\n            if (isPlainObject(field) && field.field && field.field === name) {\n                return field;\n            } else if (field === name) {\n                return field;\n            }\n        }\n        return null;\n    }\n\n    var Model = ObservableObject.extend({\n        init: function(data) {\n            var that = this;\n\n            if (!data || $.isEmptyObject(data)) {\n                data = $.extend({}, that.defaults, data);\n\n                if (that._initializers) {\n                    for (var idx = 0; idx < that._initializers.length; idx++) {\n                         var name = that._initializers[idx];\n                         data[name] = that.defaults[name]();\n                    }\n                }\n            }\n\n            ObservableObject.fn.init.call(that, data);\n\n            that.dirty = false;\n\n            if (that.idField) {\n                that.id = that.get(that.idField);\n\n                if (that.id === undefined) {\n                    that.id = that._defaultId;\n                }\n            }\n        },\n\n        shouldSerialize: function(field) {\n            return ObservableObject.fn.shouldSerialize.call(this, field) && field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") && field !== \"dirty\" && field !== \"_accessors\";\n        },\n\n        _parse: function(field, value) {\n            var that = this,\n                fieldName = field,\n                fields = (that.fields || {}),\n                parse;\n\n            field = fields[field];\n            if (!field) {\n                field = getFieldByName(fields, fieldName);\n            }\n            if (field) {\n                parse = field.parse;\n                if (!parse && field.type) {\n                    parse = parsers[field.type.toLowerCase()];\n                }\n            }\n\n            return parse ? parse(value) : value;\n        },\n\n        _notifyChange: function(e) {\n            var action = e.action;\n\n            if (action == \"add\" || action == \"remove\") {\n                this.dirty = true;\n            }\n        },\n\n        editable: function(field) {\n            field = (this.fields || {})[field];\n            return field ? field.editable !== false : true;\n        },\n\n        set: function(field, value, initiator) {\n            var that = this;\n\n            if (that.editable(field)) {\n                value = that._parse(field, value);\n\n                if (!equal(value, that.get(field))) {\n                    that.dirty = true;\n                    ObservableObject.fn.set.call(that, field, value, initiator);\n                }\n            }\n        },\n\n        accept: function(data) {\n            var that = this,\n                parent = function() { return that; },\n                field;\n\n            for (field in data) {\n                var value = data[field];\n\n                if (field.charAt(0) != \"_\") {\n                    value = that.wrap(data[field], field, parent);\n                }\n\n                that._set(field, value);\n            }\n\n            if (that.idField) {\n                that.id = that.get(that.idField);\n            }\n\n            that.dirty = false;\n        },\n\n        isNew: function() {\n            return this.id === this._defaultId;\n        }\n    });\n\n    Model.define = function(base, options) {\n        if (options === undefined) {\n            options = base;\n            base = Model;\n        }\n\n        var model,\n            proto = extend({ defaults: {} }, options),\n            name,\n            field,\n            type,\n            value,\n            idx,\n            length,\n            fields = {},\n            originalName,\n            id = proto.id,\n            functionFields = [];\n\n        if (id) {\n            proto.idField = id;\n        }\n\n        if (proto.id) {\n            delete proto.id;\n        }\n\n        if (id) {\n            proto.defaults[id] = proto._defaultId = \"\";\n        }\n\n        if (toString.call(proto.fields) === \"[object Array]\") {\n            for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n                field = proto.fields[idx];\n                if (typeof field === STRING) {\n                    fields[field] = {};\n                } else if (field.field) {\n                    fields[field.field] = field;\n                }\n            }\n            proto.fields = fields;\n        }\n\n        for (name in proto.fields) {\n            field = proto.fields[name];\n            type = field.type || \"default\";\n            value = null;\n            originalName = name;\n\n            name = typeof (field.field) === STRING ? field.field : name;\n\n            if (!field.nullable) {\n                value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n                if (typeof value === \"function\") {\n                    functionFields.push(name);\n                }\n            }\n\n            if (options.id === name) {\n                proto._defaultId = value;\n            }\n\n            proto.defaults[originalName !== name ? originalName : name] = value;\n\n            field.parse = field.parse || parsers[type];\n        }\n\n        if (functionFields.length > 0) {\n            proto._initializers = functionFields;\n        }\n\n        model = base.extend(proto);\n        model.define = function(options) {\n            return Model.define(model, options);\n        };\n\n        if (proto.fields) {\n            model.fields = proto.fields;\n            model.idField = proto.idField;\n        }\n\n        return model;\n    };\n\n    var Comparer = {\n        selector: function(field) {\n            return isFunction(field) ? field : getter(field);\n        },\n\n        compare: function(field) {\n            var selector = this.selector(field);\n            return function (a, b) {\n                a = selector(a);\n                b = selector(b);\n\n                if (a == null && b == null) {\n                    return 0;\n                }\n\n                if (a == null) {\n                    return -1;\n                }\n\n                if (b == null) {\n                    return 1;\n                }\n\n                if (a.localeCompare) {\n                    return a.localeCompare(b);\n                }\n\n                return a > b ? 1 : (a < b ? -1 : 0);\n            };\n        },\n\n        create: function(sort) {\n            var compare = sort.compare || this.compare(sort.field);\n\n            if (sort.dir == \"desc\") {\n                return function(a, b) {\n                    return compare(b, a, true);\n                };\n            }\n\n            return compare;\n        },\n\n        combine: function(comparers) {\n            return function(a, b) {\n                var result = comparers[0](a, b),\n                    idx,\n                    length;\n\n                for (idx = 1, length = comparers.length; idx < length; idx ++) {\n                    result = result || comparers[idx](a, b);\n                }\n\n                return result;\n            };\n        }\n    };\n\n    var StableComparer = extend({}, Comparer, {\n        asc: function(field) {\n            var selector = this.selector(field);\n            return function (a, b) {\n                var valueA = selector(a);\n                var valueB = selector(b);\n\n                if (valueA && valueA.getTime && valueB && valueB.getTime) {\n                    valueA = valueA.getTime();\n                    valueB = valueB.getTime();\n                }\n\n                if (valueA === valueB) {\n                    return a.__position - b.__position;\n                }\n\n                if (valueA == null) {\n                    return -1;\n                }\n\n                if (valueB == null) {\n                    return 1;\n                }\n\n                if (valueA.localeCompare) {\n                    return valueA.localeCompare(valueB);\n                }\n\n                return valueA > valueB ? 1 : -1;\n            };\n        },\n\n        desc: function(field) {\n            var selector = this.selector(field);\n            return function (a, b) {\n                var valueA = selector(a);\n                var valueB = selector(b);\n\n                if (valueA && valueA.getTime && valueB && valueB.getTime) {\n                    valueA = valueA.getTime();\n                    valueB = valueB.getTime();\n                }\n\n                if (valueA === valueB) {\n                    return a.__position - b.__position;\n                }\n\n                if (valueA == null) {\n                    return 1;\n                }\n\n                if (valueB == null) {\n                    return -1;\n                }\n\n                if (valueB.localeCompare) {\n                    return valueB.localeCompare(valueA);\n                }\n\n                return valueA < valueB ? 1 : -1;\n            };\n        },\n        create: function(sort) {\n           return this[sort.dir](sort.field);\n        }\n    });\n\n    map = function (array, callback) {\n        var idx, length = array.length, result = new Array(length);\n\n        for (idx = 0; idx < length; idx++) {\n            result[idx] = callback(array[idx], idx, array);\n        }\n\n        return result;\n    };\n\n    var operators = (function(){\n\n        function quote(value) {\n            return value.replace(quoteRegExp, \"\\\\\").replace(newLineRegExp, \"\");\n        }\n\n        function operator(op, a, b, ignore) {\n            var date;\n\n            if (b != null) {\n                if (typeof b === STRING) {\n                    b = quote(b);\n                    date = dateRegExp.exec(b);\n                    if (date) {\n                        b = new Date(+date[1]);\n                    } else if (ignore) {\n                        b = \"'\" + b.toLowerCase() + \"'\";\n                        a = \"(\" + a + \" || '').toLowerCase()\";\n                    } else {\n                        b = \"'\" + b + \"'\";\n                    }\n                }\n\n                if (b.getTime) {\n                    //b looks like a Date\n                    a = \"(\" + a + \"?\" + a + \".getTime():\" + a + \")\";\n                    b = b.getTime();\n                }\n            }\n\n            return a + \" \" + op + \" \" + b;\n        }\n\n        return {\n            eq: function(a, b, ignore) {\n                return operator(\"==\", a, b, ignore);\n            },\n            neq: function(a, b, ignore) {\n                return operator(\"!=\", a, b, ignore);\n            },\n            gt: function(a, b, ignore) {\n                return operator(\">\", a, b, ignore);\n            },\n            gte: function(a, b, ignore) {\n                return operator(\">=\", a, b, ignore);\n            },\n            lt: function(a, b, ignore) {\n                return operator(\"<\", a, b, ignore);\n            },\n            lte: function(a, b, ignore) {\n                return operator(\"<=\", a, b, ignore);\n            },\n            startswith: function(a, b, ignore) {\n                if (ignore) {\n                    a = \"(\" + a + \" || '').toLowerCase()\";\n                    if (b) {\n                        b = b.toLowerCase();\n                    }\n                }\n\n                if (b) {\n                    b = quote(b);\n                }\n\n                return a + \".lastIndexOf('\" + b + \"', 0) == 0\";\n            },\n            endswith: function(a, b, ignore) {\n                if (ignore) {\n                    a = \"(\" + a + \" || '').toLowerCase()\";\n                    if (b) {\n                        b = b.toLowerCase();\n                    }\n                }\n\n                if (b) {\n                    b = quote(b);\n                }\n\n                return a + \".indexOf('\" + b + \"', \" + a + \".length - \" + (b || \"\").length + \") >= 0\";\n            },\n            contains: function(a, b, ignore) {\n                if (ignore) {\n                    a = \"(\" + a + \" || '').toLowerCase()\";\n                    if (b) {\n                        b = b.toLowerCase();\n                    }\n                }\n\n                if (b) {\n                    b = quote(b);\n                }\n\n                return a + \".indexOf('\" + b + \"') >= 0\";\n            },\n            doesnotcontain: function(a, b, ignore) {\n                if (ignore) {\n                    a = \"(\" + a + \" || '').toLowerCase()\";\n                    if (b) {\n                        b = b.toLowerCase();\n                    }\n                }\n\n                if (b) {\n                    b = quote(b);\n                }\n\n                return a + \".indexOf('\" + b + \"') == -1\";\n            }\n        };\n    })();\n\n    function Query(data) {\n        this.data = data || [];\n    }\n\n    Query.filterExpr = function(expression) {\n        var expressions = [],\n            logic = { and: \" && \", or: \" || \" },\n            idx,\n            length,\n            filter,\n            expr,\n            fieldFunctions = [],\n            operatorFunctions = [],\n            field,\n            operator,\n            filters = expression.filters;\n\n        for (idx = 0, length = filters.length; idx < length; idx++) {\n            filter = filters[idx];\n            field = filter.field;\n            operator = filter.operator;\n\n            if (filter.filters) {\n                expr = Query.filterExpr(filter);\n                //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\n                filter = expr.expression\n                .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\n                    index = +index;\n                    return \"__o[\" + (operatorFunctions.length + index) + \"]\";\n                })\n                .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\n                    index = +index;\n                    return \"__f[\" + (fieldFunctions.length + index) + \"]\";\n                });\n\n                operatorFunctions.push.apply(operatorFunctions, expr.operators);\n                fieldFunctions.push.apply(fieldFunctions, expr.fields);\n            } else {\n                if (typeof field === FUNCTION) {\n                    expr = \"__f[\" + fieldFunctions.length +\"](d)\";\n                    fieldFunctions.push(field);\n                } else {\n                    expr = kendo.expr(field);\n                }\n\n                if (typeof operator === FUNCTION) {\n                    filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + filter.value + \")\";\n                    operatorFunctions.push(operator);\n                } else {\n                    filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined? filter.ignoreCase : true);\n                }\n            }\n\n            expressions.push(filter);\n        }\n\n        return  { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\n    };\n\n    function normalizeSort(field, dir) {\n        if (field) {\n            var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n            descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n            return grep(descriptors, function(d) { return !!d.dir; });\n        }\n    }\n\n    var operatorMap = {\n        \"==\": \"eq\",\n        equals: \"eq\",\n        isequalto: \"eq\",\n        equalto: \"eq\",\n        equal: \"eq\",\n        \"!=\": \"neq\",\n        ne: \"neq\",\n        notequals: \"neq\",\n        isnotequalto: \"neq\",\n        notequalto: \"neq\",\n        notequal: \"neq\",\n        \"<\": \"lt\",\n        islessthan: \"lt\",\n        lessthan: \"lt\",\n        less: \"lt\",\n        \"<=\": \"lte\",\n        le: \"lte\",\n        islessthanorequalto: \"lte\",\n        lessthanequal: \"lte\",\n        \">\": \"gt\",\n        isgreaterthan: \"gt\",\n        greaterthan: \"gt\",\n        greater: \"gt\",\n        \">=\": \"gte\",\n        isgreaterthanorequalto: \"gte\",\n        greaterthanequal: \"gte\",\n        ge: \"gte\",\n        notsubstringof: \"doesnotcontain\"\n    };\n\n    function normalizeOperator(expression) {\n        var idx,\n        length,\n        filter,\n        operator,\n        filters = expression.filters;\n\n        if (filters) {\n            for (idx = 0, length = filters.length; idx < length; idx++) {\n                filter = filters[idx];\n                operator = filter.operator;\n\n                if (operator && typeof operator === STRING) {\n                    filter.operator = operatorMap[operator.toLowerCase()] || operator;\n                }\n\n                normalizeOperator(filter);\n            }\n        }\n    }\n\n    function normalizeFilter(expression) {\n        if (expression && !isEmptyObject(expression)) {\n            if (isArray(expression) || !expression.filters) {\n                expression = {\n                    logic: \"and\",\n                    filters: isArray(expression) ? expression : [expression]\n                };\n            }\n\n            normalizeOperator(expression);\n\n            return expression;\n        }\n    }\n\n    Query.normalizeFilter = normalizeFilter;\n\n    function normalizeAggregate(expressions) {\n        return isArray(expressions) ? expressions : [expressions];\n    }\n\n    function normalizeGroup(field, dir) {\n        var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n        descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n        return map(descriptors, function(d) { return { field: d.field, dir: d.dir || \"asc\", aggregates: d.aggregates }; });\n    }\n\n    Query.prototype = {\n        toArray: function () {\n            return this.data;\n        },\n        range: function(index, count) {\n            return new Query(this.data.slice(index, index + count));\n        },\n        skip: function (count) {\n            return new Query(this.data.slice(count));\n        },\n        take: function (count) {\n            return new Query(this.data.slice(0, count));\n        },\n        select: function (selector) {\n            return new Query(map(this.data, selector));\n        },\n        order: function(selector, dir) {\n            var sort = { dir: dir };\n\n            if (selector) {\n                if (selector.compare) {\n                    sort.compare = selector.compare;\n                } else {\n                    sort.field = selector;\n                }\n            }\n\n            return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n        },\n        orderBy: function(selector) {\n            return this.order(selector, \"asc\");\n        },\n        orderByDescending: function(selector) {\n            return this.order(selector, \"desc\");\n        },\n        sort: function(field, dir, comparer) {\n            var idx,\n            length,\n            descriptors = normalizeSort(field, dir),\n            comparers = [];\n\n            comparer = comparer || Comparer;\n\n            if (descriptors.length) {\n                for (idx = 0, length = descriptors.length; idx < length; idx++) {\n                    comparers.push(comparer.create(descriptors[idx]));\n                }\n\n                return this.orderBy({ compare: comparer.combine(comparers) });\n            }\n\n            return this;\n        },\n\n        filter: function(expressions) {\n            var idx,\n            current,\n            length,\n            compiled,\n            predicate,\n            data = this.data,\n            fields,\n            operators,\n            result = [],\n            filter;\n\n            expressions = normalizeFilter(expressions);\n\n            if (!expressions || expressions.filters.length === 0) {\n                return this;\n            }\n\n            compiled = Query.filterExpr(expressions);\n            fields = compiled.fields;\n            operators = compiled.operators;\n\n            predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n            if (fields.length || operators.length) {\n                filter = function(d) {\n                    return predicate(d, fields, operators);\n                };\n            }\n\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                current = data[idx];\n\n                if (filter(current)) {\n                    result.push(current);\n                }\n            }\n\n            return new Query(result);\n        },\n\n        group: function(descriptors, allData) {\n            descriptors =  normalizeGroup(descriptors || []);\n            allData = allData || this.data;\n\n            var that = this,\n            result = new Query(that.data),\n            descriptor;\n\n            if (descriptors.length > 0) {\n                descriptor = descriptors[0];\n                result = result.groupBy(descriptor).select(function(group) {\n                    var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\n                    return {\n                        field: group.field,\n                        value: group.value,\n                        items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n                        hasSubgroups: descriptors.length > 1,\n                        aggregates: data.aggregate(descriptor.aggregates)\n                    };\n                });\n            }\n            return result;\n        },\n\n        groupBy: function(descriptor) {\n            if (isEmptyObject(descriptor) || !this.data.length) {\n                return new Query([]);\n            }\n\n            var field = descriptor.field,\n                sorted = this._sortForGrouping(field, descriptor.dir || \"asc\"),\n                accessor = kendo.accessor(field),\n                item,\n                groupValue = accessor.get(sorted[0], field),\n                group = {\n                    field: field,\n                    value: groupValue,\n                    items: []\n                },\n                currentValue,\n                idx,\n                len,\n                result = [group];\n\n            for(idx = 0, len = sorted.length; idx < len; idx++) {\n                item = sorted[idx];\n                currentValue = accessor.get(item, field);\n                if(!groupValueComparer(groupValue, currentValue)) {\n                    groupValue = currentValue;\n                    group = {\n                        field: field,\n                        value: groupValue,\n                        items: []\n                    };\n                    result.push(group);\n                }\n                group.items.push(item);\n            }\n            return new Query(result);\n        },\n\n        _sortForGrouping: function(field, dir) {\n            var idx, length,\n                data = this.data;\n\n            if (!stableSort) {\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    data[idx].__position = idx;\n                }\n\n                data = new Query(data).sort(field, dir, StableComparer).toArray();\n\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    delete data[idx].__position;\n                }\n                return data;\n            }\n            return this.sort(field, dir).toArray();\n        },\n\n        aggregate: function (aggregates) {\n            var idx,\n                len,\n                result = {},\n                state = {};\n\n            if (aggregates && aggregates.length) {\n                for(idx = 0, len = this.data.length; idx < len; idx++) {\n                    calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n                }\n            }\n            return result;\n        }\n    };\n\n    function groupValueComparer(a, b) {\n        if (a && a.getTime && b && b.getTime) {\n            return a.getTime() === b.getTime();\n        }\n        return a === b;\n    }\n\n    function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n        aggregates = aggregates || [];\n        var idx,\n            aggr,\n            functionName,\n            len = aggregates.length;\n\n        for (idx = 0; idx < len; idx++) {\n            aggr = aggregates[idx];\n            functionName = aggr.aggregate;\n            var field = aggr.field;\n            accumulator[field] = accumulator[field] || {};\n            state[field] = state[field] || {};\n            state[field][functionName] = state[field][functionName] || {};\n            accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n        }\n    }\n\n    var functions = {\n        sum: function(accumulator, item, accessor) {\n            var value = accessor.get(item);\n\n            if (!isNumber(accumulator)) {\n                accumulator = value;\n            } else if (isNumber(value)) {\n                accumulator += value;\n            }\n\n            return accumulator;\n        },\n        count: function(accumulator) {\n            return (accumulator || 0) + 1;\n        },\n        average: function(accumulator, item, accessor, index, length, state) {\n            var value = accessor.get(item);\n\n            if (state.count === undefined) {\n                state.count = 0;\n            }\n\n            if (!isNumber(accumulator)) {\n                accumulator = value;\n            } else if (isNumber(value)) {\n                accumulator += value;\n            }\n\n            if (isNumber(value)) {\n                state.count++;\n            }\n\n            if(index == length - 1 && isNumber(accumulator)) {\n                accumulator = accumulator / state.count;\n            }\n            return accumulator;\n        },\n        max: function(accumulator, item, accessor) {\n            var value = accessor.get(item);\n\n            if (!isNumber(accumulator) && !isDate(accumulator)) {\n                accumulator = value;\n            }\n\n            if(accumulator < value && (isNumber(value) || isDate(value))) {\n                accumulator = value;\n            }\n            return accumulator;\n        },\n        min: function(accumulator, item, accessor) {\n            var value = accessor.get(item);\n\n            if (!isNumber(accumulator) && !isDate(accumulator)) {\n                accumulator = value;\n            }\n\n            if(accumulator > value && (isNumber(value) || isDate(value))) {\n                accumulator = value;\n            }\n            return accumulator;\n        }\n    };\n\n    function isNumber(val) {\n        return typeof val === \"number\" && !isNaN(val);\n    }\n\n    function isDate(val) {\n        return val && val.getTime;\n    }\n\n    function toJSON(array) {\n        var idx, length = array.length, result = new Array(length);\n\n        for (idx = 0; idx < length; idx++) {\n            result[idx] = array[idx].toJSON();\n        }\n\n        return result;\n    }\n\n    Query.process = function(data, options) {\n        options = options || {};\n\n        var query = new Query(data),\n            group = options.group,\n            sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])),\n            total,\n            filterCallback = options.filterCallback,\n            filter = options.filter,\n            skip = options.skip,\n            take = options.take;\n\n        if (filter) {\n            query = query.filter(filter);\n\n            if (filterCallback) {\n                query = filterCallback(query);\n            }\n\n            total = query.toArray().length;\n        }\n\n        if (sort) {\n            query = query.sort(sort);\n\n            if (group) {\n                data = query.toArray();\n            }\n        }\n\n        if (skip !== undefined && take !== undefined) {\n            query = query.range(skip, take);\n        }\n\n        if (group) {\n            query = query.group(group, data);\n        }\n\n        return {\n            total: total,\n            data: query.toArray()\n        };\n    };\n\n    var LocalTransport = Class.extend({\n        init: function(options) {\n            this.data = options.data;\n        },\n\n        read: function(options) {\n            options.success(this.data);\n        },\n        update: function(options) {\n            options.success(options.data);\n        },\n        create: function(options) {\n            options.success(options.data);\n        },\n        destroy: function(options) {\n            options.success(options.data);\n        }\n    });\n\n    var RemoteTransport = Class.extend( {\n        init: function(options) {\n            var that = this, parameterMap;\n\n            options = that.options = extend({}, that.options, options);\n\n            each(crud, function(index, type) {\n                if (typeof options[type] === STRING) {\n                    options[type] = {\n                        url: options[type]\n                    };\n                }\n            });\n\n            that.cache = options.cache? Cache.create(options.cache) : {\n                find: noop,\n                add: noop\n            };\n\n            parameterMap = options.parameterMap;\n\n            if (isFunction(options.push)) {\n                that.push = options.push;\n            }\n\n            if (!that.push) {\n                that.push = identity;\n            }\n\n            that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\n                var result = {};\n\n                each(options, function(option, value) {\n                    if (option in parameterMap) {\n                        option = parameterMap[option];\n                        if (isPlainObject(option)) {\n                            value = option.value(value);\n                            option = option.key;\n                        }\n                    }\n\n                    result[option] = value;\n                });\n\n                return result;\n            };\n        },\n\n        options: {\n            parameterMap: identity\n        },\n\n        create: function(options) {\n            return ajax(this.setup(options, CREATE));\n        },\n\n        read: function(options) {\n            var that = this,\n                success,\n                error,\n                result,\n                cache = that.cache;\n\n            options = that.setup(options, READ);\n\n            success = options.success || noop;\n            error = options.error || noop;\n\n            result = cache.find(options.data);\n\n            if(result !== undefined) {\n                success(result);\n            } else {\n                options.success = function(result) {\n                    cache.add(options.data, result);\n\n                    success(result);\n                };\n\n                $.ajax(options);\n            }\n        },\n\n        update: function(options) {\n            return ajax(this.setup(options, UPDATE));\n        },\n\n        destroy: function(options) {\n            return ajax(this.setup(options, DESTROY));\n        },\n\n        setup: function(options, type) {\n            options = options || {};\n\n            var that = this,\n                parameters,\n                operation = that.options[type],\n                data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n\n            options = extend(true, {}, operation, options);\n            parameters = extend(true, {}, data, options.data);\n\n            options.data = that.parameterMap(parameters, type);\n\n            if (isFunction(options.url)) {\n                options.url = options.url(parameters);\n            }\n\n            return options;\n        }\n    });\n\n    var Cache = Class.extend({\n        init: function() {\n            this._store = {};\n        },\n        add: function(key, data) {\n            if(key !== undefined) {\n                this._store[stringify(key)] = data;\n            }\n        },\n        find: function(key) {\n            return this._store[stringify(key)];\n        },\n        clear: function() {\n            this._store = {};\n        },\n        remove: function(key) {\n            delete this._store[stringify(key)];\n        }\n    });\n\n    Cache.create = function(options) {\n        var store = {\n            \"inmemory\": function() { return new Cache(); }\n        };\n\n        if (isPlainObject(options) && isFunction(options.find)) {\n            return options;\n        }\n\n        if (options === true) {\n            return new Cache();\n        }\n\n        return store[options]();\n    };\n\n    function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n        var record,\n            getter,\n            originalName,\n            idx,\n            length;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            record = data[idx];\n            for (getter in getters) {\n                originalName = fieldNames[getter];\n\n                if (originalName && originalName !== getter) {\n                    record[originalName] = getters[getter](record);\n                    delete record[getter];\n                }\n            }\n        }\n    }\n\n    function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n        var record,\n            getter,\n            originalName,\n            idx,\n            length;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            record = data[idx];\n            for (getter in getters) {\n                record[getter] = modelInstance._parse(getter, getters[getter](record));\n\n                originalName = fieldNames[getter];\n                if (originalName && originalName !== getter) {\n                    delete record[originalName];\n                }\n            }\n        }\n    }\n\n    function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n        var record,\n            idx,\n            fieldName,\n            length;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            record = data[idx];\n\n            fieldName = originalFieldNames[record.field];\n            if (fieldName && fieldName != record.field) {\n                record.field = fieldName;\n            }\n\n            record.value = modelInstance._parse(record.field, record.value);\n\n            if (record.hasSubgroups) {\n                convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n            } else {\n                convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n            }\n        }\n    }\n\n    function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n        return function(data) {\n            data = originalFunction(data);\n\n            if (data && !isEmptyObject(getters)) {\n                if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\n                    data = [data];\n                }\n\n                converter(data, getters, new model(), originalFieldNames, fieldNames);\n            }\n\n            return data || [];\n        };\n    }\n\n    var DataReader = Class.extend({\n        init: function(schema) {\n            var that = this, member, get, model, base;\n\n            schema = schema || {};\n\n            for (member in schema) {\n                get = schema[member];\n\n                that[member] = typeof get === STRING ? getter(get) : get;\n            }\n\n            base = schema.modelBase || Model;\n\n            if (isPlainObject(that.model)) {\n                that.model = model = base.define(that.model);\n            }\n\n            var dataFunction = proxy(that.data, that);\n\n            that._dataAccessFunction = dataFunction;\n\n            if (that.model) {\n                var groupsFunction = proxy(that.groups, that),\n                    serializeFunction = proxy(that.serialize, that),\n                    originalFieldNames = {},\n                    getters = {},\n                    serializeGetters = {},\n                    fieldNames = {},\n                    shouldSerialize = false,\n                    fieldName;\n\n                model = that.model;\n\n                if (model.fields) {\n                    each(model.fields, function(field, value) {\n                        var fromName;\n\n                        fieldName = field;\n\n                        if (isPlainObject(value) && value.field) {\n                            fieldName = value.field;\n                        } else if (typeof value === STRING) {\n                            fieldName = value;\n                        }\n\n                        if (isPlainObject(value) && value.from) {\n                            fromName = value.from;\n                        }\n\n                        shouldSerialize = shouldSerialize || (fromName && fromName !== field) || fieldName !== field;\n\n                        getters[field] = getter(fromName || fieldName);\n                        serializeGetters[field] = getter(field);\n                        originalFieldNames[fromName || fieldName] = field;\n                        fieldNames[field] = fromName || fieldName;\n                    });\n\n                    if (!schema.serialize && shouldSerialize) {\n                        that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n                    }\n                }\n\n                that._dataAccessFunction = dataFunction;\n                that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n                that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n            }\n        },\n        errors: function(data) {\n            return data ? data.errors : null;\n        },\n        parse: identity,\n        data: identity,\n        total: function(data) {\n            return data.length;\n        },\n        groups: identity,\n        aggregates: function() {\n            return {};\n        },\n        serialize: function(data) {\n            return data;\n        }\n    });\n\n    function mergeGroups(target, dest, skip, take) {\n        var group,\n            idx = 0,\n            items;\n\n        while (dest.length && take) {\n            group = dest[idx];\n            items = group.items;\n\n            var length = items.length;\n\n            if (target && target.field === group.field && target.value === group.value) {\n                if (target.hasSubgroups && target.items.length) {\n                    mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n                } else {\n                    items = items.slice(skip, skip + take);\n                    target.items = target.items.concat(items);\n                }\n                dest.splice(idx--, 1);\n            } else if (group.hasSubgroups && items.length) {\n                mergeGroups(group, items, skip, take);\n            } else {\n                items = items.slice(skip, skip + take);\n                group.items = items;\n\n                if (!group.items.length) {\n                    dest.splice(idx--, 1);\n                }\n            }\n\n            if (items.length === 0) {\n                skip -= length;\n            } else {\n                skip = 0;\n                take -= items.length;\n            }\n\n            if (++idx >= dest.length) {\n                break;\n            }\n        }\n\n        if (idx < dest.length) {\n            dest.splice(idx, dest.length - idx);\n        }\n    }\n\n    function flattenGroups(data) {\n        var idx,\n            result = [],\n            length,\n            items,\n            itemIndex;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            var group = data.at(idx);\n            if (group.hasSubgroups) {\n                result = result.concat(flattenGroups(group.items));\n            } else {\n                items = group.items;\n                for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n                    result.push(items.at(itemIndex));\n                }\n            }\n        }\n        return result;\n    }\n\n    function wrapGroupItems(data, model) {\n        var idx, length, group, items;\n        if (model) {\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                group = data.at(idx);\n\n                if (group.hasSubgroups) {\n                    wrapGroupItems(group.items, model);\n                } else {\n                    group.items = new LazyObservableArray(group.items, model);\n                }\n            }\n        }\n    }\n\n    function eachGroupItems(data, func) {\n        for (var idx = 0, length = data.length; idx < length; idx++) {\n            if (data[idx].hasSubgroups) {\n                if (eachGroupItems(data[idx].items, func)) {\n                    return true;\n                }\n            } else if (func(data[idx].items, data[idx])) {\n                return true;\n            }\n        }\n    }\n\n    function replaceInRanges(ranges, data, item, observable) {\n        for (var idx = 0; idx < ranges.length; idx++) {\n            if (ranges[idx].data === data) {\n                break;\n            }\n            if (replaceInRange(ranges[idx].data, item, observable)) {\n                break;\n            }\n        }\n    }\n\n    function replaceInRange(items, item, observable) {\n        for (var idx = 0, length = items.length; idx < length; idx++) {\n            if (items[idx] && items[idx].hasSubgroups) {\n                return replaceInRange(items[idx].items, item, observable);\n            } else if (items[idx] === item || items[idx] === observable) {\n               items[idx] = observable;\n               return true;\n            }\n        }\n    }\n\n    function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n        for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n            var item = view[viewIndex];\n\n            if (!item || item instanceof type) {\n                continue;\n            }\n\n            if (item.hasSubgroups !== undefined && !serverGrouping) {\n                replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n            } else {\n                for (var idx = 0; idx < data.length; idx++) {\n                    if (data[idx] === item) {\n                        view[viewIndex] = data.at(idx);\n                        replaceInRanges(ranges, data, item, view[viewIndex]);\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    function removeModel(data, model) {\n        var idx, length;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            var dataItem = data.at(idx);\n            if (dataItem.uid == model.uid) {\n                data.splice(idx, 1);\n                return dataItem;\n            }\n        }\n    }\n\n    function wrapInEmptyGroup(groups, model) {\n        var parent,\n            group,\n            idx,\n            length;\n\n        for (idx = groups.length-1, length = 0; idx >= length; idx--) {\n            group = groups[idx];\n            parent = {\n                value: model.get(group.field),\n                field: group.field,\n                items: parent ? [parent] : [model],\n                hasSubgroups: !!parent,\n                aggregates: {}\n            };\n        }\n\n        return parent;\n    }\n\n    function indexOfPristineModel(data, model) {\n        if (model) {\n            return indexOf(data, function(item) {\n                if (item.uid) {\n                    return item.uid == model.uid;\n                }\n\n                return item[model.idField] === model.id;\n            });\n        }\n        return -1;\n    }\n\n    function indexOfModel(data, model) {\n        if (model) {\n            return indexOf(data, function(item) {\n                return item.uid == model.uid;\n            });\n        }\n        return -1;\n    }\n\n    function indexOf(data, comparer) {\n        var idx, length;\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            if (comparer(data[idx])) {\n                return idx;\n            }\n        }\n\n        return -1;\n    }\n\n    function fieldNameFromModel(fields, name) {\n        if (fields && !isEmptyObject(fields)) {\n            var descriptor = fields[name];\n            var fieldName;\n            if (isPlainObject(descriptor)) {\n                fieldName = descriptor.from || descriptor.field || name;\n            } else {\n                fieldName = fields[name] || name;\n            }\n\n            if (isFunction(fieldName)) {\n                return name;\n            }\n\n            return fieldName;\n        }\n        return name;\n    }\n\n    function convertFilterDescriptorsField(descriptor, model) {\n        var idx,\n            length,\n            target = {};\n\n        for (var field in descriptor) {\n            if (field !== \"filters\") {\n                target[field] = descriptor[field];\n            }\n        }\n\n        if (descriptor.filters) {\n            target.filters = [];\n            for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n                target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n            }\n        } else {\n            target.field = fieldNameFromModel(model.fields, target.field);\n        }\n        return target;\n    }\n\n    function convertDescriptorsField(descriptors, model) {\n        var idx,\n            length,\n            result = [],\n            target,\n            descriptor;\n\n        for (idx = 0, length = descriptors.length; idx < length; idx ++) {\n            target = {};\n\n            descriptor = descriptors[idx];\n\n            for (var field in descriptor) {\n                target[field] = descriptor[field];\n            }\n\n            target.field = fieldNameFromModel(model.fields, target.field);\n\n            if (target.aggregates && isArray(target.aggregates)) {\n                target.aggregates = convertDescriptorsField(target.aggregates, model);\n            }\n            result.push(target);\n        }\n        return result;\n    }\n\n    var DataSource = Observable.extend({\n        init: function(options) {\n            var that = this, model, data;\n\n            if (options) {\n                data = options.data;\n            }\n\n            options = that.options = extend({}, that.options, options);\n\n            that._map = {};\n            that._prefetch = {};\n            that._data = [];\n            that._pristineData = [];\n            that._ranges = [];\n            that._view = [];\n            that._pristineTotal = 0;\n            that._destroyed = [];\n            that._pageSize = options.pageSize;\n            that._page = options.page  || (options.pageSize ? 1 : undefined);\n            that._sort = normalizeSort(options.sort);\n            that._filter = normalizeFilter(options.filter);\n            that._group = normalizeGroup(options.group);\n            that._aggregate = options.aggregate;\n            that._total = options.total;\n\n            that._shouldDetachObservableParents = true;\n\n            Observable.fn.init.call(that);\n\n            that.transport = Transport.create(options, data);\n\n            if (isFunction(that.transport.push)) {\n                that.transport.push({\n                    pushCreate: proxy(that._pushCreate, that),\n                    pushUpdate: proxy(that._pushUpdate, that),\n                    pushDestroy: proxy(that._pushDestroy, that)\n                });\n            }\n\n            if (options.offlineStorage != null) {\n                if (typeof options.offlineStorage == \"string\") {\n                    var key = options.offlineStorage;\n\n                    that._storage = {\n                        getItem: function() {\n                            return JSON.parse(localStorage.getItem(key));\n                        },\n                        setItem: function(item) {\n                            localStorage.setItem(key, stringify(item));\n                        }\n                    };\n                } else {\n                    that._storage = options.offlineStorage;\n                }\n            }\n\n            that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\n\n            model = that.reader.model || {};\n\n            that._detachObservableParents();\n\n            that._data = that._observe(that._data);\n            that._online = true;\n\n            that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\n        },\n\n        options: {\n            data: null,\n            schema: {\n               modelBase: Model\n            },\n            offlineStorage: null,\n            serverSorting: false,\n            serverPaging: false,\n            serverFiltering: false,\n            serverGrouping: false,\n            serverAggregates: false,\n            batch: false\n        },\n\n        online: function(value) {\n            if (value !== undefined) {\n                if (this._online != value) {\n                    this._online = value;\n\n                    if (value) {\n                        return this.sync();\n                    }\n                }\n\n                return $.Deferred().resolve().promise();\n            } else {\n                return this._online;\n            }\n        },\n\n        offlineData: function(state) {\n            if (this.options.offlineStorage == null) {\n                return null;\n            }\n\n            if (state !== undefined) {\n                return this._storage.setItem(state);\n            }\n\n            return this._storage.getItem() || {};\n        },\n\n        _isServerGrouped: function() {\n            var group = this.group() || [];\n\n            return this.options.serverGrouping && group.length;\n        },\n\n        _pushCreate: function(result) {\n            this._push(result, \"pushCreate\");\n        },\n\n        _pushUpdate: function(result) {\n            this._push(result, \"pushUpdate\");\n        },\n\n        _pushDestroy: function(result) {\n            this._push(result, \"pushDestroy\");\n        },\n\n        _push: function(result, operation) {\n            var data = this._readData(result);\n\n            if (!data) {\n                data = result;\n            }\n\n            this[operation](data);\n        },\n\n        _flatData: function(data, skip) {\n            if (data) {\n                if (this._isServerGrouped()) {\n                    return flattenGroups(data);\n                }\n\n                if (!skip) {\n                    for (var idx = 0; idx < data.length; idx++) {\n                        data.at(idx);\n                    }\n                }\n            }\n\n            return data;\n        },\n\n        parent: noop,\n\n        get: function(id) {\n            var idx, length, data = this._flatData(this._data);\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (data[idx].id == id) {\n                    return data[idx];\n                }\n            }\n        },\n\n        getByUid: function(id) {\n            var idx, length, data = this._flatData(this._data);\n\n            if (!data) {\n                return;\n            }\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (data[idx].uid == id) {\n                    return data[idx];\n                }\n            }\n        },\n\n        indexOf: function(model) {\n            return indexOfModel(this._data, model);\n        },\n\n        at: function(index) {\n            return this._data.at(index);\n        },\n\n        data: function(value) {\n            var that = this;\n            if (value !== undefined) {\n                that._detachObservableParents();\n                that._data = this._observe(value);\n\n                that._pristineData = value.slice(0);\n\n                that._storeData();\n\n                that._ranges = [];\n                that.trigger(\"reset\");\n                that._addRange(that._data);\n\n                that._total = that._data.length;\n                that._pristineTotal = that._total;\n\n                that._process(that._data);\n            } else {\n                if (that._data) {\n                    for (var idx = 0; idx < that._data.length; idx++) {\n                        that._data.at(idx);\n                    }\n                }\n\n                return that._data;\n            }\n        },\n\n        view: function(value) {\n            if (value === undefined) {\n                return this._view;\n            } else {\n                this._view = this._observeView(value);\n            }\n        },\n\n        _observeView: function(data) {\n            var that = this;\n            replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n\n            var view = new LazyObservableArray(data, that.reader.model);\n            view.parent = function() { return that.parent(); };\n            return view;\n        },\n\n        flatView: function() {\n            var groups = this.group() || [];\n\n            if (groups.length) {\n                return flattenGroups(this._view);\n            } else {\n                return this._view;\n            }\n        },\n\n        add: function(model) {\n            return this.insert(this._data.length, model);\n        },\n\n        _createNewModel: function(model) {\n            if (this.reader.model) {\n                return new this.reader.model(model);\n            }\n\n            if (model instanceof ObservableObject) {\n                return model;\n            }\n\n            return new ObservableObject(model);\n        },\n\n        insert: function(index, model) {\n            if (!model) {\n                model = index;\n                index = 0;\n            }\n\n            if (!(model instanceof Model)) {\n                model = this._createNewModel(model);\n            }\n\n            if (this._isServerGrouped()) {\n                this._data.splice(index, 0, wrapInEmptyGroup(this.group(), model));\n            } else {\n                this._data.splice(index, 0, model);\n            }\n\n            return model;\n        },\n\n        pushCreate: function(items) {\n            if (!isArray(items)) {\n                items = [items];\n            }\n\n            var pushed = [];\n            var autoSync = this.options.autoSync;\n            this.options.autoSync = false;\n\n            try {\n                for (var idx = 0; idx < items.length; idx ++) {\n                    var item = items[idx];\n\n                    var result = this.add(item);\n\n                    pushed.push(result);\n\n                    var pristine = result.toJSON();\n\n                    if (this._isServerGrouped()) {\n                        pristine = wrapInEmptyGroup(this.group(), pristine);\n                    }\n\n                    this._pristineData.push(pristine);\n                }\n            } finally {\n                this.options.autoSync = autoSync;\n            }\n\n            if (pushed.length) {\n                this.trigger(\"push\", {\n                    type: \"create\",\n                    items: pushed\n                });\n            }\n        },\n\n        pushUpdate: function(items) {\n            if (!isArray(items)) {\n                items = [items];\n            }\n\n            var pushed = [];\n\n            for (var idx = 0; idx < items.length; idx ++) {\n                var item = items[idx];\n                var model = this._createNewModel(item);\n\n                var target = this.get(model.id);\n\n                if (target) {\n                    pushed.push(target);\n\n                    target.accept(item);\n\n                    target.trigger(CHANGE);\n\n                    this._updatePristineForModel(target, item);\n                } else {\n                    this.pushCreate(item);\n                }\n            }\n\n            if (pushed.length) {\n                this.trigger(\"push\", {\n                    type: \"update\",\n                    items: pushed\n                });\n            }\n        },\n\n        pushDestroy: function(items) {\n            var pushed = this._removeItems(items);\n\n            if (pushed.length) {\n                this.trigger(\"push\", {\n                    type: \"destroy\",\n                    items: pushed\n                });\n            }\n        },\n\n        _removeItems: function(items) {\n            if (!isArray(items)) {\n                items = [items];\n            }\n\n            var destroyed = [];\n            var autoSync = this.options.autoSync;\n            this.options.autoSync = false;\n            try {\n                for (var idx = 0; idx < items.length; idx ++) {\n                    var item = items[idx];\n                    var model = this._createNewModel(item);\n                    var found = false;\n\n                    this._eachItem(this._data, function(items){\n                        for (var idx = 0; idx < items.length; idx++) {\n                            var item = items.at(idx);\n                            if (item.id === model.id) {\n                                destroyed.push(item);\n                                items.splice(idx, 1);\n                                found = true;\n                                break;\n                            }\n                        }\n                    });\n\n                    if (found) {\n                        this._removePristineForModel(model);\n                        this._destroyed.pop();\n                    }\n                }\n            } finally {\n                this.options.autoSync = autoSync;\n            }\n\n            return destroyed;\n        },\n\n        remove: function(model) {\n            var result,\n                that = this,\n                hasGroups = that._isServerGrouped();\n\n            this._eachItem(that._data, function(items) {\n                result = removeModel(items, model);\n                if (result && hasGroups) {\n                    if (!result.isNew || !result.isNew()) {\n                        that._destroyed.push(result);\n                    }\n                    return true;\n                }\n            });\n\n            this._removeModelFromRanges(model);\n\n            this._updateRangesLength();\n\n            return model;\n        },\n\n        sync: function() {\n            var that = this,\n                idx,\n                length,\n                created = [],\n                updated = [],\n                destroyed = that._destroyed,\n                data = that._flatData(that._data);\n\n            var promise = $.Deferred().resolve().promise();\n\n            if (that.online()) {\n\n                if (!that.reader.model) {\n                    return promise;\n                }\n\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    if (data[idx].isNew()) {\n                        created.push(data[idx]);\n                    } else if (data[idx].dirty) {\n                        updated.push(data[idx]);\n                    }\n                }\n\n                var promises = [];\n                promises.push.apply(promises, that._send(\"create\", created));\n                promises.push.apply(promises, that._send(\"update\", updated));\n                promises.push.apply(promises, that._send(\"destroy\", destroyed));\n\n                promise = $.when\n                 .apply(null, promises)\n                 .then(function() {\n                    var idx, length;\n\n                    for (idx = 0, length = arguments.length; idx < length; idx++){\n                        that._accept(arguments[idx]);\n                    }\n\n                    that._storeData(true);\n\n                    that._change({ action: \"sync\" });\n\n                    that.trigger(SYNC);\n                });\n            } else {\n                that._storeData(true);\n\n                that._change({ action: \"sync\" });\n            }\n\n            return promise;\n        },\n\n        cancelChanges: function(model) {\n            var that = this;\n\n            if (model instanceof kendo.data.Model) {\n                that._cancelModel(model);\n            } else {\n                that._destroyed = [];\n                that._detachObservableParents();\n                that._data = that._observe(that._pristineData);\n                if (that.options.serverPaging) {\n                    that._total = that._pristineTotal;\n                }\n\n                that._ranges = [];\n                that._addRange(that._data);\n\n                that._change();\n            }\n        },\n\n        hasChanges: function() {\n            var idx,\n                length,\n                data = this._data;\n\n            if (this._destroyed.length) {\n                return true;\n            }\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if ((data[idx].isNew && data[idx].isNew()) || data[idx].dirty) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        _accept: function(result) {\n            var that = this,\n                models = result.models,\n                response = result.response,\n                idx = 0,\n                serverGroup = that._isServerGrouped(),\n                pristine = that._pristineData,\n                type = result.type,\n                length;\n\n            that.trigger(REQUESTEND, { response: response, type: type });\n\n            if (response && !isEmptyObject(response)) {\n                response = that.reader.parse(response);\n\n                if (that._handleCustomErrors(response)) {\n                    return;\n                }\n\n                response = that.reader.data(response);\n\n                if (!isArray(response)) {\n                    response = [response];\n                }\n            } else {\n                response = $.map(models, function(model) { return model.toJSON(); } );\n            }\n\n            if (type === \"destroy\") {\n                that._destroyed = [];\n            }\n\n            for (idx = 0, length = models.length; idx < length; idx++) {\n                if (type !== \"destroy\") {\n                    models[idx].accept(response[idx]);\n\n                    if (type === \"create\") {\n                        pristine.push(serverGroup ? wrapInEmptyGroup(that.group(), models[idx]) : response[idx]);\n                    } else if (type === \"update\") {\n                        that._updatePristineForModel(models[idx], response[idx]);\n                    }\n                } else {\n                    that._removePristineForModel(models[idx]);\n                }\n            }\n        },\n\n        _updatePristineForModel: function(model, values) {\n            this._executeOnPristineForModel(model, function(index, items) {\n                kendo.deepExtend(items[index], values);\n            });\n        },\n\n        _executeOnPristineForModel: function(model, callback) {\n            this._eachPristineItem(\n                function(items) {\n                    var index = indexOfPristineModel(items, model);\n                    if (index > -1) {\n                        callback(index, items);\n                        return true;\n                    }\n                });\n        },\n\n        _removePristineForModel: function(model) {\n            this._executeOnPristineForModel(model, function(index, items) {\n                items.splice(index, 1);\n            });\n        },\n\n        _readData: function(data) {\n            var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n            return read.call(this.reader, data);\n        },\n\n        _eachPristineItem: function(callback) {\n            this._eachItem(this._pristineData, callback);\n        },\n\n       _eachItem: function(data, callback) {\n            if (data && data.length) {\n                if (this._isServerGrouped()) {\n                    eachGroupItems(data, callback);\n                } else {\n                    callback(data);\n                }\n            }\n        },\n\n        _pristineForModel: function(model) {\n            var pristine,\n                idx,\n                callback = function(items) {\n                    idx = indexOfPristineModel(items, model);\n                    if (idx > -1) {\n                        pristine = items[idx];\n                        return true;\n                    }\n                };\n\n            this._eachPristineItem(callback);\n\n            return pristine;\n        },\n\n        _cancelModel: function(model) {\n            var pristine = this._pristineForModel(model);\n\n            this._eachItem(this._data, function(items) {\n                var idx = indexOfModel(items, model);\n                if (idx >= 0) {\n                    if (pristine && (!model.isNew() || pristine.__state__)) {\n                        items[idx].accept(pristine);\n                    } else {\n                        items.splice(idx, 1);\n                    }\n                }\n            });\n        },\n\n        _promise: function(data, models, type) {\n            var that = this;\n\n            return $.Deferred(function(deferred) {\n                that.trigger(REQUESTSTART, { type: type });\n\n                that.transport[type].call(that.transport, extend({\n                    success: function(response) {\n                        deferred.resolve({\n                            response: response,\n                            models: models,\n                            type: type\n                        });\n                    },\n                    error: function(response, status, error) {\n                        deferred.reject(response);\n                        that.error(response, status, error);\n                    }\n                }, data));\n            }).promise();\n        },\n\n        _send: function(method, data) {\n            var that = this,\n                idx,\n                length,\n                promises = [],\n                converted = that.reader.serialize(toJSON(data));\n\n            if (that.options.batch) {\n                if (data.length) {\n                    promises.push(that._promise( { data: { models: converted } }, data , method));\n                }\n            } else {\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    promises.push(that._promise( { data: converted[idx] }, [ data[idx] ], method));\n                }\n            }\n\n            return promises;\n        },\n\n        read: function(data) {\n            var that = this, params = that._params(data);\n            var deferred = $.Deferred();\n\n            that._queueRequest(params, function() {\n                var isPrevented = that.trigger(REQUESTSTART, { type: \"read\" });\n                if (!isPrevented) {\n                    that.trigger(PROGRESS);\n\n                    that._ranges = [];\n                    that.trigger(\"reset\");\n                    if (that.online()) {\n                        that.transport.read({\n                            data: params,\n                            success: function(data) {\n                                that.success(data);\n\n                                deferred.resolve();\n                            },\n                            error: function() {\n                                var args = slice.call(arguments);\n\n                                that.error.apply(that, args);\n\n                                deferred.reject.apply(deferred, args);\n                            }\n                        });\n                    } else if (that.options.offlineStorage != null){\n                        that.success(that.offlineData());\n\n                        deferred.resolve();\n                    }\n                } else {\n                    that._dequeueRequest();\n\n                    deferred.resolve(isPrevented);\n                }\n            });\n\n            return deferred.promise();\n        },\n\n        _readAggregates: function(data) {\n            return this.reader.aggregates(data);\n        },\n\n        success: function(data) {\n            var that = this,\n                options = that.options;\n\n            that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n            if (that.online()) {\n                data = that.reader.parse(data);\n\n                if (that._handleCustomErrors(data)) {\n                    that._dequeueRequest();\n                    return;\n                }\n\n                that._total = that.reader.total(data);\n\n                if (that._aggregate && options.serverAggregates) {\n                    that._aggregateResult = that._readAggregates(data);\n                }\n\n                data = that._readData(data);\n            } else {\n                data = that._readData(data);\n\n                var items = [];\n\n                for (var idx = 0; idx < data.length; idx++) {\n                    var item = data[idx];\n                    var state = item.__state__;\n\n                    if (state == \"destroy\") {\n                       this._destroyed.push(this._createNewModel(item));\n                    } else {\n                        items.push(item);\n                    }\n                }\n\n                data = items;\n\n                that._total = data.length;\n            }\n\n            that._pristineTotal = that._total;\n\n            that._pristineData = data.slice(0);\n\n            that._detachObservableParents();\n\n            that._data = that._observe(data);\n\n            if (that.options.offlineStorage != null) {\n                that._eachItem(that._data, function(items) {\n                    for (var idx = 0; idx < items.length; idx++) {\n                        var item = items.at(idx);\n                        if (item.__state__ == \"update\") {\n                            item.dirty = true;\n                        }\n                    }\n                });\n            }\n\n            that._storeData();\n\n            that._addRange(that._data);\n\n            that._process(that._data);\n\n            that._dequeueRequest();\n        },\n\n        _detachObservableParents: function() {\n            if (this._data && this._shouldDetachObservableParents) {\n                for (var idx = 0; idx < this._data.length; idx++) {\n                    if (this._data[idx].parent) {\n                        this._data[idx].parent = noop;\n                    }\n                }\n            }\n        },\n\n        _storeData: function(updatePristine) {\n            var serverGrouping = this._isServerGrouped();\n            var model = this.reader.model;\n\n            function items(data) {\n                var state = [];\n\n                for (var idx = 0; idx < data.length; idx++) {\n                    var dataItem = data.at(idx);\n                    var item = dataItem.toJSON();\n\n                    if (serverGrouping && dataItem.items) {\n                        item.items = items(dataItem.items);\n                    } else {\n                        item.uid = dataItem.uid;\n\n                        if (model) {\n                            if (dataItem.isNew()) {\n                                item.__state__ = \"create\";\n                            } else if (dataItem.dirty) {\n                                item.__state__ = \"update\";\n                            }\n                        }\n                    }\n                    state.push(item);\n                }\n\n                return state;\n            }\n\n            if (this.options.offlineStorage != null) {\n                var state = items(this._data);\n\n                for (var idx = 0; idx < this._destroyed.length; idx++) {\n                    var item = this._destroyed[idx].toJSON();\n                    item.__state__ = \"destroy\";\n                    state.push(item);\n                }\n\n                this.offlineData(state);\n\n                if (updatePristine) {\n                    this._pristineData = state;\n                }\n            }\n        },\n\n        _addRange: function(data) {\n            var that = this,\n                start = that._skip || 0,\n                end = start + that._flatData(data, true).length;\n\n            that._ranges.push({ start: start, end: end, data: data });\n            that._ranges.sort( function(x, y) { return x.start - y.start; } );\n        },\n\n        error: function(xhr, status, errorThrown) {\n            this._dequeueRequest();\n            this.trigger(REQUESTEND, { });\n            this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\n        },\n\n        _params: function(data) {\n            var that = this,\n                options =  extend({\n                    take: that.take(),\n                    skip: that.skip(),\n                    page: that.page(),\n                    pageSize: that.pageSize(),\n                    sort: that._sort,\n                    filter: that._filter,\n                    group: that._group,\n                    aggregate: that._aggregate\n                }, data);\n\n            if (!that.options.serverPaging) {\n                delete options.take;\n                delete options.skip;\n                delete options.page;\n                delete options.pageSize;\n            }\n\n            if (!that.options.serverGrouping) {\n                delete options.group;\n            } else if (that.reader.model && options.group) {\n                options.group = convertDescriptorsField(options.group, that.reader.model);\n            }\n\n            if (!that.options.serverFiltering) {\n                delete options.filter;\n            } else if (that.reader.model && options.filter) {\n               options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n            }\n\n            if (!that.options.serverSorting) {\n                delete options.sort;\n            } else if (that.reader.model && options.sort) {\n                options.sort = convertDescriptorsField(options.sort, that.reader.model);\n            }\n\n            if (!that.options.serverAggregates) {\n                delete options.aggregate;\n            } else if (that.reader.model && options.aggregate) {\n                options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n            }\n\n            return options;\n        },\n\n        _queueRequest: function(options, callback) {\n            var that = this;\n            if (!that._requestInProgress) {\n                that._requestInProgress = true;\n                that._pending = undefined;\n                callback();\n            } else {\n                that._pending = { callback: proxy(callback, that), options: options };\n            }\n        },\n\n        _dequeueRequest: function() {\n            var that = this;\n            that._requestInProgress = false;\n            if (that._pending) {\n                that._queueRequest(that._pending.options, that._pending.callback);\n            }\n        },\n\n        _handleCustomErrors: function(response) {\n            if (this.reader.errors) {\n                var errors = this.reader.errors(response);\n                if (errors) {\n                    this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _observe: function(data) {\n            var that = this,\n                model = that.reader.model,\n                wrap = false;\n\n            that._shouldDetachObservableParents = true;\n\n            if (model && data.length) {\n                wrap = !(data[0] instanceof model);\n            }\n\n            if (data instanceof ObservableArray) {\n                that._shouldDetachObservableParents = false;\n                if (wrap) {\n                    data.type = that.reader.model;\n                    data.wrapAll(data, data);\n                }\n            } else {\n                var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n                data = new arrayType(data, that.reader.model);\n                data.parent = function() { return that.parent(); };\n            }\n\n            if (that._isServerGrouped()) {\n                wrapGroupItems(data, model);\n            }\n\n            if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n                that._data.unbind(CHANGE, that._changeHandler);\n            } else {\n                that._changeHandler = proxy(that._change, that);\n            }\n\n            return data.bind(CHANGE, that._changeHandler);\n        },\n\n        _change: function(e) {\n            var that = this, idx, length, action = e ? e.action : \"\";\n\n            if (action === \"remove\") {\n                for (idx = 0, length = e.items.length; idx < length; idx++) {\n                    if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n                        that._destroyed.push(e.items[idx]);\n                    }\n                }\n            }\n\n            if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\n                that.sync();\n            } else {\n                var total = parseInt(that._total, 10);\n                if (!isNumber(that._total)) {\n                    total = parseInt(that._pristineTotal, 10);\n                }\n                if (action === \"add\") {\n                    total += e.items.length;\n                } else if (action === \"remove\") {\n                    total -= e.items.length;\n                } else if (action !== \"itemchange\" && action !== \"sync\" && !that.options.serverPaging) {\n                    total = that._pristineTotal;\n                } else if (action === \"sync\") {\n                    total = that._pristineTotal = parseInt(that._total, 10);\n                }\n\n                that._total = total;\n\n                that._process(that._data, e);\n            }\n        },\n\n        _calculateAggregates: function (data, options) {\n            options = options || {};\n\n            var query = new Query(data),\n                aggregates = options.aggregate,\n                filter = options.filter;\n\n            if (filter) {\n                query = query.filter(filter);\n            }\n\n            return query.aggregate(aggregates);\n        },\n\n        _process: function (data, e) {\n            var that = this,\n                options = {},\n                result;\n\n            if (that.options.serverPaging !== true) {\n                options.skip = that._skip;\n                options.take = that._take || that._pageSize;\n\n                if(options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n                    options.skip = (that._page - 1) * that._pageSize;\n                }\n            }\n\n            if (that.options.serverSorting !== true) {\n                options.sort = that._sort;\n            }\n\n            if (that.options.serverFiltering !== true) {\n                options.filter = that._filter;\n            }\n\n            if (that.options.serverGrouping !== true) {\n                options.group = that._group;\n            }\n\n            if (that.options.serverAggregates !== true) {\n                options.aggregate = that._aggregate;\n                that._aggregateResult = that._calculateAggregates(data, options);\n            }\n\n            result = that._queryProcess(data, options);\n\n            that.view(result.data);\n\n            if (result.total !== undefined && !that.options.serverFiltering) {\n                that._total = result.total;\n            }\n\n            e = e || {};\n\n            e.items = e.items || that._view;\n\n            that.trigger(CHANGE, e);\n        },\n\n        _queryProcess: function(data, options) {\n            return Query.process(data, options);\n        },\n\n        _mergeState: function(options) {\n            var that = this;\n\n            if (options !== undefined) {\n                that._pageSize = options.pageSize;\n                that._page = options.page;\n                that._sort = options.sort;\n                that._filter = options.filter;\n                that._group = options.group;\n                that._aggregate = options.aggregate;\n                that._skip = options.skip;\n                that._take = options.take;\n\n                if(that._skip === undefined) {\n                    that._skip = that.skip();\n                    options.skip = that.skip();\n                }\n\n                if(that._take === undefined && that._pageSize !== undefined) {\n                    that._take = that._pageSize;\n                    options.take = that._take;\n                }\n\n                if (options.sort) {\n                    that._sort = options.sort = normalizeSort(options.sort);\n                }\n\n                if (options.filter) {\n                    that._filter = options.filter = normalizeFilter(options.filter);\n                }\n\n                if (options.group) {\n                    that._group = options.group = normalizeGroup(options.group);\n                }\n                if (options.aggregate) {\n                    that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n                }\n            }\n            return options;\n        },\n\n        query: function(options) {\n            var result;\n            var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n\n            if (remote || ((this._data === undefined || this._data.length === 0) && !this._destroyed.length)) {\n                return this.read(this._mergeState(options));\n            }\n\n            var isPrevented = this.trigger(REQUESTSTART, { type: \"read\" });\n            if (!isPrevented) {\n                this.trigger(PROGRESS);\n\n                result = this._queryProcess(this._data, this._mergeState(options));\n\n                if (!this.options.serverFiltering) {\n                    if (result.total !== undefined) {\n                        this._total = result.total;\n                    } else {\n                        this._total = this._data.length;\n                    }\n                }\n\n                this._aggregateResult = this._calculateAggregates(this._data, options);\n                this.view(result.data);\n                this.trigger(REQUESTEND, { });\n                this.trigger(CHANGE, { items: result.data });\n            }\n\n            return $.Deferred().resolve(isPrevented).promise();\n        },\n\n        fetch: function(callback) {\n            var that = this;\n            var fn = function(isPrevented) {\n                if (isPrevented !== true && isFunction(callback)) {\n                    callback.call(that);\n                }\n            };\n\n            return this._query().then(fn);\n        },\n\n        _query: function(options) {\n            var that = this;\n\n            return that.query(extend({}, {\n                page: that.page(),\n                pageSize: that.pageSize(),\n                sort: that.sort(),\n                filter: that.filter(),\n                group: that.group(),\n                aggregate: that.aggregate()\n            }, options));\n        },\n\n        next: function(options) {\n            var that = this,\n                page = that.page(),\n                total = that.total();\n\n            options = options || {};\n\n            if (!page || (total && page + 1 > that.totalPages())) {\n                return;\n            }\n\n            that._skip = page * that.take();\n\n            page += 1;\n            options.page = page;\n\n            that._query(options);\n\n            return page;\n        },\n\n        prev: function(options) {\n            var that = this,\n                page = that.page();\n\n            options = options || {};\n\n            if (!page || page === 1) {\n                return;\n            }\n\n            that._skip = that._skip - that.take();\n\n            page -= 1;\n            options.page = page;\n\n            that._query(options);\n\n            return page;\n        },\n\n        page: function(val) {\n            var that = this,\n            skip;\n\n            if(val !== undefined) {\n                val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n                that._query({ page: val });\n                return;\n            }\n            skip = that.skip();\n\n            return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n        },\n\n        pageSize: function(val) {\n            var that = this;\n\n            if(val !== undefined) {\n                that._query({ pageSize: val, page: 1 });\n                return;\n            }\n\n            return that.take();\n        },\n\n        sort: function(val) {\n            var that = this;\n\n            if(val !== undefined) {\n                that._query({ sort: val });\n                return;\n            }\n\n            return that._sort;\n        },\n\n        filter: function(val) {\n            var that = this;\n\n            if (val === undefined) {\n                return that._filter;\n            }\n\n            that._query({ filter: val, page: 1 });\n        },\n\n        group: function(val) {\n            var that = this;\n\n            if(val !== undefined) {\n                that._query({ group: val });\n                return;\n            }\n\n            return that._group;\n        },\n\n        total: function() {\n            return parseInt(this._total || 0, 10);\n        },\n\n        aggregate: function(val) {\n            var that = this;\n\n            if(val !== undefined) {\n                that._query({ aggregate: val });\n                return;\n            }\n\n            return that._aggregate;\n        },\n\n        aggregates: function() {\n            return this._aggregateResult;\n        },\n\n        totalPages: function() {\n            var that = this,\n            pageSize = that.pageSize() || that.total();\n\n            return math.ceil((that.total() || 0) / pageSize);\n        },\n\n        inRange: function(skip, take) {\n            var that = this,\n                end = math.min(skip + take, that.total());\n\n            if (!that.options.serverPaging && that._data.length > 0) {\n                return true;\n            }\n\n            return that._findRange(skip, end).length > 0;\n        },\n\n        lastRange: function() {\n            var ranges = this._ranges;\n            return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\n        },\n\n        firstItemUid: function() {\n            var ranges = this._ranges;\n            return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n        },\n\n        enableRequestsInProgress: function() {\n            this._skipRequestsInProgress = false;\n        },\n\n        range: function(skip, take) {\n            skip = math.min(skip || 0, this.total());\n\n            var that = this,\n                pageSkip = math.max(math.floor(skip / take), 0) * take,\n                size = math.min(pageSkip + take, that.total()),\n                data;\n\n            that._skipRequestsInProgress = false;\n\n            data = that._findRange(skip, math.min(skip + take, that.total()));\n\n            if (data.length) {\n\n                that._skipRequestsInProgress = true;\n                that._pending = undefined;\n\n                that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n\n                that._take = take;\n\n                var paging = that.options.serverPaging;\n                var sorting = that.options.serverSorting;\n                var filtering = that.options.serverFiltering;\n                var aggregates = that.options.serverAggregates;\n                try {\n                    that.options.serverPaging = true;\n                    if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n                        that.options.serverSorting = true;\n                    }\n                    that.options.serverFiltering = true;\n                    that.options.serverPaging = true;\n                    that.options.serverAggregates = true;\n\n                    if (paging) {\n                        that._detachObservableParents();\n                        that._data = data = that._observe(data);\n                    }\n                    that._process(data);\n                } finally {\n                    that.options.serverPaging = paging;\n                    that.options.serverSorting = sorting;\n                    that.options.serverFiltering = filtering;\n                    that.options.serverAggregates = aggregates;\n                }\n\n                return;\n            }\n\n            if (take !== undefined) {\n                if (!that._rangeExists(pageSkip, size)) {\n                    that.prefetch(pageSkip, take, function() {\n                        if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n                            that.prefetch(size, take, function() {\n                                that.range(skip, take);\n                            });\n                        } else {\n                            that.range(skip, take);\n                        }\n                    });\n                } else if (pageSkip < skip) {\n                    that.prefetch(size, take, function() {\n                        that.range(skip, take);\n                    });\n                }\n            }\n        },\n\n        _findRange: function(start, end) {\n            var that = this,\n                ranges = that._ranges,\n                range,\n                data = [],\n                skipIdx,\n                takeIdx,\n                startIndex,\n                endIndex,\n                rangeData,\n                rangeEnd,\n                processed,\n                options = that.options,\n                remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\n                flatData,\n                count,\n                length;\n\n            for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n                range = ranges[skipIdx];\n                if (start >= range.start && start <= range.end) {\n                    count = 0;\n\n                    for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n                        range = ranges[takeIdx];\n                        flatData = that._flatData(range.data, true);\n\n                        if (flatData.length && start + count >= range.start) {\n                            rangeData = range.data;\n                            rangeEnd = range.end;\n\n                            if (!remote) {\n                                var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n                                processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\n                                flatData = rangeData = processed.data;\n\n                                if (processed.total !== undefined) {\n                                    rangeEnd = processed.total;\n                                }\n                            }\n\n                            startIndex = 0;\n                            if (start + count > range.start) {\n                                startIndex = (start + count) - range.start;\n                            }\n                            endIndex = flatData.length;\n                            if (rangeEnd > end) {\n                                endIndex = endIndex - (rangeEnd - end);\n                            }\n                            count += endIndex - startIndex;\n                            data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n\n                            if (end <= range.end && count == end - start) {\n                                return data;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n            return [];\n        },\n\n        _mergeGroups: function(data, range, skip, take) {\n            if (this._isServerGrouped()) {\n                var temp = range.toJSON(),\n                    prevGroup;\n\n                if (data.length) {\n                    prevGroup = data[data.length - 1];\n                }\n\n                mergeGroups(prevGroup, temp, skip, take);\n\n                return data.concat(temp);\n            }\n            return data.concat(range.slice(skip, take));\n        },\n\n        skip: function() {\n            var that = this;\n\n            if (that._skip === undefined) {\n                return (that._page !== undefined ? (that._page  - 1) * (that.take() || 1) : undefined);\n            }\n            return that._skip;\n        },\n\n        take: function() {\n            return this._take || this._pageSize;\n        },\n\n        _prefetchSuccessHandler: function (skip, size, callback) {\n            var that = this;\n\n            return function(data) {\n                var found = false,\n                    range = { start: skip, end: size, data: [] },\n                    idx,\n                    length,\n                    temp;\n\n                that._dequeueRequest();\n\n                that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n                data = that.reader.parse(data);\n\n                temp = that._readData(data);\n\n                if (temp.length) {\n                    for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n                        if (that._ranges[idx].start === skip) {\n                            found = true;\n                            range = that._ranges[idx];\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        that._ranges.push(range);\n                    }\n                }\n\n                range.data = that._observe(temp);\n                range.end = range.start + that._flatData(range.data, true).length;\n                that._ranges.sort( function(x, y) { return x.start - y.start; } );\n                that._total = that.reader.total(data);\n\n                if (!that._skipRequestsInProgress) {\n                    if (callback && temp.length) {\n                        callback();\n                    } else {\n                        that.trigger(CHANGE, {});\n                    }\n                }\n            };\n        },\n\n        prefetch: function(skip, take, callback) {\n            var that = this,\n                size = math.min(skip + take, that.total()),\n                options = {\n                    take: take,\n                    skip: skip,\n                    page: skip / take + 1,\n                    pageSize: take,\n                    sort: that._sort,\n                    filter: that._filter,\n                    group: that._group,\n                    aggregate: that._aggregate\n                };\n\n            if (!that._rangeExists(skip, size)) {\n                clearTimeout(that._timeout);\n\n                that._timeout = setTimeout(function() {\n                    that._queueRequest(options, function() {\n                        if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n                            that.transport.read({\n                                data: that._params(options),\n                                success: that._prefetchSuccessHandler(skip, size, callback)\n                            });\n                        } else {\n                            that._dequeueRequest();\n                        }\n                    });\n                }, 100);\n            } else if (callback) {\n                callback();\n            }\n        },\n\n        _rangeExists: function(start, end) {\n            var that = this,\n                ranges = that._ranges,\n                idx,\n                length;\n\n            for (idx = 0, length = ranges.length; idx < length; idx++) {\n                if (ranges[idx].start <= start && ranges[idx].end >= end) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _removeModelFromRanges: function(model) {\n            var result,\n                found,\n                range;\n\n            for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n                range = this._ranges[idx];\n\n                this._eachItem(range.data, function(items) {\n                    result = removeModel(items, model);\n                    if (result) {\n                        found = true;\n                    }\n                });\n\n                if (found) {\n                    break;\n                }\n            }\n        },\n\n        _updateRangesLength: function() {\n            var startOffset = 0,\n                range,\n                rangeLength;\n\n            for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n                range = this._ranges[idx];\n                range.start = range.start - startOffset;\n\n                rangeLength = this._flatData(range.data, true).length;\n                startOffset = range.end - rangeLength;\n                range.end = range.start + rangeLength;\n            }\n        }\n    });\n\n    var Transport = {};\n\n    Transport.create = function(options, data) {\n        var transport,\n            transportOptions = options.transport;\n\n        if (transportOptions) {\n            transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n\n            if (options.type) {\n                kendo.data.transports = kendo.data.transports || {};\n                kendo.data.schemas = kendo.data.schemas || {};\n\n                if (kendo.data.transports[options.type] && !isPlainObject(kendo.data.transports[options.type])) {\n                    transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n                } else {\n                    transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n                }\n\n                options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n            }\n\n            if (!transport) {\n                transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n            }\n        } else {\n            transport = new LocalTransport({ data: options.data || [] });\n        }\n        return transport;\n    };\n\n    DataSource.create = function(options) {\n        if (isArray(options) || options instanceof ObservableArray) {\n           options = { data: options };\n        }\n\n        var dataSource = options || {},\n            data = dataSource.data,\n            fields = dataSource.fields,\n            table = dataSource.table,\n            select = dataSource.select,\n            idx,\n            length,\n            model = {},\n            field;\n\n        if (!data && fields && !dataSource.transport) {\n            if (table) {\n                data = inferTable(table, fields);\n            } else if (select) {\n                data = inferSelect(select, fields);\n            }\n        }\n\n        if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n            for (idx = 0, length = fields.length; idx < length; idx++) {\n                field = fields[idx];\n                if (field.type) {\n                    model[field.field] = field;\n                }\n            }\n\n            if (!isEmptyObject(model)) {\n                dataSource.schema = extend(true, dataSource.schema, { model:  { fields: model } });\n            }\n        }\n\n        dataSource.data = data;\n        table = null;\n        dataSource.table = null;\n\n        return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n    };\n\n    function inferSelect(select, fields) {\n        var options = $(select)[0].children,\n            idx,\n            length,\n            data = [],\n            record,\n            firstField = fields[0],\n            secondField = fields[1],\n            value,\n            option;\n\n        for (idx = 0, length = options.length; idx < length; idx++) {\n            record = {};\n            option = options[idx];\n\n            if (option.disabled) {\n                continue;\n            }\n\n            record[firstField.field] = option.text;\n\n            value = option.attributes.value;\n\n            if (value && value.specified) {\n                value = option.value;\n            } else {\n                value = option.text;\n            }\n\n            record[secondField.field] = value;\n\n            data.push(record);\n        }\n\n        return data;\n    }\n\n    function inferTable(table, fields) {\n        var tbody = $(table)[0].tBodies[0],\n        rows = tbody ? tbody.rows : [],\n        idx,\n        length,\n        fieldIndex,\n        fieldCount = fields.length,\n        data = [],\n        cells,\n        record,\n        cell,\n        empty;\n\n        for (idx = 0, length = rows.length; idx < length; idx++) {\n            record = {};\n            empty = true;\n            cells = rows[idx].cells;\n\n            for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n                cell = cells[fieldIndex];\n                if(cell.nodeName.toLowerCase() !== \"th\") {\n                    empty = false;\n                    record[fields[fieldIndex].field] = cell.innerHTML;\n                }\n            }\n            if(!empty) {\n                data.push(record);\n            }\n        }\n\n        return data;\n    }\n\n    var Node = Model.define({\n        idField: \"id\",\n\n        init: function(value) {\n            var that = this,\n                hasChildren = that.hasChildren || value && value.hasChildren,\n                childrenField = \"items\",\n                childrenOptions = {};\n\n            kendo.data.Model.fn.init.call(that, value);\n\n            if (typeof that.children === STRING) {\n                childrenField = that.children;\n            }\n\n            childrenOptions = {\n                schema: {\n                    data: childrenField,\n                    model: {\n                        hasChildren: hasChildren,\n                        id: that.idField,\n                        fields: that.fields\n                    }\n                }\n            };\n\n            if (typeof that.children !== STRING) {\n                extend(childrenOptions, that.children);\n            }\n\n            childrenOptions.data = value;\n\n            if (!hasChildren) {\n                hasChildren = childrenOptions.schema.data;\n            }\n\n            if (typeof hasChildren === STRING) {\n                hasChildren = kendo.getter(hasChildren);\n            }\n\n            if (isFunction(hasChildren)) {\n                that.hasChildren = !!hasChildren.call(that, that);\n            }\n\n            that._childrenOptions = childrenOptions;\n\n            if (that.hasChildren) {\n                that._initChildren();\n            }\n\n            that._loaded = !!(value && (value[childrenField] || value._loaded));\n        },\n\n        _initChildren: function() {\n            var that = this;\n            var children, transport, parameterMap;\n\n            if (!(that.children instanceof HierarchicalDataSource)) {\n                children = that.children = new HierarchicalDataSource(that._childrenOptions);\n\n                transport = children.transport;\n                parameterMap = transport.parameterMap;\n\n                transport.parameterMap = function(data, type) {\n                    data[that.idField || \"id\"] = that.id;\n\n                    if (parameterMap) {\n                        data = parameterMap(data, type);\n                    }\n\n                    return data;\n                };\n\n                children.parent = function(){\n                    return that;\n                };\n\n                children.bind(CHANGE, function(e){\n                    e.node = e.node || that;\n                    that.trigger(CHANGE, e);\n                });\n\n                children.bind(ERROR, function(e){\n                    var collection = that.parent();\n\n                    if (collection) {\n                        e.node = e.node || that;\n                        collection.trigger(ERROR, e);\n                    }\n                });\n\n                that._updateChildrenField();\n            }\n        },\n\n        append: function(model) {\n            this._initChildren();\n            this.loaded(true);\n            this.children.add(model);\n        },\n\n        hasChildren: false,\n\n        level: function() {\n            var parentNode = this.parentNode(),\n                level = 0;\n\n            while (parentNode && parentNode.parentNode) {\n                level++;\n                parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n            }\n\n            return level;\n        },\n\n        _updateChildrenField: function() {\n            var fieldName = this._childrenOptions.schema.data;\n\n            this[fieldName || \"items\"] = this.children.data();\n        },\n\n        _childrenLoaded: function() {\n            this._loaded = true;\n\n            this._updateChildrenField();\n        },\n\n        load: function() {\n            var options = {};\n            var method = \"_query\";\n            var children, promise;\n\n            if (this.hasChildren) {\n                this._initChildren();\n\n                children = this.children;\n\n                options[this.idField || \"id\"] = this.id;\n\n                if (!this._loaded) {\n                    children._data = undefined;\n                    method = \"read\";\n                }\n\n                children.one(CHANGE, proxy(this._childrenLoaded, this));\n\n                promise = children[method](options);\n            } else {\n                this.loaded(true);\n            }\n\n            return promise || $.Deferred().resolve().promise();\n        },\n\n        parentNode: function() {\n            var array = this.parent();\n\n            return array.parent();\n        },\n\n        loaded: function(value) {\n            if (value !== undefined) {\n                this._loaded = value;\n            } else {\n                return this._loaded;\n            }\n        },\n\n        shouldSerialize: function(field) {\n            return Model.fn.shouldSerialize.call(this, field) &&\n                    field !== \"children\" &&\n                    field !== \"_loaded\" &&\n                    field !== \"hasChildren\" &&\n                    field !== \"_childrenOptions\";\n        }\n    });\n\n    function dataMethod(name) {\n        return function() {\n            var data = this._data,\n                result = DataSource.fn[name].apply(this, slice.call(arguments));\n\n            if (this._data != data) {\n                this._attachBubbleHandlers();\n            }\n\n            return result;\n        };\n    }\n\n    var HierarchicalDataSource = DataSource.extend({\n        init: function(options) {\n            var node = Node.define({\n                children: options\n            });\n\n            DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\n\n            this._attachBubbleHandlers();\n        },\n\n        _attachBubbleHandlers: function() {\n            var that = this;\n\n            that._data.bind(ERROR, function(e) {\n                that.trigger(ERROR, e);\n            });\n        },\n\n        remove: function(node){\n            var parentNode = node.parentNode(),\n                dataSource = this,\n                result;\n\n            if (parentNode && parentNode._initChildren) {\n                dataSource = parentNode.children;\n            }\n\n            result = DataSource.fn.remove.call(dataSource, node);\n\n            if (parentNode && !dataSource.data().length) {\n                parentNode.hasChildren = false;\n            }\n\n            return result;\n        },\n\n        success: dataMethod(\"success\"),\n\n        data: dataMethod(\"data\"),\n\n        insert: function(index, model) {\n            var parentNode = this.parent();\n\n            if (parentNode && parentNode._initChildren) {\n                parentNode.hasChildren = true;\n                parentNode._initChildren();\n            }\n\n            return DataSource.fn.insert.call(this, index, model);\n        },\n\n        _find: function(method, value) {\n            var idx, length, node, data, children;\n\n            node = DataSource.fn[method].call(this, value);\n\n            if (node) {\n                return node;\n            }\n\n            data = this._flatData(this._data);\n\n            if (!data) {\n                return;\n            }\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                children = data[idx].children;\n\n                if (!(children instanceof HierarchicalDataSource)) {\n                    continue;\n                }\n\n                node = children[method](value);\n\n                if (node) {\n                    return node;\n                }\n            }\n        },\n\n        get: function(id) {\n            return this._find(\"get\", id);\n        },\n\n        getByUid: function(uid) {\n            return this._find(\"getByUid\", uid);\n        }\n    });\n\n    function inferList(list, fields) {\n        var items = $(list).children(),\n            idx,\n            length,\n            data = [],\n            record,\n            textField = fields[0].field,\n            urlField = fields[1] && fields[1].field,\n            spriteCssClassField = fields[2] && fields[2].field,\n            imageUrlField = fields[3] && fields[3].field,\n            item,\n            id,\n            textChild,\n            className,\n            children;\n\n        function elements(collection, tagName) {\n            return collection.filter(tagName).add(collection.find(tagName));\n        }\n\n        for (idx = 0, length = items.length; idx < length; idx++) {\n            record = { _loaded: true };\n            item = items.eq(idx);\n\n            textChild = item[0].firstChild;\n            children = item.children();\n            list = children.filter(\"ul\");\n            children = children.filter(\":not(ul)\");\n\n            id = item.attr(\"data-id\");\n\n            if (id) {\n                record.id = id;\n            }\n\n            if (textChild) {\n                record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n            }\n\n            if (urlField) {\n                record[urlField] = elements(children, \"a\").attr(\"href\");\n            }\n\n            if (imageUrlField) {\n                record[imageUrlField] = elements(children, \"img\").attr(\"src\");\n            }\n\n            if (spriteCssClassField) {\n                className = elements(children, \".k-sprite\").prop(\"className\");\n                record[spriteCssClassField] = className && $.trim(className.replace(\"k-sprite\", \"\"));\n            }\n\n            if (list.length) {\n                record.items = inferList(list.eq(0), fields);\n            }\n\n            if (item.attr(\"data-hasChildren\") == \"true\") {\n                record.hasChildren = true;\n            }\n\n            data.push(record);\n        }\n\n        return data;\n    }\n\n    HierarchicalDataSource.create = function(options) {\n        options = options && options.push ? { data: options } : options;\n\n        var dataSource = options || {},\n            data = dataSource.data,\n            fields = dataSource.fields,\n            list = dataSource.list;\n\n        if (data && data._dataSource) {\n            return data._dataSource;\n        }\n\n        if (!data && fields && !dataSource.transport) {\n            if (list) {\n                data = inferList(list, fields);\n            }\n        }\n\n        dataSource.data = data;\n\n        return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n    };\n\n    var Buffer = kendo.Observable.extend({\n        init: function(dataSource, viewSize, disablePrefetch) {\n            kendo.Observable.fn.init.call(this);\n\n            this._prefetching = false;\n            this.dataSource = dataSource;\n            this.prefetch = !disablePrefetch;\n\n            var buffer = this;\n\n            dataSource.bind(\"change\", function() {\n                buffer._change();\n            });\n\n            dataSource.bind(\"reset\", function() {\n                buffer._reset();\n            });\n\n            this._syncWithDataSource();\n\n            this.setViewSize(viewSize);\n        },\n\n        setViewSize: function(viewSize) {\n            this.viewSize = viewSize;\n            this._recalculate();\n        },\n\n        at: function(index)  {\n            var pageSize = this.pageSize,\n                item,\n                itemPresent = true,\n                changeTo;\n\n            if (index >= this.total()) {\n                this.trigger(\"endreached\", {index: index });\n                return null;\n            }\n\n            if (!this.useRanges) {\n               return this.dataSource.view()[index];\n            }\n            if (this.useRanges) {\n                // out of range request\n                if (index < this.dataOffset || index >= this.skip + pageSize) {\n                    itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n                }\n\n                // prefetch\n                if (index === this.prefetchThreshold) {\n                    this._prefetch();\n                }\n\n                // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\n                if (index === this.midPageThreshold) {\n                    this.range(this.nextMidRange, true);\n                }\n                // next range jump\n                else if (index === this.nextPageThreshold) {\n                    this.range(this.nextFullRange);\n                }\n                // pull-back\n                else if (index === this.pullBackThreshold) {\n                    if (this.offset === this.skip) { // from full range to mid range\n                        this.range(this.previousMidRange);\n                    } else { // from mid range to full range\n                        this.range(this.previousFullRange);\n                    }\n                }\n\n                if (itemPresent) {\n                    return this.dataSource.at(index - this.dataOffset);\n                } else {\n                    this.trigger(\"endreached\", { index: index });\n                    return null;\n                }\n            }\n        },\n\n        indexOf: function(item) {\n            return this.dataSource.data().indexOf(item) + this.dataOffset;\n        },\n\n        total: function() {\n            return parseInt(this.dataSource.total(), 10);\n        },\n\n        next: function() {\n            var buffer = this,\n                pageSize = buffer.pageSize,\n                offset = buffer.skip - buffer.viewSize + pageSize,\n                pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n\n            this.offset = offset;\n            this.dataSource.prefetch(pageSkip, pageSize, function() {\n                buffer._goToRange(offset, true);\n            });\n        },\n\n        range: function(offset, nextRange) {\n            if (this.offset === offset) {\n                return true;\n            }\n\n            var buffer = this,\n                pageSize = this.pageSize,\n                pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\n                dataSource = this.dataSource;\n\n            if (nextRange) {\n                pageSkip += pageSize;\n            }\n\n            if (dataSource.inRange(offset, pageSize)) {\n                this.offset = offset;\n                this._recalculate();\n                this._goToRange(offset);\n                return true;\n            } else if (this.prefetch) {\n                dataSource.prefetch(pageSkip, pageSize, function() {\n                    buffer.offset = offset;\n                    buffer._recalculate();\n                    buffer._goToRange(offset, true);\n                });\n                return false;\n            }\n\n            return true;\n        },\n\n        syncDataSource: function() {\n            var offset = this.offset;\n            this.offset = null;\n            this.range(offset);\n        },\n\n        destroy: function() {\n            this.unbind();\n        },\n\n        _prefetch: function() {\n            var buffer = this,\n                pageSize = this.pageSize,\n                prefetchOffset = this.skip + pageSize,\n                dataSource = this.dataSource;\n\n            if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n                this._prefetching = true;\n                this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\n\n                dataSource.prefetch(prefetchOffset, pageSize, function() {\n                    buffer._prefetching = false;\n                    buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\n                });\n            }\n        },\n\n        _goToRange: function(offset, expanding) {\n            if (this.offset !== offset) {\n                return;\n            }\n\n            this.dataOffset = offset;\n            this._expanding = expanding;\n            this.dataSource.range(offset, this.pageSize);\n            this.dataSource.enableRequestsInProgress();\n        },\n\n        _reset: function() {\n            this._syncPending = true;\n        },\n\n        _change: function() {\n            var dataSource = this.dataSource;\n\n            this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n\n            if (this._syncPending) {\n                this._syncWithDataSource();\n                this._recalculate();\n                this._syncPending = false;\n                this.trigger(\"reset\", { offset: this.offset });\n            }\n\n            this.trigger(\"resize\");\n\n            if (this._expanding) {\n                this.trigger(\"expand\");\n            }\n\n            delete this._expanding;\n        },\n\n        _syncWithDataSource: function() {\n            var dataSource = this.dataSource;\n\n            this._firstItemUid = dataSource.firstItemUid();\n            this.dataOffset = this.offset = dataSource.skip() || 0;\n            this.pageSize = dataSource.pageSize();\n            this.useRanges = dataSource.options.serverPaging;\n        },\n\n        _recalculate: function() {\n            var pageSize = this.pageSize,\n                offset = this.offset,\n                viewSize = this.viewSize,\n                skip = Math.ceil(offset / pageSize) * pageSize;\n\n            this.skip = skip;\n            this.midPageThreshold = skip + pageSize - 1;\n            this.nextPageThreshold = skip + viewSize - 1;\n            this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n            this.pullBackThreshold = this.offset - 1;\n\n            this.nextMidRange = skip + pageSize - viewSize;\n            this.nextFullRange = skip;\n            this.previousMidRange = offset - viewSize;\n            this.previousFullRange = skip - pageSize;\n        }\n    });\n\n    var BatchBuffer = kendo.Observable.extend({\n        init: function(dataSource, batchSize) {\n            var batchBuffer = this;\n\n            kendo.Observable.fn.init.call(batchBuffer);\n\n            this.dataSource = dataSource;\n            this.batchSize = batchSize;\n            this._total = 0;\n\n            this.buffer = new Buffer(dataSource, batchSize * 3);\n\n            this.buffer.bind({\n                \"endreached\": function (e) {\n                    batchBuffer.trigger(\"endreached\", { index: e.index });\n                },\n                \"prefetching\": function (e) {\n                    batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\n                },\n                \"prefetched\": function (e) {\n                    batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\n                },\n                \"reset\": function () {\n                    batchBuffer._total = 0;\n                    batchBuffer.trigger(\"reset\");\n                },\n                \"resize\": function () {\n                    batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n                    batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\n                }\n            });\n        },\n\n        syncDataSource: function() {\n            this.buffer.syncDataSource();\n        },\n\n        at: function(index) {\n            var buffer = this.buffer,\n                skip = index * this.batchSize,\n                take = this.batchSize,\n                view = [],\n                item;\n\n            if (buffer.offset > skip) {\n                buffer.at(buffer.offset - 1);\n            }\n\n            for (var i = 0; i < take; i++) {\n                item = buffer.at(skip + i);\n\n                if (item === undefined) {\n                    break;\n                }\n\n                view.push(item);\n            }\n\n            return view;\n        },\n\n        total: function() {\n            return this._total;\n        },\n\n        destroy: function() {\n            this.buffer.destroy();\n            this.unbind();\n        }\n    });\n\n    extend(true, kendo.data, {\n        readers: {\n            json: DataReader\n        },\n        Query: Query,\n        DataSource: DataSource,\n        HierarchicalDataSource: HierarchicalDataSource,\n        Node: Node,\n        ObservableObject: ObservableObject,\n        ObservableArray: ObservableArray,\n        LazyObservableArray: LazyObservableArray,\n        LocalTransport: LocalTransport,\n        RemoteTransport: RemoteTransport,\n        Cache: Cache,\n        DataReader: DataReader,\n        Model: Model,\n        Buffer: Buffer,\n        BatchBuffer: BatchBuffer\n    });\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true */\n(function ($, undefined) {\n    var kendo = window.kendo,\n        browser = kendo.support.browser,\n        Observable = kendo.Observable,\n        ObservableObject = kendo.data.ObservableObject,\n        ObservableArray = kendo.data.ObservableArray,\n        toString = {}.toString,\n        binders = {},\n        slice = Array.prototype.slice,\n        Class = kendo.Class,\n        innerText,\n        proxy = $.proxy,\n        VALUE = \"value\",\n        SOURCE = \"source\",\n        EVENTS = \"events\",\n        CHECKED = \"checked\",\n        deleteExpando = true,\n        CHANGE = \"change\";\n\n    (function() {\n        var a = document.createElement(\"a\");\n\n        if (a.innerText !== undefined) {\n            innerText = \"innerText\";\n        } else if (a.textContent !== undefined) {\n            innerText = \"textContent\";\n        }\n\n        try {\n            delete a.test;\n        } catch(e) {\n            deleteExpando = false;\n        }\n    })();\n\n    var Binding = Observable.extend( {\n        init: function(parents, path) {\n            var that = this;\n\n            Observable.fn.init.call(that);\n\n            that.source = parents[0];\n            that.parents = parents;\n            that.path = path;\n            that.dependencies = {};\n            that.dependencies[path] = true;\n            that.observable = that.source instanceof Observable;\n\n            that._access = function(e) {\n                that.dependencies[e.field] = true;\n            };\n\n            if (that.observable) {\n                that._change = function(e) {\n                    that.change(e);\n                };\n\n                that.source.bind(CHANGE, that._change);\n            }\n        },\n\n        _parents: function() {\n            var parents = this.parents;\n            var value = this.get();\n\n            if (value && typeof value.parent == \"function\") {\n                var parent = value.parent();\n\n                if ($.inArray(parent, parents) < 0) {\n                    parents = [parent].concat(parents);\n                }\n            }\n\n            return parents;\n        },\n\n        change: function(e) {\n            var dependency,\n                ch,\n                field = e.field,\n                that = this;\n\n            if (that.path === \"this\") {\n                that.trigger(CHANGE, e);\n            } else {\n                for (dependency in that.dependencies) {\n                    if (dependency.indexOf(field) === 0) {\n                       ch = dependency.charAt(field.length);\n\n                       if (!ch || ch === \".\" || ch === \"[\") {\n                            that.trigger(CHANGE, e);\n                            break;\n                       }\n                    }\n                }\n            }\n        },\n\n        start: function(source) {\n            source.bind(\"get\", this._access);\n        },\n\n        stop: function(source) {\n            source.unbind(\"get\", this._access);\n        },\n\n        get: function() {\n\n            var that = this,\n                source = that.source,\n                index = 0,\n                path = that.path,\n                result = source;\n\n            if (!that.observable) {\n                return result;\n            }\n\n            that.start(that.source);\n\n            result = source.get(path);\n\n            // Traverse the observable hierarchy if the binding is not resolved at the current level.\n            while (result === undefined && source) {\n\n                source = that.parents[++index];\n\n                if (source instanceof ObservableObject) {\n                    result = source.get(path);\n                }\n            }\n\n            // second pass try to get the parent from the object hierarchy\n            if (result === undefined) {\n                source = that.source; //get the initial source\n\n                while (result === undefined && source) {\n                    source = source.parent();\n\n                    if (source instanceof ObservableObject) {\n                        result = source.get(path);\n                    }\n                }\n            }\n\n            // If the result is a function - invoke it\n            if (typeof result === \"function\") {\n                index = path.lastIndexOf(\".\");\n\n                // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n                if (index > 0) {\n                    source = source.get(path.substring(0, index));\n                }\n\n                // Invoke the function\n                that.start(source);\n\n                if (source !== that.source) {\n                    result = result.call(source, that.source);\n                } else {\n                    result = result.call(source);\n                }\n\n                that.stop(source);\n            }\n\n            // If the binding is resolved by a parent object\n            if (source && source !== that.source) {\n\n                that.currentSource = source; // save parent object\n\n                // Listen for changes in the parent object\n                source.unbind(CHANGE, that._change)\n                      .bind(CHANGE, that._change);\n            }\n\n            that.stop(that.source);\n\n            return result;\n        },\n\n        set: function(value) {\n            var source = this.currentSource || this.source;\n\n            var field = kendo.getter(this.path)(source);\n\n            if (typeof field === \"function\") {\n                if (source !== this.source) {\n                    field.call(source, this.source, value);\n                } else {\n                    field.call(source, value);\n                }\n            } else {\n                source.set(this.path, value);\n            }\n        },\n\n        destroy: function() {\n            if (this.observable) {\n                this.source.unbind(CHANGE, this._change);\n                if(this.currentSource) {\n                    this.currentSource.unbind(CHANGE, this._change);\n                }\n            }\n\n            this.unbind();\n        }\n    });\n\n    var EventBinding = Binding.extend( {\n        get: function() {\n            var source = this.source,\n                path = this.path,\n                index = 0,\n                handler;\n\n            handler = source.get(path);\n\n            while (!handler && source) {\n                source = this.parents[++index];\n\n                if (source instanceof ObservableObject) {\n                    handler = source.get(path);\n                }\n            }\n\n            return proxy(handler, source);\n        }\n    });\n\n    var TemplateBinding = Binding.extend( {\n        init: function(source, path, template) {\n            var that = this;\n\n            Binding.fn.init.call(that, source, path);\n\n            that.template = template;\n        },\n\n        render: function(value) {\n            var html;\n\n            this.start(this.source);\n\n            html = kendo.render(this.template, value);\n\n            this.stop(this.source);\n\n            return html;\n        }\n    });\n\n    var Binder = Class.extend({\n        init: function(element, bindings, options) {\n            this.element = element;\n            this.bindings = bindings;\n            this.options = options;\n        },\n\n        bind: function(binding, attribute) {\n            var that = this;\n\n            binding = attribute ? binding[attribute] : binding;\n\n            binding.bind(CHANGE, function(e) {\n                that.refresh(attribute || e);\n            });\n\n            that.refresh(attribute);\n        },\n\n        destroy: function() {\n        }\n    });\n\n    binders.attr = Binder.extend({\n        refresh: function(key) {\n            this.element.setAttribute(key, this.bindings.attr[key].get());\n        }\n    });\n\n    binders.style = Binder.extend({\n        refresh: function(key) {\n            this.element.style[key] = this.bindings.style[key].get() || \"\";\n        }\n    });\n\n    binders.enabled = Binder.extend({\n        refresh: function() {\n            if (this.bindings.enabled.get()) {\n                this.element.removeAttribute(\"disabled\");\n            } else {\n                this.element.setAttribute(\"disabled\", \"disabled\");\n            }\n        }\n    });\n\n    binders.readonly = Binder.extend({\n       refresh: function() {\n            if (this.bindings.readonly.get()) {\n                this.element.setAttribute(\"readonly\", \"readonly\");\n            } else {\n                this.element.removeAttribute(\"readonly\");\n            }\n       }\n    });\n\n    binders.disabled = Binder.extend({\n        refresh: function() {\n            if (this.bindings.disabled.get()) {\n                this.element.setAttribute(\"disabled\", \"disabled\");\n            } else {\n                this.element.removeAttribute(\"disabled\");\n            }\n        }\n    });\n\n    binders.events = Binder.extend({\n        init: function(element, bindings, options) {\n            Binder.fn.init.call(this, element, bindings, options);\n            this.handlers = {};\n        },\n\n        refresh: function(key) {\n            var element = $(this.element),\n                binding = this.bindings.events[key],\n                handler = this.handlers[key];\n\n            if (handler) {\n                element.off(key, handler);\n            }\n\n            handler = this.handlers[key] = binding.get();\n\n            element.on(key, binding.source, handler);\n        },\n\n        destroy: function() {\n            var element = $(this.element),\n                handler;\n\n            for (handler in this.handlers) {\n                element.off(handler, this.handlers[handler]);\n            }\n        }\n    });\n\n    binders.text = Binder.extend({\n        refresh: function() {\n            var text = this.bindings.text.get();\n\n            if (text == null) {\n                text = \"\";\n            }\n\n            this.element[innerText] = text;\n        }\n    });\n\n    binders.visible = Binder.extend({\n        refresh: function() {\n            if (this.bindings.visible.get()) {\n                this.element.style.display = \"\";\n            } else {\n                this.element.style.display = \"none\";\n            }\n        }\n    });\n\n    binders.invisible = Binder.extend({\n        refresh: function() {\n            if (!this.bindings.invisible.get()) {\n                this.element.style.display = \"\";\n            } else {\n                this.element.style.display = \"none\";\n            }\n        }\n    });\n\n    binders.html = Binder.extend({\n        refresh: function() {\n            this.element.innerHTML = this.bindings.html.get();\n        }\n    });\n\n    binders.value = Binder.extend({\n        init: function(element, bindings, options) {\n            Binder.fn.init.call(this, element, bindings, options);\n\n            this._change = proxy(this.change, this);\n            this.eventName = options.valueUpdate || CHANGE;\n\n            $(this.element).on(this.eventName, this._change);\n\n            this._initChange = false;\n        },\n\n        change: function() {\n            this._initChange = this.eventName != CHANGE;\n\n            var value = this.element.value;\n\n            var type = this.element.type;\n\n            if (type == \"date\") {\n                value = kendo.parseDate(value, \"yyyy-MM-dd\");\n            } else if (type == \"datetime-local\") {\n                value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\n            } else if (type == \"number\") {\n                value = kendo.parseFloat(value);\n            }\n\n            this.bindings[VALUE].set(value);\n\n            this._initChange = false;\n        },\n\n        refresh: function() {\n            if (!this._initChange) {\n                var value = this.bindings[VALUE].get();\n\n                if (value == null) {\n                    value = \"\";\n                }\n\n                var type = this.element.type;\n\n                if (type == \"date\") {\n                    value = kendo.toString(value, \"yyyy-MM-dd\");\n                } else if (type == \"datetime-local\") {\n                    value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n                }\n\n                this.element.value = value;\n            }\n\n            this._initChange = false;\n        },\n\n        destroy: function() {\n            $(this.element).off(this.eventName, this._change);\n        }\n    });\n\n    binders.source = Binder.extend({\n        init: function(element, bindings, options) {\n            Binder.fn.init.call(this, element, bindings, options);\n\n            var source = this.bindings.source.get();\n\n            if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n                source.fetch();\n            }\n        },\n\n        refresh: function(e) {\n            var that = this,\n                source = that.bindings.source.get();\n\n            if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n                e = e || {};\n\n                if (e.action == \"add\") {\n                    that.add(e.index, e.items);\n                } else if (e.action == \"remove\") {\n                    that.remove(e.index, e.items);\n                } else if (e.action != \"itemchange\") {\n                    that.render();\n                }\n            } else {\n                that.render();\n            }\n        },\n\n        container: function() {\n            var element = this.element;\n\n            if (element.nodeName.toLowerCase() == \"table\") {\n                if (!element.tBodies[0]) {\n                    element.appendChild(document.createElement(\"tbody\"));\n                }\n                element = element.tBodies[0];\n            }\n\n            return element;\n        },\n\n        template: function() {\n            var options = this.options,\n                template = options.template,\n                nodeName = this.container().nodeName.toLowerCase();\n\n            if (!template) {\n                if (nodeName == \"select\") {\n                    if (options.valueField || options.textField) {\n                        template = kendo.format('<option value=\"#:{0}#\">#:{1}#</option>',\n                            options.valueField || options.textField, options.textField || options.valueField);\n                    } else {\n                        template = \"<option>#:data#</option>\";\n                    }\n                } else if (nodeName == \"tbody\") {\n                    template = \"<tr><td>#:data#</td></tr>\";\n                } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n                    template = \"<li>#:data#</li>\";\n                } else {\n                    template = \"#:data#\";\n                }\n\n                template = kendo.template(template);\n            }\n\n            return template;\n        },\n\n        add: function(index, items) {\n            var element = this.container(),\n                parents,\n                idx,\n                length,\n                child,\n                clone = element.cloneNode(false),\n                reference = element.children[index];\n\n            $(clone).html(kendo.render(this.template(), items));\n\n            if (clone.children.length) {\n                parents = this.bindings.source._parents();\n\n                for (idx = 0, length = items.length; idx < length; idx++) {\n                    child = clone.children[0];\n                    element.insertBefore(child, reference || null);\n                    bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n                }\n            }\n        },\n\n        remove: function(index, items) {\n            var idx, element = this.container();\n\n            for (idx = 0; idx < items.length; idx++) {\n                var child = element.children[index];\n                unbindElementTree(child);\n                element.removeChild(child);\n            }\n        },\n\n        render: function() {\n            var source = this.bindings.source.get(),\n                parents,\n                idx,\n                length,\n                element = this.container(),\n                template = this.template();\n\n            if (source instanceof kendo.data.DataSource) {\n                source = source.view();\n            }\n\n            if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n                source = [source];\n            }\n\n            if (this.bindings.template) {\n                unbindElementChildren(element);\n\n                $(element).html(this.bindings.template.render(source));\n\n                if (element.children.length) {\n                    parents = this.bindings.source._parents();\n\n                    for (idx = 0, length = source.length; idx < length; idx++) {\n                        bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n                    }\n                }\n            }\n            else {\n                $(element).html(kendo.render(template, source));\n            }\n        }\n    });\n\n    binders.input = {\n        checked: Binder.extend({\n            init: function(element, bindings, options) {\n                Binder.fn.init.call(this, element, bindings, options);\n                this._change = proxy(this.change, this);\n\n                $(this.element).change(this._change);\n            },\n            change: function() {\n                var element = this.element;\n                var value = this.value();\n\n                if (element.type == \"radio\") {\n                    this.bindings[CHECKED].set(value);\n                } else if (element.type == \"checkbox\") {\n                    var source = this.bindings[CHECKED].get();\n                    var index;\n\n                    if (source instanceof ObservableArray) {\n                        value = this.element.value;\n\n                        if (value !== \"on\" && value !== \"off\") {\n                            index = source.indexOf(value);\n                            if (index > -1) {\n                                source.splice(index, 1);\n                            } else {\n                                source.push(value);\n                            }\n                        }\n                    } else {\n                        this.bindings[CHECKED].set(value);\n                    }\n                }\n            },\n\n            refresh: function() {\n                var value = this.bindings[CHECKED].get(),\n                    source = value,\n                    element = this.element;\n\n                if (element.type == \"checkbox\") {\n                    if (source instanceof ObservableArray) {\n                        value = this.element.value;\n                        if (source.indexOf(value) >= 0) {\n                            value = true;\n                        }\n                    }\n\n                    element.checked = value === true;\n                } else if (element.type == \"radio\" && value != null) {\n                    if (element.value === value.toString()) {\n                        element.checked = true;\n                    }\n                }\n            },\n\n            value: function() {\n                var element = this.element,\n                    value = element.value;\n\n                if (element.type == \"checkbox\") {\n                    value = element.checked;\n                }\n\n                return value;\n            },\n            destroy: function() {\n                $(this.element).off(CHANGE, this._change);\n            }\n        })\n    };\n\n    binders.select = {\n        value: Binder.extend({\n            init: function(target, bindings, options) {\n                Binder.fn.init.call(this, target, bindings, options);\n\n                this._change = proxy(this.change, this);\n                $(this.element).change(this._change);\n            },\n\n            change: function() {\n                var values = [],\n                    element = this.element,\n                    source,\n                    field = this.options.valueField || this.options.textField,\n                    valuePrimitive = this.options.valuePrimitive,\n                    option,\n                    valueIndex,\n                    value,\n                    idx,\n                    length;\n\n                for (idx = 0, length = element.options.length; idx < length; idx++) {\n                    option = element.options[idx];\n\n                    if (option.selected) {\n                        value = option.attributes.value;\n\n                        if (value && value.specified) {\n                            value = option.value;\n                        } else {\n                            value = option.text;\n                        }\n\n                        values.push(value);\n                    }\n                }\n\n                if (field) {\n                    source = this.bindings.source.get();\n                    if (source instanceof kendo.data.DataSource) {\n                        source = source.view();\n                    }\n\n                    for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n                        for (idx = 0, length = source.length; idx < length; idx++) {\n                            if (source[idx].get(field) == values[valueIndex]) {\n                                values[valueIndex] = source[idx];\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                value = this.bindings[VALUE].get();\n                if (value instanceof ObservableArray) {\n                    value.splice.apply(value, [0, value.length].concat(values));\n                } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n                    this.bindings[VALUE].set(values[0]);\n                } else {\n                    this.bindings[VALUE].set(values[0].get(field));\n                }\n            },\n            refresh: function() {\n                var optionIndex,\n                    element = this.element,\n                    options = element.options,\n                    value = this.bindings[VALUE].get(),\n                    values = value,\n                    field = this.options.valueField || this.options.textField,\n                    found = false,\n                    optionValue;\n\n                if (!(values instanceof ObservableArray)) {\n                    values = new ObservableArray([value]);\n                }\n\n                element.selectedIndex = -1;\n\n                for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n                    value = values[valueIndex];\n\n                    if (field && value instanceof ObservableObject) {\n                        value = value.get(field);\n                    }\n\n                    for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n                        optionValue = options[optionIndex].value;\n\n                        if (optionValue === \"\" && value !== \"\") {\n                            optionValue = options[optionIndex].text;\n                        }\n\n                        if (optionValue == value) {\n                            options[optionIndex].selected = true;\n                            found = true;\n                        }\n                    }\n                }\n            },\n            destroy: function() {\n                $(this.element).off(CHANGE, this._change);\n            }\n        })\n    };\n\n    function dataSourceBinding(bindingName, fieldName, setter) {\n        return Binder.extend({\n            init: function(widget, bindings, options) {\n                var that = this;\n\n                Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n                that.widget = widget;\n                that._dataBinding = proxy(that.dataBinding, that);\n                that._dataBound = proxy(that.dataBound, that);\n                that._itemChange = proxy(that.itemChange, that);\n            },\n\n            itemChange: function(e) {\n                bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n            },\n\n            dataBinding: function(e) {\n                var idx,\n                    length,\n                    widget = this.widget,\n                    items = e.removedItems || widget.items();\n\n                for (idx = 0, length = items.length; idx < length; idx++) {\n                    unbindElementTree(items[idx]);\n                }\n            },\n\n            _ns: function(ns) {\n                ns = ns || kendo.ui;\n                var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n                all.splice($.inArray(ns, all), 1);\n                all.unshift(ns);\n\n                return kendo.rolesFromNamespaces(all);\n            },\n\n            dataBound: function(e) {\n                var idx,\n                    length,\n                    widget = this.widget,\n                    items = e.addedItems || widget.items(),\n                    dataSource = widget[fieldName],\n                    view,\n                    parents,\n                    groups = dataSource.group() || [];\n\n                if (items.length) {\n                    view = e.addedDataItems || dataSource.flatView();\n                    parents = this.bindings[bindingName]._parents();\n\n                    for (idx = 0, length = view.length; idx < length; idx++) {\n                        bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n                    }\n                }\n            },\n\n            refresh: function(e) {\n                var that = this,\n                    source,\n                    widget = that.widget;\n\n                e = e || {};\n\n                if (!e.action) {\n                    that.destroy();\n\n                    widget.bind(\"dataBinding\", that._dataBinding);\n                    widget.bind(\"dataBound\", that._dataBound);\n                    widget.bind(\"itemChange\", that._itemChange);\n\n                    source = that.bindings[bindingName].get();\n\n                    if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n                        if (source instanceof kendo.data.DataSource) {\n                            widget[setter](source);\n                        } else if (source && source._dataSource) {\n                            widget[setter](source._dataSource);\n                        } else {\n                            widget[fieldName].data(source);\n                        }\n                    }\n                }\n            },\n\n            destroy: function() {\n                var widget = this.widget;\n\n                widget.unbind(\"dataBinding\", this._dataBinding);\n                widget.unbind(\"dataBound\", this._dataBound);\n                widget.unbind(\"itemChange\", this._itemChange);\n            }\n        });\n    }\n\n    binders.widget = {\n        events : Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n                this.widget = widget;\n                this.handlers = {};\n            },\n\n            refresh: function(key) {\n                var binding = this.bindings.events[key],\n                    handler = this.handlers[key];\n\n                if (handler) {\n                    this.widget.unbind(key, handler);\n                }\n\n                handler = binding.get();\n\n                this.handlers[key] = function(e) {\n                    e.data = binding.source;\n\n                    handler(e);\n\n                    if (e.data === binding.source) {\n                        delete e.data;\n                    }\n                };\n\n                this.widget.bind(key, this.handlers[key]);\n            },\n\n            destroy: function() {\n                var handler;\n\n                for (handler in this.handlers) {\n                    this.widget.unbind(handler, this.handlers[handler]);\n                }\n            }\n        }),\n\n        checked: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n                this._change = proxy(this.change, this);\n                this.widget.bind(CHANGE, this._change);\n            },\n            change: function() {\n                this.bindings[CHECKED].set(this.value());\n            },\n\n            refresh: function() {\n                this.widget.check(this.bindings[CHECKED].get() === true);\n            },\n\n            value: function() {\n                var element = this.element,\n                    value = element.value;\n\n                if (value == \"on\" || value == \"off\") {\n                    value = element.checked;\n                }\n\n                return value;\n            },\n\n            destroy: function() {\n                this.widget.unbind(CHANGE, this._change);\n            }\n        }),\n\n        visible: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n            },\n\n            refresh: function() {\n                var visible = this.bindings.visible.get();\n                this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n            }\n        }),\n\n        invisible: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n            },\n\n            refresh: function() {\n                var invisible = this.bindings.invisible.get();\n                this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n            }\n        }),\n\n        enabled: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n            },\n\n            refresh: function() {\n                if (this.widget.enable) {\n                    this.widget.enable(this.bindings.enabled.get());\n                }\n            }\n        }),\n\n        disabled: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n            },\n\n            refresh: function() {\n                if (this.widget.enable) {\n                    this.widget.enable(!this.bindings.disabled.get());\n                }\n            }\n        }),\n\n        source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n        value: Binder.extend({\n            init: function(widget, bindings, options) {\n                Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                this.widget = widget;\n                this._change = $.proxy(this.change, this);\n                this.widget.first(CHANGE, this._change);\n\n                var value = this.bindings.value.get();\n\n                this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n                this._valueIsObservableArray = value instanceof ObservableArray;\n                this._initChange = false;\n            },\n\n            change: function() {\n                var value = this.widget.value(),\n                    field = this.options.dataValueField || this.options.dataTextField,\n                    isArray = toString.call(value) === \"[object Array]\",\n                    isObservableObject = this._valueIsObservableObject,\n                    valueIndex, valueLength, values = [],\n                    sourceItem, sourceValue,\n                    idx, length, source;\n\n                this._initChange = true;\n\n                if (field) {\n\n                    if (this.bindings.source) {\n                        source = this.bindings.source.get();\n                    }\n\n                    if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n                        value = null;\n                    } else {\n                        if (!source || source instanceof kendo.data.DataSource) {\n                            source = this.widget.dataSource.view();\n                        }\n\n                        if (isArray) {\n                            valueLength = value.length;\n                            values = value.slice(0);\n                        }\n\n                        for (idx = 0, length = source.length; idx < length; idx++) {\n                            sourceItem = source[idx];\n                            sourceValue = sourceItem.get(field);\n\n                            if (isArray) {\n                                for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n                                    if (sourceValue == values[valueIndex]) {\n                                        values[valueIndex] = sourceItem;\n                                        break;\n                                    }\n                                }\n                            } else if (sourceValue == value) {\n                                value = isObservableObject ? sourceItem : sourceValue;\n                                break;\n                            }\n                        }\n\n                        if (values[0]) {\n                            if (this._valueIsObservableArray) {\n                                value = values;\n                            } else if (isObservableObject || !field) {\n                                value = values[0];\n                            } else {\n                                value = values[0].get(field);\n                            }\n                        }\n                    }\n                }\n\n                this.bindings.value.set(value);\n                this._initChange = false;\n            },\n\n            refresh: function() {\n\n                if (!this._initChange) {\n                    var field = this.options.dataValueField || this.options.dataTextField,\n                        value = this.bindings.value.get(),\n                              idx = 0, length,\n                              values = [];\n\n                    if (value === undefined) {\n                        value = null;\n                    }\n\n                    if (field) {\n                        if (value instanceof ObservableArray) {\n                            for (length = value.length; idx < length; idx++) {\n                                values[idx] = value[idx].get(field);\n                            }\n                            value = values;\n                        } else if (value instanceof ObservableObject) {\n                            value = value.get(field);\n                        }\n                    }\n                    this.widget.value(value);\n                }\n\n                this._initChange = false;\n            },\n\n            destroy: function() {\n                this.widget.unbind(CHANGE, this._change);\n            }\n        }),\n\n        gantt: {\n            dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n        },\n\n        multiselect: {\n            value: Binder.extend({\n                init: function(widget, bindings, options) {\n                    Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n                    this.widget = widget;\n                    this._change = $.proxy(this.change, this);\n                    this.widget.first(CHANGE, this._change);\n                    this._initChange = false;\n                },\n\n                change: function() {\n                    var that = this,\n                        oldValues = that.bindings[VALUE].get(),\n                        valuePrimitive = that.options.valuePrimitive,\n                        newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n                    var field = this.options.dataValueField || this.options.dataTextField;\n\n                    newValues = newValues.slice(0);\n\n                    that._initChange = true;\n\n                    if (oldValues instanceof ObservableArray) {\n                        var remove = [];\n\n                        var newLength = newValues.length;\n\n                        var i = 0, j = 0;\n                        var old = oldValues[i];\n                        var same = false;\n                        var removeIndex;\n                        var newValue;\n                        var found;\n\n                        while (old !== undefined) {\n                            found = false;\n                            for (j = 0; j < newLength; j++) {\n                                if (valuePrimitive) {\n                                    same = newValues[j] == old;\n                                } else {\n                                    newValue = newValues[j];\n\n                                    newValue = newValue.get ? newValue.get(field) : newValue;\n                                    same = newValue == (old.get ? old.get(field) : old);\n                                }\n\n                                if (same) {\n                                    newValues.splice(j, 1);\n                                    newLength -= 1;\n                                    found = true;\n                                    break;\n                                }\n                            }\n\n                            if (!found) {\n                                remove.push(old);\n                                arraySplice(oldValues, i, 1);\n                                removeIndex = i;\n                            } else {\n                                i += 1;\n                            }\n\n                            old = oldValues[i];\n                        }\n\n                        arraySplice(oldValues, oldValues.length, 0, newValues);\n\n                        if (remove.length) {\n                            oldValues.trigger(\"change\", {\n                                action: \"remove\",\n                                items: remove,\n                                index: removeIndex\n                            });\n                        }\n\n                        if (newValues.length) {\n                            oldValues.trigger(\"change\", {\n                                action: \"add\",\n                                items: newValues,\n                                index: oldValues.length - 1\n                            });\n                        }\n                    } else {\n                        that.bindings[VALUE].set(newValues);\n                    }\n\n                    that._initChange = false;\n                },\n\n                refresh: function() {\n                    if (!this._initChange) {\n                        var field = this.options.dataValueField || this.options.dataTextField,\n                            value = this.bindings.value.get(),\n                            idx = 0, length,\n                            values = [],\n                            selectedValue;\n\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        if (field) {\n                            if (value instanceof ObservableArray) {\n                                for (length = value.length; idx < length; idx++) {\n                                    selectedValue = value[idx];\n                                    values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n                                }\n                                value = values;\n                            } else if (value instanceof ObservableObject) {\n                                value = value.get(field);\n                            }\n                        }\n\n                        this.widget.value(value);\n                    }\n                },\n\n                destroy: function() {\n                    this.widget.unbind(CHANGE, this._change);\n                }\n\n            })\n        },\n        scheduler: {\n            source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n                dataBound: function(e) {\n                    var idx;\n                    var length;\n                    var widget = this.widget;\n                    var elements = e.addedItems || widget.items();\n                    var data, parents;\n\n                    if (elements.length) {\n                        data = e.addedDataItems || widget.dataItems();\n                        parents = this.bindings.source._parents();\n\n                        for (idx = 0, length = data.length; idx < length; idx++) {\n                            bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n                        }\n                    }\n                }\n            })\n        }\n    };\n\n    var arraySplice = function(arr, idx, remove, add) {\n        add = add || [];\n        remove = remove || 0;\n\n        var addLength = add.length;\n        var oldLength = arr.length;\n\n        var shifted = [].slice.call(arr, idx + remove);\n        var shiftedLength = shifted.length;\n        var index;\n\n        if (addLength) {\n            addLength = idx + addLength;\n            index = 0;\n\n            for (; idx < addLength; idx++) {\n                arr[idx] = add[index];\n                index++;\n            }\n\n            arr.length = addLength;\n        } else if (remove) {\n            arr.length = idx;\n\n            remove += idx;\n            while (idx < remove) {\n                delete arr[--remove];\n            }\n        }\n\n        if (shiftedLength) {\n            shiftedLength = idx + shiftedLength;\n            index = 0;\n\n            for (; idx < shiftedLength; idx++) {\n                arr[idx] = shifted[index];\n                index++;\n            }\n\n            arr.length = shiftedLength;\n        }\n\n        idx = arr.length;\n\n        while (idx < oldLength) {\n            delete arr[idx];\n            idx++;\n        }\n    };\n\n    var BindingTarget = Class.extend( {\n        init: function(target, options) {\n            this.target = target;\n            this.options = options;\n            this.toDestroy = [];\n        },\n\n        bind: function(bindings) {\n            var nodeName = this.target.nodeName.toLowerCase(),\n                key,\n                hasValue,\n                hasSource,\n                hasEvents,\n                specificBinders = binders[nodeName] || {};\n\n            for (key in bindings) {\n                if (key == VALUE) {\n                    hasValue = true;\n                } else if (key == SOURCE) {\n                    hasSource = true;\n                } else if (key == EVENTS) {\n                    hasEvents = true;\n                } else {\n                    this.applyBinding(key, bindings, specificBinders);\n                }\n            }\n\n            if (hasSource) {\n                this.applyBinding(SOURCE, bindings, specificBinders);\n            }\n\n            if (hasValue) {\n                this.applyBinding(VALUE, bindings, specificBinders);\n            }\n\n            if (hasEvents) {\n                this.applyBinding(EVENTS, bindings, specificBinders);\n            }\n        },\n\n        applyBinding: function(name, bindings, specificBinders) {\n            var binder = specificBinders[name] || binders[name],\n                toDestroy = this.toDestroy,\n                attribute,\n                binding = bindings[name];\n\n            if (binder) {\n                binder = new binder(this.target, bindings, this.options);\n\n                toDestroy.push(binder);\n\n                if (binding instanceof Binding) {\n                    binder.bind(binding);\n                    toDestroy.push(binding);\n                } else {\n                    for (attribute in binding) {\n                        binder.bind(binding, attribute);\n                        toDestroy.push(binding[attribute]);\n                    }\n                }\n            } else if (name !== \"template\") {\n                throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\n            }\n        },\n\n        destroy: function() {\n            var idx,\n                length,\n                toDestroy = this.toDestroy;\n\n            for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n                toDestroy[idx].destroy();\n            }\n        }\n    });\n\n    var WidgetBindingTarget = BindingTarget.extend( {\n        bind: function(bindings) {\n            var that = this,\n                binding,\n                hasValue = false,\n                hasSource = false,\n                specificBinders = binders.widget[that.target.options.name.toLowerCase()] || {};\n\n            for (binding in bindings) {\n                if (binding == VALUE) {\n                    hasValue = true;\n                } else if (binding == SOURCE) {\n                    hasSource = true;\n                } else {\n                    that.applyBinding(binding, bindings, specificBinders);\n                }\n            }\n\n            if (hasSource) {\n                that.applyBinding(SOURCE, bindings, specificBinders);\n            }\n\n            if (hasValue) {\n                that.applyBinding(VALUE, bindings, specificBinders);\n            }\n        },\n\n        applyBinding: function(name, bindings, specificBinders) {\n            var binder = specificBinders[name] || binders.widget[name],\n                toDestroy = this.toDestroy,\n                attribute,\n                binding = bindings[name];\n\n            if (binder) {\n                binder = new binder(this.target, bindings, this.target.options);\n\n                toDestroy.push(binder);\n\n\n                if (binding instanceof Binding) {\n                    binder.bind(binding);\n                    toDestroy.push(binding);\n                } else {\n                    for (attribute in binding) {\n                        binder.bind(binding, attribute);\n                        toDestroy.push(binding[attribute]);\n                    }\n                }\n            } else {\n                throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\n            }\n        }\n    });\n\n    function bindingTargetForRole(element, roles) {\n        var widget = kendo.initWidget(element, {}, roles);\n\n        if (widget) {\n            return new WidgetBindingTarget(widget);\n        }\n    }\n\n    var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n        whiteSpaceRegExp = /\\s/g;\n\n    function parseBindings(bind) {\n        var result = {},\n            idx,\n            length,\n            token,\n            colonIndex,\n            key,\n            value,\n            tokens;\n\n        tokens = bind.match(keyValueRegExp);\n\n        for (idx = 0, length = tokens.length; idx < length; idx++) {\n            token = tokens[idx];\n            colonIndex = token.indexOf(\":\");\n\n            key = token.substring(0, colonIndex);\n            value = token.substring(colonIndex + 1);\n\n            if (value.charAt(0) == \"{\") {\n                value = parseBindings(value);\n            }\n\n            result[key] = value;\n        }\n\n        return result;\n    }\n\n    function createBindings(bindings, source, type) {\n        var binding,\n            result = {};\n\n        for (binding in bindings) {\n            result[binding] = new type(source, bindings[binding]);\n        }\n\n        return result;\n    }\n\n    function bindElement(element, source, roles, parents) {\n        var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n            idx,\n            bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n            children = element.children,\n            childrenCopy = [],\n            deep = true,\n            bindings,\n            options = {},\n            target;\n\n        parents = parents || [source];\n\n        if (role || bind) {\n            unbindElement(element);\n        }\n\n        if (role) {\n            target = bindingTargetForRole(element, roles);\n        }\n\n        if (bind) {\n            bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n            if (!target) {\n                options = kendo.parseOptions(element, {textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true});\n                options.roles = roles;\n                target = new BindingTarget(element, options);\n            }\n\n            target.source = source;\n\n            bindings = createBindings(bind, parents, Binding);\n\n            if (options.template) {\n                bindings.template = new TemplateBinding(parents, \"\", options.template);\n            }\n\n            if (bindings.click) {\n                bind.events = bind.events || {};\n                bind.events.click = bind.click;\n                bindings.click.destroy();\n                delete bindings.click;\n            }\n\n            if (bindings.source) {\n                deep = false;\n            }\n\n            if (bind.attr) {\n                bindings.attr = createBindings(bind.attr, parents, Binding);\n            }\n\n            if (bind.style) {\n                bindings.style = createBindings(bind.style, parents, Binding);\n            }\n\n            if (bind.events) {\n                bindings.events = createBindings(bind.events, parents, EventBinding);\n            }\n\n            target.bind(bindings);\n        }\n\n        if (target) {\n            element.kendoBindingTarget = target;\n        }\n\n        if (deep && children) {\n            // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n            for (idx = 0; idx < children.length; idx++) {\n                childrenCopy[idx] = children[idx];\n            }\n\n            for (idx = 0; idx < childrenCopy.length; idx++) {\n                bindElement(childrenCopy[idx], source, roles, parents);\n            }\n        }\n    }\n\n    function bind(dom, object) {\n        var idx,\n            length,\n            node,\n            roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n        object = kendo.observable(object);\n        dom = $(dom);\n\n        for (idx = 0, length = dom.length; idx < length; idx++) {\n            node = dom[idx];\n            if (node.nodeType === 1) {\n                bindElement(node, object, roles);\n            }\n        }\n    }\n\n    function unbindElement(element) {\n        var bindingTarget = element.kendoBindingTarget;\n\n        if (bindingTarget) {\n            bindingTarget.destroy();\n\n            if (deleteExpando) {\n                delete element.kendoBindingTarget;\n            } else if (element.removeAttribute) {\n                element.removeAttribute(\"kendoBindingTarget\");\n            } else {\n                element.kendoBindingTarget = null;\n            }\n        }\n    }\n\n    function unbindElementTree(element) {\n        unbindElement(element);\n\n        unbindElementChildren(element);\n    }\n\n    function unbindElementChildren(element) {\n        var children = element.children;\n\n        if (children) {\n            for (var idx = 0, length = children.length; idx < length; idx++) {\n                unbindElementTree(children[idx]);\n            }\n        }\n    }\n\n    function unbind(dom) {\n        var idx, length;\n\n        dom = $(dom);\n\n        for (idx = 0, length = dom.length; idx < length; idx++ ) {\n            unbindElementTree(dom[idx]);\n        }\n    }\n\n    function notify(widget, namespace) {\n        var element = widget.element,\n            bindingTarget = element[0].kendoBindingTarget;\n\n        if (bindingTarget) {\n            bind(element, bindingTarget.source, namespace);\n        }\n    }\n\n    kendo.unbind = unbind;\n    kendo.bind = bind;\n    kendo.data.binders = binders;\n    kendo.data.Binder = Binder;\n    kendo.notify = notify;\n\n    kendo.observable = function(object) {\n        if (!(object instanceof ObservableObject)) {\n            object = new ObservableObject(object);\n        }\n\n        return object;\n    };\n\n    kendo.observableHierarchy = function(array) {\n        var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n        function recursiveRead(data) {\n            var i, children;\n\n            for (i = 0; i < data.length; i++) {\n                data[i]._initChildren();\n\n                children = data[i].children;\n\n                children.fetch();\n\n                data[i].items = children.data();\n\n                recursiveRead(data[i].items);\n            }\n        }\n\n        dataSource.fetch();\n\n        recursiveRead(dataSource.data());\n\n        dataSource._data._dataSource = dataSource;\n\n        return dataSource._data;\n    };\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        fx = kendo.effects,\n        each = $.each,\n        extend = $.extend,\n        proxy = $.proxy,\n        support = kendo.support,\n        browser = support.browser,\n        transforms = support.transforms,\n        transitions = support.transitions,\n        scaleProperties = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 },\n        translateProperties = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 },\n        hasZoom = (typeof document.documentElement.style.zoom !== \"undefined\") && !transforms,\n        matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n        cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,\n        translateXRegExp = /translatex?$/i,\n        oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n        singleEffectRegExp = /(zoom|fade|expand)/,\n        unitRegExp = /[xy]$/i,\n        transformProps = [\"perspective\", \"rotate\", \"rotatex\", \"rotatey\", \"rotatez\", \"rotate3d\", \"scale\", \"scalex\", \"scaley\", \"scalez\", \"scale3d\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"translatez\", \"translate3d\", \"matrix\", \"matrix3d\"],\n        transform2d = [\"rotate\", \"scale\", \"scalex\", \"scaley\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"matrix\"],\n        transform2units = { \"rotate\": \"deg\", scale: \"\", skew: \"px\", translate: \"px\" },\n        cssPrefix = transforms.css,\n        round = Math.round,\n        BLANK = \"\",\n        PX = \"px\",\n        NONE = \"none\",\n        AUTO = \"auto\",\n        WIDTH = \"width\",\n        HEIGHT = \"height\",\n        HIDDEN = \"hidden\",\n        ORIGIN = \"origin\",\n        ABORT_ID = \"abortId\",\n        OVERFLOW = \"overflow\",\n        TRANSLATE = \"translate\",\n        POSITION = \"position\",\n        COMPLETE_CALLBACK = \"completeCallback\",\n        TRANSITION = cssPrefix + \"transition\",\n        TRANSFORM = cssPrefix + \"transform\",\n        BACKFACE = cssPrefix + \"backface-visibility\",\n        PERSPECTIVE = cssPrefix + \"perspective\",\n        DEFAULT_PERSPECTIVE = \"1500px\",\n        TRANSFORM_PERSPECTIVE = \"perspective(\" + DEFAULT_PERSPECTIVE + \")\",\n        ios7 = support.mobileOS && support.mobileOS.majorVersion == 7,\n        directions = {\n            left: {\n                reverse: \"right\",\n                property: \"left\",\n                transition: \"translatex\",\n                vertical: false,\n                modifier: -1\n            },\n            right: {\n                reverse: \"left\",\n                property: \"left\",\n                transition: \"translatex\",\n                vertical: false,\n                modifier: 1\n            },\n            down: {\n                reverse: \"up\",\n                property: \"top\",\n                transition: \"translatey\",\n                vertical: true,\n                modifier: 1\n            },\n            up: {\n                reverse: \"down\",\n                property: \"top\",\n                transition: \"translatey\",\n                vertical: true,\n                modifier: -1\n            },\n            top: {\n                reverse: \"bottom\"\n            },\n            bottom: {\n                reverse: \"top\"\n            },\n            \"in\": {\n                reverse: \"out\",\n                modifier: -1\n            },\n            out: {\n                reverse: \"in\",\n                modifier: 1\n            },\n\n            vertical: {\n                reverse: \"vertical\"\n            },\n\n            horizontal: {\n                reverse: \"horizontal\"\n            }\n        };\n\n    kendo.directions = directions;\n\n    extend($.fn, {\n        kendoStop: function(clearQueue, gotoEnd) {\n            if (transitions) {\n                return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n            } else {\n                return this.stop(clearQueue, gotoEnd);\n            }\n        }\n    });\n\n    /* jQuery support for all transform animations (FF 3.5/3.6, Opera 10.x, IE9 */\n\n    if (transforms && !transitions) {\n        each(transform2d, function(idx, value) {\n            $.fn[value] = function(val) {\n                if (typeof val == \"undefined\") {\n                    return animationProperty(this, value);\n                } else {\n                    var that = $(this)[0],\n                        transformValue = value + \"(\" + val + transform2units[value.replace(unitRegExp, \"\")] + \")\";\n\n                    if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n                        $(this).css(TRANSFORM, transformValue);\n                    } else {\n                        that.style.cssText = that.style.cssText.replace(new RegExp(value + \"\\\\(.*?\\\\)\", \"i\"), transformValue);\n                    }\n                }\n                return this;\n            };\n\n            $.fx.step[value] = function (fx) {\n                $(fx.elem)[value](fx.now);\n            };\n        });\n\n        var curProxy = $.fx.prototype.cur;\n        $.fx.prototype.cur = function () {\n            if (transform2d.indexOf(this.prop) != -1) {\n                return parseFloat($(this.elem)[this.prop]());\n            }\n\n            return curProxy.apply(this, arguments);\n        };\n    }\n\n    kendo.toggleClass = function(element, classes, options, add) {\n        if (classes) {\n            classes = classes.split(\" \");\n\n            if (transitions) {\n                options = extend({\n                    exclusive: \"all\",\n                    duration: 400,\n                    ease: \"ease-out\"\n                }, options);\n\n                element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease);\n                setTimeout(function() {\n                    element.css(TRANSITION, \"\").css(HEIGHT);\n                }, options.duration); // TODO: this should fire a kendoAnimate session instead.\n            }\n\n            each(classes, function(idx, value) {\n                element.toggleClass(value, add);\n            });\n        }\n\n        return element;\n    };\n\n    kendo.parseEffects = function(input, mirror) {\n        var effects = {};\n\n        if (typeof input === \"string\") {\n            each(input.split(\" \"), function(idx, value) {\n                var redirectedEffect = !singleEffectRegExp.test(value),\n                    resolved = value.replace(oldEffectsRegExp, function(match, $1, $2) {\n                        return $1 + \":\" + $2.toLowerCase();\n                    }), // Support for old zoomIn/fadeOut style, now deprecated.\n                    effect = resolved.split(\":\"),\n                    direction = effect[1],\n                    effectBody = {};\n\n                if (effect.length > 1) {\n                    effectBody.direction = (mirror && redirectedEffect ? directions[direction].reverse : direction);\n                }\n\n                effects[effect[0]] = effectBody;\n            });\n        } else {\n            each(input, function(idx) {\n                var direction = this.direction;\n\n                if (direction && mirror && !singleEffectRegExp.test(idx)) {\n                    this.direction = directions[direction].reverse;\n                }\n\n                effects[idx] = this;\n            });\n        }\n\n        return effects;\n    };\n\n    function parseInteger(value) {\n        return parseInt(value, 10);\n    }\n\n    function parseCSS(element, property) {\n        return parseInteger(element.css(property));\n    }\n\n    function keys(obj) {\n        var acc = [];\n        for (var propertyName in obj) {\n            acc.push(propertyName);\n        }\n        return acc;\n    }\n\n    function strip3DTransforms(properties) {\n        for (var key in properties) {\n            if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n                delete properties[key];\n            }\n        }\n\n        return properties;\n    }\n\n    function normalizeCSS(element, properties) {\n        var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n\n        for (key in properties) {\n            lowerKey = key.toLowerCase();\n            isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n\n            if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n                delete properties[key];\n            } else {\n                value = properties[key];\n\n                if (isTransformed) {\n                    transformation.push(key + \"(\" + value + \")\");\n                } else {\n                    cssValues[key] = value;\n                }\n            }\n        }\n\n        if (transformation.length) {\n            cssValues[TRANSFORM] = transformation.join(\" \");\n        }\n\n        return cssValues;\n    }\n\n    if (transitions) {\n        extend(fx, {\n            transition: function(element, properties, options) {\n                var css,\n                    delay = 0,\n                    oldKeys = element.data(\"keys\") || [],\n                    timeoutID;\n\n                options = extend({\n                        duration: 200,\n                        ease: \"ease-out\",\n                        complete: null,\n                        exclusive: \"all\"\n                    },\n                    options\n                );\n\n                var stopTransitionCalled = false;\n\n                var stopTransition = function() {\n                    if (!stopTransitionCalled) {\n                        stopTransitionCalled = true;\n\n                        if (timeoutID) {\n                            clearTimeout(timeoutID);\n                            timeoutID = null;\n                        }\n\n                        element\n                        .removeData(ABORT_ID)\n                        .dequeue()\n                        .css(TRANSITION, \"\")\n                        .css(TRANSITION);\n\n                        options.complete.call(element);\n                    }\n                };\n\n                options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n\n                css = normalizeCSS(element, properties);\n\n                $.merge(oldKeys, keys(css));\n                element\n                    .data(\"keys\", $.unique(oldKeys))\n                    .height();\n\n                element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease).css(TRANSITION);\n                element.css(css).css(TRANSFORM);\n\n                /**\n                 * Use transitionEnd event for browsers who support it - but duplicate it with setTimeout, as the transitionEnd event will not be triggered if no CSS properties change.\n                 * This should be cleaned up at some point (widget by widget), and refactored to widgets not relying on the complete callback if no transition occurs.\n                 *\n                 * For IE9 and below, resort to setTimeout.\n                 */\n                if (transitions.event) {\n                    element.one(transitions.event, stopTransition);\n                    if (options.duration !== 0) {\n                        delay = 500;\n                    }\n                }\n\n                timeoutID = setTimeout(stopTransition, options.duration + delay);\n                element.data(ABORT_ID, timeoutID);\n                element.data(COMPLETE_CALLBACK, stopTransition);\n            },\n\n            stopQueue: function(element, clearQueue, gotoEnd) {\n                var cssValues,\n                    taskKeys = element.data(\"keys\"),\n                    retainPosition = (!gotoEnd && taskKeys),\n                    completeCallback = element.data(COMPLETE_CALLBACK);\n\n                if (retainPosition) {\n                    cssValues = kendo.getComputedStyles(element[0], taskKeys);\n                }\n\n                if (completeCallback) {\n                    completeCallback();\n                }\n\n                if (retainPosition) {\n                    element.css(cssValues);\n                }\n\n                return element\n                        .removeData(\"keys\")\n                        .stop(clearQueue);\n            }\n        });\n    }\n\n    function animationProperty(element, property) {\n        if (transforms) {\n            var transform = element.css(TRANSFORM);\n            if (transform == NONE) {\n                return property == \"scale\" ? 1 : 0;\n            }\n\n            var match = transform.match(new RegExp(property + \"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),\n                computed = 0;\n\n            if (match) {\n                computed = parseInteger(match[1]);\n            } else {\n                match = transform.match(matrix3dRegExp) || [0, 0, 0, 0, 0];\n                property = property.toLowerCase();\n\n                if (translateXRegExp.test(property)) {\n                    computed = parseFloat(match[3] / match[2]);\n                } else if (property == \"translatey\") {\n                    computed = parseFloat(match[4] / match[2]);\n                } else if (property == \"scale\") {\n                    computed = parseFloat(match[2]);\n                } else if (property == \"rotate\") {\n                    computed = parseFloat(Math.atan2(match[2], match[1]));\n                }\n            }\n\n            return computed;\n        } else {\n            return parseFloat(element.css(property));\n        }\n    }\n\n    var EffectSet = kendo.Class.extend({\n        init: function(element, options) {\n            var that = this;\n\n            that.element = element;\n            that.effects = [];\n            that.options = options;\n            that.restore = [];\n        },\n\n        run: function(effects) {\n            var that = this,\n                effect,\n                idx, jdx,\n                length = effects.length,\n                element = that.element,\n                options = that.options,\n                deferred = $.Deferred(),\n                start = {},\n                end = {},\n                target,\n                children,\n                childrenLength;\n\n            that.effects = effects;\n\n            deferred.then($.proxy(that, \"complete\"));\n\n            element.data(\"animating\", true);\n\n            for (idx = 0; idx < length; idx ++) {\n                effect = effects[idx];\n\n                effect.setReverse(options.reverse);\n                effect.setOptions(options);\n\n                that.addRestoreProperties(effect.restore);\n\n                effect.prepare(start, end);\n\n                children = effect.children();\n\n                for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx ++) {\n                    children[jdx].duration(options.duration).run();\n                }\n            }\n\n            // legacy support for options.properties\n            for (var effectName in options.effects) {\n                extend(end, options.effects[effectName].properties);\n            }\n\n            // Show the element initially\n            if (!element.is(\":visible\")) {\n                extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n            }\n\n            if (transforms && !options.reset) {\n                target = element.data(\"targetTransform\");\n\n                if (target) {\n                    start = extend(target, start);\n                }\n            }\n\n            start = normalizeCSS(element, start);\n\n            if (transforms && !transitions) {\n                start = strip3DTransforms(start);\n            }\n\n            element.css(start)\n                   .css(TRANSFORM); // Nudge\n\n            for (idx = 0; idx < length; idx ++) {\n                effects[idx].setup();\n            }\n\n            if (options.init) {\n                options.init();\n            }\n\n            element.data(\"targetTransform\", end);\n            fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n\n            return deferred.promise();\n        },\n\n        stop: function() {\n            $(this.element).kendoStop(true, true);\n        },\n\n        addRestoreProperties: function(restore) {\n            var element = this.element,\n                value,\n                i = 0,\n                length = restore.length;\n\n            for (; i < length; i ++) {\n                value = restore[i];\n\n                this.restore.push(value);\n\n                if (!element.data(value)) {\n                    element.data(value, element.css(value));\n                }\n            }\n        },\n\n        restoreCallback: function() {\n            var element = this.element;\n\n            for (var i = 0, length = this.restore.length; i < length; i ++) {\n                var value = this.restore[i];\n                element.css(value, element.data(value));\n            }\n        },\n\n        complete: function() {\n            var that = this,\n                idx = 0,\n                element = that.element,\n                options = that.options,\n                effects = that.effects,\n                length = effects.length;\n\n            element\n                .removeData(\"animating\")\n                .dequeue(); // call next animation from the queue\n\n            if (options.hide) {\n                element.data(\"olddisplay\", element.css(\"display\")).hide();\n            }\n\n            this.restoreCallback();\n\n            if (hasZoom && !transforms) {\n                setTimeout($.proxy(this, \"restoreCallback\"), 0); // Again jQuery callback in IE8-\n            }\n\n            for (; idx < length; idx ++) {\n                effects[idx].teardown();\n            }\n\n            if (options.completeCallback) {\n                options.completeCallback(element);\n            }\n        }\n    });\n\n    fx.promise = function(element, options) {\n        var effects = [],\n            effectClass,\n            effectSet = new EffectSet(element, options),\n            parsedEffects = kendo.parseEffects(options.effects),\n            effect;\n\n        options.effects = parsedEffects;\n\n        for (var effectName in parsedEffects) {\n            effectClass = fx[capitalize(effectName)];\n\n            if (effectClass) {\n                effect = new effectClass(element, parsedEffects[effectName].direction);\n                effects.push(effect);\n           }\n        }\n\n        if (effects[0]) {\n            effectSet.run(effects);\n        } else { // Not sure how would an fx promise reach this state - means that you call kendoAnimate with no valid effects? Why?\n            if (!element.is(\":visible\")) {\n                element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n            }\n\n            if (options.init) {\n                options.init();\n            }\n\n            element.dequeue();\n            effectSet.complete();\n        }\n    };\n\n    extend(fx, {\n        animate: function(elements, properties, options) {\n            var useTransition = options.transition !== false;\n            delete options.transition;\n\n            if (transitions && \"transition\" in fx && useTransition) {\n                fx.transition(elements, properties, options);\n            } else {\n                if (transforms) {\n                    elements.animate(strip3DTransforms(properties), { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n                } else {\n                    elements.each(function() {\n                        var element = $(this),\n                            multiple = {};\n\n                        each(transformProps, function(idx, value) { // remove transforms to avoid IE and older browsers confusion\n                            var params,\n                                currentValue = properties ? properties[value]+ \" \" : null; // We need to match\n\n                            if (currentValue) {\n                                var single = properties;\n\n                                if (value in scaleProperties && properties[value] !== undefined) {\n                                    params = currentValue.match(cssParamsRegExp);\n                                    if (transforms) {\n                                        extend(single, { scale: +params[0] });\n                                    }\n                                } else {\n                                    if (value in translateProperties && properties[value] !== undefined) {\n                                        var position = element.css(POSITION),\n                                            isFixed = (position == \"absolute\" || position == \"fixed\");\n\n                                        if (!element.data(TRANSLATE)) {\n                                            if (isFixed) {\n                                                element.data(TRANSLATE, {\n                                                    top: parseCSS(element, \"top\") || 0,\n                                                    left: parseCSS(element, \"left\") || 0,\n                                                    bottom: parseCSS(element, \"bottom\"),\n                                                    right: parseCSS(element, \"right\")\n                                                });\n                                            } else {\n                                                element.data(TRANSLATE, {\n                                                    top: parseCSS(element, \"marginTop\") || 0,\n                                                    left: parseCSS(element, \"marginLeft\") || 0\n                                                });\n                                            }\n                                        }\n\n                                        var originalPosition = element.data(TRANSLATE);\n\n                                        params = currentValue.match(cssParamsRegExp);\n                                        if (params) {\n\n                                            var dX = value == TRANSLATE + \"y\" ? +null : +params[1],\n                                                dY = value == TRANSLATE + \"y\" ? +params[1] : +params[2];\n\n                                            if (isFixed) {\n                                                if (!isNaN(originalPosition.right)) {\n                                                    if (!isNaN(dX)) { extend(single, { right: originalPosition.right - dX }); }\n                                                } else {\n                                                    if (!isNaN(dX)) { extend(single, { left: originalPosition.left + dX }); }\n                                                }\n\n                                                if (!isNaN(originalPosition.bottom)) {\n                                                    if (!isNaN(dY)) { extend(single, { bottom: originalPosition.bottom - dY }); }\n                                                } else {\n                                                    if (!isNaN(dY)) { extend(single, { top: originalPosition.top + dY }); }\n                                                }\n                                            } else {\n                                                if (!isNaN(dX)) { extend(single, { marginLeft: originalPosition.left + dX }); }\n                                                if (!isNaN(dY)) { extend(single, { marginTop: originalPosition.top + dY }); }\n                                            }\n                                        }\n                                    }\n                                }\n\n                                if (!transforms && value != \"scale\" && value in single) {\n                                    delete single[value];\n                                }\n\n                                if (single) {\n                                    extend(multiple, single);\n                                }\n                            }\n                        });\n\n                        if (browser.msie) {\n                            delete multiple.scale;\n                        }\n\n                        element.animate(multiple, { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n                    });\n                }\n            }\n        }\n    });\n\n    fx.animatedPromise = fx.promise;\n\n    var Effect = kendo.Class.extend({\n        init: function(element, direction) {\n            var that = this;\n            that.element = element;\n            that._direction = direction;\n            that.options = {};\n            that._additionalEffects = [];\n\n            if (!that.restore) {\n                that.restore = [];\n            }\n        },\n\n// Public API\n        reverse: function() {\n            this._reverse = true;\n            return this.run();\n        },\n\n        play: function() {\n            this._reverse = false;\n            return this.run();\n        },\n\n        add: function(additional) {\n            this._additionalEffects.push(additional);\n            return this;\n        },\n\n        direction: function(value) {\n            this._direction = value;\n            return this;\n        },\n\n        duration: function(duration) {\n            this._duration = duration;\n            return this;\n        },\n\n        compositeRun: function() {\n            var that = this,\n                effectSet = new EffectSet(that.element, { reverse: that._reverse, duration: that._duration }),\n                effects = that._additionalEffects.concat([ that ]);\n\n            return effectSet.run(effects);\n        },\n\n        run: function() {\n            if (this._additionalEffects && this._additionalEffects[0]) {\n                return this.compositeRun();\n            }\n\n            var that = this,\n                element = that.element,\n                idx = 0,\n                restore = that.restore,\n                length = restore.length,\n                value,\n                deferred = $.Deferred(),\n                start = {},\n                end = {},\n                target,\n                children = that.children(),\n                childrenLength = children.length;\n\n            deferred.then($.proxy(that, \"_complete\"));\n\n            element.data(\"animating\", true);\n\n            for (idx = 0; idx < length; idx ++) {\n                value = restore[idx];\n\n                if (!element.data(value)) {\n                    element.data(value, element.css(value));\n                }\n            }\n\n            for (idx = 0; idx < childrenLength; idx ++) {\n                children[idx].duration(that._duration).run();\n            }\n\n            that.prepare(start, end);\n\n            if (!element.is(\":visible\")) {\n                extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n            }\n\n            if (transforms) {\n                target = element.data(\"targetTransform\");\n\n                if (target) {\n                    start = extend(target, start);\n                }\n            }\n\n            start = normalizeCSS(element, start);\n\n            if (transforms && !transitions) {\n                start = strip3DTransforms(start);\n            }\n\n            element.css(start).css(TRANSFORM); // Trick webkit into re-rendering\n\n            that.setup();\n\n            element.data(\"targetTransform\", end);\n            fx.animate(element, end, { duration: that._duration, complete: deferred.resolve });\n\n            return deferred.promise();\n        },\n\n        stop: function() {\n            var idx = 0,\n                children = this.children(),\n                childrenLength = children.length;\n\n            for (idx = 0; idx < childrenLength; idx ++) {\n                children[idx].stop();\n            }\n\n            $(this.element).kendoStop(true, true);\n            return this;\n        },\n\n        restoreCallback: function() {\n            var element = this.element;\n\n            for (var i = 0, length = this.restore.length; i < length; i ++) {\n                var value = this.restore[i];\n                element.css(value, element.data(value));\n            }\n        },\n\n        _complete: function() {\n            var that = this,\n                element = that.element;\n\n            element\n                .removeData(\"animating\")\n                .dequeue(); // call next animation from the queue\n\n            that.restoreCallback();\n\n            if (that.shouldHide()) {\n                element.data(\"olddisplay\", element.css(\"display\")).hide();\n            }\n\n            if (hasZoom && !transforms) {\n                setTimeout($.proxy(that, \"restoreCallback\"), 0); // Again jQuery callback in IE8-\n            }\n\n            that.teardown();\n        },\n\n        /////////////////////////// Support for kendo.animate;\n        setOptions: function(options) {\n            extend(true, this.options, options);\n        },\n\n        children: function() {\n            return [];\n        },\n\n        shouldHide: $.noop,\n\n        setup: $.noop,\n        prepare: $.noop,\n        teardown: $.noop,\n        directions: [],\n\n        setReverse: function(reverse) {\n            this._reverse = reverse;\n            return this;\n        }\n    });\n\n    function capitalize(word) {\n        return word.charAt(0).toUpperCase() + word.substring(1);\n    }\n\n    function createEffect(name, definition) {\n        var effectClass = Effect.extend(definition),\n            directions = effectClass.prototype.directions;\n\n        fx[capitalize(name)] = effectClass;\n\n        fx.Element.prototype[name] = function(direction, opt1, opt2, opt3) {\n            return new effectClass(this.element, direction, opt1, opt2, opt3);\n        };\n\n        each(directions, function(idx, theDirection) {\n            fx.Element.prototype[name + capitalize(theDirection)] = function(opt1, opt2, opt3) {\n                return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n            };\n        });\n    }\n\n    var FOUR_DIRECTIONS = [\"left\", \"right\", \"up\", \"down\"],\n        IN_OUT = [\"in\", \"out\"];\n\n    createEffect(\"slideIn\", {\n        directions: FOUR_DIRECTIONS,\n\n        divisor: function(value) {\n            this.options.divisor = value;\n            return this;\n        },\n\n        prepare: function(start, end) {\n            var that = this,\n                tmp,\n                element = that.element,\n                direction = directions[that._direction],\n                offset = -direction.modifier * (direction.vertical ? element.outerHeight() : element.outerWidth()),\n                startValue = offset / (that.options && that.options.divisor || 1) + PX,\n                endValue = \"0px\";\n\n            if (that._reverse) {\n                tmp = start;\n                start = end;\n                end = tmp;\n            }\n\n            if (transforms) {\n                start[direction.transition] = startValue;\n                end[direction.transition] = endValue;\n            } else {\n                start[direction.property] = startValue;\n                end[direction.property] = endValue;\n            }\n        }\n    });\n\n    createEffect(\"tile\", {\n        directions: FOUR_DIRECTIONS,\n\n        init: function(element, direction, previous) {\n            Effect.prototype.init.call(this, element, direction);\n            this.options = { previous: previous };\n        },\n\n        previousDivisor: function(value) {\n            this.options.previousDivisor = value;\n            return this;\n        },\n\n        children: function() {\n            var that = this,\n                reverse = that._reverse,\n                previous = that.options.previous,\n                divisor = that.options.previousDivisor || 1,\n                dir = that._direction;\n\n            var children = [ kendo.fx(that.element).slideIn(dir).setReverse(reverse) ];\n\n            if (previous) {\n                children.push( kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse) );\n            }\n\n            return children;\n        }\n    });\n\n    function createToggleEffect(name, property, defaultStart, defaultEnd) {\n        createEffect(name, {\n            directions: IN_OUT,\n\n            startValue: function(value) {\n                this._startValue = value;\n                return this;\n            },\n\n            endValue: function(value) {\n                this._endValue = value;\n                return this;\n            },\n\n            shouldHide: function() {\n               return this._shouldHide;\n            },\n\n            prepare: function(start, end) {\n                var that = this,\n                    startValue,\n                    endValue,\n                    out = this._direction === \"out\",\n                    startDataValue = that.element.data(property),\n                    startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n\n                if (startDataValueIsSet) {\n                    startValue = startDataValue;\n                } else if (typeof this._startValue !== \"undefined\") {\n                    startValue = this._startValue;\n                } else {\n                    startValue = out ? defaultStart : defaultEnd;\n                }\n\n                if (typeof this._endValue !== \"undefined\") {\n                    endValue = this._endValue;\n                } else {\n                    endValue = out ? defaultEnd : defaultStart;\n                }\n\n                if (this._reverse) {\n                    start[property] = endValue;\n                    end[property] = startValue;\n                } else {\n                    start[property] = startValue;\n                    end[property] = endValue;\n                }\n\n                that._shouldHide = end[property] === defaultEnd;\n            }\n        });\n    }\n\n    createToggleEffect(\"fade\", \"opacity\", 1, 0);\n    createToggleEffect(\"zoom\", \"scale\", 1, 0.01);\n\n    createEffect(\"slideMargin\", {\n        prepare: function(start, end) {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                origin = element.data(ORIGIN),\n                offset = options.offset,\n                margin,\n                reverse = that._reverse;\n\n            if (!reverse && origin === null) {\n                element.data(ORIGIN, parseFloat(element.css(\"margin-\" + options.axis)));\n            }\n\n            margin = (element.data(ORIGIN) || 0);\n            end[\"margin-\" + options.axis] = !reverse ? margin + offset : margin;\n        }\n    });\n\n    createEffect(\"slideTo\", {\n        prepare: function(start, end) {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                offset = options.offset.split(\",\"),\n                reverse = that._reverse;\n\n            if (transforms) {\n                end.translatex = !reverse ? offset[0] : 0;\n                end.translatey = !reverse ? offset[1] : 0;\n            } else {\n                end.left = !reverse ? offset[0] : 0;\n                end.top = !reverse ? offset[1] : 0;\n            }\n            element.css(\"left\");\n        }\n    });\n\n    createEffect(\"expand\", {\n        directions: [\"horizontal\", \"vertical\"],\n\n        restore: [ OVERFLOW ],\n\n        prepare: function(start, end) {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                reverse = that._reverse,\n                property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n                setLength = element[0].style[property],\n                oldLength = element.data(property),\n                length = parseFloat(oldLength || setLength),\n                realLength = round(element.css(property, AUTO)[property]());\n\n            start.overflow = HIDDEN;\n\n            length = (options && options.reset) ? realLength || length : length || realLength;\n\n            end[property] = (reverse ? 0 : length) + PX;\n            start[property] = (reverse ? length : 0) + PX;\n\n            if (oldLength === undefined) {\n                element.data(property, setLength);\n            }\n        },\n\n        shouldHide: function() {\n           return this._reverse;\n        },\n\n        teardown: function() {\n            var that = this,\n                element = that.element,\n                property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n                length = element.data(property);\n\n            if (length == AUTO || length === BLANK) {\n                setTimeout(function() { element.css(property, AUTO).css(property); }, 0); // jQuery animate complete callback in IE is called before the last animation step!\n            }\n        }\n    });\n\n    var TRANSFER_START_STATE = { position: \"absolute\", marginLeft: 0, marginTop: 0, scale: 1 };\n    /**\n     * Intersection point formulas are taken from here - http://zonalandeducation.com/mmts/intersections/intersectionOfTwoLines1/intersectionOfTwoLines1.html\n     * Formula for a linear function from two points from here - http://demo.activemath.org/ActiveMath2/search/show.cmd?id=mbase://AC_UK_calculus/functions/ex_linear_equation_two_points\n     * The transform origin point is the intersection point of the two lines from the top left corners/top right corners of the element and target.\n     * The math and variables below MAY BE SIMPLIFIED (zeroes removed), but this would make the formula too cryptic.\n     */\n    createEffect(\"transfer\", {\n        init: function(element, target) {\n            this.element = element;\n            this.options = { target: target };\n            this.restore = [];\n        },\n\n        setup: function() {\n            this.element.appendTo(document.body);\n        },\n\n        prepare: function(start, end) {\n            var that = this,\n                element = that.element,\n                outerBox = fx.box(element),\n                innerBox = fx.box(that.options.target),\n                currentScale = animationProperty(element, \"scale\"),\n                scale = fx.fillScale(innerBox, outerBox),\n                transformOrigin = fx.transformOrigin(innerBox, outerBox);\n\n            extend(start, TRANSFER_START_STATE);\n            end.scale = 1;\n\n            element.css(TRANSFORM, \"scale(1)\").css(TRANSFORM);\n            element.css(TRANSFORM, \"scale(\" + currentScale + \")\");\n\n            start.top = outerBox.top;\n            start.left = outerBox.left;\n            start.transformOrigin = transformOrigin.x + PX + \" \" + transformOrigin.y + PX;\n\n            if (that._reverse) {\n                start.scale = scale;\n            } else {\n                end.scale = scale;\n            }\n        }\n    });\n\n\n    var CLIPS = {\n        top: \"rect(auto auto $size auto)\",\n        bottom: \"rect($size auto auto auto)\",\n        left: \"rect(auto $size auto auto)\",\n        right: \"rect(auto auto auto $size)\"\n    };\n\n    var ROTATIONS = {\n        top:    { start: \"rotatex(0deg)\", end: \"rotatex(180deg)\" },\n        bottom: { start: \"rotatex(-180deg)\", end: \"rotatex(0deg)\" },\n        left:   { start: \"rotatey(0deg)\", end: \"rotatey(-180deg)\" },\n        right:  { start: \"rotatey(180deg)\", end: \"rotatey(0deg)\" }\n    };\n\n    function clipInHalf(container, direction) {\n        var vertical = kendo.directions[direction].vertical,\n            size = (container[vertical ? HEIGHT : WIDTH]() / 2) + \"px\";\n\n        return CLIPS[direction].replace(\"$size\", size);\n    }\n\n    createEffect(\"turningPage\", {\n        directions: FOUR_DIRECTIONS,\n\n        init: function(element, direction, container) {\n            Effect.prototype.init.call(this, element, direction);\n            this._container = container;\n        },\n\n        prepare: function(start, end) {\n            var that = this,\n                reverse = that._reverse,\n                direction = reverse ? directions[that._direction].reverse : that._direction,\n                rotation = ROTATIONS[direction];\n\n            start.zIndex = 1;\n\n            if (that._clipInHalf) {\n               start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n            }\n\n            start[BACKFACE] = HIDDEN;\n\n            end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n            start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n        },\n\n        setup: function() {\n            this._container.append(this.element);\n        },\n\n        face: function(value) {\n            this._face = value;\n            return this;\n        },\n\n        shouldHide: function() {\n            var that = this,\n                reverse = that._reverse,\n                face = that._face;\n\n            return (reverse && !face) || (!reverse && face);\n        },\n\n        clipInHalf: function(value) {\n            this._clipInHalf = value;\n            return this;\n        },\n\n        temporary: function() {\n            this.element.addClass('temp-page');\n            return this;\n        }\n    });\n\n    createEffect(\"staticPage\", {\n        directions: FOUR_DIRECTIONS,\n\n        init: function(element, direction, container) {\n            Effect.prototype.init.call(this, element, direction);\n            this._container = container;\n        },\n\n        restore: [\"clip\"],\n\n        prepare: function(start, end) {\n            var that = this,\n                direction = that._reverse ? directions[that._direction].reverse : that._direction;\n\n            start.clip = clipInHalf(that._container, direction);\n            start.opacity = 0.999;\n            end.opacity = 1;\n        },\n\n        shouldHide: function() {\n            var that = this,\n                reverse = that._reverse,\n                face = that._face;\n\n            return (reverse && !face) || (!reverse && face);\n        },\n\n        face: function(value) {\n            this._face = value;\n            return this;\n        }\n    });\n\n    createEffect(\"pageturn\", {\n        directions: [\"horizontal\", \"vertical\"],\n\n        init: function(element, direction, face, back) {\n            Effect.prototype.init.call(this, element, direction);\n            this.options = {};\n            this.options.face = face;\n            this.options.back = back;\n        },\n\n        children: function() {\n            var that = this,\n                options = that.options,\n                direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n                reverseDirection = kendo.directions[direction].reverse,\n                reverse = that._reverse,\n                temp,\n                faceClone = options.face.clone(true).removeAttr(\"id\"),\n                backClone = options.back.clone(true).removeAttr(\"id\"),\n                element = that.element;\n\n            if (reverse) {\n                temp = direction;\n                direction = reverseDirection;\n                reverseDirection = temp;\n            }\n\n            return [\n                kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n                kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n                kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n                kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n            ];\n        },\n\n        prepare: function(start, end) {\n            start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n            start.transformStyle = \"preserve-3d\";\n            // hack to trigger transition end.\n            start.opacity = 0.999;\n            end.opacity = 1;\n        },\n\n        teardown: function() {\n            this.element.find(\".temp-page\").remove();\n        }\n    });\n\n    createEffect(\"flip\", {\n        directions: [\"horizontal\", \"vertical\"],\n\n        init: function(element, direction, face, back) {\n            Effect.prototype.init.call(this, element, direction);\n            this.options = {};\n            this.options.face = face;\n            this.options.back = back;\n        },\n\n        children: function() {\n            var that = this,\n                options = that.options,\n                direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n                reverseDirection = kendo.directions[direction].reverse,\n                reverse = that._reverse,\n                temp,\n                element = that.element;\n\n            if (reverse) {\n                temp = direction;\n                direction = reverseDirection;\n                reverseDirection = temp;\n            }\n\n            return [\n                kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n                kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n            ];\n        },\n\n        prepare: function(start) {\n            start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n            start.transformStyle = \"preserve-3d\";\n        }\n    });\n\n    var RESTORE_OVERFLOW = !support.mobileOS.android;\n    var IGNORE_TRANSITION_EVENT_SELECTOR = \".km-touch-scrollbar, .km-actionsheet-wrapper\";\n\n    createEffect(\"replace\", {\n        _before: $.noop,\n        _after: $.noop,\n        init: function(element, previous, transitionClass) {\n            Effect.prototype.init.call(this, element);\n            this._previous = $(previous);\n            this._transitionClass = transitionClass;\n        },\n\n        duration: function() {\n            throw new Error(\"The replace effect does not support duration setting; the effect duration may be customized through the transition class rule\");\n        },\n\n        beforeTransition: function(callback) {\n            this._before = callback;\n            return this;\n        },\n\n        afterTransition: function(callback) {\n            this._after = callback;\n            return this;\n        },\n\n        _both: function() {\n            return $().add(this._element).add(this._previous);\n        },\n\n        _containerClass: function() {\n            var direction = this._direction,\n                containerClass = \"k-fx k-fx-start k-fx-\" + this._transitionClass;\n\n            if (direction) {\n                containerClass += \" k-fx-\" + direction;\n            }\n\n            if (this._reverse) {\n                containerClass += \" k-fx-reverse\";\n            }\n\n            return containerClass;\n        },\n\n        complete: function(e) {\n            if (!this.deferred || (e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR))) {\n                return;\n            }\n\n            var container = this.container;\n\n            container\n                .removeClass(\"k-fx-end\")\n                .removeClass(this._containerClass())\n                .off(transitions.event, this.completeProxy);\n\n            this._previous.hide().removeClass(\"k-fx-current\");\n            this.element.removeClass(\"k-fx-next\");\n\n            if (RESTORE_OVERFLOW) {\n                container.css(OVERFLOW, \"\");\n            }\n\n            if (!this.isAbsolute) {\n                this._both().css(POSITION, \"\");\n            }\n\n            this.deferred.resolve();\n            delete this.deferred;\n        },\n\n        run: function() {\n            if (this._additionalEffects && this._additionalEffects[0]) {\n                return this.compositeRun();\n            }\n\n            var that = this,\n                element = that.element,\n                previous = that._previous,\n                container = element.parents().filter(previous.parents()).first(),\n                both = that._both(),\n                deferred = $.Deferred(),\n                originalPosition = element.css(POSITION),\n                originalOverflow;\n\n            // edge case for grid/scheduler, where the previous is already destroyed.\n            if (!container.length) {\n                container = element.parent();\n            }\n\n            this.container = container;\n            this.deferred = deferred;\n            this.isAbsolute = originalPosition  == \"absolute\";\n\n            if (!this.isAbsolute) {\n                both.css(POSITION, \"absolute\");\n            }\n\n            if (RESTORE_OVERFLOW) {\n                originalOverflow = container.css(OVERFLOW);\n                container.css(OVERFLOW, \"hidden\");\n            }\n\n            if (!transitions) {\n                this.complete();\n            } else {\n                element.addClass(\"k-fx-hidden\");\n\n                container.addClass(this._containerClass());\n\n                this.completeProxy = $.proxy(this, \"complete\");\n                container.on(transitions.event, this.completeProxy);\n\n                kendo.animationFrame(function() {\n                    element.removeClass(\"k-fx-hidden\").addClass(\"k-fx-next\");\n                    previous.css(\"display\", \"\").addClass(\"k-fx-current\");\n                    that._before(previous, element);\n                    kendo.animationFrame(function() {\n                        container.removeClass(\"k-fx-start\").addClass(\"k-fx-end\");\n                        that._after(previous, element);\n                    });\n                });\n            }\n\n            return deferred.promise();\n        },\n\n        stop: function() {\n            this.complete();\n        }\n    });\n\n    var Animation = kendo.Class.extend({\n        init: function() {\n            var that = this;\n            that._tickProxy = proxy(that._tick, that);\n            that._started = false;\n        },\n\n        tick: $.noop,\n        done: $.noop,\n        onEnd: $.noop,\n        onCancel: $.noop,\n\n        start: function() {\n            if (!this.enabled()) {\n                return;\n            }\n\n            if (!this.done()) {\n                this._started = true;\n                kendo.animationFrame(this._tickProxy);\n            } else {\n                this.onEnd();\n            }\n        },\n\n        enabled: function() {\n            return true;\n        },\n\n        cancel: function() {\n            this._started = false;\n            this.onCancel();\n        },\n\n        _tick: function() {\n            var that = this;\n            if (!that._started) { return; }\n\n            that.tick();\n\n            if (!that.done()) {\n                kendo.animationFrame(that._tickProxy);\n            } else {\n                that._started = false;\n                that.onEnd();\n            }\n        }\n    });\n\n    var Transition = Animation.extend({\n        init: function(options) {\n            var that = this;\n            extend(that, options);\n            Animation.fn.init.call(that);\n        },\n\n        done: function() {\n            return this.timePassed() >= this.duration;\n        },\n\n        timePassed: function() {\n            return Math.min(this.duration, (new Date()) - this.startDate);\n        },\n\n        moveTo: function(options) {\n            var that = this,\n                movable = that.movable;\n\n            that.initial = movable[that.axis];\n            that.delta = options.location - that.initial;\n\n            that.duration = typeof options.duration == \"number\" ? options.duration : 300;\n\n            that.tick = that._easeProxy(options.ease);\n\n            that.startDate = new Date();\n            that.start();\n        },\n\n        _easeProxy: function(ease) {\n            var that = this;\n\n            return function() {\n                that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n            };\n        }\n    });\n\n    extend(Transition, {\n        easeOutExpo: function (t, b, c, d) {\n            return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n        },\n\n        easeOutBack: function (t, b, c, d, s) {\n            s = 1.70158;\n            return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n        }\n    });\n\n    fx.Animation = Animation;\n    fx.Transition = Transition;\n    fx.createEffect = createEffect;\n\n    fx.box = function(element) {\n        element = $(element);\n        var result = element.offset();\n        result.width = element.outerWidth();\n        result.height = element.outerHeight();\n        return result;\n    };\n\n    fx.transformOrigin = function(inner, outer) {\n        var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width),\n            y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n\n        return {\n            x: isNaN(x) ? 0 : x,\n            y: isNaN(y) ? 0 : y\n        };\n    };\n\n    fx.fillScale = function(inner, outer) {\n        return Math.min(inner.width / outer.width, inner.height / outer.height);\n    };\n\n    fx.fitScale = function(inner, outer) {\n        return Math.max(inner.width / outer.width, inner.height / outer.height);\n    };\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Observable = kendo.Observable,\n        SCRIPT = \"SCRIPT\",\n        INIT = \"init\",\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        TRANSITION_START = \"transitionStart\",\n        TRANSITION_END = \"transitionEnd\",\n\n        ATTACH = \"attach\",\n        DETACH = \"detach\",\n        sizzleErrorRegExp = /unrecognized expression/;\n\n    var View = Observable.extend({\n        init: function(content, options) {\n            var that = this;\n            options = options || {};\n\n            Observable.fn.init.call(that);\n            that.content = content;\n            that.id = kendo.guid();\n            that.tagName = options.tagName || \"div\";\n            that.model = options.model;\n            that._wrap = options.wrap !== false;\n            this._evalTemplate = options.evalTemplate || false;\n            that._fragments = {};\n\n            that.bind([ INIT, SHOW, HIDE, TRANSITION_START, TRANSITION_END ], options);\n        },\n\n        render: function(container) {\n            var that = this,\n                notInitialized = !that.element;\n\n            // The order below matters - kendo.bind should happen when the element is in the DOM, and show should be triggered after init.\n\n            if (notInitialized) {\n                that.element = that._createElement();\n            }\n\n            if (container) {\n                $(container).append(that.element);\n            }\n\n            if (notInitialized) {\n                kendo.bind(that.element, that.model);\n                that.trigger(INIT);\n            }\n\n            if (container) {\n                that._eachFragment(ATTACH);\n                that.trigger(SHOW);\n            }\n\n            return that.element;\n        },\n\n        clone: function(back) {\n            return new ViewClone(this);\n        },\n\n        triggerBeforeShow: function() {\n            return true;\n        },\n\n        showStart: function() {\n            this.element.css(\"display\", \"\");\n        },\n\n        showEnd: function() {\n        },\n\n        hideStart: function() {\n        },\n\n        hideEnd: function() {\n            this.hide();\n        },\n\n        beforeTransition: function(type){\n            this.trigger(TRANSITION_START, { type: type });\n        },\n\n        afterTransition: function(type){\n            this.trigger(TRANSITION_END, { type: type });\n        },\n\n        hide: function() {\n            this._eachFragment(DETACH);\n            this.element.detach();\n            this.trigger(HIDE);\n        },\n\n        destroy: function() {\n            var element = this.element;\n\n            if (element) {\n                kendo.unbind(element);\n                kendo.destroy(element);\n                element.remove();\n            }\n        },\n\n        fragments: function(fragments) {\n            $.extend(this._fragments, fragments);\n        },\n\n        _eachFragment: function(methodName) {\n            for (var placeholder in this._fragments) {\n                this._fragments[placeholder][methodName](this, placeholder);\n            }\n        },\n\n        _createElement: function() {\n            var that = this,\n                wrapper = \"<\" + that.tagName + \" />\",\n                element,\n                content;\n\n            try {\n                content = $(document.getElementById(that.content) || that.content); // support passing id without #\n\n                if (content[0].tagName === SCRIPT) {\n                    content = content.html();\n                }\n            } catch(e) {\n                if (sizzleErrorRegExp.test(e.message)) {\n                    content = that.content;\n                }\n            }\n\n            if (typeof content === \"string\") {\n                content = content.replace(/^\\s+|\\s+$/g, '');\n                if (that._evalTemplate) {\n                    content = kendo.template(content)(that.model || {});\n                }\n\n                element = $(wrapper).append(content);\n                // drop the wrapper if asked - this seems like the easiest (although not very intuitive) way to avoid messing up templates with questionable content, like this one for instance:\n                // <script id=\"my-template\">\n                // foo\n                // <span> Span </span>\n                // </script>\n                if (!that._wrap) {\n                   element = element.contents();\n                }\n            } else {\n                element = content;\n                if (that._evalTemplate) {\n                    element.html(kendo.template(element.html())(that.model || {}));\n                }\n                if (that._wrap) {\n                    element = element.wrapAll(wrapper).parent();\n                }\n            }\n\n            return element;\n        }\n    });\n\n    var ViewClone = kendo.Class.extend({\n        init: function(view) {\n            $.extend(this, {\n                element: view.element.clone(true),\n                transition: view.transition,\n                id: view.id\n            });\n\n            view.element.parent().append(this.element);\n        },\n\n        hideStart: $.noop,\n\n        hideEnd: function() {\n            this.element.remove();\n        },\n\n        beforeTransition: $.noop,\n        afterTransition: $.noop\n    });\n\n    var Layout = View.extend({\n        init: function(content, options) {\n            View.fn.init.call(this, content, options);\n            this.containers = {};\n        },\n\n        container: function(selector) {\n            var container = this.containers[selector];\n\n            if (!container) {\n                container = this._createContainer(selector);\n                this.containers[selector] = container;\n            }\n\n            return container;\n        },\n\n        showIn: function(selector, view, transition) {\n            this.container(selector).show(view, transition);\n        },\n\n        _createContainer: function(selector) {\n            var root = this.render(),\n                element = root.find(selector),\n                container;\n\n            if (!element.length && root.is(selector)) {\n                if (root.is(selector)) {\n                    element = root;\n                } else {\n\n                    throw new Error(\"can't find a container with the specified \" + selector + \" selector\");\n                }\n            }\n\n            container = new ViewContainer(element);\n\n            container.bind(\"accepted\", function(e) {\n                e.view.render(element);\n            });\n\n            return container;\n        }\n    });\n\n    var Fragment = View.extend({\n        attach: function(view, placeholder) {\n            view.element.find(placeholder).replaceWith(this.render());\n        },\n\n        detach: function() {\n        }\n    });\n\n    var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n\n    function parseTransition(transition) {\n        if (!transition){\n            return {};\n        }\n\n        var matches = transition.match(transitionRegExp) || [];\n\n        return {\n            type: matches[1],\n            direction: matches[3],\n            reverse: matches[5] === \"reverse\"\n        };\n    }\n\n    var ViewContainer = Observable.extend({\n        init: function(container) {\n            Observable.fn.init.call(this);\n            this.container = container;\n            this.history = [];\n            this.view = null;\n            this.running = false;\n        },\n\n        after: function() {\n            this.running = false;\n            this.trigger(\"complete\", {view: this.view});\n            this.trigger(\"after\");\n        },\n\n        end: function() {\n            this.view.showEnd();\n            this.previous.hideEnd();\n            this.after();\n        },\n\n        show: function(view, transition, locationID) {\n            if (!view.triggerBeforeShow()) {\n                this.trigger(\"after\");\n                return false;\n            }\n\n            locationID = locationID || view.id;\n\n            var that = this,\n                current = (view === that.view) ? view.clone() : that.view,\n                history = that.history,\n                previousEntry = history[history.length - 2] || {},\n                back = previousEntry.id === locationID,\n                // If explicit transition is set, it will be with highest priority\n                // Next we will try using the history record transition or the view transition configuration\n                theTransition = transition || ( back ? history[history.length - 1].transition : view.transition ),\n                transitionData = parseTransition(theTransition);\n\n            if (that.running) {\n                that.effect.stop();\n            }\n\n            if (theTransition === \"none\") {\n                theTransition = null;\n            }\n\n            that.trigger(\"accepted\", { view: view });\n            that.view = view;\n            that.previous = current;\n            that.running = true;\n\n            if (!back) {\n                history.push({ id: locationID, transition: theTransition });\n            } else {\n                history.pop();\n            }\n\n            if (!current) {\n                view.showStart();\n                view.showEnd();\n                that.after();\n                return true;\n            }\n\n            current.hideStart();\n\n            if (!theTransition || !kendo.effects.enabled) {\n                view.showStart();\n                that.end();\n            } else {\n                // hide the view element before init/show - prevents blinks on iPad\n                // the replace effect will remove this class\n                view.element.addClass(\"k-fx-hidden\");\n                view.showStart();\n                // do not reverse the explicit transition\n                if (back && !transition) {\n                    transitionData.reverse = !transitionData.reverse;\n                }\n\n                that.effect = kendo.fx(view.element).replace(current.element, transitionData.type)\n                    .beforeTransition(function() {\n                        view.beforeTransition(\"show\");\n                        current.beforeTransition(\"hide\");\n                    })\n                    .afterTransition(function() {\n                        view.afterTransition(\"show\");\n                        current.afterTransition(\"hide\");\n                    })\n                    .direction(transitionData.direction)\n                    .setReverse(transitionData.reverse);\n\n                that.effect.run().then(function() { that.end(); });\n            }\n\n            return true;\n        }\n    });\n\n    kendo.ViewContainer = ViewContainer;\n    kendo.Fragment = Fragment;\n    kendo.Layout = Layout;\n    kendo.View = View;\n    kendo.ViewClone = ViewClone;\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function(kendo) {\n    function Node() {\n        this.node = null;\n    }\n\n    Node.prototype = {\n        remove: function() {\n            this.node.parentNode.removeChild(this.node);\n        }\n    };\n\n    function Element(nodeName, attr, children) {\n        this.nodeName = nodeName;\n\n        this.attr = attr || {};\n\n        this.cssText = null;\n\n        this.children = children || [];\n    }\n\n    Element.prototype = new Node();\n\n    Element.prototype.render = function(parent, cached) {\n        var node;\n\n        var index;\n\n        var children = this.children;\n\n        var length = children.length;\n\n        if (!cached || cached.nodeName !== this.nodeName) {\n            if (cached) {\n                cached.remove();\n                cached = null;\n            }\n\n            node = document.createElement(this.nodeName);\n\n            for (index = 0; index < length; index++) {\n                children[index].render(node, null);\n            }\n\n            parent.appendChild(node);\n        } else {\n            node = cached.node;\n\n            var cachedChildren = cached.children;\n\n            if (Math.abs(cachedChildren.length - length) > 2) {\n                this.render({\n                    appendChild: function(node) {\n                        parent.replaceChild(node, cached.node);\n                    }\n                }, null);\n\n                return;\n            }\n\n            for (index = 0; index < length; index++) {\n                children[index].render(node, cachedChildren[index]);\n            }\n\n            for (index = length, length = cachedChildren.length; index < length; index++) {\n                cachedChildren[index].remove();\n            }\n        }\n\n        var attr = this.attr;\n        var attrName;\n\n        for (attrName in attr) {\n            if (!cached || attr[attrName] !== cached.attr[attrName]) {\n                if (node[attrName] !== undefined) {\n                    if (attrName !== \"style\") {\n                        node[attrName] = attr[attrName];\n                    } else {\n                        var cssText = \"\";\n\n                        var style = attr[attrName];\n\n                        for (var key in style) {\n                            cssText += key;\n                            cssText += \":\";\n                            cssText += style[key];\n                            cssText += \";\";\n                        }\n\n                        if (!cached || cached.cssText !== cssText) {\n                            node.style.cssText = cssText;\n                        }\n\n                        this.cssText = cssText;\n                    }\n                } else {\n                    node.setAttribute(attrName, attr[attrName]);\n                }\n            }\n        }\n\n        if (cached) {\n            for (attrName in cached.attr) {\n                if (attr[attrName] === undefined) {\n                    if (node[attrName] !== undefined) {\n                        if (attrName === \"style\") {\n                            node.style.cssText = \"\";\n                        } else if (attrName === \"className\") {\n                            node[attrName] = \"\";\n                        } else {\n                            node.removeAttribute(attrName);\n                        }\n                    } else {\n                        node.removeAttribute(attrName);\n                    }\n                }\n            }\n        }\n\n        this.node = node;\n    };\n\n    function TextNode(nodeValue) {\n        this.nodeValue = nodeValue;\n    }\n\n    TextNode.prototype = new Node();\n\n    TextNode.prototype.nodeName = \"#text\";\n\n    TextNode.prototype.render = function(parent, cached) {\n        var node;\n\n        if (!cached || cached.nodeName !== this.nodeName) {\n            if (cached) {\n                cached.remove();\n            }\n            node = document.createTextNode(this.nodeValue);\n\n            parent.appendChild(node);\n        } else {\n            node = cached.node;\n\n            if (this.nodeValue !== cached.nodeValue) {\n                node.nodeValue = this.nodeValue;\n            }\n        }\n\n        this.node = node;\n    };\n\n    function HtmlNode(html) {\n        this.html = html;\n    }\n\n    HtmlNode.prototype = {\n       nodeName: \"#html\",\n       remove: function() {\n           for (var index = 0; index < this.nodes.length; index++) {\n               this.nodes[index].parentNode.removeChild(this.nodes[index]);\n           }\n       },\n       render: function(parent, cached) {\n           if (!cached || cached.nodeName !== this.nodeName || cached.html !== this.html) {\n               if (cached) {\n                   cached.remove();\n               }\n\n               var lastChild = parent.lastChild;\n\n               parent.insertAdjacentHTML(\"beforeend\", this.html);\n\n               this.nodes = [];\n\n               for (var child = lastChild ? lastChild.nextSibling : parent.firstChild; child; child = child.nextSibling) {\n                   this.nodes.push(child);\n               }\n           } else {\n               this.nodes = cached.nodes.slice(0);\n           }\n       }\n    };\n\n    function html(value) {\n        return new HtmlNode(value);\n    }\n\n    function element(nodeName, attrs, children) {\n        return new Element(nodeName, attrs, children);\n    }\n\n    function text(value) {\n        return new TextNode(value);\n    }\n\n    function Tree(root) {\n       this.root = root;\n       this.children = [];\n    }\n\n    Tree.prototype = {\n        html: html,\n        element: element,\n        text: text,\n        render: function(children) {\n            var cachedChildren = this.children;\n\n            var index;\n\n            var length;\n\n            for (index = 0, length = children.length; index < length; index++) {\n               children[index].render(this.root, cachedChildren[index]);\n            }\n\n            for (index = length; index < cachedChildren.length; index++) {\n                cachedChildren[index].remove();\n            }\n\n            this.children = children;\n        }\n    };\n\n    kendo.dom = {\n        html: html,\n        text: text,\n        element: element,\n        Tree: Tree\n    };\n})(window.kendo);\n\n\n\n\n\n(function(kendo){\n\nvar RELS = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n           '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n               '<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>' +\n               '<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>' +\n               '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n            '</Relationships>';\n\nvar CORE = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" '+\n  'xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" ' +\n  'xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">' +\n   '<dc:creator>${creator}</dc:creator>' +\n   '<cp:lastModifiedBy>${lastModifiedBy}</cp:lastModifiedBy>' +\n   '<dcterms:created xsi:type=\"dcterms:W3CDTF\">${created}</dcterms:created>' +\n   '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">${modified}</dcterms:modified>' +\n'</cp:coreProperties>');\n\nvar APP = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">' +\n  '<Application>Microsoft Excel</Application>' +\n  '<DocSecurity>0</DocSecurity>' +\n  '<ScaleCrop>false</ScaleCrop>' +\n  '<HeadingPairs>' +\n      '<vt:vector size=\"2\" baseType=\"variant\">' +\n          '<vt:variant>' +\n              '<vt:lpstr>Worksheets</vt:lpstr>' +\n          '</vt:variant>' +\n          '<vt:variant>' +\n              '<vt:i4>${sheets.length}</vt:i4>' +\n          '</vt:variant>' +\n      '</vt:vector>' +\n  '</HeadingPairs>' +\n  '<TitlesOfParts>' +\n      '<vt:vector size=\"${sheets.length}\" baseType=\"lpstr\">' +\n      '# for (var idx = 0; idx < sheets.length; idx++) { #' +\n          '# if (sheets[idx].options.title) { #' +\n          '<vt:lpstr>${sheets[idx].options.title}</vt:lpstr>' +\n          '# } else { #' +\n          '<vt:lpstr>Sheet${idx+1}</vt:lpstr>' +\n          '# } #' +\n      '# } #' +\n      '</vt:vector>' +\n  '</TitlesOfParts>' +\n  '<LinksUpToDate>false</LinksUpToDate>' +\n  '<SharedDoc>false</SharedDoc>' +\n  '<HyperlinksChanged>false</HyperlinksChanged>' +\n  '<AppVersion>14.0300</AppVersion>' +\n'</Properties>');\n\nvar CONTENT_TYPES = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n   '<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' +\n   '<Default Extension=\"xml\" ContentType=\"application/xml\" />' +\n   '<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' +\n   '<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>' +\n   '<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>' +\n   '# for (var idx = 1; idx <= count; idx++) { #' +\n   '<Override PartName=\"/xl/worksheets/sheet${idx}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' +\n   '# } #' +\n   '<Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\" />' +\n   '<Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\" />' +\n'</Types>');\n\nvar WORKBOOK = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n  '<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"9303\" />' +\n  '<workbookPr defaultThemeVersion=\"124226\" />' +\n  '<bookViews>' +\n      '<workbookView xWindow=\"240\" yWindow=\"45\" windowWidth=\"18195\" windowHeight=\"7995\" />' +\n  '</bookViews>' +\n  '<sheets>' +\n  '# for (var idx = 0; idx < sheets.length; idx++) { #' +\n      '# if (sheets[idx].options.title) { #' +\n      '<sheet name=\"${sheets[idx].options.title}\" sheetId=\"${idx+1}\" r:id=\"rId${idx+1}\" />' +\n      '# } else { #' +\n      '<sheet name=\"Sheet${idx+1}\" sheetId=\"${idx+1}\" r:id=\"rId${idx+1}\" />' +\n      '# } #' +\n  '# } #' +\n  '</sheets>' +\n  '<calcPr calcId=\"145621\" />' +\n'</workbook>');\n\nvar WORKSHEET = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" mc:Ignorable=\"x14ac\">' +\n   '<dimension ref=\"A1\" />' +\n   '<sheetViews>' +\n       '<sheetView tabSelected=\"1\" workbookViewId=\"0\">' +\n       '# if (freezePane) { #' +\n       '<pane state=\"frozen\"' +\n       '# if (freezePane.colSplit) { #' +\n       ' xSplit=\"${freezePane.colSplit}\"' +\n       '# } #' +\n       '# if (freezePane.rowSplit) { #' +\n       ' ySplit=\"${freezePane.rowSplit}\"' +\n       '# } #' +\n       ' topLeftCell=\"${String.fromCharCode(65 + (freezePane.colSplit || 0))}${(freezePane.rowSplit || 0)+1}\"'+\n       '/>' +\n       '# } #' +\n       '</sheetView>' +\n   '</sheetViews>' +\n   '<sheetFormatPr defaultRowHeight=\"15\" x14ac:dyDescent=\"0.25\" />' +\n   '# if (columns) { #' +\n   '<cols>' +\n   '# for (var ci = 0; ci < columns.length; ci++) { #' +\n       '# var column = columns[ci]; #' +\n       '# if (column.width) { #' +\n       '<col min=\"${ci+1}\" max=\"${ci+1}\" customWidth=\"1\"' +\n       '# if (column.autoWidth) { #' +\n       ' width=\"${((column.width*7+5)/7*256)/256}\" bestFit=\"1\"' +\n       '# } else { #' +\n       ' width=\"${(((column.width)/7)*100+0.5)/100}\" ' +\n       '# } #' +\n       '/>' +\n       '# } #' +\n   '# } #' +\n   '</cols>' +\n   '# } #' +\n   '<sheetData>' +\n   '# for (var ri = 0; ri < data.length; ri++) { #' +\n       '# var row = data[ri]; #' +\n       '<row r=\"${ri + 1}\">' +\n       '# for (var ci = 0; ci < row.data.length; ci++) { #' +\n           '# var cell = row.data[ci];#' +\n           '<c r=\"${cell.ref}\"# if (cell.style) { # s=\"${cell.style}\" # } ## if (cell.type) { # t=\"${cell.type}\"# } #>' +\n           '# if (cell.value != null) { #' +\n               '<v>${cell.value}</v>' +\n           '# } #' +\n           '</c>' +\n       '# } #' +\n       '</row>' +\n   '# } #' +\n   '</sheetData>' +\n   '# if (filter) { #' +\n   '<autoFilter ref=\"${filter.from}:${filter.to}\"/>' +\n   '# } #' +\n   '# if (mergeCells.length) { #' +\n   '<mergeCells count=\"${mergeCells.length}\">' +\n       '# for (var ci = 0; ci < mergeCells.length; ci++) { #' +\n       '<mergeCell ref=\"${mergeCells[ci]}\"/>' +\n       '# } #' +\n   '</mergeCells>' +\n   '# } #' +\n   '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\" />' +\n'</worksheet>');\n\nvar WORKBOOK_RELS = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n'# for (var idx = 1; idx <= count; idx++) { #' +\n   '<Relationship Id=\"rId${idx}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet${idx}.xml\" />' +\n'# } #' +\n   '<Relationship Id=\"rId${count+1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\" />' +\n   '<Relationship Id=\"rId${count+2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\" />' +\n'</Relationships>');\n\nvar SHARED_STRINGS = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' +\n'<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${count}\" uniqueCount=\"${uniqueCount}\">' +\n'# for (var index in indexes) { #' +\n    '<si><t>${index.substring(1)}</t></si>' +\n'# } #' +\n'</sst>');\n\nvar STYLES = kendo.template(\n'<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n'<styleSheet' +\n   ' xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n   ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"'+\n   ' mc:Ignorable=\"x14ac\"'+\n   ' xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n   '<numFmts count=\"${formats.length}\">' +\n   '# for (var fi = 0; fi < formats.length; fi++) { #' +\n       '# var format = formats[fi]; #' +\n       '<numFmt formatCode=\"${format.format}\" numFmtId=\"${165+fi}\" />' +\n   '# } #' +\n   '</numFmts>' +\n   '<fonts count=\"${fonts.length+1}\" x14ac:knownFonts=\"1\">' +\n      '<font>' +\n         '<sz val=\"11\" />' +\n         '<color theme=\"1\" />' +\n         '<name val=\"Calibri\" />' +\n         '<family val=\"2\" />' +\n         '<scheme val=\"minor\" />' +\n      '</font>' +\n   '# for (var fi = 0; fi < fonts.length; fi++) { #' +\n       '# var font = fonts[fi]; #' +\n      '<font>' +\n         '# if (font.bold) { #' +\n            '<b/>' +\n         '# } #' +\n         '# if (font.italic) { #' +\n            '<i/>' +\n         '# } #' +\n         '# if (font.underline) { #' +\n            '<u/>' +\n         '# } #' +\n         '# if (font.color) { #' +\n         '<color rgb=\"${font.color}\" />' +\n         '# } else { #' +\n         '<color theme=\"1\" />' +\n         '# } #' +\n         '# if (font.fontSize) { #' +\n         '<sz val=\"${font.fontSize}\" />' +\n         '# } else { #' +\n         '<sz val=\"11\" />' +\n         '# } #' +\n         '# if (font.fontName) { #' +\n         '<name val=\"${font.fontName}\" />' +\n         '# } else { #' +\n         '<name val=\"Calibri\" />' +\n         '<scheme val=\"minor\" />' +\n         '# } #' +\n         '<family val=\"2\" />' +\n      '</font>' +\n   '# } #' +\n   '</fonts>' +\n    '<fills count=\"${fills.length+1}\">' +\n        '<fill><patternFill patternType=\"none\"/></fill>' +\n        '<fill><patternFill patternType=\"gray125\"/></fill>' +\n    '# for (var fi = 0; fi < fills.length; fi++) { #' +\n       '# var fill = fills[fi]; #' +\n       '# if (fill.background) { #' +\n        '<fill>' +\n            '<patternFill patternType=\"solid\">' +\n                '<fgColor rgb=\"${fill.background}\"/>' +\n            '</patternFill>' +\n        '</fill>' +\n       '# } #' +\n    '# } #' +\n    '</fills>' +\n    '<borders count=\"1\">' +\n        '<border><left/><right/><top/><bottom/><diagonal/></border>' +\n    '</borders>' +\n   '<cellXfs count=\"${styles.length+1}\">' +\n       '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>' +\n   '# for (var si = 0; si < styles.length; si++) { #' +\n       '# var style = styles[si]; #' +\n       '<xf xfid=\"0\"' +\n       '# if (style.fontId) { #' +\n          ' fontId=\"${style.fontId}\" applyFont=\"1\"' +\n       '# } #' +\n       '# if (style.fillId) { #' +\n          ' fillId=\"${style.fillId}\" applyFill=\"1\"' +\n       '# } #' +\n       '# if (style.numFmtId) { #' +\n          ' numFmtId=\"${style.numFmtId}\" applyNumberFormat=\"1\"' +\n       '# } #' +\n       '# if (style.hAlign || style.vAlign || style.wrap) { #' +\n       ' applyAlignment=\"1\"' +\n       '# } #' +\n       '>' +\n       '# if (style.hAlign || style.vAlign || style.wrap) { #' +\n       '<alignment' +\n       '# if (style.hAlign) { #' +\n       ' horizontal=\"${style.hAlign}\"' +\n       '# } #' +\n       '# if (style.vAlign) { #' +\n       ' vertical=\"${style.vAlign}\"' +\n       '# } #' +\n       '# if (style.wrap) { #' +\n       ' wrapText=\"1\"' +\n       '# } #' +\n       '/>' +\n       '# } #' +\n       '</xf>' +\n   '# } #' +\n   '</cellXfs>' +\n   '<dxfs count=\"0\" />' +\n   '<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleMedium9\" />' +\n'</styleSheet>');\n\nfunction numChar(colIndex) {\n   var letter = Math.floor(colIndex / 26) - 1;\n\n   return (letter >= 0 ? numChar(letter) : \"\") + String.fromCharCode(65 + (colIndex % 26));\n}\n\nfunction ref(rowIndex, colIndex) {\n    return numChar(colIndex) + (rowIndex + 1);\n}\n\nvar DATE_EPOCH = kendo.timezone.remove(new Date(1900, 0, 0), \"Etc/UTC\");\n\nvar Worksheet = kendo.Class.extend({\n    init: function(options, sharedStrings, styles) {\n        this.options = options;\n        this._strings = sharedStrings;\n        this._styles = styles;\n        this._mergeCells = [];\n    },\n    toXML: function() {\n        var rows = this.options.rows || [];\n        var filter = this.options.filter;\n        var spans = {};\n\n        this._maxCellIndex = 0;\n\n        return WORKSHEET({\n            freezePane: this.options.freezePane,\n            columns: this.options.columns,\n            data: $.map(rows, $.proxy(this._row, this, rows, spans)),\n            mergeCells: this._mergeCells,\n            filter: filter ? { from: ref(0, filter.from), to: ref(0, filter.to) } : null\n        });\n    },\n    _row: function(rows, spans, row, rowIndex) {\n        if (this._cellIndex && this._cellIndex > this._maxCellIndex) {\n            this._maxCellIndex = this._cellIndex;\n        }\n\n        this._cellIndex = 0;\n\n        var cell;\n        var data = [];\n        var cells = row.cells;\n\n        for (var idx = 0, length = cells.length; idx < length; idx ++) {\n            cell = this._cell(cells[idx], spans, rowIndex);\n\n            if (cell) {\n                data = data.concat(cell);\n            }\n        }\n\n        var columnInfo;\n\n        while (this._cellIndex < this._maxCellIndex) {\n            columnInfo = spans[this._cellIndex];\n            if (columnInfo) {\n                columnInfo.rowSpan -= 1;\n            }\n\n            data.push({ ref: ref(rowIndex, this._cellIndex) });\n            this._cellIndex++;\n        }\n\n        return {\n            data: data\n        };\n    },\n    _lookupString: function(value) {\n        var key = \"$\" + value;\n        var index = this._strings.indexes[key];\n\n        if (index !== undefined) {\n            value = index;\n        } else {\n            value = this._strings.indexes[key] = this._strings.uniqueCount;\n            this._strings.uniqueCount ++;\n        }\n\n        this._strings.count ++;\n\n        return value;\n    },\n    _lookupStyle: function(style) {\n        var json = kendo.stringify(style);\n\n        if (json == \"{}\") {\n            return 0;\n        }\n\n        var index = $.inArray(json, this._styles);\n\n        if (index < 0) {\n            index = this._styles.push(json) - 1;\n        }\n\n        // There is one default style\n        return index + 1;\n    },\n    _cell: function(data, spans, rowIndex) {\n        if (!data) {\n            this._cellIndex++;\n            return;\n        }\n\n        var value = data.value;\n\n        var style = {\n            bold: data.bold,\n            color: data.color,\n            background: data.background,\n            italic: data.italic,\n            underline: data.underline,\n            fontName: data.fontName,\n            fontSize: data.fontSize,\n            format: data.format,\n            hAlign: data.hAlign,\n            vAlign: data.vAlign,\n            wrap: data.wrap\n        };\n\n        var columns = this.options.columns || [];\n\n        var column = columns[this._cellIndex];\n\n        if (column && column.autoWidth) {\n            column.width = Math.max(column.width || 0, (\"\" + value).length);\n        }\n\n        var type = typeof value;\n\n        if (type === \"string\") {\n            value = this._lookupString(value);\n            type = \"s\";\n        } else if (type === \"number\") {\n            type = \"n\";\n        } else if (type === \"boolean\") {\n            type = \"b\";\n            value = +value;\n        } else if (value && value.getTime) {\n            type = null;\n            value = (kendo.timezone.remove(value, \"Etc/UTC\") - DATE_EPOCH) / kendo.date.MS_PER_DAY + 1;\n            if (!style.format) {\n                style.format = \"mm-dd-yy\";\n            }\n        } else {\n            type = null;\n            value = \"\";\n        }\n\n        style = this._lookupStyle(style);\n\n        var cells = [];\n        var colSpanLength, cellRef;\n\n        var columnInfo = spans[this._cellIndex] || {};\n\n        while (columnInfo.rowSpan > 1) {\n            columnInfo.rowSpan -= 1;\n\n            colSpanLength = columnInfo.colSpan;\n\n            while(colSpanLength > 0) {\n                cells.push({ ref: ref(rowIndex, this._cellIndex) });\n                colSpanLength--;\n\n                this._cellIndex++;\n            }\n\n            columnInfo = spans[this._cellIndex] || {};\n        }\n\n        cellRef = ref(rowIndex, this._cellIndex);\n        cells.push({\n            value: value,\n            type: type,\n            style: style,\n            ref: cellRef\n        });\n\n        var colSpan = data.colSpan || 1;\n        var rowSpan = data.rowSpan || 1;\n\n        if (colSpan > 1 || rowSpan > 1) {\n            if (rowSpan > 1) {\n                spans[this._cellIndex] = {\n                    colSpan: colSpan,\n                    rowSpan: rowSpan\n                };\n            }\n\n            for (var ci = 1; ci < colSpan; ci++) {\n                this._cellIndex++;\n                cells.push({ ref: ref(rowIndex, this._cellIndex) });\n            }\n\n            this._mergeCells.push(cellRef + \":\" + ref(rowIndex + rowSpan - 1, this._cellIndex));\n        }\n\n        this._cellIndex ++;\n\n        return cells;\n    }\n});\n\nvar defaultFormats = {\n    \"General\": 0,\n    \"0\": 1,\n    \"0.00\": 2,\n    \"#,##0\": 3,\n    \"#,##0.00\": 4,\n    \"0%\": 9,\n    \"0.00%\": 10,\n    \"0.00E+00\": 11,\n    \"# ?/?\": 12,\n    \"# ??/??\": 13,\n    \"mm-dd-yy\": 14,\n    \"d-mmm-yy\": 15,\n    \"d-mmm\": 16,\n    \"mmm-yy\": 17,\n    \"h:mm AM/PM\": 18,\n    \"h:mm:ss AM/PM\": 19,\n    \"h:mm\": 20,\n    \"h:mm:ss\": 21,\n    \"m/d/yy h:mm\": 22,\n    \"#,##0 ;(#,##0)\": 37,\n    \"#,##0 ;[Red](#,##0)\": 38,\n    \"#,##0.00;(#,##0.00)\": 39,\n    \"#,##0.00;[Red](#,##0.00)\": 40,\n    \"mm:ss\": 45,\n    \"[h]:mm:ss\": 46,\n    \"mmss.0\": 47,\n    \"##0.0E+0\": 48,\n    \"@\": 49,\n    \"[$-404]e/m/d\": 27,\n    \"m/d/yy\": 30,\n    \"t0\": 59,\n    \"t0.00\": 60,\n    \"t#,##0\": 61,\n    \"t#,##0.00\": 62,\n    \"t0%\": 67,\n    \"t0.00%\": 68,\n    \"t# ?/?\": 69,\n    \"t# ??/??\": 70\n};\n\nfunction convertColor(color) {\n    if (color.length < 6) {\n        color = color.replace(/(\\w)/g, function($0, $1) {\n            return $1 + $1;\n        });\n    }\n\n    color = color.substring(1).toUpperCase();\n\n    if (color.length < 8) {\n        color = \"FF\" + color;\n    }\n\n    return color;\n}\n\nvar Workbook = kendo.Class.extend({\n    init: function(options) {\n        this.options = options || {};\n        this._strings = {\n            indexes: {},\n            count: 0,\n            uniqueCount: 0\n        };\n        this._styles = [];\n\n        this._sheets = $.map(this.options.sheets || [], $.proxy(function(options) {\n            return new Worksheet(options, this._strings, this._styles);\n        }, this));\n    },\n    toDataURL: function() {\n        if (typeof JSZip === \"undefined\") {\n           throw new Error(\"JSZip not found. Check http://docs.telerik.com/kendo-ui/framework/excel/introduction#requirements for more details.\");\n        }\n\n        var zip = new JSZip();\n\n        var docProps = zip.folder(\"docProps\");\n\n        docProps.file(\"core.xml\", CORE({\n            creator: this.options.creator || \"Kendo UI\",\n            lastModifiedBy: this.options.creator || \"Kendo UI\",\n            created: this.options.date || new Date().toJSON(),\n            modified: this.options.date || new Date().toJSON()\n        }));\n\n        var sheetCount = this._sheets.length;\n\n        docProps.file(\"app.xml\", APP({ sheets: this._sheets }));\n\n        var rels = zip.folder(\"_rels\");\n        rels.file(\".rels\", RELS);\n\n        var xl = zip.folder(\"xl\");\n\n        var xlRels = xl.folder(\"_rels\");\n        xlRels.file(\"workbook.xml.rels\", WORKBOOK_RELS({ count: sheetCount }));\n\n        xl.file(\"workbook.xml\", WORKBOOK({ sheets: this._sheets }));\n\n        var worksheets = xl.folder(\"worksheets\");\n\n        for (var idx = 0; idx < sheetCount; idx++) {\n            worksheets.file(kendo.format(\"sheet{0}.xml\", idx+1), this._sheets[idx].toXML());\n        }\n\n        var styles = $.map(this._styles, $.parseJSON);\n\n        var hasFont = function(style) {\n            return style.underline || style.bold || style.italic || style.color || style.fontName || style.fontSize;\n        };\n\n        var fonts = $.map(styles, function(style) {\n            if (style.color) {\n                style.color = convertColor(style.color);\n            }\n\n            if (hasFont(style)) {\n                return style;\n            }\n        });\n\n        var formats = $.map(styles, function(style) {\n            if (style.format && defaultFormats[style.format] === undefined) {\n                return style;\n            }\n        });\n\n       var fills = $.map(styles, function(style) {\n            if (style.background) {\n                style.background = convertColor(style.background);\n                return style;\n            }\n        });\n\n        xl.file(\"styles.xml\", STYLES({\n           fonts: fonts,\n           fills: fills,\n           formats: formats,\n           styles: $.map(styles, function(style) {\n              var result = {};\n\n              if (hasFont(style)) {\n                  result.fontId = $.inArray(style, fonts) + 1;\n              }\n\n              if (style.background) {\n                  result.fillId = $.inArray(style, fills) + 2;\n              }\n\n              result.hAlign = style.hAlign;\n              result.vAlign = style.vAlign;\n              result.wrap = style.wrap;\n\n              if (style.format) {\n                  if (defaultFormats[style.format] !== undefined) {\n                      result.numFmtId = defaultFormats[style.format];\n                  } else {\n                      result.numFmtId = 165 + $.inArray(style, formats);\n                  }\n              }\n\n              return result;\n           })\n        }));\n\n        xl.file(\"sharedStrings.xml\", SHARED_STRINGS(this._strings));\n\n        zip.file(\"[Content_Types].xml\", CONTENT_TYPES( { count: sheetCount }));\n\n        return \"data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,\" + zip.generate({ compression: \"DEFLATE\" });\n    }\n});\n\nkendo.ooxml = {\n    Workbook: Workbook,\n    Worksheet: Worksheet\n};\n\n})(kendo);\n\n\n\n\n\n(function($, kendo){\n\nkendo.ExcelExporter = kendo.Class.extend({\n    init: function(options) {\n        options.columns = this._trimColumns(options.columns || []);\n\n        this.allColumns = $.map(this._leafColumns(options.columns || []), this._prepareColumn);\n\n        this.columns = $.grep(this.allColumns, function(column) { return !column.hidden; });\n\n        this.options = options;\n\n        var dataSource = options.dataSource;\n\n        if (dataSource instanceof kendo.data.DataSource) {\n            this.dataSource = new dataSource.constructor($.extend(\n                {},\n                dataSource.options,\n                {\n                    page: options.allPages ? 0 : dataSource.page(),\n                    filter: dataSource.filter(),\n                    pageSize: options.allPages ? dataSource.total() : dataSource.pageSize(),\n                    sort: dataSource.sort(),\n                    group: dataSource.group(),\n                    aggregate: dataSource.aggregate()\n                }));\n\n            var data = dataSource.data();\n\n            if (data.length > 0) {\n                this.dataSource.data(data.toJSON());\n            }\n\n        } else {\n            this.dataSource = kendo.data.DataSource.create(dataSource);\n        }\n    },\n    _trimColumns: function(columns) {\n        var that = this;\n        return $.grep(columns, function(column) {\n            var result = !(!column.field);\n            if (!result && column.columns) {\n                result = that._trimColumns(column.columns).length > 0;\n            }\n            return result;\n        });\n    },\n    _leafColumns: function(columns) {\n        var result = [];\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (!columns[idx].columns) {\n                result.push(columns[idx]);\n                continue;\n            }\n            result = result.concat(this._leafColumns(columns[idx].columns));\n        }\n\n        return result;\n    },\n    workbook: function() {\n        return $.Deferred($.proxy(function(d) {\n            this.dataSource.fetch()\n                .then($.proxy(function() {\n                    var workbook = {\n                        sheets: [\n                            {\n                               columns: this._columns(),\n                               rows: this._rows(),\n                               freezePane: this._freezePane(),\n                               filter: this._filter()\n                            }\n                        ]\n                    };\n                    d.resolve(workbook, this.dataSource.view());\n                }, this));\n        }, this)).promise();\n    },\n    _prepareColumn: function(column) {\n        if (!column.field) {\n            return;\n        }\n\n        var value = function(dataItem) {\n            return dataItem.get(column.field);\n        };\n\n        var values = null;\n\n        if (column.values) {\n            values = {};\n\n            $.each(column.values, function(item) {\n               values[this.value] = this.text;\n            });\n\n            value = function(dataItem) {\n                return values[dataItem.get(column.field)];\n            };\n        }\n\n        return $.extend({}, column, {\n            value: value,\n            values: values,\n            groupHeaderTemplate: kendo.template(column.groupHeaderTemplate || \"${title}: ${value}\"),\n            groupFooterTemplate: column.groupFooterTemplate ? kendo.template(column.groupFooterTemplate) : null,\n            footerTemplate: column.footerTemplate ? kendo.template(column.footerTemplate) : null\n        });\n    },\n    _filter: function() {\n        if (!this.options.filterable) {\n            return null;\n        }\n\n        var depth = this._depth();\n\n        return {\n            from: depth,\n            to: depth + this.columns.length - 1\n        };\n    },\n    _dataRows: function(dataItems, level) {\n        var depth = this._depth();\n        var rows = $.map(dataItems, $.proxy(function(dataItem) {\n            if (this._hierarchical()) {\n                level = this.dataSource.level(dataItem) + 1;\n            }\n\n            var cells = $.map(new Array(level), function() {\n                return {\n                    background: \"#dfdfdf\",\n                    color: \"#333\"\n                };\n            });\n\n            // grouped\n            if (depth && dataItem.items) {\n                var column = $.grep(this.allColumns, function(column) {\n                    return column.field == dataItem.field;\n                })[0];\n\n                var title = column && column.title ? column.title : dataItem.field;\n                var template = column ? column.groupHeaderTemplate : null;\n                var value = title + \": \" + dataItem.value;\n                var group = $.extend({\n                        title: title,\n                        field: dataItem.field,\n                        value: column && column.values? column.values[dataItem.value] : dataItem.value,\n                        aggregates: dataItem.aggregates\n                    }, dataItem.aggregates[dataItem.field]);\n\n                if (template) {\n                    value = template(group);\n                }\n\n                cells.push( {\n                    value: value,\n                    background: \"#dfdfdf\",\n                    color: \"#333\",\n                    colSpan: this.columns.length + depth - level\n                } );\n\n                var rows = this._dataRows(dataItem.items, level + 1);\n\n                rows.unshift({\n                    type: \"group-header\",\n                    cells: cells\n                });\n\n                return rows.concat(this._footer(dataItem, level+1));\n            } else {\n                var dataCells = $.map(this.columns, $.proxy(this._cell, this, dataItem));\n\n                if (this._hierarchical()) {\n                    dataCells[0].colSpan = depth - level + 1;\n                }\n\n                return {\n                    type: \"data\",\n                    cells: cells.concat(dataCells)\n                };\n            }\n        }, this));\n\n        return rows;\n    },\n    _footer: function(dataItem, level) {\n        var rows = [];\n        var footer = false;\n\n        var cells = $.map(this.columns, function(column) {\n            if (column.groupFooterTemplate) {\n                footer = true;\n                return {\n                    background: \"#dfdfdf\",\n                    color: \"#333\",\n                    value: column.groupFooterTemplate(dataItem.aggregates[column.field])\n                };\n            } else {\n                return {\n                    background: \"#dfdfdf\",\n                    color: \"#333\"\n                };\n            }\n        });\n\n        if (footer) {\n            rows.push({\n                type: \"group-footer\",\n                cells: $.map(new Array(level), function() {\n                    return {\n                        background: \"#dfdfdf\",\n                        color: \"#333\"\n                    };\n                }).concat(cells)\n            });\n        }\n\n        return rows;\n    },\n    _isColumnVisible: function(column) {\n        return this._visibleColumns([column]).length > 0 && (column.field || column.columns);\n    },\n    _visibleColumns: function(columns) {\n        var that = this;\n        return $.grep(columns, function(column) {\n            var result = !column.hidden;\n            if (result && column.columns) {\n                result = that._visibleColumns(column.columns).length > 0;\n            }\n            return result;\n        });\n    },\n    _headerRow: function(row, groups) {\n        var headers = $.map(row.cells, function(cell) {\n            return {\n                background: \"#7a7a7a\",\n                color: \"#fff\",\n                value: cell.title,\n                colSpan: cell.colSpan > 1 ? cell.colSpan : 1,\n                rowSpan: row.rowSpan > 1 && !cell.colSpan ? row.rowSpan : 1\n            };\n        });\n\n        if (this._hierarchical()) {\n            headers[0].colSpan = this._depth() + 1;\n        }\n\n        return {\n            type: \"header\",\n            cells: $.map(new Array(groups.length), function() {\n                return {\n                    background: \"#7a7a7a\",\n                    color: \"#fff\"\n                };\n            }).concat(headers)\n        };\n    },\n    _prependHeaderRows: function(rows) {\n        var groups = this.dataSource.group();\n\n        var headerRows = [{ rowSpan: 1, cells: [], index: 0 }];\n\n        this._prepareHeaderRows(headerRows, this.options.columns);\n\n        for (var idx = headerRows.length - 1; idx >= 0; idx--) {\n            rows.unshift(this._headerRow(headerRows[idx], groups));\n        }\n    },\n    _prepareHeaderRows: function(rows, columns, parentCell, parentRow) {\n        var row = parentRow || rows[rows.length - 1];\n\n        var childRow = rows[row.index + 1];\n        var totalColSpan = 0;\n        var column;\n        var cell;\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            column = columns[idx];\n            if (this._isColumnVisible(column)) {\n\n                cell = { title: column.title || column.field, colSpan: 0 };\n                row.cells.push(cell);\n\n                if (column.columns && column.columns.length) {\n                    if (!childRow) {\n                        childRow = { rowSpan: 0, cells: [], index: rows.length };\n                        rows.push(childRow);\n                    }\n                    cell.colSpan = this._trimColumns(this._visibleColumns(column.columns)).length;\n                    this._prepareHeaderRows(rows, column.columns, cell, childRow);\n                    totalColSpan += cell.colSpan - 1;\n                    row.rowSpan = rows.length - row.index;\n                }\n            }\n        }\n        if (parentCell) {\n            parentCell.colSpan += totalColSpan;\n        }\n    },\n    _rows: function() {\n        var groups = this.dataSource.group();\n\n        var rows = this._dataRows(this.dataSource.view(), 0);\n\n        if (this.columns.length) {\n\n            this._prependHeaderRows(rows);\n\n            var footer = false;\n\n            var cells = $.map(this.columns, $.proxy(function(column) {\n                if (column.footerTemplate) {\n                    footer = true;\n                    var aggregates = this.dataSource.aggregates();\n                    var ctx = aggregates[column.field] || {};\n                    ctx.data = aggregates;\n\n                    return {\n                        background: \"#dfdfdf\",\n                        color: \"#333\",\n                        value: column.footerTemplate(ctx)\n                    };\n                } else {\n                    return {\n                        background: \"#dfdfdf\",\n                        color: \"#333\"\n                    };\n                }\n            }, this));\n\n            if (footer) {\n                rows.push({\n                    type: \"footer\",\n                    cells: $.map(new Array(groups.length), function() {\n                        return {\n                            background: \"#dfdfdf\",\n                            color: \"#333\"\n                        };\n                    }).concat(cells)\n                });\n            }\n        }\n\n        return rows;\n    },\n    _headerDepth: function(columns) {\n        var result = 1;\n        var max = 0;\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (columns[idx].columns) {\n                var temp = this._headerDepth(columns[idx].columns);\n                if (temp > max) {\n                    max = temp;\n                }\n            }\n        }\n        return result + max;\n    },\n    _freezePane: function() {\n        var columns = this._visibleColumns(this.options.columns || []);\n\n        var colSplit = this._trimColumns(this._leafColumns($.grep(columns, function(column) {\n            return column.locked;\n        }))).length;\n\n        return {\n            rowSplit: this._headerDepth(columns),\n            colSplit: colSplit? colSplit + this.dataSource.group().length : 0\n        };\n    },\n    _cell: function(dataItem, column) {\n        return {\n            value: column.value(dataItem)\n        };\n    },\n    _hierarchical: function() {\n        return this.options.hierarchy && this.dataSource.level;\n    },\n    _depth: function() {\n        var dataSource = this.dataSource;\n        var depth = 0;\n        var view, i, level;\n\n        if (this._hierarchical()) {\n            view = dataSource.view();\n\n            for (i = 0; i < view.length; i++) {\n                level = dataSource.level(view[i]);\n\n                if (level > depth) {\n                    depth = level;\n                }\n            }\n\n            depth++;\n        } else {\n            depth = dataSource.group().length;\n        }\n\n        return depth;\n    },\n    _columns: function() {\n        var depth = this._depth();\n        var columns = $.map(new Array(depth), function() {\n            return { width: 20 };\n        });\n\n        return columns.concat($.map(this.columns, function(column) {\n            return {\n                width: parseInt(column.width, 10),\n                autoWidth: column.width ? false : true\n            };\n        }));\n    }\n});\n\nkendo.ExcelMixin = {\n    extend: function(proto) {\n       proto.events.push(\"excelExport\");\n       proto.options.excel = $.extend(proto.options.excel, this.options);\n       proto.saveAsExcel = this.saveAsExcel;\n    },\n    options: {\n        proxyURL: \"\",\n        allPages: false,\n        filterable: false,\n        fileName: \"Export.xlsx\"\n    },\n    saveAsExcel: function() {\n        var excel = this.options.excel || {};\n\n        var exporter = new kendo.ExcelExporter({\n            columns: this.columns,\n            dataSource: this.dataSource,\n            allPages: excel.allPages,\n            filterable: excel.filterable,\n            hierarchy: excel.hierarchy\n        });\n\n        exporter.workbook().then($.proxy(function(book, data) {\n            if (!this.trigger(\"excelExport\", { workbook: book, data: data })) {\n                var workbook = new kendo.ooxml.Workbook(book);\n\n                kendo.saveAs({\n                    dataURI: workbook.toDataURL(),\n                    fileName: book.fileName || excel.fileName,\n                    proxyURL: excel.proxyURL,\n                    forceProxy: excel.forceProxy\n                });\n            }\n        }, this));\n    }\n};\n\n})(kendo.jQuery, kendo);\n\n\n\n\n\n(function($) {\n    var transport = kendo.data.RemoteTransport.extend({\n        init: function (options) {\n            var signalr = options && options.signalr ? options.signalr : {};\n\n            var promise = signalr.promise;\n\n            if (!promise) {\n                throw new Error('The \"promise\" option must be set.');\n            }\n\n            if (typeof promise.done != \"function\" || typeof promise.fail != \"function\") {\n                throw new Error('The \"promise\" option must be a Promise.');\n            }\n\n            this.promise = promise;\n\n            var hub = signalr.hub;\n\n            if (!hub) {\n                throw new Error('The \"hub\" option must be set.');\n            }\n\n            if (typeof hub.on != \"function\" || typeof hub.invoke != \"function\") {\n                throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n            }\n\n            this.hub = hub;\n\n            kendo.data.RemoteTransport.fn.init.call(this, options);\n        },\n\n        push: function(callbacks) {\n            var client = this.options.signalr.client || {};\n\n            if (client.create) {\n                this.hub.on(client.create, callbacks.pushCreate);\n            }\n\n            if (client.update) {\n                this.hub.on(client.update, callbacks.pushUpdate);\n            }\n\n            if (client.destroy) {\n                this.hub.on(client.destroy, callbacks.pushDestroy);\n            }\n        },\n\n        _crud: function(options, type) {\n            var hub = this.hub;\n\n            var server = this.options.signalr.server;\n\n            if (!server || !server[type]) {\n                throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n            }\n\n            var args = [server[type]];\n\n            var data = this.parameterMap(options.data, type);\n\n            if (!$.isEmptyObject(data)) {\n                args.push(data);\n            }\n\n            this.promise.done(function() {\n                hub.invoke.apply(hub, args)\n                          .done(options.success)\n                          .fail(options.error);\n            });\n        },\n\n        read: function(options) {\n            this._crud(options, \"read\");\n        },\n\n        create: function(options) {\n            this._crud(options, \"create\");\n        },\n\n        update: function(options) {\n            this._crud(options, \"update\");\n        },\n\n        destroy: function(options) {\n            this._crud(options, \"destroy\");\n        }\n    });\n\n    $.extend(true, kendo.data, {\n        transports: {\n            signalr: transport\n        }\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, parseFloat, parseInt) {\n    var Color = function(value) {\n        var color = this,\n            formats = Color.formats,\n            re,\n            processor,\n            parts,\n            i,\n            channels;\n\n        if (arguments.length === 1) {\n            value = color.resolveColor(value);\n\n            for (i = 0; i < formats.length; i++) {\n                re = formats[i].re;\n                processor = formats[i].process;\n                parts = re.exec(value);\n\n                if (parts) {\n                    channels = processor(parts);\n                    color.r = channels[0];\n                    color.g = channels[1];\n                    color.b = channels[2];\n                }\n            }\n        } else {\n            color.r = arguments[0];\n            color.g = arguments[1];\n            color.b = arguments[2];\n        }\n\n        color.r = color.normalizeByte(color.r);\n        color.g = color.normalizeByte(color.g);\n        color.b = color.normalizeByte(color.b);\n    };\n\n    Color.prototype = {\n        toHex: function() {\n            var color = this,\n                pad = color.padDigit,\n                r = color.r.toString(16),\n                g = color.g.toString(16),\n                b = color.b.toString(16);\n\n            return \"#\" + pad(r) + pad(g) + pad(b);\n        },\n\n        resolveColor: function(value) {\n            value = value || \"black\";\n\n            if (value.charAt(0) == \"#\") {\n                value = value.substr(1, 6);\n            }\n\n            value = value.replace(/ /g, \"\");\n            value = value.toLowerCase();\n            value = Color.namedColors[value] || value;\n\n            return value;\n        },\n\n        normalizeByte: function(value) {\n            return (value < 0 || isNaN(value)) ? 0 : ((value > 255) ? 255 : value);\n        },\n\n        padDigit: function(value) {\n            return (value.length === 1) ? \"0\" + value : value;\n        },\n\n        brightness: function(value) {\n            var color = this,\n                round = Math.round;\n\n            color.r = round(color.normalizeByte(color.r * value));\n            color.g = round(color.normalizeByte(color.g * value));\n            color.b = round(color.normalizeByte(color.b * value));\n\n            return color;\n        },\n\n        percBrightness: function() {\n            var color = this;\n\n            return Math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n        }\n    };\n\n    Color.formats = [{\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\n                ];\n            }\n        }, {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\n                ];\n            }\n        }, {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1] + parts[1], 16),\n                    parseInt(parts[2] + parts[2], 16),\n                    parseInt(parts[3] + parts[3], 16)\n                ];\n            }\n        }\n    ];\n\n    Color.namedColors = {\n        aqua: \"00ffff\", azure: \"f0ffff\", beige: \"f5f5dc\",\n        black: \"000000\", blue: \"0000ff\", brown: \"a52a2a\",\n        coral: \"ff7f50\", cyan: \"00ffff\", darkblue: \"00008b\",\n        darkcyan: \"008b8b\", darkgray: \"a9a9a9\", darkgreen: \"006400\",\n        darkorange: \"ff8c00\", darkred: \"8b0000\", dimgray: \"696969\",\n        fuchsia: \"ff00ff\", gold: \"ffd700\", goldenrod: \"daa520\",\n        gray: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n        indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n        lightblue: \"add8e6\", lightgrey: \"d3d3d3\", lightgreen: \"90ee90\",\n        lightpink: \"ffb6c1\", lightyellow: \"ffffe0\", lime: \"00ff00\",\n        limegreen: \"32cd32\", linen: \"faf0e6\", magenta: \"ff00ff\",\n        maroon: \"800000\", mediumblue: \"0000cd\", navy: \"000080\",\n        olive: \"808000\", orange: \"ffa500\", orangered: \"ff4500\",\n        orchid: \"da70d6\", pink: \"ffc0cb\", plum: \"dda0dd\",\n        purple: \"800080\", red: \"ff0000\", royalblue: \"4169e1\",\n        salmon: \"fa8072\", silver: \"c0c0c0\", skyblue: \"87ceeb\",\n        slateblue: \"6a5acd\", slategray: \"708090\", snow: \"fffafa\",\n        steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n        tomato: \"ff6347\", turquoise: \"40e0d0\", violet: \"ee82ee\",\n        wheat: \"f5deb3\", white: \"ffffff\", whitesmoke: \"f5f5f5\",\n        yellow: \"ffff00\", yellowgreen: \"9acd32\"\n    };\n\n    // Tools from ColorPicker =================================================\n\n    var namedColorRegexp = [ \"transparent\" ];\n    for (var i in Color.namedColors) {\n        if (Color.namedColors.hasOwnProperty(i)) {\n            namedColorRegexp.push(i);\n        }\n    }\n    namedColorRegexp = new RegExp(\"^(\" + namedColorRegexp.join(\"|\") + \")(\\\\W|$)\", \"i\");\n\n    /*jshint eqnull:true  */\n\n    function parseColor(color, nothrow) {\n        var m, ret;\n        if (color == null || color == \"none\") {\n            return null;\n        }\n        if (color instanceof _Color) {\n            return color;\n        }\n        color = color.toLowerCase();\n        if ((m = namedColorRegexp.exec(color))) {\n            if (m[1] == \"transparent\") {\n                color = new _RGB(1, 1, 1, 0);\n            }\n            else {\n                color = parseColor(Color.namedColors[m[1]], nothrow);\n            }\n            color.match = [ m[1] ];\n            return color;\n        }\n        if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i.exec(color))) {\n            ret = new _Bytes(parseInt(m[1], 16),\n                             parseInt(m[2], 16),\n                             parseInt(m[3], 16), 1);\n        }\n        else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])/i.exec(color))) {\n            ret = new _Bytes(parseInt(m[1] + m[1], 16),\n                             parseInt(m[2] + m[2], 16),\n                             parseInt(m[3] + m[3], 16), 1);\n        }\n        else if ((m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color))) {\n            ret = new _Bytes(parseInt(m[1], 10),\n                             parseInt(m[2], 10),\n                             parseInt(m[3], 10), 1);\n        }\n        else if ((m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n            ret = new _Bytes(parseInt(m[1], 10),\n                             parseInt(m[2], 10),\n                             parseInt(m[3], 10), parseFloat(m[4]));\n        }\n        else if ((m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color))) {\n            ret = new _RGB(parseFloat(m[1]) / 100,\n                           parseFloat(m[2]) / 100,\n                           parseFloat(m[3]) / 100, 1);\n        }\n        else if ((m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n            ret = new _RGB(parseFloat(m[1]) / 100,\n                           parseFloat(m[2]) / 100,\n                           parseFloat(m[3]) / 100, parseFloat(m[4]));\n        }\n        if (ret) {\n            ret.match = m;\n        } else if (!nothrow) {\n            throw new Error(\"Cannot parse color: \" + color);\n        }\n        return ret;\n    }\n\n    function hex(n, width, pad) {\n        if (!pad) { pad = \"0\"; }\n        n = n.toString(16);\n        while (width > n.length) {\n            n = \"0\" + n;\n        }\n        return n;\n    }\n\n    var _Color = kendo.Class.extend({\n        toHSV: function() { return this; },\n        toRGB: function() { return this; },\n        toHex: function() { return this.toBytes().toHex(); },\n        toBytes: function() { return this; },\n        toCss: function() { return \"#\" + this.toHex(); },\n        toCssRgba: function() {\n            var rgb = this.toBytes();\n            return \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + parseFloat((+this.a).toFixed(3)) + \")\";\n        },\n        toDisplay: function() {\n            if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n                return this.toCss(); // no RGBA support; does it support any opacity in colors?\n            }\n            return this.toCssRgba();\n        },\n        equals: function(c) { return c === this || c !== null && this.toCssRgba() == parseColor(c).toCssRgba(); },\n        diff: function(c2) {\n            if (c2 == null) {\n                return NaN;\n            }\n            var c1 = this.toBytes();\n            c2 = c2.toBytes();\n            return Math.sqrt(Math.pow((c1.r - c2.r) * 0.30, 2) +\n                             Math.pow((c1.g - c2.g) * 0.59, 2) +\n                             Math.pow((c1.b - c2.b) * 0.11, 2));\n        },\n        clone: function() {\n            var c = this.toBytes();\n            if (c === this) {\n                c = new _Bytes(c.r, c.g, c.b, c.a);\n            }\n            return c;\n        }\n    });\n\n    var _RGB = _Color.extend({\n        init: function(r, g, b, a) {\n            this.r = r; this.g = g; this.b = b; this.a = a;\n        },\n        toHSV: function() {\n            var min, max, delta, h, s, v;\n            var r = this.r, g = this.g, b = this.b;\n            min = Math.min(r, g, b);\n            max = Math.max(r, g, b);\n            v = max;\n            delta = max - min;\n            if (delta === 0) {\n                return new _HSV(0, 0, v, this.a);\n            }\n            if (max !== 0) {\n                s = delta / max;\n                if (r == max) {\n                    h = (g - b) / delta;\n                } else if (g == max) {\n                    h = 2 + (b - r) / delta;\n                } else {\n                    h = 4 + (r - g) / delta;\n                }\n                h *= 60;\n                if (h < 0) {\n                    h += 360;\n                }\n            } else {\n                s = 0;\n                h = -1;\n            }\n            return new _HSV(h, s, v, this.a);\n        },\n        toBytes: function() {\n            return new _Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n        }\n    });\n\n    var _Bytes = _RGB.extend({\n        init: function(r, g, b, a) {\n            this.r = Math.round(r); this.g = Math.round(g); this.b = Math.round(b); this.a = a;\n        },\n        toRGB: function() {\n            return new _RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n        },\n        toHSV: function() {\n            return this.toRGB().toHSV();\n        },\n        toHex: function() {\n            return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n        },\n        toBytes: function() {\n            return this;\n        }\n    });\n\n    var _HSV = _Color.extend({\n        init: function(h, s, v, a) {\n            this.h = h; this.s = s; this.v = v; this.a = a;\n        },\n        toRGB: function() {\n            var h = this.h, s = this.s, v = this.v;\n            var i, r, g, b, f, p, q, t;\n            if (s === 0) {\n                r = g = b = v;\n            } else {\n                h /= 60;\n                i = Math.floor(h);\n                f = h - i;\n                p = v * (1 - s);\n                q = v * (1 - s * f);\n                t = v * (1 - s * (1 - f));\n                switch (i) {\n                  case 0  : r = v; g = t; b = p; break;\n                  case 1  : r = q; g = v; b = p; break;\n                  case 2  : r = p; g = v; b = t; break;\n                  case 3  : r = p; g = q; b = v; break;\n                  case 4  : r = t; g = p; b = v; break;\n                  default : r = v; g = p; b = q; break;\n                }\n            }\n            return new _RGB(r, g, b, this.a);\n        },\n        toBytes: function() {\n            return this.toRGB().toBytes();\n        }\n    });\n\n    Color.fromBytes = function(r, g, b, a) {\n        return new _Bytes(r, g, b, a != null ? a : 1);\n    };\n\n    Color.fromRGB = function(r, g, b, a) {\n        return new _RGB(r, g, b, a != null ? a : 1);\n    };\n\n    Color.fromHSV = function(h, s, v, a) {\n        return new _HSV(h, s, v, a != null ? a : 1);\n    };\n\n    // Exports ================================================================\n    kendo.Color = Color;\n    kendo.parseColor = parseColor;\n\n})(window.kendo.jQuery, parseFloat, parseInt);\n\n(function ($) {\n    // Imports ================================================================\n    var math = Math,\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        dataviz = kendo.dataviz;\n\n    // Constants\n    var DEG_TO_RAD = math.PI / 180,\n        MAX_NUM = Number.MAX_VALUE,\n        MIN_NUM = -Number.MAX_VALUE,\n        UNDEFINED = \"undefined\",\n        inArray = $.inArray,\n        push = [].push,\n        pop = [].pop,\n        splice = [].splice,\n        shift = [].shift,\n        slice = [].slice,\n        unshift = [].unshift;\n\n    // Generic utility functions ==============================================\n    function defined(value) {\n        return typeof value !== UNDEFINED;\n    }\n\n    function round(value, precision) {\n        var power = pow(precision);\n        return math.round(value * power) / power;\n    }\n\n    // Extracted from round to get on the V8 \"fast path\"\n    function pow(p) {\n        if (p) {\n            return math.pow(10, p);\n        } else {\n            return 1;\n        }\n    }\n\n    function limitValue(value, min, max) {\n        return math.max(math.min(value, max), min);\n    }\n\n    function rad(degrees) {\n        return degrees * DEG_TO_RAD;\n    }\n\n    function deg(radians) {\n        return radians / DEG_TO_RAD;\n    }\n\n    function isNumber(val) {\n        return typeof val === \"number\" && !isNaN(val);\n    }\n\n    function valueOrDefault(value, defaultValue) {\n        return defined(value) ? value : defaultValue;\n    }\n\n    function sqr(value) {\n        return value * value;\n    }\n\n    function objectKey(object) {\n        var parts = [];\n        for (var key in object) {\n            parts.push(key + object[key]);\n        }\n\n        return parts.sort().join(\"\");\n    }\n\n    // Computes FNV-1 hash\n    // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\n    function hashKey(str) {\n        // 32-bit FNV-1 offset basis\n        // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\n        var hash = 0x811C9DC5;\n\n        for (var i = 0; i < str.length; ++i)\n        {\n            hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n            hash ^= str.charCodeAt(i);\n        }\n\n        return hash >>> 0;\n    }\n\n    function hashObject(object) {\n        return hashKey(objectKey(object));\n    }\n\n    var now = Date.now;\n    if (!now) {\n        now = function() {\n            return new Date().getTime();\n        }\n    }\n\n    // Array helpers ==========================================================\n    function arrayLimits(arr) {\n        var length = arr.length,\n            i,\n            min = MAX_NUM,\n            max = MIN_NUM;\n\n        for (i = 0; i < length; i ++) {\n            max = math.max(max, arr[i]);\n            min = math.min(min, arr[i]);\n        }\n\n        return {\n            min: min,\n            max: max\n        };\n    }\n\n    function arrayMin(arr) {\n        return arrayLimits(arr).min;\n    }\n\n    function arrayMax(arr) {\n        return arrayLimits(arr).max;\n    }\n\n    function sparseArrayMin(arr) {\n        return sparseArrayLimits(arr).min;\n    }\n\n    function sparseArrayMax(arr) {\n        return sparseArrayLimits(arr).max;\n    }\n\n    function sparseArrayLimits(arr) {\n        var min = MAX_NUM,\n            max = MIN_NUM;\n\n        for (var i = 0, length = arr.length; i < length; i++) {\n            var n = arr[i];\n            if (n !== null && isFinite(n)) {\n                min = math.min(min, n);\n                max = math.max(max, n);\n            }\n        }\n\n        return {\n            min: min === MAX_NUM ? undefined : min,\n            max: max === MIN_NUM ? undefined : max\n        };\n    }\n\n    function last(array) {\n        if (array) {\n            return array[array.length - 1];\n        }\n    }\n\n    function append(first, second) {\n        first.push.apply(first, second);\n        return first;\n    }\n\n    // Template helpers =======================================================\n    function renderTemplate(text) {\n        return kendo.template(text, { useWithBlock: false, paramName: \"d\" });\n    }\n\n    function renderAttr(name, value) {\n        return (defined(value) && value !== null) ? \" \" + name + \"='\" + value + \"' \" : \"\";\n    }\n\n    function renderAllAttr(attrs) {\n        var output = \"\";\n        for (var i = 0; i < attrs.length; i++) {\n            output += renderAttr(attrs[i][0], attrs[i][1]);\n        }\n\n        return output;\n    }\n\n    function renderStyle(attrs) {\n        var output = \"\";\n        for (var i = 0; i < attrs.length; i++) {\n            var value = attrs[i][1];\n            if (defined(value)) {\n                output += attrs[i][0] + \":\" + value + \";\";\n            }\n        }\n\n        if (output !== \"\") {\n            return output;\n        }\n    }\n\n    function renderSize(size) {\n        if (typeof size !== \"string\") {\n            size += \"px\";\n        }\n\n        return size;\n    }\n\n    function renderPos(pos) {\n        var result = [];\n\n        if (pos) {\n            var parts = kendo.toHyphens(pos).split(\"-\");\n\n            for (var i = 0; i < parts.length; i++) {\n                result.push(\"k-pos-\" + parts[i]);\n            }\n        }\n\n        return result.join(\" \");\n    }\n\n    function isTransparent(color) {\n        return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n    }\n\n    // Exports ================================================================\n    deepExtend(kendo, {\n        util: {\n            MAX_NUM: MAX_NUM,\n            MIN_NUM: MIN_NUM,\n\n            append: append,\n            arrayLimits: arrayLimits,\n            arrayMin: arrayMin,\n            arrayMax: arrayMax,\n            defined: defined,\n            deg: deg,\n            hashKey: hashKey,\n            hashObject: hashObject,\n            isNumber: isNumber,\n            isTransparent: isTransparent,\n            last: last,\n            limitValue: limitValue,\n            now: now,\n            objectKey: objectKey,\n            round: round,\n            rad: rad,\n            renderAttr: renderAttr,\n            renderAllAttr: renderAllAttr,\n            renderPos: renderPos,\n            renderSize: renderSize,\n            renderStyle: renderStyle,\n            renderTemplate: renderTemplate,\n            sparseArrayLimits: sparseArrayLimits,\n            sparseArrayMin: sparseArrayMin,\n            sparseArrayMax: sparseArrayMax,\n            sqr: sqr,\n            valueOrDefault: valueOrDefault\n        }\n    });\n\n    kendo.dataviz.util = kendo.util;\n\n})(window.kendo.jQuery);\n\n\n\n(function ($) {\n    // Imports ================================================================\n    var kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        fromCharCode = String.fromCharCode;\n\n    // Constants\n    var KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n    // Generic utility functions ==============================================\n    function encodeBase64(input) {\n        var output = \"\";\n        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n        var i = 0;\n\n        input = encodeUTF8(input);\n\n        while (i < input.length) {\n\n            chr1 = input.charCodeAt(i++);\n            chr2 = input.charCodeAt(i++);\n            chr3 = input.charCodeAt(i++);\n\n            enc1 = chr1 >> 2;\n            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n            enc4 = chr3 & 63;\n\n            if (isNaN(chr2)) {\n                enc3 = enc4 = 64;\n            }\n            else if (isNaN(chr3)) {\n                enc4 = 64;\n            }\n\n            output = output +\n                KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n                KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n        }\n\n        return output;\n    }\n\n    function encodeUTF8(input) {\n        input = input.replace(/\\r\\n/g,\"\\n\");\n        var output = \"\";\n\n        for (var i = 0; i < input.length; i++) {\n            var c = input.charCodeAt(i);\n\n            if (c < 0x80) {\n                // One byte\n                output += fromCharCode(c);\n            }\n            else if(c < 0x800) {\n                // Two bytes\n                output += fromCharCode(0xC0 | (c >>> 6));\n                output += fromCharCode(0x80 | (c & 0x3f));\n            }\n            else if (c < 0x10000) {\n                // Three bytes\n                output += fromCharCode(0xE0 | (c >>> 12));\n                output += fromCharCode(0x80 | (c >>> 6 & 0x3f));\n                output += fromCharCode(0x80 | (c & 0x3f));\n            }\n        }\n\n        return output;\n    }\n\n    // Exports ================================================================\n    deepExtend(kendo.util, {\n        encodeBase64: encodeBase64,\n        encodeUTF8: encodeUTF8\n    });\n\n})(window.kendo.jQuery);\n\n\n\n(function ($) {\n    // Imports ================================================================\n    var math = Math,\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        inArray = $.inArray;\n\n    // Mixins =================================================================\n    var ObserversMixin = {\n        observers: function() {\n            this._observers = this._observers || [];\n            return this._observers;\n        },\n\n        addObserver: function(element) {\n            if (!this._observers)  {\n                this._observers = [element];\n            } else {\n                this._observers.push(element);\n            }\n            return this;\n        },\n\n        removeObserver: function(element) {\n            var observers = this.observers();\n            var index = inArray(element, observers);\n            if (index != -1) {\n                observers.splice(index, 1);\n            }\n            return this;\n        },\n\n        trigger: function(methodName, event) {\n            var observers = this._observers;\n            var observer;\n            var idx;\n\n            if (observers && !this._suspended) {\n                for (idx = 0; idx < observers.length; idx++) {\n                    observer = observers[idx];\n                    if (observer[methodName]) {\n                        observer[methodName](event);\n                    }\n                }\n            }\n            return this;\n        },\n\n        optionsChange: function(e) {\n            this.trigger(\"optionsChange\", e);\n        },\n\n        geometryChange: function(e) {\n            this.trigger(\"geometryChange\", e);\n        },\n\n        suspend: function() {\n            this._suspended = (this._suspended || 0) + 1;\n            return this;\n        },\n\n        resume: function() {\n            this._suspended = math.max((this._suspended || 0) - 1, 0);\n            return this;\n        },\n\n        _observerField: function(field, value) {\n            if (this[field]) {\n                this[field].removeObserver(this);\n            }\n            this[field] = value;\n            value.addObserver(this);\n        }\n    };\n\n    // Exports ================================================================\n    deepExtend(kendo, {\n        mixins: {\n            ObserversMixin: ObserversMixin\n        }\n    });\n\n})(window.kendo.jQuery);\n\n\n\n(function ($) {\n    // Imports ================================================================\n    var math = Math,\n        pow = math.pow,\n        inArray = $.inArray,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n        ObserversMixin = kendo.mixins.ObserversMixin,\n\n        util = kendo.util,\n        defined = util.defined,\n        rad = util.rad,\n        deg = util.deg,\n        round = util.round;\n\n    var PI_DIV_2 = math.PI / 2,\n        MIN_NUM = util.MIN_NUM,\n        MAX_NUM = util.MAX_NUM;\n\n    // Geometrical primitives =================================================\n    var Point = Class.extend({\n        init: function(x, y) {\n            this.x = x || 0;\n            this.y = y || 0;\n        },\n\n        equals: function(other) {\n            return other && other.x === this.x && other.y === this.y;\n        },\n\n        clone: function() {\n            return new Point(this.x, this.y);\n        },\n\n        rotate: function(angle, origin) {\n            return this.transform(\n                transform().rotate(angle, origin)\n            );\n        },\n\n        translate: function(x, y) {\n            this.x += x;\n            this.y += y;\n\n            this.geometryChange();\n\n            return this;\n        },\n\n        translateWith: function(point) {\n            return this.translate(point.x, point.y);\n        },\n\n        move: function(x, y) {\n            this.x = this.y = 0;\n            return this.translate(x, y);\n        },\n\n        scale: function(scaleX, scaleY) {\n            if (!defined(scaleY)) {\n                scaleY = scaleX;\n            }\n\n            this.x *= scaleX;\n            this.y *= scaleY;\n\n            this.geometryChange();\n\n            return this;\n        },\n\n        scaleCopy: function(scaleX, scaleY) {\n            return this.clone().scale(scaleX, scaleY);\n        },\n\n        transform: function(transformation) {\n            var mx = toMatrix(transformation),\n                x = this.x,\n                y = this.y;\n\n            this.x = mx.a * x + mx.c * y + mx.e;\n            this.y = mx.b * x + mx.d * y + mx.f;\n\n            this.geometryChange();\n\n            return this;\n        },\n\n        transformCopy: function(transformation) {\n            var point = this.clone();\n\n            if (transformation) {\n                point.transform(transformation);\n            }\n\n            return point;\n        },\n\n        distanceTo: function(point) {\n            var dx = this.x - point.x;\n            var dy = this.y - point.y;\n\n            return math.sqrt(dx * dx + dy * dy);\n        },\n\n        round: function(digits) {\n            this.x = round(this.x, digits);\n            this.y = round(this.y, digits);\n\n            this.geometryChange();\n\n            return this;\n        },\n\n        toArray: function(digits) {\n            var doRound = defined(digits);\n            var x = doRound ? round(this.x, digits) : this.x;\n            var y = doRound ? round(this.y, digits) : this.y;\n\n            return [x, y];\n        }\n    });\n    defineAccessors(Point.fn, [\"x\", \"y\"]);\n    deepExtend(Point.fn, ObserversMixin);\n\n    // IE < 9 doesn't allow to override toString on definition\n    Point.fn.toString = function(digits, separator) {\n        var x = this.x,\n            y = this.y;\n\n        if (defined(digits)) {\n            x = round(x, digits);\n            y = round(y, digits);\n        }\n\n        separator = separator || \" \";\n        return x + separator + y;\n    };\n\n    Point.create = function(arg0, arg1) {\n        if (defined(arg0)) {\n            if (arg0 instanceof Point) {\n                return arg0;\n            } else if (arguments.length === 1 && arg0.length === 2) {\n                return new Point(arg0[0], arg0[1]);\n            } else {\n                return new Point(arg0, arg1);\n            }\n        }\n    };\n\n    Point.min = function() {\n        var minX = util.MAX_NUM;\n        var minY = util.MAX_NUM;\n\n        for (var i = 0; i < arguments.length; i++) {\n            var pt = arguments[i];\n            minX = math.min(pt.x, minX);\n            minY = math.min(pt.y, minY);\n        }\n\n        return new Point(minX, minY);\n    };\n\n    Point.max = function(p0, p1) {\n        var maxX = util.MIN_NUM;\n        var maxY = util.MIN_NUM;\n\n        for (var i = 0; i < arguments.length; i++) {\n            var pt = arguments[i];\n            maxX = math.max(pt.x, maxX);\n            maxY = math.max(pt.y, maxY);\n        }\n\n        return new Point(maxX, maxY);\n    };\n\n    Point.minPoint = function() {\n        return new Point(MIN_NUM, MIN_NUM);\n    };\n\n    Point.maxPoint = function() {\n        return new Point(MAX_NUM, MAX_NUM);\n    };\n\n    Point.ZERO = new Point(0, 0);\n\n    var Size = Class.extend({\n        init: function(width, height) {\n            this.width = width || 0;\n            this.height = height || 0;\n        },\n\n        equals: function(other) {\n            return other && other.width === this.width && other.height === this.height;\n        },\n\n        clone: function() {\n            return new Size(this.width, this.height);\n        },\n\n        toArray: function(digits) {\n            var doRound = defined(digits);\n            var width = doRound ? round(this.width, digits) : this.width;\n            var height = doRound ? round(this.height, digits) : this.height;\n\n            return [width, height];\n        }\n    });\n    defineAccessors(Size.fn, [\"width\", \"height\"]);\n    deepExtend(Size.fn, ObserversMixin);\n\n    Size.create = function(arg0, arg1) {\n        if (defined(arg0)) {\n            if (arg0 instanceof Size) {\n                return arg0;\n            } else if (arguments.length === 1 && arg0.length === 2) {\n                return new Size(arg0[0], arg0[1]);\n            } else {\n                return new Size(arg0, arg1);\n            }\n        }\n    };\n\n    Size.ZERO = new Size(0, 0);\n\n    var Rect = Class.extend({\n        init: function(origin, size) {\n            this.setOrigin(origin || new Point());\n            this.setSize(size || new Size());\n        },\n\n        clone: function() {\n            return new Rect(\n                this.origin.clone(),\n                this.size.clone()\n            );\n        },\n\n        equals: function(other) {\n            return other &&\n                   other.origin.equals(this.origin) &&\n                   other.size.equals(this.size);\n        },\n\n        setOrigin: function(value) {\n            this._observerField(\"origin\", Point.create(value));\n            this.geometryChange();\n            return this;\n        },\n\n        getOrigin: function() {\n            return this.origin;\n        },\n\n        setSize: function(value) {\n            this._observerField(\"size\", Size.create(value));\n            this.geometryChange();\n            return this;\n        },\n\n        getSize: function() {\n            return this.size;\n        },\n\n        width: function() {\n            return this.size.width;\n        },\n\n        height: function() {\n            return this.size.height;\n        },\n\n        topLeft: function() {\n            return this.origin.clone();\n        },\n\n        bottomRight: function() {\n            return this.origin.clone().translate(this.width(), this.height());\n        },\n\n        topRight: function() {\n            return this.origin.clone().translate(this.width(), 0);\n        },\n\n        bottomLeft: function() {\n            return this.origin.clone().translate(0, this.height());\n        },\n\n        center: function() {\n            return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n        },\n\n        bbox: function(matrix) {\n            var tl = this.topLeft().transformCopy(matrix);\n            var tr = this.topRight().transformCopy(matrix);\n            var br = this.bottomRight().transformCopy(matrix);\n            var bl = this.bottomLeft().transformCopy(matrix);\n\n            return Rect.fromPoints(tl, tr, br, bl);\n        }\n    });\n\n    deepExtend(Rect.fn, ObserversMixin);\n\n    Rect.fromPoints = function() {\n        var topLeft = Point.min.apply(this, arguments);\n        var bottomRight = Point.max.apply(this, arguments);\n        var size = new Size(\n            bottomRight.x - topLeft.x,\n            bottomRight.y - topLeft.y\n        );\n\n        return new Rect(topLeft, size);\n    };\n\n    Rect.union = function(a, b) {\n        return Rect.fromPoints(\n            Point.min(a.topLeft(), b.topLeft()),\n            Point.max(a.bottomRight(), b.bottomRight())\n        );\n    };\n\n    Rect.intersect = function(a, b) {\n        a = { left   : a.topLeft().x,\n              top    : a.topLeft().y,\n              right  : a.bottomRight().x,\n              bottom : a.bottomRight().y };\n\n        b = { left   : b.topLeft().x,\n              top    : b.topLeft().y,\n              right  : b.bottomRight().x,\n              bottom : b.bottomRight().y };\n\n        if (a.left <= b.right &&\n            b.left <= a.right &&\n            a.top <= b.bottom &&\n            b.top <= a.bottom)\n        {\n            return Rect.fromPoints(\n                new Point(math.max(a.left, b.left), math.max(a.top, b.top)),\n                new Point(math.min(a.right, b.right), math.min(a.bottom, b.bottom))\n            );\n        }\n    };\n\n    var Circle = Class.extend({\n        init: function(center, radius) {\n            this.setCenter(center || new Point());\n            this.setRadius(radius || 0);\n        },\n\n        setCenter: function(value) {\n            this._observerField(\"center\", Point.create(value));\n            this.geometryChange();\n            return this;\n        },\n\n        getCenter: function() {\n            return this.center;\n        },\n\n        equals: function(other) {\n            return  other &&\n                    other.center.equals(this.center) &&\n                    other.radius === this.radius;\n        },\n\n        clone: function() {\n            return new Circle(this.center.clone(), this.radius);\n        },\n\n        pointAt: function(angle) {\n            return this._pointAt(rad(angle));\n        },\n\n        bbox: function(matrix) {\n            var minPoint = Point.maxPoint();\n            var maxPoint = Point.minPoint();\n            var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n\n            for (var i = 0; i < 4; i++) {\n                var currentPointX = this._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n                var currentPointY = this._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n                var currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n                minPoint = Point.min(minPoint, currentPoint);\n                maxPoint = Point.max(maxPoint, currentPoint);\n            }\n\n            // TODO: Let fromPoints figure out the min/max\n            return Rect.fromPoints(minPoint, maxPoint);\n        },\n\n        _pointAt: function(angle) {\n            var c = this.center;\n            var r = this.radius;\n\n            return new Point(\n                c.x - r * math.cos(angle),\n                c.y - r * math.sin(angle)\n            );\n        }\n    });\n    defineAccessors(Circle.fn, [\"radius\"]);\n    deepExtend(Circle.fn, ObserversMixin);\n\n    var Arc = Class.extend({\n        init: function(center, options) {\n            this.setCenter(center || new Point());\n\n            options = options || {};\n            this.radiusX = options.radiusX;\n            this.radiusY = options.radiusY || options.radiusX;\n            this.startAngle = options.startAngle;\n            this.endAngle = options.endAngle;\n            this.anticlockwise = options.anticlockwise || false;\n        },\n\n        // TODO: clone, equals\n        clone: function() {\n            return new Arc(this.center, {\n                radiusX: this.radiusX,\n                radiusY: this.radiusY,\n                startAngle: this.startAngle,\n                endAngle: this.endAngle,\n                anticlockwise: this.anticlockwise\n            });\n        },\n\n        setCenter: function(value) {\n            this._observerField(\"center\", Point.create(value));\n            this.geometryChange();\n            return this;\n        },\n\n        getCenter: function() {\n            return this.center;\n        },\n\n        MAX_INTERVAL: 45,\n\n        pointAt: function(angle) {\n            var center = this.center;\n            var radian = rad(angle);\n\n            return new Point(\n                center.x + this.radiusX * math.cos(radian),\n                center.y + this.radiusY * math.sin(radian)\n            );\n        },\n\n        // TODO: Review, document\n        curvePoints: function() {\n            var startAngle = this.startAngle;\n            var endAngle = this.endAngle;\n            var dir = this.anticlockwise ? -1 : 1;\n            var curvePoints = [this.pointAt(startAngle)];\n            var currentAngle = startAngle;\n            var interval = this._arcInterval();\n            var intervalAngle = interval.endAngle - interval.startAngle;\n            var subIntervalsCount = math.ceil(intervalAngle / this.MAX_INTERVAL);\n            var subIntervalAngle = intervalAngle / subIntervalsCount;\n\n            for (var i = 1; i <= subIntervalsCount; i++) {\n                var nextAngle = currentAngle + dir * subIntervalAngle;\n                var points = this._intervalCurvePoints(currentAngle, nextAngle);\n\n                curvePoints.push(points.cp1, points.cp2, points.p2);\n                currentAngle = nextAngle;\n            }\n\n            return curvePoints;\n        },\n\n        bbox: function(matrix) {\n            var arc = this;\n            var interval = arc._arcInterval();\n            var startAngle = interval.startAngle;\n            var endAngle = interval.endAngle;\n            var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n            var extremeX = deg(extremeAngles.x);\n            var extremeY = deg(extremeAngles.y);\n            var currentPoint = arc.pointAt(startAngle).transformCopy(matrix);\n            var endPoint = arc.pointAt(endAngle).transformCopy(matrix);\n            var minPoint = Point.min(currentPoint, endPoint);\n            var maxPoint = Point.max(currentPoint, endPoint);\n            var currentAngleX = bboxStartAngle(extremeX, startAngle);\n            var currentAngleY = bboxStartAngle(extremeY, startAngle);\n\n            while (currentAngleX < endAngle || currentAngleY < endAngle) {\n                var currentPointX;\n                if (currentAngleX < endAngle) {\n                    currentPointX = arc.pointAt(currentAngleX).transformCopy(matrix);\n                    currentAngleX += 90;\n                }\n\n                var currentPointY;\n                if (currentAngleY < endAngle) {\n                    currentPointY = arc.pointAt(currentAngleY).transformCopy(matrix);\n                    currentAngleY += 90;\n                }\n\n                currentPoint = new Point(currentPointX.x, currentPointY.y);\n                minPoint = Point.min(minPoint, currentPoint);\n                maxPoint = Point.max(maxPoint, currentPoint);\n            }\n\n            // TODO: Let fromPoints figure out the min/max\n            return Rect.fromPoints(minPoint, maxPoint);\n        },\n\n        _arcInterval: function() {\n            var startAngle = this.startAngle;\n            var endAngle = this.endAngle;\n            var anticlockwise = this.anticlockwise;\n\n            if (anticlockwise) {\n                var oldStart = startAngle;\n                startAngle = endAngle;\n                endAngle = oldStart;\n            }\n\n            if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n                endAngle += 360;\n            }\n\n            return {\n                startAngle: startAngle,\n                endAngle: endAngle\n            };\n        },\n\n        _intervalCurvePoints: function(startAngle, endAngle) {\n            var arc = this;\n            var p1 = arc.pointAt(startAngle);\n            var p2 = arc.pointAt(endAngle);\n            var p1Derivative = arc._derivativeAt(startAngle);\n            var p2Derivative = arc._derivativeAt(endAngle);\n            var t = (rad(endAngle) - rad(startAngle)) / 3;\n            var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n            var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n\n            return {\n                p1: p1,\n                cp1: cp1,\n                cp2: cp2,\n                p2: p2\n            };\n        },\n\n        _derivativeAt: function(angle) {\n            var arc = this;\n            var radian = rad(angle);\n\n            return new Point(-arc.radiusX * math.sin(radian), arc.radiusY * math.cos(radian));\n        }\n    });\n    defineAccessors(Arc.fn, [\"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\"]);\n    deepExtend(Arc.fn, ObserversMixin);\n\n    Arc.fromPoints = function(start, end, rx, ry, largeArc, swipe) {\n        var arcParameters = normalizeArcParameters(start.x, start.y, end.x, end.y, rx, ry, largeArc, swipe);\n        return new Arc(arcParameters.center, {\n            startAngle: arcParameters.startAngle,\n            endAngle: arcParameters.endAngle,\n            radiusX: rx,\n            radiusY: ry,\n            anticlockwise: swipe === 0\n        });\n    };\n\n    var Matrix = Class.extend({\n        init: function (a, b, c, d, e, f) {\n            this.a = a || 0;\n            this.b = b || 0;\n            this.c = c || 0;\n            this.d = d || 0;\n            this.e = e || 0;\n            this.f = f || 0;\n        },\n\n        multiplyCopy: function (m) {\n            return new Matrix(\n                this.a * m.a + this.c * m.b,\n                this.b * m.a + this.d * m.b,\n                this.a * m.c + this.c * m.d,\n                this.b * m.c + this.d * m.d,\n                this.a * m.e + this.c * m.f + this.e,\n                this.b * m.e + this.d * m.f + this.f\n            );\n        },\n\n        clone: function() {\n            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n        },\n\n        equals: function(other) {\n            if (!other) {\n                return false;\n            }\n\n            return this.a === other.a && this.b === other.b &&\n                   this.c === other.c && this.d === other.d &&\n                   this.e === other.e && this.f === other.f;\n        },\n\n        round: function(precision) {\n            this.a = round(this.a, precision);\n            this.b = round(this.b, precision);\n            this.c = round(this.c, precision);\n            this.d = round(this.d, precision);\n            this.e = round(this.e, precision);\n            this.f = round(this.f, precision);\n\n            return this;\n        },\n\n        toArray: function(precision) {\n            var arr = [this.a, this.b, this.c, this.d, this.e, this.f];\n\n            if (defined(precision)) {\n                for (var i = 0; i < arr.length; i++) {\n                    arr[i] = round(arr[i], precision);\n                }\n            }\n\n            return arr;\n        }\n    });\n\n    Matrix.fn.toString = function(precision, separator) {\n        return this.toArray(precision).join(separator || \",\");\n    };\n\n    Matrix.translate = function (x, y) {\n        return new Matrix(1, 0, 0, 1, x, y);\n    };\n\n    Matrix.unit = function () {\n        return new Matrix(1, 0, 0, 1, 0, 0);\n    };\n\n    Matrix.rotate = function (angle, x, y) {\n        var m = new Matrix();\n        m.a = math.cos(rad(angle));\n        m.b = math.sin(rad(angle));\n        m.c = -m.b;\n        m.d = m.a;\n        m.e = (x - x * m.a + y * m.b) || 0;\n        m.f = (y - y * m.a - x * m.b) || 0;\n\n        return m;\n    };\n\n    Matrix.scale = function (scaleX, scaleY) {\n        return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n    };\n\n    Matrix.IDENTITY = Matrix.unit();\n\n    var Transformation = Class.extend({\n        init: function(matrix) {\n            this._matrix = matrix || Matrix.unit();\n        },\n\n        clone: function() {\n            return new Transformation(\n                this._matrix.clone()\n            );\n        },\n\n        equals: function(other) {\n            return other &&\n                   other._matrix.equals(this._matrix);\n        },\n\n        _optionsChange: function() {\n            this.optionsChange({\n                field: \"transform\",\n                value: this\n            });\n        },\n\n        translate: function(x, y) {\n            this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n            this._optionsChange();\n            return this;\n        },\n\n        scale: function(scaleX, scaleY, origin) {\n            if (!defined(scaleY)) {\n               scaleY = scaleX;\n            }\n\n            if (origin) {\n                origin = Point.create(origin);\n                this._matrix = this._matrix.multiplyCopy(Matrix.translate(origin.x, origin.y));\n            }\n\n            this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n            if (origin) {\n                this._matrix = this._matrix.multiplyCopy(Matrix.translate(-origin.x, -origin.y));\n            }\n\n            this._optionsChange();\n            return this;\n        },\n\n        rotate: function(angle, origin) {\n            origin = Point.create(origin) || Point.ZERO;\n\n            this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, origin.x, origin.y));\n\n            this._optionsChange();\n            return this;\n        },\n\n        multiply: function(transformation) {\n            var matrix = toMatrix(transformation);\n\n            this._matrix = this._matrix.multiplyCopy(matrix);\n\n            this._optionsChange();\n            return this;\n        },\n\n        matrix: function() {\n            return this._matrix;\n        }\n    });\n\n    deepExtend(Transformation.fn, ObserversMixin);\n\n    function transform(matrix) {\n        if (matrix === null) {\n            return null;\n        }\n\n        if (matrix instanceof Transformation) {\n            return matrix;\n        }\n\n        return new Transformation(matrix);\n    }\n\n    function toMatrix(value) {\n        if (value && kendo.isFunction(value.matrix)) {\n            return value.matrix();\n        }\n\n        return value;\n    }\n\n    // Helper functions =======================================================\n    function ellipseExtremeAngles(center, rx, ry, matrix) {\n        var extremeX = 0,\n            extremeY = 0;\n\n        if (matrix) {\n            extremeX = math.atan2(matrix.c * ry, matrix.a * rx);\n            if (matrix.b !== 0) {\n                extremeY = math.atan2(matrix.d * ry, matrix.b * rx);\n            }\n        }\n\n        return {\n            x: extremeX,\n            y: extremeY\n        };\n    }\n\n    function bboxStartAngle(angle, start) {\n        while(angle < start) {\n            angle += 90;\n        }\n\n        return angle;\n    }\n\n    function defineAccessors(fn, fields) {\n        for (var i = 0; i < fields.length; i++) {\n            var name = fields[i];\n            var capitalized = name.charAt(0).toUpperCase() +\n                              name.substring(1, name.length);\n\n            fn[\"set\" + capitalized] = setAccessor(name);\n            fn[\"get\" + capitalized] = getAccessor(name);\n        }\n    }\n\n    function setAccessor(field) {\n        return function(value) {\n            if (this[field] !== value) {\n                this[field] = value;\n                this.geometryChange();\n            }\n\n            return this;\n        };\n    }\n\n    function getAccessor(field) {\n        return function() {\n            return this[field];\n        };\n    }\n\n\n    function elipseAngle(start, end, swipe) {\n        if (start > end) {\n            end += 360;\n        }\n\n        var alpha = math.abs(end - start);\n        if (!swipe) {\n            alpha = 360 - alpha;\n        }\n\n        return alpha;\n    }\n\n    function calculateAngle(cx, cy, rx, ry, x, y) {\n        var cos = round((x - cx) / rx, 3);\n        var sin = round((y - cy) / ry, 3);\n\n        return round(deg(math.atan2(sin, cos)));\n    }\n\n    function normalizeArcParameters(x1, y1, x2, y2, rx, ry, largeArc, swipe) {\n        var cx, cy;\n        var cx1, cy1;\n        var a, b, c, sqrt;\n\n        if  (y1 !== y2) {\n            var x21 = x2 - x1;\n            var y21 = y2 - y1;\n            var rx2 = pow(rx, 2), ry2 = pow(ry, 2);\n            var k = (ry2 * x21 * (x1 + x2) + rx2 * y21 * (y1 + y2)) / (2 * rx2 * y21);\n            var yk2 = k - y2;\n            var l = -(x21 * ry2) / (rx2 * y21);\n\n            a = 1 / rx2 + pow(l, 2) / ry2;\n            b = 2 * ((l * yk2) / ry2 - x2 / rx2);\n            c = pow(x2, 2) / rx2 + pow(yk2, 2) / ry2 - 1;\n            sqrt = math.sqrt(pow(b, 2) - 4 * a * c);\n\n            cx = (-b - sqrt) / (2 * a);\n            cy = k + l * cx;\n            cx1 = (-b + sqrt) / (2 * a);\n            cy1 = k + l * cx1;\n        } else if (x1 !== x2) {\n            b = - 2 * y2;\n            c = pow(((x2 - x1) * ry) / (2 * rx), 2) + pow(y2, 2) - pow(ry, 2);\n            sqrt = math.sqrt(pow(b, 2) - 4 * c);\n\n            cx = cx1 = (x1 + x2) / 2;\n            cy = (-b - sqrt) / 2;\n            cy1 = (-b + sqrt) / 2;\n        } else {\n            return false;\n        }\n\n        var start = calculateAngle(cx, cy, rx, ry, x1, y1);\n        var end = calculateAngle(cx, cy, rx, ry, x2, y2);\n        var alpha = elipseAngle(start, end, swipe);\n\n        if ((largeArc && alpha <= 180) || (!largeArc && alpha > 180)) {\n           cx = cx1; cy = cy1;\n           start = calculateAngle(cx, cy, rx, ry, x1, y1);\n           end = calculateAngle(cx, cy, rx, ry, x2, y2);\n        }\n\n        return {\n            center: new Point(cx, cy),\n            startAngle: start,\n            endAngle: end\n        };\n    }\n\n\n    // Exports ================================================================\n    deepExtend(kendo, {\n        geometry: {\n            Arc: Arc,\n            Circle: Circle,\n            Matrix: Matrix,\n            Point: Point,\n            Rect: Rect,\n            Size: Size,\n            Transformation: Transformation,\n            transform: transform,\n            toMatrix: toMatrix\n        }\n    });\n\n    kendo.dataviz.geometry = kendo.geometry;\n\n})(window.kendo.jQuery);\n\n\n\n(function ($) {\n\n    // Imports ================================================================\n    var doc = document,\n        noop = $.noop,\n        toString = Object.prototype.toString,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        Widget = kendo.ui.Widget,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        defined = util.defined;\n\n    // Base drawing surface ==================================================\n    var Surface = kendo.Observable.extend({\n        init: function(element, options) {\n            kendo.Observable.fn.init.call(this);\n\n            this.options = deepExtend({}, this.options, options);\n            this.bind(this.events, this.options);\n\n            this._click = this._handler(\"click\");\n            this._mouseenter = this._handler(\"mouseenter\");\n            this._mouseleave = this._handler(\"mouseleave\");\n\n            this.element = $(element);\n\n            if (this.options.width) {\n                this.element.css(\"width\", this.options.width);\n            }\n\n            if (this.options.height) {\n                this.element.css(\"height\", this.options.height);\n            }\n        },\n\n        options: { },\n\n        events: [\n            \"click\",\n            \"mouseenter\",\n            \"mouseleave\",\n            \"resize\"\n        ],\n\n        draw: noop,\n        clear: noop,\n        destroy: noop,\n\n        resize: Widget.fn.resize,\n        size: Widget.fn.size,\n\n        getSize: function() {\n            return {\n                width: this.element.width(),\n                height: this.element.height()\n            };\n        },\n\n        setSize: function(size) {\n            this.element.css({\n                width: size.width,\n                height: size.height\n            });\n\n            this._size = size;\n            this._resize();\n        },\n\n        eventTarget: function(e) {\n            var domNode = $(e.touch ? e.touch.initialTouch : e.target);\n            var node;\n\n            while (!node && domNode.length > 0) {\n                node = domNode[0]._kendoNode;\n                if (domNode.is(this.element) || domNode.length === 0) {\n                    break;\n                }\n\n                domNode = domNode.parent();\n            }\n\n            if (node) {\n                return node.srcElement;\n            }\n        },\n\n        _resize: noop,\n\n        _handler: function(event) {\n            var surface = this;\n\n            return function(e) {\n                var node = surface.eventTarget(e);\n                if (node) {\n                    surface.trigger(event, {\n                        element: node,\n                        originalEvent: e\n                    });\n                }\n            };\n        }\n    });\n\n    Surface.create = function(element, options) {\n        return SurfaceFactory.current.create(element, options);\n    };\n\n    // Base surface node =====================================================\n    var BaseNode = Class.extend({\n        init: function(srcElement) {\n            this.childNodes = [];\n            this.parent = null;\n\n            if (srcElement) {\n                this.srcElement = srcElement;\n                this.observe();\n            }\n        },\n\n        destroy: function() {\n            if (this.srcElement) {\n                this.srcElement.removeObserver(this);\n            }\n\n            var children = this.childNodes;\n            for (var i = 0; i < children.length; i++) {\n                this.childNodes[i].destroy();\n            }\n\n            this.parent = null;\n        },\n\n        load: noop,\n\n        observe: function() {\n            if (this.srcElement) {\n                this.srcElement.addObserver(this);\n            }\n        },\n\n        append: function(node) {\n            this.childNodes.push(node);\n            node.parent = this;\n        },\n\n        insertAt: function(node, pos) {\n            this.childNodes.splice(pos, 0, node);\n            node.parent = this;\n        },\n\n        remove: function(index, count) {\n            var end = index + count;\n            for (var i = index; i < end; i++) {\n                this.childNodes[i].removeSelf();\n            }\n            this.childNodes.splice(index, count);\n        },\n\n        removeSelf: function() {\n            this.clear();\n            this.destroy();\n        },\n\n        clear: function() {\n            this.remove(0, this.childNodes.length);\n        },\n\n        invalidate: function() {\n            if (this.parent) {\n                this.parent.invalidate();\n            }\n        },\n\n        geometryChange: function() {\n            this.invalidate();\n        },\n\n        optionsChange: function() {\n            this.invalidate();\n        },\n\n        childrenChange: function(e) {\n            if (e.action === \"add\") {\n                this.load(e.items, e.index);\n            } else if (e.action === \"remove\") {\n                this.remove(e.index, e.items.length);\n            }\n\n            this.invalidate();\n        }\n    });\n\n    // Options storage with optional observer =============================\n    var OptionsStore = Class.extend({\n        init: function(options, prefix) {\n            var field,\n                member;\n\n            this.prefix = prefix || \"\";\n\n            for (field in options) {\n                member = options[field];\n                member = this._wrap(member, field);\n                this[field] = member;\n            }\n        },\n\n        get: function(field) {\n            return kendo.getter(field, true)(this);\n        },\n\n        set: function(field, value) {\n            var current = kendo.getter(field, true)(this);\n\n            if (current !== value) {\n                var composite = this._set(field, this._wrap(value, field));\n                if (!composite) {\n                    this.optionsChange({\n                        field: this.prefix + field,\n                        value: value\n                    });\n                }\n            }\n        },\n\n        _set: function(field, value) {\n            var composite = field.indexOf(\".\") >= 0;\n\n            if (composite) {\n                var parts = field.split(\".\"),\n                    path = \"\",\n                    obj;\n\n                while (parts.length > 1) {\n                    path += parts.shift();\n                    obj = kendo.getter(path, true)(this);\n\n                    if (!obj) {\n                        obj = new OptionsStore({}, path + \".\");\n                        obj.addObserver(this);\n                        this[path] = obj;\n                    }\n\n                    if (obj instanceof OptionsStore) {\n                        obj.set(parts.join(\".\"), value);\n                        return composite;\n                    }\n\n                    path += \".\";\n                }\n            }\n\n            this._clear(field);\n            kendo.setter(field)(this, value);\n\n            return composite;\n        },\n\n        _clear: function(field) {\n            var current = kendo.getter(field, true)(this);\n            if (current && current.removeObserver) {\n                current.removeObserver(this);\n            }\n        },\n\n        _wrap: function(object, field) {\n            var type = toString.call(object);\n\n            if (object !== null && defined(object) && type === \"[object Object]\") {\n                if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n                    object = new OptionsStore(object, this.prefix + field + \".\");\n                }\n\n                object.addObserver(this);\n            }\n\n            return object;\n        }\n    });\n    deepExtend(OptionsStore.fn, kendo.mixins.ObserversMixin);\n\n    var SurfaceFactory = function() {\n        this._items = [];\n    };\n\n    SurfaceFactory.prototype = {\n        register: function(name, type, order) {\n            var items = this._items,\n                first = items[0],\n                entry = {\n                    name: name,\n                    type: type,\n                    order: order\n                };\n\n            if (!first || order < first.order) {\n                items.unshift(entry);\n            } else {\n                items.push(entry);\n            }\n        },\n\n        create: function(element, options) {\n            var items = this._items,\n                match = items[0];\n\n            if (options && options.type) {\n                var preferred = options.type.toLowerCase();\n                for (var i = 0; i < items.length; i++) {\n                    if (items[i].name === preferred) {\n                        match = items[i];\n                        break;\n                    }\n                }\n            }\n\n            if (match) {\n                return new match.type(element, options);\n            }\n\n            kendo.logToConsole(\n                \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n                \"- The browser does not support SVG, VML and Canvas. User agent: \" + navigator.userAgent + \"\\n\" +\n                \"- The Kendo UI scripts are not fully loaded\");\n        }\n    };\n\n    SurfaceFactory.current = new SurfaceFactory();\n\n    // Exports ================================================================\n    deepExtend(kendo, {\n        drawing: {\n            DASH_ARRAYS: {\n                dot: [1.5, 3.5],\n                dash: [4, 3.5],\n                longdash: [8, 3.5],\n                dashdot: [3.5, 3.5, 1.5, 3.5],\n                longdashdot: [8, 3.5, 1.5, 3.5],\n                longdashdotdot: [8, 3.5, 1.5, 3.5, 1.5, 3.5]\n            },\n\n            Color: kendo.Color,\n            BaseNode: BaseNode,\n            OptionsStore: OptionsStore,\n            Surface: Surface,\n            SurfaceFactory: SurfaceFactory\n        }\n    });\n\n    kendo.dataviz.drawing = kendo.drawing;\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        defined = kendo.util.defined;\n\n    // Constants ==============================================================\n        var GRADIENT = \"gradient\";\n\n    // Mixins =================================================================\n    var Paintable = {\n        extend: function(proto) {\n            proto.fill = this.fill;\n            proto.stroke = this.stroke;\n        },\n\n        fill: function(color, opacity) {\n            var options = this.options;\n\n            if (defined(color)) {\n                if (color && color.nodeType != GRADIENT) {\n                    var newFill = {\n                        color: color\n                    };\n                    if (defined(opacity)) {\n                        newFill.opacity = opacity;\n                    }\n                    options.set(\"fill\", newFill);\n                } else {\n                    options.set(\"fill\", color);\n                }\n\n                return this;\n            } else {\n                return options.get(\"fill\");\n            }\n        },\n\n        stroke: function(color, width, opacity) {\n            if (defined(color)) {\n                this.options.set(\"stroke.color\", color);\n\n                if (defined(width)) {\n                   this.options.set(\"stroke.width\", width);\n                }\n\n                if (defined(opacity)) {\n                   this.options.set(\"stroke.opacity\", opacity);\n                }\n\n                return this;\n            } else {\n                return this.options.get(\"stroke\");\n            }\n        }\n    };\n\n    var Traversable = {\n        extend: function(proto, childrenField) {\n            proto.traverse = function(callback) {\n                var children = this[childrenField];\n\n                for (var i = 0; i < children.length; i++) {\n                    var child = children[i];\n\n                    if (child.traverse) {\n                        child.traverse(callback);\n                    } else {\n                        callback(child);\n                    }\n                }\n\n                return this;\n            };\n        }\n    };\n\n    // Exports ================================================================\n    deepExtend(kendo.drawing, {\n        mixins: {\n            Paintable: Paintable,\n            Traversable: Traversable\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports =================================================================\n    var doc = document,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        defined = util.defined;\n\n    // Constants ===============================================================\n    var BASELINE_MARKER_SIZE = 1;\n\n    // Text metrics calculations ===============================================\n    var LRUCache = Class.extend({\n        init: function(size) {\n            this._size = size;\n            this._length = 0;\n            this._map = {};\n        },\n\n        put: function(key, value) {\n            var lru = this,\n                map = lru._map,\n                entry = { key: key, value: value };\n\n            map[key] = entry;\n\n            if (!lru._head) {\n                lru._head = lru._tail = entry;\n            } else {\n                lru._tail.newer = entry;\n                entry.older = lru._tail;\n                lru._tail = entry;\n            }\n\n            if (lru._length >= lru._size) {\n                map[lru._head.key] = null;\n                lru._head = lru._head.newer;\n                lru._head.older = null;\n            } else {\n                lru._length++;\n            }\n        },\n\n        get: function(key) {\n            var lru = this,\n                entry = lru._map[key];\n\n            if (entry) {\n                if (entry === lru._head && entry !== lru._tail) {\n                    lru._head = entry.newer;\n                    lru._head.older = null;\n                }\n\n                if (entry !== lru._tail) {\n                    if (entry.older) {\n                        entry.older.newer = entry.newer;\n                        entry.newer.older = entry.older;\n                    }\n\n                    entry.older = lru._tail;\n                    entry.newer = null;\n\n                    lru._tail.newer = entry;\n                    lru._tail = entry;\n                }\n\n                return entry.value;\n            }\n        }\n    });\n\n    var TextMetrics = Class.extend({\n        init: function() {\n            this._cache = new LRUCache(1000);\n        },\n\n        measure: function(text, style) {\n            var styleKey = util.objectKey(style),\n                cacheKey = util.hashKey(text + styleKey),\n                cachedResult = this._cache.get(cacheKey);\n\n            if (cachedResult) {\n                return cachedResult;\n            }\n\n            var size = { width: 0, height: 0, baseline: 0 };\n\n            var measureBox = this._measureBox,\n                baselineMarker = this._baselineMarker.cloneNode(false);\n\n            for (var key in style) {\n                var value = style[key];\n                if (defined(value)) {\n                    measureBox.style[key] = value;\n                }\n            }\n\n            measureBox.innerHTML = text;\n            measureBox.appendChild(baselineMarker);\n            doc.body.appendChild(measureBox);\n\n            if ((text + \"\").length) {\n                size.width = measureBox.offsetWidth - BASELINE_MARKER_SIZE;\n                size.height = measureBox.offsetHeight;\n                size.baseline = baselineMarker.offsetTop + BASELINE_MARKER_SIZE;\n            }\n\n            this._cache.put(cacheKey, size);\n\n            measureBox.parentNode.removeChild(measureBox);\n\n            return size;\n        }\n    });\n\n    TextMetrics.fn._baselineMarker =\n        $(\"<div class='k-baseline-marker' \" +\n          \"style='display: inline-block; vertical-align: baseline;\" +\n          \"width: \" + BASELINE_MARKER_SIZE + \"px; height: \" + BASELINE_MARKER_SIZE + \"px;\" +\n          \"overflow: hidden;' />\")[0];\n\n    TextMetrics.fn._measureBox =\n        $(\"<div style='position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;\" +\n                      \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\n                      \"line-height: normal !important; visibility: hidden !important; white-space:nowrap !important;' />\")[0];\n\n    TextMetrics.current = new TextMetrics();\n\n    function measureText(text, style) {\n        return TextMetrics.current.measure(text, style);\n    }\n\n    // Exports ================================================================\n    deepExtend(kendo.drawing, {\n        util: {\n            TextMetrics: TextMetrics,\n            LRUCache: LRUCache,\n\n            measureText: measureText\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n\n        g = kendo.geometry,\n        Point = g.Point,\n        Rect = g.Rect,\n        Size = g.Size,\n        Matrix = g.Matrix,\n        toMatrix = g.toMatrix,\n\n        drawing = kendo.drawing,\n        OptionsStore = drawing.OptionsStore,\n\n        math = Math,\n        pow = math.pow,\n\n        util = kendo.util,\n        append = util.append,\n        arrayLimits = util.arrayLimits,\n        defined = util.defined,\n        last = util.last,\n        valueOrDefault = util.valueOrDefault,\n        ObserversMixin = kendo.mixins.ObserversMixin,\n\n        inArray = $.inArray,\n        push = [].push,\n        pop = [].pop,\n        splice = [].splice,\n        shift = [].shift,\n        slice = [].slice,\n        unshift = [].unshift,\n        defId = 1;\n\n    // Drawing primitives =====================================================\n    var Element = Class.extend({\n        nodeType: \"Element\",\n\n        init: function(options) {\n            this._initOptions(options);\n        },\n\n        _initOptions: function(options) {\n            options = options || {};\n\n            var transform = options.transform;\n            var clip = options.clip;\n\n            if (transform) {\n                options.transform = g.transform(transform);\n            }\n\n            if (clip && !clip.id) {\n                clip.id = generateDefinitionId();\n            }\n\n            this.options = new OptionsStore(options);\n            this.options.addObserver(this);\n        },\n\n        transform: function(transform) {\n            if (defined(transform)) {\n                this.options.set(\"transform\", g.transform(transform));\n            } else {\n                return this.options.get(\"transform\");\n            }\n        },\n\n        parentTransform: function() {\n            var element = this,\n                transformation,\n                matrix,\n                parentMatrix;\n\n            while (element.parent) {\n                element = element.parent;\n                transformation = element.transform();\n                if (transformation) {\n                    parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n                }\n            }\n\n            if (parentMatrix) {\n                return g.transform(parentMatrix);\n            }\n        },\n\n        currentTransform: function(parentTransform) {\n            var elementTransform = this.transform(),\n                elementMatrix = toMatrix(elementTransform),\n                parentMatrix,\n                combinedMatrix;\n\n            if (!defined(parentTransform)) {\n                parentTransform = this.parentTransform();\n            }\n\n            parentMatrix = toMatrix(parentTransform);\n\n            if (elementMatrix && parentMatrix) {\n                combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n            } else {\n                combinedMatrix = elementMatrix || parentMatrix;\n            }\n\n            if (combinedMatrix) {\n                return g.transform(combinedMatrix);\n            }\n        },\n\n        visible: function(visible) {\n            if (defined(visible)) {\n                this.options.set(\"visible\", visible);\n                return this;\n            } else {\n                return this.options.get(\"visible\") !== false;\n            }\n        },\n\n        clip: function(clip) {\n            var options = this.options;\n            if (defined(clip)) {\n                if (clip && !clip.id) {\n                    clip.id = generateDefinitionId();\n                }\n                options.set(\"clip\", clip);\n                return this;\n            } else {\n                return options.get(\"clip\");\n            }\n        },\n\n        opacity: function(value) {\n            if (defined(value)) {\n                this.options.set(\"opacity\", value);\n                return this;\n            } else {\n                return valueOrDefault(this.options.get(\"opacity\"), 1);\n            }\n        },\n\n        clippedBBox: function(transformation) {\n            var box = this._clippedBBox(transformation);\n            if (box) {\n                var clip = this.clip();\n                return clip ? Rect.intersect(box, clip.bbox(transformation)) : box;\n            }\n        },\n\n        _clippedBBox: function(transformation) {\n            return this.bbox(transformation);\n        }\n    });\n\n    deepExtend(Element.fn, ObserversMixin);\n\n    var ElementsArray = Class.extend({\n        init: function(array) {\n            array = array || [];\n\n            this.length = 0;\n            this._splice(0, array.length, array);\n        },\n\n        elements: function(elements) {\n            if (elements) {\n                this._splice(0, this.length, elements);\n\n                this._change();\n                return this;\n            } else {\n                return this.slice(0);\n            }\n        },\n\n        push: function() {\n            var elements = arguments;\n            var result = push.apply(this, elements);\n\n            this._add(elements);\n\n            return result;\n        },\n\n        slice: slice,\n\n        pop: function() {\n            var length = this.length;\n            var result = pop.apply(this);\n\n            if (length) {\n                this._remove([result]);\n            }\n\n            return result;\n        },\n\n        splice: function(index, howMany) {\n            var elements = slice.call(arguments, 2);\n            var result = this._splice(index, howMany, elements);\n\n            this._change();\n\n            return result;\n        },\n\n        shift: function() {\n            var length = this.length;\n            var result = shift.apply(this);\n\n            if (length) {\n                this._remove([result]);\n            }\n\n            return result;\n        },\n\n        unshift: function() {\n            var elements = arguments;\n            var result = unshift.apply(this, elements);\n\n            this._add(elements);\n\n            return result;\n        },\n\n        indexOf: function(element) {\n            var that = this;\n            var idx;\n            var length;\n\n            for (idx = 0, length = that.length; idx < length; idx++) {\n                if (that[idx] === element) {\n                    return idx;\n                }\n            }\n            return -1;\n        },\n\n        _splice: function(index, howMany, elements) {\n            var result = splice.apply(this, [index, howMany].concat(elements));\n\n            this._clearObserver(result);\n            this._setObserver(elements);\n\n            return result;\n        },\n\n        _add: function(elements) {\n            this._setObserver(elements);\n            this._change();\n        },\n\n        _remove: function(elements) {\n            this._clearObserver(elements);\n            this._change();\n        },\n\n        _setObserver: function(elements) {\n            for (var idx = 0; idx < elements.length; idx++) {\n                elements[idx].addObserver(this);\n            }\n        },\n\n        _clearObserver: function(elements) {\n            for (var idx = 0; idx < elements.length; idx++) {\n                elements[idx].removeObserver(this);\n            }\n        },\n\n        _change: function() {}\n    });\n\n    deepExtend(ElementsArray.fn, ObserversMixin);\n\n    var Group = Element.extend({\n        nodeType: \"Group\",\n\n        init: function(options) {\n            Element.fn.init.call(this, options);\n            this.children = [];\n        },\n\n        childrenChange: function(action, items, index) {\n            this.trigger(\"childrenChange\",{\n                action: action,\n                items: items,\n                index: index\n            });\n        },\n\n        append: function() {\n            append(this.children, arguments);\n            this._reparent(arguments, this);\n\n            this.childrenChange(\"add\", arguments);\n\n            return this;\n        },\n\n        insertAt: function(element, index) {\n            this.children.splice(index, 0, element);\n            element.parent = this;\n\n            this.childrenChange(\"add\", [element], index);\n\n            return this;\n        },\n\n        remove: function(element) {\n            var index = inArray(element, this.children);\n            if (index >= 0) {\n                this.children.splice(index, 1);\n                element.parent = null;\n                this.childrenChange(\"remove\", [element], index);\n            }\n\n            return this;\n        },\n\n        removeAt: function(index) {\n            if (0 <= index && index < this.children.length) {\n                var element = this.children[index];\n                this.children.splice(index, 1);\n                element.parent = null;\n                this.childrenChange(\"remove\", [element], index);\n            }\n\n            return this;\n        },\n\n        clear: function() {\n            var items = this.children;\n            this.children = [];\n            this._reparent(items, null);\n\n            this.childrenChange(\"remove\", items, 0);\n\n            return this;\n        },\n\n        bbox: function(transformation) {\n            return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n        },\n\n        rawBBox: function() {\n            return elementsBoundingBox(this.children, false);\n        },\n\n        _clippedBBox: function(transformation) {\n            return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n        },\n\n        currentTransform: function(transformation) {\n            return Element.fn.currentTransform.call(this, transformation) || null;\n        },\n\n        _reparent: function(elements, newParent) {\n            for (var i = 0; i < elements.length; i++) {\n                var child = elements[i];\n                var parent = child.parent;\n                if (parent && parent != this && parent.remove) {\n                    parent.remove(child);\n                }\n\n                child.parent = newParent;\n            }\n        }\n    });\n    drawing.mixins.Traversable.extend(Group.fn, \"children\");\n\n    var Text = Element.extend({\n        nodeType: \"Text\",\n\n        init: function(content, position, options) {\n            Element.fn.init.call(this, options);\n\n            this.content(content);\n            this.position(position || new g.Point());\n\n            if (!this.options.font) {\n                this.options.font = \"12px sans-serif\";\n            }\n\n            if (!defined(this.options.fill)) {\n                this.fill(\"#000\");\n            }\n        },\n\n        content: function(value) {\n            if (defined(value)) {\n                this.options.set(\"content\", value);\n                return this;\n            } else {\n                return this.options.get(\"content\");\n            }\n        },\n\n        measure: function() {\n            var metrics = drawing.util.measureText(this.content(), {\n                font: this.options.get(\"font\")\n            });\n\n            return metrics;\n        },\n\n        rect: function() {\n            var size = this.measure();\n            var pos = this.position().clone();\n            return new g.Rect(pos, [size.width, size.height]);\n        },\n\n        bbox: function(transformation) {\n            var combinedMatrix = toMatrix(this.currentTransform(transformation));\n            return this.rect().bbox(combinedMatrix);\n        },\n\n        rawBBox: function() {\n            return this.rect().bbox();\n        }\n    });\n    drawing.mixins.Paintable.extend(Text.fn);\n    definePointAccessors(Text.fn, [\"position\"]);\n\n    var Circle = Element.extend({\n        nodeType: \"Circle\",\n\n        init: function(geometry, options) {\n            Element.fn.init.call(this, options);\n            this.geometry(geometry || new g.Circle());\n\n            if (!defined(this.options.stroke)) {\n                this.stroke(\"#000\");\n            }\n        },\n\n        bbox: function(transformation) {\n            var combinedMatrix = toMatrix(this.currentTransform(transformation));\n            var rect = this._geometry.bbox(combinedMatrix);\n            var strokeWidth = this.options.get(\"stroke.width\");\n            if (strokeWidth) {\n                expandRect(rect, strokeWidth / 2);\n            }\n\n            return rect;\n        },\n\n        rawBBox: function() {\n            return this._geometry.bbox();\n        }\n    });\n    drawing.mixins.Paintable.extend(Circle.fn);\n    defineGeometryAccessors(Circle.fn, [\"geometry\"]);\n\n    var Arc = Element.extend({\n        nodeType: \"Arc\",\n\n        init: function(geometry, options) {\n            Element.fn.init.call(this, options);\n            this.geometry(geometry || new g.Arc());\n\n            if (!defined(this.options.stroke)) {\n                this.stroke(\"#000\");\n            }\n        },\n\n        bbox: function(transformation) {\n            var combinedMatrix = toMatrix(this.currentTransform(transformation));\n            var rect = this.geometry().bbox(combinedMatrix);\n            var strokeWidth = this.options.get(\"stroke.width\");\n\n            if (strokeWidth) {\n                expandRect(rect, strokeWidth / 2);\n            }\n\n            return rect;\n        },\n\n        rawBBox: function() {\n            return this.geometry().bbox();\n        },\n\n        toPath: function() {\n            var path = new Path();\n            var curvePoints = this.geometry().curvePoints();\n\n            if (curvePoints.length > 0) {\n                path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n                for (var i = 1; i < curvePoints.length; i+=3) {\n                    path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n                }\n            }\n\n            return path;\n        }\n    });\n    drawing.mixins.Paintable.extend(Arc.fn);\n    defineGeometryAccessors(Arc.fn, [\"geometry\"]);\n\n    var GeometryElementsArray = ElementsArray.extend({\n        _change: function() {\n            this.geometryChange();\n        }\n    });\n\n    var Segment = Class.extend({\n        init: function(anchor, controlIn, controlOut) {\n            this.anchor(anchor || new Point());\n            this.controlIn(controlIn);\n            this.controlOut(controlOut);\n        },\n\n        bboxTo: function(toSegment, matrix) {\n            var rect;\n            var segmentAnchor = this.anchor().transformCopy(matrix);\n            var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n\n            if (this.controlOut() && toSegment.controlIn()) {\n                rect = this._curveBoundingBox(\n                    segmentAnchor, this.controlOut().transformCopy(matrix),\n                    toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n                );\n            } else {\n                rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n            }\n\n            return rect;\n        },\n\n        _lineBoundingBox: function(p1, p2) {\n            return Rect.fromPoints(p1, p2);\n        },\n\n        _curveBoundingBox: function(p1, cp1, cp2, p2) {\n            var points = [p1, cp1, cp2, p2],\n                extremesX = this._curveExtremesFor(points, \"x\"),\n                extremesY = this._curveExtremesFor(points, \"y\"),\n                xLimits = arrayLimits([extremesX.min, extremesX.max, p1.x, p2.x]),\n                yLimits = arrayLimits([extremesY.min, extremesY.max, p1.y, p2.y]);\n\n            return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n        },\n\n        _curveExtremesFor: function(points, field) {\n            var extremes = this._curveExtremes(\n                points[0][field], points[1][field],\n                points[2][field], points[3][field]\n            );\n\n            return {\n                min: this._calculateCurveAt(extremes.min, field, points),\n                max: this._calculateCurveAt(extremes.max, field, points)\n            };\n        },\n\n        _calculateCurveAt: function (t, field, points) {\n            var t1 = 1- t;\n\n            return pow(t1, 3) * points[0][field] +\n                   3 * pow(t1, 2) * t * points[1][field] +\n                   3 * pow(t, 2) * t1 * points[2][field] +\n                   pow(t, 3) * points[3][field];\n        },\n\n        _curveExtremes: function (x1, x2, x3, x4) {\n            var a = x1 - 3 * x2 + 3 * x3 - x4;\n            var b = - 2 * (x1 - 2 * x2 + x3);\n            var c = x1 - x2;\n            var sqrt = math.sqrt(b * b - 4 * a * c);\n            var t1 = 0;\n            var t2 = 1;\n\n            if (a === 0) {\n                if (b !== 0) {\n                    t1 = t2 = -c / b;\n                }\n            } else if (!isNaN(sqrt)) {\n                t1 = (- b + sqrt) / (2 * a);\n                t2 = (- b - sqrt) / (2 * a);\n            }\n\n            var min = math.max(math.min(t1, t2), 0);\n            if (min < 0 || min > 1) {\n                min = 0;\n            }\n\n            var max = math.min(math.max(t1, t2), 1);\n            if (max > 1 || max < 0) {\n                max = 1;\n            }\n\n            return {\n                min: min,\n                max: max\n            };\n        }\n    });\n    definePointAccessors(Segment.fn, [\"anchor\", \"controlIn\", \"controlOut\"]);\n    deepExtend(Segment.fn, ObserversMixin);\n\n    var Path = Element.extend({\n        nodeType: \"Path\",\n\n        init: function(options) {\n            Element.fn.init.call(this, options);\n            this.segments = new GeometryElementsArray();\n            this.segments.addObserver(this);\n\n            if (!defined(this.options.stroke)) {\n                this.stroke(\"#000\");\n\n                if (!defined(this.options.stroke.lineJoin)) {\n                    this.options.set(\"stroke.lineJoin\", \"miter\");\n                }\n            }\n        },\n\n        moveTo: function(x, y) {\n            this.suspend();\n            this.segments.elements([]);\n            this.resume();\n\n            this.lineTo(x, y);\n\n            return this;\n        },\n\n        lineTo: function(x, y) {\n            var point = defined(y) ? new Point(x, y) : x,\n                segment = new Segment(point);\n\n            this.segments.push(segment);\n\n            return this;\n        },\n\n        curveTo: function(controlOut, controlIn, point) {\n            if (this.segments.length > 0) {\n                var lastSegment = last(this.segments);\n                var segment = new Segment(point, controlIn);\n                this.suspend();\n                lastSegment.controlOut(controlOut);\n                this.resume();\n\n                this.segments.push(segment);\n            }\n\n            return this;\n        },\n\n        arc: function(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n            if (this.segments.length > 0) {\n                var lastSegment = last(this.segments);\n                var anchor = lastSegment.anchor();\n                var start = util.rad(startAngle);\n                var center = new Point(anchor.x - radiusX * math.cos(start),\n                    anchor.y - radiusY * math.sin(start));\n                var arc = new g.Arc(center, {\n                    startAngle: startAngle,\n                    endAngle: endAngle,\n                    radiusX: radiusX,\n                    radiusY: radiusY,\n                    anticlockwise: anticlockwise\n                });\n\n                this._addArcSegments(arc);\n            }\n\n            return this;\n        },\n\n        arcTo: function(end, rx, ry, largeArc, swipe) {\n            if (this.segments.length > 0) {\n                var lastSegment = last(this.segments);\n                var anchor = lastSegment.anchor();\n                var arc = g.Arc.fromPoints(anchor, end, rx, ry, largeArc, swipe);\n\n                this._addArcSegments(arc);\n            }\n            return this;\n        },\n\n        _addArcSegments: function(arc) {\n            this.suspend();\n            var curvePoints = arc.curvePoints();\n            for (var i = 1; i < curvePoints.length; i+=3) {\n                this.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n            }\n            this.resume();\n            this.geometryChange();\n        },\n\n        close: function() {\n            this.options.closed = true;\n            this.geometryChange();\n\n            return this;\n        },\n\n        bbox: function(transformation) {\n            var combinedMatrix = toMatrix(this.currentTransform(transformation));\n            var boundingBox = this._bbox(combinedMatrix);\n            var strokeWidth = this.options.get(\"stroke.width\");\n            if (strokeWidth) {\n                expandRect(boundingBox, strokeWidth / 2);\n            }\n            return boundingBox;\n        },\n\n        rawBBox: function() {\n            return this._bbox();\n        },\n\n        _bbox: function(matrix) {\n            var segments = this.segments;\n            var length = segments.length;\n            var boundingBox;\n\n            if (length === 1) {\n                var anchor = segments[0].anchor().transformCopy(matrix);\n                boundingBox = new Rect(anchor, Size.ZERO);\n            } else if (length > 0) {\n                for (var i = 1; i < length; i++) {\n                    var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n                    if (boundingBox) {\n                        boundingBox = Rect.union(boundingBox, segmentBox);\n                    } else {\n                        boundingBox = segmentBox;\n                    }\n                }\n            }\n\n            return boundingBox;\n        }\n    });\n    drawing.mixins.Paintable.extend(Path.fn);\n\n    Path.fromRect = function(rect, options) {\n        return new Path(options)\n            .moveTo(rect.topLeft())\n            .lineTo(rect.topRight())\n            .lineTo(rect.bottomRight())\n            .lineTo(rect.bottomLeft())\n            .close();\n    };\n\n    Path.fromPoints = function(points, options) {\n        if (points) {\n            var path = new Path(options);\n\n            for (var i = 0; i < points.length; i++) {\n                var pt = Point.create(points[i]);\n                if (pt) {\n                    if (i === 0) {\n                        path.moveTo(pt);\n                    } else {\n                        path.lineTo(pt);\n                    }\n                }\n            }\n\n            return path;\n        }\n    };\n\n    Path.fromArc = function(arc, options) {\n        var path = new Path(options);\n        var startAngle = arc.startAngle;\n        var start = arc.pointAt(startAngle);\n        path.moveTo(start.x, start.y);\n        path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n        return path;\n    };\n\n    var MultiPath = Element.extend({\n        nodeType: \"MultiPath\",\n\n        init: function(options) {\n            Element.fn.init.call(this, options);\n            this.paths = new GeometryElementsArray();\n            this.paths.addObserver(this);\n\n            if (!defined(this.options.stroke)) {\n                this.stroke(\"#000\");\n            }\n        },\n\n        moveTo: function(x, y) {\n            var path = new Path();\n            path.moveTo(x, y);\n\n            this.paths.push(path);\n\n            return this;\n        },\n\n        lineTo: function(x, y) {\n            if (this.paths.length > 0) {\n                last(this.paths).lineTo(x, y);\n            }\n\n            return this;\n        },\n\n        curveTo: function(controlOut, controlIn, point) {\n            if (this.paths.length > 0) {\n                last(this.paths).curveTo(controlOut, controlIn, point);\n            }\n\n            return this;\n        },\n\n        arc: function(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n            if (this.paths.length > 0) {\n                last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n            }\n\n            return this;\n        },\n\n        arcTo: function(end, rx, ry, largeArc, swipe) {\n            if (this.paths.length > 0) {\n                last(this.paths).arcTo(end, rx, ry, largeArc, swipe);\n            }\n\n            return this;\n        },\n\n        close: function() {\n            if (this.paths.length > 0) {\n                last(this.paths).close();\n            }\n\n            return this;\n        },\n\n        bbox: function(transformation) {\n            return elementsBoundingBox(this.paths, true, this.currentTransform(transformation));\n        },\n\n        rawBBox: function() {\n            return elementsBoundingBox(this.paths, false);\n        },\n\n        _clippedBBox: function(transformation) {\n            return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n        }\n    });\n    drawing.mixins.Paintable.extend(MultiPath.fn);\n\n    var Image = Element.extend({\n        nodeType: \"Image\",\n\n        init: function(src, rect, options) {\n            Element.fn.init.call(this, options);\n\n            this.src(src);\n            this.rect(rect || new g.Rect());\n        },\n\n        src: function(value) {\n            if (defined(value)) {\n                this.options.set(\"src\", value);\n                return this;\n            } else {\n                return this.options.get(\"src\");\n            }\n        },\n\n        bbox: function(transformation) {\n            var combinedMatrix = toMatrix(this.currentTransform(transformation));\n            return this._rect.bbox(combinedMatrix);\n        },\n\n        rawBBox: function() {\n            return this._rect.bbox();\n        }\n    });\n    defineGeometryAccessors(Image.fn, [\"rect\"]);\n\n    var GradientStop = Class.extend({\n        init: function(offset, color, opacity) {\n            this.options = new OptionsStore({\n                offset: offset,\n                color: color,\n                opacity: defined(opacity) ? opacity : 1\n            });\n            this.options.addObserver(this);\n        }\n    });\n\n    defineOptionsAccessors(GradientStop.fn, [\"offset\", \"color\", \"opacity\"]);\n    deepExtend(GradientStop.fn, ObserversMixin);\n\n    GradientStop.create = function(arg) {\n        if (defined(arg)) {\n            var stop;\n            if (arg instanceof GradientStop) {\n                stop = arg;\n            } else if (arg.length > 1) {\n                stop = new GradientStop(arg[0], arg[1], arg[2]);\n            } else {\n                stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n            }\n\n            return stop;\n        }\n    };\n\n    var StopsArray = ElementsArray.extend({\n        _change: function() {\n            this.optionsChange({\n                field: \"stops\"\n            });\n        }\n    });\n\n    var Gradient = Class.extend({\n        nodeType: \"gradient\",\n\n        init: function(options) {\n            this.stops = new StopsArray(this._createStops(options.stops));\n            this.stops.addObserver(this);\n            this._userSpace = options.userSpace;\n            this.id = generateDefinitionId();\n        },\n\n        userSpace: function(value) {\n            if (defined(value)) {\n                this._userSpace = value;\n                this.optionsChange();\n                return this;\n            } else {\n                return this._userSpace;\n            }\n        },\n\n        _createStops: function(stops) {\n            var result = [];\n            var idx;\n            stops = stops || [];\n            for (idx = 0; idx < stops.length; idx++) {\n                result.push(GradientStop.create(stops[idx]));\n            }\n\n            return result;\n        },\n\n        addStop: function(offset, color, opacity) {\n            this.stops.push(new GradientStop(offset, color, opacity));\n        },\n\n        removeStop: function(stop) {\n            var index = this.stops.indexOf(stop);\n            if (index >= 0) {\n                this.stops.splice(index, 1);\n            }\n        }\n    });\n\n    deepExtend(Gradient.fn, ObserversMixin, {\n        optionsChange: function(e) {\n            this.trigger(\"optionsChange\", {\n                field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n                value: this\n            });\n        },\n\n        geometryChange: function() {\n            this.optionsChange();\n        }\n    });\n\n    var LinearGradient = Gradient.extend({\n        init: function(options) {\n            options = options || {};\n            Gradient.fn.init.call(this, options);\n\n            this.start(options.start || new Point());\n\n            this.end(options.end || new Point(1, 0));\n        }\n    });\n\n    definePointAccessors(LinearGradient.fn, [\"start\", \"end\"]);\n\n    var RadialGradient = Gradient.extend({\n        init: function(options) {\n            options = options || {};\n            Gradient.fn.init.call(this, options);\n\n            this.center(options.center  || new Point());\n            this._radius = defined(options.radius) ? options.radius : 1;\n            this._fallbackFill = options.fallbackFill;\n        },\n\n        radius: function(value) {\n            if (defined(value)) {\n                this._radius = value;\n                this.geometryChange();\n                return this;\n            } else {\n                return this._radius;\n            }\n        },\n\n        fallbackFill: function(value) {\n            if (defined(value)) {\n                this._fallbackFill = value;\n                this.optionsChange();\n                return this;\n            } else {\n                return this._fallbackFill;\n            }\n        }\n    });\n\n    definePointAccessors(RadialGradient.fn, [\"center\"]);\n\n    // Helper functions ===========================================\n    function elementsBoundingBox(elements, applyTransform, transformation) {\n        var boundingBox;\n\n        for (var i = 0; i < elements.length; i++) {\n            var element = elements[i];\n            if (element.visible()) {\n                var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n                if (elementBoundingBox) {\n                    if (boundingBox) {\n                        boundingBox = Rect.union(boundingBox, elementBoundingBox);\n                    } else {\n                        boundingBox = elementBoundingBox;\n                    }\n                }\n            }\n        }\n\n        return boundingBox;\n    }\n\n    function elementsClippedBoundingBox(elements, transformation) {\n        var boundingBox;\n\n        for (var i = 0; i < elements.length; i++) {\n            var element = elements[i];\n            if (element.visible()) {\n                var elementBoundingBox = element.clippedBBox(transformation);\n                if (elementBoundingBox) {\n                    if (boundingBox) {\n                        boundingBox = Rect.union(boundingBox, elementBoundingBox);\n                    } else {\n                        boundingBox = elementBoundingBox;\n                    }\n                }\n            }\n        }\n\n        return boundingBox;\n    }\n\n    function expandRect(rect, value) {\n        rect.origin.x -= value;\n        rect.origin.y -= value;\n        rect.size.width += value * 2;\n        rect.size.height += value * 2;\n    }\n\n    function defineGeometryAccessors(fn, names) {\n        for (var i = 0; i < names.length; i++) {\n            fn[names[i]] = geometryAccessor(names[i]);\n        }\n    }\n\n    function geometryAccessor(name) {\n        var fieldName = \"_\" + name;\n        return function(value) {\n            if (defined(value)) {\n                this._observerField(fieldName, value);\n                this.geometryChange();\n                return this;\n            } else {\n                return this[fieldName];\n            }\n        };\n    }\n\n    function definePointAccessors(fn, names) {\n        for (var i = 0; i < names.length; i++) {\n            fn[names[i]] = pointAccessor(names[i]);\n        }\n    }\n\n    function pointAccessor(name) {\n        var fieldName = \"_\" + name;\n        return function(value) {\n            if (defined(value)) {\n                this._observerField(fieldName, Point.create(value));\n                this.geometryChange();\n                return this;\n            } else {\n                return this[fieldName];\n            }\n        };\n    }\n\n    function defineOptionsAccessors(fn, names) {\n        for (var i = 0; i < names.length; i++) {\n            fn[names[i]] = optionsAccessor(names[i]);\n        }\n    }\n\n    function optionsAccessor(name) {\n        return function(value) {\n            if (defined(value)) {\n                this.options.set(name, value);\n                return this;\n            } else {\n                return this.options.get(name);\n            }\n        };\n    }\n\n    function generateDefinitionId() {\n        return \"kdef\" + defId++;\n    }\n\n    // Exports ================================================================\n    deepExtend(drawing, {\n        Arc: Arc,\n        Circle: Circle,\n        Element: Element,\n        ElementsArray: ElementsArray,\n        Gradient: Gradient,\n        GradientStop: GradientStop,\n        Group: Group,\n        Image: Image,\n        LinearGradient: LinearGradient,\n        MultiPath: MultiPath,\n        Path: Path,\n        RadialGradient: RadialGradient,\n        Segment: Segment,\n        Text: Text\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    var kendo = window.kendo,\n        drawing = kendo.drawing,\n        geometry = kendo.geometry,\n\n        Class = kendo.Class,\n        Point = geometry.Point,\n        deepExtend = kendo.deepExtend,\n        trim = $.trim,\n        util = kendo.util,\n        deg = util.deg,\n        last = util.last,\n        round = util.round;\n\n    var SEGMENT_REGEX = /([a-z]{1})([^a-z]*)(z)?/gi,\n        SPLIT_REGEX = /[,\\s]?(-?(?:\\d+\\.)?\\d+)/g,\n        MOVE = \"m\",\n        CLOSE = \"z\";\n\n    var PathParser = Class.extend({\n        parse: function(str, options) {\n            var parser = this;\n            var multiPath = new drawing.MultiPath(options);\n            var position = new Point();\n            var previousCommand;\n\n            str.replace(SEGMENT_REGEX, function(match, element, params, closePath) {\n                var command = element.toLowerCase();\n                var isRelative = command === element;\n                var parameters = parseParameters(trim(params));\n\n                if (command === MOVE) {\n                    if (isRelative) {\n                        position.x += parameters[0];\n                        position.y += parameters[1];\n                    } else {\n                        position.x = parameters[0];\n                        position.y = parameters[1];\n                    }\n\n                    multiPath.moveTo(position.x, position.y);\n\n                    if (parameters.length > 2) {\n                        command = \"l\";\n                        parameters.splice(0, 2);\n                    }\n                }\n\n                if (ShapeMap[command]) {\n                    ShapeMap[command](\n                        multiPath, {\n                            parameters: parameters,\n                            position: position,\n                            isRelative: isRelative,\n                            previousCommand: previousCommand\n                        }\n                    );\n\n                    if (closePath && closePath.toLowerCase() === CLOSE) {\n                        multiPath.close();\n                    }\n                } else if (command !== MOVE) {\n                    throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n                }\n\n                previousCommand = command;\n            });\n\n            return multiPath;\n        }\n    });\n\n    var ShapeMap = {\n        l: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            for (var i = 0; i < parameters.length; i+=2){\n                var point = new Point(parameters[i], parameters[i + 1]);\n\n                if (options.isRelative) {\n                    point.translateWith(position);\n                }\n\n                path.lineTo(point.x, point.y);\n\n                position.x = point.x;\n                position.y = point.y;\n            }\n        },\n\n        c: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            var controlOut, controlIn, point;\n\n            for (var i = 0; i < parameters.length; i += 6) {\n                controlOut = new Point(parameters[i], parameters[i + 1]);\n                controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n                point = new Point(parameters[i + 4], parameters[i + 5]);\n                if (options.isRelative) {\n                    controlIn.translateWith(position);\n                    controlOut.translateWith(position);\n                    point.translateWith(position);\n                }\n\n                path.curveTo(controlOut, controlIn, point);\n\n                position.x = point.x;\n                position.y = point.y;\n            }\n        },\n\n        v: function(path, options) {\n            var value = options.isRelative ? 0 : options.position.x;\n\n            toLineParamaters(options.parameters, true, value);\n            this.l(path, options);\n        },\n\n        h: function(path, options) {\n            var value = options.isRelative ? 0 : options.position.y;\n\n            toLineParamaters(options.parameters, false, value);\n            this.l(path, options);\n        },\n\n        a: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            for (var i = 0; i < parameters.length; i += 7) {\n                var radiusX = parameters[i];\n                var radiusY = parameters[i + 1];\n                var largeArc = parameters[i + 3];\n                var swipe = parameters[i + 4];\n                var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n\n                if (options.isRelative) {\n                    endPoint.translateWith(position);\n                }\n\n                path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe);\n\n                position.x = endPoint.x;\n                position.y = endPoint.y;\n            }\n        },\n\n        s: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            var previousCommand = options.previousCommand;\n            var controlOut, endPoint, controlIn, lastControlIn;\n\n            if (previousCommand == \"s\" || previousCommand == \"c\") {\n                lastControlIn = last(last(path.paths).segments).controlIn();\n            }\n\n            for (var i = 0; i < parameters.length; i += 4) {\n                controlIn = new Point(parameters[i], parameters[i + 1]);\n                endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n                if (options.isRelative) {\n                    controlIn.translateWith(position);\n                    endPoint.translateWith(position);\n                }\n\n                if (lastControlIn) {\n                    controlOut = reflectionPoint(lastControlIn, position);\n                } else {\n                    controlOut = position.clone();\n                }\n                lastControlIn = controlIn;\n\n                path.curveTo(controlOut, controlIn, endPoint);\n\n                position.x = endPoint.x;\n                position.y = endPoint.y;\n            }\n        },\n\n        q: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            var cubicControlPoints, endPoint, controlPoint;\n            for (var i = 0; i < parameters.length; i += 4) {\n                controlPoint = new Point(parameters[i], parameters[i + 1]);\n                endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n                if (options.isRelative) {\n                    controlPoint.translateWith(position);\n                    endPoint.translateWith(position);\n                }\n                cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n                path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n                position.x = endPoint.x;\n                position.y = endPoint.y;\n            }\n        },\n\n        t: function(path, options) {\n            var parameters = options.parameters;\n            var position = options.position;\n            var previousCommand = options.previousCommand;\n            var cubicControlPoints, controlPoint, endPoint;\n\n            if (previousCommand == \"q\" || previousCommand == \"t\") {\n                var lastSegment = last(last(path.paths).segments);\n                controlPoint = lastSegment.controlIn().clone()\n                    .translateWith(position.scaleCopy(-1 / 3))\n                    .scale(3 / 2);\n            }\n\n            for (var i = 0; i < parameters.length; i += 2) {\n                endPoint = new Point(parameters[i], parameters[i + 1]);\n                if (options.isRelative) {\n                    endPoint.translateWith(position);\n                }\n\n                if (controlPoint) {\n                    controlPoint = reflectionPoint(controlPoint, position);\n                } else {\n                    controlPoint = position.clone();\n                }\n\n                cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n                path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n                position.x = endPoint.x;\n                position.y = endPoint.y;\n            }\n        }\n    };\n\n    // Helper functions =======================================================\n\n    function parseParameters(str) {\n        var parameters = [];\n        str.replace(SPLIT_REGEX, function(match, number) {\n            parameters.push(parseFloat(number));\n        });\n        return parameters;\n    }\n\n    function toLineParamaters(parameters, isVertical, value) {\n        var insertPosition = isVertical ? 0 : 1;\n\n        for (var i = 0; i < parameters.length; i+=2) {\n            parameters.splice(i + insertPosition, 0, value);\n        }\n    }\n\n    function reflectionPoint(point, center) {\n        if (point && center) {\n            return center.scaleCopy(2).translate(-point.x, -point.y);\n        }\n    }\n\n    function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n        var third = 1 / 3;\n        controlPoint = controlPoint.clone().scale(2 / 3);\n        return {\n            controlOut: controlPoint.clone().translateWith(position.scaleCopy(third)),\n            controlIn: controlPoint.translateWith(endPoint.scaleCopy(third))\n        };\n    }\n\n    // Exports ================================================================\n    PathParser.current = new PathParser();\n\n    drawing.Path.parse = function(str, options) {\n        return PathParser.current.parse(str, options);\n    };\n\n    deepExtend(drawing, {\n        PathParser: PathParser\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports ================================================================\n    var doc = document,\n\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n\n        g = kendo.geometry,\n        d = kendo.drawing,\n        BaseNode = d.BaseNode,\n\n        util = kendo.util,\n        defined = util.defined,\n        isTransparent = util.isTransparent,\n        renderAttr = util.renderAttr,\n        renderAllAttr = util.renderAllAttr,\n        renderSize = util.renderSize,\n        renderTemplate = util.renderTemplate,\n        inArray = $.inArray;\n\n    // Constants ==============================================================\n    var BUTT = \"butt\",\n        DASH_ARRAYS = d.DASH_ARRAYS,\n        GRADIENT = \"gradient\",\n        NONE = \"none\",\n        NS = \".kendo\",\n        SOLID = \"solid\",\n        SPACE = \" \",\n        SQUARE = \"square\",\n        SVG_NS = \"http://www.w3.org/2000/svg\",\n        TRANSFORM = \"transform\",\n        UNDEFINED = \"undefined\";\n\n    // SVG rendering surface ==================================================\n    var Surface = d.Surface.extend({\n        init: function(element, options) {\n            d.Surface.fn.init.call(this, element, options);\n\n            this._root = new RootNode(this.options);\n\n            renderSVG(this.element[0], this._template(this));\n            this._rootElement = this.element[0].firstElementChild;\n            alignToScreen(this._rootElement);\n\n            this._root.attachTo(this._rootElement);\n\n            this.element.on(\"click\" + NS, this._click);\n            this.element.on(\"mouseover\" + NS, this._mouseenter);\n            this.element.on(\"mouseout\" + NS, this._mouseleave);\n\n            this.resize();\n        },\n\n        type: \"svg\",\n\n        destroy: function() {\n            if (this._root) {\n                this._root.destroy();\n                this._root = null;\n                this._rootElement = null;\n                this.element.off(NS);\n            }\n            d.Surface.fn.destroy.call(this);\n        },\n\n        translate: function(offset) {\n            var viewBox = kendo.format(\n                \"{0} {1} {2} {3}\",\n                Math.round(offset.x), Math.round(offset.y),\n                this._size.width, this._size.height);\n\n            this._offset = offset;\n            this._rootElement.setAttribute(\"viewBox\", viewBox);\n        },\n\n        draw: function(element) {\n            this._root.load([element]);\n        },\n\n        clear: function() {\n            this._root.clear();\n        },\n\n        svg: function() {\n            return \"<?xml version='1.0' ?>\" + this._template(this);\n        },\n\n        _resize: function() {\n            if (this._offset) {\n                this.translate(this._offset);\n            }\n        },\n\n        _template: renderTemplate(\n            \"<svg style='width: 100%; height: 100%; overflow: hidden;' \" +\n            \"xmlns='\" + SVG_NS + \"' \" + \"xmlns:xlink='http://www.w3.org/1999/xlink' \" +\n            \"version='1.1'>#= d._root.render() #</svg>\"\n        )\n    });\n\n    // SVG Node ================================================================\n    var Node = BaseNode.extend({\n        init: function(srcElement) {\n            BaseNode.fn.init.call(this, srcElement);\n            this.definitions = {};\n        },\n\n        destroy: function() {\n            if (this.element) {\n                this.element._kendoNode = null;\n                this.element = null;\n            }\n\n            this.clearDefinitions();\n            BaseNode.fn.destroy.call(this);\n        },\n\n        load: function(elements, pos) {\n            var node = this,\n                element = node.element,\n                childNode,\n                srcElement,\n                children,\n                i;\n\n            for (i = 0; i < elements.length; i++) {\n                srcElement = elements[i];\n                children = srcElement.children;\n\n                childNode = new nodeMap[srcElement.nodeType](srcElement);\n\n                if (defined(pos)) {\n                    node.insertAt(childNode, pos);\n                } else {\n                    node.append(childNode);\n                }\n\n                childNode.createDefinitions();\n\n                if (children && children.length > 0) {\n                    childNode.load(children);\n                }\n\n                if (element) {\n                    childNode.attachTo(element, pos);\n                }\n            }\n        },\n\n        root: function() {\n            var root = this;\n\n            while (root.parent) {\n                root = root.parent;\n            }\n\n            return root;\n        },\n\n        attachTo: function(domElement, pos) {\n            var container = doc.createElement(\"div\");\n            renderSVG(container,\n                \"<svg xmlns='\" + SVG_NS + \"' version='1.1'>\" +\n                this.render() +\n                \"</svg>\"\n            );\n\n            var element = container.firstChild.firstChild;\n            if (element) {\n                if (defined(pos)) {\n                    domElement.insertBefore(element, domElement.childNodes[pos]);\n                } else {\n                    domElement.appendChild(element);\n                }\n                this.setElement(element);\n            }\n        },\n\n        setElement: function(element) {\n            var nodes = this.childNodes,\n                childElement,\n                i;\n\n            if (this.element) {\n                this.element._kendoNode = null;\n            }\n\n            this.element = element;\n            this.element._kendoNode = this;\n\n            for (i = 0; i < nodes.length; i++) {\n                childElement = element.childNodes[i];\n                nodes[i].setElement(childElement);\n            }\n        },\n\n        clear: function() {\n            this.clearDefinitions();\n\n            if (this.element) {\n                this.element.innerHTML = \"\";\n            }\n\n            var children = this.childNodes;\n            for (var i = 0; i < children.length; i++) {\n                children[i].destroy();\n            }\n\n            this.childNodes = [];\n        },\n\n        removeSelf: function() {\n            if (this.element) {\n                this.element.parentNode.removeChild(this.element);\n                this.element = null;\n            }\n\n            BaseNode.fn.removeSelf.call(this);\n        },\n\n        template: renderTemplate(\n            \"#= d.renderChildren() #\"\n        ),\n\n        render: function() {\n            return this.template(this);\n        },\n\n        renderChildren: function() {\n            var nodes = this.childNodes,\n                output = \"\",\n                i;\n\n            for (i = 0; i < nodes.length; i++) {\n                output += nodes[i].render();\n            }\n\n            return output;\n        },\n\n        optionsChange: function(e) {\n            var field = e.field;\n            var value = e.value;\n\n            if (field === \"visible\") {\n                this.css(\"display\", value ? \"\" : NONE);\n            } else if (DefinitionMap[field] && isDefinition(field, value)) {\n                this.updateDefinition(field, value);\n            } else if (field === \"opacity\") {\n                this.attr(\"opacity\", value);\n            }\n\n            BaseNode.fn.optionsChange.call(this, e);\n        },\n\n        attr: function(name, value) {\n            if (this.element) {\n                this.element.setAttribute(name, value);\n            }\n        },\n\n        allAttr: function(attrs) {\n            for (var i = 0; i < attrs.length; i++) {\n                this.attr(attrs[i][0], attrs[i][1]);\n            }\n        },\n\n        css: function(name, value) {\n            if (this.element) {\n                this.element.style[name] = value;\n            }\n        },\n\n        allCss: function(styles) {\n            for (var i = 0; i < styles.length; i++) {\n                this.css(styles[i][0], styles[i][1]);\n            }\n        },\n\n        removeAttr: function(name) {\n            if (this.element) {\n                this.element.removeAttribute(name);\n            }\n        },\n\n        mapTransform: function(transform) {\n            var attrs = [];\n            if (transform) {\n                attrs.push([\n                   TRANSFORM,\n                   \"matrix(\" + transform.matrix().toString(6) + \")\"\n                ]);\n            }\n\n            return attrs;\n        },\n\n        renderTransform: function() {\n            return renderAllAttr(\n                this.mapTransform(this.srcElement.transform())\n            );\n        },\n\n        transformChange: function(value) {\n            if (value) {\n                this.allAttr(this.mapTransform(value));\n            } else {\n                this.removeAttr(TRANSFORM);\n            }\n        },\n\n        mapStyle: function() {\n            var options = this.srcElement.options;\n            var style = [[\"cursor\", options.cursor]];\n\n            if (options.visible === false) {\n                style.push([\"display\", NONE]);\n            }\n\n            return style;\n        },\n\n        renderStyle: function() {\n            return renderAttr(\"style\", util.renderStyle(this.mapStyle()));\n        },\n\n        renderOpacity: function() {\n            return renderAttr(\"opacity\", this.srcElement.options.opacity);\n        },\n\n        createDefinitions: function() {\n            var srcElement = this.srcElement;\n            var definitions = this.definitions;\n            var definition, field, options, hasDefinitions;\n            if (srcElement) {\n                options = srcElement.options;\n\n                for (field in DefinitionMap) {\n                    definition = options.get(field);\n                    if (definition && isDefinition(field, definition)) {\n                        definitions[field] = definition;\n                        hasDefinitions = true;\n                    }\n                }\n                if (hasDefinitions) {\n                    this.definitionChange({\n                        action: \"add\",\n                        definitions: definitions\n                    });\n                }\n            }\n        },\n\n        definitionChange: function(e) {\n            if (this.parent) {\n                this.parent.definitionChange(e);\n            }\n        },\n\n        updateDefinition: function(type, value) {\n            var definitions = this.definitions;\n            var current = definitions[type];\n            var attr = DefinitionMap[type];\n            var definition = {};\n            if (current) {\n                definition[type] = current;\n                this.definitionChange({\n                    action: \"remove\",\n                    definitions: definition\n                });\n                delete definitions[type];\n            }\n\n            if (!value) {\n                if (current) {\n                    this.removeAttr(attr);\n                }\n            } else {\n                definition[type] = value;\n                this.definitionChange({\n                    action: \"add\",\n                    definitions: definition\n                });\n                definitions[type] = value;\n                this.attr(attr, refUrl(value.id));\n            }\n        },\n\n        clearDefinitions: function() {\n            var definitions = this.definitions;\n            var field;\n\n            for (field in definitions) {\n                this.definitionChange({\n                    action: \"remove\",\n                    definitions: definitions\n                });\n                this.definitions = {};\n                break;\n            }\n        },\n\n        renderDefinitions: function() {\n            return renderAllAttr(this.mapDefinitions());\n        },\n\n        mapDefinitions: function() {\n            var definitions = this.definitions;\n            var attrs = [];\n            var field;\n            for (field in definitions) {\n                attrs.push([DefinitionMap[field], refUrl(definitions[field].id)]);\n            }\n\n            return attrs;\n        }\n    });\n\n    var RootNode = Node.extend({\n        init: function(options) {\n            Node.fn.init.call(this);\n            this.options = options;\n            this.defs = new DefinitionNode();\n        },\n\n        attachTo: function(domElement) {\n            this.element = domElement;\n            this.defs.attachTo(domElement.firstElementChild);\n        },\n\n        clear: function() {\n            BaseNode.fn.clear.call(this);\n        },\n\n        template: renderTemplate(\n            \"#=d.defs.render()##= d.renderChildren() #\"\n        ),\n\n        definitionChange: function(e) {\n            this.defs.definitionChange(e);\n        }\n    });\n\n    var DefinitionNode = Node.extend({\n        init: function() {\n            Node.fn.init.call(this);\n            this.definitionMap = {};\n        },\n\n        attachTo: function(domElement) {\n            this.element = domElement;\n        },\n\n        template: renderTemplate(\n            \"<defs>#= d.renderChildren()#</defs>\"\n        ),\n\n        definitionChange: function(e) {\n            var definitions = e.definitions;\n            var action = e.action;\n\n            if (action == \"add\") {\n                this.addDefinitions(definitions);\n            } else if (action == \"remove\") {\n                this.removeDefinitions(definitions);\n            }\n        },\n\n        createDefinition: function(type, item) {\n            var nodeType;\n            if (type == \"clip\") {\n                nodeType = ClipNode;\n            } else if (type == \"fill\") {\n                if (item instanceof d.LinearGradient) {\n                    nodeType = LinearGradientNode;\n                } else if (item instanceof d.RadialGradient) {\n                    nodeType = RadialGradientNode;\n                }\n            }\n            return new nodeType(item);\n        },\n\n        addDefinitions: function(definitions) {\n            for (var field in definitions) {\n                this.addDefinition(field, definitions[field]);\n            }\n        },\n\n        addDefinition: function(type, srcElement) {\n            var definitionMap = this.definitionMap;\n            var id = srcElement.id;\n            var element = this.element;\n            var node, mapItem;\n\n            mapItem = definitionMap[id];\n            if (!mapItem) {\n                node = this.createDefinition(type, srcElement);\n                definitionMap[id] = {\n                    element: node,\n                    count: 1\n                };\n                this.append(node);\n                if (element) {\n                    node.attachTo(this.element);\n                }\n            } else {\n                mapItem.count++;\n            }\n        },\n\n        removeDefinitions: function(definitions) {\n            for (var field in definitions) {\n                this.removeDefinition(definitions[field]);\n            }\n        },\n\n        removeDefinition: function(srcElement) {\n            var definitionMap = this.definitionMap;\n            var id = srcElement.id;\n            var mapItem;\n\n            mapItem = definitionMap[id];\n            if (mapItem) {\n                mapItem.count--;\n                if (mapItem.count === 0) {\n                    this.remove(inArray(mapItem.element, this.childNodes), 1);\n                    delete definitionMap[id];\n                }\n            }\n        }\n    });\n\n    var ClipNode = Node.extend({\n        init: function(srcElement) {\n            Node.fn.init.call(this);\n\n            this.srcElement = srcElement;\n            this.id = srcElement.id;\n\n            this.load([srcElement]);\n        },\n\n        template: renderTemplate(\n            \"<clipPath id='#=d.id#'>#= d.renderChildren()#</clipPath>\"\n        )\n    });\n\n    var GroupNode = Node.extend({\n        template: renderTemplate(\n            \"<g#= d.renderTransform() + d.renderStyle() + d.renderOpacity() + d.renderDefinitions()#>#= d.renderChildren() #</g>\"\n        ),\n\n        optionsChange: function(e) {\n            if (e.field == TRANSFORM) {\n                this.transformChange(e.value);\n            }\n\n            Node.fn.optionsChange.call(this, e);\n        }\n    });\n\n    var PathNode = Node.extend({\n        geometryChange: function() {\n            this.attr(\"d\", this.renderData());\n            this.invalidate();\n        },\n\n        optionsChange: function(e) {\n            switch(e.field) {\n                case \"fill\":\n                    if (e.value) {\n                        this.allAttr(this.mapFill(e.value));\n                    } else {\n                        this.removeAttr(\"fill\");\n                    }\n                    break;\n\n                case \"fill.color\":\n                    this.allAttr(this.mapFill({ color: e.value }));\n                    break;\n\n                case \"stroke\":\n                    if (e.value) {\n                        this.allAttr(this.mapStroke(e.value));\n                    } else {\n                        this.removeAttr(\"stroke\");\n                    }\n                    break;\n\n                case TRANSFORM:\n                    this.transformChange(e.value);\n                    break;\n\n                default:\n                    var name = this.attributeMap[e.field];\n                    if (name) {\n                        this.attr(name, e.value);\n                    }\n                    break;\n            }\n\n            Node.fn.optionsChange.call(this, e);\n        },\n\n        attributeMap: {\n            \"fill.opacity\": \"fill-opacity\",\n            \"stroke.color\": \"stroke\",\n            \"stroke.width\": \"stroke-width\",\n            \"stroke.opacity\": \"stroke-opacity\"\n        },\n\n        content: function(value) {\n            if (this.element) {\n                this.element.textContent = this.srcElement.content();\n            }\n        },\n\n        renderData: function() {\n            return this.printPath(this.srcElement);\n        },\n\n        printPath: function(path) {\n            var segments = path.segments,\n                length = segments.length;\n            if (length > 0) {\n                var parts = [],\n                    output,\n                    segmentType,\n                    currentType,\n                    i;\n\n                for (i = 1; i < length; i++) {\n                    segmentType = this.segmentType(segments[i - 1], segments[i]);\n                    if (segmentType !== currentType) {\n                        currentType = segmentType;\n                        parts.push(segmentType);\n                    }\n\n                    if (segmentType === \"L\") {\n                        parts.push(this.printPoints(segments[i].anchor()));\n                    } else {\n                        parts.push(this.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n                    }\n                }\n\n                output = \"M\" + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n                if (path.options.closed) {\n                    output += \"Z\";\n                }\n\n                return output;\n            }\n        },\n\n        printPoints: function() {\n            var points = arguments,\n                length = points.length,\n                i, result = [];\n\n            for (i = 0; i < length; i++) {\n                result.push(points[i].toString(3));\n            }\n\n            return result.join(SPACE);\n        },\n\n        segmentType: function(segmentStart, segmentEnd) {\n            return segmentStart.controlOut() && segmentEnd.controlIn() ? \"C\" : \"L\";\n        },\n\n        mapStroke: function(stroke) {\n            var attrs = [];\n\n            if (stroke && !isTransparent(stroke.color)) {\n                attrs.push([\"stroke\", stroke.color]);\n                attrs.push([\"stroke-width\", stroke.width]);\n                attrs.push([\"stroke-linecap\", this.renderLinecap(stroke)]);\n                attrs.push([\"stroke-linejoin\", stroke.lineJoin]);\n\n                if (defined(stroke.opacity)) {\n                    attrs.push([\"stroke-opacity\", stroke.opacity]);\n                }\n\n                if (defined(stroke.dashType)) {\n                    attrs.push([\"stroke-dasharray\", this.renderDashType(stroke)]);\n                }\n            } else {\n                attrs.push([\"stroke\", NONE]);\n            }\n\n            return attrs;\n        },\n\n        renderStroke: function() {\n            return renderAllAttr(\n                this.mapStroke(this.srcElement.options.stroke)\n            );\n        },\n\n        renderDashType: function (stroke) {\n            var width = stroke.width || 1,\n                dashType = stroke.dashType;\n\n            if (dashType && dashType != SOLID) {\n                var dashArray = DASH_ARRAYS[dashType.toLowerCase()],\n                    result = [],\n                    i;\n\n                for (i = 0; i < dashArray.length; i++) {\n                    result.push(dashArray[i] * width);\n                }\n\n                return result.join(\" \");\n            }\n        },\n\n        renderLinecap: function(stroke) {\n            var dashType = stroke.dashType,\n                lineCap = stroke.lineCap;\n\n            return (dashType && dashType != SOLID) ? BUTT : lineCap;\n        },\n\n        mapFill: function(fill) {\n            var attrs = [];\n            if (!(fill && fill.nodeType == GRADIENT)) {\n                if (fill && !isTransparent(fill.color)) {\n                    attrs.push([\"fill\", fill.color]);\n\n                    if (defined(fill.opacity)) {\n                        attrs.push([\"fill-opacity\", fill.opacity]);\n                    }\n                } else {\n                    attrs.push([\"fill\", NONE]);\n                }\n            }\n\n            return attrs;\n        },\n\n        renderFill: function() {\n            return renderAllAttr(\n                this.mapFill(this.srcElement.options.fill)\n            );\n        },\n\n        template: renderTemplate(\n            \"<path #= d.renderStyle() # #= d.renderOpacity() # \" +\n            \"#= kendo.util.renderAttr('d', d.renderData()) # \" +\n            \"#= d.renderStroke() # \" +\n            \"#= d.renderFill() # \" +\n            \"#= d.renderDefinitions() # \" +\n            \"#= d.renderTransform() #></path>\"\n        )\n    });\n\n    var ArcNode = PathNode.extend({\n        renderData: function() {\n            return this.printPath(this.srcElement.toPath());\n        }\n    });\n\n    var MultiPathNode = PathNode .extend({\n        renderData: function() {\n            var paths = this.srcElement.paths;\n\n            if (paths.length > 0) {\n                var result = [],\n                    i;\n\n                for (i = 0; i < paths.length; i++) {\n                    result.push(this.printPath(paths[i]));\n                }\n\n                return result.join(\" \");\n            }\n        }\n    });\n\n    var CircleNode = PathNode.extend({\n        geometryChange: function() {\n            var center = this.center();\n            this.attr(\"cx\", center.x);\n            this.attr(\"cy\", center.y);\n            this.attr(\"r\", this.radius());\n            this.invalidate();\n        },\n\n        center: function() {\n            return this.srcElement.geometry().center;\n        },\n\n        radius: function() {\n            return this.srcElement.geometry().radius;\n        },\n\n        template: renderTemplate(\n            \"<circle #= d.renderStyle() # #= d.renderOpacity() # \" +\n            \"cx='#= d.center().x #' cy='#= d.center().y #' \" +\n            \"r='#= d.radius() #' \" +\n            \"#= d.renderStroke() # \" +\n            \"#= d.renderFill() # \" +\n            \"#= d.renderDefinitions() # \" +\n            \"#= d.renderTransform() # ></circle>\"\n        )\n    });\n\n    var TextNode = PathNode.extend({\n        geometryChange: function() {\n            var pos = this.pos();\n            this.attr(\"x\", pos.x);\n            this.attr(\"y\", pos.y);\n            this.invalidate();\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"font\") {\n                this.attr(\"style\", util.renderStyle(this.mapStyle()));\n                this.geometryChange();\n            } else if (e.field === \"content\") {\n                PathNode.fn.content.call(this, this.srcElement.content());\n            }\n\n            PathNode.fn.optionsChange.call(this, e);\n        },\n\n        mapStyle: function() {\n            var style = PathNode.fn.mapStyle.call(this);\n            var font = this.srcElement.options.font;\n\n            style.push([\"font\", kendo.htmlEncode(font)]);\n\n            return style;\n        },\n\n        pos: function() {\n            var pos = this.srcElement.position();\n            var size = this.srcElement.measure();\n            return pos.clone().setY(pos.y + size.baseline);\n        },\n\n        content: function() {\n            var content = this.srcElement.content();\n\n            var options = this.root().options;\n            if (options && options.encodeText) {\n                content = decodeEntities(content);\n                content = kendo.htmlEncode(content);\n            }\n\n            return content;\n        },\n\n        template: renderTemplate(\n            \"<text #= d.renderStyle() # #= d.renderOpacity() # \" +\n            \"x='#= this.pos().x #' y='#= this.pos().y #' \" +\n            \"#= d.renderStroke() # \" +\n            \"#= d.renderTransform() # \" +\n            \"#= d.renderDefinitions() # \" +\n            \"#= d.renderFill() #>#= d.content() #</text>\"\n        )\n    });\n\n    var ImageNode = PathNode.extend({\n        geometryChange: function() {\n            this.allAttr(this.mapPosition());\n            this.invalidate();\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"src\") {\n                this.allAttr(this.mapSource());\n            }\n\n            PathNode.fn.optionsChange.call(this, e);\n        },\n\n        mapPosition: function() {\n            var rect = this.srcElement.rect();\n            var tl = rect.topLeft();\n\n            return [\n                [\"x\", tl.x],\n                [\"y\", tl.y],\n                [\"width\", rect.width() + \"px\"],\n                [\"height\", rect.height() + \"px\"]\n            ];\n        },\n\n        renderPosition: function() {\n            return renderAllAttr(this.mapPosition());\n        },\n\n        mapSource: function() {\n            return [[\"xlink:href\", this.srcElement.src()]];\n        },\n\n        renderSource: function() {\n            return renderAllAttr(this.mapSource());\n        },\n\n        template: renderTemplate(\n            \"<image preserveAspectRatio='none' #= d.renderStyle() # #= d.renderTransform()# #= d.renderOpacity() # \" +\n            \"#= d.renderPosition() # #= d.renderSource() # #= d.renderDefinitions()#>\" +\n            \"</image>\"\n        )\n    });\n\n    var GradientStopNode = Node.extend({\n        template: renderTemplate(\n            \"<stop #=d.renderOffset()# #=d.renderStyle()# />\"\n        ),\n\n        renderOffset: function() {\n            return renderAttr(\"offset\", this.srcElement.offset());\n        },\n\n        mapStyle: function() {\n            var srcElement = this.srcElement;\n            return [\n                [\"stop-color\", srcElement.color()],\n                [\"stop-opacity\", srcElement.opacity()]\n            ];\n        },\n\n        optionsChange: function(e) {\n            if (e.field == \"offset\") {\n                this.attr(e.field, e.value);\n            } else if (e.field == \"color\" || e.field == \"opacity\") {\n                this.css(\"stop-\" + e.field, e.value);\n            }\n        }\n    });\n\n    var GradientNode = Node.extend({\n        init: function(srcElement) {\n            Node.fn.init.call(this, srcElement);\n\n            this.id = srcElement.id;\n\n            this.loadStops();\n        },\n\n        loadStops: function() {\n            var srcElement = this.srcElement;\n            var stops = srcElement.stops;\n            var element = this.element;\n            var stopNode;\n            var idx;\n            for (idx = 0; idx < stops.length; idx++) {\n                stopNode = new GradientStopNode(stops[idx]);\n                this.append(stopNode);\n                if (element) {\n                    stopNode.attachTo(element);\n                }\n            }\n        },\n\n        optionsChange: function(e) {\n            if (e.field == \"gradient.stops\") {\n                BaseNode.fn.clear.call(this);\n                this.loadStops();\n            } else if (e.field == GRADIENT){\n                this.allAttr(this.mapCoordinates());\n            }\n        },\n\n        renderCoordinates: function() {\n            return renderAllAttr(this.mapCoordinates());\n        },\n\n        mapSpace: function() {\n            return [\"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\"]\n        }\n    });\n\n    var LinearGradientNode = GradientNode.extend({\n        template: renderTemplate(\n            \"<linearGradient id='#=d.id#' #=d.renderCoordinates()#>\" +\n                \"#= d.renderChildren()#\" +\n            \"</linearGradient>\"\n        ),\n\n        mapCoordinates: function() {\n            var srcElement = this.srcElement;\n            var start = srcElement.start();\n            var end = srcElement.end();\n            var attrs = [\n                [\"x1\", start.x],\n                [\"y1\", start.y],\n                [\"x2\", end.x],\n                [\"y2\", end.y],\n                this.mapSpace()\n            ];\n\n            return attrs;\n        }\n    });\n\n    var RadialGradientNode = GradientNode.extend({\n        template: renderTemplate(\n            \"<radialGradient id='#=d.id#' #=d.renderCoordinates()#>\" +\n                \"#= d.renderChildren()#\" +\n            \"</radialGradient>\"\n        ),\n\n        mapCoordinates: function() {\n            var srcElement = this.srcElement;\n            var center = srcElement.center();\n            var radius = srcElement.radius();\n            var attrs = [\n                [\"cx\", center.x],\n                [\"cy\", center.y],\n                [\"r\", radius],\n                this.mapSpace()\n            ];\n            return attrs;\n        }\n    });\n\n    var nodeMap = {\n        Group: GroupNode,\n        Text: TextNode,\n        Path: PathNode,\n        MultiPath: MultiPathNode,\n        Circle: CircleNode,\n        Arc: ArcNode,\n        Image: ImageNode\n    };\n\n    // Helpers ================================================================\n    var renderSVG = function(container, svg) {\n        container.innerHTML = svg;\n    };\n\n    (function() {\n        var testFragment = \"<svg xmlns='\" + SVG_NS + \"'></svg>\",\n            testContainer = doc.createElement(\"div\"),\n            hasParser = typeof DOMParser != UNDEFINED;\n\n        testContainer.innerHTML = testFragment;\n\n        if (hasParser && testContainer.firstChild.namespaceURI != SVG_NS) {\n            renderSVG = function(container, svg) {\n                var parser = new DOMParser(),\n                    chartDoc = parser.parseFromString(svg, \"text/xml\"),\n                    importedDoc = doc.adoptNode(chartDoc.documentElement);\n\n                container.innerHTML = \"\";\n                container.appendChild(importedDoc);\n            };\n        }\n    })();\n\n    function alignToScreen(element) {\n        var ctm;\n\n        try {\n            ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n        } catch (e) { }\n\n        if (ctm) {\n            var left = - ctm.e % 1,\n                top = - ctm.f % 1,\n                style = element.style;\n\n            if (left !== 0 || top !== 0) {\n                style.left = left + \"px\";\n                style.top = top + \"px\";\n            }\n        }\n    }\n\n    function baseUrl() {\n        var base = document.getElementsByTagName(\"base\")[0],\n            url = \"\",\n            href = document.location.href,\n            hashIndex = href.indexOf(\"#\");\n\n        if (base && !kendo.support.browser.msie) {\n            if (hashIndex !== -1) {\n                href = href.substring(0, hashIndex);\n            }\n\n            url = href;\n        }\n\n        return url;\n    }\n\n    function refUrl(id) {\n        return \"url(\" + baseUrl() + \"#\"  + id + \")\";\n    }\n\n    function exportGroup(group) {\n        var root = new RootNode({ encodeText: true });\n\n        var bbox = group.clippedBBox();\n        if (bbox) {\n            var origin = bbox.getOrigin();\n            var exportRoot = new d.Group();\n            exportRoot.transform(g.transform().translate(-origin.x, -origin.y));\n            exportRoot.children.push(group);\n            group = exportRoot;\n        }\n\n        root.load([group]);\n\n        var svg = \"<?xml version='1.0' ?>\" +\n                  \"<svg style='width: 100%; height: 100%; overflow: hidden;' \" +\n                  \"xmlns='\" + SVG_NS + \"' \" + \"xmlns:xlink='http://www.w3.org/1999/xlink' \" +\n                  \"version='1.1'>\" + root.render() + \"</svg>\";\n\n        root.destroy();\n\n        return svg;\n    }\n\n    function exportSVG(group, options) {\n        var svg = exportGroup(group);\n\n        if (!options || !options.raw) {\n            svg = \"data:image/svg+xml;base64,\" + util.encodeBase64(svg);\n        }\n\n        return $.Deferred().resolve(svg).promise();\n    }\n\n    function isDefinition(type, value) {\n        return type == \"clip\" || (type == \"fill\" && (!value || value.nodeType == GRADIENT));\n    }\n\n    // Mappings ===============================================================\n\n    function decodeEntities(text) {\n        if (!text || !text.indexOf || text.indexOf(\"&\") < 0) {\n            return text;\n        } else {\n            var element = decodeEntities._element;\n            element.innerHTML = text;\n            return element.textContent || element.innerText;\n        }\n    }\n\n    decodeEntities._element = document.createElement(\"span\");\n\n    // Mappings ===============================================================\n    var DefinitionMap = {\n        clip: \"clip-path\",\n        fill: \"fill\"\n    };\n\n    // Exports ================================================================\n    kendo.support.svg = (function() {\n        return doc.implementation.hasFeature(\n            \"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\");\n    })();\n\n    if (kendo.support.svg) {\n        d.SurfaceFactory.current.register(\"svg\", Surface, 10);\n    }\n\n    deepExtend(d, {\n        exportSVG: exportSVG,\n\n        svg: {\n            ArcNode: ArcNode,\n            CircleNode: CircleNode,\n            ClipNode: ClipNode,\n            DefinitionNode: DefinitionNode,\n            GradientStopNode: GradientStopNode,\n            GroupNode: GroupNode,\n            ImageNode: ImageNode,\n            LinearGradientNode: LinearGradientNode,\n            MultiPathNode: MultiPathNode,\n            Node: Node,\n            PathNode: PathNode,\n            RadialGradientNode: RadialGradientNode,\n            RootNode: RootNode,\n            Surface: Surface,\n            TextNode: TextNode,\n            _exportGroup: exportGroup\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports ================================================================\n    var noop = $.noop,\n        doc = document,\n\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        defined = util.defined,\n        isTransparent = util.isTransparent,\n        renderTemplate = util.renderTemplate,\n        valueOrDefault = util.valueOrDefault,\n\n        g = kendo.geometry,\n        d = kendo.drawing,\n        BaseNode = d.BaseNode;\n\n    // Constants ==============================================================\n    var BUTT = \"butt\",\n        DASH_ARRAYS = d.DASH_ARRAYS,\n        FRAME_DELAY = 1000 / 60,\n        NONE = \"none\",\n        SOLID = \"solid\";\n\n    // Canvas Surface ==========================================================\n    var Surface = d.Surface.extend({\n        init: function(element, options) {\n            d.Surface.fn.init.call(this, element, options);\n\n            this.element[0].innerHTML = this._template(this);\n            var canvas = this.element[0].firstElementChild;\n            canvas.width = $(element).width();\n            canvas.height = $(element).height();\n            this._rootElement = canvas;\n\n            this._root = new RootNode(canvas);\n        },\n\n        destroy: function() {\n            d.Surface.fn.destroy.call(this);\n\n            if (this._root) {\n                this._root.destroy();\n                this._root = null;\n            }\n        },\n\n        type: \"canvas\",\n\n        draw: function(element) {\n            this._root.load([element], undefined, this.options.cors);\n        },\n\n        clear: function() {\n            this._root.clear();\n        },\n\n        image: function() {\n            var root = this._root;\n            var rootElement = this._rootElement;\n\n            var loadingStates = [];\n            root.traverse(function(childNode) {\n                if (childNode.loading) {\n                    loadingStates.push(childNode.loading);\n                }\n            });\n\n            var defer = $.Deferred();\n            $.when.apply($, loadingStates).done(function() {\n                root._invalidate();\n\n                try {\n                    var data = rootElement.toDataURL();\n                    defer.resolve(data);\n                } catch (e) {\n                    defer.reject(e);\n                }\n            }).fail(function(e) {\n                defer.reject(e);\n            });\n\n            return defer.promise();\n        },\n\n        _resize: function() {\n            this._rootElement.width = this._size.width;\n            this._rootElement.height = this._size.height;\n\n            this._root.invalidate();\n        },\n\n        _template: renderTemplate(\n            \"<canvas style='width: 100%; height: 100%;'></canvas>\"\n        )\n    });\n\n    // Nodes ===================================================================\n    var Node = BaseNode.extend({\n        init: function(srcElement) {\n            BaseNode.fn.init.call(this, srcElement);\n            if (srcElement) {\n                this.initClip();\n            }\n        },\n\n        initClip: function() {\n            var clip = this.srcElement.clip();\n            if (clip) {\n                this.clip = clip;\n                clip.addObserver(this);\n            }\n        },\n\n        clear: function() {\n            if (this.srcElement) {\n                this.srcElement.removeObserver(this);\n            }\n\n            this.clearClip();\n\n            BaseNode.fn.clear.call(this);\n        },\n\n        clearClip: function() {\n            if (this.clip) {\n                this.clip.removeObserver(this);\n                delete this.clip;\n            }\n        },\n\n        setClip: function(ctx) {\n            if (this.clip) {\n                ctx.beginPath();\n                PathNode.fn.renderPoints(ctx, this.clip);\n                ctx.clip();\n            }\n        },\n\n        optionsChange: function(e) {\n            if (e.field == \"clip\") {\n                this.clearClip();\n                this.initClip();\n            }\n\n            BaseNode.fn.optionsChange.call(this, e);\n        },\n\n        setTransform: function(ctx) {\n            if (this.srcElement) {\n                var transform = this.srcElement.transform();\n                if (transform) {\n                    ctx.transform.apply(ctx, transform.matrix().toArray(6));\n                }\n            }\n        },\n\n        load: function(elements, pos, cors) {\n            var node = this,\n                childNode,\n                srcElement,\n                children,\n                i;\n\n            for (i = 0; i < elements.length; i++) {\n                srcElement = elements[i];\n                children = srcElement.children;\n\n                childNode = new nodeMap[srcElement.nodeType](srcElement, cors);\n\n                if (children && children.length > 0) {\n                    childNode.load(children, pos, cors);\n                }\n\n                if (defined(pos)) {\n                    node.insertAt(childNode, pos);\n                } else {\n                    node.append(childNode);\n                }\n            }\n\n            node.invalidate();\n        },\n\n        setOpacity: function(ctx) {\n            if (this.srcElement) {\n                var opacity = this.srcElement.opacity();\n                if (defined(opacity)) {\n                    this.globalAlpha(ctx, opacity);\n                }\n            }\n        },\n\n        globalAlpha: function(ctx, value) {\n            if (value && ctx.globalAlpha) {\n                value *= ctx.globalAlpha;\n            }\n            ctx.globalAlpha = value;\n        },\n\n        visible: function() {\n            var src = this.srcElement;\n            return !src || (src && src.options.visible !== false);\n        }\n    });\n\n    var GroupNode = Node.extend({\n        renderTo: function(ctx) {\n            if (!this.visible()) {\n                return;\n            }\n\n            ctx.save();\n\n            this.setTransform(ctx);\n            this.setClip(ctx);\n            this.setOpacity(ctx);\n\n            var childNodes = this.childNodes;\n            for (var i = 0; i < childNodes.length; i++) {\n                var child = childNodes[i];\n                if (child.visible()) {\n                    child.renderTo(ctx);\n                }\n            }\n\n            ctx.restore();\n        }\n    });\n    d.mixins.Traversable.extend(GroupNode.fn, \"childNodes\");\n\n    var RootNode = GroupNode.extend({\n        init: function(canvas) {\n            GroupNode.fn.init.call(this);\n\n            this.canvas = canvas;\n            this.ctx = canvas.getContext(\"2d\");\n\n            this.invalidate = kendo.throttle(\n                $.proxy(this._invalidate, this),\n                FRAME_DELAY\n            );\n        },\n\n        destroy: function() {\n            GroupNode.fn.destroy.call(this);\n            this.canvas = null;\n            this.ctx = null;\n        },\n\n        _invalidate: function() {\n            if (!this.ctx) {\n                return;\n            }\n\n            this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n            this.renderTo(this.ctx);\n        }\n    });\n    d.mixins.Traversable.extend(RootNode.fn, \"childNodes\");\n\n    var PathNode = Node.extend({\n        renderTo: function(ctx) {\n            ctx.save();\n\n            this.setTransform(ctx);\n            this.setClip(ctx);\n            this.setOpacity(ctx);\n\n            ctx.beginPath();\n\n            this.renderPoints(ctx, this.srcElement);\n\n            this.setLineDash(ctx);\n            this.setLineCap(ctx);\n            this.setLineJoin(ctx);\n\n            this.setFill(ctx);\n            this.setStroke(ctx);\n\n            ctx.restore();\n        },\n\n        setFill: function(ctx) {\n            var fill = this.srcElement.options.fill;\n            var hasFill = false;\n\n            if (fill) {\n                if (fill.nodeType == \"gradient\") {\n                    this.setGradientFill(ctx, fill);\n                    hasFill = true;\n                } else if (!isTransparent(fill.color)) {\n                    ctx.fillStyle = fill.color;\n\n                    ctx.save();\n                    this.globalAlpha(ctx, fill.opacity);\n                    ctx.fill();\n                    ctx.restore();\n\n                    hasFill = true;\n                }\n            }\n\n            return hasFill;\n        },\n\n        setGradientFill: function(ctx, fill) {\n            var bbox = this.srcElement.rawBBox();\n            var gradient;\n\n            if (fill instanceof d.LinearGradient) {\n                var start = fill.start();\n                var end = fill.end();\n                gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n            } else if (fill instanceof d.RadialGradient) {\n                var center = fill.center();\n                gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n            }\n\n            addGradientStops(gradient, fill.stops);\n\n            ctx.save();\n\n            if (!fill.userSpace()) {\n                ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n            }\n            ctx.fillStyle = gradient;\n            ctx.fill();\n\n            ctx.restore();\n        },\n\n        setStroke: function(ctx) {\n            var stroke = this.srcElement.options.stroke;\n            if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n                ctx.strokeStyle = stroke.color;\n                ctx.lineWidth = valueOrDefault(stroke.width, 1);\n\n                ctx.save();\n                this.globalAlpha(ctx, stroke.opacity);\n                ctx.stroke();\n                ctx.restore();\n\n                return true;\n            }\n        },\n\n        dashType: function() {\n            var stroke = this.srcElement.options.stroke;\n            if (stroke && stroke.dashType) {\n                return stroke.dashType.toLowerCase();\n            }\n        },\n\n        setLineDash: function(ctx) {\n            var dashType = this.dashType();\n            if (dashType && dashType != SOLID) {\n                var dashArray = DASH_ARRAYS[dashType];\n                if (ctx.setLineDash) {\n                    ctx.setLineDash(dashArray);\n                } else {\n                    ctx.mozDash = dashArray;\n                    ctx.webkitLineDash = dashArray;\n                }\n            }\n        },\n\n        setLineCap: function(ctx) {\n            var dashType = this.dashType();\n            var stroke = this.srcElement.options.stroke;\n            if (dashType && dashType !== SOLID) {\n                ctx.lineCap = BUTT;\n            } else if (stroke && stroke.lineCap) {\n                ctx.lineCap = stroke.lineCap;\n            }\n        },\n\n        setLineJoin: function(ctx) {\n            var stroke = this.srcElement.options.stroke;\n            if (stroke && stroke.lineJoin) {\n                ctx.lineJoin = stroke.lineJoin;\n            }\n        },\n\n        renderPoints: function(ctx, path) {\n            var segments = path.segments;\n\n            if (segments.length === 0) {\n                return;\n            }\n\n            var seg = segments[0];\n            var anchor = seg.anchor();\n            ctx.moveTo(anchor.x, anchor.y);\n\n            for (var i = 1; i < segments.length; i++) {\n                seg = segments[i];\n                anchor = seg.anchor();\n\n                var prevSeg = segments[i - 1];\n                var prevOut = prevSeg.controlOut();\n                var controlIn = seg.controlIn();\n\n                if (prevOut && controlIn) {\n                    ctx.bezierCurveTo(prevOut.x, prevOut.y,\n                                      controlIn.x, controlIn.y,\n                                      anchor.x, anchor.y);\n                } else {\n                    ctx.lineTo(anchor.x, anchor.y);\n                }\n            }\n\n            if (path.options.closed) {\n                ctx.closePath();\n            }\n        }\n    });\n\n    var MultiPathNode = PathNode.extend({\n        renderPoints: function(ctx) {\n            var paths = this.srcElement.paths;\n            for (var i = 0; i < paths.length; i++) {\n                PathNode.fn.renderPoints(ctx, paths[i]);\n            }\n        }\n    });\n\n    var CircleNode = PathNode.extend({\n        renderPoints: function(ctx) {\n            var geometry = this.srcElement.geometry();\n            var c = geometry.center;\n            var r = geometry.radius;\n\n            ctx.arc(c.x, c.y, r, 0, Math.PI * 2);\n        }\n    });\n\n    var ArcNode = PathNode.extend({\n        renderPoints: function(ctx) {\n            var path = this.srcElement.toPath();\n            PathNode.fn.renderPoints.call(this, ctx, path);\n        }\n    });\n\n    var TextNode = PathNode.extend({\n        renderTo: function(ctx) {\n            var text = this.srcElement;\n            var pos = text.position();\n            var size = text.measure();\n\n            ctx.save();\n\n            this.setTransform(ctx);\n            this.setClip(ctx);\n            this.setOpacity(ctx);\n\n            ctx.beginPath();\n\n            ctx.font = text.options.font;\n            if (this.setFill(ctx)) {\n                ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n            }\n\n            if (this.setStroke(ctx)) {\n                this.setLineDash(ctx);\n                ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n            }\n\n            ctx.restore();\n        }\n    });\n\n    var ImageNode = PathNode.extend({\n        init: function(srcElement, cors) {\n            PathNode.fn.init.call(this, srcElement);\n\n            this.onLoad = $.proxy(this.onLoad, this);\n            this.onError = $.proxy(this.onError, this);\n            this.loading = $.Deferred();\n\n            var img = this.img = new Image();\n\n            if (cors) {\n                img.crossOrigin = cors;\n            }\n\n            var src = img.src = srcElement.src();\n\n            if (img.complete) {\n                this.onLoad();\n            } else {\n                img.onload = this.onLoad;\n                img.onerror = this.onError;\n            }\n        },\n\n        renderTo: function(ctx) {\n            if (this.loading.state() === \"resolved\") {\n                ctx.save();\n\n                this.setTransform(ctx);\n                this.setClip(ctx);\n\n                this.drawImage(ctx);\n\n                ctx.restore();\n            }\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"src\") {\n                this.loading = $.Deferred();\n                this.img.src = this.srcElement.src();\n            } else {\n                PathNode.fn.optionsChange.call(this, e);\n            }\n        },\n\n        onLoad: function() {\n            this.loading.resolve();\n            this.invalidate();\n        },\n\n        onError: function() {\n            this.loading.reject(new Error(\n                \"Unable to load image '\" + this.img.src +\n                \"'. Check for connectivity and verify CORS headers.\"\n            ));\n        },\n\n        drawImage: function(ctx) {\n            var rect = this.srcElement.rect();\n            var tl = rect.topLeft();\n\n            ctx.drawImage(\n                this.img, tl.x, tl.y, rect.width(), rect.height()\n            );\n        }\n    });\n\n    function exportImage(group, options) {\n        var defaults = {\n            width: \"800px\", height: \"600px\",\n            cors: \"Anonymous\"\n        };\n\n        var bbox = group.clippedBBox();\n        if (bbox) {\n            var origin = bbox.getOrigin();\n            var exportRoot = new d.Group();\n            exportRoot.transform(g.transform().translate(-origin.x, -origin.y));\n            exportRoot.children.push(group);\n            group = exportRoot;\n\n            var size = bbox.getSize();\n            defaults.width = size.width + \"px\";\n            defaults.height = size.height + \"px\";\n        }\n\n        options = deepExtend(defaults, options);\n\n        var container = $(\"<div />\").css({\n            display: \"none\",\n            width: options.width,\n            height: options.height\n        }).appendTo(document.body);\n\n        var surface = new Surface(container, options);\n        surface.draw(group);\n\n        var promise = surface.image();\n        promise.always(function() {\n            surface.destroy();\n            container.remove();\n        });\n\n        return promise;\n    }\n\n    var nodeMap = {\n        Group: GroupNode,\n        Text: TextNode,\n        Path: PathNode,\n        MultiPath: MultiPathNode,\n        Circle: CircleNode,\n        Arc: ArcNode,\n        Image: ImageNode\n    };\n\n    // Helpers ================================================================\n    function addGradientStops(gradient, stops) {\n        var color, stop, idx;\n\n        for (idx = 0; idx < stops.length; idx++) {\n            stop = stops[idx];\n            color = kendo.parseColor(stop.color());\n            color.a *= stop.opacity();\n            gradient.addColorStop(stop.offset(), color.toCssRgba());\n        }\n    }\n\n    // Exports ================================================================\n    kendo.support.canvas = (function() {\n        return !!doc.createElement(\"canvas\").getContext;\n    })();\n\n    if (kendo.support.canvas) {\n        d.SurfaceFactory.current.register(\"canvas\", Surface, 20);\n    }\n\n    deepExtend(kendo.drawing, {\n        exportImage: exportImage,\n\n        canvas: {\n            ArcNode: ArcNode,\n            CircleNode: CircleNode,\n            GroupNode: GroupNode,\n            ImageNode: ImageNode,\n            MultiPathNode: MultiPathNode,\n            Node: Node,\n            PathNode: PathNode,\n            RootNode: RootNode,\n            Surface: Surface,\n            TextNode: TextNode\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($) {\n\n    // Imports ================================================================\n    var doc = document,\n        math = Math,\n        atan2 = math.atan2,\n        ceil = math.ceil,\n        sqrt = math.sqrt,\n\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        noop = $.noop,\n\n        d = kendo.drawing,\n        BaseNode = d.BaseNode,\n\n        g = kendo.geometry,\n        toMatrix = g.toMatrix,\n\n        Color = kendo.Color,\n\n        util = kendo.util,\n        isTransparent = util.isTransparent,\n        defined = util.defined,\n        deg = util.deg,\n        renderTemplate = util.renderTemplate,\n        round = util.round,\n        valueOrDefault = util.valueOrDefault;\n\n    // Constants ==============================================================\n    var NONE = \"none\",\n        NS = \".kendo\",\n        COORDINATE_MULTIPLE = 100,\n        COORDINATE_SIZE = COORDINATE_MULTIPLE * COORDINATE_MULTIPLE,\n        GRADIENT = \"gradient\",\n        TRANSFORM_PRECISION = 4;\n\n    // VML rendering surface ==================================================\n    var Surface = d.Surface.extend({\n        init: function(element, options) {\n            d.Surface.fn.init.call(this, element, options);\n\n            enableVML();\n\n            this.element.empty();\n\n            this._root = new RootNode();\n            this._root.attachTo(this.element[0]);\n\n            this.element.on(\"click\" + NS, this._click);\n            this.element.on(\"mouseover\" + NS, this._mouseenter);\n            this.element.on(\"mouseout\" + NS, this._mouseleave);\n        },\n\n        type: \"vml\",\n\n        destroy: function() {\n            if (this._root) {\n                this._root.destroy();\n                this._root = null;\n\n                this.element.off(NS);\n            }\n\n            d.Surface.fn.destroy.call(this);\n        },\n\n        draw: function(element) {\n            this._root.load([element], undefined, null);\n        },\n\n        clear: function() {\n            this._root.clear();\n        }\n    });\n\n    // VML Node ================================================================\n    var Node = BaseNode.extend({\n        init: function(srcElement) {\n            BaseNode.fn.init.call(this, srcElement);\n\n            this.createElement();\n            this.attachReference();\n        },\n\n        observe: noop,\n\n        destroy: function() {\n            if (this.element) {\n                this.element._kendoNode = null;\n                this.element = null;\n            }\n\n            BaseNode.fn.destroy.call(this);\n        },\n\n        clear: function() {\n            if (this.element) {\n                this.element.innerHTML = \"\";\n            }\n\n            var children = this.childNodes;\n            for (var i = 0; i < children.length; i++) {\n                children[i].destroy();\n            }\n\n            this.childNodes = [];\n        },\n\n        removeSelf: function() {\n            if (this.element) {\n                this.element.parentNode.removeChild(this.element);\n                this.element = null;\n            }\n\n            BaseNode.fn.removeSelf.call(this);\n        },\n\n        createElement: function() {\n            this.element = doc.createElement(\"div\");\n        },\n\n        attachReference: function() {\n            this.element._kendoNode = this;\n        },\n\n        load: function(elements, pos, transform, opacity) {\n            opacity = valueOrDefault(opacity, 1);\n            if (this.srcElement) {\n                opacity *= valueOrDefault(this.srcElement.options.opacity, 1);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var srcElement = elements[i];\n                var children = srcElement.children;\n                var combinedTransform = srcElement.currentTransform(transform);\n                var currentOpacity = opacity * valueOrDefault(srcElement.options.opacity, 1);\n\n                var childNode = new nodeMap[srcElement.nodeType](srcElement, combinedTransform, currentOpacity);\n\n                if (children && children.length > 0) {\n                    childNode.load(children, pos, combinedTransform, opacity);\n                }\n\n                if (defined(pos)) {\n                    this.insertAt(childNode, pos);\n                } else {\n                    this.append(childNode);\n                }\n\n                childNode.attachTo(this.element, pos);\n            }\n        },\n\n        attachTo: function(domElement, pos) {\n            if (defined(pos)) {\n                domElement.insertBefore(this.element, domElement.children[pos] || null);\n            } else {\n                domElement.appendChild(this.element);\n            }\n        },\n\n        optionsChange: function(e) {\n            if (e.field == \"visible\") {\n                this.css(\"display\", e.value !== false ? \"\" : NONE);\n            }\n        },\n\n        setStyle: function() {\n            this.allCss(this.mapStyle());\n        },\n\n        mapStyle: function() {\n            var style = [];\n\n            if (this.srcElement && this.srcElement.options.visible === false) {\n                style.push([ \"display\", NONE ]);\n            }\n\n            return style;\n        },\n\n        mapOpacityTo: function(attrs, multiplier) {\n            var opacity = valueOrDefault(this.opacity, 1);\n\n            opacity *= valueOrDefault(multiplier, 1);\n            attrs.push([\"opacity\", opacity]);\n        },\n\n        attr: function(name, value) {\n            if (this.element) {\n                this.element[name] = value;\n            }\n        },\n\n        allAttr: function(attrs) {\n            for (var i = 0; i < attrs.length; i++) {\n                this.attr(attrs[i][0], attrs[i][1]);\n            }\n        },\n\n        css: function(name, value) {\n            if (this.element) {\n                this.element.style[name] = value;\n            }\n        },\n\n        allCss: function(styles) {\n            for (var i = 0; i < styles.length; i++) {\n                this.css(styles[i][0], styles[i][1]);\n            }\n        }\n    });\n\n    var RootNode = Node.extend({\n        createElement: function() {\n            Node.fn.createElement.call(this);\n\n            this.allCss([\n                [\"width\", \"100%\"],\n                [\"height\", \"100%\"],\n                [\"position\", \"relative\"],\n                [\"visibility\", \"visible\"]\n            ]);\n        },\n\n        attachReference: noop\n    });\n\n    var ClipObserver = kendo.Class.extend({\n        init: function(srcElement, observer) {\n            this.srcElement = srcElement;\n            this.observer = observer;\n\n            srcElement.addObserver(this);\n        },\n\n        geometryChange: function() {\n            this.observer.optionsChange({\n                field: \"clip\",\n                value: this.srcElement\n            });\n        },\n\n        clear: function() {\n            this.srcElement.removeObserver(this);\n        }\n    });\n\n    var ObserverNode = Node.extend({\n        init: function(srcElement) {\n            Node.fn.init.call(this, srcElement);\n\n            if (srcElement) {\n                this.initClip();\n            }\n        },\n\n        observe: function() {\n            BaseNode.fn.observe.call(this);\n        },\n\n        mapStyle: function() {\n            var style = Node.fn.mapStyle.call(this);\n            if (this.srcElement && this.srcElement.clip()) {\n                style.push([\"clip\", this.clipRect()]);\n            }\n            return style;\n        },\n\n        optionsChange: function(e) {\n            if (e.field == \"clip\") {\n                this.clearClip();\n                this.initClip();\n                this.setClip();\n            }\n\n            Node.fn.optionsChange.call(this, e);\n        },\n\n        clear: function() {\n            this.clearClip();\n\n            Node.fn.clear.call(this);\n        },\n\n        initClip: function() {\n            if (this.srcElement.clip()) {\n                this.clip = new ClipObserver(this.srcElement.clip(), this);\n                this.clip.observer = this;\n            }\n        },\n\n        clearClip: function() {\n            if (this.clip) {\n                this.clip.clear();\n                this.clip = null;\n                this.css(\"clip\", this.clipRect());\n            }\n        },\n\n        setClip: function() {\n            if (this.clip) {\n                this.css(\"clip\", this.clipRect());\n            }\n        },\n\n        clipRect: function() {\n            var clipRect = EMPTY_CLIP;\n            var clip = this.srcElement.clip();\n            if (clip) {\n                var bbox = this.clipBBox(clip);\n                var topLeft = bbox.topLeft();\n                var bottomRight = bbox.bottomRight();\n                clipRect = kendo.format(\"rect({0}px {1}px {2}px {3}px)\",\n                    topLeft.y,\n                    bottomRight.x,\n                    bottomRight.y,\n                    topLeft.x);\n            }\n            return clipRect;\n        },\n\n        clipBBox: function(clip) {\n            var topLeft = this.srcElement.rawBBox().topLeft();\n            var clipBBox = clip.rawBBox();\n            clipBBox.origin.translate(-topLeft.x, -topLeft.y);\n\n            return clipBBox;\n        }\n    });\n\n    var GroupNode = ObserverNode.extend({\n        createElement: function() {\n            Node.fn.createElement.call(this);\n            this.setStyle();\n        },\n\n        attachTo: function(domElement, pos) {\n            this.css(\"display\", NONE);\n\n            Node.fn.attachTo.call(this, domElement, pos);\n\n            if (this.srcElement.options.visible !== false) {\n                this.css(\"display\", \"\");\n            }\n        },\n\n        _attachTo: function(domElement) {\n            var frag = document.createDocumentFragment();\n            frag.appendChild(this.element);\n\n            domElement.appendChild(frag);\n        },\n\n        mapStyle: function() {\n            var style = ObserverNode.fn.mapStyle.call(this);\n            style.push([\"position\", \"absolute\"]);\n            style.push([\"white-space\", \"nowrap\"]);\n\n            return style;\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"transform\") {\n                this.refreshTransform();\n            }\n\n            if (e.field === \"opacity\") {\n                this.refreshOpacity();\n            }\n\n            ObserverNode.fn.optionsChange.call(this, e);\n        },\n\n        refreshTransform: function(transform) {\n            var currentTransform = this.srcElement.currentTransform(transform),\n                children = this.childNodes,\n                length = children.length,\n                i;\n\n            this.setClip();\n            for (i = 0; i < length; i++) {\n                children[i].refreshTransform(currentTransform);\n            }\n        },\n\n        currentOpacity: function() {\n            var opacity = valueOrDefault(this.srcElement.options.opacity, 1);\n\n            if (this.parent && this.parent.currentOpacity) {\n                opacity *= this.parent.currentOpacity();\n            }\n\n            return opacity;\n        },\n\n        refreshOpacity: function() {\n            var children = this.childNodes,\n                length = children.length,\n                i;\n\n            var opacity = this.currentOpacity();\n            for (i = 0; i < length; i++) {\n                children[i].refreshOpacity(opacity);\n            }\n        },\n\n        initClip: function() {\n            ObserverNode.fn.initClip.call(this);\n\n            if (this.clip) {\n                var bbox = this.clip.srcElement.bbox(this.srcElement.currentTransform());\n                if (bbox) {\n                    this.css(\"width\", bbox.width() + bbox.origin.x);\n                    this.css(\"height\", bbox.height() + bbox.origin.y);\n                }\n            }\n        },\n\n        clipBBox: function(clip) {\n            return clip.bbox(this.srcElement.currentTransform());\n        },\n\n        clearClip: function() {\n            ObserverNode.fn.clearClip.call(this);\n        }\n    });\n\n    var StrokeNode = Node.extend({\n        init: function(srcElement, opacity) {\n            this.opacity = opacity;\n            Node.fn.init.call(this, srcElement);\n        },\n\n        createElement: function() {\n            this.element = createElementVML(\"stroke\");\n            this.setOpacity();\n        },\n\n        optionsChange: function(e) {\n            if (e.field.indexOf(\"stroke\") === 0) {\n                this.setStroke();\n            }\n        },\n\n        refreshOpacity: function(opacity) {\n            this.opacity = opacity;\n            this.setStroke();\n        },\n\n        setStroke: function() {\n            this.allAttr(this.mapStroke());\n        },\n\n        setOpacity: function() {\n            this.setStroke();\n        },\n\n        mapStroke: function() {\n            var stroke = this.srcElement.options.stroke;\n            var attrs = [];\n\n            if (stroke && !isTransparent(stroke.color) && stroke.width !== 0) {\n                attrs.push([\"on\", \"true\"]);\n                attrs.push([\"color\", stroke.color]);\n                attrs.push([\"weight\", (stroke.width || 1) + \"px\"]);\n\n                this.mapOpacityTo(attrs, stroke.opacity);\n\n                if (defined(stroke.dashType)) {\n                    attrs.push([\"dashstyle\", stroke.dashType]);\n                }\n\n                if (defined(stroke.lineJoin)) {\n                    attrs.push([\"joinstyle\", stroke.lineJoin]);\n                }\n\n                if (defined(stroke.lineCap)) {\n                    var lineCap = stroke.lineCap.toLowerCase();\n                    if (lineCap === \"butt\") {\n                        lineCap = lineCap === \"butt\" ? \"flat\" : lineCap;\n                    }\n                    attrs.push([\"endcap\", lineCap]);\n                }\n            } else {\n                attrs.push([\"on\", \"false\"]);\n            }\n\n            return attrs;\n        }\n    });\n\n    var FillNode = Node.extend({\n        init: function(srcElement, transform, opacity) {\n            this.opacity = opacity;\n            Node.fn.init.call(this, srcElement);\n        },\n\n        createElement: function() {\n            this.element = createElementVML(\"fill\");\n            this.setFill();\n        },\n\n        optionsChange: function(e) {\n            if (fillField(e.field)) {\n                this.setFill();\n            }\n        },\n\n        refreshOpacity: function(opacity) {\n            this.opacity = opacity;\n            this.setOpacity();\n        },\n\n        setFill: function() {\n            this.allAttr(this.mapFill());\n        },\n\n        setOpacity: function() {\n            this.setFill();\n        },\n\n        attr: function(name, value) {\n            var element = this.element;\n            if (element) {\n                var fields = name.split(\".\");\n\n                while (fields.length > 1) {\n                    element = element[fields.shift()];\n                }\n                element[fields[0]] = value;\n            }\n        },\n\n        mapFill: function() {\n            var fill = this.srcElement.fill();\n            var attrs = [\n                [\"on\", \"false\"]\n            ];\n\n            if (fill) {\n                if (fill.nodeType == GRADIENT) {\n                    attrs = this.mapGradient(fill);\n                } else if (!isTransparent(fill.color)) {\n                    attrs = this.mapFillColor(fill);\n                }\n            }\n\n            return attrs;\n        },\n\n        mapFillColor: function(fill) {\n            var attrs = [\n                [\"on\", \"true\"],\n                [\"color\", fill.color]\n            ];\n\n            this.mapOpacityTo(attrs, fill.opacity);\n\n            return attrs;\n        },\n\n        mapGradient: function(fill) {\n            var options = this.srcElement.options;\n            var fallbackFill = options.fallbackFill || (fill.fallbackFill && fill.fallbackFill());\n            var attrs;\n            if (fill instanceof d.LinearGradient) {\n                attrs = this.mapLinearGradient(fill);\n            } else if (fill instanceof d.RadialGradient && fill.supportVML) {\n                attrs = this.mapRadialGradient(fill);\n            } else if (fallbackFill) {\n                attrs = this.mapFillColor(fallbackFill);\n            } else {\n                attrs = [[\"on\", \"false\"]];\n            }\n\n            return attrs;\n        },\n\n        mapLinearGradient: function(fill) {\n            var start = fill.start();\n            var end = fill.end();\n            var stops = fill.stops;\n            var angle = util.deg(atan2(end.y - start.y, end.x - start.x));\n\n            var attrs = [\n                [\"on\", \"true\"],\n                [\"type\", GRADIENT],\n                [\"focus\", 0],\n                [\"method\", \"none\"],\n                [\"angle\", 270 - angle]\n            ];\n            this.addColors(attrs);\n            return attrs;\n        },\n\n        mapRadialGradient: function(fill) {\n            var bbox = this.srcElement.rawBBox();\n            var center = fill.center();\n            var stops = fill.stops;\n            var focusx = (center.x - bbox.origin.x) / bbox.width();\n            var focusy = (center.y - bbox.origin.y) / bbox.height();\n            var attrs = [\n                [\"on\", \"true\"],\n                [\"type\", \"gradienttitle\"],\n                [\"focus\", \"100%\"],\n                [\"focusposition\", focusx + \" \" + focusy],\n                [\"method\", \"none\"]\n            ];\n            this.addColors(attrs);\n\n            return attrs;\n        },\n\n        addColors: function(attrs) {\n            var options = this.srcElement.options;\n            var stopColors = [];\n            var stops = options.fill.stops;\n            var baseColor = options.baseColor;\n            var colorsField = this.element.colors ? \"colors.value\" : \"colors\";\n            var color = stopColor(baseColor, stops[0]);\n            var color2 = stopColor(baseColor, stops[stops.length - 1]);\n            var stop;\n\n            for (var idx = 0; idx < stops.length; idx++) {\n                stop = stops[idx];\n\n                stopColors.push(\n                    math.round(stop.offset() * 100) + \"% \" +\n                    stopColor(baseColor, stop)\n                );\n            }\n\n            attrs.push([colorsField, stopColors.join(\",\")],\n                [\"color\", color],\n                [\"color2\", color2]\n            );\n        }\n    });\n\n    var TransformNode = Node.extend({\n        init: function(srcElement, transform) {\n            this.transform = transform;\n\n            Node.fn.init.call(this, srcElement);\n        },\n\n        createElement: function() {\n            this.element = createElementVML(\"skew\");\n            this.setTransform();\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"transform\") {\n                this.refresh(this.srcElement.currentTransform());\n            }\n        },\n\n        refresh: function(transform) {\n            this.transform = transform;\n            this.setTransform();\n        },\n\n        transformOrigin: function() {\n            return \"-0.5,-0.5\";\n        },\n\n        setTransform: function() {\n            this.allAttr(this.mapTransform());\n        },\n\n        mapTransform: function() {\n            var transform = this.transform;\n\n            var attrs = [],\n                a, b, c, d,\n                matrix = toMatrix(transform);\n\n            if (matrix) {\n                matrix.round(TRANSFORM_PRECISION);\n                attrs.push(\n                    [\"on\", \"true\"],\n                    [\"matrix\", [matrix.a, matrix.c, matrix.b, matrix.d, 0, 0].join(\",\")],\n                    [\"offset\", matrix.e + \"px,\" + matrix.f + \"px\"],\n                    [\"origin\", this.transformOrigin()]\n                );\n            } else {\n                attrs.push([\"on\", \"false\"]);\n            }\n\n            return attrs;\n        }\n    });\n\n    var ShapeNode = ObserverNode.extend({\n        init: function(srcElement, transform, opacity) {\n            this.fill = this.createFillNode(srcElement, transform, opacity);\n            this.stroke = new StrokeNode(srcElement, opacity);\n            this.transform = this.createTransformNode(srcElement, transform);\n\n            ObserverNode.fn.init.call(this, srcElement);\n        },\n\n        attachTo: function(domElement, pos) {\n            this.fill.attachTo(this.element);\n            this.stroke.attachTo(this.element);\n            this.transform.attachTo(this.element);\n\n            Node.fn.attachTo.call(this, domElement, pos);\n        },\n\n        createFillNode: function(srcElement, transform, opacity) {\n            return new FillNode(srcElement, transform, opacity);\n        },\n\n        createTransformNode: function(srcElement, transform) {\n            return new TransformNode(srcElement, transform);\n        },\n\n        createElement: function() {\n            this.element = createElementVML(\"shape\");\n            this.setCoordsize();\n            this.setStyle();\n        },\n\n        optionsChange: function(e) {\n            if (fillField(e.field)) {\n                this.fill.optionsChange(e);\n            } else if (e.field.indexOf(\"stroke\") === 0) {\n                this.stroke.optionsChange(e);\n            } else if (e.field === \"transform\") {\n                this.transform.optionsChange(e);\n            } else if (e.field === \"opacity\") {\n                this.fill.setOpacity();\n                this.stroke.setOpacity();\n            }\n\n            ObserverNode.fn.optionsChange.call(this, e);\n        },\n\n        refreshTransform: function(transform) {\n            this.transform.refresh(this.srcElement.currentTransform(transform));\n        },\n\n        refreshOpacity: function(opacity) {\n            opacity *= valueOrDefault(this.srcElement.options.opacity, 1);\n\n            this.fill.refreshOpacity(opacity);\n            this.stroke.refreshOpacity(opacity);\n        },\n\n        mapStyle: function(width, height) {\n            var styles = ObserverNode.fn.mapStyle.call(this);\n\n            if (!width || !height) {\n                width = height = COORDINATE_MULTIPLE;\n            }\n\n            styles.push(\n                [\"position\", \"absolute\"],\n                [\"width\", width + \"px\"],\n                [\"height\", height + \"px\"]\n            );\n\n            var cursor = this.srcElement.options.cursor;\n            if (cursor) {\n                styles.push([\"cursor\", cursor]);\n            }\n\n            return styles;\n        },\n\n        setCoordsize: function() {\n            this.allAttr([\n                [\"coordorigin\", \"0 0\"],\n                [\"coordsize\", COORDINATE_SIZE + \" \" + COORDINATE_SIZE]\n            ]);\n        }\n    });\n\n    var PathDataNode = Node.extend({\n        createElement: function() {\n            this.element = createElementVML(\"path\");\n            this.setPathData();\n        },\n\n        geometryChange: function() {\n            this.setPathData();\n        },\n\n        setPathData: function() {\n            this.attr(\"v\", this.renderData());\n        },\n\n        renderData: function() {\n            return printPath(this.srcElement);\n        }\n    });\n\n    var PathNode = ShapeNode.extend({\n        init: function(srcElement, transform, opacity) {\n            this.pathData = this.createDataNode(srcElement);\n\n            ShapeNode.fn.init.call(this, srcElement, transform, opacity);\n        },\n\n        attachTo: function(domElement, pos) {\n            this.pathData.attachTo(this.element);\n            ShapeNode.fn.attachTo.call(this, domElement, pos);\n        },\n\n        createDataNode: function(srcElement) {\n            return new PathDataNode(srcElement);\n        },\n\n        geometryChange: function() {\n            this.pathData.geometryChange();\n            ShapeNode.fn.geometryChange.call(this);\n        }\n    });\n\n    var MultiPathDataNode = PathDataNode.extend({\n        renderData: function() {\n            var paths = this.srcElement.paths;\n\n            if (paths.length > 0) {\n                var result = [],\n                    i,\n                    open;\n\n                for (i = 0; i < paths.length; i++) {\n                    open = i < paths.length - 1;\n                    result.push(printPath(paths[i], open));\n                }\n\n                return result.join(\" \");\n            }\n        }\n    });\n\n    var MultiPathNode = PathNode.extend({\n        createDataNode: function(srcElement) {\n            return new MultiPathDataNode(srcElement);\n        }\n    });\n\n    var CircleTransformNode = TransformNode.extend({\n        transformOrigin: function() {\n            var boundingBox = this.srcElement.geometry().bbox(),\n                center = boundingBox.center(),\n                originX = -ceil(center.x) / ceil(boundingBox.width()),\n                originY = -ceil(center.y) / ceil(boundingBox.height());\n\n            return originX + \",\" + originY;\n        }\n    });\n\n    var CircleNode = ShapeNode.extend({\n        createElement: function() {\n            this.element = createElementVML(\"oval\");\n            this.setStyle();\n        },\n\n        createTransformNode: function(srcElement, transform) {\n            return new CircleTransformNode(srcElement, transform);\n        },\n\n        geometryChange: function() {\n            ShapeNode.fn.geometryChange.call(this);\n\n            this.setStyle();\n            this.refreshTransform();\n        },\n\n        mapStyle: function() {\n            var geometry = this.srcElement.geometry();\n            var radius = geometry.radius;\n            var center = geometry.center;\n            var diameter = ceil(radius * 2);\n\n            var styles = ShapeNode.fn.mapStyle.call(this, diameter, diameter);\n            styles.push(\n                [\"left\", ceil(center.x - radius) + \"px\"],\n                [\"top\", ceil(center.y - radius) + \"px\"]\n            );\n\n            return styles;\n        }\n    });\n\n    var ArcDataNode = PathDataNode.extend({\n        renderData: function() {\n            return printPath(this.srcElement.toPath());\n        }\n    });\n\n    var ArcNode = PathNode.extend({\n        createDataNode: function(srcElement) {\n            return new ArcDataNode(srcElement);\n        }\n    });\n\n    var TextPathDataNode = PathDataNode.extend({\n        createElement: function() {\n            PathDataNode.fn.createElement.call(this);\n\n            this.attr(\"textpathok\", true);\n        },\n\n        renderData: function() {\n            var rect = this.srcElement.rect();\n            var center = rect.center();\n            return \"m \" + printPoints([new g.Point(rect.topLeft().x, center.y)]) +\n                   \" l \" + printPoints([new g.Point(rect.bottomRight().x, center.y)]);\n        }\n    });\n\n    var TextPathNode = Node.extend({\n        createElement: function() {\n            this.element = createElementVML(\"textpath\");\n\n            this.attr(\"on\", true);\n            this.attr(\"fitpath\", false);\n            this.setStyle();\n            this.setString();\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"content\") {\n                this.setString();\n            } else {\n                this.setStyle();\n            }\n\n            Node.fn.optionsChange.call(this, e);\n        },\n\n        mapStyle: function() {\n            return [[\"font\", this.srcElement.options.font]];\n        },\n\n        setString: function() {\n            this.attr(\"string\", this.srcElement.content());\n        }\n    });\n\n    var TextNode = PathNode.extend({\n        init: function(srcElement, transform, opacity) {\n            this.path = new TextPathNode(srcElement);\n\n            PathNode.fn.init.call(this, srcElement, transform, opacity);\n        },\n\n        createDataNode: function(srcElement) {\n            return new TextPathDataNode(srcElement);\n        },\n\n        attachTo: function(domElement, pos) {\n            this.path.attachTo(this.element);\n            PathNode.fn.attachTo.call(this, domElement, pos);\n        },\n\n        optionsChange: function(e) {\n            if(e.field === \"font\" || e.field === \"content\") {\n                this.path.optionsChange(e);\n                this.pathData.geometryChange(e);\n            }\n\n            PathNode.fn.optionsChange.call(this, e);\n        }\n    });\n\n    var ImagePathDataNode = PathDataNode.extend({\n        renderData: function() {\n            var rect = this.srcElement.rect();\n            var path = new d.Path().moveTo(rect.topLeft())\n                                   .lineTo(rect.topRight())\n                                   .lineTo(rect.bottomRight())\n                                   .lineTo(rect.bottomLeft())\n                                   .close();\n\n            return printPath(path);\n        }\n    });\n\n    var ImageFillNode = TransformNode.extend({\n        init: function(srcElement, transform, opacity) {\n            this.opacity = opacity;\n            TransformNode.fn.init.call(this, srcElement, transform);\n        },\n\n        createElement: function() {\n            this.element = createElementVML(\"fill\");\n\n            this.attr(\"type\", \"frame\");\n            this.attr(\"rotate\", true);\n            this.setOpacity();\n            this.setSrc();\n            this.setTransform();\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"src\") {\n                this.setSrc();\n            }\n\n            TransformNode.fn.optionsChange.call(this, e);\n        },\n\n        geometryChange: function() {\n            this.refresh();\n        },\n\n        refreshOpacity: function(opacity) {\n            this.opacity = opacity;\n            this.setOpacity();\n        },\n\n        setOpacity: function() {\n            var attrs = [];\n            this.mapOpacityTo(attrs, this.srcElement.options.opacity);\n            this.allAttr(attrs);\n        },\n\n        setSrc: function() {\n            this.attr(\"src\", this.srcElement.src());\n        },\n\n        mapTransform: function() {\n            var img = this.srcElement;\n            var rawbbox = img.rawBBox();\n            var rawcenter = rawbbox.center();\n\n            var fillOrigin = COORDINATE_MULTIPLE / 2;\n            var fillSize = COORDINATE_MULTIPLE;\n\n            var x;\n            var y;\n            var width = rawbbox.width() / fillSize;\n            var height = rawbbox.height() / fillSize;\n            var angle = 0;\n\n            var transform = this.transform;\n            if (transform) {\n                var matrix = toMatrix(transform);\n                var sx = sqrt(matrix.a * matrix.a + matrix.b * matrix.b);\n                var sy = sqrt(matrix.c * matrix.c + matrix.d * matrix.d);\n\n                width *= sx;\n                height *= sy;\n\n                var ax = deg(atan2(matrix.b, matrix.d));\n                var ay = deg(atan2(-matrix.c, matrix.a));\n                angle = (ax + ay) / 2;\n\n                if (angle !== 0) {\n                    var center = img.bbox().center();\n                    x = (center.x - fillOrigin) / fillSize;\n                    y = (center.y - fillOrigin) / fillSize;\n                } else {\n                    x = (rawcenter.x * sx + matrix.e - fillOrigin) / fillSize;\n                    y = (rawcenter.y * sy + matrix.f - fillOrigin) / fillSize;\n                }\n            } else {\n                x = (rawcenter.x - fillOrigin) / fillSize;\n                y = (rawcenter.y - fillOrigin) / fillSize;\n            }\n\n            width = round(width, TRANSFORM_PRECISION);\n            height = round(height, TRANSFORM_PRECISION);\n            x = round(x, TRANSFORM_PRECISION);\n            y = round(y, TRANSFORM_PRECISION);\n            angle = round(angle, TRANSFORM_PRECISION);\n\n            return [\n                [\"size\", width + \",\" + height],\n                [\"position\", x + \",\" + y],\n                [\"angle\", angle]\n            ];\n        }\n    });\n\n    var ImageNode = PathNode.extend({\n        createFillNode: function(srcElement, transform, opacity) {\n            return new ImageFillNode(srcElement, transform, opacity);\n        },\n\n        createDataNode: function(srcElement) {\n            return new ImagePathDataNode(srcElement);\n        },\n\n        optionsChange: function(e) {\n            if (e.field === \"src\" || e.field === \"transform\") {\n                this.fill.optionsChange(e);\n            }\n\n            PathNode.fn.optionsChange.call(this, e);\n        },\n\n        geometryChange: function() {\n            this.fill.geometryChange();\n            PathNode.fn.geometryChange.call(this);\n        },\n\n        refreshTransform: function(transform) {\n            PathNode.fn.refreshTransform.call(this, transform);\n            this.fill.refresh(this.srcElement.currentTransform(transform));\n        }\n    });\n\n    var nodeMap = {\n        Group: GroupNode,\n        Text: TextNode,\n        Path: PathNode,\n        MultiPath: MultiPathNode,\n        Circle: CircleNode,\n        Arc: ArcNode,\n        Image: ImageNode\n    };\n\n    // Helper functions =======================================================\n    function enableVML() {\n        if (doc.namespaces && !doc.namespaces.kvml) {\n            doc.namespaces.add(\"kvml\", \"urn:schemas-microsoft-com:vml\");\n\n            var stylesheet = doc.styleSheets.length > 30 ? doc.styleSheets[0] : doc.createStyleSheet();\n            stylesheet.addRule(\".kvml\", \"behavior:url(#default#VML)\");\n        }\n    }\n\n    function createElementVML(type) {\n        var element = doc.createElement(\"kvml:\" + type);\n        element.className = \"kvml\";\n\n        return element;\n    }\n\n    function printPoints(points) {\n        var length = points.length;\n        var result = [];\n\n        for (var i = 0; i < length; i++) {\n            result.push(points[i]\n                .scaleCopy(COORDINATE_MULTIPLE)\n                .toString(0, \",\")\n           );\n        }\n\n        return result.join(\" \");\n    }\n\n    function printPath(path, open) {\n        var segments = path.segments,\n            length = segments.length;\n\n        if (length > 0) {\n            var parts = [],\n                output,\n                type,\n                currentType,\n                i;\n\n            for (i = 1; i < length; i++) {\n                type = segmentType(segments[i - 1], segments[i]);\n                if (type !== currentType) {\n                    currentType = type;\n                    parts.push(type);\n                }\n\n                if (type === \"l\") {\n                    parts.push(printPoints([segments[i].anchor()]));\n                } else {\n                    parts.push(printPoints([\n                        segments[i - 1].controlOut(),\n                        segments[i].controlIn(),\n                        segments[i].anchor()\n                    ]));\n                }\n            }\n\n            output = \"m \" + printPoints([segments[0].anchor()]) + \" \" + parts.join(\" \");\n            if (path.options.closed) {\n                output += \" x\";\n            }\n\n            if (open !== true) {\n                output += \" e\";\n            }\n\n            return output;\n        }\n    }\n\n    function segmentType(segmentStart, segmentEnd) {\n        return segmentStart.controlOut() && segmentEnd.controlIn() ? \"c\" : \"l\";\n    }\n\n    function fillField(field) {\n        return field.indexOf(\"fill\") === 0 || field.indexOf(GRADIENT) === 0;\n    }\n\n    function stopColor(baseColor, stop) {\n        var color;\n        if (baseColor) {\n            color = blendColors(baseColor, stop.color(), stop.opacity());\n        } else {\n            color = blendColors(stop.color(), \"#fff\", 1 - stop.opacity());\n        }\n        return color;\n    }\n\n    function blendColors(base, overlay, alpha) {\n        var baseColor = new Color(base),\n            overlayColor = new Color(overlay),\n            r = blendChannel(baseColor.r, overlayColor.r, alpha),\n            g = blendChannel(baseColor.g, overlayColor.g, alpha),\n            b = blendChannel(baseColor.b, overlayColor.b, alpha);\n\n        return new Color(r, g, b).toHex();\n    }\n\n    function blendChannel(a, b, alpha) {\n        return math.round(alpha * b + (1 - alpha) * a);\n    }\n\n    // Exports ================================================================\n    kendo.support.vml = (function() {\n        var browser = kendo.support.browser;\n        return browser.msie && browser.version < 9;\n    })();\n\n\n    var EMPTY_CLIP = \"inherit\";\n    if (kendo.support.browser.msie && kendo.support.browser.version < 8) {\n        EMPTY_CLIP = \"rect(auto auto auto auto)\";\n    }\n\n    if (kendo.support.vml) {\n        d.SurfaceFactory.current.register(\"vml\", Surface, 30);\n    }\n\n    deepExtend(d, {\n        vml: {\n            ArcDataNode: ArcDataNode,\n            ArcNode: ArcNode,\n            CircleTransformNode: CircleTransformNode,\n            CircleNode: CircleNode,\n            FillNode: FillNode,\n            GroupNode: GroupNode,\n            ImageNode: ImageNode,\n            ImageFillNode: ImageFillNode,\n            ImagePathDataNode: ImagePathDataNode,\n            MultiPathDataNode: MultiPathDataNode,\n            MultiPathNode: MultiPathNode,\n            Node: Node,\n            PathDataNode: PathDataNode,\n            PathNode: PathNode,\n            RootNode: RootNode,\n            StrokeNode: StrokeNode,\n            Surface: Surface,\n            TextNode: TextNode,\n            TextPathNode: TextPathNode,\n            TextPathDataNode: TextPathDataNode,\n            TransformNode: TransformNode\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function(global, parseFloat, undefined){\n\n    \"use strict\";\n\n    // WARNING: removing the following jshint declaration and turning\n    // == into === to make JSHint happy will break functionality.\n    /* jshint eqnull:true */\n    /* jshint -W069 */\n    /* jshint loopfunc:true */\n    /* jshint newcap:false */\n    /* global VBArray */\n\n    var kendo = global.kendo;\n\n    // XXX: remove this junk (assume `true`) when we no longer have to support IE < 10\n    var HAS_TYPED_ARRAYS = !!global.Uint8Array;\n\n    var NL = \"\\n\";\n\n    var RESOURCE_COUNTER = 0;\n\n    var BASE64 = (function(){\n        var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n        return {\n            decode: function(str) {\n                var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"), i = 0, n = input.length, output = [];\n\n\t        while (i < n) {\n\t\t    var enc1 = keyStr.indexOf(input.charAt(i++));\n\t\t    var enc2 = keyStr.indexOf(input.charAt(i++));\n\t\t    var enc3 = keyStr.indexOf(input.charAt(i++));\n\t\t    var enc4 = keyStr.indexOf(input.charAt(i++));\n\n\t\t    var chr1 = (enc1 << 2) | (enc2 >>> 4);\n\t\t    var chr2 = ((enc2 & 15) << 4) | (enc3 >>> 2);\n\t\t    var chr3 = ((enc3 & 3) << 6) | enc4;\n\n\t\t    output.push(chr1);\n\t\t    if (enc3 != 64) {\n                        output.push(chr2);\n                    }\n\t\t    if (enc4 != 64) {\n                        output.push(chr3);\n                    }\n\t        }\n\n\t        return output;\n            },\n            encode: function(bytes) {\n                var i = 0, n = bytes.length;\n                var output = \"\";\n\n\t        while (i < n) {\n\t\t    var chr1 = bytes[i++];\n\t\t    var chr2 = bytes[i++];\n\t\t    var chr3 = bytes[i++];\n\n\t\t    var enc1 = chr1 >>> 2;\n\t\t    var enc2 = ((chr1 & 3) << 4) | (chr2 >>> 4);\n\t\t    var enc3 = ((chr2 & 15) << 2) | (chr3 >>> 6);\n\t\t    var enc4 = chr3 & 63;\n\n\t\t    if (i - n == 2) {\n\t\t\tenc3 = enc4 = 64;\n\t\t    } else if (i - n == 1) {\n\t\t\tenc4 = 64;\n\t\t    }\n\n\t\t    output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n                }\n                return output;\n            }\n        };\n    }());\n\n    var PAPER_SIZE = {\n        a0        : [ 2383.94 , 3370.39 ],\n        a1        : [ 1683.78 , 2383.94 ],\n        a2        : [ 1190.55 , 1683.78 ],\n        a3        : [ 841.89  , 1190.55 ],\n        a4        : [ 595.28  , 841.89  ],\n        a5        : [ 419.53  , 595.28  ],\n        a6        : [ 297.64  , 419.53  ],\n        a7        : [ 209.76  , 297.64  ],\n        a8        : [ 147.40  , 209.76  ],\n        a9        : [ 104.88  , 147.40  ],\n        a10       : [ 73.70   , 104.88  ],\n        b0        : [ 2834.65 , 4008.19 ],\n        b1        : [ 2004.09 , 2834.65 ],\n        b2        : [ 1417.32 , 2004.09 ],\n        b3        : [ 1000.63 , 1417.32 ],\n        b4        : [ 708.66  , 1000.63 ],\n        b5        : [ 498.90  , 708.66  ],\n        b6        : [ 354.33  , 498.90  ],\n        b7        : [ 249.45  , 354.33  ],\n        b8        : [ 175.75  , 249.45  ],\n        b9        : [ 124.72  , 175.75  ],\n        b10       : [ 87.87   , 124.72  ],\n        c0        : [ 2599.37 , 3676.54 ],\n        c1        : [ 1836.85 , 2599.37 ],\n        c2        : [ 1298.27 , 1836.85 ],\n        c3        : [ 918.43  , 1298.27 ],\n        c4        : [ 649.13  , 918.43  ],\n        c5        : [ 459.21  , 649.13  ],\n        c6        : [ 323.15  , 459.21  ],\n        c7        : [ 229.61  , 323.15  ],\n        c8        : [ 161.57  , 229.61  ],\n        c9        : [ 113.39  , 161.57  ],\n        c10       : [ 79.37   , 113.39  ],\n        executive : [ 521.86  , 756.00  ],\n        folio     : [ 612.00  , 936.00  ],\n        legal     : [ 612.00  , 1008.00 ],\n        letter    : [ 612.00  , 792.00  ],\n        tabloid   : [ 792.00  , 1224.00 ]\n    };\n\n    function makeOutput() {\n        var indentLevel = 0, output = BinaryStream();\n        function out() {\n            for (var i = 0; i < arguments.length; ++i) {\n                var x = arguments[i];\n                if (x === undefined) {\n                    throw new Error(\"Cannot output undefined to PDF\");\n                }\n                else if (x instanceof PDFValue) {\n                    x.beforeRender(out);\n                    x.render(out);\n                }\n                else if (isArray(x)) {\n                    renderArray(x, out);\n                }\n                else if (isDate(x)) {\n                    renderDate(x, out);\n                }\n                else if (typeof x == \"number\") {\n                    if (isNaN(x)) {\n                        throw new Error(\"Cannot output NaN to PDF\");\n                    }\n                    // make sure it doesn't end up in exponent notation\n                    var num = x.toFixed(7);\n                    if (num.indexOf(\".\") >= 0) {\n                        num = num.replace(/\\.?0+$/, \"\");\n                    }\n                    if (num == \"-0\") {\n                        num = \"0\";\n                    }\n                    output.writeString(num);\n                }\n                else if (/string|boolean/.test(typeof x)) {\n                    output.writeString(x+\"\");\n                }\n                else if (typeof x.get == \"function\") {\n                    output.write(x.get());\n                }\n                else if (typeof x == \"object\") {\n                    if (!x) {\n                        output.writeString(\"null\");\n                    } else {\n                        out(new PDFDictionary(x));\n                    }\n                }\n            }\n        }\n        out.writeData = function(data) {\n            output.write(data);\n        };\n        out.withIndent = function(f) {\n            ++indentLevel;\n            f(out);\n            --indentLevel;\n        };\n        out.indent = function() {\n            out(NL, pad(\"\", indentLevel * 2, \"  \"));\n            out.apply(null, arguments);\n        };\n        out.offset = function() {\n            return output.offset();\n        };\n        out.toString = function() {\n            throw new Error(\"FIX CALLER\");\n        };\n        out.get = function() {\n            return output.get();\n        };\n        out.stream = function() {\n            return output;\n        };\n        return out;\n    }\n\n    function wrapObject(value, id) {\n        var beforeRender = value.beforeRender;\n        var renderValue = value.render;\n\n        value.beforeRender = function(){};\n\n        value.render = function(out) {\n            out(id, \" 0 R\");\n        };\n\n        value.renderFull = function(out) {\n            value._offset = out.offset();\n            out(id, \" 0 obj \");\n            beforeRender.call(value, out);\n            renderValue.call(value, out);\n            out(\" endobj\");\n        };\n    }\n\n    function PDFDocument(options) {\n        var self = this;\n        var out = makeOutput();\n        var objcount = 0;\n        var objects = [];\n\n        function getOption(name, defval) {\n            return (options && options[name] != null) ? options[name] : defval;\n        }\n\n        self.getOption = getOption;\n\n        self.attach = function(value) {\n            if (objects.indexOf(value) < 0) {\n                wrapObject(value, ++objcount);\n                objects.push(value);\n            }\n            return value;\n        };\n\n        self.pages = [];\n\n        self.FONTS = {};\n        self.IMAGES = {};\n        self.GRAD_COL_FUNCTIONS = {}; // cache for color gradient functions\n        self.GRAD_OPC_FUNCTIONS = {}; // cache for opacity gradient functions\n        self.GRAD_COL = {};     // cache for whole color gradient objects\n        self.GRAD_OPC = {};     // cache for whole opacity gradient objects\n\n        function getPaperOptions(getOption) {\n            var paperSize = getOption(\"paperSize\", PAPER_SIZE.a4);\n            if (!paperSize) {\n                return {};\n            }\n            if (typeof paperSize == \"string\") {\n                paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n                if (paperSize == null) {\n                    throw new Error(\"Unknown paper size\");\n                }\n            }\n\n            paperSize[0] = unitsToPoints(paperSize[0]);\n            paperSize[1] = unitsToPoints(paperSize[1]);\n\n            if (getOption(\"landscape\", false)) {\n                paperSize = [\n                    Math.max(paperSize[0], paperSize[1]),\n                    Math.min(paperSize[0], paperSize[1])\n                ];\n            }\n\n            var margin = getOption(\"margin\");\n            if (margin) {\n                if (typeof margin == \"string\") {\n                    margin = unitsToPoints(margin, 0);\n                    margin = { left: margin, top: margin, right: margin, bottom: margin };\n                } else {\n                    margin.left = unitsToPoints(margin.left, 0);\n                    margin.top = unitsToPoints(margin.top, 0);\n                    margin.right = unitsToPoints(margin.right, 0);\n                    margin.bottom = unitsToPoints(margin.bottom, 0);\n                }\n                if (getOption(\"addMargin\")) {\n                    paperSize[0] += margin.left + margin.right;\n                    paperSize[1] += margin.top + margin.bottom;\n                }\n            }\n            return { paperSize: paperSize, margin: margin };\n        }\n\n        var catalog = self.attach(new PDFCatalog());\n        var pageTree = self.attach(new PDFPageTree());\n        catalog.setPages(pageTree);\n\n        self.addPage = function(options) {\n            var paperOptions  = getPaperOptions(function(name, defval){\n                return (options && options[name] != null) ? options[name] : defval;\n            });\n            var paperSize     = paperOptions.paperSize;\n            var margin        = paperOptions.margin;\n            var contentWidth  = paperSize[0];\n            var contentHeight = paperSize[1];\n            if (margin) {\n                contentWidth -= margin.left + margin.right;\n                contentHeight -= margin.top + margin.bottom;\n            }\n            var content = new PDFStream(makeOutput(), null, true);\n            var props = {\n                Contents : self.attach(content),\n                Parent   : pageTree,\n                MediaBox : [ 0, 0, paperSize[0], paperSize[1] ]\n            };\n            var page = new PDFPage(self, props);\n            page._content = content;\n            pageTree.addPage(self.attach(page));\n\n            // canvas-like coord. system.  (0,0) is upper-left.\n            // text must be vertically mirorred before drawing.\n            page.transform(1, 0, 0, -1, 0, paperSize[1]);\n\n            if (margin) {\n                page.translate(margin.left, margin.top);\n                // XXX: clip to right/bottom margin.  Make this optional?\n                page.rect(0, 0, contentWidth, contentHeight);\n                page.clip();\n            }\n\n            self.pages.push(page);\n            return page;\n        };\n\n        self.render = function() {\n            var i;\n            /// file header\n            out(\"%PDF-1.4\", NL, \"%\\xc2\\xc1\\xda\\xcf\\xce\", NL, NL);\n\n            /// file body\n            for (i = 0; i < objects.length; ++i) {\n                objects[i].renderFull(out);\n                out(NL, NL);\n            }\n\n            /// cross-reference table\n            var xrefOffset = out.offset();\n            out(\"xref\", NL, 0, \" \", objects.length + 1, NL);\n            out(\"0000000000 65535 f \", NL);\n            for (i = 0; i < objects.length; ++i) {\n                out(zeropad(objects[i]._offset, 10), \" 00000 n \", NL);\n            }\n            out(NL);\n\n            /// trailer\n            out(\"trailer\", NL);\n            out(new PDFDictionary({\n                Size: objects.length + 1,\n                Root: catalog,\n                Info: new PDFDictionary({\n                    Producer     : new PDFString(\"Kendo UI PDF Generator\"),\n                    Title        : new PDFString(getOption(\"title\", \"\")),\n                    Author       : new PDFString(getOption(\"author\", \"\")),\n                    Subject      : new PDFString(getOption(\"subject\", \"\")),\n                    Keywords     : new PDFString(getOption(\"keywords\", \"\")),\n                    Creator      : new PDFString(getOption(\"creator\", \"Kendo UI PDF Generator\")),\n                    CreationDate : getOption(\"date\", new Date())\n                })\n            }), NL, NL);\n\n            /// end\n            out(\"startxref\", NL, xrefOffset, NL);\n            out(\"%%EOF\", NL);\n\n            return out.stream().offset(0);\n        };\n    }\n\n    var FONT_CACHE = {\n        \"Times-Roman\"           : true,\n        \"Times-Bold\"            : true,\n        \"Times-Italic\"          : true,\n        \"Times-BoldItalic\"      : true,\n        \"Helvetica\"             : true,\n        \"Helvetica-Bold\"        : true,\n        \"Helvetica-Oblique\"     : true,\n        \"Helvetica-BoldOblique\" : true,\n        \"Courier\"               : true,\n        \"Courier-Bold\"          : true,\n        \"Courier-Oblique\"       : true,\n        \"Courier-BoldOblique\"   : true,\n        \"Symbol\"                : true,\n        \"ZapfDingbats\"          : true\n    };\n\n    function loadBinary(url, cont) {\n        function error() {\n            if (global.console) {\n                if (global.console.error) {\n                    global.console.error(\"Cannot load URL: %s\", url);\n                } else {\n                    global.console.log(\"Cannot load URL: %s\", url);\n                }\n            }\n            cont(null);\n        }\n        var req = new XMLHttpRequest();\n        req.open('GET', url, true);\n        if (HAS_TYPED_ARRAYS) {\n            req.responseType = \"arraybuffer\";\n        }\n        req.onload = function() {\n            if (req.status == 200 || req.status == 304) {\n                if (HAS_TYPED_ARRAYS) {\n                    cont(new Uint8Array(req.response));\n                } else {\n                    cont(new VBArray(req.responseBody).toArray()); // IE9 only\n                }\n            } else {\n                error();\n            }\n        };\n        req.onerror = error;\n        req.send(null);\n    }\n\n    function loadFont(url, cont) {\n        var font = FONT_CACHE[url];\n        if (font) {\n            cont(font);\n        } else {\n            loadBinary(url, function(data){\n                if (data == null) {\n                    throw new Error(\"Cannot load font from \" + url);\n                } else {\n                    var font = new kendo.pdf.TTFFont(data);\n                    FONT_CACHE[url] = font;\n                    cont(font);\n                }\n            });\n        }\n    }\n\n    var IMAGE_CACHE = {};\n\n    function loadImage(url, cont) {\n        var img = IMAGE_CACHE[url];\n        if (img) {\n            cont(img);\n        } else {\n            img = new Image();\n            if (!(/^data:/i.test(url))) {\n                img.crossOrigin = \"Anonymous\";\n            }\n            img.src = url;\n\n            var onload = function() {\n                var canvas = document.createElement(\"canvas\");\n                canvas.width = img.width;\n                canvas.height = img.height;\n                var ctx = canvas.getContext(\"2d\");\n\n                ctx.drawImage(img, 0, 0);\n\n                var imgdata;\n                try {\n                    imgdata = ctx.getImageData(0, 0, img.width, img.height);\n                } catch(ex) {\n                    // it tainted the canvas -- can't draw it.\n                    return cont(IMAGE_CACHE[url] = \"TAINTED\");\n                }\n\n                // in case it contains transparency, we must separate rgb data from the alpha\n                // channel and create a PDFRawImage image with opacity.  otherwise we can use a\n                // PDFJpegImage.\n                //\n                // to do this in one step, we create the rgb and alpha streams anyway, even if\n                // we might end up not using them if hasAlpha remains false.\n\n                var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n                var rawbytes = imgdata.data;\n                var i = 0;\n                while (i < rawbytes.length) {\n                    rgb.writeByte(rawbytes[i++]);\n                    rgb.writeByte(rawbytes[i++]);\n                    rgb.writeByte(rawbytes[i++]);\n                    var a = rawbytes[i++];\n                    if (a < 255) {\n                        hasAlpha = true;\n                    }\n                    alpha.writeByte(a);\n                }\n\n                if (hasAlpha) {\n                    img = new PDFRawImage(img.width, img.height, rgb, alpha);\n                } else {\n                    // no transparency, encode as JPEG.\n                    var data = canvas.toDataURL(\"image/jpeg\");\n                    data = data.substr(data.indexOf(\";base64,\") + 8);\n\n                    var stream = BinaryStream();\n                    stream.writeBase64(data);\n                    stream.offset(0);\n                    img = new PDFJpegImage(img.width, img.height, stream);\n                }\n\n                cont(IMAGE_CACHE[url] = img);\n            };\n\n            if (img.complete) {\n                onload();\n            } else {\n                img.onload = onload;\n                img.onerror = function(ev) {\n                    cont(IMAGE_CACHE[url] = \"TAINTED\");\n                };\n            }\n        }\n    }\n\n    function manyLoader(loadOne) {\n        return function(urls, callback) {\n            var n = urls.length, i = n;\n            if (n === 0) {\n                return callback();\n            }\n            while (i-- > 0) {\n                loadOne(urls[i], function(){\n                    if (--n === 0) {\n                        callback();\n                    }\n                });\n            }\n        };\n    }\n\n    var loadFonts = manyLoader(loadFont);\n    var loadImages = manyLoader(loadImage);\n\n    PDFDocument.prototype = {\n        loadFonts: loadFonts,\n        loadImages: loadImages,\n\n        getFont: function(url) {\n            var font = this.FONTS[url];\n            if (!font) {\n                font = FONT_CACHE[url];\n                if (!font) {\n                    throw new Error(\"Font \" + url + \" has not been loaded\");\n                }\n                if (font === true) {\n                    font = this.attach(new PDFStandardFont(url));\n                } else {\n                    font = this.attach(new PDFFont(this, font));\n                }\n                this.FONTS[url] = font;\n            }\n            return font;\n        },\n\n        getImage: function(url) {\n            var img = this.IMAGES[url];\n            if (!img) {\n                img = IMAGE_CACHE[url];\n                if (!img) {\n                    throw new Error(\"Image \" + url + \" has not been loaded\");\n                }\n                if (img === \"TAINTED\") {\n                    return null;\n                }\n                img = this.IMAGES[url] = this.attach(img.asStream(this));\n            }\n            return img;\n        },\n\n        getOpacityGS: function(opacity, forStroke) {\n            var id = parseFloat(opacity).toFixed(3);\n            opacity = parseFloat(id);\n            id += forStroke ? \"S\" : \"F\";\n            var cache = this._opacityGSCache || (this._opacityGSCache = {});\n            var gs = cache[id];\n            if (!gs) {\n                var props = {\n                    Type: _(\"ExtGState\")\n                };\n                if (forStroke) {\n                    props.CA = opacity;\n                } else {\n                    props.ca = opacity;\n                }\n                gs = this.attach(new PDFDictionary(props));\n                gs._resourceName = _(\"GS\" + (++RESOURCE_COUNTER));\n                cache[id] = gs;\n            }\n            return gs;\n        },\n\n        dict: function(props) {\n            return new PDFDictionary(props);\n        },\n\n        name: function(str) {\n            return _(str);\n        },\n\n        stream: function(props, content) {\n            return new PDFStream(content, props);\n        }\n    };\n\n    /* -----[ utils ]----- */\n\n    function pad(str, len, ch) {\n        while (str.length < len) {\n            str = ch + str;\n        }\n        return str;\n    }\n\n    function zeropad(n, len) {\n        return pad(n+\"\", len, \"0\");\n    }\n\n    function hasOwnProperty(obj, key) {\n        return Object.prototype.hasOwnProperty.call(obj, key);\n    }\n\n    var isArray = Array.isArray || function(obj) {\n        return obj instanceof Array;\n    };\n\n    function isDate(obj) {\n        return obj instanceof Date;\n    }\n\n    function renderArray(a, out) {\n        out(\"[\");\n        if (a.length > 0) {\n            out.withIndent(function(){\n                for (var i = 0; i < a.length; ++i) {\n                    if (i > 0 && i % 8 === 0) {\n                        out.indent(a[i]);\n                    } else {\n                        out(\" \", a[i]);\n                    }\n                }\n            });\n            //out.indent();\n        }\n        out(\" ]\");\n    }\n\n    function renderDate(date, out) {\n        out(\"(D:\",\n            zeropad(date.getUTCFullYear(), 4),\n            zeropad(date.getUTCMonth() + 1, 2),\n            zeropad(date.getUTCDate(), 2),\n            zeropad(date.getUTCHours(), 2),\n            zeropad(date.getUTCMinutes(), 2),\n            zeropad(date.getUTCSeconds(), 2),\n            \"Z)\");\n    }\n\n    function mm2pt(mm) {\n        return mm * (72/25.4);\n    }\n\n    function cm2pt(cm) {\n        return mm2pt(cm * 10);\n    }\n\n    function in2pt(inch)  {\n        return inch * 72;\n    }\n\n    function unitsToPoints(x, def) {\n        if (typeof x == \"number\") {\n            return x;\n        }\n        if (typeof x == \"string\") {\n            var m;\n            m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n            if (m) {\n                var num = parseFloat(m[1]);\n                if (!isNaN(num)) {\n                    if (m[2] == \"pt\") {\n                        return num;\n                    }\n                    return {\n                        \"mm\": mm2pt,\n                        \"cm\": cm2pt,\n                        \"in\": in2pt\n                    }[m[2]](num);\n                }\n            }\n        }\n        if (def != null) {\n            return def;\n        }\n        throw new Error(\"Can't parse unit: \" + x);\n    }\n\n    /* -----[ PDF basic objects ]----- */\n\n    function PDFValue(){}\n\n    PDFValue.prototype.beforeRender = function(){};\n\n    function defclass(Ctor, proto, Base) {\n        if (!Base) {\n            Base = PDFValue;\n        }\n        Ctor.prototype = new Base();\n        for (var i in proto) {\n            if (hasOwnProperty(proto, i)) {\n                Ctor.prototype[i] = proto[i];\n            }\n        }\n        return Ctor;\n    }\n\n    /// strings\n\n    var PDFString = defclass(function PDFString(value){\n        this.value = value;\n    }, {\n        render: function(out) {\n            //out(\"(\\xFE\\xFF\", utf16_be_encode(this.escape()), \")\");\n            var txt = \"\", esc = this.escape();\n            for (var i = 0; i < esc.length; ++i) {\n                txt += String.fromCharCode(esc.charCodeAt(i) & 0xFF);\n            }\n            out(\"(\", txt, \")\");\n        },\n        escape: function() {\n            return this.value.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n        },\n        toString: function() {\n            return this.value;\n        }\n    });\n\n    var PDFHexString = defclass(function PDFHexString(value){\n        this.value = value;\n    }, {\n        render: function(out) {\n            out(\"<\");\n            for (var i = 0; i < this.value.length; ++i) {\n                out(zeropad(this.value.charCodeAt(i).toString(16), 4));\n            }\n            out(\">\");\n        }\n    }, PDFString);\n\n    /// names\n\n    var PDFName = defclass(function PDFName(name) {\n        this.name = name;\n    }, {\n        render: function(out) {\n            out(\"/\" + this.escape());\n        },\n        escape: function() {\n            return this.name.replace(/[^\\x21-\\x7E]/g, function(c){\n                return \"#\" + zeropad(c.charCodeAt(0).toString(16), 2);\n            });\n        },\n        toString: function() {\n            return this.name;\n        }\n    });\n\n    var PDFName_cache = {};\n    PDFName.get = _;\n\n    function _(name) {\n        if (hasOwnProperty(PDFName_cache, name)) {\n            return PDFName_cache[name];\n        }\n        return (PDFName_cache[name] = new PDFName(name));\n    }\n\n    /// dictionary\n\n    var PDFDictionary = defclass(function PDFDictionary(props) {\n        this.props = props;\n    }, {\n        render: function(out) {\n            var props = this.props, empty = true;\n            out(\"<<\");\n            out.withIndent(function(){\n                for (var i in props) {\n                    if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n                        empty = false;\n                        out.indent(_(i), \" \", props[i]);\n                    }\n                }\n            });\n            if (!empty) {\n                out.indent();\n            }\n            out(\">>\");\n        }\n    });\n\n    /// streams\n\n    var PDFStream = defclass(function PDFStream(data, props, compress) {\n        if (typeof data == \"string\") {\n            var tmp = BinaryStream();\n            tmp.write(data);\n            data = tmp;\n        }\n        this.data = data;\n        this.props = props || {};\n        this.compress = compress;\n    }, {\n        render: function(out) {\n            var data = this.data.get(), props = this.props;\n            if (this.compress && global.pako && typeof global.pako.deflate == \"function\") {\n                if (!props.Filter) {\n                    props.Filter = [];\n                } else if (!(props.Filter instanceof Array)) {\n                    props.Filter = [ props.Filter ];\n                }\n                props.Filter.unshift(_(\"FlateDecode\"));\n                data = global.pako.deflate(data);\n            }\n            props.Length = data.length;\n            out(new PDFDictionary(props), \" stream\", NL);\n            out.writeData(data);\n            out(NL, \"endstream\");\n        }\n    });\n\n    /// catalog\n\n    var PDFCatalog = defclass(function PDFCatalog(props){\n        props = this.props = props || {};\n        props.Type = _(\"Catalog\");\n    }, {\n        setPages: function(pagesObj) {\n            this.props.Pages = pagesObj;\n        }\n    }, PDFDictionary);\n\n    /// page tree\n\n    var PDFPageTree = defclass(function PDFPageTree(){\n        this.props = {\n            Type  : _(\"Pages\"),\n            Kids  : [],\n            Count : 0\n        };\n    }, {\n        addPage: function(pageObj) {\n            this.props.Kids.push(pageObj);\n            this.props.Count++;\n        }\n    }, PDFDictionary);\n\n    /// images\n\n    // JPEG\n\n    function PDFJpegImage(width, height, data) {\n        this.asStream = function() {\n            var stream = new PDFStream(data, {\n                Type             : _(\"XObject\"),\n                Subtype          : _(\"Image\"),\n                Width            : width,\n                Height           : height,\n                BitsPerComponent : 8,\n                ColorSpace       : _(\"DeviceRGB\"),\n                Filter           : _(\"DCTDecode\")\n            });\n            stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n            return stream;\n        };\n    }\n\n    // PDFRawImage will be used for images with transparency (PNG)\n\n    function PDFRawImage(width, height, rgb, alpha) {\n        this.asStream = function(pdf) {\n            var mask = new PDFStream(alpha, {\n                Type             : _(\"XObject\"),\n                Subtype          : _(\"Image\"),\n                Width            : width,\n                Height           : height,\n                BitsPerComponent : 8,\n                ColorSpace       : _(\"DeviceGray\")\n            }, true);\n            var stream = new PDFStream(rgb, {\n                Type             : _(\"XObject\"),\n                Subtype          : _(\"Image\"),\n                Width            : width,\n                Height           : height,\n                BitsPerComponent : 8,\n                ColorSpace       : _(\"DeviceRGB\"),\n                SMask            : pdf.attach(mask)\n            }, true);\n            stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n            return stream;\n        };\n    }\n\n    /// standard fonts\n\n    var PDFStandardFont = defclass(function PDFStandardFont(name){\n        this.props = {\n            Type     : _(\"Font\"),\n            Subtype  : _(\"Type1\"),\n            BaseFont : _(name)\n        };\n        this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n    }, {\n        encodeText: function(str) {\n            return new PDFString(str+\"\");\n        }\n    }, PDFDictionary);\n\n    /// TTF fonts\n\n    var PDFFont = defclass(function PDFFont(pdf, font, props){\n        props = this.props = props || {};\n        props.Type = _(\"Font\");\n        props.Subtype = _(\"Type0\");\n        props.Encoding = _(\"Identity-H\");\n\n        this._pdf = pdf;\n        this._font = font;\n        this._sub = font.makeSubset();\n        this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n\n        var head = font.head;\n\n        this.name = font.psName;\n        var scale = this.scale = font.scale;\n        this.bbox = [\n            head.xMin * scale,\n            head.yMin * scale,\n            head.xMax * scale,\n            head.yMax * scale\n        ];\n\n        this.italicAngle = font.post.italicAngle;\n        this.ascent = font.ascent * scale;\n        this.descent = font.descent * scale;\n        this.lineGap = font.lineGap * scale;\n        this.capHeight = font.os2.capHeight || this.ascent;\n        this.xHeight = font.os2.xHeight || 0;\n        this.stemV = 0;\n\n        this.familyClass = (font.os2.familyClass || 0) >> 8;\n        this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n        this.isScript = this.familyClass == 10;\n\n        this.flags = ((font.post.isFixedPitch ? 1 : 0) |\n                      (this.isSerif ? 1 << 1 : 0) |\n                      (this.isScript ? 1 << 3 : 0) |\n                      (this.italicAngle !== 0 ? 1 << 6 : 0) |\n                      (1 << 5));\n    }, {\n        encodeText: function(text) {\n            return new PDFHexString(this._sub.encodeText(text+\"\"));\n        },\n        beforeRender: function() {\n            var self = this;\n            var font = self._font;\n            var sub = self._sub;\n\n            // write the TTF data\n            var data = sub.render();\n            var fontStream = new PDFStream(BinaryStream(data), {\n                Length1: data.length\n            }, true);\n\n            var descriptor = self._pdf.attach(new PDFDictionary({\n                Type         : _(\"FontDescriptor\"),\n                FontName     : _(self._sub.psName),\n                FontBBox     : self.bbox,\n                Flags        : self.flags,\n                StemV        : self.stemV,\n                ItalicAngle  : self.italicAngle,\n                Ascent       : self.ascent,\n                Descent      : self.descent,\n                CapHeight    : self.capHeight,\n                XHeight      : self.xHeight,\n                FontFile2    : self._pdf.attach(fontStream)\n            }));\n\n            var cmap = sub.ncid2ogid;\n            var firstChar = sub.firstChar;\n            var lastChar = sub.lastChar;\n            var charWidths = [];\n            (function loop(i, chunk){\n                if (i <= lastChar) {\n                    var gid = cmap[i];\n                    if (gid == null) {\n                        loop(i + 1);\n                    } else {\n                        if (!chunk) {\n                            charWidths.push(i, chunk = []);\n                        }\n                        chunk.push(self._font.widthOfGlyph(gid));\n                        loop(i + 1, chunk);\n                    }\n                }\n            })(firstChar);\n\n            // As if two dictionaries weren't enough, we need another\n            // one, the \"descendant font\".  Only that one can be of\n            // Subtype CIDFontType2.  PDF is the X11 of document\n            // formats: portable but full of legacy that nobody cares\n            // about anymore.\n\n            var descendant = new PDFDictionary({\n                Type: _(\"Font\"),\n                Subtype: _(\"CIDFontType2\"),\n                BaseFont: _(self._sub.psName),\n                CIDSystemInfo: new PDFDictionary({\n                    Registry   : new PDFString(\"Adobe\"),\n                    Ordering   : new PDFString(\"Identity\"),\n                    Supplement : 0\n                }),\n                FontDescriptor: descriptor,\n                FirstChar: firstChar,\n                LastChar: lastChar,\n                DW: Math.round(self._font.widthOfGlyph(0)),\n                W: charWidths,\n                CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n            });\n\n            var dict = self.props;\n            dict.BaseFont = _(self._sub.psName);\n            dict.DescendantFonts = [ self._pdf.attach(descendant) ];\n\n            // Compute the ToUnicode map so that apps can extract\n            // meaningful text from the PDF.\n            var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n            var unimapStream = new PDFStream(makeOutput(), null, true);\n            unimapStream.data(unimap);\n            dict.ToUnicode = self._pdf.attach(unimapStream);\n        },\n        _makeCidToGidMap: function() {\n            return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n        }\n    }, PDFDictionary);\n\n    var PDFToUnicodeCmap = defclass(function PDFUnicodeCMap(firstChar, lastChar, map){\n        this.firstChar = firstChar;\n        this.lastChar = lastChar;\n        this.map = map;\n    }, {\n        render: function(out) {\n            out.indent(\"/CIDInit /ProcSet findresource begin\");\n            out.indent(\"12 dict begin\");\n            out.indent(\"begincmap\");\n            out.indent(\"/CIDSystemInfo <<\");\n            out.indent(\"  /Registry (Adobe)\");\n            out.indent(\"  /Ordering (UCS)\");\n            out.indent(\"  /Supplement 0\");\n            out.indent(\">> def\");\n            out.indent(\"/CMapName /Adobe-Identity-UCS def\");\n            out.indent(\"/CMapType 2 def\");\n            out.indent(\"1 begincodespacerange\");\n            out.indent(\"  <0000><ffff>\");\n            out.indent(\"endcodespacerange\");\n\n            var self = this;\n            out.indent(self.lastChar - self.firstChar + 1, \" beginbfchar\");\n            out.withIndent(function(){\n                for (var code = self.firstChar; code <= self.lastChar; ++code) {\n                    var unicode = self.map[code];\n                    out.indent(\"<\", zeropad(code.toString(16), 4), \">\",\n                               \"<\", zeropad(unicode.toString(16), 4), \">\");\n                }\n            });\n            out.indent(\"endbfchar\");\n\n            out.indent(\"endcmap\");\n            out.indent(\"CMapName currentdict /CMap defineresource pop\");\n            out.indent(\"end\");\n            out.indent(\"end\");\n        }\n    });\n\n    /// gradients\n\n    function makeHash(a) {\n        return a.map(function(x){\n            return isArray(x) ? makeHash(x)\n                : typeof x == \"number\" ? (Math.round(x * 1000) / 1000).toFixed(3)\n                : x;\n        }).join(\" \");\n    }\n\n    function cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n        var hash = makeHash([ r1, g1, b1, r2, g2, b2 ]);\n        var func = pdf.GRAD_COL_FUNCTIONS[hash];\n        if (!func) {\n            func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n                FunctionType: 2,\n                Domain: [ 0, 1 ],\n                Range: [ 0, 1, 0, 1, 0, 1 ],\n                N: 1,\n                C0: [ r1 , g1 , b1 ],\n                C1: [ r2 , g2 , b2 ]\n            }));\n        }\n        return func;\n    }\n\n    function cacheOpacityGradientFunction(pdf, a1, a2) {\n        var hash = makeHash([ a1, a2 ]);\n        var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n        if (!func) {\n            func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n                FunctionType: 2,\n                Domain: [ 0, 1 ],\n                Range: [ 0, 1 ],\n                N: 1,\n                C0: [ a1 ],\n                C1: [ a2 ]\n            }));\n        }\n        return func;\n    }\n\n    function makeGradientFunctions(pdf, stops) {\n        var hasAlpha = false;\n        var opacities = [];\n        var colors = [];\n        var offsets = [];\n        var encode = [];\n        var i, prev, cur, prevColor, curColor;\n        for (i = 1; i < stops.length; ++i) {\n            prev = stops[i - 1];\n            cur = stops[i];\n            prevColor = prev.color;\n            curColor = cur.color;\n            colors.push(cacheColorGradientFunction(\n                pdf,\n                prevColor.r, prevColor.g, prevColor.b,\n                curColor.r,  curColor.g,  curColor.b\n            ));\n            if (prevColor.a < 1 || curColor.a < 1) {\n                hasAlpha = true;\n            }\n            offsets.push(cur.offset);\n            encode.push(0, 1);\n        }\n        if (hasAlpha) {\n            for (i = 1; i < stops.length; ++i) {\n                prev = stops[i - 1];\n                cur = stops[i];\n                prevColor = prev.color;\n                curColor = cur.color;\n                opacities.push(cacheOpacityGradientFunction(\n                    pdf, prevColor.a, curColor.a\n                ));\n            }\n        }\n        offsets.pop();\n        return {\n            hasAlpha  : hasAlpha,\n            colors    : assemble(colors),\n            opacities : hasAlpha ? assemble(opacities) : null\n        };\n        function assemble(funcs) {\n            if (funcs.length == 1) {\n                return funcs[0];\n            }\n            return {\n                FunctionType: 3,\n                Functions: funcs,\n                Domain: [ 0, 1 ],\n                Bounds: offsets,\n                Encode: encode\n            };\n        }\n    }\n\n    function cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n        var shading, hash;\n        // if box is given then we have user-space coordinates, which\n        // means the gradient is designed for a certain position/size\n        // on page.  caching won't do any good.\n        if (!box) {\n            var a = [ isRadial ].concat(coords);\n            stops.forEach(function(x){\n                a.push(x.offset, x.color.r, x.color.g, x.color.b);\n            });\n            hash = makeHash(a);\n            shading = pdf.GRAD_COL[hash];\n        }\n        if (!shading) {\n            shading = new PDFDictionary({\n                Type: _(\"Shading\"),\n                ShadingType: isRadial ? 3 : 2,\n                ColorSpace: _(\"DeviceRGB\"),\n                Coords: coords,\n                Domain: [ 0, 1 ],\n                Function: funcs,\n                Extend: [ true, true ]\n            });\n            pdf.attach(shading);\n            shading._resourceName = \"S\" + (++RESOURCE_COUNTER);\n            if (hash) {\n                pdf.GRAD_COL[hash] = shading;\n            }\n        }\n        return shading;\n    }\n\n    function cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n        var opacity, hash;\n        // if box is given then we have user-space coordinates, which\n        // means the gradient is designed for a certain position/size\n        // on page.  caching won't do any good.\n        if (!box) {\n            var a = [ isRadial ].concat(coords);\n            stops.forEach(function(x){\n                a.push(x.offset, x.color.a);\n            });\n            hash = makeHash(a);\n            opacity = pdf.GRAD_OPC[hash];\n        }\n        if (!opacity) {\n            opacity = new PDFDictionary({\n                Type: _(\"ExtGState\"),\n                AIS: false,\n                CA: 1,\n                ca: 1,\n                SMask: {\n                    Type: _(\"Mask\"),\n                    S: _(\"Luminosity\"),\n                    G: pdf.attach(new PDFStream(\"/a0 gs /s0 sh\", {\n                        Type: _(\"XObject\"),\n                        Subtype: _(\"Form\"),\n                        FormType: 1,\n                        BBox: (box ? [\n                            box.left, box.top + box.height, box.left + box.width, box.top\n                        ] : [ 0, 1, 1, 0 ]),\n                        Group: {\n                            Type: _(\"Group\"),\n                            S: _(\"Transparency\"),\n                            CS: _(\"DeviceGray\"),\n                            I: true\n                        },\n                        Resources: {\n                            ExtGState: {\n                                a0: { CA: 1, ca: 1 }\n                            },\n                            Shading: {\n                                s0: {\n                                    ColorSpace: _(\"DeviceGray\"),\n                                    Coords: coords,\n                                    Domain: [ 0, 1 ],\n                                    ShadingType: isRadial ? 3 : 2,\n                                    Function: funcs,\n                                    Extend: [ true, true ]\n                                }\n                            }\n                        }\n                    }))\n                }\n            });\n            pdf.attach(opacity);\n            opacity._resourceName = \"O\" + (++RESOURCE_COUNTER);\n            if (hash) {\n                pdf.GRAD_OPC[hash] = opacity;\n            }\n        }\n        return opacity;\n    }\n\n    function cacheGradient(pdf, gradient, box) {\n        var isRadial = gradient.type == \"radial\";\n        var funcs = makeGradientFunctions(pdf, gradient.stops);\n        var coords = isRadial ? [\n            gradient.start.x , gradient.start.y , gradient.start.r,\n            gradient.end.x   , gradient.end.y   , gradient.end.r\n        ] : [\n            gradient.start.x , gradient.start.y,\n            gradient.end.x   , gradient.end.y\n        ];\n        var shading = cacheColorGradient(\n            pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box\n        );\n        var opacity = funcs.hasAlpha ? cacheOpacityGradient(\n            pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box\n        ) : null;\n        return {\n            hasAlpha: funcs.hasAlpha,\n            shading: shading,\n            opacity: opacity\n        };\n    }\n\n    /// page object\n\n    var PDFPage = defclass(function PDFPage(pdf, props){\n        this._pdf = pdf;\n        this._rcount = 0;\n        this._textMode = false;\n        this._fontResources = {};\n        this._gsResources = {};\n        this._xResources = {};\n        this._patResources = {};\n        this._shResources = {};\n        this._opacity = 1;\n        this._matrix = [ 1, 0, 0, 1, 0, 0 ];\n\n        this._font = null;\n        this._fontSize = null;\n\n        this._contextStack = [];\n\n        props = this.props = props || {};\n        props.Type = _(\"Page\");\n        props.ProcSet = [\n            _(\"PDF\"),\n            _(\"Text\"),\n            _(\"ImageB\"),\n            _(\"ImageC\"),\n            _(\"ImageI\")\n        ];\n        props.Resources = new PDFDictionary({\n            Font      : new PDFDictionary(this._fontResources),\n            ExtGState : new PDFDictionary(this._gsResources),\n            XObject   : new PDFDictionary(this._xResources),\n            Pattern   : new PDFDictionary(this._patResources),\n            Shading   : new PDFDictionary(this._shResources)\n        });\n    }, {\n        _out: function() {\n            this._content.data.apply(null, arguments);\n        },\n        transform: function(a, b, c, d, e, f) {\n            if (!isIdentityMatrix(arguments)) {\n                this._matrix = mmul(this._matrix, arguments);\n                this._out(a, \" \", b, \" \", c, \" \", d, \" \", e, \" \", f, \" cm\");\n                // XXX: debug\n                // this._out(\" % current matrix: \", this._matrix);\n                this._out(NL);\n            }\n        },\n        translate: function(dx, dy) {\n            this.transform(1, 0, 0, 1, dx, dy);\n        },\n        scale: function(sx, sy) {\n            this.transform(sx, 0, 0, sy, 0, 0);\n        },\n        rotate: function(angle) {\n            var cos = Math.cos(angle), sin = Math.sin(angle);\n            this.transform(cos, sin, -sin, cos, 0, 0);\n        },\n        beginText: function() {\n            this._textMode = true;\n            this._out(\"BT\", NL);\n        },\n        endText: function() {\n            this._textMode = false;\n            this._out(\"ET\", NL);\n        },\n        _requireTextMode: function() {\n            if (!this._textMode) {\n                throw new Error(\"Text mode required; call page.beginText() first\");\n            }\n        },\n        _requireFont: function() {\n            if (!this._font) {\n                throw new Error(\"No font selected; call page.setFont() first\");\n            }\n        },\n        setFont: function(font, size) {\n            this._requireTextMode();\n            if (font == null) {\n                font = this._font;\n            } else if (!(font instanceof PDFFont)) {\n                font = this._pdf.getFont(font);\n            }\n            if (size == null) {\n                size = this._fontSize;\n            }\n            this._fontResources[font._resourceName] = font;\n            this._font = font;\n            this._fontSize = size;\n            this._out(font._resourceName, \" \", size, \" Tf\", NL);\n        },\n        setTextLeading: function(size) {\n            this._requireTextMode();\n            this._out(size, \" TL\", NL);\n        },\n        setTextRenderingMode: function(mode) {\n            this._requireTextMode();\n            this._out(mode, \" Tr\", NL);\n        },\n        showText: function(text) {\n            this._requireFont();\n            this._out(this._font.encodeText(text), \" Tj\", NL);\n        },\n        showTextNL: function(text) {\n            this._requireFont();\n            this._out(this._font.encodeText(text), \" '\", NL);\n        },\n        setStrokeColor: function(r, g, b) {\n            this._out(r, \" \", g, \" \", b, \" RG\", NL);\n        },\n        setOpacity: function(opacity) {\n            this.setFillOpacity(opacity);\n            this.setStrokeOpacity(opacity);\n            this._opacity *= opacity;\n        },\n        setStrokeOpacity: function(opacity) {\n            if (opacity < 1) {\n                var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n                this._gsResources[gs._resourceName] = gs;\n                this._out(gs._resourceName, \" gs\", NL);\n            }\n        },\n        setFillColor: function(r, g, b) {\n            this._out(r, \" \", g, \" \", b, \" rg\", NL);\n        },\n        setFillOpacity: function(opacity) {\n            if (opacity < 1) {\n                var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n                this._gsResources[gs._resourceName] = gs;\n                this._out(gs._resourceName, \" gs\", NL);\n            }\n        },\n        gradient: function(gradient, box) {\n            this.save();\n            this.rect(box.left, box.top, box.width, box.height);\n            this.clip();\n            if (!gradient.userSpace) {\n                this.transform(box.width, 0, 0, box.height, box.left, box.top);\n            }\n            var g = cacheGradient(this._pdf, gradient, box);\n            var sname = g.shading._resourceName, oname;\n            this._shResources[sname] = g.shading;\n            if (g.hasAlpha) {\n                oname = g.opacity._resourceName;\n                this._gsResources[oname] = g.opacity;\n                this._out(\"/\" + oname + \" gs \");\n            }\n            this._out(\"/\" + sname + \" sh\", NL);\n            this.restore();\n        },\n        setDashPattern: function(dashArray, dashPhase) {\n            this._out(dashArray, \" \", dashPhase, \" d\", NL);\n        },\n        setLineWidth: function(width) {\n            this._out(width, \" w\", NL);\n        },\n        setLineCap: function(lineCap) {\n            this._out(lineCap, \" J\", NL);\n        },\n        setLineJoin: function(lineJoin) {\n            this._out(lineJoin, \" j\", NL);\n        },\n        setMitterLimit: function(mitterLimit) {\n            this._out(mitterLimit, \" M\", NL);\n        },\n        save: function() {\n            this._contextStack.push(this._context());\n            this._out(\"q\", NL);\n        },\n        restore: function() {\n            this._out(\"Q\", NL);\n            this._context(this._contextStack.pop());\n        },\n\n        // paths\n        moveTo: function(x, y) {\n            this._out(x, \" \", y, \" m\", NL);\n        },\n        lineTo: function(x, y) {\n            this._out(x, \" \", y, \" l\", NL);\n        },\n        bezier: function(x1, y1, x2, y2, x3, y3) {\n            this._out(x1, \" \", y1, \" \", x2, \" \", y2, \" \", x3, \" \", y3, \" c\", NL);\n        },\n        bezier1: function(x1, y1, x3, y3) {\n            this._out(x1, \" \", y1, \" \", x3, \" \", y3, \" y\", NL);\n        },\n        bezier2: function(x2, y2, x3, y3) {\n            this._out(x2, \" \", y2, \" \", x3, \" \", y3, \" v\", NL);\n        },\n        close: function() {\n            this._out(\"h\", NL);\n        },\n        rect: function(x, y, w, h) {\n            this._out(x, \" \", y, \" \", w, \" \", h, \" re\", NL);\n        },\n        ellipse: function(x, y, rx, ry) {\n            function _X(v) { return x + v; }\n            function _Y(v) { return y + v; }\n\n            // how to get to the \"magic number\" is explained here:\n            // http://www.whizkidtech.redprince.net/bezier/circle/kappa/\n            var k = 0.5522847498307936;\n\n            this.moveTo(_X(0), _Y(ry));\n            this.bezier(\n                _X(rx * k) , _Y(ry),\n                _X(rx)     , _Y(ry * k),\n                _X(rx)     , _Y(0)\n            );\n            this.bezier(\n                _X(rx)     , _Y(-ry * k),\n                _X(rx * k) , _Y(-ry),\n                _X(0)      , _Y(-ry)\n            );\n            this.bezier(\n                _X(-rx * k) , _Y(-ry),\n                _X(-rx)     , _Y(-ry * k),\n                _X(-rx)     , _Y(0)\n            );\n            this.bezier(\n                _X(-rx)     , _Y(ry * k),\n                _X(-rx * k) , _Y(ry),\n                _X(0)       , _Y(ry)\n            );\n        },\n        circle: function(x, y, r) {\n            this.ellipse(x, y, r, r);\n        },\n        stroke: function() {\n            this._out(\"S\", NL);\n        },\n        nop: function() {\n            this._out(\"n\", NL);\n        },\n        clip: function() {\n            this._out(\"W n\", NL);\n        },\n        clipStroke: function() {\n            this._out(\"W S\", NL);\n        },\n        closeStroke: function() {\n            this._out(\"s\", NL);\n        },\n        fill: function() {\n            this._out(\"f\", NL);\n        },\n        fillStroke: function() {\n            this._out(\"B\", NL);\n        },\n        drawImage: function(url) {\n            var img = this._pdf.getImage(url);\n            if (img) { // the result can be null for a cross-domain image\n                this._xResources[img._resourceName] = img;\n                this._out(img._resourceName, \" Do\", NL);\n            }\n        },\n        comment: function(txt) {\n            var self = this;\n            txt.split(/\\r?\\n/g).forEach(function(line){\n                self._out(\"% \", line, NL);\n            });\n        },\n\n        // internal\n        _context: function(val) {\n            if (val != null) {\n                this._opacity = val.opacity;\n                this._matrix = val.matrix;\n            } else {\n                return {\n                    opacity: this._opacity,\n                    matrix: this._matrix\n                };\n            }\n        }\n    }, PDFDictionary);\n\n    function BinaryStream(data) {\n        var offset = 0, length = 0;\n        if (data == null) {\n            data = HAS_TYPED_ARRAYS ? new Uint8Array(256) : [];\n        } else {\n            length = data.length;\n        }\n\n        var ensure = HAS_TYPED_ARRAYS ? function(len) {\n            if (len >= data.length) {\n                var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n                tmp.set(data, 0);\n                data = tmp;\n            }\n        } : function() {};\n\n        var get = HAS_TYPED_ARRAYS ? function() {\n            return new Uint8Array(data.buffer, 0, length);\n        } : function() {\n            return data;\n        };\n\n        var write = HAS_TYPED_ARRAYS ? function(bytes) {\n            if (typeof bytes == \"string\") {\n                return writeString(bytes);\n            }\n            var len = bytes.length;\n            ensure(offset + len);\n            data.set(bytes, offset);\n            offset += len;\n            if (offset > length) {\n                length = offset;\n            }\n        } : function(bytes) {\n            if (typeof bytes == \"string\") {\n                return writeString(bytes);\n            }\n            for (var i = 0; i < bytes.length; ++i) {\n                writeByte(bytes[i]);\n            }\n        };\n\n        var slice = HAS_TYPED_ARRAYS ? function(start, length) {\n            if (data.buffer.slice) {\n                return new Uint8Array(data.buffer.slice(start, start + length));\n            } else {\n                // IE10\n                var x = new Uint8Array(length);\n                x.set(new Uint8Array(data.buffer, start, length));\n                return x;\n            }\n        } : function(start, length) {\n            return data.slice(start, start + length);\n        };\n\n        function eof() {\n            return offset >= length;\n        }\n        function readByte() {\n            return offset < length ? data[offset++] : 0;\n        }\n        function writeByte(b) {\n            ensure(offset);\n            data[offset++] = b & 0xFF;\n            if (offset > length) {\n                length = offset;\n            }\n        }\n        function readShort() {\n            return (readByte() << 8) | readByte();\n        }\n        function writeShort(w) {\n            writeByte(w >> 8);\n            writeByte(w);\n        }\n        function readShort_() {\n            var w = readShort();\n            return w >= 0x8000 ? w - 0x10000 : w;\n        }\n        function writeShort_(w) {\n            writeShort(w < 0 ? w + 0x10000 : w);\n        }\n        function readLong() {\n            return (readShort() * 0x10000) + readShort();\n        }\n        function writeLong(w) {\n            writeShort((w >>> 16) & 0xFFFF);\n            writeShort(w & 0xFFFF);\n        }\n        function readLong_() {\n            var w = readLong();\n            return w >= 0x80000000 ? w - 0x100000000 : w;\n        }\n        function writeLong_(w) {\n            writeLong(w < 0 ? w + 0x100000000 : w);\n        }\n        function readFixed() {\n            return readLong() / 0x10000;\n        }\n        function writeFixed(f) {\n            writeLong(Math.round(f * 0x10000));\n        }\n        function readFixed_() {\n            return readLong_() / 0x10000;\n        }\n        function writeFixed_(f) {\n            writeLong_(Math.round(f * 0x10000));\n        }\n        function read(len) {\n            return times(len, readByte);\n        }\n        function readString(len) {\n            return String.fromCharCode.apply(String, read(len));\n        }\n        function writeString(str) {\n            for (var i = 0; i < str.length; ++i) {\n                writeByte(str.charCodeAt(i));\n            }\n        }\n        function times(n, reader) {\n            for (var ret = new Array(n), i = 0; i < n; ++i) {\n                ret[i] = reader();\n            }\n            return ret;\n        }\n\n        var stream = {\n            eof         : eof,\n            readByte    : readByte,\n            writeByte   : writeByte,\n            readShort   : readShort,\n            writeShort  : writeShort,\n            readLong    : readLong,\n            writeLong   : writeLong,\n            readFixed   : readFixed,\n            writeFixed  : writeFixed,\n\n            // signed numbers.\n            readShort_  : readShort_,\n            writeShort_ : writeShort_,\n            readLong_   : readLong_,\n            writeLong_  : writeLong_,\n            readFixed_  : readFixed_,\n            writeFixed_ : writeFixed_,\n\n            read        : read,\n            write       : write,\n            readString  : readString,\n            writeString : writeString,\n\n            times       : times,\n            get         : get,\n            slice       : slice,\n\n            offset: function(pos) {\n                if (pos != null) {\n                    offset = pos;\n                    return stream;\n                }\n                return offset;\n            },\n\n            skip: function(nbytes) {\n                offset += nbytes;\n            },\n\n            toString: function() {\n                throw new Error(\"FIX CALLER.  BinaryStream is no longer convertible to string!\");\n            },\n\n            length: function() { return length; },\n\n            saveExcursion: function(f) {\n                var pos = offset;\n                try {\n                    return f();\n                } finally {\n                    offset = pos;\n                }\n            },\n\n            writeBase64: function(base64) {\n                if (window.atob) {\n                    writeString(window.atob(base64));\n                } else {\n                    write(BASE64.decode(base64));\n                }\n            },\n            base64: function() {\n                return BASE64.encode(get());\n            }\n        };\n\n        return stream;\n    }\n\n    function unquote(str) {\n        return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, \"$2\");\n    }\n\n    function parseFontDef(fontdef) {\n        // XXX: this is very crude for now and buggy.  Proper parsing is quite involved.\n        var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n        var m = rx.exec(fontdef);\n        if (!m) {\n            return { fontSize: 12, fontFamily: \"sans-serif\" };\n        }\n        var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n        return {\n            italic     : m[2] && m[2].toLowerCase() == \"italic\",\n            variant    : m[4],\n            bold       : m[6] && /bold|700/i.test(m[6]),\n            fontSize   : fontSize,\n            lineHeight : m[12] ? m[12] == \"normal\" ? fontSize : parseInt(m[12], 10) : null,\n            fontFamily : m[14].split(/\\s*,\\s*/g).map(unquote)\n        };\n    }\n\n    function getFontURL(style) {\n        function mkFamily(name) {\n            if (style.bold) {\n                name += \"|bold\";\n            }\n            if (style.italic) {\n                name += \"|italic\";\n            }\n            return name.toLowerCase();\n        }\n        var fontFamily = style.fontFamily;\n        var name, url;\n        if (fontFamily instanceof Array) {\n            for (var i = 0; i < fontFamily.length; ++i) {\n                name = mkFamily(fontFamily[i]);\n                url = FONT_MAPPINGS[name];\n                if (url) {\n                    break;\n                }\n            }\n        } else {\n            url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n        }\n        while (typeof url == \"function\") {\n            url = url();\n        }\n        if (!url) {\n            url = \"Times-Roman\";\n        }\n        return url;\n    }\n\n    var FONT_MAPPINGS = {\n        \"serif\"                    : \"Times-Roman\",\n        \"serif|bold\"               : \"Times-Bold\",\n        \"serif|italic\"             : \"Times-Italic\",\n        \"serif|bold|italic\"        : \"Times-BoldItalic\",\n        \"sans-serif\"               : \"Helvetica\",\n        \"sans-serif|bold\"          : \"Helvetica-Bold\",\n        \"sans-serif|italic\"        : \"Helvetica-Oblique\",\n        \"sans-serif|bold|italic\"   : \"Helvetica-BoldOblique\",\n        \"monospace\"                : \"Courier\",\n        \"monospace|bold\"           : \"Courier-Bold\",\n        \"monospace|italic\"         : \"Courier-Oblique\",\n        \"monospace|bold|italic\"    : \"Courier-BoldOblique\",\n        \"zapfdingbats\"             : \"ZapfDingbats\",\n        \"zapfdingbats|bold\"        : \"ZapfDingbats\",\n        \"zapfdingbats|italic\"      : \"ZapfDingbats\",\n        \"zapfdingbats|bold|italic\" : \"ZapfDingbats\"\n    };\n\n    function fontAlias(alias, name) {\n        alias = alias.toLowerCase();\n        FONT_MAPPINGS[alias] = function() {\n            return FONT_MAPPINGS[name];\n        };\n        FONT_MAPPINGS[alias + \"|bold\"] = function() {\n            return FONT_MAPPINGS[name + \"|bold\"];\n        };\n        FONT_MAPPINGS[alias + \"|italic\"] = function() {\n            return FONT_MAPPINGS[name + \"|italic\"];\n        };\n        FONT_MAPPINGS[alias + \"|bold|italic\"] = function() {\n            return FONT_MAPPINGS[name + \"|bold|italic\"];\n        };\n    }\n\n    // Let's define some common names to an appropriate replacement.\n    // These are overridable via kendo.pdf.defineFont, should the user\n    // want to include the proper versions.\n\n    fontAlias(\"Times New Roman\" , \"serif\");\n    fontAlias(\"Courier New\"     , \"monospace\");\n    fontAlias(\"Arial\"           , \"sans-serif\");\n    fontAlias(\"Helvetica\"       , \"sans-serif\");\n    fontAlias(\"Verdana\"         , \"sans-serif\");\n    fontAlias(\"Tahoma\"          , \"sans-serif\");\n    fontAlias(\"Georgia\"         , \"sans-serif\");\n    fontAlias(\"Monaco\"          , \"monospace\");\n    fontAlias(\"Andale Mono\"     , \"monospace\");\n\n    function defineFont(name, url) {\n        if (arguments.length == 1) {\n            for (var i in name) {\n                if (hasOwnProperty(name, i)) {\n                    defineFont(i, name[i]);\n                }\n            }\n        } else {\n            name = name.toLowerCase();\n            FONT_MAPPINGS[name] = url;\n\n            // special handling for DejaVu fonts: if they get defined,\n            // let them also replace the default families, for good\n            // Unicode support out of the box.\n            switch (name) {\n              case \"dejavu sans\"               : FONT_MAPPINGS[\"sans-serif\"]              = url; break;\n              case \"dejavu sans|bold\"          : FONT_MAPPINGS[\"sans-serif|bold\"]         = url; break;\n              case \"dejavu sans|italic\"        : FONT_MAPPINGS[\"sans-serif|italic\"]       = url; break;\n              case \"dejavu sans|bold|italic\"   : FONT_MAPPINGS[\"sans-serif|bold|italic\"]  = url; break;\n              case \"dejavu serif\"              : FONT_MAPPINGS[\"serif\"]                   = url; break;\n              case \"dejavu serif|bold\"         : FONT_MAPPINGS[\"serif|bold\"]              = url; break;\n              case \"dejavu serif|italic\"       : FONT_MAPPINGS[\"serif|italic\"]            = url; break;\n              case \"dejavu serif|bold|italic\"  : FONT_MAPPINGS[\"serif|bold|italic\"]       = url; break;\n              case \"dejavu mono\"               : FONT_MAPPINGS[\"monospace\"]               = url; break;\n              case \"dejavu mono|bold\"          : FONT_MAPPINGS[\"monospace|bold\"]          = url; break;\n              case \"dejavu mono|italic\"        : FONT_MAPPINGS[\"monospace|italic\"]        = url; break;\n              case \"dejavu mono|bold|italic\"   : FONT_MAPPINGS[\"monospace|bold|italic\"]   = url; break;\n            }\n        }\n    }\n\n    /// exports.\n\n    kendo.pdf = {\n        Document      : PDFDocument,\n        BinaryStream  : BinaryStream,\n        defineFont    : defineFont,\n        parseFontDef  : parseFontDef,\n        getFontURL    : getFontURL,\n        loadFonts     : loadFonts,\n        loadImages    : loadImages,\n\n        TEXT_RENDERING_MODE : {\n            fill           : 0,\n            stroke         : 1,\n            fillAndStroke  : 2,\n            invisible      : 3,\n            fillAndClip    : 4,\n            strokeAndClip  : 5,\n            fillStrokeClip : 6,\n            clip           : 7\n        }\n    };\n\n    function mmul(a, b) {\n        var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n        var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n        return [\n            a1*a2 + b1*c2,          a1*b2 + b1*d2,\n            c1*a2 + d1*c2,          c1*b2 + d1*d2,\n            e1*a2 + f1*c2 + e2,     e1*b2 + f1*d2 + f2\n        ];\n    }\n\n    function isIdentityMatrix(m) {\n        return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n    }\n\n})(this, parseFloat);\n\n(function(global){\n\n/*****************************************************************************\\\n *\n * The code in this file, although written from scratch, is influenced by the\n * TrueType parser/encoder in PDFKit -- http://pdfkit.org/ (a CoffeeScript\n * library for producing PDF files).\n *\n * PDFKit is (c) Devon Govett 2014 and released under the MIT License.\n *\n\\*****************************************************************************/\n\n\"use strict\";\n\n// WARNING: removing the following jshint declaration and turning\n// == into === to make JSHint happy will break functionality.\n/* jshint eqnull:true */\n/* jshint loopfunc:true */\n/* jshint newcap:false */\n\nfunction hasOwnProperty(obj, key) {\n    return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction sortedKeys(obj) {\n    return Object.keys(obj).sort(function(a, b){ return a - b; }).map(parseFloat);\n}\n\nvar PDF = global.kendo.pdf;\nvar BinaryStream = PDF.BinaryStream;\n\n///\n\nfunction Directory(data) {\n    this.raw = data;\n    this.scalerType = data.readLong();\n    this.tableCount = data.readShort();\n    this.searchRange = data.readShort();\n    this.entrySelector = data.readShort();\n    this.rangeShift = data.readShort();\n\n    var tables = this.tables = {};\n    for (var i = 0; i < this.tableCount; ++i) {\n        var entry = {\n            tag      : data.readString(4),\n            checksum : data.readLong(),\n            offset   : data.readLong(),\n            length   : data.readLong()\n        };\n        tables[entry.tag] = entry;\n    }\n}\n\nDirectory.prototype = {\n\n    readTable: function(name, Ctor) {\n        var def = this.tables[name];\n        if (!def) {\n            throw new Error(\"Table \" + name + \" not found in directory\");\n        }\n        return (this[name] = def.table = new Ctor(this, def));\n    },\n\n    render: function(tables) {\n        var tableCount = Object.keys(tables).length;\n\n        var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n        var searchRange = maxpow2 * 16;\n        var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n        var rangeShift = tableCount * 16 - searchRange;\n\n        var out = BinaryStream();\n        out.writeLong(this.scalerType);\n        out.writeShort(tableCount);\n        out.writeShort(searchRange);\n        out.writeShort(entrySelector);\n        out.writeShort(rangeShift);\n\n        var directoryLength = tableCount * 16;\n        var offset = out.offset() + directoryLength;\n        var headOffset = null;\n        var tableData = BinaryStream();\n\n        for (var tag in tables) {\n            if (hasOwnProperty(tables, tag)) {\n                var table = tables[tag];\n\n                out.writeString(tag);\n                out.writeLong(this.checksum(table));\n                out.writeLong(offset);\n                out.writeLong(table.length);\n\n                tableData.write(table);\n                if (tag == \"head\") {\n                    headOffset = offset;\n                }\n                offset += table.length;\n\n                while (offset % 4) {\n                    tableData.writeByte(0);\n                    offset++;\n                }\n            }\n        }\n\n        out.write(tableData.get());\n        var sum = this.checksum(out.get());\n        var adjustment = 0xB1B0AFBA - sum;\n\n        out.offset(headOffset + 8);\n        out.writeLong(adjustment);\n        return out.get();\n    },\n\n    checksum: function(data) {\n        data = BinaryStream(data);\n        var sum = 0;\n        while (!data.eof()) {\n            sum += data.readLong();\n        }\n        return sum & 0xFFFFFFFF;\n    }\n};\n\nfunction deftable(methods) {\n    function Ctor(file, def) {\n        this.definition = def;\n        this.length = def.length;\n        this.offset = def.offset;\n        this.file = file;\n        this.rawData = file.raw;\n        this.parse(file.raw);\n    }\n    Ctor.prototype.raw = function() {\n        return this.rawData.slice(this.offset, this.length);\n    };\n    for (var i in methods) {\n        if (hasOwnProperty(methods, i)) {\n            Ctor[i] = Ctor.prototype[i] = methods[i];\n        }\n    }\n    return Ctor;\n}\n\nvar HeadTable = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n        this.version             = data.readLong();\n        this.revision            = data.readLong();\n        this.checkSumAdjustment  = data.readLong();\n        this.magicNumber         = data.readLong();\n        this.flags               = data.readShort();\n        this.unitsPerEm          = data.readShort();\n        this.created             = data.read(8);\n        this.modified            = data.read(8);\n\n        this.xMin = data.readShort_();\n        this.yMin = data.readShort_();\n        this.xMax = data.readShort_();\n        this.yMax = data.readShort_();\n\n        this.macStyle           = data.readShort();\n        this.lowestRecPPEM      = data.readShort();\n        this.fontDirectionHint  = data.readShort_();\n        this.indexToLocFormat   = data.readShort_();\n        this.glyphDataFormat    = data.readShort_();\n    },\n    render: function(indexToLocFormat) {\n        var out = BinaryStream();\n        out.writeLong(this.version);\n        out.writeLong(this.revision);\n        out.writeLong(0);       // checksum adjustment; shall be computed later\n        out.writeLong(this.magicNumber);\n        out.writeShort(this.flags);\n        out.writeShort(this.unitsPerEm);\n        out.write(this.created);\n        out.write(this.modified);\n        out.writeShort_(this.xMin);\n        out.writeShort_(this.yMin);\n        out.writeShort_(this.xMax);\n        out.writeShort_(this.yMax);\n        out.writeShort(this.macStyle);\n        out.writeShort(this.lowestRecPPEM);\n        out.writeShort_(this.fontDirectionHint);\n        out.writeShort_(indexToLocFormat); // this will depend on the `loca` table\n        out.writeShort_(this.glyphDataFormat);\n        return out.get();\n    }\n});\n\nvar LocaTable = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n        var format = this.file.head.indexToLocFormat;\n        if (format === 0) {\n            this.offsets = data.times(this.length / 2, function(){\n                return 2 * data.readShort();\n            });\n        } else {\n            this.offsets = data.times(this.length / 4, data.readLong);\n        }\n    },\n    offsetOf: function(id) {\n        return this.offsets[id];\n    },\n    lengthOf: function(id) {\n        return this.offsets[id + 1] - this.offsets[id];\n    },\n    render: function(offsets) {\n        var out = BinaryStream();\n        var needsLongFormat = offsets[offsets.length - 1] > 0xFFFF;\n        for (var i = 0; i < offsets.length; ++i) {\n            if (needsLongFormat) {\n                out.writeLong(offsets[i]);\n            } else {\n                out.writeShort(offsets[i] / 2);\n            }\n        }\n        return {\n            format: needsLongFormat ? 1 : 0,\n            table: out.get()\n        };\n    }\n});\n\nvar HheaTable = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n\n        this.version              = data.readLong();\n        this.ascent               = data.readShort_();\n        this.descent              = data.readShort_();\n        this.lineGap              = data.readShort_();\n        this.advanceWidthMax      = data.readShort();\n        this.minLeftSideBearing   = data.readShort_();\n        this.minRightSideBearing  = data.readShort_();\n        this.xMaxExtent           = data.readShort_();\n        this.caretSlopeRise       = data.readShort_();\n        this.caretSlopeRun        = data.readShort_();\n        this.caretOffset          = data.readShort_();\n\n        data.skip(4 * 2);       // reserved\n\n        this.metricDataFormat     = data.readShort_();\n        this.numOfLongHorMetrics  = data.readShort();\n    },\n    render: function(ids) {\n        var out = BinaryStream();\n        out.writeLong(this.version);\n        out.writeShort_(this.ascent);\n        out.writeShort_(this.descent);\n        out.writeShort_(this.lineGap);\n        out.writeShort(this.advanceWidthMax);\n        out.writeShort_(this.minLeftSideBearing);\n        out.writeShort_(this.minRightSideBearing);\n        out.writeShort_(this.xMaxExtent);\n        out.writeShort_(this.caretSlopeRise);\n        out.writeShort_(this.caretSlopeRun);\n        out.writeShort_(this.caretOffset);\n\n        out.write([ 0, 0, 0, 0, 0, 0, 0, 0 ]); // reserved bytes\n\n        out.writeShort_(this.metricDataFormat);\n        out.writeShort(ids.length);\n        return out.get();\n    }\n});\n\nvar MaxpTable = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n        this.version = data.readLong();\n        this.numGlyphs = data.readShort();\n        this.maxPoints = data.readShort();\n        this.maxContours = data.readShort();\n        this.maxComponentPoints = data.readShort();\n        this.maxComponentContours = data.readShort();\n        this.maxZones = data.readShort();\n        this.maxTwilightPoints = data.readShort();\n        this.maxStorage = data.readShort();\n        this.maxFunctionDefs = data.readShort();\n        this.maxInstructionDefs = data.readShort();\n        this.maxStackElements = data.readShort();\n        this.maxSizeOfInstructions = data.readShort();\n        this.maxComponentElements = data.readShort();\n        this.maxComponentDepth = data.readShort();\n    },\n    render: function(glyphIds) {\n        var out = BinaryStream();\n        out.writeLong(this.version);\n        out.writeShort(glyphIds.length);\n        out.writeShort(this.maxPoints);\n        out.writeShort(this.maxContours);\n        out.writeShort(this.maxComponentPoints);\n        out.writeShort(this.maxComponentContours);\n        out.writeShort(this.maxZones);\n        out.writeShort(this.maxTwilightPoints);\n        out.writeShort(this.maxStorage);\n        out.writeShort(this.maxFunctionDefs);\n        out.writeShort(this.maxInstructionDefs);\n        out.writeShort(this.maxStackElements);\n        out.writeShort(this.maxSizeOfInstructions);\n        out.writeShort(this.maxComponentElements);\n        out.writeShort(this.maxComponentDepth);\n        return out.get();\n    }\n});\n\nvar HmtxTable = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n        var dir = this.file, hhea = dir.hhea;\n        this.metrics = data.times(hhea.numOfLongHorMetrics, function(){\n            return {\n                advance: data.readShort(),\n                lsb: data.readShort_()\n            };\n        });\n        var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n        this.leftSideBearings = data.times(lsbCount, data.readShort_);\n    },\n    forGlyph: function(id) {\n        var metrics = this.metrics;\n        var n = metrics.length;\n        if (id < n) {\n            return metrics[id];\n        }\n        return {\n            advance: metrics[n - 1].advance,\n            lsb: this.leftSideBearings[id - n]\n        };\n    },\n    render: function(glyphIds) {\n        var out = BinaryStream();\n        for (var i = 0; i < glyphIds.length; ++i) {\n            var m = this.forGlyph(glyphIds[i]);\n            out.writeShort(m.advance);\n            out.writeShort_(m.lsb);\n        }\n        return out.get();\n    }\n});\n\nvar GlyfTable = (function(){\n\n    function SimpleGlyph(raw) {\n        this.raw = raw;\n    }\n    SimpleGlyph.prototype = {\n        compound: false,\n        render: function() {\n            return this.raw.get();\n        }\n    };\n\n    var ARG_1_AND_2_ARE_WORDS     = 0x0001;\n    var WE_HAVE_A_SCALE           = 0x0008;\n    var MORE_COMPONENTS           = 0x0020;\n    var WE_HAVE_AN_X_AND_Y_SCALE  = 0x0040;\n    var WE_HAVE_A_TWO_BY_TWO      = 0x0080;\n    var WE_HAVE_INSTRUCTIONS      = 0x0100;\n\n    function CompoundGlyph(data) {\n        this.raw = data;\n        var ids = this.glyphIds = [];\n        var offsets = this.idOffsets = [];\n        while (true) {\n            var flags = data.readShort();\n            offsets.push(data.offset());\n            ids.push(data.readShort());\n\n            if (!(flags & MORE_COMPONENTS)) {\n                break;\n            }\n\n            data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n\n            if (flags & WE_HAVE_A_TWO_BY_TWO) {\n                data.skip(8);\n            } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n                data.skip(4);\n            } else if (flags & WE_HAVE_A_SCALE) {\n                data.skip(2);\n            }\n        }\n    }\n\n    CompoundGlyph.prototype = {\n        compound: true,\n        render: function(old2new) {\n            var out = BinaryStream(this.raw.get());\n            for (var i = 0; i < this.glyphIds.length; ++i) {\n                var id = this.glyphIds[i];\n                out.offset(this.idOffsets[i]);\n                out.writeShort(old2new[id]);\n            }\n            return out.get();\n        }\n    };\n\n    return deftable({\n        parse: function(data) {\n            this.cache = {};\n        },\n        glyphFor: function(id) {\n            var cache = this.cache;\n            if (hasOwnProperty(cache, id)) {\n                return cache[id];\n            }\n\n            var loca = this.file.loca;\n            var length = loca.lengthOf(id);\n\n            if (length === 0) {\n                return (cache[id] = null);\n            }\n\n            var data = this.rawData;\n            var offset = this.offset + loca.offsetOf(id);\n            var raw = BinaryStream(data.slice(offset, length));\n\n            var numberOfContours = raw.readShort_();\n            var xMin = raw.readShort_();\n            var yMin = raw.readShort_();\n            var xMax = raw.readShort_();\n            var yMax = raw.readShort_();\n\n            var glyph = cache[id] = numberOfContours == -1 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n\n            glyph.numberOfContours = numberOfContours;\n            glyph.xMin = xMin;\n            glyph.yMin = yMin;\n            glyph.xMax = xMax;\n            glyph.yMax = yMax;\n\n            return glyph;\n        },\n        render: function(glyphs, oldIds, old2new) {\n            var out = BinaryStream(), offsets = [];\n            for (var i = 0; i < oldIds.length; ++i) {\n                var id = oldIds[i];\n                var glyph = glyphs[id];\n                offsets.push(out.offset());\n                if (glyph) {\n                    out.write(glyph.render(old2new));\n                }\n            }\n            offsets.push(out.offset());\n            return {\n                table: out.get(),\n                offsets: offsets\n            };\n        }\n    });\n\n}());\n\nvar NameTable = (function(){\n\n    function NameEntry(text, entry) {\n        this.text = text;\n        this.length = text.length;\n        this.platformID = entry.platformID;\n        this.platformSpecificID = entry.platformSpecificID;\n        this.languageID = entry.languageID;\n        this.nameID = entry.nameID;\n    }\n\n    return deftable({\n        parse: function(data) {\n            data.offset(this.offset);\n            var format = data.readShort();\n            var count = data.readShort();\n            var stringOffset = this.offset + data.readShort();\n            var nameRecords = data.times(count, function(){\n                return {\n                    platformID         : data.readShort(),\n                    platformSpecificID : data.readShort(),\n                    languageID         : data.readShort(),\n                    nameID             : data.readShort(),\n                    length             : data.readShort(),\n                    offset             : data.readShort() + stringOffset\n                };\n            });\n            var strings = this.strings = {};\n            for (var i = 0; i < nameRecords.length; ++i) {\n                var rec = nameRecords[i];\n                data.offset(rec.offset);\n                var text = data.readString(rec.length);\n                if (!strings[rec.nameID]) {\n                    strings[rec.nameID] = [];\n                }\n                strings[rec.nameID].push(new NameEntry(text, rec));\n            }\n            this.postscriptEntry = strings[6][0];\n            this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, \"\");\n        },\n\n        render: function(psName) {\n            var strings = this.strings;\n            var strCount = 0;\n            for (var i in strings) {\n                if (hasOwnProperty(strings, i)) {\n                    strCount += strings[i].length;\n                }\n            }\n            var out = BinaryStream();\n            var strTable = BinaryStream();\n\n            out.writeShort(0);  // format\n            out.writeShort(strCount);\n            out.writeShort(6 + 12 * strCount); // stringOffset\n\n            for (i in strings) {\n                if (hasOwnProperty(strings, i)) {\n                    var list = i == 6 ? [\n                        new NameEntry(psName, this.postscriptEntry)\n                    ] : strings[i];\n                    for (var j = 0; j < list.length; ++j) {\n                        var str = list[j];\n                        out.writeShort(str.platformID);\n                        out.writeShort(str.platformSpecificID);\n                        out.writeShort(str.languageID);\n                        out.writeShort(str.nameID);\n                        out.writeShort(str.length);\n                        out.writeShort(strTable.offset());\n\n                        strTable.writeString(str.text);\n                    }\n                }\n            }\n\n            out.write(strTable.get());\n\n            return out.get();\n        }\n    });\n\n})();\n\nvar PostTable = (function(){\n\n    var POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat\".split(/\\s+/g);\n\n    return deftable({\n        parse: function(data) {\n            data.offset(this.offset);\n\n            this.format = data.readLong();\n            this.italicAngle = data.readFixed_();\n            this.underlinePosition = data.readShort_();\n            this.underlineThickness = data.readShort_();\n            this.isFixedPitch = data.readLong();\n            this.minMemType42 = data.readLong();\n            this.maxMemType42 = data.readLong();\n            this.minMemType1 = data.readLong();\n            this.maxMemType1 = data.readLong();\n\n            var numberOfGlyphs;\n\n            switch (this.format) {\n              case 0x00010000:\n              case 0x00030000:\n                break;\n\n              case 0x00020000:\n                numberOfGlyphs = data.readShort();\n                this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n                this.names = [];\n                var limit = this.offset + this.length;\n                while (data.offset() < limit) {\n                    this.names.push(data.readString(data.readByte()));\n                }\n                break;\n\n              case 0x00025000:\n                numberOfGlyphs = data.readShort();\n                this.offsets = data.read(numberOfGlyphs);\n                break;\n\n              case 0x00040000:\n                this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n                break;\n            }\n        },\n        glyphFor: function(code) {\n            switch (this.format) {\n              case 0x00010000:\n                return POSTSCRIPT_GLYPHS[code] || \".notdef\";\n\n              case 0x00020000:\n                var index = this.glyphNameIndex[code];\n                if (index < POSTSCRIPT_GLYPHS.length) {\n                    return POSTSCRIPT_GLYPHS[index];\n                }\n                return this.names[index - POSTSCRIPT_GLYPHS.length] || \".notdef\";\n\n              case 0x00025000:\n\n              case 0x00030000:\n                return \".notdef\";\n\n              case 0x00040000:\n                return this.map[code] || 0xFFFF;\n            }\n        },\n        render: function(mapping) {\n            if (this.format == 0x00030000) {\n                return this.raw();\n            }\n\n            // keep original header, but set format to 2.0\n            var out = BinaryStream(this.rawData.slice(this.offset, 32));\n            out.writeLong(0x00020000);\n            out.offset(32);\n\n            var indexes = [];\n            var strings = [];\n\n            for (var i = 0; i < mapping.length; ++i) {\n                var id = mapping[i];\n                var post = this.glyphFor(id);\n                var index = POSTSCRIPT_GLYPHS.indexOf(post);\n                if (index >= 0) {\n                    indexes.push(index);\n                } else {\n                    indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n                    strings.push(post);\n                }\n            }\n\n            out.writeShort(mapping.length);\n\n            for (i = 0; i < indexes.length; ++i) {\n                out.writeShort(indexes[i]);\n            }\n\n            for (i = 0; i < strings.length; ++i) {\n                out.writeByte(strings[i].length);\n                out.writeString(strings[i]);\n            }\n\n            return out.get();\n        }\n    });\n})();\n\nvar CmapTable = (function(){\n\n    function CmapEntry(data, offset) {\n        var self = this;\n        self.platformID = data.readShort();\n        self.platformSpecificID = data.readShort();\n        self.offset = offset + data.readLong();\n\n        data.saveExcursion(function(){\n            data.offset(self.offset);\n            self.format = data.readShort();\n            self.length = data.readShort();\n            self.language = data.readShort();\n\n            self.isUnicode = (\n                self.platformID == 3 && self.platformSpecificID == 1 && self.format == 4\n            ) || (\n                self.platformID === 0 && self.format == 4\n            );\n\n            self.codeMap = {};\n            switch (self.format) {\n              case 0:\n                for (var i = 0; i < 256; ++i) {\n                    self.codeMap[i] = data.readByte();\n                }\n                break;\n\n              case 4:\n                var segCount = data.readShort() / 2;\n\n                data.skip(6);       // searchRange, entrySelector, rangeShift\n                var endCode = data.times(segCount, data.readShort);\n                data.skip(2);       // reserved pad\n                var startCode = data.times(segCount, data.readShort);\n                var idDelta = data.times(segCount, data.readShort_);\n                var idRangeOffset = data.times(segCount, data.readShort);\n\n                var count = (self.length + self.offset - data.offset()) / 2;\n                var glyphIds = data.times(count, data.readShort);\n\n                for (i = 0; i < segCount; ++i) {\n                    var start = startCode[i], end = endCode[i];\n                    for (var code = start; code <= end; ++code) {\n                        var glyphId;\n                        if (idRangeOffset[i] === 0) {\n                            glyphId = code + idDelta[i];\n                        } else {\n                            ///\n                            // When non-zero, idRangeOffset contains for each segment the byte offset of the Glyph ID\n                            // into the glyphIds table, from the *current* `i` cell of idRangeOffset.  In other words,\n                            // this offset spans from the first into the second array.  This works, because the arrays\n                            // are consecutive in the TTF file:\n                            //\n                            //     [ ...idRangeOffset... ][ ...glyphIds... ]\n                            //       ...... 48 ......       .... ID ....\n                            //              ^----- 48 bytes -----^\n                            //\n                            // (but I can't stop wondering why is it not just a plain index, possibly incremented by 1\n                            // so that we can have that special `zero` value.)\n                            //\n                            // The elements of idRangeOffset are even numbers, because both arrays contain 16-bit words,\n                            // yet the offset is in bytes.  That is why we divide it by 2.  Then we subtract the\n                            // remaining segments (segCount-i), and add the code-start offset, to which we need to add\n                            // the corresponding delta to get the actual glyph ID.\n                            ///\n                            var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n                            glyphId = glyphIds[index] || 0;\n                            if (glyphId !== 0) {\n                                glyphId += idDelta[i];\n                            }\n                        }\n                        self.codeMap[code] = glyphId & 0xFFFF;\n                    }\n                }\n            }\n        });\n    }\n\n    function renderCharmap(ncid2ogid, ogid2ngid) {\n        var codes = sortedKeys(ncid2ogid);\n        var startCodes = [];\n        var endCodes = [];\n        var last = null;\n        var diff = null;\n\n        function new_gid(charcode) {\n            return ogid2ngid[ncid2ogid[charcode]];\n        }\n\n        for (var i = 0; i < codes.length; ++i) {\n            var code = codes[i];\n            var gid = new_gid(code);\n            var delta = gid - code;\n            if (last == null || delta !== diff) {\n                if (last) {\n                    endCodes.push(last);\n                }\n                startCodes.push(code);\n                diff = delta;\n            }\n            last = code;\n        }\n\n        if (last) {\n            endCodes.push(last);\n        }\n        endCodes.push(0xFFFF);\n        startCodes.push(0xFFFF);\n\n        var segCount = startCodes.length;\n        var segCountX2 = segCount * 2;\n        var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n        var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n        var rangeShift = segCountX2 - searchRange;\n\n        var deltas = [];\n        var rangeOffsets = [];\n        var glyphIds = [];\n\n        for (i = 0; i < segCount; ++i) {\n            var startCode = startCodes[i];\n            var endCode = endCodes[i];\n            if (startCode == 0xFFFF) {\n                deltas.push(0);\n                rangeOffsets.push(0);\n                break;\n            }\n            var startGlyph = new_gid(startCode);\n            if (startCode - startGlyph >= 0x8000) {\n                deltas.push(0);\n                rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n                for (var j = startCode; j <= endCode; ++j) {\n                    glyphIds.push(new_gid(j));\n                }\n            } else {\n                deltas.push(startGlyph - startCode);\n                rangeOffsets.push(0);\n            }\n        }\n\n        var out = BinaryStream();\n\n        out.writeShort(3);      // platformID\n        out.writeShort(1);      // platformSpecificID\n        out.writeLong(12);      // offset\n        out.writeShort(4);      // format\n        out.writeShort(16 + segCount * 8 + glyphIds.length * 2); // length\n        out.writeShort(0);      // language\n        out.writeShort(segCountX2);\n        out.writeShort(searchRange);\n        out.writeShort(entrySelector);\n        out.writeShort(rangeShift);\n\n        endCodes.forEach(out.writeShort);\n        out.writeShort(0);      // reserved pad\n        startCodes.forEach(out.writeShort);\n        deltas.forEach(out.writeShort_);\n        rangeOffsets.forEach(out.writeShort);\n        glyphIds.forEach(out.writeShort);\n\n        return out.get();\n    }\n\n    return deftable({\n        parse: function(data) {\n            var self = this;\n            var offset = self.offset;\n            data.offset(offset);\n\n            self.version = data.readShort();\n            var tableCount = data.readShort();\n            self.unicodeEntry = null;\n            self.tables = data.times(tableCount, function(){\n                var entry = new CmapEntry(data, offset);\n                if (entry.isUnicode) {\n                    self.unicodeEntry = entry;\n                }\n                return entry;\n            });\n        },\n        render: function(ncid2ogid, ogid2ngid) {\n            var out = BinaryStream();\n            out.writeShort(0);  // version\n            out.writeShort(1);  // tableCount\n            out.write(renderCharmap(ncid2ogid, ogid2ngid));\n            return out.get();\n        },\n        getUnicodeEntry: function() {\n            if (!this.unicodeEntry) {\n                throw new Error(\"Font doesn't have an Unicode encoding\");\n            }\n            return this.unicodeEntry;\n        }\n    });\n\n})();\n\nvar OS2Table = deftable({\n    parse: function(data) {\n        data.offset(this.offset);\n        this.version = data.readShort();\n        this.averageCharWidth = data.readShort_();\n        this.weightClass = data.readShort();\n        this.widthClass = data.readShort();\n        this.type = data.readShort();\n        this.ySubscriptXSize = data.readShort_();\n        this.ySubscriptYSize = data.readShort_();\n        this.ySubscriptXOffset = data.readShort_();\n        this.ySubscriptYOffset = data.readShort_();\n        this.ySuperscriptXSize = data.readShort_();\n        this.ySuperscriptYSize = data.readShort_();\n        this.ySuperscriptXOffset = data.readShort_();\n        this.ySuperscriptYOffset = data.readShort_();\n        this.yStrikeoutSize = data.readShort_();\n        this.yStrikeoutPosition = data.readShort_();\n        this.familyClass = data.readShort_();\n\n        this.panose = data.times(10, data.readByte);\n        this.charRange = data.times(4, data.readLong);\n\n        this.vendorID = data.readString(4);\n        this.selection = data.readShort();\n        this.firstCharIndex = data.readShort();\n        this.lastCharIndex = data.readShort();\n\n        if (this.version > 0) {\n            this.ascent = data.readShort_();\n            this.descent = data.readShort_();\n            this.lineGap = data.readShort_();\n            this.winAscent = data.readShort();\n            this.winDescent = data.readShort();\n            this.codePageRange = data.times(2, data.readLong);\n\n            if (this.version > 1) {\n                this.xHeight = data.readShort();\n                this.capHeight = data.readShort();\n                this.defaultChar = data.readShort();\n                this.breakChar = data.readShort();\n                this.maxContext = data.readShort();\n            }\n        }\n    },\n    render: function() {\n        return this.raw();\n    }\n});\n\nvar subsetTag = 100000;\n\nfunction nextSubsetTag() {\n    var ret = \"\", n = subsetTag+\"\";\n    for (var i = 0; i < n.length; ++i) {\n        ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n    }\n    ++subsetTag;\n    return ret;\n}\n\nfunction Subfont(font) {\n    this.font = font;\n    this.subset = {};\n    this.unicodes = {};\n    this.ogid2ngid = { 0: 0 };\n    this.ngid2ogid = { 0: 0 };\n    this.ncid2ogid = {};\n    this.next = this.firstChar = 1;\n    this.nextGid = 1;\n    this.psName = nextSubsetTag() + \"+\" + this.font.psName;\n}\n\nSubfont.prototype = {\n    use: function(ch) {\n        var code;\n        if (typeof ch == \"string\") {\n            var ret = \"\";\n            for (var i = 0; i < ch.length; ++i) {\n                code = this.use(ch.charCodeAt(i));\n                ret += String.fromCharCode(code);\n            }\n            return ret;\n        }\n        code = this.unicodes[ch];\n        if (!code) {\n            code = this.next++;\n            this.subset[code] = ch;\n            this.unicodes[ch] = code;\n\n            // generate new GID (glyph ID) and maintain newGID ->\n            // oldGID and back mappings\n            var old_gid = this.font.cmap.getUnicodeEntry().codeMap[ch];\n            if (old_gid) {\n                this.ncid2ogid[code] = old_gid;\n                if (this.ogid2ngid[old_gid] == null) {\n                    var new_gid = this.nextGid++;\n                    this.ogid2ngid[old_gid] = new_gid;\n                    this.ngid2ogid[new_gid] = old_gid;\n                }\n            }\n        }\n        return code;\n    },\n    encodeText: function(text) {\n        return this.use(text);\n    },\n    glyphIds: function() {\n        return sortedKeys(this.ogid2ngid);\n    },\n    glyphsFor: function(glyphIds, result) {\n        if (!result) {\n            result = {};\n        }\n        for (var i = 0; i < glyphIds.length; ++i) {\n            var id = glyphIds[i];\n            if (!result[id]) {\n                var glyph = result[id] = this.font.glyf.glyphFor(id);\n                if (glyph && glyph.compound) {\n                    this.glyphsFor(glyph.glyphIds, result);\n                }\n            }\n        }\n        return result;\n    },\n    render: function() {\n        var glyphs = this.glyphsFor(this.glyphIds());\n\n        // add missing sub-glyphs\n        for (var old_gid in glyphs) {\n            if (hasOwnProperty(glyphs, old_gid)) {\n                old_gid = parseInt(old_gid, 10);\n                if (this.ogid2ngid[old_gid] == null) {\n                    var new_gid = this.nextGid++;\n                    this.ogid2ngid[old_gid] = new_gid;\n                    this.ngid2ogid[new_gid] = old_gid;\n                }\n            }\n        }\n\n        // must obtain old_gid_ids in an order matching sorted\n        // new_gid_ids\n        var new_gid_ids = sortedKeys(this.ngid2ogid);\n        var old_gid_ids = new_gid_ids.map(function(id){\n            return this.ngid2ogid[id];\n        }, this);\n\n        var font = this.font;\n        var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n        var loca = font.loca.render(glyf.offsets);\n\n        this.lastChar = this.next - 1;\n\n        var tables = {\n            \"cmap\" : CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n            \"glyf\" : glyf.table,\n            \"loca\" : loca.table,\n            \"hmtx\" : font.hmtx.render(old_gid_ids),\n            \"hhea\" : font.hhea.render(old_gid_ids),\n            \"maxp\" : font.maxp.render(old_gid_ids),\n            \"post\" : font.post.render(old_gid_ids),\n            \"name\" : font.name.render(this.psName),\n            \"head\" : font.head.render(loca.format),\n            \"OS/2\" : font.os2.render()\n        };\n\n        return this.font.directory.render(tables);\n    },\n    cidToGidMap: function() {\n        var out = BinaryStream(), len = 0;\n        for (var cid = this.firstChar; cid < this.next; ++cid) {\n            while (len < cid) {\n                out.writeShort(0);\n                len++;\n            }\n            var old_gid = this.ncid2ogid[cid];\n            if (old_gid) {\n                var new_gid = this.ogid2ngid[old_gid];\n                out.writeShort(new_gid);\n            } else {\n                out.writeShort(0);\n            }\n            len++;\n        }\n        return out.get();\n    }\n};\n\nfunction TTFFont(rawData, name) {\n    var self = this;\n    var data = self.contents = BinaryStream(rawData);\n    if (data.readString(4) == \"ttcf\") {\n        if (!name) {\n            throw new Error(\"Must specify a name for TTC files\");\n        }\n        var version = data.readLong();\n        var numFonts = data.readLong();\n        for (var i = 0; i < numFonts; ++i) {\n            var offset = data.readLong();\n            data.saveExcursion(function(){\n                data.offset(offset);\n                self.parse();\n            });\n            if (self.psName == name) {\n                return;\n            }\n        }\n        throw new Error(\"Font \" + name + \" not found in collection\");\n    } else {\n        data.offset(0);\n        self.parse();\n    }\n}\n\nTTFFont.prototype = {\n    parse: function() {\n        var dir = this.directory = new Directory(this.contents);\n\n        this.head = dir.readTable(\"head\", HeadTable);\n        this.loca = dir.readTable(\"loca\", LocaTable);\n        this.hhea = dir.readTable(\"hhea\", HheaTable);\n        this.maxp = dir.readTable(\"maxp\", MaxpTable);\n        this.hmtx = dir.readTable(\"hmtx\", HmtxTable);\n        this.glyf = dir.readTable(\"glyf\", GlyfTable);\n        this.name = dir.readTable(\"name\", NameTable);\n        this.post = dir.readTable(\"post\", PostTable);\n        this.cmap = dir.readTable(\"cmap\", CmapTable);\n        this.os2  = dir.readTable(\"OS/2\", OS2Table);\n\n        this.psName = this.name.postscriptName;\n        this.ascent = this.os2.ascent || this.hhea.ascent;\n        this.descent = this.os2.descent || this.hhea.descent;\n        this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n        this.scale = 1000 / this.head.unitsPerEm;\n    },\n    widthOfGlyph: function(glyph) {\n        return this.hmtx.forGlyph(glyph).advance * this.scale;\n    },\n    makeSubset: function() {\n        return new Subfont(this);\n    }\n};\n\nPDF.TTFFont = TTFFont;\n\n})(this);\n\n\n\n(function(kendo){\n\nkendo.PDFMixin = {\n    extend: function(proto) {\n        proto.events.push(\"pdfExport\");\n        proto.options.pdf = this.options;\n        proto.saveAsPDF = this.saveAsPDF;\n    },\n    options: {\n        fileName  : \"Export.pdf\",\n        proxyURL  : \"\",\n\n        // paperSize can be an usual name, i.e. \"A4\", or an array of two Number-s specifying the\n        // width/height in points (1pt = 1/72in), or strings including unit, i.e. \"10mm\".  Supported\n        // units are \"mm\", \"cm\", \"in\" and \"pt\".  The default \"auto\" means paper size is determined\n        // by content.\n        paperSize : \"auto\",\n\n        // pass true to reverse the paper dimensions if needed such that width is the larger edge.\n        // doesn't make much sense with \"auto\" paperSize.\n        landscape : false,\n\n        // pass an object containing { left, top, bottom, right } margins (numbers of strings with\n        // units).\n        margin    : null,\n\n        // optional information for the PDF Info dictionary; all strings except for the date.\n        title     : null,\n        author    : null,\n        subject   : null,\n        keywords  : null,\n        creator   : \"Kendo UI PDF Generator\",\n        date      : null        // CreationDate; must be a Date object, defaults to new Date()\n    },\n    saveAsPDF: function() {\n        if (this.trigger(\"pdfExport\")) {\n            return;\n        }\n\n        var options = this.options.pdf;\n\n        kendo.drawing.drawDOM(this.wrapper[0])\n        .then(function(root) {\n            return kendo.drawing.exportPDF(root, options);\n        })\n        .done(function(dataURI) {\n            kendo.saveAs({\n                dataURI: dataURI,\n                fileName: options.fileName,\n                proxyURL: options.proxyURL,\n                forceProxy: options.forceProxy\n            });\n        });\n    }\n};\n\n})(kendo);\n\n\n\n(function(kendo, $){\n\n    \"use strict\";\n\n    // WARNING: removing the following jshint declaration and turning\n    // == into === to make JSHint happy will break functionality.\n    /*jshint eqnull:true  */\n\n    var drawing     = kendo.drawing;\n    var geo         = kendo.geometry;\n    var Color       = drawing.Color;\n\n    function PDF() {\n        if (!kendo.pdf) {\n            throw new Error(\"kendo.pdf.js is not loaded\");\n        }\n        return kendo.pdf;\n    }\n\n    var DASH_PATTERNS = {\n        dash           : [ 4 ],\n        dashDot        : [ 4, 2, 1, 2 ],\n        dot            : [ 1, 2 ],\n        longDash       : [ 8, 2 ],\n        longDashDot    : [ 8, 2, 1, 2 ],\n        longDashDotDot : [ 8, 2, 1, 2, 1, 2 ],\n        solid          : []\n    };\n\n    var LINE_CAP = {\n        butt   : 0,\n        round  : 1,\n        square : 2\n    };\n\n    var LINE_JOIN = {\n        miter : 0,\n        round : 1,\n        bevel : 2\n    };\n\n    function render(group, callback) {\n        var fonts = [], images = [], options = group.options;\n\n        function getOption(name, defval, hash) {\n            if (!hash) {\n                hash = options;\n            }\n            if (hash.pdf && hash.pdf[name] != null) {\n                return hash.pdf[name];\n            }\n            return defval;\n        }\n\n        var multiPage = getOption(\"multiPage\");\n\n        group.traverse(function(element){\n            dispatch({\n                Image: function(element) {\n                    if (images.indexOf(element.src()) < 0) {\n                        images.push(element.src());\n                    }\n                },\n                Text: function(element) {\n                    var style = PDF().parseFontDef(element.options.font);\n                    var url = PDF().getFontURL(style);\n                    if (fonts.indexOf(url) < 0) {\n                        fonts.push(url);\n                    }\n                }\n            }, element);\n        });\n\n        function doIt() {\n            if (--count > 0) {\n                return;\n            }\n\n            var pdf = new (PDF().Document)({\n                title     : getOption(\"title\"),\n                author    : getOption(\"author\"),\n                subject   : getOption(\"subject\"),\n                keywords  : getOption(\"keywords\"),\n                creator   : getOption(\"creator\"),\n                date      : getOption(\"date\")\n            });\n\n            function drawPage(group) {\n                var options = group.options;\n\n                var tmp = optimize(group);\n                var bbox = tmp.bbox;\n                group = tmp.root;\n\n                var paperSize = getOption(\"paperSize\", getOption(\"paperSize\", \"auto\"), options), addMargin = false;\n                if (paperSize == \"auto\") {\n                    if (bbox) {\n                        var size = bbox.getSize();\n                        paperSize = [ size.width, size.height ];\n                        addMargin = true;\n                        var origin = bbox.getOrigin();\n                        tmp = new drawing.Group();\n                        tmp.transform(new geo.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n                        tmp.append(group);\n                        group = tmp;\n                    }\n                    else {\n                        paperSize = \"A4\";\n                    }\n                }\n\n                var page;\n                page = pdf.addPage({\n                    paperSize : paperSize,\n                    margin    : getOption(\"margin\", getOption(\"margin\"), options),\n                    addMargin : addMargin,\n                    landscape : getOption(\"landscape\", getOption(\"landscape\", false), options)\n                });\n                drawElement(group, page, pdf);\n            }\n\n            if (multiPage) {\n                group.children.forEach(drawPage);\n            } else {\n                drawPage(group);\n            }\n\n            callback(pdf.render(), pdf);\n        }\n\n        var count = 2;\n        PDF().loadFonts(fonts, doIt);\n        PDF().loadImages(images, doIt);\n    }\n\n    function toDataURL(group, callback) {\n        render(group, function(data){\n            callback(\"data:application/pdf;base64,\" + data.base64());\n        });\n    }\n\n    function toBlob(group, callback) {\n        render(group, function(data){\n            callback(new Blob([ data.get() ], { type: \"application/pdf\" }));\n        });\n    }\n\n    function saveAs(group, filename, proxy, callback) {\n        // XXX: Safari has Blob, but does not support the download attribute\n        //      so we'd end up converting to dataURL and using the proxy anyway.\n        if (window.Blob && !kendo.support.browser.safari) {\n            toBlob(group, function(blob){\n                kendo.saveAs({ dataURI: blob, fileName: filename });\n                if (callback) {\n                    callback(blob);\n                }\n            });\n        } else {\n            toDataURL(group, function(dataURL){\n                kendo.saveAs({ dataURI: dataURL, fileName: filename, proxyURL: proxy });\n                if (callback) {\n                    callback(dataURL);\n                }\n            });\n        }\n    }\n\n    function dispatch(handlers, element) {\n        var handler = handlers[element.nodeType];\n        if (handler) {\n            return handler.call.apply(handler, arguments);\n        }\n        return element;\n    }\n\n    function drawElement(element, page, pdf) {\n        if (element.DEBUG) {\n            page.comment(element.DEBUG);\n        }\n\n        var transform = element.transform();\n        var opacity = element.opacity();\n\n        page.save();\n\n        if (opacity != null && opacity < 1) {\n            page.setOpacity(opacity);\n        }\n\n        setStrokeOptions(element, page, pdf);\n        setFillOptions(element, page, pdf);\n        setClipping(element, page, pdf);\n\n        if (transform) {\n            var m = transform.matrix();\n            page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n        }\n\n        dispatch({\n            Path      : drawPath,\n            MultiPath : drawMultiPath,\n            Circle    : drawCircle,\n            Arc       : drawArc,\n            Text      : drawText,\n            Image     : drawImage,\n            Group     : drawGroup\n        }, element, page, pdf);\n\n        page.restore();\n    }\n\n    function setStrokeOptions(element, page, pdf) {\n        var stroke = element.stroke && element.stroke();\n        if (!stroke) {\n            return;\n        }\n\n        var color = stroke.color;\n        if (color) {\n            color = parseColor(color);\n            if (color == null) {\n                return; // no stroke\n            }\n            page.setStrokeColor(color.r, color.g, color.b);\n            if (color.a != 1) {\n                page.setStrokeOpacity(color.a);\n            }\n        }\n\n        var width = stroke.width;\n        if (width != null) {\n            if (width === 0) {\n                return; // no stroke\n            }\n            page.setLineWidth(width);\n        }\n\n        var dashType = stroke.dashType;\n        if (dashType) {\n            page.setDashPattern(DASH_PATTERNS[dashType], 0);\n        }\n\n        var lineCap = stroke.lineCap;\n        if (lineCap) {\n            page.setLineCap(LINE_CAP[lineCap]);\n        }\n\n        var lineJoin = stroke.lineJoin;\n        if (lineJoin) {\n            page.setLineJoin(LINE_JOIN[lineJoin]);\n        }\n\n        var opacity = stroke.opacity;\n        if (opacity != null) {\n            page.setStrokeOpacity(opacity);\n        }\n    }\n\n    function setFillOptions(element, page, pdf) {\n        var fill = element.fill && element.fill();\n        if (!fill) {\n            return;\n        }\n\n        if (fill instanceof drawing.Gradient) {\n            return;\n        }\n\n        var color = fill.color;\n        if (color) {\n            color = parseColor(color);\n            if (color == null) {\n                return; // no fill\n            }\n            page.setFillColor(color.r, color.g, color.b);\n            if (color.a != 1) {\n                page.setFillOpacity(color.a);\n            }\n        }\n\n        var opacity = fill.opacity;\n        if (opacity != null) {\n            page.setFillOpacity(opacity);\n        }\n    }\n\n    function setClipping(element, page, pdf) {\n        // XXX: only Path supported at the moment.\n        var clip = element.clip();\n        if (clip) {\n            _drawPath(clip, page, pdf);\n            page.clip();\n            // page.setStrokeColor(Math.random(), Math.random(), Math.random());\n            // page.setLineWidth(1);\n            // page.stroke();\n        }\n    }\n\n    function shouldDraw(thing) {\n        return (thing &&\n                (thing instanceof drawing.Gradient ||\n                 (thing.color && !/^(none|transparent)$/i.test(thing.color) &&\n                  (thing.width == null || thing.width > 0) &&\n                  (thing.opacity == null || thing.opacity > 0))));\n    }\n\n    function maybeGradient(element, page, pdf, stroke) {\n        var fill = element.fill();\n        if (fill instanceof drawing.Gradient) {\n            if (stroke) {\n                page.clipStroke();\n            } else {\n                page.clip();\n            }\n            var isRadial = fill instanceof drawing.RadialGradient;\n            var start, end;\n            if (isRadial) {\n                start = { x: fill.center().x , y: fill.center().y , r: 0 };\n                end   = { x: fill.center().x , y: fill.center().y , r: fill.radius() };\n            } else {\n                start = { x: fill.start().x , y: fill.start().y };\n                end   = { x: fill.end().x   , y: fill.end().y   };\n            }\n            var gradient = {\n                type: isRadial ? \"radial\" : \"linear\",\n                start: start,\n                end: end,\n                userSpace: fill.userSpace(),\n                stops: fill.stops.elements().map(function(stop){\n                    var offset = stop.offset();\n                    if (/%$/.test(offset)) {\n                        offset = parseFloat(offset) / 100;\n                    } else {\n                        offset = parseFloat(offset);\n                    }\n                    var color = parseColor(stop.color());\n                    color.a *= stop.opacity();\n                    return {\n                        offset: offset,\n                        color: color\n                    };\n                })\n            };\n            var box = element.rawBBox();\n            var tl = box.topLeft(), size = box.getSize();\n            box = {\n                left   : tl.x,\n                top    : tl.y,\n                width  : size.width,\n                height : size.height\n            };\n            page.gradient(gradient, box);\n            return true;\n        }\n    }\n\n    function maybeFillStroke(element, page, pdf) {\n        if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n            if (!maybeGradient(element, page, pdf, true)) {\n                page.fillStroke();\n            }\n        } else if (shouldDraw(element.fill())) {\n            if (!maybeGradient(element, page, pdf, false)) {\n                page.fill();\n            }\n        } else if (shouldDraw(element.stroke())) {\n            page.stroke();\n        } else {\n            // we should not get here; the path should have been\n            // optimized away.  but let's be prepared.\n            page.nop();\n        }\n    }\n\n    function maybeDrawRect(path, page, pdf) {\n        var segments = path.segments;\n        if (segments.length == 4 && path.options.closed) {\n            // detect if this path looks like a rectangle parallel to the axis\n            var a = [];\n            for (var i = 0; i < segments.length; ++i) {\n                if (segments[i].controlIn()) { // has curve?\n                    return false;\n                }\n                a[i] = segments[i].anchor();\n            }\n            // it's a rectangle if the y/x/y/x or x/y/x/y coords of\n            // consecutive points are the same.\n            var isRect = (\n                a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x\n            ) || (\n                a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y\n            );\n            if (isRect) {\n                // this saves a bunch of instructions in PDF:\n                // moveTo, lineTo, lineTo, lineTo, close -> rect.\n                page.rect(a[0].x, a[0].y,\n                          a[2].x - a[0].x /*width*/,\n                          a[2].y - a[0].y /*height*/);\n                return true;\n            }\n        }\n    }\n\n    function _drawPath(element, page, pdf) {\n        var segments = element.segments;\n        if (segments.length === 0) {\n            return;\n        }\n        if (!maybeDrawRect(element, page, pdf)) {\n            for (var prev, i = 0; i < segments.length; ++i) {\n                var seg = segments[i];\n                var anchor = seg.anchor();\n                if (!prev) {\n                    page.moveTo(anchor.x, anchor.y);\n                } else {\n                    var prevOut = prev.controlOut();\n                    var controlIn = seg.controlIn();\n                    if (prevOut && controlIn) {\n                        page.bezier(\n                            prevOut.x   , prevOut.y,\n                            controlIn.x , controlIn.y,\n                            anchor.x    , anchor.y\n                        );\n                    } else {\n                        page.lineTo(anchor.x, anchor.y);\n                    }\n                }\n                prev = seg;\n            }\n            if (element.options.closed) {\n                page.close();\n            }\n        }\n    }\n\n    function drawPath(element, page, pdf) {\n        _drawPath(element, page, pdf);\n        maybeFillStroke(element, page, pdf);\n    }\n\n    function drawMultiPath(element, page, pdf) {\n        var paths = element.paths;\n        for (var i = 0; i < paths.length; ++i) {\n            _drawPath(paths[i], page, pdf);\n        }\n        maybeFillStroke(element, page, pdf);\n    }\n\n    function drawCircle(element, page, pdf) {\n        var g = element.geometry();\n        page.circle(g.center.x, g.center.y, g.radius);\n        maybeFillStroke(element, page, pdf);\n    }\n\n    function drawArc(element, page, pdf) {\n        var points = element.geometry().curvePoints();\n        page.moveTo(points[0].x, points[0].y);\n        for (var i = 1; i < points.length;) {\n            page.bezier(\n                points[i].x, points[i++].y,\n                points[i].x, points[i++].y,\n                points[i].x, points[i++].y\n            );\n        }\n        maybeFillStroke(element, page, pdf);\n    }\n\n    function drawText(element, page, pdf) {\n        var style = PDF().parseFontDef(element.options.font);\n        var pos = element._position;\n        var mode;\n        if (element.fill() && element.stroke()) {\n            mode = PDF().TEXT_RENDERING_MODE.fillAndStroke;\n        } else if (element.fill()) {\n            mode = PDF().TEXT_RENDERING_MODE.fill;\n        } else if (element.stroke()) {\n            mode = PDF().TEXT_RENDERING_MODE.stroke;\n        }\n\n        page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n        page.beginText();\n        page.setFont(PDF().getFontURL(style), style.fontSize);\n        page.setTextRenderingMode(mode);\n        page.showText(element.content());\n        page.endText();\n    }\n\n    function drawGroup(element, page, pdf) {\n        var children = element.children;\n        for (var i = 0; i < children.length; ++i) {\n            drawElement(children[i], page, pdf);\n        }\n    }\n\n    function drawImage(element, page, pdf) {\n        var url = element.src();\n        var rect = element.rect();\n        var tl = rect.getOrigin();\n        var sz = rect.getSize();\n        page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n        page.drawImage(url);\n    }\n\n    function exportPDF(group, options) {\n        var defer = $.Deferred();\n\n        group.options.set(\"pdf\", options);\n        drawing.pdf.toDataURL(group, defer.resolve);\n\n        return defer.promise();\n    }\n\n    function parseColor(x) {\n        var color = kendo.parseColor(x, true);\n        return color ? color.toRGB() : null;\n    }\n\n    function optimize(root) {\n        var clipbox = false;\n        var matrix = geo.Matrix.unit();\n        var currentBox = null;\n        var changed;\n        do {\n            changed = false;\n            root = opt(root);\n        } while (root && changed);\n        return { root: root, bbox: currentBox };\n\n        function change(newShape) {\n            changed = true;\n            return newShape;\n        }\n\n        function visible(shape) {\n            return (shape.visible() && shape.opacity() > 0 &&\n                    ( shouldDraw(shape.fill()) ||\n                      shouldDraw(shape.stroke()) ));\n        }\n\n        function optArray(a) {\n            var b = [];\n            for (var i = 0; i < a.length; ++i) {\n                var el = opt(a[i]);\n                if (el != null) {\n                    b.push(el);\n                }\n            }\n            return b;\n        }\n\n        function withClipping(shape, f) {\n            var saveclipbox = clipbox;\n            var savematrix = matrix;\n\n            if (shape.transform()) {\n                matrix = matrix.multiplyCopy(shape.transform().matrix());\n            }\n\n            var clip = shape.clip();\n            if (clip) {\n                clip = clip.bbox();\n                if (clip) {\n                    clip = clip.bbox(matrix);\n                    clipbox = clipbox ? geo.Rect.intersect(clipbox, clip) : clip;\n                }\n            }\n\n            try {\n                return f();\n            }\n            finally {\n                clipbox = saveclipbox;\n                matrix = savematrix;\n            }\n        }\n\n        function inClipbox(shape) {\n            if (clipbox == null) {\n                return false;\n            }\n            var box = shape.rawBBox().bbox(matrix);\n            if (clipbox && box) {\n                box = geo.Rect.intersect(box, clipbox);\n            }\n            return box;\n        }\n\n        function opt(shape) {\n            return withClipping(shape, function(){\n                if (!(shape instanceof drawing.Group || shape instanceof drawing.MultiPath)) {\n                    var box = inClipbox(shape);\n                    if (!box) {\n                        return change(null);\n                    }\n                    currentBox = currentBox ? geo.Rect.union(currentBox, box) : box;\n                }\n                return dispatch({\n                    Path: function(shape) {\n                        if (shape.segments.length === 0 || !visible(shape)) {\n                            return change(null);\n                        }\n                        return shape;\n                    },\n                    MultiPath: function(shape) {\n                        if (!visible(shape)) {\n                            return change(null);\n                        }\n                        var el = new drawing.MultiPath(shape.options);\n                        el.paths = optArray(shape.paths);\n                        if (el.paths.length === 0) {\n                            return change(null);\n                        }\n                        return el;\n                    },\n                    Circle: function(shape) {\n                        if (!visible(shape)) {\n                            return change(null);\n                        }\n                        return shape;\n                    },\n                    Arc: function(shape) {\n                        if (!visible(shape)) {\n                            return change(null);\n                        }\n                        return shape;\n                    },\n                    Text: function(shape) {\n                        if (!/\\S/.test(shape.content()) || !visible(shape)) {\n                            return change(null);\n                        }\n                        return shape;\n                    },\n                    Image: function(shape) {\n                        if (!(shape.visible() && shape.opacity() > 0)) {\n                            return change(null);\n                        }\n                        return shape;\n                    },\n                    Group: function(shape) {\n                        var el = new drawing.Group(shape.options);\n                        el.children = optArray(shape.children);\n                        if (shape !== root && el.children.length === 0) {\n                            return change(null);\n                        }\n                        return el;\n                    }\n                }, shape);\n            });\n        }\n    }\n\n    kendo.deepExtend(drawing, {\n        exportPDF: exportPDF,\n\n        pdf: {\n            toDataURL  : toDataURL,\n            toBlob     : toBlob,\n            saveAs     : saveAs,\n            toStream   : render\n        }\n    });\n\n})(window.kendo, window.kendo.jQuery);\n\n(function($, parseFloat, Math){\n\n    \"use strict\";\n\n    /* jshint eqnull:true */\n    /* jshint -W069 */\n\n    /* -----[ local vars ]----- */\n\n    var drawing = kendo.drawing;\n    var geo = kendo.geometry;\n    var slice = Array.prototype.slice;\n    var browser = kendo.support.browser;\n\n    var KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n\n    var IMAGE_CACHE = {};\n\n    /* -----[ exports ]----- */\n\n    function drawDOM(element) {\n        var defer = $.Deferred();\n        element = $(element)[0];\n\n        if (typeof window.getComputedStyle != \"function\") {\n            throw new Error(\"window.getComputedStyle is missing.  You are using an unsupported browser, or running in IE8 compatibility mode.  Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");\n        }\n\n        if (kendo.pdf) {\n            kendo.pdf.defineFont(getFontFaces());\n        }\n\n        if (element) {\n            cacheImages(element, function(){\n                var group = new drawing.Group();\n\n                // translate to start of page\n                var pos = element.getBoundingClientRect();\n                setTransform(group, [ 1, 0, 0, 1, -pos.left, -pos.top ]);\n\n                nodeInfo._clipbox = false;\n                nodeInfo._matrix = geo.Matrix.unit();\n                nodeInfo._stackingContext = {\n                    element: element,\n                    group: group\n                };\n\n                $(element).addClass(\"k-pdf-export\");\n                renderElement(element, group);\n                $(element).removeClass(\"k-pdf-export\");\n                defer.resolve(group);\n            });\n        } else {\n            defer.reject(\"No element to export\");\n        }\n\n        return defer.promise();\n    }\n\n    drawing.drawDOM = drawDOM;\n\n    drawDOM.getFontFaces = getFontFaces;\n\n    var nodeInfo = {};\n    nodeInfo._root = nodeInfo;\n\n    var parseGradient = (function(){\n        var tok_linear_gradient  = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n        var tok_radial_gradient  = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\n        var tok_percent          = /^([-0-9.]+%)/;\n        var tok_length           = /^([-0-9.]+px)/;\n        var tok_keyword          = /^(left|right|top|bottom|to|center)\\W/;\n        var tok_angle            = /^([-0-9.]+(deg|grad|rad|turn))/;\n        var tok_whitespace       = /^(\\s+)/;\n        var tok_popen            = /^(\\()/;\n        var tok_pclose           = /^(\\))/;\n        var tok_comma            = /^(,)/;\n\n        var cache = {};\n\n        return function(input) {\n            var orig = input;\n            if (hasOwnProperty(cache, orig)) {\n                return cache[orig];\n            }\n            function skip_ws() {\n                var m = tok_whitespace.exec(input);\n                if (m) {\n                    input = input.substr(m[1].length);\n                }\n            }\n            function read(token) {\n                skip_ws();\n                var m = token.exec(input);\n                if (m) {\n                    input = input.substr(m[1].length);\n                    return m[1];\n                }\n            }\n\n            function read_stop() {\n                // XXX: do NOT use the parseColor (defined later) here.\n                // kendo.parseColor leaves the `match` data in the\n                // object, that would be lost after .toRGB().\n                var color = kendo.parseColor(input, true);\n                var length, percent;\n                if (color) {\n                    input = input.substr(color.match[0].length);\n                    color = color.toRGB();\n                    if (!(length = read(tok_length))) {\n                        percent = read(tok_percent);\n                    }\n                    return { color: color, length: length, percent: percent };\n                }\n            }\n\n            function read_linear_gradient(propName) {\n                var angle;\n                var to1, to2;\n                var stops = [];\n                var reverse = false;\n\n                if (read(tok_popen)) {\n                    // 1. [ <angle> || to <side-or-corner>, ]?\n                    angle = read(tok_angle);\n                    if (angle) {\n                        angle = parseAngle(angle);\n                        read(tok_comma);\n                    }\n                    else {\n                        to1 = read(tok_keyword);\n                        if (to1 == \"to\") {\n                            to1 = read(tok_keyword);\n                        } else if (to1 && /^-/.test(propName)) {\n                            reverse = true;\n                        }\n                        to2 = read(tok_keyword);\n                        read(tok_comma);\n                    }\n\n                    if (/-moz-/.test(propName) && angle == null && to1 == null) {\n                        var x = read(tok_percent), y = read(tok_percent);\n                        reverse = true;\n                        if (x == \"0%\") {\n                            to1 = \"left\";\n                        } else if (x == \"100%\") {\n                            to1 = \"right\";\n                        }\n                        if (y == \"0%\") {\n                            to2 = \"top\";\n                        } else if (y == \"100%\") {\n                            to2 = \"bottom\";\n                        }\n                        read(tok_comma);\n                    }\n\n                    // 2. color stops\n                    while (input && !read(tok_pclose)) {\n                        var stop = read_stop();\n                        if (!stop) {\n                            break;\n                        }\n                        stops.push(stop);\n                        read(tok_comma);\n                    }\n\n                    return {\n                        type    : \"linear\",\n                        angle   : angle,\n                        to      : to1 && to2 ? to1 + \" \" + to2 : to1 ? to1 : to2 ? to2 : null,\n                        stops   : stops,\n                        reverse : reverse,\n                        orig    : orig\n                    };\n                }\n            }\n\n            var tok = read(tok_linear_gradient);\n            if (tok) {\n                tok = read_linear_gradient(tok);\n            }\n            return (cache[orig] = tok);\n        };\n    })();\n\n    var splitProperty = (function(){\n        var cache = {};\n        return function(input, separator) {\n            if (!separator) {\n                separator = /^\\s*,\\s*/;\n            }\n\n            var cacheKey = input + separator;\n\n            if (hasOwnProperty(cache, cacheKey)) {\n                return cache[cacheKey];\n            }\n\n            var ret = [];\n            var last = 0, pos = 0;\n            var in_paren = 0;\n            var in_string = false;\n            var m;\n\n            function looking_at(rx) {\n                return (m = rx.exec(input.substr(pos)));\n            }\n\n            function trim(str) {\n                return str.replace(/^\\s+|\\s+$/g, \"\");\n            }\n\n            while (pos < input.length) {\n                if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n                    in_paren++;\n                    pos++;\n                }\n                else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n                    in_paren--;\n                    pos++;\n                }\n                else if (!in_string && looking_at(/^[\\\"\\']/)) {\n                    in_string = m[0];\n                    pos++;\n                }\n                else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n                    pos += 2;\n                }\n                else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n                    pos += 2;\n                }\n                else if (in_string == \"'\" && looking_at(/^\\'/)) {\n                    in_string = false;\n                    pos++;\n                }\n                else if (in_string == '\"' && looking_at(/^\\\"/)) {\n                    in_string = false;\n                    pos++;\n                }\n                else if (looking_at(separator)) {\n                    if (!in_string && !in_paren && pos > last) {\n                        ret.push(trim(input.substring(last, pos)));\n                        last = pos + m[0].length;\n                    }\n                    pos += m[0].length;\n                }\n                else {\n                    pos++;\n                }\n            }\n            if (last < pos) {\n                ret.push(trim(input.substring(last, pos)));\n            }\n            return (cache[cacheKey] = ret);\n        };\n    })();\n\n    var getFontURL = (function(){\n        var cache = {};\n        return function(el){\n            // XXX: for IE we get here the whole cssText of the rule,\n            // because the computedStyle.src is empty.  Next time we need\n            // to fix these regexps we better write a CSS parser. :-\\\n            var url = cache[el];\n            if (!url) {\n                var m;\n                if ((m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el))) {\n                    url = cache[el] = m[2];\n                } else if ((m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el))) {\n                    url = cache[el] = m[2];\n                }\n            }\n            return url;\n        };\n    })();\n\n    function getFontFaces() {\n        var result = {};\n        for (var i = 0; i < document.styleSheets.length; ++i) {\n            doStylesheet(document.styleSheets[i]);\n        }\n        return result;\n        function doStylesheet(ss) {\n            if (ss) {\n                var rules = null;\n                try {\n                    rules = ss.cssRules;\n                } catch(ex) {}\n                if (rules) {\n                    addRules(ss, rules);\n                }\n            }\n        }\n        function findFonts(rule) {\n            var src = getPropertyValue(rule.style, \"src\");\n            if (src) {\n                return splitProperty(src).reduce(function(a, el){\n                    var font = getFontURL(el);\n                    if (font) {\n                        a.push(font);\n                    }\n                    return a;\n                }, []);\n            } else {\n                // Internet Explorer\n                // XXX: this is gross.  should work though for valid CSS.\n                var font = getFontURL(rule.cssText);\n                return font ? [ font ] : [];\n            }\n        }\n        function addRules(styleSheet, rules) {\n            for (var i = 0; i < rules.length; ++i) {\n                var r = rules[i];\n                switch (r.type) {\n                  case 3:       // CSSImportRule\n                    doStylesheet(r.styleSheet);\n                    break;\n                  case 5:       // CSSFontFaceRule\n                    var style  = r.style;\n                    var family = splitProperty(getPropertyValue(style, \"font-family\"));\n                    var bold   = /^(400|bold)$/i.test(getPropertyValue(style, \"font-weight\"));\n                    var italic = \"italic\" == getPropertyValue(style, \"font-style\");\n                    var src    = findFonts(r);\n                    if (src.length > 0) {\n                        addRule(styleSheet, family, bold, italic, src[0]);\n                    }\n                }\n            }\n        }\n        function addRule(styleSheet, names, bold, italic, url) {\n            // We get full resolved absolute URLs in Chrome, but sadly\n            // not in Firefox.\n            if (!(/^https?:\\/\\//.test(url) || /^\\//.test(url))) {\n                url = String(styleSheet.href).replace(/[^\\/]*$/, \"\") + url;\n            }\n            names.forEach(function(name){\n                name = name.replace(/^(['\"]?)(.*?)\\1$/, \"$2\"); // it's quoted\n                if (bold) {\n                    name += \"|bold\";\n                }\n                if (italic) {\n                    name += \"|italic\";\n                }\n                result[name] = url;\n            });\n        }\n    }\n\n    function hasOwnProperty(obj, key) {\n        return Object.prototype.hasOwnProperty.call(obj, key);\n    }\n\n    function getCounter(name) {\n        name = \"_counter_\" + name;\n        return nodeInfo[name];\n    }\n\n    function getAllCounters(name) {\n        var values = [], p = nodeInfo;\n        name = \"_counter_\" + name;\n        while (p) {\n            if (hasOwnProperty(p, name)) {\n                values.push(p[name]);\n            }\n            p = Object.getPrototypeOf(p);\n        }\n        return values.reverse();\n    }\n\n    function incCounter(name, inc) {\n        var p = nodeInfo;\n        name = \"_counter_\" + name;\n        while (p && !hasOwnProperty(p, name)) {\n            p = Object.getPrototypeOf(p);\n        }\n        if (!p) {\n            p = nodeInfo._root;\n        }\n        p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n    }\n\n    function resetCounter(name, val) {\n        name = \"_counter_\" + name;\n        nodeInfo[name] = val == null ? 0 : val;\n    }\n\n    function doCounters(a, f, def) {\n        for (var i = 0; i < a.length;) {\n            var name = a[i++];\n            var val = parseFloat(a[i]);\n            if (isNaN(val)) {\n                f(name, def);\n            } else {\n                f(name, val);\n                ++i;\n            }\n        }\n    }\n\n    function parseColor(str, css) {\n        var color = kendo.parseColor(str);\n        if (color) {\n            color = color.toRGB();\n            if (css) {\n                color = color.toCssRgba();\n            } else if (color.a === 0) {\n                color = null;\n            }\n        }\n        return color;\n    }\n\n    function cacheImages(element, callback) {\n        var urls = [];\n        function add(url) {\n            if (!IMAGE_CACHE[url]) {\n                IMAGE_CACHE[url] = true;\n                urls.push(url);\n            }\n        }\n        (function dive(element){\n            var bg = backgroundImageURL(getPropertyValue(getComputedStyle(element), \"background-image\"));\n            if (/^img$/i.test(element.tagName)) {\n                add(element.src);\n            }\n            if (bg) {\n                add(bg);\n            }\n            for (var i = element.firstChild; i; i = i.nextSibling) {\n                if (i.nodeType == 1) {\n                    dive(i);\n                }\n            }\n        })(element);\n        var count = urls.length;\n        function next() {\n            if (--count <= 0) {\n                callback();\n            }\n        }\n        if (count === 0) {\n            next();\n        }\n        urls.forEach(function(url){\n            var img = IMAGE_CACHE[url] = new Image();\n            if (!(/^data:/i.test(url))) {\n                img.crossOrigin = \"Anonymous\";\n            }\n            img.src = url;\n            if (img.complete) {\n                next();\n            } else {\n                img.onload = next;\n                img.onerror = function() {\n                    IMAGE_CACHE[url] = null;\n                    next();\n                };\n            }\n        });\n    }\n\n    function romanNumeral(n) {\n        var literals = {\n            1    : \"i\",       10   : \"x\",       100  : \"c\",\n            2    : \"ii\",      20   : \"xx\",      200  : \"cc\",\n            3    : \"iii\",     30   : \"xxx\",     300  : \"ccc\",\n            4    : \"iv\",      40   : \"xl\",      400  : \"cd\",\n            5    : \"v\",       50   : \"l\",       500  : \"d\",\n            6    : \"vi\",      60   : \"lx\",      600  : \"dc\",\n            7    : \"vii\",     70   : \"lxx\",     700  : \"dcc\",\n            8    : \"viii\",    80   : \"lxxx\",    800  : \"dccc\",\n            9    : \"ix\",      90   : \"xc\",      900  : \"cm\",\n            1000 : \"m\"\n        };\n        var values = [ 1000,\n                       900 , 800, 700, 600, 500, 400, 300, 200, 100,\n                       90  , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n                       9   , 8  , 7  , 6  , 5  , 4  , 3  , 2  , 1 ];\n        var roman = \"\";\n        while (n > 0) {\n            if (n < values[0]) {\n                values.shift();\n            } else {\n                roman += literals[values[0]];\n                n -= values[0];\n            }\n        }\n        return roman;\n    }\n\n    function alphaNumeral(n) {\n        var result = \"\";\n        do {\n            var r = n % 26;\n            result = String.fromCharCode(97 + r) + result;\n            n = Math.floor(n / 26);\n        } while (n > 0);\n        return result;\n    }\n\n    function backgroundImageURL(backgroundImage) {\n        var m = /^\\s*url\\((['\"]?)(.*?)\\1\\)\\s*$/i.exec(backgroundImage);\n        if (m) {\n            return m[2];\n        }\n    }\n\n    function pushNodeInfo(element, style, group) {\n        nodeInfo = Object.create(nodeInfo);\n        nodeInfo[element.tagName.toLowerCase()] = {\n            element: element,\n            style: style\n        };\n        var decoration = getPropertyValue(style, \"text-decoration\");\n        if (decoration && decoration != \"none\") {\n            var color = getPropertyValue(style, \"color\");\n            decoration.split(/\\s+/g).forEach(function(name){\n                if (!nodeInfo[name]) {\n                    nodeInfo[name] = color;\n                }\n            });\n        }\n\n        if (createsStackingContext(element)) {\n            nodeInfo._stackingContext = {\n                element: element,\n                group: group\n            };\n        }\n    }\n\n    function popNodeInfo() {\n        nodeInfo = Object.getPrototypeOf(nodeInfo);\n    }\n\n    function updateClipbox(path) {\n        if (nodeInfo._clipbox != null) {\n            var box = path.bbox(nodeInfo._matrix);\n            if (nodeInfo._clipbox) {\n                nodeInfo._clipbox = geo.Rect.intersect(nodeInfo._clipbox, box);\n            } else {\n                nodeInfo._clipbox = box;\n            }\n        }\n    }\n\n    function createsStackingContext(element) {\n        var style = getComputedStyle(element);\n        function prop(name) { return getPropertyValue(style, name); }\n        if (prop(\"transform\") != \"none\" ||\n            (prop(\"position\") != \"static\" && prop(\"z-index\") != \"auto\") ||\n            (prop(\"opacity\") < 1)) {\n            return true;\n        }\n    }\n\n    function getComputedStyle(element, pseudoElt) {\n        return window.getComputedStyle(element, pseudoElt || null);\n    }\n\n    function getPropertyValue(style, prop) {\n        return style.getPropertyValue(prop) ||\n            ( browser.webkit && style.getPropertyValue(\"-webkit-\" + prop )) ||\n            ( browser.firefox && style.getPropertyValue(\"-moz-\" + prop )) ||\n            ( browser.opera && style.getPropertyValue(\"-o-\" + prop)) ||\n            ( browser.msie && style.getPropertyValue(\"-ms-\" + prop))\n        ;\n    }\n\n    function pleaseSetPropertyValue(style, prop, value, important) {\n        style.setProperty(prop, value, important);\n        if (browser.webkit) {\n            style.setProperty(\"-webkit-\" + prop, value, important);\n        } else if (browser.firefox) {\n            style.setProperty(\"-moz-\" + prop, value, important);\n        } else if (browser.opera) {\n            style.setProperty(\"-o-\" + prop, value, important);\n        } else if (browser.msie) {\n            style.setProperty(\"-ms-\" + prop, value, important);\n            prop = \"ms\" + prop.replace(/(^|-)([a-z])/g, function(s, p1, p2){\n                return p1 + p2.toUpperCase();\n            });\n            style[prop] = value;\n        }\n    }\n\n    function getBorder(style, side) {\n        side = \"border-\" + side;\n        return {\n            width: parseFloat(getPropertyValue(style, side + \"-width\")),\n            style: getPropertyValue(style, side + \"-style\"),\n            color: parseColor(getPropertyValue(style, side + \"-color\"), true)\n        };\n    }\n\n    function saveStyle(element, func) {\n        var prev = element.style.cssText;\n        var result = func();\n        element.style.cssText = prev;\n        return result;\n    }\n\n    function getBorderRadius(style, side) {\n        var r = getPropertyValue(style, \"border-\" + side + \"-radius\").split(/\\s+/g).map(parseFloat);\n        if (r.length == 1) {\n            r.push(r[0]);\n        }\n        return sanitizeRadius({ x: r[0], y: r[1] });\n    }\n\n    function getContentBox(element) {\n        var box = element.getBoundingClientRect();\n        box = innerBox(box, \"border-*-width\", element);\n        box = innerBox(box, \"padding-*\", element);\n        return box;\n    }\n\n    function innerBox(box, prop, element) {\n        var style, wt, wr, wb, wl;\n        if (typeof prop == \"string\") {\n            style = getComputedStyle(element);\n            wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\n            wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\n            wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\n            wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\n        }\n        else if (typeof prop == \"number\") {\n            wt = wr = wb = wl = prop;\n        }\n        return {\n            top    : box.top + wt,\n            right  : box.right - wr,\n            bottom : box.bottom - wb,\n            left   : box.left + wl,\n            width  : box.right - box.left - wr - wl,\n            height : box.bottom - box.top - wb - wt\n        };\n    }\n\n    function getTransform(style) {\n        var transform = getPropertyValue(style, \"transform\");\n        if (transform == \"none\") {\n            return null;\n        }\n        var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform);\n        if (matrix) {\n            var origin = getPropertyValue(style, \"transform-origin\");\n            matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n            origin = origin.split(/\\s+/g).map(parseFloat);\n            return {\n                matrix: matrix,\n                origin: origin\n            };\n        }\n    }\n\n    function radiansToDegrees(radians) {\n        return ((180 * radians) / Math.PI) % 360;\n    }\n\n    function parseAngle(angle) {\n        var num = parseFloat(angle);\n        if (/grad$/.test(angle)) {\n            return Math.PI * num / 200;\n        }\n        else if (/rad$/.test(angle)) {\n            return num;\n        }\n        else if (/turn$/.test(angle)) {\n            return Math.PI * num * 2;\n        }\n        else if (/deg$/.test(angle)) {\n            return Math.PI * num / 180;\n        }\n    }\n\n    function setTransform(shape, m) {\n        m = new geo.Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n        shape.transform(m);\n        return m;\n    }\n\n    function setClipping(shape, clipPath) {\n        shape.clip(clipPath);\n    }\n\n    function addArcToPath(path, x, y, options) {\n        var points = new geo.Arc([ x, y ], options).curvePoints(), i = 1;\n        while (i < points.length) {\n            path.curveTo(points[i++], points[i++], points[i++]);\n        }\n    }\n\n    function sanitizeRadius(r) {\n        if (r.x <= 0 || r.y <= 0) {\n            r.x = r.y = 0;\n        }\n        return r;\n    }\n\n    function elementRoundBox(element, box, type) {\n        var style = getComputedStyle(element);\n\n        var rTL = getBorderRadius(style, \"top-left\");\n        var rTR = getBorderRadius(style, \"top-right\");\n        var rBL = getBorderRadius(style, \"bottom-left\");\n        var rBR = getBorderRadius(style, \"bottom-right\");\n\n        if (type == \"padding\" || type == \"content\") {\n            var bt = getBorder(style, \"top\");\n            var br = getBorder(style, \"right\");\n            var bb = getBorder(style, \"bottom\");\n            var bl = getBorder(style, \"left\");\n            rTL.x -= bl.width; rTL.y -= bt.width;\n            rTR.x -= br.width; rTR.y -= bt.width;\n            rBR.x -= br.width; rBR.y -= bb.width;\n            rBL.x -= bl.width; rBL.y -= bb.width;\n            if (type == \"content\") {\n                var pt = parseFloat(getPropertyValue(style, \"padding-top\"));\n                var pr = parseFloat(getPropertyValue(style, \"padding-right\"));\n                var pb = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n                var pl = parseFloat(getPropertyValue(style, \"padding-left\"));\n                rTL.x -= pl; rTL.y -= pt;\n                rTR.x -= pr; rTR.y -= pt;\n                rBR.x -= pr; rBR.y -= pb;\n                rBL.x -= pl; rBL.y -= pb;\n            }\n        }\n\n        if (typeof type == \"number\") {\n            rTL.x -= type; rTL.y -= type;\n            rTR.x -= type; rTR.y -= type;\n            rBR.x -= type; rBR.y -= type;\n            rBL.x -= type; rBL.y -= type;\n        }\n\n        return roundBox(box, rTL, rTR, rBR, rBL);\n    }\n\n    // Create a drawing.Path for a rounded rectangle.  Receives the\n    // bounding box and the border-radiuses in CSS order (top-left,\n    // top-right, bottom-right, bottom-left).  The radiuses must be\n    // objects containing x (horiz. radius) and y (vertical radius).\n    function roundBox(box, rTL, rTR, rBR, rBL) {\n        var path = new drawing.Path({ fill: null, stroke: null });\n        sanitizeRadius(rTL);\n        sanitizeRadius(rTR);\n        sanitizeRadius(rBR);\n        sanitizeRadius(rBL);\n        path.moveTo(box.left, box.top + rTL.y);\n        if (rTL.x) {\n            addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n                startAngle: -180,\n                endAngle: -90,\n                radiusX: rTL.x,\n                radiusY: rTL.y\n            });\n        }\n        path.lineTo(box.right - rTR.x, box.top);\n        if (rTR.x) {\n            addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n                startAngle: -90,\n                endAngle: 0,\n                radiusX: rTR.x,\n                radiusY: rTR.y\n            });\n        }\n        path.lineTo(box.right, box.bottom - rBR.y);\n        if (rBR.x) {\n            addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n                startAngle: 0,\n                endAngle: 90,\n                radiusX: rBR.x,\n                radiusY: rBR.y\n            });\n        }\n        path.lineTo(box.left + rBL.x, box.bottom);\n        if (rBL.x) {\n            addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n                startAngle: 90,\n                endAngle: 180,\n                radiusX: rBL.x,\n                radiusY: rBL.y\n            });\n        }\n        return path.close();\n    }\n\n    function formatCounter(val, style) {\n        var str = parseFloat(val) + \"\";\n        switch (style) {\n          case \"decimal-leading-zero\":\n            if (str.length < 2) {\n                str = \"0\" + str;\n            }\n            return str;\n          case \"lower-roman\":\n            return romanNumeral(val);\n          case \"upper-roman\":\n            return romanNumeral(val).toUpperCase();\n          case \"lower-latin\":\n          case \"lower-alpha\":\n            return alphaNumeral(val - 1);\n          case \"upper-latin\":\n          case \"upper-alpha\":\n            return alphaNumeral(val - 1).toUpperCase();\n          default:\n            return str;\n        }\n    }\n\n    function evalPseudoElementContent(element, content) {\n        function displayCounter(name, style, separator) {\n            if (!separator) {\n                return formatCounter(getCounter(name) || 0, style);\n            }\n            separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, \"$2\");\n            return getAllCounters(name).map(function(val){\n                return formatCounter(val, style);\n            }).join(separator);\n        }\n        var a = splitProperty(content, /^\\s+/);\n        var result = [], m;\n        a.forEach(function(el){\n            var tmp;\n            if ((m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el))) {\n                result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function(s, p){\n                    return String.fromCharCode(parseInt(p, 16));\n                }));\n            }\n            else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n                tmp = splitProperty(m[1]);\n                result.push(displayCounter(tmp[0], tmp[1]));\n            }\n            else if ((m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el))) {\n                tmp = splitProperty(m[1]);\n                result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n            }\n            else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n                result.push(element.getAttribute(m[1]) || \"\");\n            }\n            else {\n                result.push(el);\n            }\n        });\n        return result.join(\"\");\n    }\n\n    function getCssText(style) {\n        if (style.cssText) {\n            return style.cssText;\n        }\n        // Status: NEW.  Report year: 2002.  Current year: 2014.\n        // Nice played, Mozillians.\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\n        var result = [];\n        for (var i = 0; i < style.length; ++i) {\n            result.push(style[i] + \": \" + getPropertyValue(style, style[i]));\n        }\n        return result.join(\";\\n\");\n    }\n\n    function _renderWithPseudoElements(element, group) {\n        if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n            _renderElement(element, group);\n            return;\n        }\n        var fake = [];\n        function pseudo(kind, place) {\n            var style = getComputedStyle(element, kind);\n            if (style.content && style.content != \"normal\" && style.content != \"none\") {\n                var psel = document.createElement(KENDO_PSEUDO_ELEMENT);\n                psel.style.cssText = getCssText(style);\n                psel.textContent = evalPseudoElementContent(element, style.content);\n                element.insertBefore(psel, place);\n                if (kind == \":before\" && !(/absolute|fixed/.test(getPropertyValue(psel.style, \"position\")))) {\n                    // we need to shift the \"pseudo element\" to the left by its width, because we\n                    // created it as a real node and it'll overlap the host element position.\n                    psel.style.marginLeft = parseFloat(getPropertyValue(psel.style, \"margin-left\")) - psel.offsetWidth + \"px\";\n                }\n                fake.push(psel);\n            }\n        }\n        pseudo(\":before\", element.firstChild);\n        pseudo(\":after\", null);\n        _renderElement(element, group);\n        fake.forEach(function(el){ element.removeChild(el); });\n    }\n\n    function _renderElement(element, group) {\n        var style = getComputedStyle(element);\n\n        var top = getBorder(style, \"top\");\n        var right = getBorder(style, \"right\");\n        var bottom = getBorder(style, \"bottom\");\n        var left = getBorder(style, \"left\");\n\n        var rTL = getBorderRadius(style, \"top-left\");\n        var rTR = getBorderRadius(style, \"top-right\");\n        var rBL = getBorderRadius(style, \"bottom-left\");\n        var rBR = getBorderRadius(style, \"bottom-right\");\n\n        var dir = getPropertyValue(style, \"direction\");\n\n        var backgroundColor = getPropertyValue(style, \"background-color\");\n        backgroundColor = parseColor(backgroundColor);\n\n        var backgroundImage = splitProperty( getPropertyValue(style, \"background-image\") );\n        var backgroundRepeat = splitProperty( getPropertyValue(style, \"background-repeat\") );\n        var backgroundPosition = splitProperty( getPropertyValue(style, \"background-position\") );\n        var backgroundOrigin = splitProperty( getPropertyValue(style, \"background-origin\") );\n        var backgroundSize = splitProperty( getPropertyValue(style, \"background-size\") );\n\n        if (browser.msie && browser.version < 10) {\n            // IE9 hacks.  getPropertyValue won't return the correct\n            // value.  Sucks that we have to do it here, I'd prefer to\n            // move it in getPropertyValue, but we don't have the\n            // element.\n            backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n        }\n\n        var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n        // CSS \"clip\" property - if present, replace the group with a\n        // new one which is clipped.  This must happen before drawing\n        // the borders and background.\n        (function(){\n            var clip = getPropertyValue(style, \"clip\");\n            var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n            if (m) {\n                var a = m[1].split(/[ ,]+/g);\n                var top = a[0] == \"auto\" ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n                var right = a[1] == \"auto\" ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n                var bottom = a[2] == \"auto\" ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n                var left = a[3] == \"auto\" ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n                var tmp = new drawing.Group();\n                var clipPath = new drawing.Path()\n                    .moveTo(left, top)\n                    .lineTo(right, top)\n                    .lineTo(right, bottom)\n                    .lineTo(left, bottom)\n                    .close();\n                setClipping(tmp, clipPath);\n                group.append(tmp);\n                group = tmp;\n                updateClipbox(clipPath);\n            }\n        })();\n\n        var boxes = element.getClientRects();\n        if (boxes.length == 1) {\n            // Workaround the missing borders in Chrome!  getClientRects() boxes contains values\n            // rounded to integer.  getBoundingClientRect() appears to work fine.  We still need\n            // getClientRects() to support cases where there are more boxes (continued inline\n            // elements that might have border/background).\n            boxes = [ element.getBoundingClientRect() ];\n        }\n\n        // This function workarounds another Chrome bug, where boxes returned for a table with\n        // border-collapse: collapse will overlap the table border.  Our rendering is not perfect in\n        // such case anyway, but with this is better than without it.\n        boxes = adjustBoxes(boxes);\n\n        for (var i = 0; i < boxes.length; ++i) {\n            drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n        }\n\n        if (boxes.length > 0 && getPropertyValue(style, \"display\") == \"list-item\") {\n            drawBullet(boxes[0]);\n        }\n\n        // overflow: hidden/auto - if present, replace the group with\n        // a new one clipped by the inner box.\n        (function(){\n            function clipit() {\n                var clipPath = elementRoundBox(element, innerbox, \"padding\");\n                var tmp = new drawing.Group();\n                setClipping(tmp, clipPath);\n                group.append(tmp);\n                group = tmp;\n                updateClipbox(clipPath);\n            }\n            if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow\"))) {\n                clipit();\n            } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-x\"))) {\n                clipit();\n            } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-y\"))) {\n                clipit();\n            }\n        })();\n\n        if (!maybeRenderWidget(element, group)) {\n            renderContents(element, group);\n        }\n\n        return group; // only utility functions after this line.\n\n        function adjustBoxes(boxes) {\n            if (/^td$/i.test(element.tagName)) {\n                var table = nodeInfo.table;\n                if (table && getPropertyValue(table.style, \"border-collapse\") == \"collapse\") {\n                    var tableBorderLeft = getBorder(table.style, \"left\").width;\n                    var tableBorderTop = getBorder(table.style, \"top\").width;\n                    // check if we need to adjust\n                    if (tableBorderLeft === 0 && tableBorderTop === 0) {\n                        return boxes; // nope\n                    }\n                    var tableBox = table.element.getBoundingClientRect();\n                    var firstCell = table.element.rows[0].cells[0];\n                    var firstCellBox = firstCell.getBoundingClientRect();\n                    if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n                        return slice.call(boxes).map(function(box){\n                            return {\n                                left   : box.left + tableBorderLeft,\n                                top    : box.top + tableBorderTop,\n                                right  : box.right + tableBorderLeft,\n                                bottom : box.bottom + tableBorderTop,\n                                height : box.height,\n                                width  : box.width\n                            };\n                        });\n                    }\n                }\n            }\n            return boxes;\n        }\n\n        // this function will be called to draw each border.  it\n        // draws starting at origin and the resulted path must be\n        // translated/rotated to be placed in the proper position.\n        //\n        // arguments are named as if it draws the top border:\n        //\n        //    - `len` the length of the edge\n        //    - `Wtop` the width of the edge (i.e. border-top-width)\n        //    - `Wleft` the width of the left edge (border-left-width)\n        //    - `Wright` the width of the right edge\n        //    - `rl` and `rl` -- the border radius on the left and right\n        //      (objects containing x and y, for horiz/vertical radius)\n        //    - `transform` -- transformation to apply\n        //\n        function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform) {\n            if (Wtop <= 0) {\n                return;\n            }\n\n            var path, edge = new drawing.Group();\n            setTransform(edge, transform);\n            group.append(edge);\n\n            sanitizeRadius(rl);\n            sanitizeRadius(rr);\n\n            // draw main border.  this is the area without the rounded corners\n            path = new drawing.Path({\n                fill: { color: color },\n                stroke: null\n            });\n            edge.append(path);\n            path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0)\n                .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n                .lineTo(len - Math.max(rr.x, Wright), Wtop)\n                .lineTo(Math.max(rl.x, Wleft), Wtop)\n                .close();\n\n            if (rl.x) {\n                drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n            }\n\n            if (rr.x) {\n                drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n            }\n\n            // draws one round corner, starting at origin (needs to be\n            // translated/rotated to be placed properly).\n            function drawRoundCorner(Wright, r, transform) {\n                var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n                // not sanitizing this one, because negative values\n                // are useful to fill the box correctly.\n                var ri = {\n                    x: r.x - Wright,\n                    y: r.y - Wtop\n                };\n\n                var path = new drawing.Path({\n                    fill: { color: color },\n                    stroke: null\n                }).moveTo(0, 0);\n\n                setTransform(path, transform);\n\n                addArcToPath(path, 0, r.y, {\n                    startAngle: -90,\n                    endAngle: -radiansToDegrees(angle),\n                    radiusX: r.x,\n                    radiusY: r.y\n                });\n\n                if (ri.x > 0 && ri.y > 0) {\n                    path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n                    addArcToPath(path, 0, r.y, {\n                        startAngle: -radiansToDegrees(angle),\n                        endAngle: -90,\n                        radiusX: ri.x,\n                        radiusY: ri.y,\n                        anticlockwise: true\n                    });\n                }\n                else if (ri.x > 0) {\n                    path.lineTo(ri.x, Wtop)\n                        .lineTo(0, Wtop);\n                }\n                else {\n                    path.lineTo(ri.x, Wtop)\n                        .lineTo(ri.x, 0);\n                }\n\n                edge.append(path.close());\n            }\n        }\n\n        function drawBackground(box) {\n            var background = new drawing.Group();\n            setClipping(background, roundBox(box, rTL, rTR, rBR, rBL));\n            group.append(background);\n\n            if (backgroundColor) {\n                var path = new drawing.Path({\n                    fill: { color: backgroundColor.toCssRgba() },\n                    stroke: null\n                });\n                path.moveTo(box.left, box.top)\n                    .lineTo(box.right, box.top)\n                    .lineTo(box.right, box.bottom)\n                    .lineTo(box.left, box.bottom)\n                    .close();\n                background.append(path);\n            }\n\n            var bgImage, bgRepeat, bgPosition, bgOrigin, bgSize;\n\n            for (var i = backgroundImage.length; --i >= 0;) {\n                bgImage = backgroundImage[i];\n                bgRepeat = backgroundRepeat[i] || backgroundRepeat[backgroundRepeat.length - 1];\n                bgPosition = backgroundPosition[i] || backgroundPosition[backgroundPosition.length - 1];\n                bgOrigin = backgroundOrigin[i] || backgroundOrigin[backgroundOrigin.length - 1];\n                bgSize = backgroundSize[i] || backgroundSize[backgroundSize.length - 1];\n                drawOneBackground( background, box, bgImage, bgRepeat, bgPosition, bgOrigin, bgSize );\n            }\n        }\n\n        function drawOneBackground(group, box, backgroundImage, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n            if (!backgroundImage || (backgroundImage == \"none\")) {\n                return;\n            }\n\n            // SVG taints the canvas, can't draw it.\n            if (/^url\\(\\\"data:image\\/svg/i.test(backgroundImage)) {\n                return;\n            }\n\n            var url = backgroundImageURL(backgroundImage);\n            if (url) {\n                var img = IMAGE_CACHE[url];\n                if (img && img.width > 0 && img.height > 0) {\n                    drawBackgroundImage(group, box, img.width, img.height, function(group, rect){\n                        group.append(new drawing.Image(url, rect));\n                    });\n                }\n            }\n            else {\n                var gradient = parseGradient(backgroundImage);\n                if (gradient) {\n                    drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(gradient));\n                }\n            }\n\n            function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n                var aspect_ratio = img_width / img_height;\n\n                // for background-origin: border-box the box is already appropriate\n                var orgBox = box;\n                if (backgroundOrigin == \"content-box\") {\n                    orgBox = innerBox(orgBox, \"border-*-width\", element);\n                    orgBox = innerBox(orgBox, \"padding-*\", element);\n                } else if (backgroundOrigin == \"padding-box\") {\n                    orgBox = innerBox(orgBox, \"border-*-width\", element);\n                }\n\n                if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n                    var size = backgroundSize.split(/\\s+/g);\n                    // compute width\n                    if (/%$/.test(size[0])) {\n                        img_width = orgBox.width * parseFloat(size[0]) / 100;\n                    } else {\n                        img_width = parseFloat(size[0]);\n                    }\n                    // compute height\n                    if (size.length == 1 || size[1] == \"auto\") {\n                        img_height = img_width / aspect_ratio;\n                    } else if (/%$/.test(size[1])) {\n                        img_height = orgBox.height * parseFloat(size[1]) / 100;\n                    } else {\n                        img_height = parseFloat(size[1]);\n                    }\n                }\n\n                var pos = (backgroundPosition+\"\").split(/\\s+/);\n                if (pos.length == 1) {\n                    pos[1] = \"50%\";\n                }\n\n                if (/%$/.test(pos[0])) {\n                    pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n                } else {\n                    pos[0] = parseFloat(pos[0]);\n                }\n                if (/%$/.test(pos[1])) {\n                    pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n                } else {\n                    pos[1] = parseFloat(pos[1]);\n                }\n\n                var rect = new geo.Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n                // XXX: background-repeat could be implemented more\n                //      efficiently as a fill pattern (at least for PDF\n                //      output, probably SVG too).\n\n                function rewX() {\n                    while (rect.origin.x > box.left) {\n                        rect.origin.x -= img_width;\n                    }\n                }\n\n                function rewY() {\n                    while (rect.origin.y > box.top) {\n                        rect.origin.y -= img_height;\n                    }\n                }\n\n                function repeatX() {\n                    while (rect.origin.x < box.right) {\n                        renderBG(group, rect.clone());\n                        rect.origin.x += img_width;\n                    }\n                }\n\n                if (backgroundRepeat == \"no-repeat\") {\n                    renderBG(group, rect);\n                }\n                else if (backgroundRepeat == \"repeat-x\") {\n                    rewX();\n                    repeatX();\n                }\n                else if (backgroundRepeat == \"repeat-y\") {\n                    rewY();\n                    while (rect.origin.y < box.bottom) {\n                        renderBG(group, rect.clone());\n                        rect.origin.y += img_height;\n                    }\n                }\n                else if (backgroundRepeat == \"repeat\") {\n                    rewX();\n                    rewY();\n                    var origin = rect.origin.clone();\n                    while (rect.origin.y < box.bottom) {\n                        rect.origin.x = origin.x;\n                        repeatX();\n                        rect.origin.y += img_height;\n                    }\n                }\n            }\n        }\n\n        function drawBullet(box) {\n            var listStyleType = getPropertyValue(style, \"list-style-type\");\n            if (listStyleType == \"none\") {\n                return;\n            }\n            var listStyleImage = getPropertyValue(style, \"list-style-image\");\n            var listStylePosition = getPropertyValue(style, \"list-style-position\");\n\n            function _drawBullet(f) {\n                saveStyle(element, function(){\n                    element.style.position = \"relative\";\n                    var bullet = document.createElement(KENDO_PSEUDO_ELEMENT);\n                    bullet.style.position = \"absolute\";\n                    bullet.style.boxSizing = \"border-box\";\n                    if (listStylePosition == \"outside\") {\n                        bullet.style.width = \"6em\";\n                        bullet.style.left = \"-6.8em\";\n                        bullet.style.textAlign = \"right\";\n                    } else {\n                        bullet.style.left = \"0px\";\n                    }\n                    f(bullet);\n                    element.insertBefore(bullet, element.firstChild);\n                    renderElement(bullet, group);\n                    element.removeChild(bullet);\n                });\n            }\n\n            function elementIndex(f) {\n                var a = element.parentNode.children;\n                for (var i = 0; i < a.length; ++i) {\n                    if (a[i] === element) {\n                        return f(i, a.length);\n                    }\n                }\n            }\n\n            switch (listStyleType) {\n              case \"circle\":\n              case \"disc\":\n              case \"square\":\n                _drawBullet(function(bullet){\n                    // XXX: the science behind these values is called \"trial and error\".\n                    //      also, ZapfDingbats works well in PDF output, but not in SVG/Canvas.\n                    bullet.style.fontSize = \"70%\";\n                    bullet.style.lineHeight = \"150%\";\n                    bullet.style.paddingRight = \"0.5em\";\n                    bullet.style.fontFamily = \"ZapfDingbats\";\n                    bullet.innerHTML = {\n                        \"disc\"   : \"l\",\n                        \"circle\" : \"m\",\n                        \"square\" : \"n\"\n                    }[listStyleType];\n                });\n                break;\n\n              case \"decimal\":\n              case \"decimal-leading-zero\":\n                _drawBullet(function(bullet){\n                    elementIndex(function(idx, len){\n                        ++idx;\n                        if (listStyleType == \"decimal-leading-zero\" && (idx+\"\").length < 2) {\n                            idx = \"0\" + idx;\n                        }\n                        bullet.innerHTML = idx + \".\";\n                    });\n                });\n                break;\n\n              case \"lower-roman\":\n              case \"upper-roman\":\n                _drawBullet(function(bullet){\n                    elementIndex(function(idx, len){\n                        idx = romanNumeral(idx + 1);\n                        if (listStyleType == \"upper-roman\") {\n                            idx = idx.toUpperCase();\n                        }\n                        bullet.innerHTML = idx + \".\";\n                    });\n                });\n                break;\n\n              case \"lower-latin\":\n              case \"lower-alpha\":\n              case \"upper-latin\":\n              case \"upper-alpha\":\n                _drawBullet(function(bullet){\n                    elementIndex(function(idx, len){\n                        idx = alphaNumeral(idx);\n                        if (/^upper/i.test(listStyleType)) {\n                            idx = idx.toUpperCase();\n                        }\n                        bullet.innerHTML = idx + \".\";\n                    });\n                });\n                break;\n            }\n        }\n\n        // draws a single border box\n        function drawOneBox(box, isFirst, isLast) {\n            if (box.width === 0 || box.height === 0) {\n                return;\n            }\n\n            drawBackground(box);\n\n            var shouldDrawLeft = (left.width > 0 && ((isFirst && dir == \"ltr\") || (isLast && dir == \"rtl\")));\n            var shouldDrawRight = (right.width > 0 && ((isLast && dir == \"ltr\") || (isFirst && dir == \"rtl\")));\n\n            // The most general case is that the 4 borders have different widths and border\n            // radiuses.  The way that is handled is by drawing 3 Paths for each border: the\n            // straight line, and two round corners which represent half of the entire rounded\n            // corner.  To simplify code those shapes are drawed at origin (by the drawEdge\n            // function), then translated/rotated into the right position.\n            //\n            // However, this leads to poor results due to rounding in the simpler cases where\n            // borders are straight lines.  Therefore we handle a few such cases separately with\n            // straight lines. C^wC^wC^w -- nope, scratch that.  poor rendering was because of a bug\n            // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n            // web dev is still a ghetto.)\n\n            // first, just in case there is no border...\n            if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n                return;\n            }\n\n            if (true) { // so that it's easy to comment out..  uglifyjs will drop the spurious if.\n\n                // if all borders have equal colors...\n                if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n                    // if same widths too, we can draw the whole border by stroking a single path.\n                    if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n                    {\n                        if (shouldDrawLeft && shouldDrawRight) {\n                            // reduce box by half the border width, so we can draw it by stroking.\n                            box = innerBox(box, top.width/2);\n\n                            // adjust the border radiuses, again by top.width/2, and make the path element.\n                            var path = elementRoundBox(element, box, top.width/2);\n                            path.options.stroke = {\n                                color: top.color,\n                                width: top.width\n                            };\n                            group.append(path);\n                            return;\n                        }\n                    }\n                }\n\n                // if border radiuses are zero and widths are at most one pixel, we can again use simple\n                // paths.\n                if (rTL.x === 0 && rTR.x === 0 && rBR.x === 0 && rBL.x === 0) {\n                    // alright, 1.9px will do as well.  the difference in color blending should not be\n                    // noticeable.\n                    if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n                        // top border\n                        if (top.width > 0) {\n                            group.append(\n                                new drawing.Path({\n                                    stroke: { width: top.width, color: top.color }\n                                })\n                                    .moveTo(box.left, box.top + top.width/2)\n                                    .lineTo(box.right, box.top + top.width/2)\n                            );\n                        }\n\n                        // bottom border\n                        if (bottom.width > 0) {\n                            group.append(\n                                new drawing.Path({\n                                    stroke: { width: bottom.width, color: bottom.color }\n                                })\n                                    .moveTo(box.left, box.bottom - bottom.width/2)\n                                    .lineTo(box.right, box.bottom - bottom.width/2)\n                            );\n                        }\n\n                        // left border\n                        if (shouldDrawLeft) {\n                            group.append(\n                                new drawing.Path({\n                                    stroke: { width: left.width, color: left.color }\n                                })\n                                    .moveTo(box.left + left.width/2, box.top)\n                                    .lineTo(box.left + left.width/2, box.bottom)\n                            );\n                        }\n\n                        // right border\n                        if (shouldDrawRight) {\n                            group.append(\n                                new drawing.Path({\n                                    stroke: { width: right.width, color: right.color }\n                                })\n                                    .moveTo(box.right - right.width/2, box.top)\n                                    .lineTo(box.right - right.width/2, box.bottom)\n                            );\n                        }\n\n                        return;\n                    }\n                }\n\n            }\n\n            // top border\n            drawEdge(top.color,\n                     box.width, top.width, left.width, right.width,\n                     rTL, rTR,\n                     [ 1, 0, 0, 1, box.left, box.top ]);\n\n            // bottom border\n            drawEdge(bottom.color,\n                     box.width, bottom.width, right.width, left.width,\n                     rBR, rBL,\n                     [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n            // for left/right borders we need to invert the border-radiuses\n            function inv(p) {\n                return { x: p.y, y: p.x };\n            }\n\n            // left border\n            drawEdge(left.color,\n                     box.height, left.width, bottom.width, top.width,\n                     inv(rBL), inv(rTL),\n                     [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n            // right border\n            drawEdge(right.color,\n                     box.height, right.width, top.width, bottom.width,\n                     inv(rTR), inv(rBR),\n                     [ 0, 1, -1, 0, box.right, box.top ]);\n        }\n    }\n\n    function gradientRenderer(gradient) {\n        return function(group, rect) {\n            var width = rect.width(), height = rect.height(), tl = rect.topLeft();\n\n            switch (gradient.type) {\n              case \"linear\":\n\n                // figure out the angle.\n                var angle = gradient.angle != null ? gradient.angle : Math.PI;\n                switch (gradient.to) {\n                  case \"top\":\n                    angle = 0;\n                    break;\n                  case \"left\":\n                    angle = -Math.PI / 2;\n                    break;\n                  case \"bottom\":\n                    angle = Math.PI;\n                    break;\n                  case \"right\":\n                    angle = Math.PI / 2;\n                    break;\n                  case \"top left\": case \"left top\":\n                    angle = -Math.atan2(height, width);\n                    break;\n                  case \"top right\": case \"right top\":\n                    angle = Math.atan2(height, width);\n                    break;\n                  case \"bottom left\": case \"left bottom\":\n                    angle = Math.PI + Math.atan2(height, width);\n                    break;\n                  case \"bottom right\": case \"right bottom\":\n                    angle = Math.PI - Math.atan2(height, width);\n                    break;\n                }\n\n                if (gradient.reverse) {\n                    angle -= Math.PI;\n                }\n\n                // limit the angle between 0..2PI\n                angle %= 2 * Math.PI;\n                if (angle < 0) {\n                    angle += 2 * Math.PI;\n                }\n\n                // compute gradient's start/end points.  here len is the length of the gradient line\n                // and x,y is the end point relative to the center of the rectangle in conventional\n                // (math) axis direction.\n\n                // this is the original (unscaled) length of the gradient line.  needed to deal with\n                // absolutely positioned color stops.  formula from the CSS spec:\n                // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n                var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n                // The math below is pretty simple, but it took a while to figure out.  We compute x\n                // and y, the *end* of the gradient line.  However, we want to transform them into\n                // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\").  That means,\n                // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n                // bottom edge.\n                //\n                // A naive approach would use the original angle for these calculations.  Say we'd\n                // like to draw a gradient angled at 45deg in a 100x400 box.  When we use\n                // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n                // scale that to the desired dimensions.  The 45deg angle will look more like 70deg\n                // after scaling.  SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n                // the following:\n                //\n                //     When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n                //     identity matrix, the normal of the linear gradient is perpendicular to the\n                //     gradient vector in object bounding box space (i.e., the abstract coordinate\n                //     system where (0,0) is at the top/left of the object bounding box and (1,1) is\n                //     at the bottom/right of the object bounding box). When the object's bounding\n                //     box is not square, the gradient normal which is initially perpendicular to\n                //     the gradient vector within object bounding box space may render\n                //     non-perpendicular relative to the gradient vector in user space. If the\n                //     gradient vector is parallel to one of the axes of the bounding box, the\n                //     gradient normal will remain perpendicular. This transformation is due to\n                //     application of the non-uniform scaling transformation from bounding box space\n                //     to user space.\n                //\n                // which is an extremely long and confusing way to tell what I just said above.\n                //\n                // For this reason we need to apply the reverse scaling to the original angle, so\n                // that when it'll finally be rendered it'll actually be at the desired slope.  Now\n                // I'll let you figure out the math yourself.\n\n                var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n                var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n                var len = Math.abs(sin) + Math.abs(cos);\n                var x = len/2 * sin;\n                var y = len/2 * cos;\n\n                // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n                // losing the intended direction of the gradient.  The following fixes it.\n                if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n                    x = -x;\n                    y = -y;\n                }\n\n                // compute the color stops.\n                var implicit = [], right = 0;\n                var stops = gradient.stops.map(function(s, i){\n                    var offset = s.percent;\n                    if (offset) {\n                        offset = parseFloat(offset) / 100;\n                    } else if (s.length) {\n                        offset = parseFloat(s.length) / pxlen;\n                    } else if (i === 0) {\n                        offset = 0;\n                    } else if (i == gradient.stops.length - 1) {\n                        offset = 1;\n                    }\n                    var stop = {\n                        color: s.color.toCssRgba(),\n                        offset: offset\n                    };\n                    if (offset != null) {\n                        right = offset;\n                        // fix implicit offsets\n                        implicit.forEach(function(s, i){\n                            var stop = s.stop;\n                            stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n                        });\n                        implicit = [];\n                    } else {\n                        implicit.push({ left: right, stop: stop });\n                    }\n                    return stop;\n                });\n\n                var start = [ 0.5 - x, 0.5 + y ];\n                var end = [ 0.5 + x, 0.5 - y ];\n\n                // finally, draw it.\n                group.append(\n                    drawing.Path.fromRect(rect)\n                        .stroke(null)\n                        .fill(new drawing.LinearGradient({\n                            start     : start,\n                            end       : end,\n                            stops     : stops,\n                            userSpace : false\n                        }))\n                );\n                break;\n              case \"radial\":\n                // XXX:\n                if (window.console && window.console.log) {\n                    window.console.log(\"Radial gradients are not yet supported in HTML renderer\");\n                }\n                break;\n            }\n        };\n    }\n\n    function maybeRenderWidget(element, group) {\n        if (element.getAttribute(kendo.attr(\"role\"))) {\n            var widget = kendo.widgetInstance($(element));\n            if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n                var visual;\n                if (widget.exportDOMVisual) {\n                    visual = widget.exportDOMVisual();\n                } else {\n                    visual = widget.exportVisual();\n                }\n\n                var wrap = new drawing.Group();\n                wrap.children.push(visual);\n\n                var bbox = element.getBoundingClientRect();\n                wrap.transform(geo.transform().translate(bbox.left, bbox.top));\n\n                group.append(wrap);\n\n                return true;\n            }\n        }\n    }\n\n    function renderImage(element, url, group) {\n        var box = getContentBox(element);\n        var rect = new geo.Rect([ box.left, box.top ], [ box.width, box.height ]);\n        var image = new drawing.Image(url, rect);\n        setClipping(image, elementRoundBox(element, box, \"content\"));\n        group.append(image);\n    }\n\n    function zIndexSort(a, b) {\n        var sa = getComputedStyle(a);\n        var sb = getComputedStyle(b);\n        var za = parseFloat(getPropertyValue(sa, \"z-index\"));\n        var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\n        var pa = getPropertyValue(sa, \"position\");\n        var pb = getPropertyValue(sb, \"position\");\n        if (isNaN(za) && isNaN(zb)) {\n            if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\n                return 0;\n            }\n            if (pa == \"static\") {\n                return -1;\n            }\n            if (pb == \"static\") {\n                return 1;\n            }\n            return 0;\n        }\n        if (isNaN(za)) {\n            return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n        }\n        if (isNaN(zb)) {\n            return za === 0 ? 0 : za > 0 ? 1 : -1;\n        }\n        return parseFloat(za) - parseFloat(zb);\n    }\n\n    function renderContents(element, group) {\n        switch (element.tagName.toLowerCase()) {\n          case \"img\":\n            renderImage(element, element.src, group);\n            break;\n\n          case \"canvas\":\n            try {\n                renderImage(element, element.toDataURL(\"image/jpeg\"), group);\n            } catch(ex) {\n                // tainted; can't draw it, ignore.\n            }\n            break;\n\n          case \"textarea\":\n          case \"input\":\n            break;\n\n          default:\n            var blocks = [], floats = [], inline = [], positioned = [];\n            for (var i = element.firstChild; i; i = i.nextSibling) {\n                switch (i.nodeType) {\n                  case 3:         // Text\n                    if (/\\S/.test(i.data)) {\n                        renderText(element, i, group);\n                    }\n                    break;\n                  case 1:         // Element\n                    var style = getComputedStyle(i);\n                    var display = getPropertyValue(style, \"display\");\n                    var floating = getPropertyValue(style, \"float\");\n                    var position = getPropertyValue(style, \"position\");\n                    if (position != \"static\") {\n                        positioned.push(i);\n                    }\n                    else if (display != \"inline\") {\n                        if (floating != \"none\") {\n                            floats.push(i);\n                        } else {\n                            blocks.push(i);\n                        }\n                    }\n                    else {\n                        inline.push(i);\n                    }\n                    break;\n                }\n            }\n\n            blocks.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\n            floats.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\n            inline.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\n            positioned.sort(zIndexSort).forEach(function(el){ renderElement(el, group); });\n        }\n    }\n\n    function renderText(element, node, group) {\n        var style = getComputedStyle(element);\n\n        if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n            // assume it should not be displayed.  the slider's\n            // draggable handle displays a Drag text for some reason,\n            // having text-indent: -3333px.\n            return;\n        }\n\n        var text = node.data;\n        var range = element.ownerDocument.createRange();\n        var align = getPropertyValue(style, \"text-align\");\n        var isJustified = align == \"justify\";\n\n        // skip whitespace\n        var start = 0;\n        var end = /\\S\\s*$/.exec(node.data).index + 1;\n\n        function doChunk() {\n            while (!/\\S/.test(text.charAt(start))) {\n                if (start >= end) {\n                    return true;\n                }\n                start++;\n            }\n            range.setStart(node, start);\n            var len = 0;\n            while (++start <= end) {\n                ++len;\n                range.setEnd(node, start);\n\n                // for justified text we must split at each space, as\n                // space has variable width.  otherwise we can\n                // optimize and split only at end of line (i.e. when a\n                // new rectangle would be created).\n                if (len > 1 && ((isJustified && /\\s/.test(text.charAt(start - 1))) || range.getClientRects().length > 1)) {\n                    //\n                    // In IE, getClientRects for a <li> element will return an additional rectangle for the bullet, but\n                    // *only* when only the first char in the LI is selected.  Checking if len > 1 above appears to be a\n                    // good workaround.\n                    //\n                    //// DEBUG\n                    // Array.prototype.slice.call(range.getClientRects()).concat([ range.getBoundingClientRect() ]).forEach(function(r){\n                    //     $(\"<div>\").css({\n                    //         position  : \"absolute\",\n                    //         left      : r.left + \"px\",\n                    //         top       : r.top + \"px\",\n                    //         width     : r.right - r.left + \"px\",\n                    //         height    : r.bottom - r.top + \"px\",\n                    //         boxSizing : \"border-box\",\n                    //         border    : \"1px solid red\"\n                    //     }).appendTo(document.body);\n                    // });\n                    range.setEnd(node, --start);\n                    break;\n                }\n            }\n\n            // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n            // elements.  Calling getClientRects() and using the *first* rect appears to give us the correct location.\n            var box = range.getClientRects()[0];\n\n            var str = range.toString().replace(/\\s+$/, \"\");\n            drawText(str, box);\n        }\n\n        var fontSize = getPropertyValue(style, \"font-size\");\n        var lineHeight = getPropertyValue(style, \"line-height\");\n\n        // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n        var font = [\n            getPropertyValue(style, \"font-style\"),\n            getPropertyValue(style, \"font-variant\"),\n            getPropertyValue(style, \"font-weight\"),\n            fontSize, // no need for line height here; it breaks layout in FF\n            getPropertyValue(style, \"font-family\")\n        ].join(\" \");\n\n        fontSize = parseFloat(fontSize);\n        lineHeight = parseFloat(lineHeight);\n\n        if (fontSize === 0) {\n            return;\n        }\n\n        var color = getPropertyValue(style, \"color\");\n\n        function drawText(str, box) {\n            str = str.replace(/[\\r\\n ]+/g, \" \");\n\n            // In IE the box height will be approximately lineHeight, while in\n            // other browsers it'll (correctly) be the height of the bounding\n            // box for the current text/font.  Which is to say, IE sucks again.\n            // The only good solution I can think of is to measure the text\n            // ourselves and center the bounding box.\n            if (browser.msie && !isNaN(lineHeight)) {\n                var size = drawing.util.measureText(str, { font: font });\n                var top = (box.top + box.bottom - size.height) / 2;\n                box = {\n                    top    : top,\n                    right  : box.right,\n                    bottom : top + size.height,\n                    left   : box.left,\n                    height : size.height,\n                    width  : box.right - box.left\n                };\n            }\n\n            // var path = new drawing.Path({ stroke: { color: \"red\" }});\n            // path.moveTo(box.left, box.top)\n            //     .lineTo(box.right, box.top)\n            //     .lineTo(box.right, box.bottom)\n            //     .lineTo(box.left, box.bottom)\n            //     .close();\n            // group.append(path);\n\n            var text = new drawing.Text(str, new geo.Point(box.left, box.top), {\n                font: font,\n                fill: { color: color }\n            });\n            group.append(text);\n            decorate(box);\n        }\n\n        function decorate(box) {\n            line(nodeInfo[\"underline\"], box.bottom);\n            line(nodeInfo[\"line-through\"], box.bottom - box.height / 2.7);\n            line(nodeInfo[\"overline\"], box.top);\n            function line(color, ypos) {\n                if (color) {\n                    var width = fontSize / 12;\n                    var path = new drawing.Path({ stroke: {\n                        width: width,\n                        color: color\n                    }});\n\n                    ypos -= width;\n                    path.moveTo(box.left, ypos)\n                        .lineTo(box.right, ypos);\n                    group.append(path);\n                }\n            }\n        }\n\n        while (!doChunk()) {}\n    }\n\n    function groupInStackingContext(group, zIndex) {\n        var main = nodeInfo._stackingContext.group;\n        var a = main.children;\n        for (var i = 0; i < a.length; ++i) {\n            if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n                break;\n            }\n        }\n\n        var tmp = new drawing.Group();\n        main.insertAt(tmp, i);\n        tmp._dom_zIndex = zIndex;\n\n        // if (nodeInfo._matrix) {\n        //     tmp.transform(nodeInfo._matrix);\n        // }\n        if (nodeInfo._clipbox) {\n            tmp.clip(drawing.Path.fromRect(nodeInfo._clipbox));\n        }\n\n        return tmp;\n    }\n\n    function renderElement(element, container) {\n        var style = getComputedStyle(element);\n\n        var counterReset = getPropertyValue(style, \"counter-reset\");\n        if (counterReset) {\n            doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n        }\n\n        var counterIncrement = getPropertyValue(style, \"counter-increment\");\n        if (counterIncrement) {\n            doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n        }\n\n        if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n            return;\n        }\n\n        if (nodeInfo._clipbox == null) {\n            return;\n        }\n\n        var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n        var visibility = getPropertyValue(style, \"visibility\");\n        var display = getPropertyValue(style, \"display\");\n\n        if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n            return;\n        }\n\n        var tr = getTransform(style);\n        var group;\n\n        var zIndex = getPropertyValue(style, \"z-index\");\n        if ((tr || opacity < 1) && zIndex == \"auto\") {\n            zIndex = 0;\n        }\n        if (zIndex != \"auto\") {\n            group = groupInStackingContext(container, zIndex);\n        } else {\n            group = new drawing.Group();\n            container.append(group);\n        }\n\n        // XXX: remove at some point\n        group.DEBUG = $(element).data(\"debug\");\n\n        if (opacity < 1) {\n            group.opacity(opacity * group.opacity());\n        }\n\n        pushNodeInfo(element, style, group);\n\n        if (!tr) {\n            _renderWithPseudoElements(element, group);\n        }\n        else {\n            saveStyle(element, function(){\n                // must clear transform, so getBoundingClientRect returns correct values.\n                pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n                // must also clear transitions, so correct values are returned *immediately*\n                pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n                // the presence of any transform makes it behave like it had position: relative,\n                // because why not.\n                // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n                if (getPropertyValue(style, \"position\") == \"static\") {\n                    // but only if it's not already positioned. :-/\n                    pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n                }\n\n                // must translate to origin before applying the CSS\n                // transformation, then translate back.\n                var bbox = element.getBoundingClientRect();\n                var x = bbox.left + tr.origin[0];\n                var y = bbox.top + tr.origin[1];\n                var m = [ 1, 0, 0, 1, -x, -y ];\n                m = mmul(m, tr.matrix);\n                m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n                m = setTransform(group, m);\n\n                nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n                _renderWithPseudoElements(element, group);\n            });\n        }\n\n        popNodeInfo();\n\n        //drawDebugBox(element, container);\n    }\n\n    function drawDebugBox(element, group) {\n        var box = element.getBoundingClientRect();\n        var path = drawing.Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n        group.append(path);\n    }\n\n    function mmul(a, b) {\n        var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n        var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n        return [\n            a1*a2 + b1*c2,          a1*b2 + b1*d2,\n            c1*a2 + d1*c2,          c1*b2 + d1*d2,\n            e1*a2 + f1*c2 + e2,     e1*b2 + f1*d2 + f2\n        ];\n    }\n\n})(window.kendo.jQuery, parseFloat, Math);\n\n(function ($, Math) {\n    // Imports ================================================================\n    var doc = document,\n        noop = $.noop,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        util = kendo.util,\n\n        animationFrame = kendo.animationFrame,\n        deepExtend = kendo.deepExtend;\n\n    // Base element animation ================================================\n    var Animation = Class.extend({\n        init: function(element, options) {\n            var anim = this;\n\n            anim.options = deepExtend({}, anim.options, options);\n            anim.element = element;\n        },\n\n        options: {\n            duration: 500,\n            easing: \"swing\"\n        },\n\n        setup: noop,\n        step: noop,\n\n        play: function() {\n            var anim = this,\n                options = anim.options,\n                easing = $.easing[options.easing],\n                duration = options.duration,\n                delay = options.delay || 0,\n                start = util.now() + delay,\n                finish = start + duration;\n\n            if (duration === 0) {\n                anim.step(1);\n                anim.abort();\n            } else {\n                setTimeout(function() {\n                    var loop = function() {\n                        if (anim._stopped) {\n                            return;\n                        }\n\n                        var wallTime = util.now();\n\n                        var time = util.limitValue(wallTime - start, 0, duration);\n                        var pos = time / duration;\n                        var easingPos = easing(pos, time, 0, 1, duration);\n\n                        anim.step(easingPos);\n\n                        if (wallTime < finish) {\n                            animationFrame(loop);\n                        } else {\n                            anim.abort();\n                        }\n                    };\n\n                    loop();\n                }, delay);\n            }\n        },\n\n        abort: function() {\n            this._stopped = true;\n        },\n\n        destroy: function() {\n            this.abort();\n        }\n    });\n\n    // Animation factory =====================================================\n    var AnimationFactory = function() {\n        this._items = [];\n    };\n\n    AnimationFactory.prototype = {\n        register: function(name, type) {\n            this._items.push({\n                name: name,\n                type: type\n            });\n        },\n\n        create: function(element, options) {\n            var items = this._items;\n            var match;\n\n            if (options && options.type) {\n                var type = options.type.toLowerCase();\n                for (var i = 0; i < items.length; i++) {\n                    if (items[i].name.toLowerCase() === type) {\n                        match = items[i];\n                        break;\n                    }\n                }\n            }\n\n            if (match) {\n                return new match.type(element, options);\n            }\n        }\n    };\n\n    AnimationFactory.current = new AnimationFactory();\n\n    Animation.create = function(type, element, options) {\n        return AnimationFactory.current.create(type, element, options);\n    };\n\n    // Exports ================================================================\n    deepExtend(kendo.drawing, {\n        Animation: Animation,\n        AnimationFactory: AnimationFactory\n    });\n\n})(window.kendo.jQuery, Math);\n\n\n\n\n\n/* jshint eqnull: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        NS = \".kendoValidator\",\n        INVALIDMSG = \"k-invalid-msg\",\n        invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\n        INVALIDINPUT = \"k-invalid\",\n        emailRegExp = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,\n        urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\n        INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\n        CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\n        NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\n        BLUR = \"blur\",\n        NAME = \"name\",\n        FORM = \"form\",\n        NOVALIDATE = \"novalidate\",\n        proxy = $.proxy,\n        patternMatcher = function(value, pattern) {\n            if (typeof pattern === \"string\") {\n                pattern = new RegExp('^(?:' + pattern + ')$');\n            }\n            return pattern.test(value);\n        },\n        matcher = function(input, selector, pattern) {\n            var value = input.val();\n\n            if (input.filter(selector).length && value !== \"\") {\n                return patternMatcher(value, pattern);\n            }\n            return true;\n        },\n        hasAttribute = function(input, name) {\n            if (input.length)  {\n                return input[0].attributes[name] != null;\n            }\n            return false;\n        };\n\n    if (!kendo.ui.validator) {\n        kendo.ui.validator = { rules: {}, messages: {} };\n    }\n\n    function resolveRules(element) {\n        var resolvers = kendo.ui.validator.ruleResolvers || {},\n            rules = {},\n            name;\n\n        for (name in resolvers) {\n            $.extend(true, rules, resolvers[name].resolve(element));\n        }\n        return rules;\n    }\n\n    function decode(value) {\n        return value.replace(/&amp/g, '&amp;')\n            .replace(/&quot;/g, '\"')\n            .replace(/&#39;/g, \"'\")\n            .replace(/&lt;/g, '<')\n            .replace(/&gt;/g, '>');\n    }\n\n    function numberOfDecimalDigits(value) {\n        value = (value + \"\").split('.');\n        if (value.length > 1) {\n            return value[1].length;\n        }\n        return 0;\n    }\n\n    function parseHtml(text) {\n        if ($.parseHTML) {\n            return $($.parseHTML(text));\n        }\n        return $(text);\n    }\n\n    function searchForMessageContainer(elements, fieldName) {\n        var containers = $(),\n            element,\n            attr;\n\n        for (var idx = 0, length = elements.length; idx < length; idx++) {\n            element = elements[idx];\n            if (invalidMsgRegExp.test(element.className)) {\n                attr = element.getAttribute(kendo.attr(\"for\"));\n                if (attr === fieldName) {\n                    containers = containers.add(element);\n                }\n            }\n        }\n        return containers;\n    }\n\n    var Validator = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                resolved = resolveRules(element),\n                validateAttributeSelector = \"[\" + kendo.attr(\"validate\") + \"!=false]\";\n\n            options = options || {};\n\n            options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n            options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n\n            Widget.fn.init.call(that, element, options);\n\n            that._errorTemplate = kendo.template(that.options.errorTemplate);\n\n            if (that.element.is(FORM)) {\n                that.element.attr(NOVALIDATE, NOVALIDATE);\n            }\n\n            that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n            that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n\n            that._errors = {};\n            that._attachEvents();\n            that._isValidated = false;\n        },\n\n        events: [ \"validate\", \"change\" ],\n\n        options: {\n            name: \"Validator\",\n            errorTemplate: '<span class=\"k-widget k-tooltip k-tooltip-validation\">' +\n                '<span class=\"k-icon k-warning\"> </span> #=message#</span>',\n            messages: {\n                required: \"{0} is required\",\n                pattern: \"{0} is not valid\",\n                min: \"{0} should be greater than or equal to {1}\",\n                max: \"{0} should be smaller than or equal to {1}\",\n                step: \"{0} is not valid\",\n                email: \"{0} is not valid email\",\n                url: \"{0} is not valid URL\",\n                date: \"{0} is not valid date\"\n            },\n            rules: {\n                required: function(input) {\n                    var checkbox = input.filter(\"[type=checkbox]\").length && !input.is(\":checked\"),\n                        value = input.val();\n\n                    return !(hasAttribute(input, \"required\") && (value === \"\" || !value  || checkbox));\n                },\n                pattern: function(input) {\n                    if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\n                        return patternMatcher(input.val(), input.attr(\"pattern\"));\n                    }\n                    return true;\n                },\n                min: function(input) {\n                    if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\n                        var min = parseFloat(input.attr(\"min\")) || 0,\n                            val = kendo.parseFloat(input.val());\n\n                        return min <= val;\n                    }\n                    return true;\n                },\n                max: function(input) {\n                    if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\n                        var max = parseFloat(input.attr(\"max\")) || 0,\n                            val = kendo.parseFloat(input.val());\n\n                        return max >= val;\n                    }\n                    return true;\n                },\n                step: function(input) {\n                    if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\n                        var min = parseFloat(input.attr(\"min\")) || 0,\n                            step = parseFloat(input.attr(\"step\")) || 1,\n                            val = parseFloat(input.val()),\n                            decimals = numberOfDecimalDigits(step),\n                            raise;\n\n                        if (decimals) {\n                            raise = Math.pow(10, decimals);\n                            return ((Math.floor((val-min)*raise))%(step*raise)) / Math.pow(100, decimals) === 0;\n                        }\n                        return ((val-min)%step) === 0;\n                    }\n                    return true;\n                },\n                email: function(input) {\n                    return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\n                },\n                url: function(input) {\n                    return matcher(input, \"[type=url],[\" + kendo.attr(\"type\") + \"=url]\", urlRegExp);\n                },\n                date: function(input) {\n                    if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n                        return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n                    }\n                    return true;\n                }\n            },\n            validateOnBlur: true\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this.element.off(NS);\n        },\n\n        value: function() {\n            if (!this._isValidated) {\n                return false;\n            }\n\n            return this.errors().length === 0;\n        },\n\n        _submit: function(e) {\n            if (!this.validate()) {\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n                e.preventDefault();\n                return false;\n            }\n            return true;\n        },\n\n        _checkElement: function(element) {\n            var state = this.value();\n\n            this.validateInput(element);\n\n            if (this.value() !== state) {\n                this.trigger(\"change\");\n            }\n        },\n\n        _attachEvents: function() {\n            var that = this;\n\n            if (that.element.is(FORM)) {\n                that.element.on(\"submit\" + NS, proxy(that._submit, that));\n            }\n\n            if (that.options.validateOnBlur) {\n                if (!that.element.is(INPUTSELECTOR)) {\n                    that.element.on(BLUR + NS, that._inputSelector, function() {\n                        that._checkElement($(this));\n                    });\n\n                    that.element.on(\"click\" + NS, that._checkboxSelector, function() {\n                        that._checkElement($(this));\n                    });\n                } else {\n                    that.element.on(BLUR + NS, function() {\n                        that._checkElement(that.element);\n                    });\n\n                    if (that.element.is(CHECKBOXSELECTOR)) {\n                        that.element.on(\"click\" + NS, function() {\n                            that._checkElement(that.element);\n                        });\n                    }\n                }\n            }\n        },\n\n        validate: function() {\n            var inputs;\n            var idx;\n            var result = false;\n            var length;\n\n            var isValid = this.value();\n\n            this._errors = {};\n\n            if (!this.element.is(INPUTSELECTOR)) {\n                var invalid = false;\n\n                inputs = this.element.find(this._inputSelector);\n\n                for (idx = 0, length = inputs.length; idx < length; idx++) {\n                    if (!this.validateInput(inputs.eq(idx))) {\n                        invalid = true;\n                    }\n                }\n\n                result = !invalid;\n            } else {\n                result = this.validateInput(this.element);\n            }\n\n            this.trigger(\"validate\", { valid: result });\n\n            if (isValid !== result) {\n                this.trigger(\"change\");\n            }\n\n            return result;\n        },\n\n        validateInput: function(input) {\n            input = $(input);\n\n            this._isValidated = true;\n\n            var that = this,\n                template = that._errorTemplate,\n                result = that._checkValidity(input),\n                valid = result.valid,\n                className = \".\" + INVALIDMSG,\n                fieldName = (input.attr(NAME) || \"\"),\n                lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function() {\n                    var element = $(this);\n                    if (element.filter(\"[\" + kendo.attr(\"for\") + \"]\").length) {\n                        return element.attr(kendo.attr(\"for\")) === fieldName;\n                    }\n\n                    return true;\n\n                })).hide(),\n                messageText;\n\n            input.removeAttr(\"aria-invalid\");\n\n            if (!valid) {\n                messageText = that._extractMessage(input, result.key);\n                that._errors[fieldName] = messageText;\n                var messageLabel = parseHtml(template({ message: decode(messageText) }));\n\n                that._decorateMessageContainer(messageLabel, fieldName);\n\n                if (!lbl.replaceWith(messageLabel).length) {\n                    messageLabel.insertAfter(input);\n                }\n                messageLabel.show();\n\n                input.attr(\"aria-invalid\", true);\n            } else {\n                delete that._errors[fieldName];\n            }\n\n            input.toggleClass(INVALIDINPUT, !valid);\n\n            return valid;\n        },\n\n        hideMessages: function() {\n            var that = this,\n                className = \".\" + INVALIDMSG,\n                element = that.element;\n\n            if (!element.is(INPUTSELECTOR)) {\n                element.find(className).hide();\n            } else {\n                element.next(className).hide();\n            }\n        },\n\n        _findMessageContainer: function(fieldName) {\n            var locators = kendo.ui.validator.messageLocators,\n                name,\n                containers = $();\n\n            for (var idx = 0, length = this.element.length; idx < length; idx++) {\n                containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\n            }\n\n            for (name in locators) {\n                containers = containers.add(locators[name].locate(this.element, fieldName));\n            }\n\n            return containers;\n        },\n\n        _decorateMessageContainer: function(container, fieldName) {\n            var locators = kendo.ui.validator.messageLocators,\n                name;\n\n            container.addClass(INVALIDMSG)\n                .attr(kendo.attr(\"for\"), fieldName || \"\");\n\n            for (name in locators) {\n                locators[name].decorate(container, fieldName);\n            }\n\n            container.attr(\"role\", \"alert\");\n        },\n\n        _extractMessage: function(input, ruleKey) {\n            var that = this,\n                customMessage = that.options.messages[ruleKey],\n                fieldName = input.attr(NAME);\n\n            customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\n            return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || input.attr(\"title\") || customMessage || \"\", fieldName, input.attr(ruleKey));\n        },\n\n        _checkValidity: function(input) {\n            var rules = this.options.rules,\n                rule;\n\n            for (rule in rules) {\n                if (!rules[rule].call(this, input)) {\n                    return { valid: false, key: rule };\n                }\n            }\n\n            return { valid: true };\n        },\n\n        errors: function() {\n            var results = [],\n                errors = this._errors,\n                error;\n\n            for (error in errors) {\n                results.push(errors[error]);\n            }\n            return results;\n        }\n    });\n\n    kendo.ui.plugin(Validator);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        support = kendo.support,\n        document = window.document,\n        Class = kendo.Class,\n        Observable = kendo.Observable,\n        now = $.now,\n        extend = $.extend,\n        OS = support.mobileOS,\n        invalidZeroEvents = OS && OS.android,\n        DEFAULT_MIN_HOLD = 800,\n        DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\n\n        // UserEvents events\n        PRESS = \"press\",\n        HOLD = \"hold\",\n        SELECT = \"select\",\n        START = \"start\",\n        MOVE = \"move\",\n        END = \"end\",\n        CANCEL = \"cancel\",\n        TAP = \"tap\",\n        RELEASE = \"release\",\n        GESTURESTART = \"gesturestart\",\n        GESTURECHANGE = \"gesturechange\",\n        GESTUREEND = \"gestureend\",\n        GESTURETAP = \"gesturetap\";\n\n    var THRESHOLD = {\n        \"api\": 0,\n        \"touch\": 0,\n        \"mouse\": 9,\n        \"pointer\": 9\n    };\n\n    var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\n\n    function touchDelta(touch1, touch2) {\n        var x1 = touch1.x.location,\n            y1 = touch1.y.location,\n            x2 = touch2.x.location,\n            y2 = touch2.y.location,\n            dx = x1 - x2,\n            dy = y1 - y2;\n\n        return {\n            center: {\n               x: (x1 + x2) / 2,\n               y: (y1 + y2) / 2\n            },\n\n            distance: Math.sqrt(dx*dx + dy*dy)\n        };\n    }\n\n    function getTouches(e) {\n        var touches = [],\n            originalEvent = e.originalEvent,\n            currentTarget = e.currentTarget,\n            idx = 0, length,\n            changedTouches,\n            touch;\n\n        if (e.api) {\n            touches.push({\n                id: 2,  // hardcoded ID for API call;\n                event: e,\n                target: e.target,\n                currentTarget: e.target,\n                location: e,\n                type: \"api\"\n            });\n        }\n        else if (e.type.match(/touch/)) {\n            changedTouches = originalEvent ? originalEvent.changedTouches : [];\n            for (length = changedTouches.length; idx < length; idx ++) {\n                touch = changedTouches[idx];\n                touches.push({\n                    location: touch,\n                    event: e,\n                    target: touch.target,\n                    currentTarget: currentTarget,\n                    id: touch.identifier,\n                    type: \"touch\"\n                });\n            }\n        }\n        else if (support.pointers || support.msPointers) {\n            touches.push({\n                location: originalEvent,\n                event: e,\n                target: e.target,\n                currentTarget: currentTarget,\n                id: originalEvent.pointerId,\n                type: \"pointer\"\n            });\n        } else {\n            touches.push({\n                id: 1, // hardcoded ID for mouse event;\n                event: e,\n                target: e.target,\n                currentTarget: currentTarget,\n                location: e,\n                type: \"mouse\"\n            });\n        }\n\n        return touches;\n    }\n\n    var TouchAxis = Class.extend({\n        init: function(axis, location) {\n            var that = this;\n\n            that.axis = axis;\n\n            that._updateLocationData(location);\n\n            that.startLocation = that.location;\n            that.velocity = that.delta = 0;\n            that.timeStamp = now();\n        },\n\n        move: function(location) {\n            var that = this,\n                offset = location[\"page\" + that.axis],\n                timeStamp = now(),\n                timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\n\n            if (!offset && invalidZeroEvents) {\n                return;\n            }\n\n            that.delta = offset - that.location;\n\n            that._updateLocationData(location);\n\n            that.initialDelta = offset - that.startLocation;\n            that.velocity = that.delta / timeDelta;\n            that.timeStamp = timeStamp;\n        },\n\n        _updateLocationData: function(location) {\n            var that = this, axis = that.axis;\n\n            that.location = location[\"page\" + axis];\n            that.client = location[\"client\" + axis];\n            that.screen = location[\"screen\" + axis];\n        }\n    });\n\n    var Touch = Class.extend({\n        init: function(userEvents, target, touchInfo) {\n            extend(this, {\n                x: new TouchAxis(\"X\", touchInfo.location),\n                y: new TouchAxis(\"Y\", touchInfo.location),\n                type: touchInfo.type,\n                threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n                userEvents: userEvents,\n                target: target,\n                currentTarget: touchInfo.currentTarget,\n                initialTouch: touchInfo.target,\n                id: touchInfo.id,\n                pressEvent: touchInfo,\n                _moved: false,\n                _finished: false\n            });\n        },\n\n        press: function() {\n            this._holdTimeout = setTimeout($.proxy(this, \"_hold\"), this.userEvents.minHold);\n            this._trigger(PRESS, this.pressEvent);\n        },\n\n        _hold: function() {\n            this._trigger(HOLD, this.pressEvent);\n        },\n\n        move: function(touchInfo) {\n            var that = this;\n\n            if (that._finished) { return; }\n\n            that.x.move(touchInfo.location);\n            that.y.move(touchInfo.location);\n\n            if (!that._moved) {\n                if (that._withinIgnoreThreshold()) {\n                    return;\n                }\n\n                if (!UserEvents.current || UserEvents.current === that.userEvents) {\n                    that._start(touchInfo);\n                } else {\n                    return that.dispose();\n                }\n            }\n\n            // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\n            if (!that._finished) {\n                that._trigger(MOVE, touchInfo);\n            }\n        },\n\n        end: function(touchInfo) {\n            var that = this;\n\n            that.endTime = now();\n\n            if (that._finished) { return; }\n\n            // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\n            that._finished = true;\n\n            that._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\n\n            if (that._moved) {\n                that._trigger(END, touchInfo);\n            } else {\n                that._trigger(TAP, touchInfo);\n            }\n\n            clearTimeout(that._holdTimeout);\n\n            that.dispose();\n        },\n\n        dispose: function() {\n            var userEvents = this.userEvents,\n                activeTouches = userEvents.touches;\n\n            this._finished = true;\n            this.pressEvent = null;\n            clearTimeout(this._holdTimeout);\n\n            activeTouches.splice($.inArray(this, activeTouches), 1);\n        },\n\n        skip: function() {\n            this.dispose();\n        },\n\n        cancel: function() {\n            this.dispose();\n        },\n\n        isMoved: function() {\n            return this._moved;\n        },\n\n        _start: function(touchInfo) {\n            clearTimeout(this._holdTimeout);\n\n            this.startTime = now();\n            this._moved = true;\n            this._trigger(START, touchInfo);\n        },\n\n        _trigger: function(name, touchInfo) {\n            var that = this,\n                jQueryEvent = touchInfo.event,\n                data = {\n                    touch: that,\n                    x: that.x,\n                    y: that.y,\n                    target: that.target,\n                    event: jQueryEvent\n                };\n\n            if(that.userEvents.notify(name, data)) {\n                jQueryEvent.preventDefault();\n            }\n        },\n\n        _withinIgnoreThreshold: function() {\n            var xDelta = this.x.initialDelta,\n                yDelta = this.y.initialDelta;\n\n            return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n        }\n    });\n\n    function withEachUpEvent(callback) {\n        var downEvents = kendo.eventMap.up.split(\" \"),\n            idx = 0,\n            length = downEvents.length;\n\n        for(; idx < length; idx ++) {\n            callback(downEvents[idx]);\n        }\n    }\n\n    var UserEvents = Observable.extend({\n        init: function(element, options) {\n            var that = this,\n                filter,\n                ns = kendo.guid();\n\n            options = options || {};\n            filter = that.filter = options.filter;\n            that.threshold = options.threshold || DEFAULT_THRESHOLD;\n            that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n            that.touches = [];\n            that._maxTouches = options.multiTouch ? 2 : 1;\n            that.allowSelection = options.allowSelection;\n            that.captureUpIfMoved = options.captureUpIfMoved;\n            that.eventNS = ns;\n\n            element = $(element).handler(that);\n            Observable.fn.init.call(that);\n\n            extend(that, {\n                element: element,\n                // the touch events lock to the element anyway, so no need for the global setting\n                surface: options.global && ENABLE_GLOBAL_SURFACE ? $(document.documentElement) : $(options.surface || element),\n                stopPropagation: options.stopPropagation,\n                pressed: false\n            });\n\n            that.surface.handler(that)\n                .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n                .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\n\n            element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\n\n            if (support.pointers || support.msPointers) {\n                element.css(\"-ms-touch-action\", \"pinch-zoom double-tap-zoom\");\n            }\n\n            if (options.preventDragEvent) {\n                element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\n            }\n\n            element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\n\n            if (that.captureUpIfMoved && support.eventCapture) {\n                var surfaceElement = that.surface[0],\n                    preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n\n                withEachUpEvent(function(eventName) {\n                    surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n                });\n            }\n\n            that.bind([\n            PRESS,\n            HOLD,\n            TAP,\n            START,\n            MOVE,\n            END,\n            RELEASE,\n            CANCEL,\n            GESTURESTART,\n            GESTURECHANGE,\n            GESTUREEND,\n            GESTURETAP,\n            SELECT\n            ], options);\n        },\n\n        preventIfMoving: function(e) {\n            if (this._isMoved()) {\n                e.preventDefault();\n            }\n        },\n\n        destroy: function() {\n            var that = this;\n\n            if (that._destroyed) {\n                return;\n            }\n\n            that._destroyed = true;\n\n            if (that.captureUpIfMoved && support.eventCapture) {\n                var surfaceElement = that.surface[0];\n                withEachUpEvent(function(eventName) {\n                    surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n                });\n            }\n\n            that.element.kendoDestroy(that.eventNS);\n            that.surface.kendoDestroy(that.eventNS);\n            that.element.removeData(\"handler\");\n            that.surface.removeData(\"handler\");\n            that._disposeAll();\n\n            that.unbind();\n            delete that.surface;\n            delete that.element;\n            delete that.currentTarget;\n        },\n\n        capture: function() {\n            UserEvents.current = this;\n        },\n\n        cancel: function() {\n            this._disposeAll();\n            this.trigger(CANCEL);\n        },\n\n        notify: function(eventName, data) {\n            var that = this,\n                touches = that.touches;\n\n            if (this._isMultiTouch()) {\n                switch(eventName) {\n                    case MOVE:\n                        eventName = GESTURECHANGE;\n                        break;\n                    case END:\n                        eventName = GESTUREEND;\n                        break;\n                    case TAP:\n                        eventName = GESTURETAP;\n                        break;\n                }\n\n                extend(data, {touches: touches}, touchDelta(touches[0], touches[1]));\n            }\n\n            return this.trigger(eventName, extend(data, {type: eventName}));\n        },\n\n        // API\n        press: function(x, y, target) {\n            this._apiCall(\"_start\", x, y, target);\n        },\n\n        move: function(x, y) {\n            this._apiCall(\"_move\", x, y);\n        },\n\n        end: function(x, y) {\n            this._apiCall(\"_end\", x, y);\n        },\n\n        _isMultiTouch: function() {\n            return this.touches.length > 1;\n        },\n\n        _maxTouchesReached: function() {\n            return this.touches.length >= this._maxTouches;\n        },\n\n        _disposeAll: function() {\n            var touches = this.touches;\n            while (touches.length > 0) {\n                touches.pop().dispose();\n            }\n        },\n\n        _isMoved: function() {\n            return $.grep(this.touches, function(touch) {\n                return touch.isMoved();\n            }).length;\n        },\n\n        _select: function(e) {\n           if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n               e.preventDefault();\n           }\n        },\n\n        _start: function(e) {\n            var that = this,\n                idx = 0,\n                filter = that.filter,\n                target,\n                touches = getTouches(e),\n                length = touches.length,\n                touch,\n                which = e.which;\n\n            if ((which && which > 1) || (that._maxTouchesReached())){\n                return;\n            }\n\n            UserEvents.current = null;\n\n            that.currentTarget = e.currentTarget;\n\n            if (that.stopPropagation) {\n                e.stopPropagation();\n            }\n\n            for (; idx < length; idx ++) {\n                if (that._maxTouchesReached()) {\n                    break;\n                }\n\n                touch = touches[idx];\n\n                if (filter) {\n                    target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\n                } else {\n                    target = that.element;\n                }\n\n                if (!target.length) {\n                    continue;\n                }\n\n                touch = new Touch(that, target, touch);\n                that.touches.push(touch);\n                touch.press();\n\n                if (that._isMultiTouch()) {\n                    that.notify(\"gesturestart\", {});\n                }\n            }\n        },\n\n        _move: function(e) {\n            this._eachTouch(\"move\", e);\n        },\n\n        _end: function(e) {\n            this._eachTouch(\"end\", e);\n        },\n\n        _eachTouch: function(methodName, e) {\n            var that = this,\n                dict = {},\n                touches = getTouches(e),\n                activeTouches = that.touches,\n                idx,\n                touch,\n                touchInfo,\n                matchingTouch;\n\n            for (idx = 0; idx < activeTouches.length; idx ++) {\n                touch = activeTouches[idx];\n                dict[touch.id] = touch;\n            }\n\n            for (idx = 0; idx < touches.length; idx ++) {\n                touchInfo = touches[idx];\n                matchingTouch = dict[touchInfo.id];\n\n                if (matchingTouch) {\n                    matchingTouch[methodName](touchInfo);\n                }\n            }\n        },\n\n        _apiCall: function(type, x, y, target) {\n            this[type]({\n                api: true,\n                pageX: x,\n                pageY: y,\n                clientX: x,\n                clientY: y,\n                target: $(target || this.element)[0],\n                stopPropagation: $.noop,\n                preventDefault: $.noop\n            });\n        }\n    });\n\n    UserEvents.defaultThreshold = function(value) {\n        DEFAULT_THRESHOLD = value;\n    };\n\n    UserEvents.minHold = function(value) {\n        DEFAULT_MIN_HOLD = value;\n    };\n\n    kendo.getTouches = getTouches;\n    kendo.touchDelta = touchDelta;\n    kendo.UserEvents = UserEvents;\n })(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        support = kendo.support,\n        document = window.document,\n        Class = kendo.Class,\n        Widget = kendo.ui.Widget,\n        Observable = kendo.Observable,\n        UserEvents = kendo.UserEvents,\n        proxy = $.proxy,\n        extend = $.extend,\n        getOffset = kendo.getOffset,\n        draggables = {},\n        dropTargets = {},\n        dropAreas = {},\n        lastDropTarget,\n        elementUnderCursor = kendo.elementUnderCursor,\n        KEYUP = \"keyup\",\n        CHANGE = \"change\",\n\n        // Draggable events\n        DRAGSTART = \"dragstart\",\n        HOLD = \"hold\",\n        DRAG = \"drag\",\n        DRAGEND = \"dragend\",\n        DRAGCANCEL = \"dragcancel\",\n        HINTDESTROYED = \"hintDestroyed\",\n\n        // DropTarget events\n        DRAGENTER = \"dragenter\",\n        DRAGLEAVE = \"dragleave\",\n        DROP = \"drop\";\n\n    function contains(parent, child) {\n        try {\n            return $.contains(parent, child) || parent == child;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function numericCssPropery(element, property) {\n        return parseInt(element.css(property), 10) || 0;\n    }\n\n    function within(value, range) {\n        return Math.min(Math.max(value, range.min), range.max);\n    }\n\n    function containerBoundaries(container, element) {\n        var offset = getOffset(container),\n            minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\n            minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\n            maxX = minX + container.width() - element.outerWidth(true),\n            maxY = minY + container.height() - element.outerHeight(true);\n\n        return {\n            x: { min: minX, max: maxX },\n            y: { min: minY, max: maxY }\n        };\n    }\n\n    function checkTarget(target, targets, areas) {\n        var theTarget, theFilter, i = 0,\n            targetLen = targets && targets.length,\n            areaLen = areas && areas.length;\n\n        while (target && target.parentNode) {\n            for (i = 0; i < targetLen; i ++) {\n                theTarget = targets[i];\n                if (theTarget.element[0] === target) {\n                    return { target: theTarget, targetElement: target };\n                }\n            }\n\n            for (i = 0; i < areaLen; i ++) {\n                theFilter = areas[i];\n                if (support.matchesSelector.call(target, theFilter.options.filter)) {\n                    return { target: theFilter, targetElement: target };\n                }\n            }\n\n            target = target.parentNode;\n        }\n\n        return undefined;\n    }\n\n    var TapCapture = Observable.extend({\n        init: function(element, options) {\n            var that = this,\n                domElement = element[0];\n\n            that.capture = false;\n\n            if (domElement.addEventListener) {\n                $.each(kendo.eventMap.down.split(\" \"), function() {\n                    domElement.addEventListener(this, proxy(that._press, that), true);\n                });\n                $.each(kendo.eventMap.up.split(\" \"), function() {\n                    domElement.addEventListener(this, proxy(that._release, that), true);\n                });\n            } else {\n                $.each(kendo.eventMap.down.split(\" \"), function() {\n                    domElement.attachEvent(this, proxy(that._press, that));\n                });\n                $.each(kendo.eventMap.up.split(\" \"), function() {\n                    domElement.attachEvent(this, proxy(that._release, that));\n                });\n            }\n\n            Observable.fn.init.call(that);\n\n            that.bind([\"press\", \"release\"], options || {});\n        },\n\n        captureNext: function() {\n            this.capture = true;\n        },\n\n        cancelCapture: function() {\n            this.capture = false;\n        },\n\n        _press: function(e) {\n            var that = this;\n            that.trigger(\"press\");\n            if (that.capture) {\n                e.preventDefault();\n            }\n        },\n\n        _release: function(e) {\n            var that = this;\n            that.trigger(\"release\");\n\n            if (that.capture) {\n                e.preventDefault();\n                that.cancelCapture();\n            }\n        }\n    });\n\n    var PaneDimension = Observable.extend({\n        init: function(options) {\n            var that = this;\n            Observable.fn.init.call(that);\n\n            that.forcedEnabled = false;\n\n            $.extend(that, options);\n\n            that.scale = 1;\n\n            if (that.horizontal) {\n                that.measure = \"offsetWidth\";\n                that.scrollSize = \"scrollWidth\";\n                that.axis = \"x\";\n            } else {\n                that.measure = \"offsetHeight\";\n                that.scrollSize = \"scrollHeight\";\n                that.axis = \"y\";\n            }\n        },\n\n        makeVirtual: function() {\n            $.extend(this, {\n                virtual: true,\n                forcedEnabled: true,\n                _virtualMin: 0,\n                _virtualMax: 0\n            });\n        },\n\n        virtualSize: function(min, max) {\n            if (this._virtualMin !== min || this._virtualMax !== max) {\n                this._virtualMin = min;\n                this._virtualMax = max;\n                this.update();\n            }\n        },\n\n        outOfBounds: function(offset) {\n            return offset > this.max || offset < this.min;\n        },\n\n        forceEnabled: function() {\n            this.forcedEnabled = true;\n        },\n\n        getSize: function() {\n            return this.container[0][this.measure];\n        },\n\n        getTotal: function() {\n            return this.element[0][this.scrollSize];\n        },\n\n        rescale: function(scale) {\n            this.scale = scale;\n        },\n\n        update: function(silent) {\n            var that = this,\n                total = that.virtual ? that._virtualMax : that.getTotal(),\n                scaledTotal = total * that.scale,\n                size = that.getSize();\n\n            if (total === 0 && !that.forcedEnabled) {\n                return; // we are not visible.\n            }\n\n            that.max = that.virtual ? -that._virtualMin : 0;\n            that.size = size;\n            that.total = scaledTotal;\n            that.min = Math.min(that.max, size - scaledTotal);\n            that.minScale = size / total;\n            that.centerOffset = (scaledTotal - size) / 2;\n\n            that.enabled = that.forcedEnabled || (scaledTotal > size);\n\n            if (!silent) {\n                that.trigger(CHANGE, that);\n            }\n        }\n    });\n\n    var PaneDimensions = Observable.extend({\n        init: function(options) {\n            var that = this;\n\n            Observable.fn.init.call(that);\n\n            that.x = new PaneDimension(extend({horizontal: true}, options));\n            that.y = new PaneDimension(extend({horizontal: false}, options));\n            that.container = options.container;\n            that.forcedMinScale = options.minScale;\n            that.maxScale = options.maxScale || 100;\n\n            that.bind(CHANGE, options);\n        },\n\n        rescale: function(newScale) {\n            this.x.rescale(newScale);\n            this.y.rescale(newScale);\n            this.refresh();\n        },\n\n        centerCoordinates: function() {\n            return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) };\n        },\n\n        refresh: function() {\n            var that = this;\n            that.x.update();\n            that.y.update();\n            that.enabled = that.x.enabled || that.y.enabled;\n            that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n            that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n            that.trigger(CHANGE);\n        }\n    });\n\n    var PaneAxis = Observable.extend({\n        init: function(options) {\n            var that = this;\n            extend(that, options);\n            Observable.fn.init.call(that);\n        },\n\n        outOfBounds: function() {\n            return this.dimension.outOfBounds(this.movable[this.axis]);\n        },\n\n        dragMove: function(delta) {\n            var that = this,\n                dimension = that.dimension,\n                axis = that.axis,\n                movable = that.movable,\n                position = movable[axis] + delta;\n\n            if (!dimension.enabled) {\n                return;\n            }\n\n            if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\n                delta *= that.resistance;\n            }\n\n            movable.translateAxis(axis, delta);\n            that.trigger(CHANGE, that);\n        }\n    });\n\n    var Pane = Class.extend({\n\n        init: function(options) {\n            var that = this,\n                x,\n                y,\n                resistance,\n                movable;\n\n            extend(that, {elastic: true}, options);\n\n            resistance = that.elastic ? 0.5 : 0;\n            movable = that.movable;\n\n            that.x = x = new PaneAxis({\n                axis: \"x\",\n                dimension: that.dimensions.x,\n                resistance: resistance,\n                movable: movable\n            });\n\n            that.y = y = new PaneAxis({\n                axis: \"y\",\n                dimension: that.dimensions.y,\n                resistance: resistance,\n                movable: movable\n            });\n\n            that.userEvents.bind([\"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\n                gesturestart: function(e) {\n                    that.gesture = e;\n                    that.offset = that.dimensions.container.offset();\n                },\n\n                gesturechange: function(e) {\n                    var previousGesture = that.gesture,\n                        previousCenter = previousGesture.center,\n\n                        center = e.center,\n\n                        scaleDelta = e.distance / previousGesture.distance,\n\n                        minScale = that.dimensions.minScale,\n                        maxScale = that.dimensions.maxScale,\n                        coordinates;\n\n                    if (movable.scale <= minScale && scaleDelta < 1) {\n                        // Resist shrinking. Instead of shrinking from 1 to 0.5, it will shrink to 0.5 + (1 /* minScale */ - 0.5) * 0.8 = 0.9;\n                        scaleDelta += (1 - scaleDelta) * 0.8;\n                    }\n\n                    if (movable.scale * scaleDelta >= maxScale) {\n                        scaleDelta = maxScale / movable.scale;\n                    }\n\n                    var offsetX = movable.x + that.offset.left,\n                        offsetY = movable.y + that.offset.top;\n\n                    coordinates = {\n                        x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n                        y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n                    };\n\n                    movable.scaleWith(scaleDelta);\n\n                    x.dragMove(coordinates.x);\n                    y.dragMove(coordinates.y);\n\n                    that.dimensions.rescale(movable.scale);\n                    that.gesture = e;\n                    e.preventDefault();\n                },\n\n                move: function(e) {\n                    if (e.event.target.tagName.match(/textarea|input/i)) {\n                        return;\n                    }\n\n                    if (x.dimension.enabled || y.dimension.enabled) {\n                        x.dragMove(e.x.delta);\n                        y.dragMove(e.y.delta);\n                        e.preventDefault();\n                    } else {\n                        e.touch.skip();\n                    }\n                },\n\n                end: function(e) {\n                    e.preventDefault();\n                }\n            });\n        }\n    });\n\n    var TRANSFORM_STYLE = support.transitions.prefix + \"Transform\",\n        translate;\n\n\n    if (support.hasHW3D) {\n        translate = function(x, y, scale) {\n            return \"translate3d(\" + x + \"px,\" + y +\"px,0) scale(\" + scale + \")\";\n        };\n    } else {\n        translate = function(x, y, scale) {\n            return \"translate(\" + x + \"px,\" + y +\"px) scale(\" + scale + \")\";\n        };\n    }\n\n    var Movable = Observable.extend({\n        init: function(element) {\n            var that = this;\n\n            Observable.fn.init.call(that);\n\n            that.element = $(element);\n            that.element[0].style.webkitTransformOrigin = \"left top\";\n            that.x = 0;\n            that.y = 0;\n            that.scale = 1;\n            that._saveCoordinates(translate(that.x, that.y, that.scale));\n        },\n\n        translateAxis: function(axis, by) {\n            this[axis] += by;\n            this.refresh();\n        },\n\n        scaleTo: function(scale) {\n            this.scale = scale;\n            this.refresh();\n        },\n\n        scaleWith: function(scaleDelta) {\n            this.scale *= scaleDelta;\n            this.refresh();\n        },\n\n        translate: function(coordinates) {\n            this.x += coordinates.x;\n            this.y += coordinates.y;\n            this.refresh();\n        },\n\n        moveAxis: function(axis, value) {\n            this[axis] = value;\n            this.refresh();\n        },\n\n        moveTo: function(coordinates) {\n            extend(this, coordinates);\n            this.refresh();\n        },\n\n        refresh: function() {\n            var that = this,\n                x = that.x,\n                y = that.y,\n                newCoordinates;\n\n            if (that.round) {\n                x = Math.round(x);\n                y = Math.round(y);\n            }\n\n            newCoordinates = translate(x, y, that.scale);\n\n            if (newCoordinates != that.coordinates) {\n                if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n                    that.element[0].style.position = \"absolute\";\n                    that.element[0].style.left = that.x + \"px\";\n                    that.element[0].style.top = that.y + \"px\";\n\n                } else {\n                    that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n                }\n                that._saveCoordinates(newCoordinates);\n                that.trigger(CHANGE);\n            }\n        },\n\n        _saveCoordinates: function(coordinates) {\n            this.coordinates = coordinates;\n        }\n    });\n\n    function destroyDroppable(collection, widget) {\n        var groupName = widget.options.group,\n        droppables = collection[groupName],\n        i;\n\n        Widget.fn.destroy.call(widget);\n\n        if (droppables.length > 1) {\n            for (i = 0; i < droppables.length; i++) {\n                if (droppables[i] == widget) {\n                    droppables.splice(i, 1);\n                    break;\n                }\n            }\n        } else {\n            droppables.length = 0; // WTF, porting this from the previous destroyGroup\n            delete collection[groupName];\n        }\n    }\n\n    var DropTarget = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            var group = that.options.group;\n\n            if (!(group in dropTargets)) {\n                dropTargets[group] = [ that ];\n            } else {\n                dropTargets[group].push( that );\n            }\n        },\n\n        events: [\n            DRAGENTER,\n            DRAGLEAVE,\n            DROP\n        ],\n\n        options: {\n            name: \"DropTarget\",\n            group: \"default\"\n        },\n\n        destroy: function() {\n            destroyDroppable(dropTargets, this);\n        },\n\n        _trigger: function(eventName, e) {\n            var that = this,\n                draggable = draggables[that.options.group];\n\n            if (draggable) {\n                return that.trigger(eventName, extend({}, e.event, {\n                           draggable: draggable,\n                           dropTarget: e.dropTarget\n                       }));\n            }\n        },\n\n        _over: function(e) {\n            this._trigger(DRAGENTER, e);\n        },\n\n        _out: function(e) {\n            this._trigger(DRAGLEAVE, e);\n        },\n\n        _drop: function(e) {\n            var that = this,\n                draggable = draggables[that.options.group];\n\n            if (draggable) {\n                draggable.dropped = !that._trigger(DROP, e);\n            }\n        }\n    });\n\n    DropTarget.destroyGroup = function(groupName) {\n        var group = dropTargets[groupName] || dropAreas[groupName],\n            i;\n\n        if (group) {\n            for (i = 0; i < group.length; i++) {\n                Widget.fn.destroy.call(group[i]);\n            }\n\n            group.length = 0;\n            delete dropTargets[groupName];\n            delete dropAreas[groupName];\n        }\n    };\n\n    DropTarget._cache = dropTargets;\n\n    var DropTargetArea = DropTarget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            var group = that.options.group;\n\n            if (!(group in dropAreas)) {\n                dropAreas[group] = [ that ];\n            } else {\n                dropAreas[group].push( that );\n            }\n        },\n\n        destroy: function() {\n            destroyDroppable(dropAreas, this);\n        },\n\n        options: {\n            name: \"DropTargetArea\",\n            group: \"default\",\n            filter: null\n        }\n    });\n\n    var Draggable = Widget.extend({\n        init: function (element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._activated = false;\n\n            that.userEvents = new UserEvents(that.element, {\n                global: true,\n                allowSelection: true,\n                filter: that.options.filter,\n                threshold: that.options.distance,\n                start: proxy(that._start, that),\n                hold: proxy(that._hold, that),\n                move: proxy(that._drag, that),\n                end: proxy(that._end, that),\n                cancel: proxy(that._cancel, that),\n                select: proxy(that._select, that)\n            });\n\n            that._afterEndHandler = proxy(that._afterEnd, that);\n            that._captureEscape = proxy(that._captureEscape, that);\n        },\n\n        events: [\n            HOLD,\n            DRAGSTART,\n            DRAG,\n            DRAGEND,\n            DRAGCANCEL,\n            HINTDESTROYED\n        ],\n\n        options: {\n            name: \"Draggable\",\n            distance: ( kendo.support.touch ? 0 : 5),\n            group: \"default\",\n            cursorOffset: null,\n            axis: null,\n            container: null,\n            filter: null,\n            ignore: null,\n            holdToDrag: false,\n            dropped: false\n        },\n\n        cancelHold: function() {\n            this._activated = false;\n        },\n\n        _captureEscape: function(e) {\n            var that = this;\n\n            if (e.keyCode === kendo.keys.ESC) {\n                that._trigger(DRAGCANCEL, { event: e });\n                that.userEvents.cancel();\n            }\n        },\n\n        _updateHint: function(e) {\n            var that = this,\n                coordinates,\n                options = that.options,\n                boundaries = that.boundaries,\n                axis = options.axis,\n                cursorOffset = that.options.cursorOffset;\n\n            if (cursorOffset) {\n               coordinates = { left: e.x.location + cursorOffset.left, top: e.y.location + cursorOffset.top };\n            } else {\n               that.hintOffset.left += e.x.delta;\n               that.hintOffset.top += e.y.delta;\n               coordinates = $.extend({}, that.hintOffset);\n            }\n\n            if (boundaries) {\n                coordinates.top = within(coordinates.top, boundaries.y);\n                coordinates.left = within(coordinates.left, boundaries.x);\n            }\n\n            if (axis === \"x\") {\n                delete coordinates.top;\n            } else if (axis === \"y\") {\n                delete coordinates.left;\n            }\n\n            that.hint.css(coordinates);\n        },\n\n        _shouldIgnoreTarget: function(target) {\n            var ignoreSelector = this.options.ignore;\n            return ignoreSelector && $(target).is(ignoreSelector);\n        },\n\n        _select: function(e) {\n            if (!this._shouldIgnoreTarget(e.event.target)) {\n                e.preventDefault();\n            }\n        },\n\n        _start: function(e) {\n            var that = this,\n                options = that.options,\n                container = options.container,\n                hint = options.hint;\n\n            if (this._shouldIgnoreTarget(e.touch.initialTouch) || (options.holdToDrag && !that._activated)) {\n                that.userEvents.cancel();\n                return;\n            }\n\n            that.currentTarget = e.target;\n            that.currentTargetOffset = getOffset(that.currentTarget);\n\n            if (hint) {\n                if (that.hint) {\n                    that.hint.stop(true, true).remove();\n                }\n\n                that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n\n                var offset = getOffset(that.currentTarget);\n                that.hintOffset = offset;\n\n                that.hint.css( {\n                    position: \"absolute\",\n                    zIndex: 20000, // the Window's z-index is 10000 and can be raised because of z-stacking\n                    left: offset.left,\n                    top: offset.top\n                })\n                .appendTo(document.body);\n\n                that.angular(\"compile\", function(){\n                    that.hint.removeAttr(\"ng-repeat\");\n                    return {\n                        elements: that.hint.get(),\n                        scopeFrom: e.target\n                    };\n                });\n            }\n\n            draggables[options.group] = that;\n\n            that.dropped = false;\n\n            if (container) {\n                that.boundaries = containerBoundaries(container, that.hint);\n            }\n\n            if (that._trigger(DRAGSTART, e)) {\n                that.userEvents.cancel();\n                that._afterEnd();\n            }\n\n            that.userEvents.capture();\n\n            $(document).on(KEYUP, that._captureEscape);\n        },\n\n        _hold: function(e) {\n            this.currentTarget = e.target;\n\n            if (this._trigger(HOLD, e)) {\n                this.userEvents.cancel();\n            } else {\n                this._activated = true;\n            }\n        },\n\n        _drag: function(e) {\n            var that = this;\n\n            e.preventDefault();\n\n            that._withDropTarget(e, function(target, targetElement) {\n                if (!target) {\n                    if (lastDropTarget) {\n                        lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n                        lastDropTarget = null;\n                    }\n                    return;\n                }\n\n                if (lastDropTarget) {\n                    if (targetElement === lastDropTarget.targetElement) {\n                        return;\n                    }\n\n                    lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n                }\n\n                target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n                lastDropTarget = extend(target, { targetElement: targetElement });\n            });\n\n            that._trigger(DRAG, extend(e, { dropTarget: lastDropTarget }));\n\n            if (that.hint) {\n                that._updateHint(e);\n            }\n        },\n\n        _end: function(e) {\n            var that = this;\n\n            that._withDropTarget(e, function(target, targetElement) {\n                if (target) {\n                    target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n                    lastDropTarget = null;\n                }\n            });\n\n            that._trigger(DRAGEND, e);\n            that._cancel(e.event);\n        },\n\n        _cancel: function() {\n            var that = this;\n\n            that._activated = false;\n\n            if (that.hint && !that.dropped) {\n                setTimeout(function() {\n                    that.hint.stop(true, true).animate(that.currentTargetOffset, \"fast\", that._afterEndHandler);\n                }, 0);\n\n            } else {\n                that._afterEnd();\n            }\n        },\n\n        _trigger: function(eventName, e) {\n            var that = this;\n\n            return that.trigger(\n                eventName, extend(\n                {},\n                e.event,\n                {\n                    x: e.x,\n                    y: e.y,\n                    currentTarget: that.currentTarget,\n                    dropTarget: e.dropTarget\n                }\n            ));\n        },\n\n        _withDropTarget: function(e, callback) {\n            var that = this,\n                target, result,\n                options = that.options,\n                targets = dropTargets[options.group],\n                areas = dropAreas[options.group];\n\n            if (targets && targets.length || areas && areas.length) {\n\n                target = elementUnderCursor(e);\n\n                if (that.hint && contains(that.hint[0], target)) {\n                    that.hint.hide();\n                    target = elementUnderCursor(e);\n                    // IE8 does not return the element in iframe from first attempt\n                    if (!target) {\n                        target = elementUnderCursor(e);\n                    }\n                    that.hint.show();\n                }\n\n                result = checkTarget(target, targets, areas);\n\n                if (result) {\n                    callback(result.target, result.targetElement);\n                } else {\n                    callback();\n                }\n            }\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that._afterEnd();\n\n            that.userEvents.destroy();\n\n            that.currentTarget = null;\n        },\n\n        _afterEnd: function() {\n            var that = this;\n\n            if (that.hint) {\n                that.hint.remove();\n            }\n\n            delete draggables[that.options.group];\n\n            that.trigger(\"destroy\");\n            that.trigger(HINTDESTROYED);\n            $(document).off(KEYUP, that._captureEscape);\n        }\n    });\n\n    kendo.ui.plugin(DropTarget);\n    kendo.ui.plugin(DropTargetArea);\n    kendo.ui.plugin(Draggable);\n    kendo.TapCapture = TapCapture;\n    kendo.containerBoundaries = containerBoundaries;\n\n    extend(kendo.ui, {\n        Pane: Pane,\n        PaneDimensions: PaneDimensions,\n        Movable: Movable\n    });\n\n })(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        fx = kendo.effects,\n        ui = mobile.ui,\n        proxy = $.proxy,\n        extend = $.extend,\n        Widget = ui.Widget,\n        Class = kendo.Class,\n        Movable = kendo.ui.Movable,\n        Pane = kendo.ui.Pane,\n        PaneDimensions = kendo.ui.PaneDimensions,\n        Transition = fx.Transition,\n        Animation = fx.Animation,\n        abs = Math.abs,\n        SNAPBACK_DURATION = 500,\n        SCROLLBAR_OPACITY = 0.7,\n        FRICTION = 0.96,\n        VELOCITY_MULTIPLIER = 10,\n        MAX_VELOCITY = 55,\n        OUT_OF_BOUNDS_FRICTION = 0.5,\n        ANIMATED_SCROLLER_PRECISION = 5,\n        RELEASECLASS = \"km-scroller-release\",\n        REFRESHCLASS = \"km-scroller-refresh\",\n        PULL = \"pull\",\n        CHANGE = \"change\",\n        RESIZE = \"resize\",\n        SCROLL = \"scroll\",\n        MOUSE_WHEEL_ID = 2;\n\n    var ZoomSnapBack = Animation.extend({\n        init: function(options) {\n            var that = this;\n            Animation.fn.init.call(that);\n            extend(that, options);\n\n            that.userEvents.bind(\"gestureend\", proxy(that.start, that));\n            that.tapCapture.bind(\"press\", proxy(that.cancel, that));\n        },\n\n        enabled: function() {\n          return this.movable.scale < this.dimensions.minScale;\n        },\n\n        done: function() {\n            return this.dimensions.minScale - this.movable.scale < 0.01;\n        },\n\n        tick: function() {\n            var movable = this.movable;\n            movable.scaleWith(1.1);\n            this.dimensions.rescale(movable.scale);\n        },\n\n        onEnd: function() {\n            var movable = this.movable;\n            movable.scaleTo(this.dimensions.minScale);\n            this.dimensions.rescale(movable.scale);\n        }\n    });\n\n    var DragInertia = Animation.extend({\n        init: function(options) {\n            var that = this;\n\n            Animation.fn.init.call(that);\n\n            extend(that, options, {\n                transition: new Transition({\n                    axis: options.axis,\n                    movable: options.movable,\n                    onEnd: function() { that._end(); }\n                })\n            });\n\n            that.tapCapture.bind(\"press\", function() { that.cancel(); });\n            that.userEvents.bind(\"end\", proxy(that.start, that));\n            that.userEvents.bind(\"gestureend\", proxy(that.start, that));\n            that.userEvents.bind(\"tap\", proxy(that.onEnd, that));\n        },\n\n        onCancel: function() {\n            this.transition.cancel();\n        },\n\n        freeze: function(location) {\n            var that = this;\n            that.cancel();\n            that._moveTo(location);\n        },\n\n        onEnd: function() {\n            var that = this;\n            if (that.paneAxis.outOfBounds()) {\n                that._snapBack();\n            } else {\n                that._end();\n            }\n        },\n\n        done: function() {\n            return abs(this.velocity) < 1;\n        },\n\n        start: function(e) {\n            var that = this,\n                velocity;\n\n            if (!that.dimension.enabled) { return; }\n\n\n            if (that.paneAxis.outOfBounds()) {\n                that._snapBack();\n            } else {\n                velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n                that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n                that.tapCapture.captureNext();\n                Animation.fn.start.call(that);\n            }\n        },\n\n        tick: function() {\n            var that = this,\n                dimension = that.dimension,\n                friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n                delta = (that.velocity *= friction),\n                location = that.movable[that.axis] + delta;\n\n                if (!that.elastic && dimension.outOfBounds(location)) {\n                    location = Math.max(Math.min(location, dimension.max), dimension.min);\n                    that.velocity = 0;\n                }\n\n            that.movable.moveAxis(that.axis, location);\n        },\n\n        _end: function() {\n            this.tapCapture.cancelCapture();\n            this.end();\n        },\n\n        _snapBack: function() {\n            var that = this,\n                dimension = that.dimension,\n                snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n            that._moveTo(snapBack);\n        },\n\n        _moveTo: function(location) {\n            this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n        }\n    });\n\n    var AnimatedScroller = Animation.extend({\n        init: function(options) {\n            var that = this;\n\n            kendo.effects.Animation.fn.init.call(this);\n\n            extend(that, options, {\n                origin: {},\n                destination: {},\n                offset: {}\n            });\n        },\n\n        tick: function() {\n            this._updateCoordinates();\n            this.moveTo(this.origin);\n        },\n\n        done: function() {\n            return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n        },\n\n        onEnd: function() {\n            this.moveTo(this.destination);\n            if (this.callback) {\n                this.callback.call();\n            }\n        },\n\n        setCoordinates: function(from, to) {\n            this.offset = {};\n            this.origin = from;\n            this.destination = to;\n        },\n\n        setCallback: function(callback) {\n            if (callback && kendo.isFunction(callback)) {\n                this.callback = callback;\n            } else {\n                callback = undefined;\n            }\n        },\n\n        _updateCoordinates: function() {\n            this.offset = {\n                x: (this.destination.x - this.origin.x) / 4,\n                y: (this.destination.y - this.origin.y) / 4\n            };\n\n            this.origin = {\n                y: this.origin.y + this.offset.y,\n                x: this.origin.x + this.offset.x\n            };\n        }\n    });\n\n    var ScrollBar = Class.extend({\n        init: function(options) {\n            var that = this,\n                horizontal = options.axis === \"x\",\n                element = $('<div class=\"km-touch-scrollbar km-' + (horizontal ? \"horizontal\" : \"vertical\") + '-scrollbar\" />');\n\n            extend(that, options, {\n                element: element,\n                elementSize: 0,\n                movable: new Movable(element),\n                scrollMovable: options.movable,\n                alwaysVisible: options.alwaysVisible,\n                size: horizontal ? \"width\" : \"height\"\n            });\n\n            that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n            that.container.append(element);\n            if (options.alwaysVisible) {\n                that.show();\n            }\n        },\n\n        refresh: function() {\n            var that = this,\n                axis = that.axis,\n                dimension = that.dimension,\n                paneSize = dimension.size,\n                scrollMovable = that.scrollMovable,\n                sizeRatio = paneSize / dimension.total,\n                position = Math.round(-scrollMovable[axis] * sizeRatio),\n                size = Math.round(paneSize * sizeRatio);\n\n                if (sizeRatio >= 1) {\n                    this.element.css(\"display\", \"none\");\n                } else {\n                    this.element.css(\"display\", \"\");\n                }\n\n                if (position + size > paneSize) {\n                    size = paneSize - position;\n                } else if (position < 0) {\n                    size += position;\n                    position = 0;\n                }\n\n            if (that.elementSize != size) {\n                that.element.css(that.size, size + \"px\");\n                that.elementSize = size;\n            }\n\n            that.movable.moveAxis(axis, position);\n        },\n\n        show: function() {\n            this.element.css({opacity: SCROLLBAR_OPACITY, visibility: \"visible\"});\n        },\n\n        hide: function() {\n            if (!this.alwaysVisible) {\n                this.element.css({opacity: 0});\n            }\n        }\n    });\n\n    var Scroller = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n\n            that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n            if (that._native) {\n                element.addClass(\"km-native-scroller\")\n                    .prepend('<div class=\"km-scroll-header\"/>');\n\n                extend(that, {\n                    scrollElement: element,\n                    fixedContainer: element.children().first()\n                });\n\n                return;\n            }\n\n            element\n                .css(\"overflow\", \"hidden\")\n                .addClass(\"km-scroll-wrapper\")\n                .wrapInner('<div class=\"km-scroll-container\"/>')\n                .prepend('<div class=\"km-scroll-header\"/>');\n\n            var inner = element.children().eq(1),\n\n                tapCapture = new kendo.TapCapture(element),\n\n                movable = new Movable(inner),\n\n                dimensions = new PaneDimensions({\n                    element: inner,\n                    container: element,\n                    forcedEnabled: that.options.zoom\n                }),\n\n                avoidScrolling = this.options.avoidScrolling,\n\n                userEvents = new kendo.UserEvents(element, {\n                    allowSelection: true,\n                    preventDragEvent: true,\n                    captureUpIfMoved: true,\n                    multiTouch: that.options.zoom,\n                    start: function(e) {\n                        dimensions.refresh();\n\n                        var velocityX = abs(e.x.velocity),\n                            velocityY = abs(e.y.velocity),\n                            horizontalSwipe  = velocityX * 2 >= velocityY,\n                            originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n                            verticalSwipe = velocityY * 2 >= velocityX;\n\n\n                        if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n                            userEvents.capture();\n                        } else {\n                            userEvents.cancel();\n                        }\n                    }\n                }),\n\n                pane = new Pane({\n                    movable: movable,\n                    dimensions: dimensions,\n                    userEvents: userEvents,\n                    elastic: that.options.elastic\n                }),\n\n                zoomSnapBack = new ZoomSnapBack({\n                    movable: movable,\n                    dimensions: dimensions,\n                    userEvents: userEvents,\n                    tapCapture: tapCapture\n                }),\n\n                animatedScroller = new AnimatedScroller({\n                    moveTo: function(coordinates) {\n                        that.scrollTo(coordinates.x, coordinates.y);\n                    }\n                });\n\n            movable.bind(CHANGE, function() {\n                that.scrollTop = - movable.y;\n                that.scrollLeft = - movable.x;\n\n                that.trigger(SCROLL, {\n                    scrollTop: that.scrollTop,\n                    scrollLeft: that.scrollLeft\n                });\n            });\n\n            if (that.options.mousewheelScrolling) {\n                element.on(\"DOMMouseScroll mousewheel\",  proxy(this, \"_wheelScroll\"));\n            }\n\n            extend(that, {\n                movable: movable,\n                dimensions: dimensions,\n                zoomSnapBack: zoomSnapBack,\n                animatedScroller: animatedScroller,\n                userEvents: userEvents,\n                pane: pane,\n                tapCapture: tapCapture,\n                pulled: false,\n                enabled: true,\n                scrollElement: inner,\n                scrollTop: 0,\n                scrollLeft: 0,\n                fixedContainer: element.children().first()\n            });\n\n            that._initAxis(\"x\");\n            that._initAxis(\"y\");\n\n            // build closure\n            that._wheelEnd = function() {\n                that._wheel = false;\n                that.userEvents.end(0, that._wheelY);\n            };\n\n            dimensions.refresh();\n\n            if (that.options.pullToRefresh) {\n                that._initPullToRefresh();\n            }\n        },\n\n        _wheelScroll: function(e) {\n            if (!this._wheel) {\n                this._wheel = true;\n                this._wheelY = 0;\n                this.userEvents.press(0, this._wheelY);\n            }\n\n            clearTimeout(this._wheelTimeout);\n            this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n            var delta = kendo.wheelDeltaY(e);\n\n            if (delta) {\n                this._wheelY += delta;\n                this.userEvents.move(0, this._wheelY);\n            }\n\n            e.preventDefault();\n        },\n\n        makeVirtual: function() {\n            this.dimensions.y.makeVirtual();\n        },\n\n        virtualSize: function(min, max) {\n            this.dimensions.y.virtualSize(min, max);\n        },\n\n        height: function() {\n            return this.dimensions.y.size;\n        },\n\n        scrollHeight: function() {\n            return this.scrollElement[0].scrollHeight;\n        },\n\n        scrollWidth: function() {\n            return this.scrollElement[0].scrollWidth;\n        },\n\n        options: {\n            name: \"Scroller\",\n            zoom: false,\n            pullOffset: 140,\n            visibleScrollHints: false,\n            elastic: true,\n            useNative: false,\n            mousewheelScrolling: true,\n            avoidScrolling: function() { return false; },\n            pullToRefresh: false,\n            messages: {\n                pullTemplate: \"Pull to refresh\",\n                releaseTemplate: \"Release to refresh\",\n                refreshTemplate: \"Refreshing\"\n            }\n        },\n\n        events: [\n            PULL,\n            SCROLL,\n            RESIZE\n        ],\n\n        _resize: function() {\n            if (!this._native) {\n                this.contentResized();\n            }\n        },\n\n        setOptions: function(options) {\n            var that = this;\n            Widget.fn.setOptions.call(that, options);\n            if (options.pullToRefresh) {\n                that._initPullToRefresh();\n            }\n        },\n\n        reset: function() {\n            if (this._native) {\n                this.scrollElement.scrollTop(0);\n            } else {\n                this.movable.moveTo({x: 0, y: 0});\n                this._scale(1);\n            }\n        },\n\n        contentResized: function() {\n            this.dimensions.refresh();\n            if (this.pane.x.outOfBounds()) {\n                this.movable.moveAxis(\"x\", this.dimensions.x.min);\n            }\n\n            if (this.pane.y.outOfBounds()) {\n                this.movable.moveAxis(\"y\", this.dimensions.y.min);\n            }\n        },\n\n        zoomOut: function() {\n            var dimensions = this.dimensions;\n            dimensions.refresh();\n            this._scale(dimensions.fitScale);\n            this.movable.moveTo(dimensions.centerCoordinates());\n        },\n\n        enable: function() {\n            this.enabled = true;\n        },\n\n        disable: function() {\n            this.enabled = false;\n        },\n\n        scrollTo: function(x, y) {\n            if (this._native) {\n                this.scrollElement.scrollLeft(abs(x));\n                this.scrollElement.scrollTop(abs(y));\n            } else {\n                this.dimensions.refresh();\n                this.movable.moveTo({x: x, y: y});\n            }\n        },\n\n        animatedScrollTo: function(x, y, callback) {\n            var from,\n                to;\n\n            if(this._native) {\n                this.scrollTo(x, y);\n            } else {\n                from = { x: this.movable.x, y: this.movable.y };\n                to = { x: x, y: y };\n\n                this.animatedScroller.setCoordinates(from, to);\n                this.animatedScroller.setCallback(callback);\n                this.animatedScroller.start();\n            }\n        },\n\n        pullHandled: function() {\n            var that = this;\n            that.refreshHint.removeClass(REFRESHCLASS);\n            that.hintContainer.html(that.pullTemplate({}));\n            that.yinertia.onEnd();\n            that.xinertia.onEnd();\n            that.userEvents.cancel();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            if (this.userEvents) {\n                this.userEvents.destroy();\n            }\n        },\n\n        _scale: function(scale) {\n            this.dimensions.rescale(scale);\n            this.movable.scaleTo(scale);\n        },\n\n        _initPullToRefresh: function() {\n            var that = this;\n\n            that.dimensions.y.forceEnabled();\n            that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n            that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n            that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n\n            that.scrollElement.prepend('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">' + that.pullTemplate({}) + '</span></span>');\n            that.refreshHint = that.scrollElement.children().first();\n            that.hintContainer = that.refreshHint.children(\".km-template\");\n\n            that.pane.y.bind(\"change\", proxy(that._paneChange, that));\n            that.userEvents.bind(\"end\", proxy(that._dragEnd, that));\n        },\n\n        _dragEnd: function() {\n            var that = this;\n\n            if(!that.pulled) {\n                return;\n            }\n\n            that.pulled = false;\n            that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n            that.hintContainer.html(that.refreshTemplate({}));\n            that.yinertia.freeze(that.options.pullOffset / 2);\n            that.trigger(\"pull\");\n        },\n\n        _paneChange: function() {\n            var that = this;\n\n            if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n                if (!that.pulled) {\n                    that.pulled = true;\n                    that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n                    that.hintContainer.html(that.releaseTemplate({}));\n                }\n            } else if (that.pulled) {\n                that.pulled = false;\n                that.refreshHint.removeClass(RELEASECLASS);\n                that.hintContainer.html(that.pullTemplate({}));\n            }\n        },\n\n        _initAxis: function(axis) {\n            var that = this,\n                movable = that.movable,\n                dimension = that.dimensions[axis],\n                tapCapture = that.tapCapture,\n                paneAxis = that.pane[axis],\n                scrollBar = new ScrollBar({\n                    axis: axis,\n                    movable: movable,\n                    dimension: dimension,\n                    container: that.element,\n                    alwaysVisible: that.options.visibleScrollHints\n                });\n\n            dimension.bind(CHANGE, function() {\n                scrollBar.refresh();\n            });\n\n            paneAxis.bind(CHANGE, function() {\n                scrollBar.show();\n            });\n\n            that[axis + \"inertia\"] = new DragInertia({\n                axis: axis,\n                paneAxis: paneAxis,\n                movable: movable,\n                tapCapture: tapCapture,\n                userEvents: that.userEvents,\n                dimension: dimension,\n                elastic: that.options.elastic,\n                friction: that.options.friction || FRICTION,\n                velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n                end: function() {\n                    scrollBar.hide();\n                    that.trigger(\"scrollEnd\", {\n                        axis: axis,\n                        scrollTop: that.scrollTop,\n                        scrollLeft: that.scrollLeft\n                    });\n                }\n            });\n        }\n    });\n\n    ui.plugin(Scroller);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        isRtl = false,\n        NS = \".kendoGroupable\",\n        CHANGE = \"change\",\n        indicatorTmpl = kendo.template('<div class=\"k-group-indicator\" data-#=data.ns#field=\"${data.field}\" data-#=data.ns#title=\"${data.title || \"\"}\" data-#=data.ns#dir=\"${data.dir || \"asc\"}\">' +\n                '<a href=\"\\\\#\" class=\"k-link\">' +\n                    '<span class=\"k-icon k-si-arrow-${(data.dir || \"asc\") == \"asc\" ? \"n\" : \"s\"}\">(sorted ${(data.dir || \"asc\") == \"asc\" ? \"ascending\": \"descending\"})</span>' +\n                    '${data.title ? data.title: data.field}' +\n                '</a>' +\n                '<a class=\"k-button k-button-icon k-button-bare\">' +\n                    '<span class=\"k-icon k-group-delete\"></span>' +\n                '</a>' +\n             '</div>',  { useWithBlock:false }),\n        hint = function(target) {\n            return $('<div class=\"k-header k-drag-clue\" />')\n                .css({\n                    width: target.width(),\n                    paddingLeft: target.css(\"paddingLeft\"),\n                    paddingRight: target.css(\"paddingRight\"),\n                    lineHeight: target.height() + \"px\",\n                    paddingTop: target.css(\"paddingTop\"),\n                    paddingBottom: target.css(\"paddingBottom\")\n                })\n                .html(target.attr(kendo.attr(\"title\")) || target.attr(kendo.attr(\"field\")))\n                .prepend('<span class=\"k-icon k-drag-status k-denied\" />');\n        },\n        dropCue = $('<div class=\"k-grouping-dropclue\"/>'),\n        nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g;\n\n    function dropCueOffsetTop(element) {\n        return element.position().top + 3;\n    }\n\n    var Groupable = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                groupContainer,\n                group = kendo.guid(),\n                intializePositions = proxy(that._intializePositions, that),\n                draggable,\n                horizontalCuePosition,\n                dropCuePositions = that._dropCuePositions = [];\n\n            Widget.fn.init.call(that, element, options);\n\n            isRtl = kendo.support.isRtl(element);\n            horizontalCuePosition = isRtl ? \"right\" : \"left\";\n\n            that.draggable = draggable = that.options.draggable || new kendo.ui.Draggable(that.element, {\n                filter: that.options.draggableElements,\n                hint: hint,\n                group: group\n            });\n\n            that.groupContainer = $(that.options.groupContainer, that.element)\n                .kendoDropTarget({\n                    group: draggable.options.group,\n                    dragenter: function(e) {\n                        if (that._canDrag(e.draggable.currentTarget)) {\n                            e.draggable.hint.find(\".k-drag-status\").removeClass(\"k-denied\").addClass(\"k-add\");\n                            dropCue.css(\"top\", dropCueOffsetTop(that.groupContainer)).css(horizontalCuePosition, 0).appendTo(that.groupContainer);\n                        }\n                    },\n                    dragleave: function(e) {\n                        e.draggable.hint.find(\".k-drag-status\").removeClass(\"k-add\").addClass(\"k-denied\");\n                        dropCue.remove();\n                    },\n                    drop: function(e) {\n                        var targetElement = e.draggable.currentTarget,\n                            field = targetElement.attr(kendo.attr(\"field\")),\n                            title = targetElement.attr(kendo.attr(\"title\")),\n                            sourceIndicator = that.indicator(field),\n                            dropCuePositions = that._dropCuePositions,\n                            lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n                            position;\n\n                        if (!targetElement.hasClass(\"k-group-indicator\") && !that._canDrag(targetElement)) {\n                            return;\n                        }\n                        if(lastCuePosition) {\n                            position = that._dropCuePosition(kendo.getOffset(dropCue).left + parseInt(lastCuePosition.element.css(\"marginLeft\"), 10) * (isRtl ? -1 : 1) + parseInt(lastCuePosition.element.css(\"marginRight\"), 10));\n                            if(position && that._canDrop($(sourceIndicator), position.element, position.left)) {\n                                if(position.before) {\n                                    position.element.before(sourceIndicator || that.buildIndicator(field, title));\n                                } else {\n                                    position.element.after(sourceIndicator || that.buildIndicator(field, title));\n                                }\n\n                                that._change();\n                            }\n                        } else {\n                            that.groupContainer.append(that.buildIndicator(field, title));\n                            that._change();\n                        }\n                    }\n                })\n                .kendoDraggable({\n                    filter: \"div.k-group-indicator\",\n                    hint: hint,\n                    group: draggable.options.group,\n                    dragcancel: proxy(that._dragCancel, that),\n                    dragstart: function(e) {\n                        var element = e.currentTarget,\n                            marginLeft = parseInt(element.css(\"marginLeft\"), 10),\n                            elementPosition = element.position(),\n                            left = isRtl ? elementPosition.left - marginLeft : elementPosition.left + element.outerWidth();\n\n                        intializePositions();\n                        dropCue.css({top: dropCueOffsetTop(that.groupContainer), left: left}).appendTo(that.groupContainer);\n                        this.hint.find(\".k-drag-status\").removeClass(\"k-denied\").addClass(\"k-add\");\n                    },\n                    dragend: function() {\n                        that._dragEnd(this);\n                    },\n                    drag: proxy(that._drag, that)\n                })\n                .on(\"click\" + NS, \".k-button\", function(e) {\n                    e.preventDefault();\n                    that._removeIndicator($(this).parent());\n                })\n                .on(\"click\" + NS,\".k-link\", function(e) {\n                    var current = $(this).parent(),\n                        newIndicator = that.buildIndicator(current.attr(kendo.attr(\"field\")), current.attr(kendo.attr(\"title\")), current.attr(kendo.attr(\"dir\")) == \"asc\" ? \"desc\" : \"asc\");\n\n                    current.before(newIndicator).remove();\n                    that._change();\n                    e.preventDefault();\n                });\n\n            draggable.bind([ \"dragend\", \"dragcancel\", \"dragstart\", \"drag\" ],\n            {\n                dragend: function() {\n                    that._dragEnd(this);\n                },\n                dragcancel: proxy(that._dragCancel, that),\n                dragstart: function(e) {\n                    var element, marginRight, left;\n\n                    if (!that.options.allowDrag && !that._canDrag(e.currentTarget)) {\n                        e.preventDefault();\n                        return;\n                    }\n\n                    intializePositions();\n                    if(dropCuePositions.length) {\n                        element = dropCuePositions[dropCuePositions.length - 1].element;\n                        marginRight = parseInt(element.css(\"marginRight\"), 10);\n                        left = element.position().left + element.outerWidth() + marginRight;\n                    } else {\n                        left = 0;\n                    }\n                },\n                drag: proxy(that._drag, that)\n            });\n\n            that.dataSource = that.options.dataSource;\n\n            if (that.dataSource && that._refreshHandler) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler);\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n            }\n\n            if(that.dataSource) {\n                that.dataSource.bind(\"change\", that._refreshHandler);\n                that.refresh();\n            }\n        },\n\n        refresh: function() {\n            var that = this,\n                dataSource = that.dataSource;\n\n            if (that.groupContainer) {\n                that.groupContainer.empty().append(\n                    $.map(dataSource.group() || [], function(item) {\n                        var fieldName = item.field;\n                        var attr = kendo.attr(\"field\");\n                        var element = that.element.find(that.options.filter)\n                            .filter(function() { return $(this).attr(attr) === fieldName; });\n\n                        return that.buildIndicator(item.field, element.attr(kendo.attr(\"title\")), item.dir);\n                    }).join(\"\")\n                );\n            }\n            that._invalidateGroupContainer();\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.groupContainer.off(NS);\n\n            if (that.groupContainer.data(\"kendoDropTarget\")) {\n                that.groupContainer.data(\"kendoDropTarget\").destroy();\n            }\n\n            if (that.groupContainer.data(\"kendoDraggable\")) {\n                that.groupContainer.data(\"kendoDraggable\").destroy();\n            }\n\n            if (!that.options.draggable) {\n                that.draggable.destroy();\n            }\n\n            if (that.dataSource && that._refreshHandler) {\n                that.dataSource.unbind(\"change\", that._refreshHandler);\n                that._refreshHandler = null;\n            }\n\n            that.groupContainer = that.element = that.draggable = null;\n        },\n\n        options: {\n            name: \"Groupable\",\n            filter: \"th\",\n            draggableElements: \"th\",\n            messages: {\n                empty: \"Drag a column header and drop it here to group by that column\"\n            }\n        },\n\n        indicator: function(field) {\n            var indicators = $(\".k-group-indicator\", this.groupContainer);\n            return $.grep(indicators, function (item)\n                {\n                    return $(item).attr(kendo.attr(\"field\")) === field;\n                })[0];\n        },\n        buildIndicator: function(field, title, dir) {\n            return indicatorTmpl({ field: field.replace(/\"/g, \"'\"), dir: dir, title: title, ns: kendo.ns });\n        },\n        descriptors: function() {\n            var that = this,\n                indicators = $(\".k-group-indicator\", that.groupContainer),\n                aggregates,\n                names,\n                field,\n                idx,\n                length;\n\n            aggregates = that.element.find(that.options.filter).map(function() {\n                var cell = $(this),\n                    aggregate = cell.attr(kendo.attr(\"aggregates\")),\n                    member = cell.attr(kendo.attr(\"field\"));\n\n                if (aggregate && aggregate !== \"\") {\n                    names = aggregate.split(\",\");\n                    aggregate = [];\n                    for (idx = 0, length = names.length; idx < length; idx++) {\n                        aggregate.push({ field: member, aggregate: names[idx] });\n                    }\n                }\n                return aggregate;\n            }).toArray();\n\n            return $.map(indicators, function(item) {\n                item = $(item);\n                field = item.attr(kendo.attr(\"field\"));\n\n                return {\n                    field: field,\n                    dir: item.attr(kendo.attr(\"dir\")),\n                    aggregates: aggregates || []\n                };\n            });\n        },\n        _removeIndicator: function(indicator) {\n            var that = this;\n            indicator.remove();\n            that._invalidateGroupContainer();\n            that._change();\n        },\n        _change: function() {\n            var that = this;\n            if(that.dataSource) {\n                that.dataSource.group(that.descriptors());\n            }\n        },\n        _dropCuePosition: function(position) {\n            var dropCuePositions = this._dropCuePositions;\n            if(!dropCue.is(\":visible\") || dropCuePositions.length === 0) {\n                return;\n            }\n\n            position = Math.ceil(position);\n\n            var lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n                left = lastCuePosition.left,\n                right = lastCuePosition.right,\n                marginLeft = parseInt(lastCuePosition.element.css(\"marginLeft\"), 10),\n                marginRight = parseInt(lastCuePosition.element.css(\"marginRight\"), 10);\n\n            if(position >= right && !isRtl || position < left && isRtl) {\n                position = {\n                    left: lastCuePosition.element.position().left + (!isRtl ? lastCuePosition.element.outerWidth() + marginRight : - marginLeft),\n                    element: lastCuePosition.element,\n                    before: false\n                };\n            } else {\n                position = $.grep(dropCuePositions, function(item) {\n                    return (item.left <= position && position <= item.right) || (isRtl && position > item.right);\n                })[0];\n\n                if(position) {\n                    position = {\n                        left: isRtl ? position.element.position().left + position.element.outerWidth() + marginRight : position.element.position().left - marginLeft,\n                        element: position.element,\n                        before: true\n                    };\n                }\n            }\n\n            return position;\n        },\n        _drag: function(event) {\n            var position = this._dropCuePosition(event.x.location);\n\n            if (position) {\n                dropCue.css({ left: position.left, right: \"auto\" });\n            }\n        },\n        _canDrag: function(element) {\n            var field = element.attr(kendo.attr(\"field\"));\n\n            return element.attr(kendo.attr(\"groupable\")) != \"false\" &&\n                field &&\n                (element.hasClass(\"k-group-indicator\") ||\n                    !this.indicator(field));\n        },\n        _canDrop: function(source, target, position) {\n            var next = source.next(),\n                result = source[0] !== target[0] && (!next[0] || target[0] !== next[0] || (!isRtl && position > next.position().left || isRtl && position < next.position().left));\n            return result;\n        },\n        _dragEnd: function(draggable) {\n            var that = this,\n                field = draggable.currentTarget.attr(kendo.attr(\"field\")),\n                sourceIndicator = that.indicator(field);\n\n            if (draggable !== that.options.draggable && !draggable.dropped && sourceIndicator) {\n                that._removeIndicator($(sourceIndicator));\n            }\n\n            that._dragCancel();\n        },\n        _dragCancel: function() {\n            dropCue.remove();\n            this._dropCuePositions = [];\n        },\n        _intializePositions: function() {\n            var that = this,\n                indicators = $(\".k-group-indicator\", that.groupContainer),\n                left;\n\n            that._dropCuePositions = $.map(indicators, function(item) {\n                item = $(item);\n                left = kendo.getOffset(item).left;\n                return {\n                    left: parseInt(left, 10),\n                    right: parseInt(left + item.outerWidth(), 10),\n                    element: item\n                };\n            });\n        },\n        _invalidateGroupContainer: function() {\n            var groupContainer = this.groupContainer;\n            if(groupContainer && groupContainer.is(\":empty\")) {\n                groupContainer.html(this.options.messages.empty);\n            }\n        }\n    });\n\n    kendo.ui.plugin(Groupable);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        getOffset = kendo.getOffset,\n        Widget = kendo.ui.Widget,\n        CHANGE =  \"change\",\n        KREORDERABLE = \"k-reorderable\";\n\n    function toggleHintClass(hint, denied) {\n        hint = $(hint);\n\n        if (denied) {\n            hint.find(\".k-drag-status\").removeClass(\"k-add\").addClass(\"k-denied\");\n        } else {\n            hint.find(\".k-drag-status\").removeClass(\"k-denied\").addClass(\"k-add\");\n        }\n    }\n\n    var Reorderable = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                draggable,\n                group = kendo.guid() + \"-reorderable\";\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element.addClass(KREORDERABLE);\n            options = that.options;\n\n            that.draggable = draggable = options.draggable || new kendo.ui.Draggable(element, {\n                group: group,\n                filter: options.filter,\n                hint: options.hint\n            });\n\n            that.reorderDropCue = $('<div class=\"k-reorder-cue\"><div class=\"k-icon k-i-arrow-s\"></div><div class=\"k-icon k-i-arrow-n\"></div></div>');\n\n            element.find(draggable.options.filter).kendoDropTarget({\n                group: draggable.options.group,\n                dragenter: function(e) {\n                    if (!that._draggable) {\n                        return;\n                    }\n\n                    var dropTarget = this.element, offset;\n                    var denied = !that._dropTargetAllowed(dropTarget) || that._isLastDraggable();\n\n                    toggleHintClass(e.draggable.hint, denied);\n                    if (!denied) {\n                        offset = getOffset(dropTarget);\n                        var left = offset.left;\n\n                        if (options.inSameContainer && !options.inSameContainer({\n                            source: dropTarget,\n                            target: that._draggable,\n                            sourceIndex: that._index(dropTarget),\n                            targetIndex: that._index(that._draggable)\n                        })) {\n                            that._dropTarget = dropTarget;\n                        } else {\n                            if (that._index(dropTarget) > that._index(that._draggable)) {\n                                left += dropTarget.outerWidth();\n                            }\n                        }\n\n                        that.reorderDropCue.css({\n                             height: dropTarget.outerHeight(),\n                             top: offset.top,\n                             left: left\n                        })\n                        .appendTo(document.body);\n                    }\n                },\n                dragleave: function(e) {\n                    toggleHintClass(e.draggable.hint, true);\n                    that.reorderDropCue.remove();\n                    that._dropTarget = null;\n                },\n                drop: function() {\n                    that._dropTarget = null;\n                    if (!that._draggable) {\n                        return;\n                    }\n                    var dropTarget = this.element;\n                    var draggable = that._draggable;\n                    var containerChange = false;\n\n                    if (that._dropTargetAllowed(dropTarget) && !that._isLastDraggable()) {\n                        that.trigger(CHANGE, {\n                            element: that._draggable,\n                            target: dropTarget,\n                            oldIndex: that._index(draggable),\n                            newIndex: that._index(dropTarget),\n                            position: getOffset(that.reorderDropCue).left > getOffset(dropTarget).left ? \"after\" : \"before\"\n                        });\n                    }\n                }\n            });\n\n            draggable.bind([ \"dragcancel\", \"dragend\", \"dragstart\", \"drag\" ],\n                {\n                    dragcancel: function() {\n                        that.reorderDropCue.remove();\n                        that._draggable = null;\n                        that._elements = null;\n                    },\n                    dragend: function() {\n                        that.reorderDropCue.remove();\n                        that._draggable = null;\n                        that._elements = null;\n                    },\n                    dragstart: function(e) {\n                        that._draggable = e.currentTarget;\n                        that._elements = that.element.find(that.draggable.options.filter);\n                    },\n                    drag: function(e) {\n                        if (!that._dropTarget || this.hint.find(\".k-drag-status\").hasClass(\"k-denied\")) {\n                            return;\n                        }\n\n                        var dropStartOffset = getOffset(that._dropTarget).left;\n                        var width = that._dropTarget.outerWidth();\n\n                        if (e.pageX > dropStartOffset + width / 2) {\n                            that.reorderDropCue.css({ left: dropStartOffset + width });\n                        } else {\n                            that.reorderDropCue.css({ left: dropStartOffset });\n                        }\n                    }\n                }\n            );\n        },\n\n        options: {\n            name: \"Reorderable\",\n            filter: \"*\"\n        },\n\n        events: [\n            CHANGE\n        ],\n\n        _isLastDraggable: function() {\n            var inSameContainer = this.options.inSameContainer,\n                draggable = this._draggable[0],\n                elements = this._elements.get(),\n                found = false,\n                item;\n\n            if (!inSameContainer) {\n                return false;\n            }\n\n            while (!found && elements.length > 0) {\n                item = elements.pop();\n                found = draggable !== item && inSameContainer({\n                    source: draggable,\n                    target: item,\n                    sourceIndex: this._index(draggable),\n                    targetIndex: this._index(item)\n                });\n            }\n\n            return !found;\n        },\n\n        _dropTargetAllowed: function(dropTarget) {\n            var inSameContainer = this.options.inSameContainer,\n                dragOverContainers = this.options.dragOverContainers,\n                draggable = this._draggable;\n\n            if (draggable[0] === dropTarget[0]) {\n                return false;\n            }\n\n            if (!inSameContainer || !dragOverContainers) {\n                return true;\n            }\n\n            if (inSameContainer({ source: draggable,\n                target: dropTarget,\n                sourceIndex: this._index(draggable),\n                targetIndex: this._index(dropTarget)\n            })) {\n                return true;\n            }\n\n            return dragOverContainers(this._index(draggable), this._index(dropTarget));\n        },\n\n        _index: function(element) {\n            return this._elements.index(element);\n        },\n\n        destroy: function() {\n           var that = this;\n\n           Widget.fn.destroy.call(that);\n\n           that.element.find(that.draggable.options.filter).each(function() {\n               var item = $(this);\n               if (item.data(\"kendoDropTarget\")) {\n                   item.data(\"kendoDropTarget\").destroy();\n               }\n           });\n\n           if (that.draggable) {\n               that.draggable.destroy();\n\n               that.draggable.element = that.draggable = null;\n           }\n           that.elements = that.reorderDropCue = that._elements = that._draggable = null;\n       }\n    });\n\n    kendo.ui.plugin(Reorderable);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        proxy = $.proxy,\n        isFunction = kendo.isFunction,\n        extend = $.extend,\n        HORIZONTAL = \"horizontal\",\n        VERTICAL = \"vertical\",\n        START = \"start\",\n        RESIZE = \"resize\",\n        RESIZEEND = \"resizeend\";\n\n    var Resizable = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.orientation = that.options.orientation.toLowerCase() != VERTICAL ? HORIZONTAL : VERTICAL;\n            that._positionMouse = that.orientation == HORIZONTAL ? \"x\" : \"y\";\n            that._position = that.orientation == HORIZONTAL ? \"left\" : \"top\";\n            that._sizingDom = that.orientation == HORIZONTAL ? \"outerWidth\" : \"outerHeight\";\n\n            that.draggable = new ui.Draggable(element, {\n                distance: 0,\n                filter: options.handle,\n                drag: proxy(that._resize, that),\n                dragcancel: proxy(that._cancel, that),\n                dragstart: proxy(that._start, that),\n                dragend: proxy(that._stop, that)\n            });\n\n            that.userEvents = that.draggable.userEvents;\n        },\n\n        events: [\n            RESIZE,\n            RESIZEEND,\n            START\n        ],\n\n        options: {\n            name: \"Resizable\",\n            orientation: HORIZONTAL\n        },\n\n        resize: function() {\n            // Overrides base widget resize\n        },\n\n        _max: function(e) {\n            var that = this,\n                hintSize = that.hint ? that.hint[that._sizingDom]() : 0,\n                size = that.options.max;\n\n            return isFunction(size) ? size(e) : size !== undefined ? (that._initialElementPosition + size) - hintSize : size;\n        },\n\n        _min: function(e) {\n            var that = this,\n                size = that.options.min;\n\n            return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size : size;\n        },\n\n        _start: function(e) {\n            var that = this,\n                hint = that.options.hint,\n                el = $(e.currentTarget);\n\n            that._initialElementPosition = el.position()[that._position];\n            that._initialMousePosition = e[that._positionMouse].startLocation;\n\n            if (hint) {\n                that.hint = isFunction(hint) ? $(hint(el)) : hint;\n\n                that.hint.css({\n                    position: \"absolute\"\n                })\n                .css(that._position, that._initialElementPosition)\n                .appendTo(that.element);\n            }\n\n            that.trigger(START, e);\n\n            that._maxPosition = that._max(e);\n            that._minPosition = that._min(e);\n\n            $(document.body).css(\"cursor\", el.css(\"cursor\"));\n        },\n\n        _resize: function(e) {\n            var that = this,\n                maxPosition = that._maxPosition,\n                minPosition = that._minPosition,\n                currentPosition = that._initialElementPosition + (e[that._positionMouse].location - that._initialMousePosition),\n                position;\n\n            position = minPosition !== undefined ? Math.max(minPosition, currentPosition) : currentPosition;\n            that.position = position =  maxPosition !== undefined ? Math.min(maxPosition, position) : position;\n\n            if(that.hint) {\n                that.hint.toggleClass(that.options.invalidClass || \"\", position == maxPosition || position == minPosition)\n                         .css(that._position, position);\n            }\n\n            that.resizing = true;\n            that.trigger(RESIZE, extend(e, { position: position }));\n        },\n\n        _stop: function(e) {\n            var that = this;\n\n            if(that.hint) {\n                that.hint.remove();\n            }\n\n            that.resizing = false;\n            that.trigger(RESIZEEND, extend(e, { position: that.position }));\n            $(document.body).css(\"cursor\", \"\");\n        },\n\n        _cancel: function(e) {\n            var that = this;\n\n            if (that.hint) {\n                that.position = undefined;\n                that.hint.css(that._position, that._initialElementPosition);\n                that._stop(e);\n            }\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            if (that.draggable) {\n                that.draggable.destroy();\n            }\n        },\n\n        press: function(target) {\n            if (!target) {\n                return;\n            }\n\n            var position = target.position(),\n                that = this;\n\n            that.userEvents.press(position.left, position.top, target[0]);\n            that.targetPosition = position;\n            that.target = target;\n        },\n\n        move: function(delta) {\n            var that = this,\n                orientation = that._position,\n                position = that.targetPosition,\n                current = that.position;\n\n            if (current === undefined) {\n                current = position[orientation];\n            }\n\n            position[orientation] = current + delta;\n\n            that.userEvents.move(position.left, position.top);\n        },\n\n        end: function() {\n            this.userEvents.end();\n            this.target = this.position = undefined;\n        }\n    });\n\n    kendo.ui.plugin(Resizable);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n\n        START = \"start\",\n        BEFORE_MOVE = \"beforeMove\",\n        MOVE = \"move\",\n        END = \"end\",\n        CHANGE = \"change\",\n        CANCEL = \"cancel\",\n\n        ACTION_SORT = \"sort\",\n        ACTION_REMOVE = \"remove\",\n        ACTION_RECEIVE = \"receive\",\n\n        DEFAULT_FILTER = \">*\",\n        MISSING_INDEX = -1;\n\n    function containsOrEqualTo(parent, child) {\n        try {\n            return $.contains(parent, child) || parent == child;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function defaultHint(element) {\n        return element.clone();\n    }\n\n    function defaultPlaceholder(element) {\n        return element.clone().removeAttr(\"id\").css(\"visibility\", \"hidden\");\n    }\n\n    var Sortable = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            if(!that.options.placeholder) {\n                that.options.placeholder = defaultPlaceholder;\n            }\n\n            if(!that.options.hint) {\n                that.options.hint = defaultHint;\n            }\n\n            that._draggable = that._createDraggable();\n        },\n\n        events: [\n            START,\n            BEFORE_MOVE,\n            MOVE,\n            END,\n            CHANGE,\n            CANCEL\n        ],\n\n        options: {\n            name: \"Sortable\",\n            hint: null,\n            placeholder: null,\n            filter: DEFAULT_FILTER,\n            holdToDrag: false,\n            disabled: null,\n            container: null,\n            connectWith: null,\n            handler: null,\n            cursorOffset: null,\n            axis: null,\n            ignore: null,\n            cursor: \"auto\"\n        },\n\n        destroy: function() {\n            this._draggable.destroy();\n            Widget.fn.destroy.call(this);\n        },\n\n        _createDraggable: function() {\n            var that = this,\n                element = that.element,\n                options = that.options;\n\n            return new kendo.ui.Draggable(element, {\n                filter: options.filter,\n                hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n                holdToDrag: options.holdToDrag,\n                container: options.container ? $(options.container) : null,\n                cursorOffset: options.cursorOffset,\n                axis: options.axis,\n                ignore: options.ignore,\n                dragstart: $.proxy(that._dragstart, that),\n                dragcancel: $.proxy(that._dragcancel, that),\n                drag: $.proxy(that._drag, that),\n                dragend: $.proxy(that._dragend, that)\n            });\n        },\n\n        _dragstart: function(e) {\n            var draggedElement = this.draggedElement = e.currentTarget,\n                target = e.target || kendo.elementUnderCursor(e),\n                disabled = this.options.disabled,\n                handler = this.options.handler,\n                _placeholder = this.options.placeholder,\n                placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n\n            if(disabled && draggedElement.is(disabled)) {\n                e.preventDefault();\n            } else if(handler && !$(target).is(handler)) {\n                e.preventDefault();\n            } else {\n\n                if(this.trigger(START, { item: draggedElement, draggableEvent: e })) {\n                    e.preventDefault();\n                } else {\n                    draggedElement.css(\"display\", \"none\");\n                    draggedElement.before(placeholder);\n\n                    this._setCursor();\n                }\n\n            }\n        },\n\n        _dragcancel: function(e) {\n            this._cancel();\n            this.trigger(CANCEL, { item: this.draggedElement });\n\n            this._resetCursor();\n        },\n\n        _drag: function(e) {\n            var draggedElement = this.draggedElement,\n                target = this._findTarget(e),\n                targetCenter,\n                cursorOffset = { left: e.x.location, top: e.y.location },\n                offsetDelta,\n                axisDelta = { x: e.x.delta, y: e.y.delta },\n                direction,\n                sibling,\n                getSibling,\n                axis = this.options.axis,\n                eventData = { item: draggedElement, list: this, draggableEvent: e };\n\n            if(axis === \"x\" || axis === \"y\") {\n                this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n                return;\n            }\n\n            if(target) {\n                targetCenter = this._getElementCenter(target.element);\n\n                offsetDelta = {\n                    left: Math.round(cursorOffset.left - targetCenter.left),\n                    top: Math.round(cursorOffset.top - targetCenter.top)\n                };\n\n                $.extend(eventData, { target: target.element });\n\n                if(target.appendToBottom) {\n                    this._movePlaceholder(target, null, eventData);\n                    return;\n                }\n\n                if(target.appendAfterHidden) {\n                    this._movePlaceholder(target, \"next\", eventData);\n                }\n\n                if(this._isFloating(target.element)) { //horizontal\n                    if(axisDelta.x < 0 && offsetDelta.left < 0) {\n                        direction = \"prev\";\n                    } else if(axisDelta.x > 0 && offsetDelta.left > 0) {\n                        direction = \"next\";\n                    }\n                } else { //vertical\n                    if(axisDelta.y < 0 && offsetDelta.top < 0) {\n                        direction = \"prev\";\n                    } else if(axisDelta.y > 0 && offsetDelta.top > 0) {\n                        direction = \"next\";\n                    }\n                }\n\n                if(direction) {\n                    getSibling = (direction === \"prev\") ? jQuery.fn.prev : jQuery.fn.next;\n\n                    sibling = getSibling.call(target.element);\n\n                    //find the prev/next visible sibling\n                    while(sibling.length && !sibling.is(\":visible\")) {\n                        sibling = getSibling.call(sibling);\n                    }\n\n                    if(sibling[0] != this.placeholder[0]) {\n                        this._movePlaceholder(target, direction, eventData);\n                    }\n                }\n            }\n        },\n\n        _dragend: function(e) {\n            var placeholder = this.placeholder,\n                draggedElement = this.draggedElement,\n                draggedIndex = this.indexOf(draggedElement),\n                placeholderIndex = this.indexOf(placeholder),\n                connectWith = this.options.connectWith,\n                connectedList,\n                isDefaultPrevented,\n                eventData,\n                connectedListEventData;\n\n            this._resetCursor();\n\n            eventData = {\n                action: ACTION_SORT,\n                item: draggedElement,\n                oldIndex: draggedIndex,\n                newIndex: placeholderIndex,\n                draggableEvent: e\n            };\n\n            if(placeholderIndex >= 0) {\n                isDefaultPrevented = this.trigger(END, eventData);\n            } else {\n                connectedList = placeholder.parents(connectWith).getKendoSortable();\n\n                eventData.action = ACTION_REMOVE;\n                connectedListEventData = $.extend({}, eventData, {\n                    action: ACTION_RECEIVE,\n                    oldIndex: MISSING_INDEX,\n                    newIndex: connectedList.indexOf(placeholder)\n                });\n\n                isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n            }\n\n            if(isDefaultPrevented || placeholderIndex === draggedIndex) {\n                this._cancel();\n                return;\n            }\n\n            placeholder.replaceWith(draggedElement);\n\n            draggedElement.show();\n            this._draggable.dropped = true;\n\n            eventData = {\n                action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n                item: draggedElement,\n                oldIndex: draggedIndex,\n                newIndex: this.indexOf(draggedElement),\n                draggableEvent: e\n            };\n\n            this.trigger(CHANGE, eventData);\n\n            if(connectedList) {\n                connectedListEventData = $.extend({}, eventData, {\n                    action: ACTION_RECEIVE,\n                    oldIndex: MISSING_INDEX,\n                    newIndex: connectedList.indexOf(draggedElement)\n                });\n\n                connectedList.trigger(CHANGE, connectedListEventData);\n            }\n\n        },\n\n        _findTarget: function(e) {\n            var element = this._findElementUnderCursor(e),\n                items,\n                connectWith = this.options.connectWith,\n                node;\n\n            if($.contains(this.element[0], element)) { //the element is part of the sortable container\n                items = this.items();\n                node = items.filter(element)[0] || items.has(element)[0];\n\n                return node ? { element: $(node), sortable: this } : null;\n            } else if (this.element[0] == element && this._isEmpty()) {\n                return { element: this.element, sortable: this, appendToBottom: true };\n            } else if (this.element[0] == element && this._isLastHidden()) {\n                node = this.items().eq(0);\n                return { element: node , sortable: this, appendAfterHidden: true };\n            } else if (connectWith) { //connected lists are present\n                return this._searchConnectedTargets(element, e);\n            }\n        },\n\n        _findElementUnderCursor: function(e) {\n            var elementUnderCursor = kendo.elementUnderCursor(e),\n                draggable = e.sender,\n                disabled = this.options.disabled,\n                filter = this.options.filter,\n                items = this.items();\n\n            if(containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n                draggable.hint.hide();\n                elementUnderCursor = kendo.elementUnderCursor(e);\n                // IE8 does not return the element in iframe from first attempt\n                if (!elementUnderCursor) {\n                    elementUnderCursor = kendo.elementUnderCursor(e);\n                }\n                draggable.hint.show();\n            }\n\n            return elementUnderCursor;\n        },\n\n        _searchConnectedTargets: function(element, e) {\n            var connected = $(this.options.connectWith),\n                sortableInstance,\n                items,\n                node;\n\n            for (var i = 0; i < connected.length; i++) {\n                sortableInstance = connected.eq(i).getKendoSortable();\n\n                if($.contains(connected[i], element)) {\n                    if(sortableInstance) {\n                        items = sortableInstance.items();\n                        node = items.filter(element)[0] || items.has(element)[0];\n\n                        if(node) {\n                            sortableInstance.placeholder = this.placeholder;\n                            return { element: $(node), sortable: sortableInstance };\n                        } else {\n                            return null;\n                        }\n                    }\n                } else if(connected[i] == element) {\n                    if(sortableInstance && sortableInstance._isEmpty()) {\n                        return { element: connected.eq(i), sortable: sortableInstance, appendToBottom: true };\n                    } else if (this._isCursorAfterLast(sortableInstance, e)) {\n                        node = sortableInstance.items().last();\n                        return { element: node, sortable: sortableInstance };\n                    }\n                }\n            }\n\n        },\n\n        _isCursorAfterLast: function(sortable, e) {\n            var lastItem = sortable.items().last(),\n                cursorOffset = { left: e.x.location, top: e.y.location },\n                lastItemOffset,\n                delta;\n\n            lastItemOffset = kendo.getOffset(lastItem);\n            lastItemOffset.top += lastItem.outerHeight();\n            lastItemOffset.left += lastItem.outerWidth();\n\n            if(this._isFloating(lastItem)) { //horizontal\n                delta = lastItemOffset.left - cursorOffset.left;\n            } else { //vertical\n                delta = lastItemOffset.top - cursorOffset.top;\n            }\n\n            return delta < 0 ? true : false;\n        },\n\n        _movementByAxis: function(axis, cursorOffset, delta, eventData) {\n            var cursorPosition = (axis === \"x\") ? cursorOffset.left : cursorOffset.top,\n                target = (delta < 0) ? this.placeholder.prev() : this.placeholder.next(),\n                targetCenter;\n\n            if (target.length && !target.is(\":visible\")) {\n                target = (delta <0) ? target.prev() : target.next();\n            }\n\n            $.extend(eventData, { target: target });\n            targetCenter = this._getElementCenter(target);\n\n            if (targetCenter) {\n                targetCenter = (axis === \"x\") ? targetCenter.left : targetCenter.top;\n            }\n\n            if (target.length && delta < 0 && cursorPosition - targetCenter < 0) { //prev\n                this._movePlaceholder({ element: target, sortable: this }, \"prev\", eventData);\n            } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) { //next\n                this._movePlaceholder({ element: target, sortable: this }, \"next\", eventData);\n            }\n        },\n\n        _movePlaceholder: function(target, direction, eventData) {\n            var placeholder = this.placeholder;\n\n            if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n\n                if (!direction) {\n                    target.element.append(placeholder);\n                } else if (direction === \"prev\") {\n                    target.element.before(placeholder);\n                } else if (direction === \"next\") {\n                    target.element.after(placeholder);\n                }\n\n                target.sortable.trigger(MOVE, eventData);\n            }\n        },\n\n        _setCursor: function() {\n            var cursor = this.options.cursor,\n                body;\n\n            if(cursor && cursor !== \"auto\") {\n                body = $(document.body);\n\n                this._originalCursorType = body.css(\"cursor\");\n                body.css({ \"cursor\": cursor });\n\n                if(!this._cursorStylesheet) {\n                    this._cursorStylesheet = $(\"<style>* { cursor: \" + cursor + \" !important; }</style>\");\n                }\n\n                this._cursorStylesheet.appendTo(body);\n            }\n        },\n\n        _resetCursor: function() {\n            if(this._originalCursorType) {\n                $(document.body).css(\"cursor\", this._originalCursorType);\n                this._originalCursorType = null;\n\n                this._cursorStylesheet.remove();\n            }\n        },\n\n        _getElementCenter: function(element) {\n            var center = element.length ? kendo.getOffset(element) : null;\n            if(center) {\n                center.top += element.outerHeight() / 2;\n                center.left += element.outerWidth() / 2;\n            }\n\n            return center;\n        },\n\n        _isFloating: function(item) {\n            return (/left|right/).test(item.css(\"float\")) || (/inline|table-cell/).test(item.css(\"display\"));\n        },\n\n        _cancel: function() {\n            this.draggedElement.show();\n            this.placeholder.remove();\n        },\n\n        _items: function() {\n            var filter = this.options.filter,\n                items;\n\n            if(filter) {\n                items = this.element.find(filter);\n            } else {\n                items = this.element.children();\n            }\n\n            return items;\n        },\n\n        indexOf: function(element) {\n            var items = this._items(),\n                placeholder = this.placeholder,\n                draggedElement = this.draggedElement;\n\n            if(placeholder && element[0] == placeholder[0]) {\n                return items.not(draggedElement).index(element);\n            } else {\n                return items.not(placeholder).index(element);\n            }\n        },\n\n        items: function() {\n            var placeholder = this.placeholder,\n                items = this._items();\n\n            if(placeholder) {\n                items = items.not(placeholder);\n            }\n\n            return items;\n        },\n\n        _isEmpty: function() {\n            return !this.items().length;\n        },\n\n        _isLastHidden: function() {\n            return this.items().length === 1 && this.items().is(\":hidden\");\n        }\n\n    });\n\n    kendo.ui.plugin(Sortable);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        abs = Math.abs,\n        shift = Array.prototype.shift,\n        ARIASELECTED = \"aria-selected\",\n        SELECTED = \"k-state-selected\",\n        ACTIVE = \"k-state-selecting\",\n        SELECTABLE = \"k-selectable\",\n        CHANGE = \"change\",\n        NS = \".kendoSelectable\",\n        UNSELECTING = \"k-state-unselecting\",\n        INPUTSELECTOR = \"input,a,textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,span.k-icon.k-i-expand,span.k-icon.k-i-collapse\",\n        msie = kendo.support.browser.msie,\n        supportEventDelegation = false;\n\n        (function($) {\n            (function() {\n                $('<div class=\"parent\"><span /></div>')\n                .on(\"click\", \">*\", function() {\n                    supportEventDelegation = true;\n                })\n                .find(\"span\")\n                .click()\n                .end()\n                .off();\n            })();\n        })($);\n\n    var Selectable = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                multiple;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._marquee = $(\"<div class='k-marquee'><div class='k-marquee-color'></div></div>\");\n            that._lastActive = null;\n            that.element.addClass(SELECTABLE);\n\n            that.relatedTarget = that.options.relatedTarget;\n\n            multiple = that.options.multiple;\n\n            if (this.options.aria && multiple) {\n                that.element.attr(\"aria-multiselectable\", true);\n            }\n\n            that.userEvents = new kendo.UserEvents(that.element, {\n                global: true,\n                allowSelection: true,\n                filter: (!supportEventDelegation ? \".\" + SELECTABLE + \" \" : \"\") + that.options.filter,\n                tap: proxy(that._tap, that)\n            });\n\n            if (multiple) {\n                that.userEvents\n                   .bind(\"start\", proxy(that._start, that))\n                   .bind(\"move\", proxy(that._move, that))\n                   .bind(\"end\", proxy(that._end, that))\n                   .bind(\"select\", proxy(that._select, that));\n            }\n        },\n\n        events: [CHANGE],\n\n        options: {\n            name: \"Selectable\",\n            filter: \">*\",\n            multiple: false,\n            relatedTarget: $.noop\n        },\n\n        _isElement: function(target) {\n            var elements = this.element;\n            var idx, length = elements.length, result = false;\n\n            target = target[0];\n\n            for (idx = 0; idx < length; idx ++) {\n                if (elements[idx] === target) {\n                    result = true;\n                    break;\n                }\n            }\n\n            return result;\n        },\n\n        _tap: function(e) {\n            var target = $(e.target),\n                that = this,\n                ctrlKey = e.event.ctrlKey || e.event.metaKey,\n                multiple = that.options.multiple,\n                shiftKey = multiple && e.event.shiftKey,\n                selected,\n                whichCode = e.event.which,\n                buttonCode = e.event.button;\n\n            //in case of hierarchy or right-click\n            if (!that._isElement(target.closest(\".\" + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n                return;\n            }\n\n            if (!this._allowSelection(e.event.target)) {\n                return;\n            }\n\n            selected = target.hasClass(SELECTED);\n            if (!multiple || !ctrlKey) {\n                that.clear();\n            }\n\n            target = target.add(that.relatedTarget(target));\n\n            if (shiftKey) {\n                that.selectRange(that._firstSelectee(), target);\n            } else {\n                if (selected && ctrlKey) {\n                    that._unselect(target);\n                    that._notify(CHANGE);\n                } else {\n                    that.value(target);\n                }\n\n                that._lastActive = that._downTarget = target;\n            }\n        },\n\n        _start: function(e) {\n            var that = this,\n                target = $(e.target),\n                selected = target.hasClass(SELECTED),\n                currentElement,\n                ctrlKey = e.event.ctrlKey || e.event.metaKey;\n\n            if (!this._allowSelection(e.event.target)) {\n                return;\n            }\n\n            that._downTarget = target;\n\n            //in case of hierarchy\n            if (!that._isElement(target.closest(\".\" + SELECTABLE))) {\n                that.userEvents.cancel();\n                return;\n            }\n\n            if (that.options.useAllItems) {\n                that._items = that.element.find(that.options.filter);\n            } else {\n                currentElement = target.closest(that.element);\n                that._items = currentElement.find(that.options.filter);\n            }\n\n            e.sender.capture();\n\n            that._marquee\n                .appendTo(document.body)\n                .css({\n                    left: e.x.client + 1,\n                    top: e.y.client + 1,\n                    width: 0,\n                    height: 0\n                });\n\n            if (!ctrlKey) {\n                that.clear();\n            }\n\n            target = target.add(that.relatedTarget(target));\n            if (selected) {\n                that._selectElement(target, true);\n                if (ctrlKey) {\n                    target.addClass(UNSELECTING);\n                }\n            }\n        },\n\n        _move: function(e) {\n            var that = this,\n                position = {\n                    left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n                    top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n                    width: abs(e.x.initialDelta),\n                    height: abs(e.y.initialDelta)\n                };\n\n            that._marquee.css(position);\n\n            that._invalidateSelectables(position, (e.event.ctrlKey || e.event.metaKey));\n\n            e.preventDefault();\n        },\n\n        _end: function() {\n            var that = this;\n\n            that._marquee.remove();\n\n            that._unselect(that.element\n                .find(that.options.filter + \".\" + UNSELECTING))\n                .removeClass(UNSELECTING);\n\n\n            var target = that.element.find(that.options.filter + \".\" + ACTIVE);\n            target = target.add(that.relatedTarget(target));\n\n            that.value(target);\n            that._lastActive = that._downTarget;\n            that._items = null;\n        },\n\n        _invalidateSelectables: function(position, ctrlKey) {\n            var idx,\n                length,\n                target = this._downTarget[0],\n                items = this._items,\n                related,\n                toSelect;\n\n            for (idx = 0, length = items.length; idx < length; idx ++) {\n                toSelect = items.eq(idx);\n                related = toSelect.add(this.relatedTarget(toSelect));\n\n                if (collision(toSelect, position)) {\n                    if(toSelect.hasClass(SELECTED)) {\n                        if(ctrlKey && target !== toSelect[0]) {\n                            related.removeClass(SELECTED).addClass(UNSELECTING);\n                        }\n                    } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n                        related.addClass(ACTIVE);\n                    }\n                } else {\n                    if (toSelect.hasClass(ACTIVE)) {\n                        related.removeClass(ACTIVE);\n                    } else if(ctrlKey && toSelect.hasClass(UNSELECTING)) {\n                        related.removeClass(UNSELECTING).addClass(SELECTED);\n                    }\n                }\n            }\n        },\n\n        value: function(val) {\n            var that = this,\n                selectElement = proxy(that._selectElement, that);\n\n            if(val) {\n                val.each(function() {\n                    selectElement(this);\n                });\n\n                that._notify(CHANGE);\n                return;\n            }\n\n            return that.element.find(that.options.filter + \".\" + SELECTED);\n        },\n\n        _firstSelectee: function() {\n            var that = this,\n                selected;\n\n            if(that._lastActive !== null) {\n                return that._lastActive;\n            }\n\n            selected = that.value();\n            return selected.length > 0 ?\n                    selected[0] :\n                    that.element.find(that.options.filter)[0];\n        },\n\n        _selectElement: function(element, preventNotify) {\n            var toSelect = $(element),\n                isPrevented =  !preventNotify && this._notify(\"select\", { element: element });\n\n            toSelect.removeClass(ACTIVE);\n            if(!isPrevented) {\n                 toSelect.addClass(SELECTED);\n\n                if (this.options.aria) {\n                    toSelect.attr(ARIASELECTED, true);\n                }\n            }\n        },\n\n        _notify: function(name, args) {\n            args = args || { };\n            return this.trigger(name, args);\n        },\n\n        _unselect: function(element) {\n            element.removeClass(SELECTED);\n\n            if (this.options.aria) {\n                element.attr(ARIASELECTED, false);\n            }\n\n            return element;\n        },\n\n        _select: function(e) {\n            if (this._allowSelection(e.event.target)) {\n                if (!msie || (msie && !$(kendo._activeElement()).is(INPUTSELECTOR))) {\n                    e.preventDefault();\n                }\n            }\n        },\n\n        _allowSelection: function(target) {\n            if ($(target).is(INPUTSELECTOR)) {\n                this.userEvents.cancel();\n                this._downTarget = null;\n                return false;\n            }\n\n            return true;\n        },\n\n        resetTouchEvents: function() {\n            this.userEvents.cancel();\n        },\n\n        clear: function() {\n            var items = this.element.find(this.options.filter + \".\" + SELECTED);\n            this._unselect(items);\n        },\n\n        selectRange: function(start, end) {\n            var that = this,\n                idx,\n                tmp,\n                items;\n\n            that.clear();\n\n            if (that.element.length > 1) {\n                items = that.options.continuousItems();\n            }\n\n            if (!items || !items.length) {\n                items = that.element.find(that.options.filter);\n            }\n\n            start = $.inArray($(start)[0], items);\n            end = $.inArray($(end)[0], items);\n\n            if (start > end) {\n                tmp = start;\n                start = end;\n                end = tmp;\n            }\n\n            if (!that.options.useAllItems) {\n                end += that.element.length - 1;\n            }\n\n            for (idx = start; idx <= end; idx ++ ) {\n                that._selectElement(items[idx]);\n            }\n\n            that._notify(CHANGE);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.element.off(NS);\n\n            that.userEvents.destroy();\n\n            that._marquee = that._lastActive = that.element = that.userEvents = null;\n        }\n    });\n\n    Selectable.parseOptions = function(selectable) {\n        var asLowerString = typeof selectable === \"string\" && selectable.toLowerCase();\n\n        return {\n            multiple: asLowerString && asLowerString.indexOf(\"multiple\") > -1,\n            cell: asLowerString && asLowerString.indexOf(\"cell\") > -1\n        };\n    };\n\n    function collision(element, position) {\n        if (!element.is(\":visible\")) {\n            return false;\n        }\n\n        var elementPosition = kendo.getOffset(element),\n            right = position.left + position.width,\n            bottom = position.top + position.height;\n\n        elementPosition.right = elementPosition.left + element.outerWidth();\n        elementPosition.bottom = elementPosition.top + element.outerHeight();\n\n        return !(elementPosition.left > right||\n            elementPosition.right < position.left ||\n            elementPosition.top > bottom ||\n            elementPosition.bottom < position.top);\n    }\n\n    kendo.ui.plugin(Selectable);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        keys = kendo.keys,\n        CLICK = \"click\",\n        KBUTTON = \"k-button\",\n        KBUTTONICON = \"k-button-icon\",\n        KBUTTONICONTEXT = \"k-button-icontext\",\n        NS = \".kendoButton\",\n        DISABLED = \"disabled\",\n        DISABLEDSTATE = \"k-state-disabled\",\n        FOCUSEDSTATE = \"k-state-focused\",\n        SELECTEDSTATE = \"k-state-selected\";\n\n    var Button = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.wrapper = that.element;\n            options = that.options;\n\n            element.addClass(KBUTTON).attr(\"role\", \"button\");\n\n            options.enable = options.enable && !element.attr(DISABLED);\n            that.enable(options.enable);\n\n            that._tabindex();\n\n            that._graphics();\n\n            element\n                .on(CLICK + NS, proxy(that._click, that))\n                .on(\"focus\" + NS, proxy(that._focus, that))\n                .on(\"blur\" + NS, proxy(that._blur, that))\n                .on(\"keydown\" + NS, proxy(that._keydown, that))\n                .on(\"keyup\" + NS, proxy(that._keyup, that));\n\n            kendo.notify(that);\n        },\n        \n        destroy: function() {\n\t\t\tvar that = this;\n\t\t\t\n\t\t\tthat.wrapper.off(NS);\n\t\t\t\n\t\t\tWidget.fn.destroy.call(that);\n\t\t},\n\n        events: [\n            CLICK\n        ],\n\n        options: {\n            name: \"Button\",\n            icon: \"\",\n            spriteCssClass: \"\",\n            imageUrl: \"\",\n            enable: true\n        },\n\n        _isNativeButton: function() {\n            return this.element.prop(\"tagName\").toLowerCase() == \"button\";\n        },\n\n        _click: function(e) {\n            if (this.options.enable) {\n                if (this.trigger(CLICK, { event: e })) {\n                    e.preventDefault();\n                }\n            }\n        },\n\n        _focus: function() {\n            if (this.options.enable) {\n                this.element.addClass(FOCUSEDSTATE);\n            }\n        },\n\n        _blur: function() {\n            this.element.removeClass(FOCUSEDSTATE);\n        },\n\n        _keydown: function(e) {\n            var that = this;\n            if (!that._isNativeButton()) {\n                if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n                    if (e.keyCode == keys.SPACEBAR) {\n                        e.preventDefault();\n                        if (that.options.enable) {\n                            that.element.addClass(SELECTEDSTATE);\n                        }\n                    }\n                    that._click(e);\n                }\n            }\n        },\n\n        _keyup: function() {\n            this.element.removeClass(SELECTEDSTATE);\n        },\n\n        _graphics: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                icon = options.icon,\n                spriteCssClass = options.spriteCssClass,\n                imageUrl = options.imageUrl,\n                span, img, isEmpty;\n\n            if (spriteCssClass || imageUrl || icon) {\n                isEmpty = true;\n\n                element.contents().not(\"span.k-sprite\").not(\"span.k-icon\").not(\"img.k-image\").each(function(idx, el){\n                    if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n                        isEmpty = false;\n                    }\n                });\n\n                if (isEmpty) {\n                    element.addClass(KBUTTONICON);\n                } else {\n                    element.addClass(KBUTTONICONTEXT);\n                }\n            }\n\n            if (icon) {\n                span = element.children(\"span.k-icon\").first();\n                if (!span[0]) {\n                    span = $('<span class=\"k-icon\"></span>').prependTo(element);\n                }\n                span.addClass(\"k-i-\" + icon);\n            } else if (spriteCssClass) {\n                span = element.children(\"span.k-sprite\").first();\n                if (!span[0]) {\n                    span = $('<span class=\"k-sprite\"></span>').prependTo(element);\n                }\n                span.addClass(spriteCssClass);\n            } else if (imageUrl) {\n                img = element.children(\"img.k-image\").first();\n                if (!img[0]) {\n                    img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n                }\n                img.attr(\"src\", imageUrl);\n            }\n        },\n\n        enable: function(enable) {\n            var that = this,\n                element = that.element;\n\n            if (enable === undefined) {\n                enable = true;\n            }\n\n            enable = !!enable;\n            that.options.enable = enable;\n            element.toggleClass(DISABLEDSTATE, !enable)\n                   .attr(\"aria-disabled\", !enable)\n                   .attr(DISABLED, !enable);\n            // prevent 'Unspecified error' in IE when inside iframe\n            try {\n                element.blur();\n            } catch (err) {\n            }\n        }\n    });\n\n    kendo.ui.plugin(Button);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        proxy = $.proxy,\n        FIRST = \".k-i-seek-w\",\n        LAST = \".k-i-seek-e\",\n        PREV = \".k-i-arrow-w\",\n        NEXT = \".k-i-arrow-e\",\n        CHANGE = \"change\",\n        NS = \".kendoPager\",\n        CLICK = \"click\",\n        KEYDOWN = \"keydown\",\n        DISABLED = \"disabled\",\n        iconTemplate = kendo.template('<a href=\"\\\\#\" title=\"#=text#\" class=\"k-link k-pager-nav #= wrapClassName #\"><span class=\"k-icon #= className #\">#=text#</span></a>');\n\n    function button(template, idx, text, numeric, title) {\n        return template( {\n            idx: idx,\n            text: text,\n            ns: kendo.ns,\n            numeric: numeric,\n            title: title || \"\"\n        });\n    }\n\n    function icon(className, text, wrapClassName) {\n        return iconTemplate({\n            className: className.substring(1),\n            text: text,\n            wrapClassName: wrapClassName || \"\"\n        });\n    }\n\n    function update(element, selector, page, disabled) {\n       element.find(selector)\n              .parent()\n              .attr(kendo.attr(\"page\"), page)\n              .attr(\"tabindex\", -1)\n              .toggleClass(\"k-state-disabled\", disabled);\n    }\n\n    function first(element, page) {\n        update(element, FIRST, 1, page <= 1);\n    }\n\n    function prev(element, page) {\n        update(element, PREV, Math.max(1, page - 1), page <= 1);\n    }\n\n    function next(element, page, totalPages) {\n        update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n    }\n\n    function last(element, page, totalPages) {\n        update(element, LAST, totalPages, page >= totalPages);\n    }\n\n    var Pager = Widget.extend( {\n        init: function(element, options) {\n            var that = this, page, totalPages;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n            that.dataSource = kendo.data.DataSource.create(options.dataSource);\n            that.linkTemplate = kendo.template(that.options.linkTemplate);\n            that.selectTemplate = kendo.template(that.options.selectTemplate);\n\n            page = that.page();\n            totalPages = that.totalPages();\n\n            that._refreshHandler = proxy(that.refresh, that);\n\n            that.dataSource.bind(CHANGE, that._refreshHandler);\n\n            if (options.previousNext) {\n                if (!that.element.find(FIRST).length) {\n                    that.element.append(icon(FIRST, options.messages.first, \"k-pager-first\"));\n\n                    first(that.element, page, totalPages);\n                }\n\n                if (!that.element.find(PREV).length) {\n                    that.element.append(icon(PREV, options.messages.previous));\n\n                    prev(that.element, page, totalPages);\n                }\n            }\n\n            if (options.numeric) {\n                that.list = that.element.find(\".k-pager-numbers\");\n\n                if (!that.list.length) {\n                   that.list = $('<ul class=\"k-pager-numbers k-reset\" />').appendTo(that.element);\n                }\n            }\n\n            if (options.input) {\n                if (!that.element.find(\".k-pager-input\").length) {\n                   that.element.append('<span class=\"k-pager-input k-label\">'+\n                       options.messages.page +\n                       '<input class=\"k-textbox\">' +\n                       kendo.format(options.messages.of, totalPages) +\n                       '</span>');\n                }\n\n                that.element.on(KEYDOWN + NS, \".k-pager-input input\", proxy(that._keydown, that));\n            }\n\n            if (options.previousNext) {\n                if (!that.element.find(NEXT).length) {\n                    that.element.append(icon(NEXT, options.messages.next));\n\n                    next(that.element, page, totalPages);\n                }\n\n                if (!that.element.find(LAST).length) {\n                    that.element.append(icon(LAST, options.messages.last, \"k-pager-last\"));\n\n                    last(that.element, page, totalPages);\n                }\n            }\n\n            if (options.pageSizes){\n                if (!that.element.find(\".k-pager-sizes\").length){\n                     $('<span class=\"k-pager-sizes k-label\"><select/>' + options.messages.itemsPerPage + \"</span>\")\n                        .appendTo(that.element)\n                        .find(\"select\")\n                        .html($.map($.isArray(options.pageSizes) ? options.pageSizes : [5,10,20], function(page){\n                            return \"<option>\" + page + \"</option>\";\n                        }).join(\"\"))\n                        .end()\n                        .appendTo(that.element);\n                }\n\n                that.element.find(\".k-pager-sizes select\").val(that.pageSize());\n\n                if (kendo.ui.DropDownList) {\n                   that.element.find(\".k-pager-sizes select\").show().kendoDropDownList();\n                }\n\n                that.element.on(CHANGE + NS, \".k-pager-sizes select\", proxy(that._change, that));\n            }\n\n            if (options.refresh) {\n                if (!that.element.find(\".k-pager-refresh\").length) {\n                    that.element.append('<a href=\"#\" class=\"k-pager-refresh k-link\" title=\"' + options.messages.refresh +\n                        '\"><span class=\"k-icon k-i-refresh\">' + options.messages.refresh + \"</span></a>\");\n                }\n\n                that.element.on(CLICK + NS, \".k-pager-refresh\", proxy(that._refreshClick, that));\n            }\n\n            if (options.info) {\n                if (!that.element.find(\".k-pager-info\").length) {\n                    that.element.append('<span class=\"k-pager-info k-label\" />');\n                }\n            }\n\n            that.element\n                .on(CLICK + NS , \"a\", proxy(that._click, that))\n                .addClass(\"k-pager-wrap k-widget\");\n\n            if (options.autoBind) {\n                that.refresh();\n            }\n\n            kendo.notify(that);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.element.off(NS);\n            that.dataSource.unbind(CHANGE, that._refreshHandler);\n            that._refreshHandler = null;\n\n            kendo.destroy(that.element);\n            that.element = that.list = null;\n        },\n\n        events: [\n            CHANGE\n        ],\n\n        options: {\n            name: \"Pager\",\n            selectTemplate: '<li><span class=\"k-state-selected\">#=text#</span></li>',\n            linkTemplate: '<li><a tabindex=\"-1\" href=\"\\\\#\" class=\"k-link\" data-#=ns#page=\"#=idx#\" #if (title !== \"\") {# title=\"#=title#\" #}#>#=text#</a></li>',\n            buttonCount: 10,\n            autoBind: true,\n            numeric: true,\n            info: true,\n            input: false,\n            previousNext: true,\n            pageSizes: false,\n            refresh: false,\n            messages: {\n                display: \"{0} - {1} of {2} items\",\n                empty: \"No items to display\",\n                page: \"Page\",\n                of: \"of {0}\",\n                itemsPerPage: \"items per page\",\n                first: \"Go to the first page\",\n                previous: \"Go to the previous page\",\n                next: \"Go to the next page\",\n                last: \"Go to the last page\",\n                refresh: \"Refresh\",\n                morePages: \"More pages\"\n            }\n        },\n\n        setDataSource: function(dataSource) {\n            var that = this;\n\n            that.dataSource.unbind(CHANGE, that._refreshHandler);\n            that.dataSource = that.options.dataSource = dataSource;\n            dataSource.bind(CHANGE, that._refreshHandler);\n\n            if (that.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        refresh: function(e) {\n            var that = this,\n                idx,\n                end,\n                start = 1,\n                html = \"\",\n                reminder,\n                page = that.page(),\n                options = that.options,\n                pageSize = that.pageSize(),\n                total = that.dataSource.total(),\n                totalPages = that.totalPages(),\n                linkTemplate = that.linkTemplate,\n                buttonCount = options.buttonCount;\n\n            if (e && e.action == \"itemchange\") {\n                return;\n            }\n\n            if (options.numeric) {\n                if (page > buttonCount) {\n                    reminder = (page % buttonCount);\n\n                    start = (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;\n                }\n\n                end = Math.min((start + buttonCount) - 1, totalPages);\n\n                if (start > 1) {\n                    html += button(linkTemplate, start - 1, \"...\", false, options.messages.morePages);\n                }\n\n                for (idx = start; idx <= end; idx++) {\n                    html += button(idx == page ? that.selectTemplate : linkTemplate, idx, idx, true);\n                }\n\n                if (end < totalPages) {\n                    html += button(linkTemplate, idx, \"...\", false, options.messages.morePages);\n                }\n\n                if (html === \"\") {\n                    html = that.selectTemplate({ text: 0 });\n                }\n\n                that.list.html(html);\n            }\n\n            if (options.info) {\n                if (total > 0) {\n                    html = kendo.format(options.messages.display,\n                        (page - 1) * pageSize + 1, // first item in the page\n                        Math.min(page * pageSize, total), // last item in the page\n                    total);\n                } else {\n                    html = options.messages.empty;\n                }\n\n                that.element.find(\".k-pager-info\").html(html);\n            }\n\n            if (options.input) {\n                that.element\n                    .find(\".k-pager-input\")\n                    .html(that.options.messages.page +\n                        '<input class=\"k-textbox\">' +\n                        kendo.format(options.messages.of, totalPages))\n                    .find(\"input\")\n                    .val(page)\n                    .attr(DISABLED, total < 1)\n                    .toggleClass(\"k-state-disabled\", total < 1);\n            }\n\n            if (options.previousNext) {\n                first(that.element, page, totalPages);\n\n                prev(that.element, page, totalPages);\n\n                next(that.element, page, totalPages);\n\n                last(that.element, page, totalPages);\n            }\n\n            if (options.pageSizes) {\n                that.element\n                    .find(\".k-pager-sizes select\")\n                    .val(pageSize)\n                    .filter(\"[\" + kendo.attr(\"role\") + \"=dropdownlist]\")\n                    .kendoDropDownList(\"value\", pageSize)\n                    .kendoDropDownList(\"text\", pageSize); // handles custom values\n            }\n        },\n\n        _keydown: function(e) {\n            if (e.keyCode === kendo.keys.ENTER) {\n                var input = this.element.find(\".k-pager-input\").find(\"input\"),\n                    page = parseInt(input.val(), 10);\n\n                if (isNaN(page) || page < 1 || page > this.totalPages()) {\n                    page = this.page();\n                }\n\n                input.val(page);\n\n                this.page(page);\n            }\n        },\n\n        _refreshClick: function(e) {\n            e.preventDefault();\n\n            this.dataSource.read();\n        },\n\n        _change: function(e) {\n            var pageSize = parseInt(e.currentTarget.value, 10);\n\n            if (!isNaN(pageSize)){\n               this.dataSource.pageSize(pageSize);\n            }\n        },\n\n        _click: function(e) {\n            var target = $(e.currentTarget);\n\n            e.preventDefault();\n\n            if (!target.is(\".k-state-disabled\")) {\n                this.page(target.attr(kendo.attr(\"page\")));\n            }\n        },\n\n        totalPages: function() {\n            return Math.ceil((this.dataSource.total() || 0) / this.pageSize());\n        },\n\n        pageSize: function() {\n            return this.dataSource.pageSize() || this.dataSource.total();\n        },\n\n        page: function(page) {\n            if (page !== undefined) {\n                this.dataSource.page(page);\n\n                this.trigger(CHANGE, { index: page });\n            } else {\n                if (this.dataSource.total() > 0) {\n                    return this.dataSource.page();\n                } else {\n                    return 0;\n                }\n            }\n        }\n    });\n\n    ui.plugin(Pager);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        support = kendo.support,\n        getOffset = kendo.getOffset,\n        activeElement = kendo._activeElement,\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        DEACTIVATE = \"deactivate\",\n        ACTIVATE = \"activate\",\n        CENTER = \"center\",\n        LEFT = \"left\",\n        RIGHT = \"right\",\n        TOP = \"top\",\n        BOTTOM = \"bottom\",\n        ABSOLUTE = \"absolute\",\n        HIDDEN = \"hidden\",\n        BODY = \"body\",\n        LOCATION = \"location\",\n        POSITION = \"position\",\n        VISIBLE = \"visible\",\n        EFFECTS = \"effects\",\n        ACTIVE = \"k-state-active\",\n        ACTIVEBORDER = \"k-state-border\",\n        ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/,\n        ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\n        MOUSEDOWN = \"down\",\n        DOCUMENT_ELEMENT = $(document.documentElement),\n        WINDOW = $(window),\n        SCROLL = \"scroll\",\n        RESIZE_SCROLL = \"resize scroll\",\n        cssPrefix = support.transitions.css,\n        TRANSFORM = cssPrefix + \"transform\",\n        extend = $.extend,\n        NS = \".kendoPopup\",\n        styles = [\"font-size\",\n                  \"font-family\",\n                  \"font-stretch\",\n                  \"font-style\",\n                  \"font-weight\",\n                  \"line-height\"];\n\n    function contains(container, target) {\n        return container === target || $.contains(container, target);\n    }\n\n    var Popup = Widget.extend({\n        init: function(element, options) {\n            var that = this, parentPopup;\n\n            options = options || {};\n\n            if (options.isRtl) {\n                options.origin = options.origin || BOTTOM + \" \" + RIGHT;\n                options.position = options.position || TOP + \" \" + RIGHT;\n            }\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            that.collisions = options.collision ? options.collision.split(\" \") : [];\n            that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n\n            if (that.collisions.length === 1) {\n                that.collisions.push(that.collisions[0]);\n            }\n\n            parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\n            options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);\n\n            that.element.hide()\n                .addClass(\"k-popup k-group k-reset\")\n                .toggleClass(\"k-rtl\", !!options.isRtl)\n                .css({ position : ABSOLUTE })\n                .appendTo(options.appendTo)\n                .on(\"mouseenter\" + NS, function() {\n                    that._hovered = true;\n                })\n                .on(\"mouseleave\" + NS, function() {\n                    that._hovered = false;\n                });\n\n            that.wrapper = $();\n\n            if (options.animation === false) {\n                options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n            }\n\n            extend(options.animation.open, {\n                complete: function() {\n                    that.wrapper.css({ overflow: VISIBLE }); // Forcing refresh causes flickering in mobile.\n                    that._activated = true;\n                    that._trigger(ACTIVATE);\n                }\n            });\n\n            extend(options.animation.close, {\n                complete: function() {\n                    that._animationClose();\n                }\n            });\n\n            that._mousedownProxy = function(e) {\n                that._mousedown(e);\n            };\n\n            that._resizeProxy = function(e) {\n                that._resize(e);\n            };\n\n            if (options.toggleTarget) {\n                $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n            }\n        },\n\n        events: [\n            OPEN,\n            ACTIVATE,\n            CLOSE,\n            DEACTIVATE\n        ],\n\n        options: {\n            name: \"Popup\",\n            toggleEvent: \"click\",\n            origin: BOTTOM + \" \" + LEFT,\n            position: TOP + \" \" + LEFT,\n            anchor: BODY,\n            appendTo: null,\n            collision: \"flip fit\",\n            viewport: window,\n            copyAnchorStyles: true,\n            autosize: false,\n            modal: false,\n            adjustSize: {\n                width: 0,\n                height: 0\n            },\n            animation: {\n                open: {\n                    effects: \"slideIn:down\",\n                    transition: true,\n                    duration: 200\n                },\n                close: { // if close animation effects are defined, they will be used instead of open.reverse\n                    duration: 100,\n                    hide: true\n                }\n            }\n        },\n\n        _animationClose: function() {\n            var that = this,\n                options = that.options;\n\n            that.wrapper.hide();\n\n            var location = that.wrapper.data(LOCATION),\n                anchor = $(options.anchor),\n                direction, dirClass;\n\n            if (location) {\n                that.wrapper.css(location);\n            }\n\n            if (options.anchor != BODY) {\n                direction = ((anchor.attr(\"class\") || \"\").match(ACTIVEBORDERREGEXP) || [\"\", \"down\"])[1];\n                dirClass = ACTIVEBORDER + \"-\" + direction;\n\n                anchor\n                    .removeClass(dirClass)\n                    .children(ACTIVECHILDREN)\n                    .removeClass(ACTIVE)\n                    .removeClass(dirClass);\n\n                that.element.removeClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n            }\n\n            that._closing = false;\n            that._trigger(DEACTIVATE);\n        },\n\n        destroy: function() {\n            var that = this,\n                options = that.options,\n                element = that.element.off(NS),\n                parent;\n\n            Widget.fn.destroy.call(that);\n\n            if (options.toggleTarget) {\n                $(options.toggleTarget).off(NS);\n            }\n\n            if (!options.modal) {\n                DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n                that._scrollableParents().unbind(SCROLL, that._resizeProxy);\n                WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy);\n            }\n\n            kendo.destroy(that.element.children());\n            element.removeData();\n\n            if (options.appendTo[0] === document.body) {\n                parent = element.parent(\".k-animation-container\");\n\n                if (parent[0]) {\n                    parent.remove();\n                } else {\n                    element.remove();\n                }\n            }\n        },\n\n        open: function(x, y) {\n            var that = this,\n                fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\n                element = that.element,\n                options = that.options,\n                direction = \"down\",\n                animation, wrapper,\n                anchor = $(options.anchor),\n                mobile = element[0] && element.hasClass(\"km-widget\");\n\n            if (!that.visible()) {\n                if (options.copyAnchorStyles) {\n                    if (mobile && styles[0] == \"font-size\") {\n                        styles.shift();\n                    }\n                    element.css(kendo.getComputedStyles(anchor[0], styles));\n                }\n\n                if (element.data(\"animating\") || that._trigger(OPEN)) {\n                    return;\n                }\n\n                that._activated = false;\n\n                if (!options.modal) {\n                    DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy)\n                                .bind(that.downEvent, that._mousedownProxy);\n\n                    // this binding hangs iOS in editor\n                    if (!(support.mobileOS.ios || support.mobileOS.android)) {\n                        // all elements in IE7/8 fire resize event, causing mayhem\n                        that._scrollableParents()\n                            .unbind(SCROLL, that._resizeProxy)\n                            .bind(SCROLL, that._resizeProxy);\n                        WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy)\n                              .bind(RESIZE_SCROLL, that._resizeProxy);\n                    }\n                }\n\n                that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n                                        .css({\n                                            overflow: HIDDEN,\n                                            display: \"block\",\n                                            position: ABSOLUTE\n                                        });\n\n                if (support.mobileOS.android) {\n                    wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n                }\n\n                wrapper.css(POSITION);\n\n                if ($(options.appendTo)[0] == document.body) {\n                    wrapper.css(TOP, \"-10000px\");\n                }\n\n                animation = extend(true, {}, options.animation.open);\n                that.flipped = that._position(fixed);\n                animation.effects = kendo.parseEffects(animation.effects, that.flipped);\n\n                direction = animation.effects.slideIn ? animation.effects.slideIn.direction : direction;\n\n                if (options.anchor != BODY) {\n                    var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n                    element.addClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n\n                    anchor\n                        .addClass(dirClass)\n                        .children(ACTIVECHILDREN)\n                        .addClass(ACTIVE)\n                        .addClass(dirClass);\n                }\n\n                element.data(EFFECTS, animation.effects)\n                       .kendoStop(true)\n                       .kendoAnimate(animation);\n            }\n        },\n\n        toggle: function() {\n            var that = this;\n\n            that[that.visible() ? CLOSE : OPEN]();\n        },\n\n        visible: function() {\n            return this.element.is(\":\" + VISIBLE);\n        },\n\n        close: function(skipEffects) {\n            var that = this,\n                options = that.options, wrap,\n                animation, openEffects, closeEffects;\n\n            if (that.visible()) {\n                wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\n\n                if (that._closing || that._trigger(CLOSE)) {\n                    return;\n                }\n\n                // Close all inclusive popups.\n                that.element.find(\".k-popup\").each(function () {\n                    var that = $(this),\n                        popup = that.data(\"kendoPopup\");\n\n                    if (popup) {\n                        popup.close(skipEffects);\n                    }\n                });\n\n                DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n                that._scrollableParents().unbind(SCROLL, that._resizeProxy);\n                WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy);\n\n                if (skipEffects) {\n                    animation = { hide: true, effects: {} };\n                } else {\n                    animation = extend(true, {}, options.animation.close);\n                    openEffects = that.element.data(EFFECTS);\n                    closeEffects = animation.effects;\n\n                    if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n                        animation.effects = openEffects;\n                        animation.reverse = true;\n                    }\n\n                    that._closing = true;\n                }\n\n                that.element.kendoStop(true);\n                wrap.css({ overflow: HIDDEN }); // stop callback will remove hidden overflow\n                that.element.kendoAnimate(animation);\n            }\n        },\n\n        _trigger: function(ev) {\n            return this.trigger(ev, { type: ev });\n        },\n\n        _resize: function(e) {\n            var that = this;\n\n            if (e.type === \"resize\") {\n                clearTimeout(that._resizeTimeout);\n                that._resizeTimeout = setTimeout(function() {\n                    that._position();\n                    that._resizeTimeout = null;\n                }, 50);\n            } else {\n                if (!that._hovered || (that._activated && that.element.hasClass(\"k-list-container\"))) {\n                    that.close();\n                }\n            }\n        },\n\n        _mousedown: function(e) {\n            var that = this,\n                container = that.element[0],\n                options = that.options,\n                anchor = $(options.anchor)[0],\n                toggleTarget = options.toggleTarget,\n                target = kendo.eventTarget(e),\n                popup = $(target).closest(\".k-popup\"),\n                mobile = popup.parent().parent(\".km-shim\").length;\n\n            popup = popup[0];\n            if (!mobile && popup && popup !== that.element[0]){\n                return;\n            }\n\n            // This MAY result in popup not closing in certain cases.\n            if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\n                return;\n            }\n\n            if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n                that.close();\n            }\n        },\n\n        _fit: function(position, size, viewPortSize) {\n            var output = 0;\n\n            if (position + size > viewPortSize) {\n                output = viewPortSize - (position + size);\n            }\n\n            if (position < 0) {\n                output = -position;\n            }\n\n            return output;\n        },\n\n        _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n            var output = 0;\n                boxSize = boxSize || size;\n\n            if (position !== origin && position !== CENTER && origin !== CENTER) {\n                if (offset + boxSize > viewPortSize) {\n                    output += -(anchorSize + size);\n                }\n\n                if (offset + output < 0) {\n                    output += anchorSize + size;\n                }\n            }\n            return output;\n        },\n\n        _scrollableParents: function() {\n            return $(this.options.anchor)\n                       .parentsUntil(\"body\")\n                       .filter(function(index, element) {\n                            var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n                            return computedStyle.overflow != \"visible\";\n                       });\n        },\n\n        _position: function(fixed) {\n            var that = this,\n                element = that.element.css(POSITION, \"\"),\n                wrapper = that.wrapper,\n                options = that.options,\n                viewport = $(options.viewport),\n                viewportOffset = viewport.offset(),\n                anchor = $(options.anchor),\n                origins = options.origin.toLowerCase().split(\" \"),\n                positions = options.position.toLowerCase().split(\" \"),\n                collisions = that.collisions,\n                zoomLevel = support.zoomLevel(),\n                siblingContainer, parents,\n                parentZIndex, zIndex = 10002,\n                isWindow = !!((viewport[0] == window) && window.innerWidth && (zoomLevel <= 1.02)),\n                idx = 0, length, viewportWidth, viewportHeight;\n\n            // $(window).height() uses documentElement to get the height\n            viewportWidth = isWindow ? window.innerWidth : viewport.width();\n            viewportHeight = isWindow ? window.innerHeight : viewport.height();\n\n            siblingContainer = anchor.parents().filter(wrapper.siblings());\n\n            if (siblingContainer[0]) {\n                parentZIndex = Math.max(Number(siblingContainer.css(\"zIndex\")), 0);\n\n                // set z-index to be more than that of the container/sibling\n                // compensate with more units for window z-stack\n                if (parentZIndex) {\n                    zIndex = parentZIndex + 10;\n                } else {\n                    parents = anchor.parentsUntil(siblingContainer);\n                    for (length = parents.length; idx < length; idx++) {\n                        parentZIndex = Number($(parents[idx]).css(\"zIndex\"));\n                        if (parentZIndex && zIndex < parentZIndex) {\n                            zIndex = parentZIndex + 10;\n                        }\n                    }\n                }\n            }\n\n            wrapper.css(\"zIndex\", zIndex);\n\n            if (fixed && fixed.isFixed) {\n                wrapper.css({ left: fixed.x, top: fixed.y });\n            } else {\n                wrapper.css(that._align(origins, positions));\n            }\n\n            var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\n                offset = getOffset(wrapper),\n                anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\n\n            if (anchorParent.length) {\n                pos = getOffset(wrapper, POSITION, true);\n                offset = getOffset(wrapper);\n            }\n\n            if (viewport[0] === window) {\n                offset.top -= (window.pageYOffset || document.documentElement.scrollTop || 0);\n                offset.left -= (window.pageXOffset || document.documentElement.scrollLeft || 0);\n            }\n            else {\n                offset.top -= viewportOffset.top;\n                offset.left -= viewportOffset.left;\n            }\n\n            if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\n                wrapper.data(LOCATION, extend({}, pos));\n            }\n\n            var offsets = extend({}, offset),\n                location = extend({}, pos),\n                adjustSize = options.adjustSize;\n\n            if (collisions[0] === \"fit\") {\n                location.top += that._fit(offsets.top, wrapper.outerHeight() + adjustSize.height, viewportHeight / zoomLevel);\n            }\n\n            if (collisions[1] === \"fit\") {\n                location.left += that._fit(offsets.left, wrapper.outerWidth() + adjustSize.width, viewportWidth / zoomLevel);\n            }\n\n            var flipPos = extend({}, location);\n\n            if (collisions[0] === \"flip\") {\n                location.top += that._flip(offsets.top, element.outerHeight(), anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapper.outerHeight());\n            }\n\n            if (collisions[1] === \"flip\") {\n                location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());\n            }\n\n            element.css(POSITION, ABSOLUTE);\n            wrapper.css(location);\n\n            return (location.left != flipPos.left || location.top != flipPos.top);\n        },\n\n        _align: function(origin, position) {\n            var that = this,\n                element = that.wrapper,\n                anchor = $(that.options.anchor),\n                verticalOrigin = origin[0],\n                horizontalOrigin = origin[1],\n                verticalPosition = position[0],\n                horizontalPosition = position[1],\n                anchorOffset = getOffset(anchor),\n                appendTo = $(that.options.appendTo),\n                appendToOffset,\n                width = element.outerWidth(),\n                height = element.outerHeight(),\n                anchorWidth = anchor.outerWidth(),\n                anchorHeight = anchor.outerHeight(),\n                top = anchorOffset.top,\n                left = anchorOffset.left,\n                round = Math.round;\n\n            if (appendTo[0] != document.body) {\n                appendToOffset = getOffset(appendTo);\n                top -= appendToOffset.top;\n                left -= appendToOffset.left;\n            }\n\n\n            if (verticalOrigin === BOTTOM) {\n                top += anchorHeight;\n            }\n\n            if (verticalOrigin === CENTER) {\n                top += round(anchorHeight / 2);\n            }\n\n            if (verticalPosition === BOTTOM) {\n                top -= height;\n            }\n\n            if (verticalPosition === CENTER) {\n                top -= round(height / 2);\n            }\n\n            if (horizontalOrigin === RIGHT) {\n                left += anchorWidth;\n            }\n\n            if (horizontalOrigin === CENTER) {\n                left += round(anchorWidth / 2);\n            }\n\n            if (horizontalPosition === RIGHT) {\n                left -= width;\n            }\n\n            if (horizontalPosition === CENTER) {\n                left -= round(width / 2);\n            }\n\n            return {\n                top: top,\n                left: left\n            };\n        }\n    });\n\n    ui.plugin(Popup);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        extend = $.extend,\n        setTimeout = window.setTimeout,\n        CLICK = \"click\",\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        KNOTIFICATION = \"k-notification\",\n        KICLOSE = \".k-notification-wrap .k-i-close\",\n        INFO = \"info\",\n        SUCCESS = \"success\",\n        WARNING = \"warning\",\n        ERROR = \"error\",\n        TOP = \"top\",\n        LEFT = \"left\",\n        BOTTOM = \"bottom\",\n        RIGHT = \"right\",\n        UP = \"up\",\n        NS = \".kendoNotification\",\n        WRAPPER = '<div class=\"k-widget k-notification\"></div>',\n        TEMPLATE = '<div class=\"k-notification-wrap\">' +\n                '<span class=\"k-icon k-i-note\">#=typeIcon#</span>' +\n                '#=content#' +\n                '<span class=\"k-icon k-i-close\">Hide</span>' +\n            '</div>';\n\n    var Notification = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n\n            if (!options.appendTo || !$(options.appendTo).is(element)) {\n                that.element.hide();\n            }\n\n            that._compileTemplates(options.templates);\n            that._guid = \"_\" + kendo.guid();\n            that._isRtl = kendo.support.isRtl(element);\n            that._compileStacking(options.stacking, options.position.top);\n\n            kendo.notify(that);\n        },\n\n        events: [\n            SHOW,\n            HIDE\n        ],\n\n        options: {\n            name: \"Notification\",\n            position: {\n                pinned: true,\n                top: null,\n                left: null,\n                bottom: 20,\n                right: 20\n            },\n            stacking: \"default\",\n            hideOnClick: true,\n            button: false,\n            allowHideAfter: 0,\n            autoHideAfter: 5000,\n            appendTo: null,\n            width: null,\n            height: null,\n            templates: [],\n            animation: {\n                open: {\n                    effects: \"fade:in\",\n                    duration: 300\n                },\n                close: {\n                    effects: \"fade:out\",\n                    duration: 600,\n                    hide: true\n                }\n            }\n        },\n\n        _compileTemplates: function(templates) {\n            var that = this;\n            var kendoTemplate = kendo.template;\n\n            that._compiled = {};\n\n            $.each(templates, function(key, value) {\n                that._compiled[value.type] = kendoTemplate(value.template || $(\"#\" + value.templateId).html());\n            });\n\n            that._defaultCompiled = kendoTemplate(TEMPLATE);\n        },\n\n        _getCompiled: function(type) {\n            var that = this;\n            var defaultCompiled = that._defaultCompiled;\n\n            return type ? that._compiled[type] || defaultCompiled : defaultCompiled;\n        },\n\n        _compileStacking: function(stacking, top) {\n            var that = this,\n                paddings = { paddingTop: 0, paddingRight: 0, paddingBottom: 0, paddingLeft: 0 },\n                origin, position;\n\n            switch (stacking) {\n                case \"down\":\n                    origin = BOTTOM + \" \" + LEFT;\n                    position = TOP + \" \" + LEFT;\n                    delete paddings.paddingBottom;\n                break;\n                case RIGHT:\n                    origin = TOP + \" \" + RIGHT;\n                    position = TOP + \" \" + LEFT;\n                    delete paddings.paddingRight;\n                break;\n                case LEFT:\n                    origin = TOP + \" \" + LEFT;\n                    position = TOP + \" \" + RIGHT;\n                    delete paddings.paddingLeft;\n                break;\n                case UP:\n                    origin = TOP + \" \" + LEFT;\n                    position = BOTTOM + \" \" + LEFT;\n                    delete paddings.paddingTop;\n                break;\n                default:\n                    if (top !== null) {\n                        origin = BOTTOM + \" \" + LEFT;\n                        position = TOP + \" \" + LEFT;\n                        delete paddings.paddingBottom;\n                    } else {\n                        origin = TOP + \" \" + LEFT;\n                        position = BOTTOM + \" \" + LEFT;\n                        delete paddings.paddingTop;\n                    }\n                break;\n            }\n\n            that._popupOrigin = origin;\n            that._popupPosition = position;\n            that._popupPaddings = paddings;\n        },\n\n        _attachPopupEvents: function(options, popup) {\n            var that = this,\n                allowHideAfter = options.allowHideAfter,\n                attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0,\n                closeIcon;\n\n            function attachClick(target) {\n                target.on(CLICK + NS, function() {\n                    popup.close();\n                });\n            }\n\n            if (options.hideOnClick) {\n                popup.bind(\"activate\", function(e) {\n                    if (attachDelay) {\n                        setTimeout(function(){\n                            attachClick(popup.element);\n                        }, allowHideAfter);\n                    } else {\n                        attachClick(popup.element);\n                    }\n                });\n            } else if (options.button) {\n                closeIcon = popup.element.find(KICLOSE);\n                if (attachDelay) {\n                    setTimeout(function(){\n                        attachClick(closeIcon);\n                    }, allowHideAfter);\n                } else {\n                    attachClick(closeIcon);\n                }\n            }\n        },\n\n        _showPopup: function(wrapper, options) {\n            var that = this,\n                autoHideAfter = options.autoHideAfter,\n                x = options.position.left,\n                y = options.position.top,\n                allowHideAfter = options.allowHideAfter,\n                popup, openPopup, attachClick, closeIcon;\n\n            openPopup = $(\".\" + that._guid).last();\n\n            popup = new kendo.ui.Popup(wrapper, {\n                anchor: openPopup[0] ? openPopup : document.body,\n                origin: that._popupOrigin,\n                position: that._popupPosition,\n                animation: options.animation,\n                modal: true,\n                collision: \"\",\n                isRtl: that._isRtl,\n                close: function(e) {\n                    that._triggerHide(this.element);\n                },\n                deactivate: function(e) {\n                    e.sender.element.off(NS);\n                    e.sender.element.find(KICLOSE).off(NS);\n                    e.sender.destroy();\n                }\n            });\n\n            that._attachPopupEvents(options, popup);\n\n            if (openPopup[0]) {\n                popup.open();\n            } else {\n                if (x === null) {\n                    x = $(window).width() - wrapper.width() - options.position.right;\n                }\n\n                if (y === null) {\n                    y = $(window).height() - wrapper.height() - options.position.bottom;\n                }\n\n                popup.open(x, y);\n            }\n\n            popup.wrapper.addClass(that._guid).css(extend({margin:0}, that._popupPaddings));\n\n            if (options.position.pinned) {\n                popup.wrapper.css(\"position\", \"fixed\");\n                if (openPopup[0]) {\n                    that._togglePin(popup.wrapper, true);\n                }\n            } else if (!openPopup[0]) {\n                that._togglePin(popup.wrapper, false);\n            }\n\n            if (autoHideAfter > 0) {\n                setTimeout(function(){\n                    popup.close();\n                }, autoHideAfter);\n            }\n        },\n\n        _togglePin: function(wrapper, pin) {\n            var win = $(window),\n                sign = pin ? -1 : 1;\n\n            wrapper.css({\n                top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n                left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n            });\n        },\n\n        _attachStaticEvents: function(options, wrapper) {\n            var that = this,\n                allowHideAfter = options.allowHideAfter,\n                attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n\n            function attachClick(target) {\n                target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n            }\n\n            if (options.hideOnClick) {\n                if (attachDelay) {\n                    setTimeout(function(){\n                        attachClick(wrapper);\n                    }, allowHideAfter);\n                } else {\n                    attachClick(wrapper);\n                }\n            } else if (options.button) {\n                if (attachDelay) {\n                    setTimeout(function(){\n                        attachClick(wrapper.find(KICLOSE));\n                    }, allowHideAfter);\n                } else {\n                    attachClick(wrapper.find(KICLOSE));\n                }\n            }\n        },\n\n        _showStatic: function(wrapper, options) {\n            var that = this,\n                autoHideAfter = options.autoHideAfter,\n                animation = options.animation,\n                insertionMethod = options.stacking == UP || options.stacking == LEFT ? \"prependTo\" : \"appendTo\",\n                attachClick;\n\n            wrapper\n                .addClass(that._guid)\n                [insertionMethod](options.appendTo)\n                .hide()\n                .kendoAnimate(animation.open || false);\n\n            that._attachStaticEvents(options, wrapper);\n\n            if (autoHideAfter > 0) {\n                setTimeout(function(){\n                    that._hideStatic(wrapper);\n                }, autoHideAfter);\n            }\n        },\n\n        _hideStatic: function(wrapper) {\n            wrapper.kendoAnimate(extend(this.options.animation.close || false, { complete: function() {\n                wrapper.off(NS).find(KICLOSE).off(NS);\n                wrapper.remove();\n            }}));\n            this._triggerHide(wrapper);\n        },\n\n        _triggerHide: function(element) {\n            this.trigger(HIDE, { element: element });\n            this.angular(\"cleanup\", function(){\n                return { elements: element };\n            });\n        },\n\n        show: function(content, type) {\n            var that = this,\n                options = that.options,\n                wrapper = $(WRAPPER),\n                args, defaultArgs, popup;\n\n            if (!type) {\n                type = INFO;\n            }\n\n            if (content !== null && content !== undefined && content !== \"\") {\n\n                if (kendo.isFunction(content)) {\n                    content = content();\n                }\n\n                defaultArgs = {typeIcon: type, content: \"\"};\n\n                if ($.isPlainObject(content)) {\n                    args = extend(defaultArgs, content);\n                } else {\n                    args = extend(defaultArgs, {content: content});\n                }\n\n                wrapper\n                    .addClass(KNOTIFICATION + \"-\" + type)\n                    .toggleClass(KNOTIFICATION + \"-button\", options.button)\n                    .attr(\"data-role\", \"alert\")\n                    .css({width: options.width, height: options.height})\n                    .append(that._getCompiled(type)(args));\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: wrapper,\n                        data: [{ dataItem: args }]\n                    };\n                });\n\n                if ($(options.appendTo)[0]) {\n                    that._showStatic(wrapper, options);\n                } else {\n                    that._showPopup(wrapper, options);\n                }\n\n                that.trigger(SHOW, {element: wrapper});\n            }\n\n            return that;\n        },\n\n        info: function(content) {\n            return this.show(content, INFO);\n        },\n\n        success: function(content) {\n            return this.show(content, SUCCESS);\n        },\n\n        warning: function(content) {\n            return this.show(content, WARNING);\n        },\n\n        error: function(content) {\n            return this.show(content, ERROR);\n        },\n\n        hide: function() {\n            var that = this,\n                openedNotifications = that.getNotifications();\n\n            if (that.options.appendTo) {\n                openedNotifications.each(function(idx, element){\n                    that._hideStatic($(element));\n                });\n            } else {\n                openedNotifications.each(function(idx, element){\n                    var popup = $(element).data(\"kendoPopup\");\n                    if (popup) {\n                        popup.close();\n                    }\n                });\n            }\n\n            return that;\n        },\n\n        getNotifications: function() {\n            var that = this,\n                guidElements = $(\".\" + that._guid);\n\n            if (that.options.appendTo) {\n                return guidElements;\n            } else {\n                return guidElements.children(\".\" + KNOTIFICATION);\n            }\n        },\n\n        setOptions: function(newOptions) {\n            var that = this,\n                options;\n\n            Widget.fn.setOptions.call(that, newOptions);\n\n            options = that.options;\n\n            if (newOptions.templates !== undefined) {\n                that._compileTemplates(options.templates);\n            }\n\n            if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n                that._compileStacking(options.stacking, options.position.top);\n            }\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.getNotifications().off(NS).find(KICLOSE).off(NS);\n        }\n    });\n\n    kendo.ui.plugin(Notification);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        Popup = kendo.ui.Popup,\n        isFunction = kendo.isFunction,\n        isPlainObject = $.isPlainObject,\n        extend = $.extend,\n        proxy = $.proxy,\n        DOCUMENT = $(document),\n        isLocalUrl = kendo.isLocalUrl,\n        ARIAIDSUFFIX = \"_tt_active\",\n        DESCRIBEDBY = \"aria-describedby\",\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        ERROR = \"error\",\n        CONTENTLOAD = \"contentLoad\",\n        REQUESTSTART = \"requestStart\",\n        KCONTENTFRAME = \"k-content-frame\",\n        TEMPLATE = '<div role=\"tooltip\" class=\"k-widget k-tooltip#if (!autoHide) {# k-tooltip-closable#}#\">#if (!autoHide) {# <div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\">close</a></div> #}#' +\n                '<div class=\"k-tooltip-content\"></div>' +\n                '#if (callout){ #<div class=\"k-callout k-callout-#=dir#\"></div>#}#' +\n            '</div>',\n        IFRAMETEMPLATE = kendo.template(\n        \"<iframe frameborder='0' class='\" + KCONTENTFRAME + \"' \" +\n                \"src='#= content.url #'>\" +\n                    \"This page requires frames in order to show content\" +\n        \"</iframe>\"),\n        NS = \".kendoTooltip\",\n        POSITIONS = {\n            bottom: {\n                origin: \"bottom center\",\n                position: \"top center\"\n            },\n            top: {\n                origin: \"top center\",\n                position: \"bottom center\"\n            },\n            left: {\n                origin: \"center left\",\n                position: \"center right\",\n                collision: \"fit flip\"\n            },\n            right: {\n                origin: \"center right\",\n                position: \"center left\",\n                collision: \"fit flip\"\n            },\n            center: {\n                position: \"center center\",\n                origin: \"center center\"\n            }\n        },\n        REVERSE = {\n            \"top\": \"bottom\",\n            \"bottom\": \"top\",\n            \"left\": \"right\",\n            \"right\": \"left\",\n            \"center\": \"center\"\n        },\n        DIRCLASSES = {\n            bottom: \"n\",\n            top: \"s\",\n            left: \"e\",\n            right: \"w\",\n            center: \"n\"\n        },\n        DIMENSIONS = {\n            \"horizontal\": { offset: \"top\", size: \"outerHeight\" },\n            \"vertical\": { offset: \"left\", size: \"outerWidth\" }\n        },\n        DEFAULTCONTENT = function(e) {\n            return e.target.data(kendo.ns + \"title\");\n        };\n\n    function restoreTitle(element) {\n        while(element.length) {\n            restoreTitleAttributeForElement(element);\n            element = element.parent();\n        }\n    }\n\n    function restoreTitleAttributeForElement(element) {\n        var title = element.data(kendo.ns + \"title\");\n        if (title) {\n            element.attr(\"title\", title);\n            element.removeData(kendo.ns + \"title\");\n        }\n    }\n\n    function saveTitleAttributeForElement(element) {\n        var title = element.attr(\"title\");\n        if (title) {\n            element.data(kendo.ns + \"title\", title);\n            element.attr(\"title\", \"\");\n        }\n    }\n\n    function saveTitleAttributes(element) {\n        while(element.length && !element.is(\"body\")) {\n            saveTitleAttributeForElement(element);\n            element = element.parent();\n        }\n    }\n\n    var Tooltip = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                axis;\n\n            Widget.fn.init.call(that, element, options);\n\n            axis = that.options.position.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n            that.dimensions = DIMENSIONS[axis];\n\n            that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n\n            that.element\n                .on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that))\n                .on(\"mouseenter\" + NS, that.options.filter, proxy(that._mouseenter, that));\n\n            if (this.options.autoHide) {\n                that.element.on(\"mouseleave\" + NS, that.options.filter, proxy(that._mouseleave, that));\n            }\n        },\n\n        options: {\n            name: \"Tooltip\",\n            filter: \"\",\n            content: DEFAULTCONTENT,\n            showAfter: 100,\n            callout: true,\n            position: \"bottom\",\n            showOn: \"mouseenter\",\n            autoHide: true,\n            width: null,\n            height: null,\n            animation: {\n                open: {\n                    effects: \"fade:in\",\n                    duration: 0\n                },\n                close: {\n                    effects: \"fade:out\",\n                    duration: 40,\n                    hide: true\n                }\n            }\n        },\n\n        events: [ SHOW, HIDE, CONTENTLOAD, ERROR, REQUESTSTART ],\n\n        _mouseenter: function(e) {\n            saveTitleAttributes($(e.currentTarget));\n        },\n\n        _showOn: function(e) {\n            var that = this;\n\n            var currentTarget = $(e.currentTarget);\n            if (that.options.showOn && that.options.showOn.match(/click|focus/)) {\n                that._show(currentTarget);\n            } else {\n                clearTimeout(that.timeout);\n\n                that.timeout = setTimeout(function() {\n                    that._show(currentTarget);\n                }, that.options.showAfter);\n            }\n        },\n\n        _appendContent: function(target) {\n            var that = this,\n                contentOptions = that.options.content,\n                element = that.content,\n                showIframe = that.options.iframe,\n                iframe;\n\n            if (isPlainObject(contentOptions) && contentOptions.url) {\n                if (!(\"iframe\" in that.options)) {\n                    showIframe = !isLocalUrl(contentOptions.url);\n                }\n\n                that.trigger(REQUESTSTART, { options: contentOptions, target: target });\n\n                if (!showIframe) {\n                    element.empty();\n                    kendo.ui.progress(element, true);\n\n                    // perform AJAX request\n                    that._ajaxRequest(contentOptions);\n                } else {\n                    element.hide();\n\n                    iframe = element.find(\".\" + KCONTENTFRAME)[0];\n\n                    if (iframe) {\n                        // refresh existing iframe\n                        iframe.src = contentOptions.url || iframe.src;\n                    } else {\n                        element.html(IFRAMETEMPLATE({ content: contentOptions }));\n                    }\n\n                    element.find(\".\" + KCONTENTFRAME)\n                        .off(\"load\" + NS)\n                        .on(\"load\" + NS, function(){\n                            that.trigger(CONTENTLOAD);\n                            element.show();\n                        });\n                }\n            } else if (contentOptions && isFunction(contentOptions)) {\n                contentOptions = contentOptions({ sender: this, target: target });\n                element.html(contentOptions || \"\");\n            } else {\n                element.html(contentOptions);\n            }\n\n            that.angular(\"compile\", function(){\n                return { elements: element };\n            });\n        },\n\n        _ajaxRequest: function(options) {\n            var that = this;\n\n            jQuery.ajax(extend({\n                type: \"GET\",\n                dataType: \"html\",\n                cache: false,\n                error: function (xhr, status) {\n                    kendo.ui.progress(that.content, false);\n\n                    that.trigger(ERROR, { status: status, xhr: xhr });\n                },\n                success: proxy(function (data) {\n                    kendo.ui.progress(that.content, false);\n\n                    that.content.html(data);\n\n                    that.trigger(CONTENTLOAD);\n                }, that)\n            }, options));\n        },\n\n        _documentKeyDown: function(e) {\n            if (e.keyCode === kendo.keys.ESC) {\n                this.hide();\n            }\n        },\n\n        refresh: function() {\n            var that = this,\n                popup = that.popup;\n\n            if (popup && popup.options.anchor) {\n                that._appendContent(popup.options.anchor);\n            }\n        },\n\n        hide: function() {\n            if (this.popup) {\n                this.popup.close();\n            }\n        },\n\n        show: function(target) {\n            target = target || this.element;\n\n            saveTitleAttributes(target);\n            this._show(target);\n        },\n\n        _show: function(target) {\n            var that = this,\n                current = that.target();\n\n            if (!that.popup) {\n                that._initPopup();\n            }\n\n            if (current && current[0] != target[0]) {\n                that.popup.close();\n                that.popup.element.kendoStop(true, true);// animation can be too long to hide the element before it is shown again\n            }\n\n            if (!current || current[0] != target[0]) {\n                that._appendContent(target);\n                that.popup.options.anchor = target;\n            }\n\n            that.popup.one(\"deactivate\", function() {\n                restoreTitle(target);\n                target.removeAttr(DESCRIBEDBY);\n\n                this.element\n                    .removeAttr(\"id\")\n                    .attr(\"aria-hidden\", true);\n\n                DOCUMENT.off(\"keydown\" + NS, that._documentKeyDownHandler);\n            });\n\n            that.popup.open();\n        },\n\n        _initPopup: function() {\n            var that = this,\n                options = that.options,\n                wrapper = $(kendo.template(TEMPLATE)({\n                    callout: options.callout && options.position !== \"center\",\n                    dir: DIRCLASSES[options.position],\n                    autoHide: options.autoHide\n                }));\n\n            that.popup = new Popup(wrapper, extend({\n                activate: function() {\n                    var anchor = this.options.anchor,\n                        ariaId = anchor[0].id || that.element[0].id;\n\n                    if (ariaId) {\n                        anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n                        this.element.attr(\"id\", ariaId + ARIAIDSUFFIX);\n                    }\n\n                    if (options.callout) {\n                        that._positionCallout();\n                    }\n\n                    this.element.removeAttr(\"aria-hidden\");\n\n                    DOCUMENT.on(\"keydown\" + NS, that._documentKeyDownHandler);\n\n                    that.trigger(SHOW);\n                },\n                close: function() {\n                    that.trigger(HIDE);\n                },\n                copyAnchorStyles: false,\n                animation: options.animation\n            }, POSITIONS[options.position]));\n\n            wrapper.css({\n                width: options.width,\n                height: options.height\n            });\n\n            that.content = wrapper.find(\".k-tooltip-content\");\n            that.arrow = wrapper.find(\".k-callout\");\n\n            if (options.autoHide) {\n                wrapper.on(\"mouseleave\" + NS, proxy(that._mouseleave, that));\n            } else {\n                wrapper.on(\"click\" + NS, \".k-tooltip-button\", proxy(that._closeButtonClick, that));\n            }\n        },\n\n        _closeButtonClick: function(e) {\n            e.preventDefault();\n            this.hide();\n        },\n\n        _mouseleave: function(e) {\n            if (this.popup) {\n                var element = $(e.currentTarget),\n                    offset = element.offset(),\n                    pageX = e.pageX,\n                    pageY = e.pageY;\n\n                offset.right = offset.left + element.outerWidth();\n                offset.bottom = offset.top + element.outerHeight();\n\n                if (pageX > offset.left && pageX < offset.right && pageY > offset.top && pageY < offset.bottom) {\n                    return;\n                }\n\n                this.popup.close();\n            } else {\n                restoreTitle($(e.currentTarget));\n            }\n            clearTimeout(this.timeout);\n        },\n\n        _positionCallout: function() {\n            var that = this,\n                position = that.options.position,\n                dimensions = that.dimensions,\n                offset = dimensions.offset,\n                popup = that.popup,\n                anchor = popup.options.anchor,\n                anchorOffset = $(anchor).offset(),\n                arrowBorder = parseInt(that.arrow.css(\"border-top-width\"), 10),\n                elementOffset = $(popup.element).offset(),\n                cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position],\n                offsetAmount = anchorOffset[offset] - elementOffset[offset] + ($(anchor)[dimensions.size]() / 2) - arrowBorder;\n\n           that.arrow\n               .removeClass(\"k-callout-n k-callout-s k-callout-w k-callout-e\")\n               .addClass(\"k-callout-\" + cssClass)\n               .css(offset, offsetAmount);\n        },\n\n        target: function() {\n            if (this.popup) {\n                return this.popup.options.anchor;\n            }\n            return null;\n        },\n\n        destroy: function() {\n            var popup = this.popup;\n\n            if (popup) {\n                popup.element.off(NS);\n                popup.destroy();\n            }\n\n            this.element.off(NS);\n\n            DOCUMENT.off(\"keydown\" + NS, this._documentKeyDownHandler);\n\n            Widget.fn.destroy.call(this);\n        }\n    });\n\n    kendo.ui.plugin(Tooltip);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        keys = kendo.keys,\n        support = kendo.support,\n        htmlEncode = kendo.htmlEncode,\n        activeElement = kendo._activeElement,\n        ID = \"id\",\n        LI = \"li\",\n        CHANGE = \"change\",\n        CHARACTER = \"character\",\n        FOCUSED = \"k-state-focused\",\n        HOVER = \"k-state-hover\",\n        LOADING = \"k-loading\",\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        SELECT = \"select\",\n        SELECTED = \"selected\",\n        PROGRESS = \"progress\",\n        REQUESTEND = \"requestEnd\",\n        WIDTH = \"width\",\n        extend = $.extend,\n        proxy = $.proxy,\n        browser = support.browser,\n        isIE8 = browser.msie && browser.version < 9,\n        quotRegExp = /\"/g,\n        alternativeNames = {\n            \"ComboBox\": \"DropDownList\",\n            \"DropDownList\": \"ComboBox\"\n        };\n\n    var List = kendo.ui.DataBoundWidget.extend({\n        init: function(element, options) {\n            var that = this,\n                ns = that.ns,\n                id;\n\n            Widget.fn.init.call(that, element, options);\n            element = that.element;\n\n            that._isSelect = element.is(SELECT);\n            that._template();\n\n            that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>')\n                        .css({ overflow: support.kineticScrollNeeded ? \"\": \"auto\" })\n                        .on(\"mouseenter\" + ns, LI, function() { $(this).addClass(HOVER); })\n                        .on(\"mouseleave\" + ns, LI, function() { $(this).removeClass(HOVER); })\n                        .on(\"click\" + ns, LI, proxy(that._click, that))\n                        .attr({\n                            tabIndex: -1,\n                            role: \"listbox\",\n                            \"aria-hidden\": true\n                        });\n\n            that.list = $(\"<div class='k-list-container'/>\")\n                        .append(that.ul)\n                        .on(\"mousedown\" + ns, proxy(that._listMousedown, that));\n\n            id = element.attr(ID);\n\n            if (id) {\n                that.list.attr(ID, id + \"-list\");\n                that.ul.attr(ID, id + \"_listbox\");\n                that._optionID = id + \"_option_selected\";\n            }\n\n            that._header();\n            that._accessors();\n            that._initValue();\n        },\n\n        options: {\n            valuePrimitive: false,\n            headerTemplate: \"\"\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n\n            if (options && options.enable !== undefined) {\n                options.enabled = options.enable;\n            }\n        },\n\n        focus: function() {\n            this._focused.focus();\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        _listMousedown: function(e) {\n            if (!this.filterInput || this.filterInput[0] !== e.target) {\n                e.preventDefault();\n            }\n        },\n\n        _filterSource: function(filter, force) {\n            var that = this;\n            var options = that.options;\n            var dataSource = that.dataSource;\n            var expression = extend({}, dataSource.filter() || {});\n\n            var removed = removeFiltersForField(expression, options.dataTextField);\n\n            if ((filter || removed) && that.trigger(\"filtering\", { filter: filter })) {\n                return;\n            }\n\n            if (filter) {\n                expression = expression.filters || [];\n                expression.push(filter);\n            }\n\n            if (!force) {\n                dataSource.filter(expression);\n            } else {\n                dataSource.read(expression);\n            }\n        },\n\n        _header: function() {\n            var that = this;\n            var template = that.options.headerTemplate;\n            var header;\n\n            if ($.isFunction(template)) {\n                template = template({});\n            }\n\n            if (template) {\n                that.list.prepend(template);\n\n                header = that.ul.prev();\n\n                that.header = header[0] ? header : null;\n                if (that.header) {\n                    that.angular(\"compile\", function(){\n                        return { elements: that.header };\n                    });\n                }\n            }\n        },\n\n        _initValue: function() {\n            var that = this,\n                value = that.options.value;\n\n            if (value !== null) {\n                that.element.val(value);\n            } else {\n                value = that._accessor();\n                that.options.value = value;\n            }\n\n            that._old = value;\n        },\n\n        _ignoreCase: function() {\n            var that = this,\n                model = that.dataSource.reader.model,\n                field;\n\n            if (model && model.fields) {\n                field = model.fields[that.options.dataTextField];\n\n                if (field && field.type && field.type !== \"string\") {\n                    that.options.ignoreCase = false;\n                }\n            }\n        },\n\n        items: function() {\n            return this.ul[0].children;\n        },\n\n        current: function(candidate) {\n            var that = this;\n            var focused = that._focused.add(that.filterInput);\n            var id = that._optionID;\n\n            if (candidate !== undefined) {\n                if (that._current) {\n                    that._current\n                        .removeClass(FOCUSED)\n                        .removeAttr(\"aria-selected\")\n                        .removeAttr(ID);\n\n                    focused.removeAttr(\"aria-activedescendant\");\n                }\n\n                if (candidate) {\n                    candidate.addClass(FOCUSED);\n                    that._scroll(candidate);\n\n                    if (id) {\n                        candidate.attr(\"id\", id);\n                        focused.attr(\"aria-activedescendant\", id);\n                    }\n                }\n\n                that._current = candidate;\n            } else {\n                return that._current;\n            }\n        },\n\n        destroy: function() {\n            var that = this,\n                ns = that.ns;\n\n            Widget.fn.destroy.call(that);\n\n            that._unbindDataSource();\n\n            that.ul.off(ns);\n            that.list.off(ns);\n\n            if (that._touchScroller) {\n                that._touchScroller.destroy();\n            }\n\n            that.popup.destroy();\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n        },\n\n        dataItem: function(index) {\n            var that = this;\n\n\n            if (index === undefined) {\n                index = that.selectedIndex;\n            } else if (typeof index !== \"number\") {\n                index = $(that.items()).index(index);\n            }\n\n            return that._data()[index];\n        },\n\n        _accessors: function() {\n            var that = this;\n            var element = that.element;\n            var options = that.options;\n            var getter = kendo.getter;\n            var textField = element.attr(kendo.attr(\"text-field\"));\n            var valueField = element.attr(kendo.attr(\"value-field\"));\n\n            if (!options.dataTextField && textField) {\n                options.dataTextField = textField;\n            }\n\n            if (!options.dataValueField && valueField) {\n                options.dataValueField = valueField;\n            }\n\n            that._text = getter(options.dataTextField);\n            that._value = getter(options.dataValueField);\n        },\n\n        _aria: function(id) {\n            var that = this,\n                options = that.options,\n                element = that._focused.add(that.filterInput);\n\n            if (options.suggest !== undefined) {\n                element.attr(\"aria-autocomplete\", options.suggest ? \"both\" : \"list\");\n            }\n\n            id = id ? id + \" \" + that.ul[0].id : that.ul[0].id;\n\n            element.attr(\"aria-owns\", id);\n\n            that.ul.attr(\"aria-live\", !options.filter || options.filter === \"none\" ? \"off\" : \"polite\");\n        },\n\n        _blur: function() {\n            var that = this;\n\n            that._change();\n            that.close();\n        },\n\n        _change: function() {\n            var that = this,\n                index = that.selectedIndex,\n                optionValue = that.options.value,\n                value = that.value(),\n                trigger;\n\n            if (that._isSelect && !that._bound && optionValue) {\n                value = optionValue;\n            }\n\n            if (value !== that._old) {\n                trigger = true;\n            } else if (index !== undefined && index !== that._oldIndex) {\n                trigger = true;\n            }\n\n            if (trigger) {\n                that._old = value;\n                that._oldIndex = index;\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n\n                that.trigger(CHANGE);\n            }\n        },\n\n        _click: function(e) {\n            if (!e.isDefaultPrevented()) {\n                this._accept($(e.currentTarget));\n            }\n        },\n\n        _data: function() {\n            return this.dataSource.view();\n        },\n\n        _enable: function() {\n            var that = this,\n                options = that.options,\n                disabled = that.element.is(\"[disabled]\");\n\n            if (options.enable !== undefined) {\n                options.enabled = options.enable;\n            }\n\n            if (!options.enabled || disabled) {\n                that.enable(false);\n            } else {\n                that.readonly(that.element.is(\"[readonly]\"));\n            }\n        },\n\n        _focus: function(li) {\n            var that = this;\n            var userTriggered = true;\n\n            if (that.popup.visible() && li && that.trigger(SELECT, {item: li})) {\n                that.close();\n                return;\n            }\n\n            that._select(li);\n            that._triggerCascade(userTriggered);\n\n            that._blur();\n        },\n\n        _index: function(value) {\n            var that = this,\n                idx,\n                length,\n                data = that._data();\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (that._dataValue(data[idx]) == value) {\n                    return idx;\n                }\n            }\n\n            return -1;\n        },\n\n        _dataValue: function(dataItem) {\n            var value = this._value(dataItem);\n\n            if (value === undefined) {\n                value = this._text(dataItem);\n            }\n\n            return value;\n        },\n\n        _height: function(length) {\n            if (length) {\n                var that = this,\n                    list = that.list,\n                    height = that.options.height,\n                    visible = that.popup.visible(),\n                    offsetTop,\n                    popups;\n\n                popups = list.add(list.parent(\".k-animation-container\")).show();\n\n                height = that.ul[0].scrollHeight > height ? height : \"auto\";\n\n                popups.height(height);\n\n                if (height !== \"auto\") {\n                    offsetTop = that.ul[0].offsetTop;\n\n                    if (offsetTop) {\n                        height = list.height() - offsetTop;\n                    }\n                }\n\n                that.ul.height(height);\n\n                if (!visible) {\n                    popups.hide();\n                }\n            }\n        },\n\n        _adjustListWidth: function() {\n            var list = this.list,\n                width = list[0].style.width,\n                wrapper = this.wrapper,\n                computedStyle, computedWidth;\n\n            if (!list.data(WIDTH) && width) {\n                return;\n            }\n\n            computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n            computedWidth = computedStyle ? parseFloat(computedStyle.width) : wrapper.outerWidth();\n\n            if (computedStyle && browser.msie) { // getComputedStyle returns different box in IE.\n                computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n            }\n\n            if (list.css(\"box-sizing\") !== \"border-box\") {\n                width = computedWidth - (list.outerWidth() - list.width());\n            } else {\n                width = computedWidth;\n            }\n\n            list.css({\n                fontFamily: wrapper.css(\"font-family\"),\n                width: width\n            })\n            .data(WIDTH, width);\n\n            return true;\n        },\n\n        _openHandler: function(e) {\n            this._adjustListWidth();\n\n            if (this.trigger(OPEN)) {\n                e.preventDefault();\n            } else {\n                this._focused.attr(\"aria-expanded\", true);\n                this.ul.attr(\"aria-hidden\", false);\n            }\n        },\n\n        _closeHandler: function(e) {\n            if (this.trigger(CLOSE)) {\n                e.preventDefault();\n            } else {\n                this._focused.attr(\"aria-expanded\", false);\n                this.ul.attr(\"aria-hidden\", true);\n            }\n        },\n\n        _firstOpen: function() {\n            this._height(this._data().length);\n        },\n\n        _popup: function() {\n            var that = this;\n\n            that.popup = new ui.Popup(that.list, extend({}, that.options.popup, {\n                anchor: that.wrapper,\n                open: proxy(that._openHandler, that),\n                close: proxy(that._closeHandler, that),\n                animation: that.options.animation,\n                isRtl: support.isRtl(that.wrapper)\n            }));\n\n            that.popup.one(OPEN, proxy(that._firstOpen, that));\n            that._touchScroller = kendo.touchScroller(that.popup.element);\n        },\n\n        _makeUnselectable: function() {\n            if (isIE8) {\n                this.list.find(\"*\").not(\".k-textbox\").attr(\"unselectable\", \"on\");\n            }\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _toggle: function(open, preventFocus) {\n            var that = this;\n            var touchEnabled = support.touch || support.MSPointers || support.pointers;\n\n            open = open !== undefined? open : !that.popup.visible();\n\n            if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n                that._focused.focus();\n            }\n\n            that[open ? OPEN : CLOSE]();\n        },\n\n        _scroll: function (item) {\n\n            if (!item) {\n                return;\n            }\n\n            if (item[0]) {\n                item = item[0];\n            }\n\n            var ul = this.ul[0],\n                itemOffsetTop = item.offsetTop,\n                itemOffsetHeight = item.offsetHeight,\n                ulScrollTop = ul.scrollTop,\n                ulOffsetHeight = ul.clientHeight,\n                bottomDistance = itemOffsetTop + itemOffsetHeight,\n                touchScroller = this._touchScroller,\n                yDimension, offsetHeight;\n\n            if (touchScroller) {\n                yDimension = touchScroller.dimensions.y;\n\n                if (yDimension.enabled && itemOffsetTop > yDimension.size) {\n                    itemOffsetTop = itemOffsetTop - yDimension.size + itemOffsetHeight + 4;\n\n                    touchScroller.scrollTo(0, -itemOffsetTop);\n                }\n            } else {\n                offsetHeight = this.header ? this.header.outerHeight() : 0;\n                offsetHeight += this.filterInput ? this.filterInput.outerHeight() : 0;\n\n                ul.scrollTop = ulScrollTop > itemOffsetTop ?\n                               (itemOffsetTop - offsetHeight) : bottomDistance > (ulScrollTop + ulOffsetHeight) ?\n                               (bottomDistance - ulOffsetHeight - offsetHeight) : ulScrollTop;\n            }\n        },\n\n        _template: function() {\n            var that = this,\n                options = that.options,\n                template = options.template,\n                hasDataSource = options.dataSource;\n\n            if (that._isSelect && that.element[0].length) {\n                if (!hasDataSource) {\n                    options.dataTextField = options.dataTextField || \"text\";\n                    options.dataValueField = options.dataValueField || \"value\";\n                }\n            }\n\n            if (!template) {\n                that.template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, \"data\") + \"}</li>\", { useWithBlock: false });\n            } else {\n                template = kendo.template(template);\n                that.template = function(data) {\n                    return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + \"</li>\";\n                };\n            }\n        },\n\n        _triggerCascade: function(userTriggered) {\n            var that = this,\n                value = that.value();\n\n            if ((!that._bound && value) || that._old !== value) {\n                that.trigger(\"cascade\", { userTriggered: userTriggered });\n            }\n        },\n\n        _unbindDataSource: function() {\n            var that = this;\n\n            that.dataSource.unbind(CHANGE, that._refreshHandler)\n                           .unbind(PROGRESS, that._progressHandler)\n                           .unbind(REQUESTEND, that._requestEndHandler)\n                           .unbind(\"error\", that._errorHandler);\n        }\n    });\n\n    extend(List, {\n        inArray: function(node, parentNode) {\n            var idx, length, siblings = parentNode.children;\n\n            if (!node || node.parentNode !== parentNode) {\n                return -1;\n            }\n\n            for (idx = 0, length = siblings.length; idx < length; idx++) {\n                if (node === siblings[idx]) {\n                    return idx;\n                }\n            }\n\n            return -1;\n        }\n    });\n\n    kendo.ui.List = List;\n\n    ui.Select = List.extend({\n        init: function(element, options) {\n            List.fn.init.call(this, element, options);\n            this._initial = this.element.val();\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n            this._bound = false;\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        close: function() {\n            this.popup.close();\n        },\n\n        select: function(li) {\n            var that = this;\n\n            if (li === undefined) {\n                return that.selectedIndex;\n            } else {\n                that._select(li);\n                that._triggerCascade();\n                that._old = that._accessor();\n                that._oldIndex = that.selectedIndex;\n            }\n        },\n\n        search: function(word) {\n            word = typeof word === \"string\" ? word : this.text();\n            var that = this;\n            var length = word.length;\n            var options = that.options;\n            var ignoreCase = options.ignoreCase;\n            var filter = options.filter;\n            var field = options.dataTextField;\n\n            clearTimeout(that._typing);\n\n            if (!length || length >= options.minLength) {\n                that._state = \"filter\";\n                if (filter === \"none\") {\n                    that._filter(word);\n                } else {\n                    that._open = true;\n                    that._filterSource({\n                        value: ignoreCase ? word.toLowerCase() : word,\n                        field: field,\n                        operator: filter,\n                        ignoreCase: ignoreCase\n                    });\n                }\n            }\n        },\n\n        _accessor: function(value, idx) {\n            var element = this.element[0],\n                isSelect = this._isSelect,\n                selectedIndex = element.selectedIndex,\n                option;\n\n            if (value === undefined) {\n                if (isSelect) {\n                    if (selectedIndex > -1) {\n                        option = element.options[selectedIndex];\n\n                        if (option) {\n                            value = option.value;\n                        }\n                    }\n                } else {\n                    value = element.value;\n                }\n                return value;\n            } else {\n                if (isSelect) {\n                    if (selectedIndex > -1) {\n                        element.options[selectedIndex].removeAttribute(SELECTED);\n                    }\n\n                    element.selectedIndex = idx;\n                    option = element.options[idx];\n                    if (option) {\n                       option.setAttribute(SELECTED, SELECTED);\n                    }\n                } else {\n                    element.value = value;\n                }\n            }\n        },\n\n        _hideBusy: function () {\n            var that = this;\n            clearTimeout(that._busy);\n            that._arrow.removeClass(LOADING);\n            that._focused.attr(\"aria-busy\", false);\n            that._busy = null;\n        },\n\n        _showBusy: function () {\n            var that = this;\n\n            that._request = true;\n\n            if (that._busy) {\n                return;\n            }\n\n            that._busy = setTimeout(function () {\n                if (that._arrow) { //destroyed after request start\n                    that._focused.attr(\"aria-busy\", true);\n                    that._arrow.addClass(LOADING);\n                }\n            }, 100);\n        },\n\n        _requestEnd: function() {\n            this._request = false;\n        },\n\n        _dataSource: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                dataSource = options.dataSource || {},\n                idx;\n\n            dataSource = $.isArray(dataSource) ? {data: dataSource} : dataSource;\n\n            if (that._isSelect) {\n                idx = element[0].selectedIndex;\n                if (idx > -1) {\n                    options.index = idx;\n                }\n\n                dataSource.select = element;\n                dataSource.fields = [{ field: options.dataTextField },\n                                     { field: options.dataValueField }];\n            }\n\n            if (that.dataSource && that._refreshHandler) {\n                that._unbindDataSource();\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._showBusy, that);\n                that._requestEndHandler = proxy(that._requestEnd, that);\n                that._errorHandler = proxy(that._hideBusy, that);\n            }\n\n            that.dataSource = kendo.data.DataSource.create(dataSource)\n                                   .bind(CHANGE, that._refreshHandler)\n                                   .bind(PROGRESS, that._progressHandler)\n                                   .bind(REQUESTEND, that._requestEndHandler)\n                                   .bind(\"error\", that._errorHandler);\n        },\n\n        _get: function(li) {\n            var that = this,\n                data = that._data(),\n                idx, length;\n\n            if (typeof li === \"function\") {\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    if (li(data[idx])) {\n                        li = idx;\n                        break;\n                    }\n                }\n            }\n\n            if (typeof li === \"number\") {\n                if (li < 0) {\n                    return $();\n                }\n\n                li = $(that.ul[0].children[li]);\n            }\n\n            if (li && li.nodeType) {\n                li = $(li);\n            }\n\n            return li;\n        },\n\n        _move: function(e) {\n            var that = this,\n                key = e.keyCode,\n                ul = that.ul[0],\n                methodName = that.popup.visible() ? \"_select\" : \"_accept\",\n                current = that._current,\n                down = key === keys.DOWN,\n                firstChild,\n                pressed;\n\n            if (key === keys.UP || down) {\n                if (e.altKey) {\n                    that.toggle(down);\n                } else {\n                    firstChild = ul.firstChild;\n                    if (!firstChild && !that._accessor() && that._state !== \"filter\") {\n                        if (!that._fetch) {\n                            that.dataSource.one(CHANGE, function() {\n                                that._move(e);\n                                that._fetch = false;\n                            });\n\n                            that._fetch = true;\n                            that._filterSource();\n                        }\n\n                        e.preventDefault();\n\n                        return true; //pressed\n                    }\n\n                    if (down) {\n                        if (!current || (that.selectedIndex === -1 && !that.value() && current[0] === firstChild)) {\n                            current = firstChild;\n                        } else {\n                            current = current[0].nextSibling;\n                            if (!current && firstChild === ul.lastChild) {\n                                current = firstChild;\n                            }\n                        }\n\n                        that[methodName](current);\n                    } else {\n                        current = current ? current[0].previousSibling : ul.lastChild;\n                        if (!current && firstChild === ul.lastChild) {\n                            current = firstChild;\n                        }\n\n                        that[methodName](current);\n                    }\n                }\n\n                e.preventDefault();\n                pressed = true;\n            } else if (key === keys.ENTER || key === keys.TAB) {\n                if (that.popup.visible()) {\n                    e.preventDefault();\n                }\n\n                if (!that.popup.visible() && (!current || !current.hasClass(\"k-state-selected\"))) {\n                    current = null;\n                }\n\n                that._accept(current, key);\n                pressed = true;\n            } else if (key === keys.ESC) {\n                if (that.popup.visible()) {\n                    e.preventDefault();\n                }\n                that.close();\n                pressed = true;\n            }\n\n            return pressed;\n        },\n\n        _selectItem: function() {\n            var that = this,\n                notBound = that._bound === undefined,\n                options = that.options,\n                useOptionIndex,\n                value;\n\n            useOptionIndex = that._isSelect && !that._initial && !options.value && options.index && !that._bound;\n\n            if (!useOptionIndex) {\n                value = that._selectedValue || (notBound && options.value) || that._accessor();\n            }\n\n            if (value) {\n                that.value(value);\n            } else if (notBound) {\n                that.select(options.index);\n            }\n        },\n\n        _fetchItems: function(value) {\n            var that = this,\n                hasItems = that.ul[0].firstChild;\n\n            //if request is started avoid datasource.fetch\n            if (that._request) {\n                return true;\n            }\n\n            if (!that._bound && !that._fetch && !hasItems) {\n                if (that.options.cascadeFrom) {\n                    return !hasItems;\n                }\n\n                that.dataSource.one(CHANGE, function() {\n                    that._old = undefined;\n                    that.value(value);\n                    that._fetch = false;\n                });\n\n                that._fetch = true;\n                that.dataSource.fetch();\n\n                return true;\n            }\n        },\n\n        _options: function(data, optionLabel) {\n            var that = this,\n                element = that.element,\n                length = data.length,\n                options = \"\",\n                option,\n                dataItem,\n                dataText,\n                dataValue,\n                idx = 0;\n\n            if (optionLabel) {\n                idx = 1;\n                options = optionLabel;\n            }\n\n            for (; idx < length; idx++) {\n                option = \"<option\";\n                dataItem = data[idx];\n                dataText = that._text(dataItem);\n                dataValue = that._value(dataItem);\n\n                if (dataValue !== undefined) {\n                    dataValue += \"\";\n\n                    if (dataValue.indexOf('\"') !== -1) {\n                        dataValue = dataValue.replace(quotRegExp, \"&quot;\");\n                    }\n\n                    option += ' value=\"' + dataValue + '\"';\n                }\n\n                option += \">\";\n\n                if (dataText !== undefined) {\n                    option += htmlEncode(dataText);\n                }\n\n                option += \"</option>\";\n                options += option;\n            }\n\n            element.html(options);\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    setTimeout(function() {\n                        that.value(that._initial);\n                    });\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        },\n\n        _cascade: function() {\n            var that = this,\n                options = that.options,\n                cascade = options.cascadeFrom,\n                parent, parentElement,\n                select, valueField,\n                change;\n\n            if (cascade) {\n                that._selectedValue = options.value || that._accessor();\n\n                parentElement = $(\"#\" + cascade);\n                parent = parentElement.data(\"kendo\" + options.name);\n\n                if (!parent) {\n                    parent = parentElement.data(\"kendo\" + alternativeNames[options.name]);\n                }\n\n                if (!parent) {\n                    return;\n                }\n\n                options.autoBind = false;\n                valueField = options.cascadeFromField || parent.options.dataValueField;\n\n                change = function() {\n                    that.dataSource.unbind(CHANGE, change);\n\n                    var value = that._selectedValue || that.value();\n                    if (that._userTriggered) {\n                        that._clearSelection(parent, true);\n                    } else if (value) {\n                        that.value(value);\n                        if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n                            that._clearSelection(parent, true);\n                        }\n                    } else {\n                        that.select(options.index);\n                    }\n\n                    that.enable();\n                    that._triggerCascade(that._userTriggered);\n                    that._userTriggered = false;\n                };\n                select = function() {\n                    var dataItem = parent.dataItem(),\n                        filterValue = dataItem ? parent._value(dataItem) : null,\n                        expressions, filters;\n\n                    if (filterValue || filterValue === 0) {\n                        expressions = that.dataSource.filter() || {};\n                        removeFiltersForField(expressions, valueField);\n                        filters = expressions.filters || [];\n\n                        filters.push({\n                            field: valueField,\n                            operator: \"eq\",\n                            value: filterValue\n                        });\n\n                        var handler = function() {\n                            that.unbind(\"dataBound\", handler);\n                            change.apply(that, arguments);\n                        };\n\n                        that.first(\"dataBound\", handler);\n\n                        that.dataSource.filter(filters);\n\n                    } else {\n                        that.enable(false);\n                        that._clearSelection(parent);\n                        that._triggerCascade(that._userTriggered);\n                        that._userTriggered = false;\n                    }\n                };\n\n                parent.first(\"cascade\", function(e) {\n                    that._userTriggered = e.userTriggered;\n                    select();\n                });\n\n                //refresh was called\n                if (parent._bound) {\n                    select();\n                } else if (!parent.value()) {\n                    that.enable(false);\n                }\n            }\n        }\n    });\n\n    function removeFiltersForField(expression, field) {\n        var filters;\n        var found = false;\n\n        if (expression.filters) {\n            filters = $.grep(expression.filters, function(filter) {\n                found = removeFiltersForField(filter, field);\n                if (filter.filters) {\n                    return filter.filters.length;\n                } else {\n                    return filter.field != field;\n                }\n            });\n\n            if (!found && expression.filters.length !== filters.length) {\n                found = true;\n            }\n\n            expression.filters = filters;\n        }\n\n        return found;\n    }\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        support = kendo.support,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        keys = kendo.keys,\n        parse = kendo.parseDate,\n        adjustDST = kendo.date.adjustDST,\n        extractFormat = kendo._extractFormat,\n        template = kendo.template,\n        getCulture = kendo.getCulture,\n        transitions = kendo.support.transitions,\n        transitionOrigin = transitions ? transitions.css + \"transform-origin\" : \"\",\n        cellTemplate = template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link\" href=\"\\\\#\" data-#=data.ns#value=\"#=data.dateString#\">#=data.value#</a></td>', { useWithBlock: false }),\n        emptyCellTemplate = template('<td role=\"gridcell\">&nbsp;</td>', { useWithBlock: false }),\n        browser = kendo.support.browser,\n        isIE8 = browser.msie && browser.version < 9,\n        ns = \".kendoCalendar\",\n        CLICK = \"click\" + ns,\n        KEYDOWN_NS = \"keydown\" + ns,\n        ID = \"id\",\n        MIN = \"min\",\n        LEFT = \"left\",\n        SLIDE = \"slideIn\",\n        MONTH = \"month\",\n        CENTURY = \"century\",\n        CHANGE = \"change\",\n        NAVIGATE = \"navigate\",\n        VALUE = \"value\",\n        HOVER = \"k-state-hover\",\n        DISABLED = \"k-state-disabled\",\n        FOCUSED = \"k-state-focused\",\n        OTHERMONTH = \"k-other-month\",\n        OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"',\n        TODAY = \"k-nav-today\",\n        CELLSELECTOR = \"td:has(.k-link)\",\n        BLUR = \"blur\" + ns,\n        FOCUS = \"focus\",\n        FOCUS_WITH_NS = FOCUS + ns,\n        MOUSEENTER = support.touch ? \"touchstart\" : \"mouseenter\",\n        MOUSEENTER_WITH_NS = support.touch ? \"touchstart\" + ns : \"mouseenter\" + ns,\n        MOUSELEAVE = support.touch ? \"touchend\" + ns + \" touchmove\" + ns : \"mouseleave\" + ns,\n        MS_PER_MINUTE = 60000,\n        MS_PER_DAY = 86400000,\n        PREVARROW = \"_prevArrow\",\n        NEXTARROW = \"_nextArrow\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_SELECTED = \"aria-selected\",\n        proxy = $.proxy,\n        extend = $.extend,\n        DATE = Date,\n        views = {\n            month: 0,\n            year: 1,\n            decade: 2,\n            century: 3\n        };\n\n    var Calendar = Widget.extend({\n        init: function(element, options) {\n            var that = this, value, id;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.wrapper = that.element;\n            options = that.options;\n\n            options.url = window.unescape(options.url);\n\n            that._templates();\n\n            that._header();\n\n            that._footer(that.footer);\n\n            id = element\n                    .addClass(\"k-widget k-calendar\")\n                    .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE, CELLSELECTOR, mousetoggle)\n                    .on(KEYDOWN_NS, \"table.k-content\", proxy(that._move, that))\n                    .on(CLICK, CELLSELECTOR, function(e) {\n                        var link = e.currentTarget.firstChild;\n\n                        if (link.href.indexOf(\"#\") != -1) {\n                            e.preventDefault();\n                        }\n\n                        that._click($(link));\n                    })\n                    .on(\"mouseup\" + ns, \"table.k-content, .k-footer\", function() {\n                        that._focusView(that.options.focusOnNav !== false);\n                    })\n                    .attr(ID);\n\n            if (id) {\n                that._cellID = id + \"_cell_selected\";\n            }\n\n            normalize(options);\n            value = parse(options.value, options.format, options.culture);\n\n            that._index = views[options.start];\n            that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n            that._addClassProxy = function() {\n                that._active = true;\n                that._cell.addClass(FOCUSED);\n            };\n\n            that._removeClassProxy = function() {\n                that._active = false;\n                that._cell.removeClass(FOCUSED);\n            };\n\n            that.value(value);\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"Calendar\",\n            value: null,\n            min: new DATE(1900, 0, 1),\n            max: new DATE(2099, 11, 31),\n            dates: [],\n            url: \"\",\n            culture: \"\",\n            footer : \"\",\n            format : \"\",\n            month : {},\n            start: MONTH,\n            depth: MONTH,\n            animation: {\n                horizontal: {\n                    effects: SLIDE,\n                    reverse: true,\n                    duration: 500,\n                    divisor: 2\n                },\n                vertical: {\n                    effects: \"zoomIn\",\n                    duration: 400\n                }\n            }\n        },\n\n        events: [\n            CHANGE,\n            NAVIGATE\n        ],\n\n        setOptions: function(options) {\n            var that = this;\n\n            normalize(options);\n\n            if (!options.dates[0]) {\n                options.dates = that.options.dates;\n            }\n\n            Widget.fn.setOptions.call(that, options);\n\n            that._templates();\n\n            that._footer(that.footer);\n            that._index = views[that.options.start];\n\n            that.navigate();\n        },\n\n        destroy: function() {\n            var that = this,\n                today = that._today;\n\n            that.element.off(ns);\n            that._title.off(ns);\n            that[PREVARROW].off(ns);\n            that[NEXTARROW].off(ns);\n\n            kendo.destroy(that._table);\n\n            if (today) {\n                kendo.destroy(today.off(ns));\n            }\n\n            Widget.fn.destroy.call(that);\n        },\n\n        current: function() {\n            return this._current;\n        },\n\n        view: function() {\n            return this._view;\n        },\n\n        focus: function(table) {\n            table = table || this._table;\n            this._bindTable(table);\n            table.focus();\n        },\n\n        min: function(value) {\n            return this._option(MIN, value);\n        },\n\n        max: function(value) {\n            return this._option(\"max\", value);\n        },\n\n        navigateToPast: function() {\n            this._navigate(PREVARROW, -1);\n        },\n\n        navigateToFuture: function() {\n            this._navigate(NEXTARROW, 1);\n        },\n\n        navigateUp: function() {\n            var that = this,\n                index = that._index;\n\n            if (that._title.hasClass(DISABLED)) {\n                return;\n            }\n\n            that.navigate(that._current, ++index);\n        },\n\n        navigateDown: function(value) {\n            var that = this,\n            index = that._index,\n            depth = that.options.depth;\n\n            if (!value) {\n                return;\n            }\n\n            if (index === views[depth]) {\n                if (+that._value != +value) {\n                    that.value(value);\n                    that.trigger(CHANGE);\n                }\n                return;\n            }\n\n            that.navigate(value, --index);\n        },\n\n        navigate: function(value, view) {\n            view = isNaN(view) ? views[view] : view;\n\n            var that = this,\n                options = that.options,\n                culture = options.culture,\n                min = options.min,\n                max = options.max,\n                title = that._title,\n                from = that._table,\n                old = that._oldTable,\n                selectedValue = that._value,\n                currentValue = that._current,\n                future = value && +value > +currentValue,\n                vertical = view !== undefined && view !== that._index,\n                to, currentView, compare,\n                disabled;\n\n            if (!value) {\n                value = currentValue;\n            }\n\n            that._current = value = new DATE(+restrictValue(value, min, max));\n\n            if (view === undefined) {\n                view = that._index;\n            } else {\n                that._index = view;\n            }\n\n            that._view = currentView = calendar.views[view];\n            compare = currentView.compare;\n\n            disabled = view === views[CENTURY];\n            title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n            disabled = compare(value, min) < 1;\n            that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n            disabled = compare(value, max) > -1;\n            that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n            if (from && old && old.data(\"animating\")) {\n                old.kendoStop(true, true);\n                from.kendoStop(true, true);\n            }\n\n            that._oldTable = from;\n\n            if (!from || that._changeView) {\n                title.html(currentView.title(value, min, max, culture));\n\n                that._table = to = $(currentView.content(extend({\n                    min: min,\n                    max: max,\n                    date: value,\n                    url: options.url,\n                    dates: options.dates,\n                    format: options.format,\n                    culture: culture\n                }, that[currentView.name])));\n\n                makeUnselectable(to);\n\n                that._animate({\n                    from: from,\n                    to: to,\n                    vertical: vertical,\n                    future: future\n                });\n\n                that._focus(value);\n                that.trigger(NAVIGATE);\n            }\n\n            if (view === views[options.depth] && selectedValue) {\n                that._class(\"k-state-selected\", currentView.toDateString(selectedValue));\n            }\n\n            that._class(FOCUSED, currentView.toDateString(value));\n\n            if (!from && that._cell) {\n                that._cell.removeClass(FOCUSED);\n            }\n\n            that._changeView = true;\n        },\n\n        value: function(value) {\n            var that = this,\n            view = that._view,\n            options = that.options,\n            old = that._view,\n            min = options.min,\n            max = options.max;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            value = parse(value, options.format, options.culture);\n\n            if (value !== null) {\n                value = new DATE(+value);\n\n                if (!isInRange(value, min, max)) {\n                    value = null;\n                }\n            }\n\n            that._value = value;\n\n            if (old && value === null && that._cell) {\n                that._cell.removeClass(\"k-state-selected\");\n            } else {\n                that._changeView = !value || view && view.compare(value, that._current) !== 0;\n                that.navigate(value);\n            }\n        },\n\n        _move: function(e) {\n            var that = this,\n                options = that.options,\n                key = e.keyCode,\n                view = that._view,\n                index = that._index,\n                currentValue = new DATE(+that._current),\n                isRtl = kendo.support.isRtl(that.wrapper),\n                value, prevent, method, temp;\n\n            if (e.target === that._table[0]) {\n                that._active = true;\n            }\n\n            if (e.ctrlKey) {\n                if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n                    that.navigateToFuture();\n                    prevent = true;\n                } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n                    that.navigateToPast();\n                    prevent = true;\n                } else if (key == keys.UP) {\n                    that.navigateUp();\n                    prevent = true;\n                } else if (key == keys.DOWN) {\n                    that._click($(that._cell[0].firstChild));\n                    prevent = true;\n                }\n            } else {\n                if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n                    value = 1;\n                    prevent = true;\n                } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n                    value = -1;\n                    prevent = true;\n                } else if (key == keys.UP) {\n                    value = index === 0 ? -7 : -4;\n                    prevent = true;\n                } else if (key == keys.DOWN) {\n                    value = index === 0 ? 7 : 4;\n                    prevent = true;\n                } else if (key == keys.ENTER) {\n                    that._click($(that._cell[0].firstChild));\n                    prevent = true;\n                } else if (key == keys.HOME || key == keys.END) {\n                    method = key == keys.HOME ? \"first\" : \"last\";\n                    temp = view[method](currentValue);\n                    currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n                    prevent = true;\n                } else if (key == keys.PAGEUP) {\n                    prevent = true;\n                    that.navigateToPast();\n                } else if (key == keys.PAGEDOWN) {\n                    prevent = true;\n                    that.navigateToFuture();\n                }\n\n                if (value || method) {\n                    if (!method) {\n                        view.setDate(currentValue, value);\n                    }\n\n                    that._focus(restrictValue(currentValue, options.min, options.max));\n                }\n            }\n\n            if (prevent) {\n                e.preventDefault();\n            }\n\n            return that._current;\n        },\n\n        _animate: function(options) {\n            var that = this,\n                from = options.from,\n                to = options.to,\n                active = that._active;\n\n            if (!from) {\n                to.insertAfter(that.element[0].firstChild);\n                that._bindTable(to);\n            } else if (from.parent().data(\"animating\")) {\n                from.off(ns);\n                from.parent().kendoStop(true, true).remove();\n                from.remove();\n\n                to.insertAfter(that.element[0].firstChild);\n                that._focusView(active);\n            } else if (!from.is(\":visible\") || that.options.animation === false) {\n                to.insertAfter(from);\n                from.off(ns).remove();\n\n                that._focusView(active);\n            } else {\n                that[options.vertical ? \"_vertical\" : \"_horizontal\"](from, to, options.future);\n            }\n        },\n\n        _horizontal: function(from, to, future) {\n            var that = this,\n                active = that._active,\n                horizontal = that.options.animation.horizontal,\n                effects = horizontal.effects,\n                viewWidth = from.outerWidth();\n\n            if (effects && effects.indexOf(SLIDE) != -1) {\n                from.add(to).css({ width: viewWidth });\n\n                from.wrap(\"<div/>\");\n\n                that._focusView(active, from);\n\n                from.parent()\n                    .css({\n                        position: \"relative\",\n                        width: viewWidth * 2,\n                        \"float\": LEFT,\n                        \"margin-left\": future ? 0 : -viewWidth\n                    });\n\n                to[future ? \"insertAfter\" : \"insertBefore\"](from);\n\n                extend(horizontal, {\n                    effects: SLIDE + \":\" + (future ? \"right\" : LEFT),\n                    complete: function() {\n                        from.off(ns).remove();\n                        that._oldTable = null;\n\n                        to.unwrap();\n\n                        that._focusView(active);\n\n                    }\n                });\n\n                from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n            }\n        },\n\n        _vertical: function(from, to) {\n            var that = this,\n                vertical = that.options.animation.vertical,\n                effects = vertical.effects,\n                active = that._active, //active state before from's blur\n                cell, position;\n\n            if (effects && effects.indexOf(\"zoom\") != -1) {\n                to.css({\n                    position: \"absolute\",\n                    top: from.prev().outerHeight(),\n                    left: 0\n                }).insertBefore(from);\n\n                if (transitionOrigin) {\n                    cell = that._cellByDate(that._view.toDateString(that._current));\n                    position = cell.position();\n                    position = (position.left + parseInt(cell.width() / 2, 10)) + \"px\" + \" \" + (position.top + parseInt(cell.height() / 2, 10) + \"px\");\n                    to.css(transitionOrigin, position);\n                }\n\n                from.kendoStop(true, true).kendoAnimate({\n                    effects: \"fadeOut\",\n                    duration: 600,\n                    complete: function() {\n                        from.off(ns).remove();\n                        that._oldTable = null;\n\n                        to.css({\n                            position: \"static\",\n                            top: 0,\n                            left: 0\n                        });\n\n                        that._focusView(active);\n                    }\n                });\n\n                to.kendoStop(true, true).kendoAnimate(vertical);\n            }\n        },\n\n        _cellByDate: function(value) {\n            return this._table.find(\"td:not(.\" + OTHERMONTH + \")\")\n                       .filter(function() {\n                           return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n                       });\n        },\n\n        _class: function(className, value) {\n            var that = this,\n                id = that._cellID,\n                cell = that._cell;\n\n            if (cell) {\n                cell.removeAttr(ARIA_SELECTED)\n                    .removeAttr(\"aria-label\")\n                    .removeAttr(ID);\n            }\n\n            cell = that._table\n                       .find(\"td:not(.\" + OTHERMONTH + \")\")\n                       .removeClass(className)\n                       .filter(function() {\n                          return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n                       })\n                       .attr(ARIA_SELECTED, true);\n\n            if (className === FOCUSED && !that._active && that.options.focusOnNav !== false) {\n                className = \"\";\n            }\n\n            cell.addClass(className);\n\n            if (cell[0]) {\n                that._cell = cell;\n            }\n\n            if (id) {\n                cell.attr(ID, id);\n                that._table.removeAttr(\"aria-activedescendant\").attr(\"aria-activedescendant\", id);\n            }\n        },\n\n        _bindTable: function (table) {\n            table\n                .on(FOCUS_WITH_NS, this._addClassProxy)\n                .on(BLUR, this._removeClassProxy);\n        },\n\n        _click: function(link) {\n            var that = this,\n                options = that.options,\n                currentValue = new Date(+that._current),\n                value = link.attr(kendo.attr(VALUE)).split(\"/\");\n\n            //Safari cannot create correctly date from \"1/1/2090\"\n            value = new DATE(value[0], value[1], value[2]);\n            adjustDST(value, 0);\n\n            that._view.setDate(currentValue, value);\n\n            that.navigateDown(restrictValue(currentValue, options.min, options.max));\n        },\n\n        _focus: function(value) {\n            var that = this,\n                view = that._view;\n\n            if (view.compare(value, that._current) !== 0) {\n                that.navigate(value);\n            } else {\n                that._current = value;\n                that._class(FOCUSED, view.toDateString(value));\n            }\n        },\n\n        _focusView: function(active, table) {\n            if (active) {\n                this.focus(table);\n            }\n        },\n\n        _footer: function(template) {\n            var that = this,\n                today = getToday(),\n                element = that.element,\n                footer = element.find(\".k-footer\");\n\n            if (!template) {\n                that._toggle(false);\n                footer.hide();\n                return;\n            }\n\n            if (!footer[0]) {\n                footer = $('<div class=\"k-footer\"><a href=\"#\" class=\"k-link k-nav-today\"></a></div>').appendTo(element);\n            }\n\n            that._today = footer.show()\n                                .find(\".k-link\")\n                                .html(template(today))\n                                .attr(\"title\", kendo.toString(today, \"D\", that.options.culture));\n\n            that._toggle();\n        },\n\n        _header: function() {\n            var that = this,\n            element = that.element,\n            links;\n\n            if (!element.find(\".k-header\")[0]) {\n                element.html('<div class=\"k-header\">' +\n                             '<a href=\"#\" role=\"button\" class=\"k-link k-nav-prev\"><span class=\"k-icon k-i-arrow-w\"></span></a>' +\n                             '<a href=\"#\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-link k-nav-fast\"></a>' +\n                             '<a href=\"#\" role=\"button\" class=\"k-link k-nav-next\"><span class=\"k-icon k-i-arrow-e\"></span></a>' +\n                             '</div>');\n            }\n\n            links = element.find(\".k-link\")\n                           .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE + \" \" + FOCUS_WITH_NS + \" \" + BLUR, mousetoggle)\n                           .click(false);\n\n            that._title = links.eq(1).on(CLICK, function() { that._active = that.options.focusOnNav !== false; that.navigateUp(); });\n            that[PREVARROW] = links.eq(0).on(CLICK, function() { that._active = that.options.focusOnNav !== false; that.navigateToPast(); });\n            that[NEXTARROW] = links.eq(2).on(CLICK, function() { that._active = that.options.focusOnNav !== false; that.navigateToFuture(); });\n        },\n\n        _navigate: function(arrow, modifier) {\n            var that = this,\n                index = that._index + 1,\n                currentValue = new DATE(+that._current);\n\n            arrow = that[arrow];\n\n            if (!arrow.hasClass(DISABLED)) {\n                if (index > 3) {\n                    currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n                } else {\n                    calendar.views[index].setDate(currentValue, modifier);\n                }\n\n                that.navigate(currentValue);\n            }\n        },\n\n        _option: function(option, value) {\n            var that = this,\n                options = that.options,\n                currentValue = that._value || that._current,\n                isBigger;\n\n            if (value === undefined) {\n                return options[option];\n            }\n\n            value = parse(value, options.format, options.culture);\n\n            if (!value) {\n                return;\n            }\n\n            options[option] = new DATE(+value);\n\n            if (option === MIN) {\n                isBigger = value > currentValue;\n            } else {\n                isBigger = currentValue > value;\n            }\n\n            if (isBigger || isEqualMonth(currentValue, value)) {\n                if (isBigger) {\n                    that._value = null;\n                }\n                that._changeView = true;\n            }\n\n            if (!that._changeView) {\n                that._changeView = !!(options.month.content || options.month.empty);\n            }\n\n            that.navigate(that._value);\n\n            that._toggle();\n        },\n\n        _toggle: function(toggle) {\n            var that = this,\n                options = that.options,\n                link = that._today;\n\n            if (toggle === undefined) {\n                toggle = isInRange(getToday(), options.min, options.max);\n            }\n\n            if (link) {\n                link.off(CLICK);\n\n                if (toggle) {\n                    link.addClass(TODAY)\n                        .removeClass(DISABLED)\n                        .on(CLICK, proxy(that._todayClick, that));\n                } else {\n                    link.removeClass(TODAY)\n                        .addClass(DISABLED)\n                        .on(CLICK, prevent);\n                }\n            }\n        },\n\n        _todayClick: function(e) {\n            var that = this,\n                depth = views[that.options.depth],\n                today = getToday();\n\n            e.preventDefault();\n\n            if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n                that._changeView = false;\n            }\n\n            that._value = today;\n            that.navigate(today, depth);\n\n            that.trigger(CHANGE);\n        },\n\n        _templates: function() {\n            var that = this,\n                options = that.options,\n                footer = options.footer,\n                month = options.month,\n                content = month.content,\n                empty = month.empty;\n\n            that.month = {\n                content: template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link#=data.linkClass#\" href=\"#=data.url#\" ' + kendo.attr(\"value\") + '=\"#=data.dateString#\" title=\"#=data.title#\">' + (content || \"#=data.value#\") + '</a></td>', { useWithBlock: !!content }),\n                empty: template('<td role=\"gridcell\">' + (empty || \"&nbsp;\") + \"</td>\", { useWithBlock: !!empty })\n            };\n\n            that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture +'\") #', { useWithBlock: false }) : null;\n        }\n    });\n\n    ui.plugin(Calendar);\n\n    var calendar = {\n        firstDayOfMonth: function (date) {\n            return new DATE(\n                date.getFullYear(),\n                date.getMonth(),\n                1\n            );\n        },\n\n        firstVisibleDay: function (date, calendarInfo) {\n            calendarInfo = calendarInfo || kendo.culture().calendar;\n\n            var firstDay = calendarInfo.firstDay,\n            firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n            while (firstVisibleDay.getDay() != firstDay) {\n                calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n            }\n\n            return firstVisibleDay;\n        },\n\n        setTime: function (date, time) {\n            var tzOffsetBefore = date.getTimezoneOffset(),\n            resultDATE = new DATE(date.getTime() + time),\n            tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n\n            date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n        },\n        views: [{\n            name: MONTH,\n            title: function(date, min, max, culture) {\n                return getCalendarInfo(culture).months.names[date.getMonth()] + \" \" + date.getFullYear();\n            },\n            content: function(options) {\n                var that = this,\n                idx = 0,\n                min = options.min,\n                max = options.max,\n                date = options.date,\n                dates = options.dates,\n                format = options.format,\n                culture = options.culture,\n                navigateUrl = options.url,\n                hasUrl = navigateUrl && dates[0],\n                currentCalendar = getCalendarInfo(culture),\n                firstDayIdx = currentCalendar.firstDay,\n                days = currentCalendar.days,\n                names = shiftArray(days.names, firstDayIdx),\n                shortNames = shiftArray(days.namesShort, firstDayIdx),\n                start = calendar.firstVisibleDay(date, currentCalendar),\n                firstDayOfMonth = that.first(date),\n                lastDayOfMonth = that.last(date),\n                toDateString = that.toDateString,\n                today = new DATE(),\n                html = '<table tabindex=\"0\" role=\"grid\" class=\"k-content\" cellspacing=\"0\"><thead><tr role=\"row\">';\n\n                for (; idx < 7; idx++) {\n                    html += '<th scope=\"col\" title=\"' + names[idx] + '\">' + shortNames[idx] + '</th>';\n                }\n\n                today = new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n                adjustDST(today, 0);\n                today = +today;\n\n                return view({\n                    cells: 42,\n                    perRow: 7,\n                    html: html += '</tr></thead><tbody><tr role=\"row\">',\n                    start: new DATE(start.getFullYear(), start.getMonth(), start.getDate()),\n                    min: new DATE(min.getFullYear(), min.getMonth(), min.getDate()),\n                    max: new DATE(max.getFullYear(), max.getMonth(), max.getDate()),\n                    content: options.content,\n                    empty: options.empty,\n                    setter: that.setDate,\n                    build: function(date) {\n                        var cssClass = [],\n                            day = date.getDay(),\n                            linkClass = \"\",\n                            url = \"#\";\n\n                        if (date < firstDayOfMonth || date > lastDayOfMonth) {\n                            cssClass.push(OTHERMONTH);\n                        }\n\n                        if (+date === today) {\n                            cssClass.push(\"k-today\");\n                        }\n\n                        if (day === 0 || day === 6) {\n                            cssClass.push(\"k-weekend\");\n                        }\n\n                        if (hasUrl && inArray(+date, dates)) {\n                            url = navigateUrl.replace(\"{0}\", kendo.toString(date, format, culture));\n                            linkClass = \" k-action-link\";\n                        }\n\n                        return {\n                            date: date,\n                            dates: dates,\n                            ns: kendo.ns,\n                            title: kendo.toString(date, \"D\", culture),\n                            value: date.getDate(),\n                            dateString: toDateString(date),\n                            cssClass: cssClass[0] ? ' class=\"' + cssClass.join(\" \") + '\"' : \"\",\n                            linkClass: linkClass,\n                            url: url\n                        };\n                    }\n                });\n            },\n            first: function(date) {\n                return calendar.firstDayOfMonth(date);\n            },\n            last: function(date) {\n                var last = new DATE(date.getFullYear(), date.getMonth() + 1, 0),\n                    first = calendar.firstDayOfMonth(date),\n                    timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n                if (timeOffset) {\n                    last.setHours(first.getHours() + (timeOffset / 60));\n                }\n\n                return last;\n            },\n            compare: function(date1, date2) {\n                var result,\n                month1 = date1.getMonth(),\n                year1 = date1.getFullYear(),\n                month2 = date2.getMonth(),\n                year2 = date2.getFullYear();\n\n                if (year1 > year2) {\n                    result = 1;\n                } else if (year1 < year2) {\n                    result = -1;\n                } else {\n                    result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n                }\n\n                return result;\n            },\n            setDate: function(date, value) {\n                var hours = date.getHours();\n                if (value instanceof DATE) {\n                    date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n                } else {\n                    calendar.setTime(date, value * MS_PER_DAY);\n                }\n                adjustDST(date, hours);\n            },\n            toDateString: function(date) {\n                return date.getFullYear() + \"/\" + date.getMonth() + \"/\" + date.getDate();\n            }\n        },\n        {\n            name: \"year\",\n            title: function(date) {\n                return date.getFullYear();\n            },\n            content: function(options) {\n                var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr,\n                toDateString = this.toDateString,\n                min = options.min,\n                max = options.max;\n\n                return view({\n                    min: new DATE(min.getFullYear(), min.getMonth(), 1),\n                    max: new DATE(max.getFullYear(), max.getMonth(), 1),\n                    start: new DATE(options.date.getFullYear(), 0, 1),\n                    setter: this.setDate,\n                    build: function(date) {\n                        return {\n                            value: namesAbbr[date.getMonth()],\n                            ns: kendo.ns,\n                            dateString: toDateString(date),\n                            cssClass: \"\"\n                        };\n                    }\n                });\n            },\n            first: function(date) {\n                return new DATE(date.getFullYear(), 0, date.getDate());\n            },\n            last: function(date) {\n                return new DATE(date.getFullYear(), 11, date.getDate());\n            },\n            compare: function(date1, date2){\n                return compare(date1, date2);\n            },\n            setDate: function(date, value) {\n                var month,\n                    hours = date.getHours();\n\n                if (value instanceof DATE) {\n                    month = value.getMonth();\n\n                    date.setFullYear(value.getFullYear(), month, date.getDate());\n\n                    if (month !== date.getMonth()) {\n                        date.setDate(0);\n                    }\n                } else {\n                    month = date.getMonth() + value;\n\n                    date.setMonth(month);\n\n                    if (month > 11) {\n                        month -= 12;\n                    }\n\n                    if (month > 0 && date.getMonth() != month) {\n                        date.setDate(0);\n                    }\n                }\n\n                adjustDST(date, hours);\n            },\n            toDateString: function(date) {\n                return date.getFullYear() + \"/\" + date.getMonth() + \"/1\";\n            }\n        },\n        {\n            name: \"decade\",\n            title: function(date, min, max) {\n                return title(date, min, max, 10);\n            },\n            content: function(options) {\n                var year = options.date.getFullYear(),\n                toDateString = this.toDateString;\n\n                return view({\n                    start: new DATE(year - year % 10 - 1, 0, 1),\n                    min: new DATE(options.min.getFullYear(), 0, 1),\n                    max: new DATE(options.max.getFullYear(), 0, 1),\n                    setter: this.setDate,\n                    build: function(date, idx) {\n                        return {\n                            value: date.getFullYear(),\n                            ns: kendo.ns,\n                            dateString: toDateString(date),\n                            cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\n                        };\n                    }\n                });\n            },\n            first: function(date) {\n                var year = date.getFullYear();\n                return new DATE(year - year % 10, date.getMonth(), date.getDate());\n            },\n            last: function(date) {\n                var year = date.getFullYear();\n                return new DATE(year - year % 10 + 9, date.getMonth(), date.getDate());\n            },\n            compare: function(date1, date2) {\n                return compare(date1, date2, 10);\n            },\n            setDate: function(date, value) {\n                setDate(date, value, 1);\n            },\n            toDateString: function(date) {\n                return date.getFullYear() + \"/0/1\";\n            }\n        },\n        {\n            name: CENTURY,\n            title: function(date, min, max) {\n                return title(date, min, max, 100);\n            },\n            content: function(options) {\n                var year = options.date.getFullYear(),\n                min = options.min.getFullYear(),\n                max = options.max.getFullYear(),\n                toDateString = this.toDateString,\n                minYear = min,\n                maxYear = max;\n\n                minYear = minYear - minYear % 10;\n                maxYear = maxYear - maxYear % 10;\n\n                if (maxYear - minYear < 10) {\n                    maxYear = minYear + 9;\n                }\n\n                return view({\n                    start: new DATE(year - year % 100 - 10, 0, 1),\n                    min: new DATE(minYear, 0, 1),\n                    max: new DATE(maxYear, 0, 1),\n                    setter: this.setDate,\n                    build: function(date, idx) {\n                        var start = date.getFullYear(),\n                            end = start + 9;\n\n                        if (start < min) {\n                            start = min;\n                        }\n\n                        if (end > max) {\n                            end = max;\n                        }\n\n                        return {\n                            ns: kendo.ns,\n                            value: start + \" - \" + end,\n                            dateString: toDateString(date),\n                            cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\n                        };\n                    }\n                });\n            },\n            first: function(date) {\n                var year = date.getFullYear();\n                return new DATE(year - year % 100, date.getMonth(), date.getDate());\n            },\n            last: function(date) {\n                var year = date.getFullYear();\n                return new DATE(year - year % 100 + 99, date.getMonth(), date.getDate());\n            },\n            compare: function(date1, date2) {\n                return compare(date1, date2, 100);\n            },\n            setDate: function(date, value) {\n                setDate(date, value, 10);\n            },\n            toDateString: function(date) {\n                var year = date.getFullYear();\n                return (year - year % 10) + \"/0/1\";\n            }\n        }]\n    };\n\n    function title(date, min, max, modular) {\n        var start = date.getFullYear(),\n            minYear = min.getFullYear(),\n            maxYear = max.getFullYear(),\n            end;\n\n        start = start - start % modular;\n        end = start + (modular - 1);\n\n        if (start < minYear) {\n            start = minYear;\n        }\n        if (end > maxYear) {\n            end = maxYear;\n        }\n\n        return start + \"-\" + end;\n    }\n\n    function view(options) {\n        var idx = 0,\n            data,\n            min = options.min,\n            max = options.max,\n            start = options.start,\n            setter = options.setter,\n            build = options.build,\n            length = options.cells || 12,\n            cellsPerRow = options.perRow || 4,\n            content = options.content || cellTemplate,\n            empty = options.empty || emptyCellTemplate,\n            html = options.html || '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><tbody><tr role=\"row\">';\n\n        for(; idx < length; idx++) {\n            if (idx > 0 && idx % cellsPerRow === 0) {\n                html += '</tr><tr role=\"row\">';\n            }\n\n            data = build(start, idx);\n\n            html += isInRange(start, min, max) ? content(data) : empty(data);\n\n            setter(start, 1);\n        }\n\n        return html + \"</tr></tbody></table>\";\n    }\n\n    function compare(date1, date2, modifier) {\n        var year1 = date1.getFullYear(),\n            start  = date2.getFullYear(),\n            end = start,\n            result = 0;\n\n        if (modifier) {\n            start = start - start % modifier;\n            end = start - start % modifier + modifier - 1;\n        }\n\n        if (year1 > end) {\n            result = 1;\n        } else if (year1 < start) {\n            result = -1;\n        }\n\n        return result;\n    }\n\n    function getToday() {\n        var today = new DATE();\n        return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n    }\n\n    function restrictValue (value, min, max) {\n        var today = getToday();\n\n        if (value) {\n            today = new DATE(+value);\n        }\n\n        if (min > today) {\n            today = new DATE(+min);\n        } else if (max < today) {\n            today = new DATE(+max);\n        }\n        return today;\n    }\n\n    function isInRange(date, min, max) {\n        return +date >= +min && +date <= +max;\n    }\n\n    function shiftArray(array, idx) {\n        return array.slice(idx).concat(array.slice(0, idx));\n    }\n\n    function setDate(date, value, multiplier) {\n        value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n        date.setFullYear(value);\n    }\n\n    function mousetoggle(e) {\n        $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n    }\n\n    function prevent (e) {\n        e.preventDefault();\n    }\n\n    function getCalendarInfo(culture) {\n        return getCulture(culture).calendars.standard;\n    }\n\n    function normalize(options) {\n        var start = views[options.start],\n            depth = views[options.depth],\n            culture = getCulture(options.culture);\n\n        options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n\n        if (isNaN(start)) {\n            start = 0;\n            options.start = MONTH;\n        }\n\n        if (depth === undefined || depth > start) {\n            options.depth = MONTH;\n        }\n\n        if (!options.dates) {\n            options.dates = [];\n        }\n    }\n\n    function makeUnselectable(element) {\n        if (isIE8) {\n            element.find(\"*\").attr(\"unselectable\", \"on\");\n        }\n    }\n\n    function inArray(date, dates) {\n        for(var i = 0, length = dates.length; i < length; i++) {\n            if (date === +dates[i]) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function isEqualDatePart(value1, value2) {\n        if (value1) {\n            return value1.getFullYear() === value2.getFullYear() &&\n                   value1.getMonth() === value2.getMonth() &&\n                   value1.getDate() === value2.getDate();\n        }\n\n        return false;\n    }\n\n    function isEqualMonth(value1, value2) {\n        if (value1) {\n            return value1.getFullYear() === value2.getFullYear() &&\n                   value1.getMonth() === value2.getMonth();\n        }\n\n        return false;\n    }\n\n    calendar.isEqualDatePart = isEqualDatePart;\n    calendar.makeUnselectable =  makeUnselectable;\n    calendar.restrictValue = restrictValue;\n    calendar.isInRange = isInRange;\n    calendar.normalize = normalize;\n    calendar.viewsEnum = views;\n\n    kendo.calendar = calendar;\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n    ui = kendo.ui,\n    Widget = ui.Widget,\n    parse = kendo.parseDate,\n    keys = kendo.keys,\n    template = kendo.template,\n    activeElement = kendo._activeElement,\n    DIV = \"<div />\",\n    SPAN = \"<span />\",\n    ns = \".kendoDatePicker\",\n    CLICK = \"click\" + ns,\n    OPEN = \"open\",\n    CLOSE = \"close\",\n    CHANGE = \"change\",\n    DATEVIEW = \"dateView\",\n    DISABLED = \"disabled\",\n    READONLY = \"readonly\",\n    DEFAULT = \"k-state-default\",\n    FOCUSED = \"k-state-focused\",\n    SELECTED = \"k-state-selected\",\n    STATEDISABLED = \"k-state-disabled\",\n    HOVER = \"k-state-hover\",\n    KEYDOWN = \"keydown\" + ns,\n    HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n    MOUSEDOWN = \"mousedown\" + ns,\n    ID = \"id\",\n    MIN = \"min\",\n    MAX = \"max\",\n    MONTH = \"month\",\n    ARIA_DISABLED = \"aria-disabled\",\n    ARIA_EXPANDED = \"aria-expanded\",\n    ARIA_HIDDEN = \"aria-hidden\",\n    ARIA_READONLY = \"aria-readonly\",\n    calendar = kendo.calendar,\n    isInRange = calendar.isInRange,\n    restrictValue = calendar.restrictValue,\n    isEqualDatePart = calendar.isEqualDatePart,\n    extend = $.extend,\n    proxy = $.proxy,\n    DATE = Date;\n\n    function normalize(options) {\n        var parseFormats = options.parseFormats,\n            format = options.format;\n\n        calendar.normalize(options);\n\n        parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n        if ($.inArray(format, parseFormats) === -1) {\n            parseFormats.splice(0, 0, options.format);\n        }\n\n        options.parseFormats = parseFormats;\n    }\n\n    function preventDefault(e) {\n        e.preventDefault();\n    }\n\n    var DateView = function(options) {\n        var that = this, id,\n            body = document.body,\n            div = $(DIV).attr(ARIA_HIDDEN, \"true\")\n                        .addClass(\"k-calendar-container\")\n                        .appendTo(body);\n\n        that.options = options = options || {};\n        id = options.id;\n\n        if (id) {\n            id += \"_dateview\";\n\n            div.attr(ID, id);\n            that._dateViewID = id;\n        }\n\n        that.popup = new ui.Popup(div, extend(options.popup, options, { name: \"Popup\", isRtl: kendo.support.isRtl(options.anchor) }));\n        that.div = div;\n\n        that.value(options.value);\n    };\n\n    DateView.prototype = {\n        _calendar: function() {\n            var that = this;\n            var calendar = that.calendar;\n            var options = that.options;\n            var div;\n\n            if (!calendar) {\n                div = $(DIV).attr(ID, kendo.guid())\n                            .appendTo(that.popup.element)\n                            .on(MOUSEDOWN, preventDefault)\n                            .on(CLICK, \"td:has(.k-link)\", proxy(that._click, that));\n\n                that.calendar = calendar = new ui.Calendar(div);\n                that._setOptions(options);\n\n                kendo.calendar.makeUnselectable(calendar.element);\n\n                calendar.navigate(that._value || that._current, options.start);\n\n                that.value(that._value);\n            }\n        },\n\n        _setOptions: function(options) {\n            this.calendar.setOptions({\n                focusOnNav: false,\n                change: options.change,\n                culture: options.culture,\n                dates: options.dates,\n                depth: options.depth,\n                footer: options.footer,\n                format: options.format,\n                max: options.max,\n                min: options.min,\n                month: options.month,\n                start: options.start\n            });\n        },\n\n        setOptions: function(options) {\n            var old = this.options;\n\n            this.options = extend(old, options, {\n                change: old.change,\n                close: old.close,\n                open: old.open\n            });\n\n            if (this.calendar) {\n                this._setOptions(this.options);\n            }\n        },\n\n        destroy: function() {\n            this.popup.destroy();\n        },\n\n        open: function() {\n            var that = this;\n\n            that._calendar();\n            that.popup.open();\n        },\n\n        close: function() {\n            this.popup.close();\n        },\n\n        min: function(value) {\n            this._option(MIN, value);\n        },\n\n        max: function(value) {\n            this._option(MAX, value);\n        },\n\n        toggle: function() {\n            var that = this;\n\n            that[that.popup.visible() ? CLOSE : OPEN]();\n        },\n\n        move: function(e) {\n            var that = this,\n                key = e.keyCode,\n                calendar = that.calendar,\n                selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER;\n\n            if (key == keys.ESC) {\n                that.close();\n                return;\n            }\n\n            if (e.altKey) {\n                if (key == keys.DOWN) {\n                    that.open();\n                    e.preventDefault();\n                } else if (key == keys.UP) {\n                    that.close();\n                    e.preventDefault();\n                }\n                return;\n            }\n\n            if (!that.popup.visible()){\n                return;\n            }\n\n            if (selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n                that.close();\n                e.preventDefault();\n                return;\n            }\n\n            that._current = calendar._move(e);\n        },\n\n        current: function(date) {\n            this._current = date;\n            this.calendar._focus(date);\n        },\n\n        value: function(value) {\n            var that = this,\n                calendar = that.calendar,\n                options = that.options;\n\n            that._value = value;\n            that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n            if (calendar) {\n                calendar.value(value);\n            }\n        },\n\n        _click: function(e) {\n            if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n                this.close();\n            }\n        },\n\n        _option: function(option, value) {\n            var that = this;\n            var calendar = that.calendar;\n\n            that.options[option] = value;\n\n            if (calendar) {\n                calendar[option](value);\n            }\n        }\n    };\n\n    DateView.normalize = normalize;\n\n    kendo.DateView = DateView;\n\n    var DatePicker = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                disabled,\n                div;\n\n            Widget.fn.init.call(that, element, options);\n            element = that.element;\n            options = that.options;\n\n            options.min = parse(element.attr(\"min\")) || parse(options.min);\n            options.max = parse(element.attr(\"max\")) || parse(options.max);\n\n            normalize(options);\n\n            that._wrapper();\n\n            that.dateView = new DateView(extend({}, options, {\n                id: element.attr(ID),\n                anchor: that.wrapper,\n                change: function() {\n                    // calendar is the current scope\n                    that._change(this.value());\n                    that.close();\n                },\n                close: function(e) {\n                    if (that.trigger(CLOSE)) {\n                        e.preventDefault();\n                    } else {\n                        element.attr(ARIA_EXPANDED, false);\n                        div.attr(ARIA_HIDDEN, true);\n                    }\n                },\n                open: function(e) {\n                    var options = that.options,\n                        date;\n\n                    if (that.trigger(OPEN)) {\n                        e.preventDefault();\n                    } else {\n                        if (that.element.val() !== that._oldText) {\n                            date = parse(element.val(), options.parseFormats, options.culture);\n\n                            that.dateView[date ? \"current\" : \"value\"](date);\n                        }\n\n                        element.attr(ARIA_EXPANDED, true);\n                        div.attr(ARIA_HIDDEN, false);\n\n                        that._updateARIA(date);\n\n                    }\n                }\n            }));\n            div = that.dateView.div;\n\n            that._icon();\n\n            try {\n                element[0].setAttribute(\"type\", \"text\");\n            } catch(e) {\n                element[0].type = \"text\";\n            }\n\n            element\n                .addClass(\"k-input\")\n                .attr({\n                    role: \"combobox\",\n                    \"aria-expanded\": false,\n                    \"aria-owns\": that.dateView._dateViewID\n                });\n\n            that._reset();\n            that._template();\n\n            disabled = element.is(\"[disabled]\");\n            if (disabled) {\n                that.enable(false);\n            } else {\n                that.readonly(element.is(\"[readonly]\"));\n            }\n\n            that._old = that._update(options.value || that.element.val());\n            that._oldText = element.val();\n\n            kendo.notify(that);\n        },\n        events: [\n        OPEN,\n        CLOSE,\n        CHANGE],\n        options: {\n            name: \"DatePicker\",\n            value: null,\n            footer: \"\",\n            format: \"\",\n            culture: \"\",\n            parseFormats: [],\n            min: new Date(1900, 0, 1),\n            max: new Date(2099, 11, 31),\n            start: MONTH,\n            depth: MONTH,\n            animation: {},\n            month : {},\n            dates: [],\n            ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#'\n        },\n\n        setOptions: function(options) {\n            var that = this;\n            var value = that._value;\n\n            Widget.fn.setOptions.call(that, options);\n\n            options = that.options;\n\n            options.min = parse(options.min);\n            options.max = parse(options.max);\n\n            normalize(options);\n\n            that.dateView.setOptions(options);\n\n            if (value) {\n                that.element.val(kendo.toString(value, options.format, options.culture));\n                that._updateARIA(value);\n            }\n        },\n\n        _editable: function(options) {\n            var that = this,\n                icon = that._dateIcon.off(ns),\n                element = that.element.off(ns),\n                wrapper = that._inputWrapper.off(ns),\n                readonly = options.readonly,\n                disable = options.disable;\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                element.removeAttr(DISABLED)\n                       .removeAttr(READONLY)\n                       .attr(ARIA_DISABLED, false)\n                       .attr(ARIA_READONLY, false)\n                       .on(\"keydown\" + ns, proxy(that._keydown, that))\n                       .on(\"focusout\" + ns, proxy(that._blur, that))\n                       .on(\"focus\" + ns, function() {\n                           that._inputWrapper.addClass(FOCUSED);\n                       });\n\n               icon.on(CLICK, proxy(that._click, that))\n                   .on(MOUSEDOWN, preventDefault);\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                element.attr(DISABLED, disable)\n                       .attr(READONLY, readonly)\n                       .attr(ARIA_DISABLED, disable)\n                       .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.dateView.destroy();\n\n            that.element.off(ns);\n            that._dateIcon.off(ns);\n            that._inputWrapper.off(ns);\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n        },\n\n        open: function() {\n            this.dateView.open();\n        },\n\n        close: function() {\n            this.dateView.close();\n        },\n\n        min: function(value) {\n            return this._option(MIN, value);\n        },\n\n        max: function(value) {\n            return this._option(MAX, value);\n        },\n\n        value: function(value) {\n            var that = this;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            that._old = that._update(value);\n\n            if (that._old === null) {\n                that.element.val(\"\");\n            }\n\n            that._oldText = that.element.val();\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _blur: function() {\n            var that = this,\n                value = that.element.val();\n\n            that.close();\n            if (value !== that._oldText) {\n                that._change(value);\n            }\n\n            that._inputWrapper.removeClass(FOCUSED);\n        },\n\n        _click: function() {\n            var that = this,\n                element = that.element;\n\n            that.dateView.toggle();\n\n            if (!kendo.support.touch && element[0] !== activeElement()) {\n                element.focus();\n            }\n        },\n\n        _change: function(value) {\n            var that = this;\n\n            value = that._update(value);\n\n            if (+that._old != +value) {\n                that._old = value;\n                that._oldText = that.element.val();\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n\n                that.trigger(CHANGE);\n            }\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                dateView = that.dateView,\n                value = that.element.val();\n\n            if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n                that._change(value);\n            } else {\n                dateView.move(e);\n                that._updateARIA(dateView._current);\n            }\n        },\n\n        _icon: function() {\n            var that = this,\n                element = that.element,\n                icon;\n\n            icon = element.next(\"span.k-select\");\n\n            if (!icon[0]) {\n                icon = $('<span unselectable=\"on\" class=\"k-select\"><span unselectable=\"on\" class=\"k-icon k-i-calendar\">select</span></span>').insertAfter(element);\n            }\n\n            that._dateIcon = icon.attr({\n                \"role\": \"button\",\n                \"aria-controls\": that.dateView._dateViewID\n            });\n        },\n\n        _option: function(option, value) {\n            var that = this,\n                options = that.options;\n\n            if (value === undefined) {\n                return options[option];\n            }\n\n            value = parse(value, options.parseFormats, options.culture);\n\n            if (!value) {\n                return;\n            }\n\n            options[option] = new DATE(+value);\n            that.dateView[option](value);\n        },\n\n        _update: function(value) {\n            var that = this,\n                options = that.options,\n                min = options.min,\n                max = options.max,\n                current = that._value,\n                date = parse(value, options.parseFormats, options.culture),\n                isSameType = (date === null && current === null) || (date instanceof Date && current instanceof Date),\n                formattedValue;\n\n            if (+date === +current && isSameType) {\n                formattedValue = kendo.toString(date, options.format, options.culture);\n\n                if (formattedValue !== value) {\n                    that.element.val(date === null ? value : formattedValue);\n                }\n\n                return date;\n            }\n\n            if (date !== null && isEqualDatePart(date, min)) {\n                date = restrictValue(date, min, max);\n            } else if (!isInRange(date, min, max)) {\n                date = null;\n            }\n\n            that._value = date;\n            that.dateView.value(date);\n            that.element.val(date ? kendo.toString(date, options.format, options.culture) : value);\n            that._updateARIA(date);\n\n            return date;\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                wrapper;\n\n            wrapper = element.parents(\".k-datepicker\");\n\n            if (!wrapper[0]) {\n                wrapper = element.wrap(SPAN).parent().addClass(\"k-picker-wrap k-state-default\");\n                wrapper = wrapper.wrap(SPAN).parent();\n            }\n\n            wrapper[0].style.cssText = element[0].style.cssText;\n            element.css({\n                width: \"100%\",\n                height: element[0].style.height\n            });\n\n            that.wrapper = wrapper.addClass(\"k-widget k-datepicker k-header\")\n                                  .addClass(element[0].className);\n\n            that._inputWrapper = $(wrapper[0].firstChild);\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    that.value(element[0].defaultValue);\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        },\n\n        _template: function() {\n            this._ariaTemplate = template(this.options.ARIATemplate);\n        },\n\n        _updateARIA: function(date) {\n            var cell;\n            var that = this;\n            var calendar = that.dateView.calendar;\n\n            that.element.removeAttr(\"aria-activedescendant\");\n\n            if (calendar) {\n                cell = calendar._cell;\n                cell.attr(\"aria-label\", that._ariaTemplate({ current: date || calendar.current() }));\n\n                that.element.attr(\"aria-activedescendant\", cell.attr(\"id\"));\n            }\n        }\n    });\n\n    ui.plugin(DatePicker);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        support = kendo.support,\n        caret = kendo.caret,\n        activeElement = kendo._activeElement,\n        placeholderSupported = support.placeholder,\n        ui = kendo.ui,\n        List = ui.List,\n        keys = kendo.keys,\n        DataSource = kendo.data.DataSource,\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        DEFAULT = \"k-state-default\",\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        FOCUSED = \"k-state-focused\",\n        SELECTED = \"k-state-selected\",\n        STATEDISABLED = \"k-state-disabled\",\n        HOVER = \"k-state-hover\",\n        ns = \".kendoAutoComplete\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        proxy = $.proxy;\n\n    function indexOfWordAtCaret(caretIdx, text, separator) {\n        return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n    }\n\n    function wordAtCaret(caretIdx, text, separator) {\n        return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n    }\n\n    function replaceWordAtCaret(caretIdx, text, word, separator) {\n        var words = text.split(separator);\n\n        words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n\n        if (separator && words[words.length - 1] !== \"\") {\n            words.push(\"\");\n        }\n\n        return words.join(separator);\n    }\n\n    var AutoComplete = List.extend({\n        init: function (element, options) {\n            var that = this, wrapper;\n\n            that.ns = ns;\n            options = $.isArray(options) ? { dataSource: options} : options;\n\n            List.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            options.placeholder = options.placeholder || element.attr(\"placeholder\");\n            if (placeholderSupported) {\n                element.attr(\"placeholder\", options.placeholder);\n            }\n\n            that._wrapper();\n            that._loader();\n\n            that._dataSource();\n            that._ignoreCase();\n\n            element[0].type = \"text\";\n            wrapper = that.wrapper;\n\n            that._popup();\n\n            element\n                .addClass(\"k-input\")\n                .on(\"keydown\" + ns, proxy(that._keydown, that))\n                .on(\"paste\" + ns, proxy(that._search, that))\n                .on(\"focus\" + ns, function () {\n                    that._prev = that._accessor();\n                    that._placeholder(false);\n                    wrapper.addClass(FOCUSED);\n                })\n                .on(\"focusout\" + ns, function () {\n                    that._change();\n                    that._placeholder();\n                    wrapper.removeClass(FOCUSED);\n                })\n                .attr({\n                    autocomplete: \"off\",\n                    role: \"textbox\",\n                    \"aria-haspopup\": true\n                });\n\n            that._enable();\n\n            that._old = that._accessor();\n\n            if (element[0].id) {\n                element.attr(\"aria-owns\", that.ul[0].id);\n            }\n\n            that._aria();\n\n            that._placeholder();\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"AutoComplete\",\n            enabled: true,\n            suggest: false,\n            template: \"\",\n            dataTextField: \"\",\n            minLength: 1,\n            delay: 200,\n            height: 200,\n            filter: \"startswith\",\n            ignoreCase: true,\n            highlightFirst: false,\n            separator: null,\n            placeholder: \"\",\n            animation: {},\n            value: null\n        },\n\n        _dataSource: function() {\n            var that = this;\n\n            if (that.dataSource && that._refreshHandler) {\n                that._unbindDataSource();\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._showBusy, that);\n            }\n\n            that.dataSource = DataSource.create(that.options.dataSource)\n                .bind(\"change\", that._refreshHandler)\n                .bind(\"progress\", that._progressHandler);\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n        },\n\n        events: [\n            \"open\",\n            \"close\",\n            \"change\",\n            \"select\",\n            \"filtering\",\n            \"dataBinding\",\n            \"dataBound\"\n        ],\n\n        setOptions: function(options) {\n            List.fn.setOptions.call(this, options);\n\n            this._template();\n            this._accessors();\n            this._aria();\n        },\n\n        _editable: function(options) {\n            var that = this,\n                element = that.element,\n                wrapper = that.wrapper.off(ns),\n                readonly = options.readonly,\n                disable = options.disable;\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                element.removeAttr(DISABLED)\n                       .removeAttr(READONLY)\n                       .attr(ARIA_DISABLED, false)\n                       .attr(ARIA_READONLY, false);\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                element.attr(DISABLED, disable)\n                       .attr(READONLY, readonly)\n                       .attr(ARIA_DISABLED, disable)\n                       .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        close: function () {\n            var that = this,\n                current = that._current;\n\n            if (current) {\n                current.removeClass(SELECTED);\n            }\n\n            that.current(null);\n            that.popup.close();\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.element.off(ns);\n            that.wrapper.off(ns);\n\n            List.fn.destroy.call(that);\n        },\n\n        refresh: function () {\n            var that = this,\n            ul = that.ul[0],\n            popup = that.popup,\n            options = that.options,\n            data = that._data(),\n            length = data.length,\n            isActive = that.element[0] === activeElement(),\n            action;\n\n            that._angularItems(\"cleanup\");\n            that.trigger(\"dataBinding\");\n\n            ul.innerHTML = kendo.render(that.template, data);\n\n            that._height(length);\n\n            if (popup.visible()) {\n                popup._position();\n            }\n\n            if (length) {\n                if (options.highlightFirst) {\n                    that.current($(ul.firstChild));\n                }\n\n                if (options.suggest && isActive) {\n                    that.suggest($(ul.firstChild));\n                }\n            }\n\n            if (that._open) {\n                that._open = false;\n                action = length ? \"open\" : \"close\";\n\n                if (that._typing && !isActive) {\n                    action = \"close\";\n                }\n\n                popup[action]();\n                that._typing = undefined;\n            }\n\n            if (that._touchScroller) {\n                that._touchScroller.reset();\n            }\n\n            that._makeUnselectable();\n\n            that._hideBusy();\n            that._angularItems(\"compile\");\n            that.trigger(\"dataBound\");\n        },\n\n        select: function (li) {\n            this._select(li);\n        },\n\n        search: function (word) {\n            var that = this,\n            options = that.options,\n            ignoreCase = options.ignoreCase,\n            separator = options.separator,\n            length;\n\n            word = word || that._accessor();\n\n            that._current = null;\n\n            clearTimeout(that._typing);\n\n            if (separator) {\n                word = wordAtCaret(caret(that.element)[0], word, separator);\n            }\n\n            length = word.length;\n\n            if (!length || length >= options.minLength) {\n                that._open = true;\n\n                that._filterSource({\n                    value: ignoreCase ? word.toLowerCase() : word,\n                    operator: options.filter,\n                    field: options.dataTextField,\n                    ignoreCase: ignoreCase\n                });\n            }\n        },\n\n        suggest: function (word) {\n            var that = this,\n                key = that._last,\n                value = that._accessor(),\n                element = that.element[0],\n                caretIdx = caret(element)[0],\n                separator = that.options.separator,\n                words = value.split(separator),\n                wordIndex = indexOfWordAtCaret(caretIdx, value, separator),\n                selectionEnd = caretIdx,\n                idx;\n\n            if (key == keys.BACKSPACE || key == keys.DELETE) {\n                that._last = undefined;\n                return;\n            }\n\n            word = word || \"\";\n\n            if (typeof word !== \"string\") {\n                idx = List.inArray(word[0], that.ul[0]);\n\n                if (idx > -1) {\n                    word = that._text(that._data()[idx]);\n                } else {\n                    word = \"\";\n                }\n            }\n\n            if (caretIdx <= 0) {\n                caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n            }\n\n            idx = value.substring(0, caretIdx).lastIndexOf(separator);\n            idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n            value = words[wordIndex].substring(0, idx);\n\n            if (word) {\n                idx = word.toLowerCase().indexOf(value.toLowerCase());\n                if (idx > -1) {\n                    word = word.substring(idx + value.length);\n\n                    selectionEnd = caretIdx + word.length;\n\n                    value += word;\n                }\n\n                if (separator && words[words.length - 1] !== \"\") {\n                    words.push(\"\");\n                }\n\n            }\n\n            words[wordIndex] = value;\n\n            that._accessor(words.join(separator || \"\"));\n\n            if (element === activeElement()) {\n                caret(element, caretIdx, selectionEnd);\n            }\n        },\n\n        value: function (value) {\n            if (value !== undefined) {\n                this._accessor(value);\n                this._old = this._accessor();\n            } else {\n                return this._accessor();\n            }\n        },\n\n        _accessor: function (value) {\n            var that = this,\n                element = that.element[0];\n\n            if (value !== undefined) {\n                element.value = value === null ? \"\" : value;\n                that._placeholder();\n            } else {\n                value = element.value;\n\n                if (element.className.indexOf(\"k-readonly\") > -1) {\n                    if (value === that.options.placeholder) {\n                        return \"\";\n                    } else {\n                        return value;\n                    }\n                }\n\n                return value;\n            }\n        },\n\n        _accept: function (li) {\n            var element = this.element;\n\n            this._focus(li);\n            caret(element, element.val().length);\n        },\n\n        _keydown: function (e) {\n            var that = this,\n                ul = that.ul[0],\n                key = e.keyCode,\n                current = that._current,\n                visible = that.popup.visible();\n\n            that._last = key;\n\n            if (key === keys.DOWN) {\n                if (visible) {\n                    that._move(current ? current.next() : $(ul.firstChild));\n                }\n                e.preventDefault();\n            } else if (key === keys.UP) {\n                if (visible) {\n                    that._move(current ? current.prev() : $(ul.lastChild));\n                }\n                e.preventDefault();\n            } else if (key === keys.ENTER || key === keys.TAB) {\n\n                if (key === keys.ENTER && that.popup.visible()) {\n                    e.preventDefault();\n                }\n\n                that._accept(current);\n            } else if (key === keys.ESC) {\n                if (that.popup.visible()) {\n                    e.preventDefault();\n                }\n                that.close();\n            } else {\n                that._search();\n            }\n        },\n\n        _move: function (li) {\n            var that = this;\n\n            li = li[0] ? li : null;\n\n            that.current(li);\n\n            if (that.options.suggest) {\n                that.suggest(li);\n            }\n        },\n\n        _hideBusy: function () {\n            var that = this;\n            clearTimeout(that._busy);\n            that._loading.hide();\n            that.element.attr(\"aria-busy\", false);\n            that._busy = null;\n        },\n\n        _showBusy: function () {\n            var that = this;\n\n            if (that._busy) {\n                return;\n            }\n\n            that._busy = setTimeout(function () {\n                that.element.attr(\"aria-busy\", true);\n                that._loading.show();\n            }, 100);\n        },\n\n        _placeholder: function(show) {\n            if (placeholderSupported) {\n                return;\n            }\n\n            var that = this,\n                element = that.element,\n                placeholder = that.options.placeholder,\n                value;\n\n            if (placeholder) {\n                value = element.val();\n\n                if (show === undefined) {\n                    show = !value;\n                }\n\n                if (!show) {\n                    if (value !== placeholder) {\n                        placeholder = value;\n                    } else {\n                        placeholder = \"\";\n                    }\n                }\n\n                if (value === that._old && !show) {\n                    return;\n                }\n\n                element.toggleClass(\"k-readonly\", show)\n                       .val(placeholder);\n\n                if (!placeholder && element[0] === document.activeElement) {\n                    caret(element[0], 0, 0);\n                }\n            }\n        },\n\n        _search: function () {\n            var that = this;\n            clearTimeout(that._typing);\n\n            that._typing = setTimeout(function () {\n                if (that._prev !== that._accessor()) {\n                    that._prev = that._accessor();\n                    that.search();\n                }\n            }, that.options.delay);\n        },\n\n        _select: function (li) {\n            var that = this,\n                separator = that.options.separator,\n                data = that._data(),\n                text,\n                idx;\n\n            li = $(li);\n\n            if (li[0] && !li.hasClass(SELECTED)) {\n                idx = List.inArray(li[0], that.ul[0]);\n\n                if (idx > -1) {\n                    data = data[idx];\n                    text = that._text(data);\n\n                    if (separator) {\n                        text = replaceWordAtCaret(caret(that.element)[0], that._accessor(), text, separator);\n                    }\n\n                    that._accessor(text);\n                    that._prev = that._accessor();\n                    that.current(li.addClass(SELECTED));\n                }\n            }\n        },\n\n        _loader: function() {\n            this._loading = $('<span class=\"k-icon k-loading\" style=\"display:none\"></span>').insertAfter(this.element);\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _wrapper: function () {\n            var that = this,\n                element = that.element,\n                DOMelement = element[0],\n                wrapper;\n\n            wrapper = element.parent();\n\n            if (!wrapper.is(\"span.k-widget\")) {\n                wrapper = element.wrap(\"<span />\").parent();\n            }\n\n            //aria\n\n            wrapper.attr(\"tabindex\", -1);\n            wrapper.attr(\"role\", \"presentation\");\n\n            //end\n\n            wrapper[0].style.cssText = DOMelement.style.cssText;\n            element.css({\n                width: \"100%\",\n                height: DOMelement.style.height\n            });\n\n            that._focused = that.element;\n            that.wrapper = wrapper\n                              .addClass(\"k-widget k-autocomplete k-header\")\n                              .addClass(DOMelement.className);\n        }\n    });\n\n    ui.plugin(AutoComplete);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Select = ui.Select,\n        os = kendo.support.mobileOS,\n        activeElement = kendo._activeElement,\n        keys = kendo.keys,\n        ns = \".kendoDropDownList\",\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        CHANGE = \"change\",\n        FOCUSED = \"k-state-focused\",\n        DEFAULT = \"k-state-default\",\n        STATEDISABLED = \"k-state-disabled\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        SELECTED = \"k-state-selected\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        TABINDEX = \"tabindex\",\n        STATE_FILTER = \"filter\",\n        STATE_ACCEPT = \"accept\",\n        proxy = $.proxy;\n\n    var DropDownList = Select.extend( {\n        init: function(element, options) {\n            var that = this,\n                index = options && options.index,\n                optionLabel, useOptionLabel, text;\n\n            that.ns = ns;\n            options = $.isArray(options) ? { dataSource: options } : options;\n\n            Select.fn.init.call(that, element, options);\n\n            options = that.options;\n            element = that.element.on(\"focus\" + ns, proxy(that._focusHandler, that));\n\n            that._inputTemplate();\n\n            that._reset();\n\n            that._prev = \"\";\n            that._word = \"\";\n\n            that._wrapper();\n\n            that._tabindex();\n            that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n\n            that._span();\n\n            that._popup();\n\n            that._mobile();\n\n            that._dataSource();\n            that._ignoreCase();\n\n            that._filterHeader();\n\n            that._aria();\n\n            that._enable();\n\n            that._oldIndex = that.selectedIndex = -1;\n\n            that._cascade();\n\n            if (index !== undefined) {\n                options.index = index;\n            }\n\n            if (options.autoBind) {\n                that.dataSource.fetch();\n            } else if (that.selectedIndex === -1) {\n                text = options.text || \"\";\n                if (!text) {\n                    optionLabel = options.optionLabel;\n                    useOptionLabel = optionLabel && options.index === 0;\n\n                    if (that._isSelect) {\n                        if (useOptionLabel) {\n                            text = optionLabel;\n                        } else {\n                            text = element.children(\":selected\").text();\n                        }\n                    } else if (!element[0].value && useOptionLabel) {\n                        text = optionLabel;\n                    }\n                }\n\n                that._textAccessor(text);\n            }\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"DropDownList\",\n            enabled: true,\n            autoBind: true,\n            index: 0,\n            text: null,\n            value: null,\n            template: \"\",\n            valueTemplate: \"\",\n            delay: 500,\n            height: 200,\n            dataTextField: \"\",\n            dataValueField: \"\",\n            optionLabel: \"\",\n            cascadeFrom: \"\",\n            cascadeFromField: \"\",\n            ignoreCase: true,\n            animation: {},\n            filter: \"none\",\n            minLength: 1\n        },\n        events: [\n            \"open\",\n            \"close\",\n            CHANGE,\n            \"select\",\n            \"filtering\",\n            \"dataBinding\",\n            \"dataBound\",\n            \"cascade\"\n        ],\n\n        setOptions: function(options) {\n            Select.fn.setOptions.call(this, options);\n\n            this._template();\n            this._inputTemplate();\n            this._accessors();\n            this._filterHeader();\n            this._enable();\n            this._aria();\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.wrapper.off(ns);\n            that.element.off(ns);\n            that._inputWrapper.off(ns);\n\n            that._arrow.off();\n            that._arrow = null;\n\n            Select.fn.destroy.call(that);\n        },\n\n        open: function() {\n            var that = this;\n\n            if (that.popup.visible()) {\n                return;\n            }\n\n            if (!that.ul[0].firstChild || that._state === STATE_ACCEPT) {\n                that._open = true;\n                that._state = \"rebind\";\n\n                if (that.filterInput) {\n                    that.filterInput.val(\"\");\n                }\n\n                that._filterSource();\n            } else {\n                that.popup.open();\n                that._focusElement(that.filterInput);\n                that._scroll(that._current);\n            }\n        },\n\n        toggle: function(toggle) {\n            this._toggle(toggle, true);\n        },\n\n        refresh: function() {\n            var that = this,\n                data = that._data(),\n                length = data.length,\n                optionLabel = that.options.optionLabel,\n                filtered = that._state === STATE_FILTER,\n                element = that.element[0],\n                selectedIndex,\n                value;\n\n\n            that.trigger(\"dataBinding\");\n            if (that._current) {\n                that.current(null);\n            }\n\n            that._angularItems(\"cleanup\");\n            that.ul[0].innerHTML = kendo.render(that.template, data);\n            that._angularItems(\"compile\");\n\n            that._height(filtered ? (length || 1) : length);\n\n            if (that.popup.visible()) {\n                that.popup._position();\n            }\n\n            if (that._isSelect) {\n                selectedIndex = element.selectedIndex;\n                value = that.value();\n\n                if (length) {\n                    if (optionLabel) {\n                        optionLabel = that._option(\"\", that._optionLabelText(optionLabel));\n                    }\n                } else if (value) {\n                    selectedIndex = 0;\n                    optionLabel = that._option(value, that.text());\n                }\n\n                that._options(data, optionLabel);\n                element.selectedIndex = selectedIndex === -1 ? 0 : selectedIndex;\n            }\n\n            that._hideBusy();\n            that._makeUnselectable();\n\n            if (!filtered) {\n                if (that._open) {\n                    that.toggle(!!length);\n                }\n\n                that._open = false;\n\n                if (!that._fetch) {\n                    if (length) {\n                        that._selectItem();\n                    } else if (that._textAccessor() !== optionLabel) {\n                        that.element.val(\"\");\n                        that._textAccessor(\"\");\n                    }\n                }\n            } else {\n                that.current($(that.ul[0].firstChild));\n            }\n\n            that._bound = !!length;\n            that.trigger(\"dataBound\");\n        },\n\n        text: function (text) {\n            var that = this;\n            var dataItem, loweredText;\n            var ignoreCase = that.options.ignoreCase;\n\n            text = text === null ? \"\" : text;\n\n            if (text !== undefined) {\n                if (typeof text === \"string\") {\n                    loweredText = ignoreCase ? text.toLowerCase() : text;\n\n                    dataItem = that._select(function(data) {\n                        data = that._text(data);\n\n                        if (ignoreCase) {\n                            data = (data + \"\").toLowerCase();\n                        }\n\n                        return data === loweredText;\n                    });\n\n                    if (dataItem) {\n                        text = dataItem;\n                    }\n                }\n\n                that._textAccessor(text);\n            } else {\n                return that._textAccessor();\n            }\n        },\n\n        value: function(value) {\n            var that = this,\n                idx, hasValue;\n\n            if (value !== undefined) {\n                if (value !== null) {\n                    value = value.toString();\n                }\n\n                that._selectedValue = value;\n\n                hasValue = value || (that.options.optionLabel && !that.element[0].disabled && value === \"\");\n                if (hasValue && that._fetchItems(value)) {\n                    return;\n                }\n\n                idx = that._index(value);\n                that.select(idx > -1 ? idx : 0);\n            } else {\n                return that._accessor();\n            }\n        },\n\n        _focusHandler: function() {\n            this.wrapper.focus();\n        },\n\n        _focusinHandler: function() {\n            this._inputWrapper.addClass(FOCUSED);\n            this._prevent = false;\n        },\n\n        _focusoutHandler: function() {\n            var that = this;\n            var filtered = that._state === STATE_FILTER;\n            var isIFrame = window.self !== window.top;\n\n            if (!that._prevent) {\n                if (filtered) {\n                    that._select(that._current);\n                }\n\n                if (!filtered || that.dataItem()) {\n                    that._triggerCascade();\n                }\n\n                if (kendo.support.mobileOS.ios && isIFrame) {\n                    that._change();\n                } else {\n                    that._blur();\n                }\n\n                that._inputWrapper.removeClass(FOCUSED);\n                that._prevent = true;\n                that._open = false;\n                that.element.blur();\n            }\n        },\n\n        _wrapperMousedown: function() {\n            this._prevent = !!this.filterInput;\n        },\n\n        _wrapperClick: function(e) {\n            e.preventDefault();\n            this._focused = this.wrapper;\n            this._toggle();\n        },\n\n        _editable: function(options) {\n            var that = this,\n                element = that.element,\n                disable = options.disable,\n                readonly = options.readonly,\n                wrapper = that.wrapper.add(that.filterInput).off(ns),\n                dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n\n            if (!readonly && !disable) {\n                element.removeAttr(DISABLED).removeAttr(READONLY);\n\n                dropDownWrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                wrapper\n                    .attr(TABINDEX, wrapper.data(TABINDEX))\n                    .attr(ARIA_DISABLED, false)\n                    .attr(ARIA_READONLY, false)\n                    .on(\"keydown\" + ns, proxy(that._keydown, that))\n                    .on(\"focusin\" + ns, proxy(that._focusinHandler, that))\n                    .on(\"focusout\" + ns, proxy(that._focusoutHandler, that))\n                    .on(\"mousedown\" + ns, proxy(that._wrapperMousedown, that));\n\n                that.wrapper.on(\"click\" + ns, proxy(that._wrapperClick, that));\n\n                if (!that.filterInput) {\n                    wrapper.on(\"keypress\" + ns, proxy(that._keypress, that));\n                }\n\n            } else if (disable) {\n                wrapper.removeAttr(TABINDEX);\n                dropDownWrapper\n                    .addClass(STATEDISABLED)\n                    .removeClass(DEFAULT);\n            } else {\n                dropDownWrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED);\n\n                wrapper\n                    .on(\"focusin\" + ns, proxy(that._focusinHandler, that))\n                    .on(\"focusout\" + ns, proxy(that._focusoutHandler, that));\n            }\n\n            element.attr(DISABLED, disable)\n                   .attr(READONLY, readonly);\n\n            wrapper.attr(ARIA_DISABLED, disable)\n                   .attr(ARIA_READONLY, readonly);\n        },\n\n        _accept: function(li, key) {\n            var that = this;\n            var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n\n            that._focus(li);\n            that._focusElement(that.wrapper);\n\n            if (activeFilter && key === keys.TAB) {\n                that.wrapper.focusout();\n            }\n        },\n\n        _option: function(value, text) {\n            return '<option value=\"' + value + '\">' + text + \"</option>\";\n        },\n\n        _optionLabelText: function() {\n            var options = this.options,\n                dataTextField = options.dataTextField,\n                optionLabel = options.optionLabel;\n\n            if (optionLabel && dataTextField && typeof optionLabel === \"object\") {\n                return this._text(optionLabel);\n            }\n\n            return optionLabel;\n        },\n\n        _data: function() {\n            var that = this,\n                options = that.options,\n                optionLabel = options.optionLabel,\n                textField = options.dataTextField,\n                valueField = options.dataValueField,\n                data = that.dataSource.view(),\n                length = data.length,\n                first = optionLabel,\n                idx = 0;\n\n            if (optionLabel && length) {\n                if (typeof optionLabel === \"object\") {\n                    first = optionLabel;\n                } else if (textField) {\n                    first = {};\n\n                    textField = textField.split(\".\");\n                    valueField = valueField.split(\".\");\n\n                    assign(first, valueField, \"\");\n                    assign(first, textField, optionLabel);\n                }\n\n                first = new kendo.data.ObservableArray([first]);\n\n                for (; idx < length; idx++) {\n                    first.push(data[idx]);\n                }\n                data = first;\n            }\n\n            return data;\n        },\n\n        _selectItem: function() {\n            Select.fn._selectItem.call(this);\n\n            if (!this.current()) {\n                this.select(0);\n            }\n        },\n\n        _keydown: function(e) {\n            var that = this;\n            var key = e.keyCode;\n            var altKey = e.altKey;\n            var ul = that.ul[0];\n            var handled;\n\n            if (key === keys.LEFT) {\n                key = keys.UP;\n            } else if (key === keys.RIGHT) {\n                key = keys.DOWN;\n            }\n\n            e.keyCode = key;\n\n            handled = that._move(e);\n\n            if (!that.popup.visible() || !that.filterInput) {\n                if (key === keys.HOME) {\n                    handled = true;\n                    e.preventDefault();\n                    that._select(ul.firstChild);\n                } else if (key === keys.END) {\n                    handled = true;\n                    e.preventDefault();\n                    that._select(ul.lastChild);\n                }\n            }\n\n            if (altKey && key === keys.UP) {\n                that._focusElement(that.wrapper);\n            }\n\n            if (!altKey && !handled && that.filterInput) {\n                that._search();\n            }\n        },\n\n        _selectNext: function(word, index) {\n            var that = this, text,\n                startIndex = index,\n                data = that._data(),\n                length = data.length,\n                ignoreCase = that.options.ignoreCase,\n                action = function(text, index) {\n                    text = text + \"\";\n                    if (ignoreCase) {\n                        text = text.toLowerCase();\n                    }\n\n                    if (text.indexOf(word) === 0) {\n                        that._select(index);\n                        that._triggerEvents();\n                        return true;\n                    }\n                };\n\n            for (; index < length; index++) {\n                text = that._text(data[index]);\n                if (text && action(text, index)) {\n                    return true;\n                }\n            }\n\n            if (startIndex > 0 && startIndex < length) {\n                index = 0;\n                for (; index <= startIndex; index++) {\n                    text = that._text(data[index]);\n                    if (text && action(text, index)) {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        },\n\n        _keypress: function(e) {\n            var that = this;\n\n            if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n                return;\n            }\n\n            var character = String.fromCharCode(e.charCode || e.keyCode);\n            var index = that.selectedIndex;\n            var word = that._word;\n\n            if (that.options.ignoreCase) {\n                character = character.toLowerCase();\n            }\n\n            if (character === \" \") {\n                e.preventDefault();\n            }\n\n            if (that._last === character && word.length <= 1 && index > -1) {\n                if (!word) {\n                    word = character;\n                }\n\n                if (that._selectNext(word, index + 1)) {\n                    return;\n                }\n            }\n\n            that._word = word + character;\n            that._last = character;\n\n            that._search();\n        },\n\n        _popupOpen: function() {\n            var popup = this.popup;\n\n            popup.wrapper = kendo.wrap(popup.element);\n\n            if (popup.element.closest(\".km-root\")[0]) {\n                popup.wrapper.addClass(\"km-popup km-widget\");\n                this.wrapper.addClass(\"km-widget\");\n            }\n        },\n\n        _popup: function() {\n            Select.fn._popup.call(this);\n            this.popup.one(\"open\", proxy(this._popupOpen, this));\n        },\n\n        _focusElement: function(element) {\n            var active = activeElement();\n            var wrapper = this.wrapper;\n            var filterInput = this.filterInput;\n            var compareElement = element === filterInput ? wrapper : filterInput;\n\n            if (filterInput && compareElement[0] === active) {\n                this._prevent = true;\n                this._focused = element.focus();\n            }\n        },\n\n        _filter: function(word) {\n            if (word) {\n                var that = this;\n                var ignoreCase = that.options.ignoreCase;\n\n                if (ignoreCase) {\n                    word = word.toLowerCase();\n                }\n\n                that._select(function(dataItem) {\n                    var text = that._text(dataItem);\n\n                    if (text !== undefined) {\n                        text = (text + \"\");\n                        if (ignoreCase) {\n                            text = text.toLowerCase();\n                        }\n\n                        return text.indexOf(word) === 0;\n                    }\n                });\n            }\n        },\n\n        _search: function() {\n            var that = this,\n                dataSource = that.dataSource,\n                index = that.selectedIndex,\n                word = that._word;\n\n            clearTimeout(that._typing);\n\n            if (that.options.filter !== \"none\") {\n                that._typing = setTimeout(function() {\n                    var value = that.filterInput.val();\n\n                    if (that._prev !== value) {\n                        that._prev = value;\n                        that.search(value);\n                    }\n\n                    that._typing = null;\n                }, that.options.delay);\n            } else {\n                that._typing = setTimeout(function() {\n                    that._word = \"\";\n                }, that.options.delay);\n\n                if (index === -1) {\n                    index = 0;\n                }\n\n                if (!that.ul[0].firstChild) {\n                    dataSource.one(CHANGE, function () {\n                        if (dataSource.data()[0] && index > -1) {\n                            that._selectNext(word, index);\n                        }\n                    }).fetch();\n                    return;\n                }\n\n                that._selectNext(word, index);\n                that._triggerEvents();\n            }\n        },\n\n        _select: function(li) {\n            var that = this,\n                current = that._current,\n                data = null,\n                value,\n                idx;\n\n            li = that._get(li);\n\n            if (li && li[0] && !li.hasClass(SELECTED)) {\n                if (that._state === STATE_FILTER) {\n                    that._state = STATE_ACCEPT;\n                }\n\n                if (current) {\n                    current.removeClass(SELECTED);\n                }\n\n                idx = ui.List.inArray(li[0], that.ul[0]);\n                if (idx > -1) {\n                    that.selectedIndex = idx;\n\n                    data = that._data()[idx];\n                    value = that._value(data);\n\n                    if (value === null) {\n                        value = \"\";\n                    }\n\n                    that._textAccessor(data);\n                    that._accessor(value !== undefined ? value : that._text(data), idx);\n                    that._selectedValue = that._accessor();\n\n                    that.current(li.addClass(SELECTED));\n\n                    if (that._optionID) {\n                        that._current.attr(\"aria-selected\", true);\n                    }\n                }\n            }\n\n            return data;\n        },\n\n        _triggerEvents: function() {\n            if (!this.popup.visible()) {\n                this._triggerCascade();\n                this._change();\n            }\n        },\n\n        _mobile: function() {\n            var that = this,\n                popup = that.popup,\n                root = popup.element.parents(\".km-root\").eq(0);\n\n            if (root.length && os) {\n                popup.options.animation.open.effects = (os.android || os.meego) ? \"fadeIn\" : (os.ios || os.wp) ? \"slideIn:up\" : popup.options.animation.open.effects;\n            }\n        },\n\n        _filterHeader: function() {\n            var icon;\n            var options = this.options;\n            var filterEnalbed = options.filter !== \"none\";\n\n            if (this.filterInput) {\n                this.filterInput\n                    .off(ns)\n                    .parent()\n                    .remove();\n\n                this.filterInput = null;\n            }\n\n            if (filterEnalbed) {\n                icon = '<span unselectable=\"on\" class=\"k-icon k-i-search\">select</span>';\n\n                this.filterInput = $('<input class=\"k-textbox\"/>')\n                                      .attr({\n                                          role: \"listbox\",\n                                          \"aria-haspopup\": true,\n                                          \"aria-expanded\": false\n                                      });\n\n                this.list\n                    .prepend($('<span class=\"k-list-filter\" />')\n                    .append(this.filterInput.add(icon)));\n            }\n        },\n\n        _span: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                SELECTOR = \"span.k-input\",\n                span;\n\n            span = wrapper.find(SELECTOR);\n\n            if (!span[0]) {\n                wrapper.append('<span unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><span unselectable=\"on\" class=\"k-input\">&nbsp;</span><span unselectable=\"on\" class=\"k-select\"><span unselectable=\"on\" class=\"k-icon k-i-arrow-s\">select</span></span></span>')\n                       .append(that.element);\n\n                span = wrapper.find(SELECTOR);\n            }\n\n            that.span = span;\n            that._inputWrapper = $(wrapper[0].firstChild);\n            that._arrow = wrapper.find(\".k-icon\");\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                DOMelement = element[0],\n                wrapper;\n\n            wrapper = element.parent();\n\n            if (!wrapper.is(\"span.k-widget\")) {\n                wrapper = element.wrap(\"<span />\").parent();\n                wrapper[0].style.cssText = DOMelement.style.cssText;\n            }\n\n            element.hide();\n\n            that._focused = that.wrapper = wrapper\n                              .addClass(\"k-widget k-dropdown k-header\")\n                              .addClass(DOMelement.className)\n                              .css(\"display\", \"\")\n                              .attr({\n                                  unselectable: \"on\",\n                                  role: \"listbox\",\n                                  \"aria-haspopup\": true,\n                                  \"aria-expanded\": false\n                              });\n        },\n\n        _clearSelection: function() {\n            var that = this;\n            var optionLabel = that.options.optionLabel;\n\n            that.options.value = \"\";\n            that._selectedValue = \"\";\n\n            if (that.dataSource.view()[0] && (optionLabel || that._userTriggered)) {\n                that.select(0);\n                return;\n            }\n\n            that.selectedIndex = -1;\n\n            that.element.val(\"\");\n            that._textAccessor(that.options.optionLabel);\n        },\n\n        _inputTemplate: function() {\n            var that = this,\n                template = that.options.valueTemplate;\n\n\n            if (!template) {\n                template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n            } else {\n                template = kendo.template(template);\n            }\n\n            that.valueTemplate = template;\n        },\n\n        _textAccessor: function(text) {\n            var dataItem = this.dataItem();\n            var options = this.options;\n            var span = this.span;\n\n            if (text !== undefined) {\n                if ($.isPlainObject(text) || text instanceof kendo.data.ObservableObject) {\n                    dataItem = text;\n                } else if (!dataItem || this._text(dataItem) !== text) {\n                    if (options.dataTextField) {\n                        dataItem = {};\n                        assign(dataItem, options.dataTextField.split(\".\"), text);\n                        assign(dataItem, options.dataValueField.split(\".\"), this._accessor());\n                    } else {\n                        dataItem = text;\n                    }\n                }\n\n                var getElements = function(){\n                    return {\n                        elements: span.get(),\n                        data: [ { dataItem: dataItem } ]\n                    };\n                };\n                this.angular(\"cleanup\", getElements);\n                span.html(this.valueTemplate(dataItem));\n                this.angular(\"compile\", getElements);\n            } else {\n                return span.text();\n            }\n        }\n    });\n\n    function assign(instance, fields, value) {\n        var idx = 0,\n            lastIndex = fields.length - 1,\n            field;\n\n        for (; idx < lastIndex; ++idx) {\n            field = fields[idx];\n\n            if (!(field in instance)) {\n                instance[field] = {};\n            }\n\n            instance = instance[field];\n        }\n\n        instance[fields[lastIndex]] = value;\n    }\n\n    ui.plugin(DropDownList);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        List = ui.List,\n        Select = ui.Select,\n        caret = kendo.caret,\n        support = kendo.support,\n        placeholderSupported = support.placeholder,\n        activeElement = kendo._activeElement,\n        keys = kendo.keys,\n        ns = \".kendoComboBox\",\n        CLICK = \"click\" + ns,\n        MOUSEDOWN = \"mousedown\" + ns,\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        CHANGE = \"change\",\n        DEFAULT = \"k-state-default\",\n        FOCUSED = \"k-state-focused\",\n        STATEDISABLED = \"k-state-disabled\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        STATE_SELECTED = \"k-state-selected\",\n        STATE_FILTER = \"filter\",\n        STATE_ACCEPT = \"accept\",\n        STATE_REBIND = \"rebind\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        NULL = null,\n        proxy = $.proxy;\n\n    var ComboBox = Select.extend({\n        init: function(element, options) {\n            var that = this, text;\n\n            that.ns = ns;\n\n            options = $.isArray(options) ? { dataSource: options } : options;\n\n            Select.fn.init.call(that, element, options);\n\n            options = that.options;\n            element = that.element.on(\"focus\" + ns, proxy(that._focusHandler, that));\n\n            options.placeholder = options.placeholder || element.attr(\"placeholder\");\n\n            that._reset();\n\n            that._wrapper();\n\n            that._input();\n\n            that._tabindex(that.input);\n\n            that._popup();\n\n            that._dataSource();\n            that._ignoreCase();\n\n            that._enable();\n\n            that._oldIndex = that.selectedIndex = -1;\n\n            that._cascade();\n\n            that._aria();\n\n            if (options.autoBind) {\n                that._filterSource(); //TODO: diff when just bind and actually filter\n            } else {\n                text = options.text;\n\n                if (!text && that._isSelect) {\n                    text = element.children(\":selected\").text();\n                }\n\n                if (text) {\n                    that.input.val(text);\n                    that._prev = text;\n                }\n            }\n\n            if (!text) {\n                that._placeholder();\n            }\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"ComboBox\",\n            enabled: true,\n            index: -1,\n            text: null,\n            value: null,\n            autoBind: true,\n            delay: 200,\n            dataTextField: \"\",\n            dataValueField: \"\",\n            minLength: 0,\n            height: 200,\n            highlightFirst: true,\n            template: \"\",\n            filter: \"none\",\n            placeholder: \"\",\n            suggest: false,\n            cascadeFrom: \"\",\n            cascadeFromField: \"\",\n            ignoreCase: true,\n            animation: {}\n        },\n\n        events:[\n            \"open\",\n            \"close\",\n            CHANGE,\n            \"select\",\n            \"filtering\",\n            \"dataBinding\",\n            \"dataBound\",\n            \"cascade\"\n        ],\n\n        setOptions: function(options) {\n            Select.fn.setOptions.call(this, options);\n\n            this._template();\n            this._accessors();\n            this._aria();\n        },\n\n        current: function(li) {\n            var that = this,\n                current = that._current;\n\n            if (li === undefined) {\n                return current;\n            }\n\n            if (current) {\n                current.removeClass(STATE_SELECTED);\n            }\n\n            Select.fn.current.call(that, li);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.input.off(ns);\n            that.element.off(ns);\n            that._inputWrapper.off(ns);\n\n            Select.fn.destroy.call(that);\n        },\n\n        _focusHandler: function() {\n            this.input.focus();\n        },\n\n        _arrowClick: function() {\n            this._toggle();\n        },\n\n        _inputFocus: function() {\n            this._inputWrapper.addClass(FOCUSED);\n            this._placeholder(false);\n        },\n\n        _inputFocusout: function() {\n            var that = this;\n\n            that._inputWrapper.removeClass(FOCUSED);\n            clearTimeout(that._typing);\n            that._typing = null;\n\n            if (that.options.text !== that.input.val()) {\n                that.text(that.text());\n            }\n\n            that._placeholder();\n            that._blur();\n\n            that.element.blur();\n        },\n\n        _editable: function(options) {\n            var that = this,\n                disable = options.disable,\n                readonly = options.readonly,\n                wrapper = that._inputWrapper.off(ns),\n                input = that.element.add(that.input.off(ns)),\n                arrow = that._arrow.parent().off(CLICK + \" \" + MOUSEDOWN);\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                input.removeAttr(DISABLED)\n                     .removeAttr(READONLY)\n                     .attr(ARIA_DISABLED, false)\n                     .attr(ARIA_READONLY, false);\n\n                arrow.on(CLICK, proxy(that._arrowClick, that))\n                     .on(MOUSEDOWN, function(e) { e.preventDefault(); });\n\n                that.input\n                    .on(\"keydown\" + ns, proxy(that._keydown, that))\n                    .on(\"focus\" + ns, proxy(that._inputFocus, that))\n                    .on(\"focusout\" + ns, proxy(that._inputFocusout, that));\n\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                input.attr(DISABLED, disable)\n                     .attr(READONLY, readonly)\n                     .attr(ARIA_DISABLED, disable)\n                     .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        open: function() {\n            var that = this;\n            var state = that._state;\n            var serverFiltering = that.dataSource.options.serverFiltering;\n\n            if (that.popup.visible()) {\n                return;\n            }\n\n            if ((!that.ul[0].firstChild && state !== STATE_FILTER) ||\n                (state === STATE_ACCEPT && !serverFiltering)) {\n                that._open = true;\n                that._state = STATE_REBIND;\n                that._filterSource();\n            } else {\n                that.popup.open();\n                that._scroll(that._current);\n            }\n        },\n\n        refresh: function() {\n            var that = this,\n                ul = that.ul[0],\n                options = that.options,\n                state = that._state,\n                data = that._data(),\n                length = data.length,\n                keepState = true,\n                hasChild, custom;\n\n            that._angularItems(\"cleanup\");\n            that.trigger(\"dataBinding\");\n\n            ul.innerHTML = kendo.render(that.template, data);\n            that._height(length);\n\n            if (that.popup.visible()) {\n                that.popup._position();\n            }\n\n            if (that._isSelect) {\n                hasChild = that.element[0].children[0];\n\n                if (state === STATE_REBIND) {\n                    that._state = \"\";\n                }\n\n                custom = that._option;\n                that._option = undefined;\n                that._options(data);\n\n                if (custom && custom[0].selected) {\n                    that._custom(custom.val(), keepState);\n                } else if (!that._bound && !hasChild) {\n                    that._custom(\"\", keepState);\n                }\n            }\n\n            if (length) {\n                if (options.highlightFirst) {\n                    that.current($(ul.firstChild));\n                }\n\n                if (options.suggest && that.input.val() && that._request !== undefined /*first refresh ever*/) {\n                    that.suggest($(ul.firstChild));\n                }\n            }\n\n            if (state !== STATE_FILTER && !that._fetch) {\n                that._selectItem();\n            }\n\n            if (that._open) {\n                that._open = false;\n\n                if (that._typing && that.input[0] !== activeElement()) {\n                    that.popup.close();\n                } else {\n                    that.toggle(!!length);\n                }\n\n                that._typing = null;\n            }\n\n            if (that._touchScroller) {\n                that._touchScroller.reset();\n            }\n\n            that._makeUnselectable();\n\n            that._hideBusy();\n            that._bound = true;\n            that._angularItems(\"compile\");\n            that.trigger(\"dataBound\");\n        },\n\n        suggest: function(word) {\n            var that = this,\n                element = that.input[0],\n                value = that.text(),\n                caretIdx = caret(element)[0],\n                key = that._last,\n                idx;\n\n            if (key == keys.BACKSPACE || key == keys.DELETE) {\n                that._last = undefined;\n                return;\n            }\n\n            word = word || \"\";\n\n            if (typeof word !== \"string\") {\n                idx = List.inArray(word[0], that.ul[0]);\n\n                if (idx > -1) {\n                    word = that._text(that.dataSource.view()[idx]);\n                } else {\n                    word = \"\";\n                }\n            }\n\n            if (caretIdx <= 0) {\n                caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n            }\n\n            if (word) {\n                idx = word.toLowerCase().indexOf(value.toLowerCase());\n                if (idx > -1) {\n                    value += word.substring(idx + value.length);\n                }\n            } else {\n                value = value.substring(0, caretIdx);\n            }\n\n            if (value.length !== caretIdx || !word) {\n                element.value = value;\n                if (element === activeElement()) {\n                    caret(element, caretIdx, value.length);\n                }\n            }\n        },\n\n        text: function (text) {\n            text = text === null ? \"\" : text;\n\n            var that = this;\n            var input = that.input[0];\n            var ignoreCase = that.options.ignoreCase;\n            var loweredText = text;\n            var dataItem;\n            var value;\n\n            if (text !== undefined) {\n                dataItem = that.dataItem();\n\n                if (dataItem && that._text(dataItem) === text) {\n                    value = that._value(dataItem);\n                    if (value === null) {\n                        value = \"\";\n                    } else {\n                        value += \"\";\n                    }\n\n                    if (value === that._old) {\n                        that._triggerCascade();\n                        return;\n                    }\n                }\n\n                if (ignoreCase) {\n                    loweredText = loweredText.toLowerCase();\n                }\n\n                that._select(function(data) {\n                    data = that._text(data);\n\n                    if (ignoreCase) {\n                        data = (data + \"\").toLowerCase();\n                    }\n\n                    return data === loweredText;\n                });\n\n                if (that.selectedIndex < 0) {\n                    that._custom(text);\n                    input.value = text;\n                }\n\n                that._prev = input.value;\n                that._triggerCascade();\n            } else {\n                return input.value;\n            }\n        },\n\n        toggle: function(toggle) {\n            this._toggle(toggle, true);\n        },\n\n        value: function(value) {\n            var that = this,\n                options = that.options,\n                idx;\n\n            if (value !== undefined) {\n                if (value !== null) {\n                    value = value.toString();\n                }\n\n                that._selectedValue = value;\n\n                if (!that._open && value && that._fetchItems(value)) {\n                    return;\n                }\n\n                idx = that._index(value);\n\n                if (idx > -1) {\n                    that.select(idx);\n                } else {\n                    that.current(NULL);\n                    that._custom(value);\n\n                    if (options.value !== value || options.text !== that.input.val()) {\n                        that.text(value);\n                        that._placeholder();\n                    }\n                }\n\n                that._old = that._accessor();\n                that._oldIndex = that.selectedIndex;\n            } else {\n                return that._accessor();\n            }\n        },\n\n        _accept: function(li) {\n            var that = this;\n\n            if (li) {\n                that._focus(li);\n            } else {\n                that.text(that.text());\n                that._change();\n            }\n        },\n\n        _custom: function(value, keepState) {\n            var that = this;\n            var element = that.element;\n            var custom = that._option;\n\n            if (that._state === STATE_FILTER && !keepState) {\n                that._state = STATE_ACCEPT;\n            }\n\n            if (that._isSelect) {\n                if (!custom) {\n                    custom = that._option = $(\"<option/>\");\n                    element.append(custom);\n                }\n                custom.text(value);\n                custom[0].selected = true;\n            } else {\n                element.val(value);\n            }\n\n            that._selectedValue = value;\n        },\n\n        _filter: function(word) {\n            var that = this,\n                options = that.options,\n                dataSource = that.dataSource,\n                ignoreCase = options.ignoreCase,\n                predicate = function (dataItem) {\n                    var text = that._text(dataItem);\n                    if (text !== undefined) {\n                        text = text + \"\";\n                        if (text !== \"\" && word === \"\") {\n                            return false;\n                        }\n\n                        if (ignoreCase) {\n                            text = text.toLowerCase();\n                        }\n\n                        return text.indexOf(word) === 0;\n                    }\n                };\n\n            if (ignoreCase) {\n                word = word.toLowerCase();\n            }\n\n            if (!that.ul[0].firstChild) {\n                dataSource.one(CHANGE, function () {\n                    if (dataSource.view()[0]) {\n                        that.search(word);\n                    }\n                }).fetch();\n                return;\n            }\n\n            if (that._highlight(predicate) !== -1) {\n                if (options.suggest && that._current) {\n                    that.suggest(that._current);\n                }\n                that.open();\n            }\n\n            that._hideBusy();\n        },\n\n        _highlight: function(li) {\n            var that = this, idx;\n\n            if (li === undefined || li === null) {\n                return -1;\n            }\n\n            li = that._get(li);\n            idx = List.inArray(li[0], that.ul[0]);\n\n            if (idx == -1) {\n                if (that.options.highlightFirst && !that.text()) {\n                    li = that.ul[0].firstChild;\n                    if (li) {\n                        li = $(li);\n                    }\n                } else {\n                    li = NULL;\n                }\n            }\n\n            that.current(li);\n\n            return idx;\n        },\n\n        _input: function() {\n            var that = this,\n                element = that.element.removeClass(\"k-input\")[0],\n                accessKey = element.accessKey,\n                wrapper = that.wrapper,\n                SELECTOR = \"input.k-input\",\n                name = element.name || \"\",\n                input;\n\n            if (name) {\n                name = 'name=\"' + name + '_input\" ';\n            }\n\n            input = wrapper.find(SELECTOR);\n\n            if (!input[0]) {\n                wrapper.append('<span tabindex=\"-1\" unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><input ' + name + 'class=\"k-input\" type=\"text\" autocomplete=\"off\"/><span tabindex=\"-1\" unselectable=\"on\" class=\"k-select\"><span unselectable=\"on\" class=\"k-icon k-i-arrow-s\">select</span></span></span>')\n                       .append(that.element);\n\n                input = wrapper.find(SELECTOR);\n            }\n\n            input[0].style.cssText = element.style.cssText;\n\n            if (element.maxLength > -1) {\n                input[0].maxLength = element.maxLength;\n            }\n\n            input.addClass(element.className)\n                 .val(this.options.text || element.value)\n                 .css({\n                    width: \"100%\",\n                    height: element.style.height\n                 })\n                 .attr({\n                     \"role\": \"combobox\",\n                     \"aria-expanded\": false\n                 })\n                 .show();\n\n            if (placeholderSupported) {\n                input.attr(\"placeholder\", that.options.placeholder);\n            }\n\n            if (accessKey) {\n                element.accessKey = \"\";\n                input[0].accessKey = accessKey;\n            }\n\n            that._focused = that.input = input;\n            that._inputWrapper = $(wrapper[0].firstChild);\n            that._arrow = wrapper.find(\".k-icon\")\n                                 .attr({\n                                     \"role\": \"button\",\n                                     \"tabIndex\": -1\n                                 });\n\n            if (element.id) {\n                that._arrow.attr(\"aria-controls\", that.ul[0].id);\n            }\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode;\n\n            that._last = key;\n\n            clearTimeout(that._typing);\n            that._typing = null;\n\n            if (key != keys.TAB && !that._move(e)) {\n               that._search();\n            }\n        },\n\n        _placeholder: function(show) {\n            if (placeholderSupported) {\n                return;\n            }\n\n            var that = this,\n                input = that.input,\n                placeholder = that.options.placeholder,\n                value;\n\n            if (placeholder) {\n                value = that.value();\n\n                if (show === undefined) {\n                    show = !value;\n                }\n\n                input.toggleClass(\"k-readonly\", show);\n\n                if (!show) {\n                    if (!value) {\n                        placeholder = \"\";\n                    } else {\n                        return;\n                    }\n                }\n\n                input.val(placeholder);\n\n                if (!placeholder && input[0] === activeElement()) {\n                    caret(input[0], 0, 0);\n                }\n            }\n        },\n\n        _search: function() {\n            var that = this;\n\n            that._typing = setTimeout(function() {\n                var value = that.text();\n\n                if (that._prev !== value) {\n                    that._prev = value;\n                    that.search(value);\n                }\n\n                that._typing = null;\n            }, that.options.delay);\n        },\n\n        _select: function(li) {\n            var that = this,\n                text,\n                value,\n                data = that._data(),\n                idx = that._highlight(li);\n\n            that.selectedIndex = idx;\n\n            if (idx !== -1) {\n                if (that._state === STATE_FILTER) {\n                    that._state = STATE_ACCEPT;\n                }\n\n                that._current.addClass(STATE_SELECTED);\n\n                data = data[idx];\n                text = that._text(data);\n                value = that._value(data);\n\n                if (value === null) {\n                    value = \"\";\n                }\n\n                that._prev = that.input[0].value = text;\n                that._accessor(value !== undefined ? value : text, idx);\n                that._selectedValue = that._accessor();\n                that._placeholder();\n\n                if (that._optionID) {\n                    that._current.attr(\"aria-selected\", true);\n                }\n            }\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                wrapper = element.parent();\n\n            if (!wrapper.is(\"span.k-widget\")) {\n                wrapper = element.hide().wrap(\"<span />\").parent();\n                wrapper[0].style.cssText = element[0].style.cssText;\n            }\n\n            that.wrapper = wrapper.addClass(\"k-widget k-combobox k-header\")\n                                  .addClass(element[0].className)\n                                  .css(\"display\", \"\");\n        },\n\n        _clearSelection: function(parent, isFiltered) {\n            var that = this,\n                hasValue = parent._selectedValue || parent.value(),\n                custom = hasValue && parent.selectedIndex === -1;\n\n            if (isFiltered || !hasValue || custom) {\n                that.value(\"\");\n                that.options.value = \"\";\n            }\n        }\n    });\n\n    ui.plugin(ComboBox);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        List = ui.List,\n        keys = kendo.keys,\n        activeElement = kendo._activeElement,\n        ObservableArray = kendo.data.ObservableArray,\n        proxy = $.proxy,\n        ID = \"id\",\n        LI = \"li\",\n        ACCEPT = \"accept\",\n        FILTER = \"filter\",\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        CHANGE = \"change\",\n        PROGRESS = \"progress\",\n        SELECT = \"select\",\n        NEXT = \"nextSibling\",\n        PREV = \"previousSibling\",\n        HIDE = ' style=\"display:none\"',\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        FOCUSEDCLASS = \"k-state-focused\",\n        HIDDENCLASS = \"k-loading-hidden\",\n        HOVERCLASS = \"k-state-hover\",\n        STATEDISABLED = \"k-state-disabled\",\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        ns = \".kendoMultiSelect\",\n        CLICK = \"click\" + ns,\n        KEYDOWN = \"keydown\" + ns,\n        MOUSEENTER = \"mouseenter\" + ns,\n        MOUSELEAVE = \"mouseleave\" + ns,\n        HOVEREVENTS = MOUSEENTER + \" \" + MOUSELEAVE,\n        quotRegExp = /\"/g,\n        isArray = $.isArray,\n        styles = [\"font-family\",\n                  \"font-size\",\n                  \"font-stretch\",\n                  \"font-style\",\n                  \"font-weight\",\n                  \"letter-spacing\",\n                  \"text-transform\",\n                  \"line-height\"];\n\n    var MultiSelect = List.extend({\n        init: function(element, options) {\n            var that = this, id, data;\n\n            that.ns = ns;\n            List.fn.init.call(that, element, options);\n\n            that._wrapper();\n            that._tagList();\n            that._input();\n            that._textContainer();\n            that._loader();\n\n            that._tabindex(that.input);\n\n            element = that.element.attr(\"multiple\", \"multiple\").hide();\n            options = that.options;\n            data = options.value;\n\n            if (!options.placeholder) {\n                options.placeholder = element.data(\"placeholder\");\n            }\n\n            id = element.attr(ID);\n\n            if (id) {\n                that._tagID = id + \"_tag_active\";\n\n                id = id + \"_taglist\";\n                that.tagList.attr(ID, id);\n            }\n\n            that._aria(id);\n            that._dataSource();\n            that._ignoreCase();\n            that._popup();\n\n            that._values = [];\n            that._dataItems = [];\n\n            that._reset();\n            that._enable();\n            that._placeholder();\n\n            if (options.autoBind) {\n                that.dataSource.fetch();\n            } else if (data) {\n                if (!isArray(data)) {\n                    data = [data];\n                }\n\n                if ($.isPlainObject(data[0]) || !options.dataValueField) {\n                    that._retrieveData = true;\n                    that.dataSource.data(data);\n                    that.value(that._initialValues);\n                }\n            }\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"MultiSelect\",\n            enabled: true,\n            autoBind: true,\n            autoClose: true,\n            highlightFirst: true,\n            dataTextField: \"\",\n            dataValueField: \"\",\n            filter: \"startswith\",\n            ignoreCase: true,\n            minLength: 0,\n            delay: 100,\n            value: null,\n            maxSelectedItems: null,\n            itemTemplate: \"\",\n            tagTemplate: \"\",\n            placeholder: \"\",\n            height: 200,\n            animation: {}\n        },\n\n        events: [\n            OPEN,\n            CLOSE,\n            CHANGE,\n            SELECT,\n            \"filtering\",\n            \"dataBinding\",\n            \"dataBound\"\n        ],\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        setOptions: function(options) {\n            List.fn.setOptions.call(this, options);\n\n            this._template();\n            this._accessors();\n            this._aria(this.tagList.attr(ID));\n        },\n\n        current: function(candidate) {\n            this.currentTag(null);\n            return List.fn.current.call(this, candidate);\n        },\n\n        currentTag: function(candidate) {\n            var that = this;\n\n            if (candidate !== undefined) {\n                if (that._currentTag) {\n                    that._currentTag\n                        .removeClass(FOCUSEDCLASS)\n                        .removeAttr(ID);\n\n                    that.input.removeAttr(\"aria-activedescendant\");\n                }\n\n                if (candidate) {\n                    candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n\n                    that.input\n                        .attr(\"aria-activedescendant\", that._tagID);\n                }\n\n                that._currentTag = candidate;\n            } else {\n                return that._currentTag;\n            }\n        },\n\n        dataItems: function() {\n            return this._dataItems;\n        },\n\n        destroy: function() {\n            var that = this,\n                ns = that.ns;\n\n            clearTimeout(that._busy);\n            clearTimeout(that._typing);\n\n            that.wrapper.off(ns);\n            that.tagList.off(ns);\n            that.input.off(ns);\n\n            List.fn.destroy.call(that);\n        },\n\n        _wrapperMousedown: function(e) {\n            var that = this;\n            var notInput = e.target.nodeName.toLowerCase() !== \"input\";\n\n            if (notInput) {\n                e.preventDefault();\n            }\n\n            if (e.target.className.indexOf(\"k-delete\") === -1) {\n                if (that.input[0] !== activeElement() && notInput) {\n                    that.input.focus();\n                }\n\n                if (that.options.minLength === 0) {\n                    that.open();\n                }\n            }\n\n        },\n\n        _inputFocus: function() {\n            this._placeholder(false);\n            this.wrapper.addClass(FOCUSEDCLASS);\n        },\n\n        _inputFocusout: function() {\n            var that = this;\n\n            clearTimeout(that._typing);\n\n            that.wrapper.removeClass(FOCUSEDCLASS);\n\n            that._placeholder(!that._dataItems[0], true);\n            that.close();\n\n            if (that._state === FILTER) {\n                that._state = ACCEPT;\n            }\n\n            that.element.blur();\n        },\n\n        _tagListClick: function(e) {\n            this._unselect($(e.target).closest(LI));\n            this._change();\n            this.close();\n        },\n\n        _editable: function(options) {\n            var that = this,\n                disable = options.disable,\n                readonly = options.readonly,\n                wrapper = that.wrapper.off(ns),\n                tagList = that.tagList.off(ns),\n                input = that.element.add(that.input.off(ns));\n\n            if (!readonly && !disable) {\n                wrapper\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover)\n                    .on(\"mousedown\" + ns + \" touchend\" + ns, proxy(that._wrapperMousedown, that));\n\n                that.input.on(KEYDOWN, proxy(that._keydown, that))\n                    .on(\"paste\" + ns, proxy(that._search, that))\n                    .on(\"focus\" + ns, proxy(that._inputFocus, that))\n                    .on(\"focusout\" + ns, proxy(that._inputFocusout, that));\n\n                input.removeAttr(DISABLED)\n                     .removeAttr(READONLY)\n                     .attr(ARIA_DISABLED, false)\n                     .attr(ARIA_READONLY, false);\n\n                tagList\n                    .on(MOUSEENTER, LI, function() { $(this).addClass(HOVERCLASS); })\n                    .on(MOUSELEAVE, LI, function() { $(this).removeClass(HOVERCLASS); })\n                    .on(CLICK, \".k-delete\", proxy(that._tagListClick, that));\n            } else {\n                if (disable) {\n                    wrapper.addClass(STATEDISABLED);\n                } else {\n                    wrapper.removeClass(STATEDISABLED);\n                }\n\n                input.attr(DISABLED, disable)\n                     .attr(READONLY, readonly)\n                     .attr(ARIA_DISABLED, disable)\n                     .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        _close: function() {\n            var that = this;\n            if (that.options.autoClose || !that._visibleItems) {\n                that.close();\n            } else {\n                that.current(that.options.highlightFirst ? first(that.ul[0]) : null);\n                that.popup._position();\n            }\n        },\n\n        close: function() {\n            this.popup.close();\n            this.current(null);\n        },\n\n        open: function() {\n            var that = this;\n\n            if (that._request) {\n                that._retrieveData = false;\n            }\n\n            if (!that.ul[0].firstChild || that._state === ACCEPT || that._retrieveData) {\n                that._state = \"\";\n                that._open = true;\n                that._retrieveData = false;\n                that._filterSource();\n            } else if (that._visibleItems && that._allowSelection()) {\n                that.popup.open();\n                that.current(that.options.highlightFirst ? first(that.ul[0]) : null);\n            }\n        },\n\n        toggle: function(toggle) {\n            toggle = toggle !== undefined ? toggle : !this.popup.visible();\n\n            this[toggle ? OPEN : CLOSE]();\n        },\n\n        refresh: function() {\n            var that = this,\n                li = null,\n                length;\n\n            that.trigger(\"dataBinding\");\n\n            length = that._render(that.dataSource.view());\n            that._height(length);\n\n            if (that._setInitialValues) {\n                that._setInitialValues = false;\n                that.value(that._initialValues);\n            }\n\n            if (that._open) {\n                that._open = false;\n                that.toggle(length);\n            }\n\n            if (that.popup.visible()) {\n                that.popup._position();\n\n                if (that.options.highlightFirst) {\n                    li = first(that.ul[0]);\n                }\n            }\n\n            that.current(li);\n\n            if (that._touchScroller) {\n                that._touchScroller.reset();\n            }\n\n            that._makeUnselectable();\n\n            that._hideBusy();\n            that.trigger(\"dataBound\");\n        },\n\n        search: function(word) {\n            var that = this,\n                options = that.options,\n                ignoreCase = options.ignoreCase,\n                filter = options.filter,\n                field = options.dataTextField,\n                inputValue = that.input.val(),\n                expression,\n                length;\n\n            if (options.placeholder === inputValue) {\n                inputValue = \"\";\n            }\n\n            clearTimeout(that._typing);\n\n            word = typeof word === \"string\" ? word : inputValue;\n\n            length = word.length;\n\n            if (!length || length >= options.minLength) {\n                that._state = FILTER;\n                that._open = true;\n\n                expression = {\n                    value: ignoreCase ? word.toLowerCase() : word,\n                    field: field,\n                    operator: filter,\n                    ignoreCase: ignoreCase\n                };\n\n                that._filterSource(expression, that._retrieveData);\n                that._retrieveData = false;\n            }\n        },\n\n        value: function(value) {\n            var that = this,\n                tags = $(that.tagList[0].children),\n                length = tags.length,\n                dataItemIndex,\n                idx = 0;\n\n            if (value === undefined) {\n                return that._values;\n            }\n\n            if (that._fetchItems(value)) {\n                return;\n            }\n\n            for (; idx < length; idx++) {\n                that._unselect(tags.eq(idx));\n            }\n\n            if (value !== null) {\n                value = isArray(value) || value instanceof ObservableArray ? value : [value];\n\n                for (idx = 0, length = value.length; idx < length; idx++) {\n                    dataItemIndex = that._index(value[idx]);\n                    if (dataItemIndex > -1) {\n                        that._select(dataItemIndex);\n                    }\n                }\n\n                that._old = that._values.slice();\n            }\n        },\n\n        _dataSource: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                dataSource = options.dataSource || {};\n\n            dataSource = isArray(dataSource) ? {data: dataSource} : dataSource;\n\n            dataSource.select = element;\n            dataSource.fields = [{ field: options.dataTextField },\n                                 { field: options.dataValueField }];\n\n            if (that.dataSource && that._refreshHandler) {\n                that._unbindDataSource();\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._showBusy, that);\n            }\n\n            that.dataSource = kendo.data.DataSource.create(dataSource)\n                                   .bind(CHANGE, that._refreshHandler)\n                                   .bind(PROGRESS, that._progressHandler);\n        },\n\n        _fetchItems: function(value) {\n            var that = this;\n            var isEmptyArray = $.isArray(value) && value.length === 0;\n\n            if (isEmptyArray || !value) {\n                return;\n            }\n\n            if (!that._fetch && !that.ul[0].firstChild) {\n                that.dataSource.one(CHANGE, function() {\n                    that.value(value);\n                    that._fetch = false;\n                });\n\n                that._fetch = true;\n                that.dataSource.fetch();\n\n                return true;\n            }\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    setTimeout(function() {\n                        that.value(that._initialValues);\n                        that._placeholder();\n                    });\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        },\n\n        _initValue: function() {\n            var that = this,\n                value = that.options.value || that.element.val();\n\n            if (value === null) {\n                value = [];\n            } else {\n                if (!isArray(value)) {\n                    value = [value];\n                }\n\n                value = that._mapValues(value);\n            }\n\n            that._old = that._initialValues = value;\n            that._setInitialValues = value[0] !== undefined;\n        },\n\n        _mapValues: function(values) {\n            var that = this;\n\n            if (values && $.isPlainObject(values[0])) {\n                values = $.map(values, function(dataItem) { return that._value(dataItem); });\n            }\n\n            return values;\n        },\n\n        _change: function() {\n            var that = this,\n                value = that.value();\n\n            if (!compare(value, that._old)) {\n                that._old = value.slice();\n\n                that.trigger(CHANGE);\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n            }\n        },\n\n        _click: function(e) {\n            var that = this,\n                li = $(e.currentTarget);\n\n            if (!e.isDefaultPrevented()) {\n                if (that.trigger(SELECT, {item: li})) {\n                    that._close();\n                    return;\n                }\n\n                that._select(li);\n                that._change();\n                that._close();\n            }\n        },\n\n        _item: function(item, direction) {\n            item = item[direction]();\n\n            if (item[0] && !item.is(\":visible\")) {\n               item = this._item(item, direction);\n            }\n\n            return item;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                tag = that._currentTag,\n                current = that._current,\n                hasValue = that.input.val(),\n                isRtl = kendo.support.isRtl(that.wrapper),\n                visible = that.popup.visible();\n\n            if (key === keys.DOWN) {\n                e.preventDefault();\n\n                if (!visible) {\n                    that.open();\n                    return;\n                }\n\n                if (current) {\n                    current = sibling(current[0], NEXT);\n                } else {\n                    current = first(that.ul[0]);\n                }\n\n                if (current) {\n                    that.current($(current));\n                }\n            } else if (key === keys.UP) {\n                if (visible) {\n                    if (current) {\n                        current = sibling(current[0], PREV);\n                    } else {\n                        current = last(that.ul[0]);\n                    }\n\n                    that.current($(current));\n\n                    if (!that._current[0]) {\n                        that.close();\n                    }\n                }\n                e.preventDefault();\n            } else if ((key === keys.LEFT && !isRtl) || (key === keys.RIGHT && isRtl)) {\n                if (!hasValue) {\n                    tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n                    if (tag[0]) {\n                        that.currentTag(tag);\n                    }\n                }\n            } else if ((key === keys.RIGHT && !isRtl) || (key === keys.LEFT && isRtl)) {\n                if (!hasValue && tag) {\n                    tag = tag.next();\n                    that.currentTag(tag[0] ? tag : null);\n                }\n            } else if (key === keys.ENTER && visible) {\n                if (current) {\n                    if (that.trigger(SELECT, {item: current})) {\n                        that._close();\n                        return;\n                    }\n                    that._select(current);\n                }\n\n                that._change();\n                that._close();\n                e.preventDefault();\n            } else if (key === keys.ESC) {\n                if (visible) {\n                    e.preventDefault();\n                } else {\n                    that.currentTag(null);\n                }\n\n                that.close();\n            } else if (key === keys.HOME) {\n                if (visible) {\n                    that.current(first(that.ul[0]));\n                } else if (!hasValue) {\n                    tag = that.tagList[0].firstChild;\n\n                    if (tag) {\n                        that.currentTag($(tag));\n                    }\n                }\n            } else if (key === keys.END) {\n                if (visible) {\n                    that.current(last(that.ul[0]));\n                } else if (!hasValue) {\n                    tag = that.tagList[0].lastChild;\n\n                    if (tag) {\n                        that.currentTag($(tag));\n                    }\n                }\n            } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n                if (key === keys.BACKSPACE && !tag) {\n                    tag = $(that.tagList[0].lastChild);\n                }\n\n                if (tag && tag[0]) {\n                    that._unselect(tag);\n                    that._change();\n                    that._close();\n                }\n            } else {\n                clearTimeout(that._typing);\n                setTimeout(function() { that._scale(); });\n                that._search();\n            }\n        },\n\n        _hideBusy: function () {\n            var that = this;\n            clearTimeout(that._busy);\n            that.input.attr(\"aria-busy\", false);\n            that._loading.addClass(HIDDENCLASS);\n            that._request = false;\n            that._busy = null;\n        },\n\n        _showBusyHandler: function() {\n            this.input.attr(\"aria-busy\", true);\n            this._loading.removeClass(HIDDENCLASS);\n        },\n\n        _showBusy: function () {\n            var that = this;\n\n            that._request = true;\n\n            if (that._busy) {\n                return;\n            }\n\n            that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n        },\n\n        _placeholder: function(show, skipCaret) {\n            var that = this,\n                input = that.input,\n                active = activeElement();\n\n            if (show === undefined) {\n                show = false;\n                if (input[0] !== active) {\n                    show = !that._dataItems[0];\n                }\n            }\n\n            that._prev = \"\";\n            input.toggleClass(\"k-readonly\", show)\n                 .val(show ? that.options.placeholder : \"\");\n\n            if (input[0] === active && !skipCaret) {\n                kendo.caret(input[0], 0, 0);\n            }\n\n            that._scale();\n        },\n\n        _scale: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                wrapperWidth = wrapper.width(),\n                span = that._span.text(that.input.val()),\n                textWidth;\n\n            if (!wrapper.is(\":visible\")) {\n                span.appendTo(document.documentElement);\n                wrapperWidth = textWidth = span.width() + 25;\n                span.appendTo(wrapper);\n            } else {\n                textWidth = span.width() + 25;\n            }\n\n            that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n        },\n\n        _option: function(dataItem, selected) {\n            var option = \"<option\",\n                dataText = this._text(dataItem),\n                dataValue = this._value(dataItem);\n\n            if (dataValue !== undefined) {\n                dataValue += \"\";\n\n                if (dataValue.indexOf('\"') !== -1) {\n                    dataValue = dataValue.replace(quotRegExp, \"&quot;\");\n                }\n\n                option += ' value=\"' + dataValue + '\"';\n            }\n\n            if (selected) {\n                option += ' selected=\"selected\"';\n            }\n\n            option += \">\";\n\n            if (dataText !== undefined) {\n                option += kendo.htmlEncode(dataText);\n            }\n\n            return option += \"</option>\";\n        },\n\n        _render: function(data) {\n            var that = this,\n                length = data.length,\n                template = that.itemTemplate,\n                values = that._dataItems.slice(0),\n                visibleItems = 0, idx = 0,\n                options = \"\", html = \"\",\n                dataItem, selected;\n\n            for (; idx < length; idx++) {\n                dataItem = data[idx];\n                selected = that._selected(values, dataItem);\n\n                html += template(dataItem, idx, selected);\n                options += that._option(dataItem, selected);\n\n                if (!selected) {\n                    visibleItems += 1;\n                }\n            }\n\n            length = values.length;\n            if (length) {\n                for (idx = 0; idx < length; idx++) {\n                    options += that._option(values[idx], true);\n                }\n            }\n\n            that.ul[0].innerHTML = html;\n            that.element.html(options);\n            that._visibleItems = visibleItems;\n\n            return visibleItems;\n        },\n\n        _selected: function(values, dataItem) {\n            var that = this,\n                textAccessor = that._text,\n                valueAccessor = that._value,\n                value = valueAccessor(dataItem),\n                length = values.length,\n                selected = false,\n                dataValue,\n                idx = 0;\n\n            if (value === undefined) {\n                value = textAccessor(dataItem);\n            }\n\n            for (; idx < length; idx++) {\n                dataItem = values[idx];\n                dataValue = valueAccessor(dataItem);\n\n                if (dataValue === undefined) {\n                    dataValue = textAccessor(dataItem);\n                }\n\n                if (dataValue !== undefined && dataValue === value) {\n                    selected = true;\n                    break;\n                }\n            }\n\n            if (selected) {\n                values.splice(idx, 1);\n            }\n\n            return selected;\n        },\n\n        _search: function() {\n            var that = this;\n\n            that._typing = setTimeout(function() {\n                var value = that.input.val();\n                if (that._prev !== value) {\n                    that._prev = value;\n                    that.search(value);\n                }\n            }, that.options.delay);\n        },\n\n        _allowSelection: function() {\n            var max = this.options.maxSelectedItems;\n            return max === null || max > this._values.length;\n        },\n\n        _select: function(li) {\n            var that = this,\n                values = that._values,\n                dataItem,\n                idx;\n\n            if (!that._allowSelection()) {\n                return;\n            }\n\n            if (!isNaN(li)) {\n                idx = li;\n                that.ul[0].children[idx].style.display = \"none\";\n            } else {\n                idx = li.hide().data(\"idx\");\n            }\n\n            that.element[0].children[idx].selected = true;\n\n            dataItem = that.dataSource.view()[idx];\n\n            that.tagList.append(that.tagTemplate(dataItem));\n            that._dataItems.push(dataItem);\n            values.push(that._dataValue(dataItem));\n\n            that._visibleItems -= 1;\n            that.currentTag(null);\n            that._placeholder();\n            that._height(that._visibleItems);\n\n            if (that._state === FILTER) {\n                that._state = ACCEPT;\n            }\n        },\n\n        _unselect: function(tag) {\n            var that = this,\n                index = tag.index(),\n                dataItem, value,\n                options, option, length;\n\n            tag.remove();\n            that.currentTag(null);\n\n            that._values.splice(index, 1);\n            dataItem = that._dataItems.splice(index, 1)[0];\n\n            value = that._dataValue(dataItem);\n            index = that._index(value);\n\n            if (index !== -1) {\n               $(that.ul[0].children[index]).show();\n               that.element[0].children[index].selected = false;\n               that._visibleItems += 1;\n               that._height(that._visibleItems);\n            } else {\n                index = that.dataSource.view().length;\n                options = that.element[0].children;\n                length = options.length;\n\n                for (; index < length; index++) {\n                    option = options[index];\n                    if (option.value == value) {\n                        option.selected = false;\n                        break;\n                    }\n                }\n            }\n\n            that._placeholder();\n        },\n\n        _template: function() {\n            var that = this,\n                options = that.options,\n                itemTemplate = options.itemTemplate,\n                tagTemplate = options.tagTemplate,\n                hasDataSource = options.dataSource,\n                textTemplate;\n\n            if (that.element[0].length && !hasDataSource) {\n                options.dataTextField = options.dataTextField || \"text\";\n                options.dataValueField = options.dataValueField || \"value\";\n            }\n\n            textTemplate = kendo.template(\"#:\" + kendo.expr(options.dataTextField, \"data\") + \"#\", { useWithBlock: false });\n\n            itemTemplate = itemTemplate ? kendo.template(itemTemplate) : textTemplate;\n            tagTemplate = tagTemplate ? kendo.template(tagTemplate) : textTemplate;\n\n            that.itemTemplate = function(data, idx, hide) {\n                return '<li tabindex=\"-1\" role=\"option\" data-idx=\"' + idx + '\" unselectable=\"on\" class=\"k-item\"' + (hide ? HIDE : \"\") + '>' + itemTemplate(data) + '</li>';\n            };\n\n            that.tagTemplate = function(data) {\n                return '<li class=\"k-button\" unselectable=\"on\"><span unselectable=\"on\">' + tagTemplate(data) + '</span><span unselectable=\"on\" class=\"k-icon k-delete\">delete</span></li>';\n            };\n        },\n\n        _input: function() {\n            var that = this,\n                accessKey = that.element[0].accessKey,\n                input = that._innerWrapper.children(\"input.k-input\");\n\n            if (!input[0]) {\n                input = $('<input class=\"k-input\" style=\"width: 25px\" />').appendTo(that._innerWrapper);\n            }\n\n            that.element.removeAttr(\"accesskey\");\n            that._focused = that.input = input.attr({\n                \"accesskey\": accessKey,\n                \"autocomplete\": \"off\",\n                \"role\": \"listbox\",\n                \"aria-expanded\": false\n            });\n        },\n\n        _tagList: function() {\n            var that = this,\n                tagList = that._innerWrapper.children(\"ul\");\n\n            if (!tagList[0]) {\n                tagList = $('<ul role=\"listbox\" unselectable=\"on\" class=\"k-reset\"/>').appendTo(that._innerWrapper);\n            }\n\n            that.tagList = tagList;\n        },\n\n        _loader: function() {\n            this._loading = $('<span class=\"k-icon k-loading ' + HIDDENCLASS + '\"></span>').insertAfter(this.input);\n        },\n\n        _textContainer: function() {\n            var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n\n            computedStyles.position = \"absolute\";\n            computedStyles.visibility = \"hidden\";\n            computedStyles.top = -3333;\n            computedStyles.left = -3333;\n\n            this._span = $(\"<span/>\").css(computedStyles).appendTo(this.wrapper);\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                wrapper = element.parent(\"span.k-multiselect\");\n\n            if (!wrapper[0]) {\n                wrapper = element.wrap('<div class=\"k-widget k-multiselect k-header\" unselectable=\"on\" />').parent();\n                wrapper[0].style.cssText = element[0].style.cssText;\n\n                $('<div class=\"k-multiselect-wrap k-floatwrap\" unselectable=\"on\" />').insertBefore(element);\n            }\n\n            that.wrapper = wrapper.addClass(element[0].className).css(\"display\", \"\");\n            that._innerWrapper = $(wrapper[0].firstChild);\n        }\n    });\n\n    function compare(a, b) {\n        var length;\n\n        if ((a === null && b !== null) || (a !== null && b === null)) {\n            return false;\n        }\n\n        length = a.length;\n        if (length !== b.length) {\n            return false;\n        }\n\n        while (length--) {\n            if (a[length] !== b[length]) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    function first(ul) {\n        var item = ul.firstChild;\n\n        if (item && item.style.display === \"none\") {\n            item = sibling(item, NEXT);\n        }\n\n        if (item) {\n            return $(item);\n        }\n\n        return item;\n    }\n\n    function last(ul) {\n        var item = ul.lastChild;\n\n        if (item && item.style.display === \"none\") {\n            item = sibling(item, PREV);\n        }\n\n        if (item) {\n            return $(item);\n        }\n\n        return item;\n    }\n\n    function sibling(item, direction) {\n        item = item[direction];\n\n        if (item && item.style.display === \"none\") {\n            item = sibling(item, direction);\n        }\n\n        return item;\n    }\n\n    ui.plugin(MultiSelect);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        Draggable = kendo.ui.Draggable,\n        extend = $.extend,\n        format = kendo.format,\n        parse = kendo.parseFloat,\n        proxy = $.proxy,\n        isArray = $.isArray,\n        math = Math,\n        support = kendo.support,\n        pointers = support.pointers,\n        msPointers = support.msPointers,\n        CHANGE = \"change\",\n        SLIDE = \"slide\",\n        NS = \".slider\",\n        MOUSE_DOWN = \"touchstart\" + NS + \" mousedown\" + NS,\n        TRACK_MOUSE_DOWN = pointers ? \"pointerdown\" + NS : (msPointers ? \"MSPointerDown\" + NS : MOUSE_DOWN),\n        MOUSE_UP = \"touchend\" + NS + \" mouseup\" + NS,\n        TRACK_MOUSE_UP = pointers ? \"pointerup\" : (msPointers ? \"MSPointerUp\" + NS : MOUSE_UP),\n        MOVE_SELECTION = \"moveSelection\",\n        KEY_DOWN = \"keydown\" + NS,\n        CLICK = \"click\" + NS,\n        MOUSE_OVER = \"mouseover\" + NS,\n        FOCUS = \"focus\" + NS,\n        BLUR = \"blur\" + NS,\n        DRAG_HANDLE = \".k-draghandle\",\n        TRACK_SELECTOR = \".k-slider-track\",\n        TICK_SELECTOR = \".k-tick\",\n        STATE_SELECTED = \"k-state-selected\",\n        STATE_FOCUSED = \"k-state-focused\",\n        STATE_DEFAULT = \"k-state-default\",\n        STATE_DISABLED = \"k-state-disabled\",\n        PRECISION = 3,\n        DISABLED = \"disabled\",\n        UNDEFINED = \"undefined\",\n        TABINDEX = \"tabindex\",\n        getTouches = kendo.getTouches;\n\n    var SliderBase = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n\n            that._distance = round(options.max - options.min);\n            that._isHorizontal = options.orientation == \"horizontal\";\n            that._isRtl = that._isHorizontal && kendo.support.isRtl(element);\n            that._position = that._isHorizontal ? \"left\" : \"bottom\";\n            that._sizeFn = that._isHorizontal ? \"width\" : \"height\";\n            that._outerSize = that._isHorizontal ? \"outerWidth\" : \"outerHeight\";\n\n            options.tooltip.format = options.tooltip.enabled ? options.tooltip.format || \"{0}\" : \"{0}\";\n\n            that._createHtml();\n            that.wrapper = that.element.closest(\".k-slider\");\n            that._trackDiv = that.wrapper.find(TRACK_SELECTOR);\n\n            that._setTrackDivWidth();\n\n            that._maxSelection = that._trackDiv[that._sizeFn]();\n\n            that._sliderItemsInit();\n\n            that._reset();\n\n            that._tabindex(that.wrapper.find(DRAG_HANDLE));\n            that[options.enabled ? \"enable\" : \"disable\"]();\n\n            var rtlDirectionSign = kendo.support.isRtl(that.wrapper) ? -1 : 1;\n\n            that._keyMap = {\n                37: step(-1 * rtlDirectionSign * options.smallStep), // left arrow\n                40: step(-options.smallStep), // down arrow\n                39: step(+1 * rtlDirectionSign * options.smallStep), // right arrow\n                38: step(+options.smallStep), // up arrow\n                35: setValue(options.max), // end\n                36: setValue(options.min), // home\n                33: step(+options.largeStep), // page up\n                34: step(-options.largeStep)  // page down\n            };\n\n            kendo.notify(that);\n        },\n\n        events: [\n            CHANGE,\n            SLIDE\n        ],\n\n        options: {\n            enabled: true,\n            min: 0,\n            max: 10,\n            smallStep: 1,\n            largeStep: 5,\n            orientation: \"horizontal\",\n            tickPlacement: \"both\",\n            tooltip: { enabled: true, format: \"{0}\" }\n        },\n\n        _resize: function() {\n            this._setTrackDivWidth();\n            this.wrapper.find(\".k-slider-items\").remove();\n\n            this._maxSelection = this._trackDiv[this._sizeFn]();\n            this._sliderItemsInit();\n            this._refresh();\n        },\n\n        _sliderItemsInit: function() {\n            var that = this,\n                options = that.options;\n\n            var sizeBetweenTicks = that._maxSelection / ((options.max - options.min) / options.smallStep);\n            var pixelWidths = that._calculateItemsWidth(math.floor(that._distance / options.smallStep));\n\n            if (options.tickPlacement != \"none\" && sizeBetweenTicks >= 2) {\n                that._trackDiv.before(createSliderItems(options, that._distance));\n                that._setItemsWidth(pixelWidths);\n                that._setItemsTitle();\n            }\n\n            that._calculateSteps(pixelWidths);\n\n            if (options.tickPlacement != \"none\" && sizeBetweenTicks >= 2 &&\n                options.largeStep >= options.smallStep) {\n                that._setItemsLargeTick();\n            }\n        },\n\n        getSize: function() {\n            return kendo.dimensions(this.wrapper);\n        },\n\n        _setTrackDivWidth: function() {\n            var that = this,\n                trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? \"right\" : that._position), 10) * 2;\n\n            that._trackDiv[that._sizeFn]((that.wrapper[that._sizeFn]() - 2) - trackDivPosition);\n        },\n\n        _setItemsWidth: function(pixelWidths) {\n            var that = this,\n                options = that.options,\n                first = 0,\n                last = pixelWidths.length - 1,\n                items = that.wrapper.find(TICK_SELECTOR),\n                i,\n                paddingTop = 0,\n                bordersWidth = 2,\n                count = items.length,\n                selection = 0;\n\n            for (i = 0; i < count - 2; i++) {\n                $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n            }\n\n            if (that._isHorizontal) {\n                $(items[first]).addClass(\"k-first\")[that._sizeFn](pixelWidths[last - 1]);\n                $(items[last]).addClass(\"k-last\")[that._sizeFn](pixelWidths[last]);\n            } else {\n                $(items[last]).addClass(\"k-first\")[that._sizeFn](pixelWidths[last]);\n                $(items[first]).addClass(\"k-last\")[that._sizeFn](pixelWidths[last - 1]);\n            }\n\n            if (that._distance % options.smallStep !== 0 && !that._isHorizontal) {\n                for (i = 0; i < pixelWidths.length; i++) {\n                    selection += pixelWidths[i];\n                }\n\n                paddingTop = that._maxSelection - selection;\n                paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n\n                that.wrapper.find(\".k-slider-items\").css(\"padding-top\", paddingTop);\n            }\n        },\n\n        _setItemsTitle: function() {\n            var that = this,\n                options = that.options,\n                items = that.wrapper.find(TICK_SELECTOR),\n                titleNumber = options.min,\n                count = items.length,\n                i = that._isHorizontal && !that._isRtl ? 0 : count - 1,\n                limit = that._isHorizontal && !that._isRtl ? count : -1,\n                increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n\n            for (; i - limit !== 0 ; i += increment) {\n                $(items[i]).attr(\"title\", format(options.tooltip.format, round(titleNumber)));\n                titleNumber += options.smallStep;\n            }\n        },\n\n        _setItemsLargeTick: function() {\n            var that = this,\n                options = that.options,\n                items = that.wrapper.find(TICK_SELECTOR),\n                i = 0, item, value;\n\n            if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance / options.largeStep >= 3) {\n                if (!that._isHorizontal && !that._isRtl) {\n                    items = $.makeArray(items).reverse();\n                }\n\n                for (i = 0; i < items.length; i++) {\n                    item = $(items[i]);\n                    value = that._values[i];\n                    var valueWithoutFraction = round(removeFraction(value - this.options.min));\n                    if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n                        item.addClass(\"k-tick-large\")\n                            .html(\"<span class='k-label'>\" + item.attr(\"title\") + \"</span>\");\n\n                        if (i !== 0 && i !== items.length - 1) {\n                            item.css(\"line-height\", item[that._sizeFn]() + \"px\");\n                        }\n                    }\n                }\n            }\n        },\n\n        _calculateItemsWidth: function(itemsCount) {\n            var that = this,\n                options = that.options,\n                trackDivSize = parseFloat(that._trackDiv.css(that._sizeFn)) + 1,\n                pixelStep = trackDivSize / that._distance,\n                itemWidth,\n                pixelWidths,\n                i;\n\n            if ((that._distance / options.smallStep) - math.floor(that._distance / options.smallStep) > 0) {\n                trackDivSize -= ((that._distance % options.smallStep) * pixelStep);\n            }\n\n            itemWidth = trackDivSize / itemsCount;\n            pixelWidths = [];\n\n            for (i = 0; i < itemsCount - 1; i++) {\n                pixelWidths[i] = itemWidth;\n            }\n\n            pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n            return that._roundWidths(pixelWidths);\n        },\n\n        _roundWidths: function(pixelWidthsArray) {\n            var balance = 0,\n                count = pixelWidthsArray.length,\n                i;\n\n            for (i = 0; i < count; i++) {\n                balance += (pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]));\n                pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n            }\n\n            balance = math.round(balance);\n\n            return this._addAdditionalSize(balance, pixelWidthsArray);\n        },\n\n        _addAdditionalSize: function(additionalSize, pixelWidthsArray) {\n            if (additionalSize === 0) {\n                return pixelWidthsArray;\n            }\n\n            //set step size\n            var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1),\n                i;\n\n            for (i = 0; i < additionalSize; i++) {\n                pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n            }\n\n            return pixelWidthsArray;\n        },\n\n        _calculateSteps: function(pixelWidths) {\n            var that = this,\n                options = that.options,\n                val = options.min,\n                selection = 0,\n                itemsCount = math.ceil(that._distance / options.smallStep),\n                i = 1,\n                lastItem;\n\n            itemsCount += (that._distance / options.smallStep) % 1 === 0 ? 1 : 0;\n            pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n            pixelWidths.splice(itemsCount -1, 1, pixelWidths.pop() * 2);\n\n            that._pixelSteps = [selection];\n            that._values = [val];\n\n            if (itemsCount === 0) {\n                return;\n            }\n\n            while (i < itemsCount) {\n                selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n                that._pixelSteps[i] = selection;\n                val += options.smallStep;\n                that._values[i] = round(val);\n\n                i++;\n            }\n\n            lastItem = that._distance % options.smallStep === 0 ? itemsCount - 1 : itemsCount;\n\n            that._pixelSteps[lastItem] = that._maxSelection;\n            that._values[lastItem] = options.max;\n\n            if (that._isRtl) {\n                that._pixelSteps.reverse();\n                that._values.reverse();\n            }\n        },\n\n        _getValueFromPosition: function(mousePosition, dragableArea) {\n            var that = this,\n                options = that.options,\n                step = math.max(options.smallStep * (that._maxSelection / that._distance), 0),\n                position = 0,\n                halfStep = (step / 2),\n                i;\n\n            if (that._isHorizontal) {\n                position = mousePosition - dragableArea.startPoint;\n                if (that._isRtl) {\n                    position = that._maxSelection - position;\n                }\n            } else {\n                position = dragableArea.startPoint - mousePosition;\n            }\n\n            if (that._maxSelection - ((parseInt(that._maxSelection % step, 10) - 3) / 2) < position) {\n                return options.max;\n            }\n\n            for (i = 0; i < that._pixelSteps.length; i++) {\n                if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n                    return round(that._values[i]);\n                }\n            }\n        },\n\n        _getFormattedValue: function(val, drag) {\n            var that = this,\n                html = \"\",\n                tooltip = that.options.tooltip,\n                tooltipTemplate,\n                selectionStart,\n                selectionEnd;\n\n            if (isArray(val)) {\n                selectionStart = val[0];\n                selectionEnd = val[1];\n            } else if (drag && drag.type) {\n                selectionStart = drag.selectionStart;\n                selectionEnd = drag.selectionEnd;\n            }\n\n            if (drag) {\n                tooltipTemplate = drag.tooltipTemplate;\n            }\n\n            if (!tooltipTemplate && tooltip.template) {\n                tooltipTemplate = kendo.template(tooltip.template);\n            }\n\n            if (isArray(val) || (drag && drag.type)) {\n\n                if (tooltipTemplate) {\n                    html = tooltipTemplate({\n                        selectionStart: selectionStart,\n                        selectionEnd: selectionEnd\n                    });\n                } else {\n                    selectionStart = format(tooltip.format, selectionStart);\n                    selectionEnd = format(tooltip.format, selectionEnd);\n                    html = selectionStart + \" - \" + selectionEnd;\n                }\n            } else {\n                if (drag) {\n                    drag.val = val;\n                }\n\n                if (tooltipTemplate) {\n                    html = tooltipTemplate({\n                        value: val\n                    });\n                } else {\n                    html = format(tooltip.format, val);\n                }\n            }\n            return html;\n        },\n\n        _getDraggableArea: function() {\n            var that = this,\n                offset = kendo.getOffset(that._trackDiv);\n\n            return {\n                startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n                endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n            };\n        },\n\n        _createHtml: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                inputs = element.find(\"input\");\n\n            if (inputs.length == 2) {\n                inputs.eq(0).prop(\"value\", formatValue(options.selectionStart));\n                inputs.eq(1).prop(\"value\", formatValue(options.selectionEnd));\n            } else {\n                element.prop(\"value\", formatValue(options.value));\n            }\n\n            element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n\n            if (options.showButtons) {\n                element.before(createButton(options, \"increase\", that._isHorizontal))\n                       .before(createButton(options, \"decrease\", that._isHorizontal));\n            }\n\n            element.before(createTrack(options, element));\n        },\n\n        _focus: function(e) {\n            var that = this,\n                target = e.target,\n                val = that.value(),\n                drag = that._drag;\n\n            if (!drag) {\n                if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n                    drag = that._firstHandleDrag;\n                    that._activeHandle = 0;\n                } else {\n                    drag = that._lastHandleDrag;\n                    that._activeHandle = 1;\n                }\n                val = val[that._activeHandle];\n            }\n\n            $(target).addClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n\n            if (drag) {\n                that._activeHandleDrag = drag;\n\n                drag.selectionStart = that.options.selectionStart;\n                drag.selectionEnd = that.options.selectionEnd;\n\n                drag._updateTooltip(val);\n            }\n        },\n\n        _focusWithMouse: function(target) {\n            target = $(target);\n\n            var that = this,\n                idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n\n            window.setTimeout(function(){\n                that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n            }, 1);\n\n            that._setTooltipTimeout();\n        },\n\n        _blur: function(e) {\n            var that = this,\n                drag = that._activeHandleDrag;\n\n            $(e.target).removeClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n\n            if (drag) {\n                drag._removeTooltip();\n                delete that._activeHandleDrag;\n                delete that._activeHandle;\n            }\n        },\n\n        _setTooltipTimeout: function() {\n            var that = this;\n            that._tooltipTimeout = window.setTimeout(function(){\n                var drag = that._drag || that._activeHandleDrag;\n                if (drag) {\n                    drag._removeTooltip();\n                }\n            }, 300);\n        },\n\n        _clearTooltipTimeout: function() {\n            var that = this;\n            window.clearTimeout(this._tooltipTimeout);\n            var drag = that._drag || that._activeHandleDrag;\n            if (drag && drag.tooltipDiv) {\n                drag.tooltipDiv.stop(true, false).css(\"opacity\", 1);\n            }\n        },\n\n        _reset: function () {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._form = form.on(\"reset\", proxy(that._formResetHandler, that));\n            }\n        },\n\n        destroy: function () {\n            if (this._form) {\n                this._form.off(\"reset\", this._formResetHandler);\n            }\n            Widget.fn.destroy.call(this);\n        }\n    });\n\n    function createWrapper (options, element, isHorizontal) {\n        var orientationCssClass = isHorizontal ? \" k-slider-horizontal\" : \" k-slider-vertical\",\n            style = options.style ? options.style : element.attr(\"style\"),\n            cssClasses = element.attr(\"class\") ? (\" \" + element.attr(\"class\")) : \"\",\n            tickPlacementCssClass = \"\";\n\n        if (options.tickPlacement == \"bottomRight\") {\n            tickPlacementCssClass = \" k-slider-bottomright\";\n        } else if (options.tickPlacement == \"topLeft\") {\n            tickPlacementCssClass = \" k-slider-topleft\";\n        }\n\n        style = style ? \" style='\" + style + \"'\" : \"\";\n\n        return \"<div class='k-widget k-slider\" + orientationCssClass + cssClasses + \"'\" + style + \">\" +\n               \"<div class='k-slider-wrap\" + (options.showButtons ? \" k-slider-buttons\" : \"\") + tickPlacementCssClass +\n               \"'></div></div>\";\n    }\n\n    function createButton (options, type, isHorizontal) {\n        var buttonCssClass = \"\";\n\n        if (type == \"increase\") {\n            buttonCssClass = isHorizontal ? \"k-i-arrow-e\" : \"k-i-arrow-n\";\n        } else {\n            buttonCssClass = isHorizontal ? \"k-i-arrow-w\" : \"k-i-arrow-s\";\n        }\n\n        return \"<a class='k-button k-button-\" + type + \"'><span class='k-icon \" + buttonCssClass +\n               \"' title='\" + options[type + \"ButtonTitle\"] + \"'>\" + options[type + \"ButtonTitle\"] + \"</span></a>\";\n    }\n\n    function createSliderItems (options, distance) {\n        var result = \"<ul class='k-reset k-slider-items'>\",\n            count = math.floor(round(distance / options.smallStep)) + 1,\n            i;\n\n        for(i = 0; i < count; i++) {\n            result += \"<li class='k-tick' role='presentation'>&nbsp;</li>\";\n        }\n\n        result += \"</ul>\";\n\n        return result;\n    }\n\n    function createTrack (options, element) {\n        var dragHandleCount = element.is(\"input\") ? 1 : 2,\n            firstDragHandleTitle = dragHandleCount == 2 ? options.leftDragHandleTitle : options.dragHandleTitle;\n\n        return \"<div class='k-slider-track'><div class='k-slider-selection'><!-- --></div>\" +\n               \"<a href='#' class='k-draghandle' title='\" + firstDragHandleTitle + \"' role='slider' aria-valuemin='\" + options.min + \"' aria-valuemax='\" + options.max + \"' aria-valuenow='\" + (dragHandleCount > 1 ? (options.selectionStart || options.min) : options.value || options.min) + \"'>Drag</a>\" +\n               (dragHandleCount > 1 ? \"<a href='#' class='k-draghandle' title='\" + options.rightDragHandleTitle + \"'role='slider' aria-valuemin='\" + options.min + \"' aria-valuemax='\" + options.max + \"' aria-valuenow='\" + (options.selectionEnd || options.max) + \"'>Drag</a>\" : \"\") +\n               \"</div>\";\n    }\n\n    function step(stepValue) {\n        return function (value) {\n            return value + stepValue;\n        };\n    }\n\n    function setValue(value) {\n        return function () {\n            return value;\n        };\n    }\n\n    function formatValue(value) {\n        return (value + \"\").replace(\".\", kendo.cultures.current.numberFormat[\".\"]);\n    }\n\n    function round(value) {\n        value = parseFloat(value, 10);\n        var power = math.pow(10, PRECISION || 0);\n        return math.round(value * power) / power;\n    }\n\n    function parseAttr(element, name) {\n        var value = parse(element.getAttribute(name));\n        if (value === null) {\n            value = undefined;\n        }\n        return value;\n    }\n\n    function defined(value) {\n        return typeof value !== UNDEFINED;\n    }\n\n    function removeFraction(value) {\n        return value * 10000;\n    }\n\n    var Slider = SliderBase.extend({\n        init: function(element, options) {\n            var that = this,\n                dragHandle;\n\n            element.type = \"text\";\n            options = extend({}, {\n                value: parseAttr(element, \"value\"),\n                min: parseAttr(element, \"min\"),\n                max: parseAttr(element, \"max\"),\n                smallStep: parseAttr(element, \"step\")\n            }, options);\n\n            element = $(element);\n\n            if (options && options.enabled === undefined) {\n                options.enabled = !element.is(\"[disabled]\");\n            }\n\n            SliderBase.fn.init.call(that, element, options);\n            options = that.options;\n            if (!defined(options.value) || options.value === null) {\n                options.value = options.min;\n                element.prop(\"value\", formatValue(options.min));\n            }\n            options.value = math.max(math.min(options.value, options.max), options.min);\n\n            dragHandle = that.wrapper.find(DRAG_HANDLE);\n\n            new Slider.Selection(dragHandle, that, options);\n            that._drag = new Slider.Drag(dragHandle, \"\", that, options);\n        },\n\n        options: {\n            name: \"Slider\",\n            showButtons: true,\n            increaseButtonTitle: \"Increase\",\n            decreaseButtonTitle: \"Decrease\",\n            dragHandleTitle: \"drag\",\n            tooltip: { format: \"{0:#,#.##}\" },\n            value: null\n        },\n\n        enable: function (enable) {\n            var that = this,\n                options = that.options,\n                clickHandler,\n                move;\n\n            that.disable();\n            if (enable === false) {\n                return;\n            }\n\n            that.wrapper\n                .removeClass(STATE_DISABLED)\n                .addClass(STATE_DEFAULT);\n\n            that.wrapper.find(\"input\").removeAttr(DISABLED);\n\n            clickHandler = function (e) {\n                var touch = getTouches(e)[0];\n\n                if (!touch) {\n                    return;\n                }\n\n                var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY,\n                    dragableArea = that._getDraggableArea(),\n                    target = $(e.target);\n\n                if (target.hasClass(\"k-draghandle\")) {\n                    target.addClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n                    return;\n                }\n\n                that._update(that._getValueFromPosition(mousePosition, dragableArea));\n\n                that._focusWithMouse(e.target);\n\n                that._drag.dragstart(e);\n                e.preventDefault();\n            };\n\n            that.wrapper\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR)\n                    .on(TRACK_MOUSE_DOWN, clickHandler)\n                    .end()\n                    .on(TRACK_MOUSE_DOWN, function() {\n                        $(document.documentElement).one(\"selectstart\", kendo.preventDefault);\n                    })\n                    .on(TRACK_MOUSE_UP, function() {\n                        that._drag._end();\n                    });\n\n            that.wrapper\n                .find(DRAG_HANDLE)\n                .attr(TABINDEX, 0)\n                .on(MOUSE_UP, function () {\n                    that._setTooltipTimeout();\n                })\n                .on(CLICK, function (e) {\n                    that._focusWithMouse(e.target);\n                    e.preventDefault();\n                })\n                .on(FOCUS, proxy(that._focus, that))\n                .on(BLUR, proxy(that._blur, that));\n\n            move = proxy(function (sign) {\n                var newVal = that._nextValueByIndex(that._valueIndex + (sign * 1));\n                that._setValueInRange(newVal);\n                that._drag._updateTooltip(newVal);\n            }, that);\n\n            if (options.showButtons) {\n                var mouseDownHandler = proxy(function(e, sign) {\n                    this._clearTooltipTimeout();\n                    if (e.which === 1 || (support.touch && e.which === 0)) {\n                        move(sign);\n\n                        this.timeout = setTimeout(proxy(function () {\n                            this.timer = setInterval(function () {\n                                move(sign);\n                            }, 60);\n                        }, this), 200);\n                    }\n                }, that);\n\n                that.wrapper.find(\".k-button\")\n                    .on(MOUSE_UP, proxy(function (e) {\n                        this._clearTimer();\n                        that._focusWithMouse(e.target);\n                    }, that))\n                    .on(MOUSE_OVER, function (e) {\n                        $(e.currentTarget).addClass(\"k-state-hover\");\n                    })\n                    .on(\"mouseout\" + NS, proxy(function (e) {\n                        $(e.currentTarget).removeClass(\"k-state-hover\");\n                        this._clearTimer();\n                    }, that))\n                    .eq(0)\n                    .on(MOUSE_DOWN, proxy(function (e) {\n                        mouseDownHandler(e, 1);\n                    }, that))\n                    .click(false)\n                    .end()\n                    .eq(1)\n                    .on(MOUSE_DOWN, proxy(function (e) {\n                        mouseDownHandler(e, -1);\n                    }, that))\n                    .click(kendo.preventDefault);\n            }\n\n            that.wrapper\n                .find(DRAG_HANDLE)\n                .off(KEY_DOWN, false)\n                .on(KEY_DOWN, proxy(this._keydown, that));\n\n            options.enabled = true;\n        },\n\n        disable: function () {\n            var that = this;\n\n            that.wrapper\n                .removeClass(STATE_DEFAULT)\n                .addClass(STATE_DISABLED);\n\n            $(that.element).prop(DISABLED, DISABLED);\n\n            that.wrapper\n                .find(\".k-button\")\n                .off(MOUSE_DOWN)\n                .on(MOUSE_DOWN, kendo.preventDefault)\n                .off(MOUSE_UP)\n                .on(MOUSE_UP, kendo.preventDefault)\n                .off(\"mouseleave\" + NS)\n                .on(\"mouseleave\" + NS, kendo.preventDefault)\n                .off(MOUSE_OVER)\n                .on(MOUSE_OVER, kendo.preventDefault);\n\n            that.wrapper\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n\n            that.wrapper\n                .find(DRAG_HANDLE)\n                .attr(TABINDEX, -1)\n                .off(MOUSE_UP)\n                .off(KEY_DOWN)\n                .off(CLICK)\n                .off(FOCUS)\n                .off(BLUR);\n\n            that.options.enabled = false;\n        },\n\n        _update: function (val) {\n            var that = this,\n                change = that.value() != val;\n\n            that.value(val);\n\n            if (change) {\n                that.trigger(CHANGE, { value: that.options.value });\n            }\n        },\n\n        value: function (value) {\n            var that = this,\n                options = that.options;\n\n            value = round(value);\n            if (isNaN(value)) {\n                return options.value;\n            }\n\n            if (value >= options.min && value <= options.max) {\n                if (options.value != value) {\n                    that.element.prop(\"value\", formatValue(value));\n                    options.value = value;\n                    that._refreshAriaAttr(value);\n                    that._refresh();\n                }\n            }\n        },\n\n        _refresh: function () {\n            this.trigger(MOVE_SELECTION, { value: this.options.value });\n        },\n\n        _refreshAriaAttr: function(value) {\n            var that = this,\n                drag = that._drag,\n                formattedValue;\n\n            if (drag && drag._tooltipDiv) {\n                formattedValue = drag._tooltipDiv.text();\n            } else {\n                formattedValue = that._getFormattedValue(value, null);\n            }\n            this.wrapper.find(DRAG_HANDLE).attr(\"aria-valuenow\", value).attr(\"aria-valuetext\", formattedValue);\n        },\n\n        _clearTimer: function () {\n            clearTimeout(this.timeout);\n            clearInterval(this.timer);\n        },\n\n        _keydown: function (e) {\n            var that = this;\n\n            if (e.keyCode in that._keyMap) {\n                that._clearTooltipTimeout();\n                that._setValueInRange(that._keyMap[e.keyCode](that.options.value));\n                that._drag._updateTooltip(that.value());\n                e.preventDefault();\n            }\n        },\n\n        _setValueInRange: function (val) {\n            var that = this,\n                options = that.options;\n\n            val = round(val);\n            if (isNaN(val)) {\n                that._update(options.min);\n                return;\n            }\n\n            val = math.max(math.min(val, options.max), options.min);\n            that._update(val);\n        },\n\n        _nextValueByIndex: function (index) {\n            var count = this._values.length;\n            if (this._isRtl) {\n                index = count - 1 - index;\n            }\n            return this._values[math.max(0, math.min(index, count - 1))];\n        },\n\n        _formResetHandler: function () {\n            var that = this,\n                min = that.options.min;\n\n            setTimeout(function () {\n                var value = that.element[0].value;\n                that.value(value === \"\" || isNaN(value) ? min : value);\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            SliderBase.fn.destroy.call(that);\n\n            that.wrapper.off(NS)\n                .find(\".k-button\").off(NS)\n                .end()\n                .find(DRAG_HANDLE).off(NS)\n                .end()\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR).off(NS)\n                .end();\n\n            that._drag.draggable.destroy();\n            that._drag._removeTooltip(true);\n        }\n    });\n\n    Slider.Selection = function (dragHandle, that, options) {\n        function moveSelection (val) {\n            var selectionValue = val - options.min,\n                index = that._valueIndex = math.ceil(round(selectionValue / options.smallStep)),\n                selection = parseInt(that._pixelSteps[index], 10),\n                selectionDiv = that._trackDiv.find(\".k-slider-selection\"),\n                halfDragHanndle = parseInt(dragHandle[that._outerSize]() / 2, 10),\n                rtlCorrection = that._isRtl ? 2 : 0;\n\n            selectionDiv[that._sizeFn](that._isRtl ? that._maxSelection - selection : selection);\n            dragHandle.css(that._position, selection - halfDragHanndle - rtlCorrection);\n        }\n\n        moveSelection(options.value);\n\n        that.bind([CHANGE, SLIDE, MOVE_SELECTION], function (e) {\n            moveSelection(parseFloat(e.value, 10));\n        });\n    };\n\n    Slider.Drag = function (element, type, owner, options) {\n        var that = this;\n        that.owner = owner;\n        that.options = options;\n        that.element = element;\n        that.type = type;\n\n        that.draggable = new Draggable(element, {\n            distance: 0,\n            dragstart: proxy(that._dragstart, that),\n            drag: proxy(that.drag, that),\n            dragend: proxy(that.dragend, that),\n            dragcancel: proxy(that.dragcancel, that)\n        });\n\n        element.click(false);\n    };\n\n    Slider.Drag.prototype = {\n        dragstart: function(e) {\n            // add reference to the last active drag handle.\n            this.owner._activeDragHandle = this;\n            // HACK to initiate click on the line\n            this.draggable.userEvents.cancel();\n            this.draggable.userEvents._start(e);\n        },\n\n        _dragstart: function(e) {\n            var that = this,\n                owner = that.owner,\n                options = that.options;\n\n            if (!options.enabled) {\n                e.preventDefault();\n                return;\n            }\n\n            // add reference to the last active drag handle.\n            this.owner._activeDragHandle = this;\n\n            owner.element.off(MOUSE_OVER);\n            owner.wrapper.find(\".\" + STATE_FOCUSED).removeClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n            that.element.addClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n            $(document.documentElement).css(\"cursor\", \"pointer\");\n\n            that.dragableArea = owner._getDraggableArea();\n            that.step = math.max(options.smallStep * (owner._maxSelection / owner._distance), 0);\n\n            if (that.type) {\n                that.selectionStart = options.selectionStart;\n                that.selectionEnd = options.selectionEnd;\n                owner._setZIndex(that.type);\n            } else {\n                that.oldVal = that.val = options.value;\n            }\n\n            that._removeTooltip(true);\n            that._createTooltip();\n        },\n\n        _createTooltip: function() {\n            var that = this,\n                owner = that.owner,\n                tooltip = that.options.tooltip,\n                html = '',\n                wnd = $(window),\n                tooltipTemplate, colloutCssClass;\n\n            if (!tooltip.enabled) {\n                return;\n            }\n\n            if (tooltip.template) {\n                tooltipTemplate = that.tooltipTemplate = kendo.template(tooltip.template);\n            }\n\n            $(\".k-slider-tooltip\").remove(); // if user changes window while tooltip is visible, a second one will be created\n            that.tooltipDiv = $(\"<div class='k-widget k-tooltip k-slider-tooltip'><!-- --></div>\").appendTo(document.body);\n\n            html = owner._getFormattedValue(that.val || owner.value(), that);\n\n            if (!that.type) {\n                colloutCssClass = \"k-callout-\" + (owner._isHorizontal ? 's' : 'e');\n                that.tooltipInnerDiv = \"<div class='k-callout \" + colloutCssClass + \"'><!-- --></div>\";\n                html += that.tooltipInnerDiv;\n            }\n\n            that.tooltipDiv.html(html);\n\n            that._scrollOffset = {\n                top: wnd.scrollTop(),\n                left: wnd.scrollLeft()\n            };\n\n            that.moveTooltip();\n        },\n\n        drag: function (e) {\n            var that = this,\n                owner = that.owner,\n                x = e.x.location,\n                y = e.y.location,\n                startPoint = that.dragableArea.startPoint,\n                endPoint = that.dragableArea.endPoint,\n                slideParams;\n\n            e.preventDefault();\n\n            if (owner._isHorizontal) {\n                if (owner._isRtl) {\n                    that.val = that.constrainValue(x, startPoint, endPoint, x < endPoint);\n                } else {\n                    that.val = that.constrainValue(x, startPoint, endPoint, x >= endPoint);\n                }\n            } else {\n                that.val = that.constrainValue(y, endPoint, startPoint, y <= endPoint);\n            }\n\n            if (that.oldVal != that.val) {\n                that.oldVal = that.val;\n\n                if (that.type) {\n                    if (that.type == \"firstHandle\") {\n                        if (that.val < that.selectionEnd) {\n                            that.selectionStart = that.val;\n                        } else {\n                            that.selectionStart = that.selectionEnd = that.val;\n                        }\n                    } else {\n                        if (that.val > that.selectionStart) {\n                            that.selectionEnd = that.val;\n                        } else {\n                            that.selectionStart = that.selectionEnd = that.val;\n                        }\n                    }\n                    slideParams = {\n                        values: [that.selectionStart, that.selectionEnd],\n                        value: [that.selectionStart, that.selectionEnd]\n                    };\n                } else {\n                    slideParams = { value: that.val };\n                }\n\n                owner.trigger(SLIDE, slideParams);\n            }\n\n            that._updateTooltip(that.val);\n        },\n\n        _updateTooltip: function(val) {\n            var that = this,\n                options = that.options,\n                tooltip = options.tooltip,\n                html = \"\";\n\n            if (!tooltip.enabled) {\n                return;\n            }\n\n            if (!that.tooltipDiv) {\n                that._createTooltip();\n            }\n\n            html = that.owner._getFormattedValue(round(val), that);\n\n            if (!that.type) {\n                html += that.tooltipInnerDiv;\n            }\n\n            that.tooltipDiv.html(html);\n            that.moveTooltip();\n        },\n\n        dragcancel: function() {\n            this.owner._refresh();\n            $(document.documentElement).css(\"cursor\", \"\");\n            return this._end();\n        },\n\n        dragend: function() {\n            var that = this,\n                owner = that.owner;\n\n            $(document.documentElement).css(\"cursor\", \"\");\n\n            if (that.type) {\n                owner._update(that.selectionStart, that.selectionEnd);\n            } else {\n                owner._update(that.val);\n                that.draggable.userEvents._disposeAll();\n            }\n\n            return that._end();\n        },\n\n        _end: function() {\n            var that = this,\n                owner = that.owner;\n\n            owner._focusWithMouse(that.element);\n\n            owner.element.on(MOUSE_OVER);\n\n            return false;\n        },\n\n        _removeTooltip: function(noAnimation) {\n            var that = this,\n                owner = that.owner;\n\n            if (that.tooltipDiv && owner.options.tooltip.enabled && owner.options.enabled) {\n                if (noAnimation) {\n                    that.tooltipDiv.remove();\n                    that.tooltipDiv = null;\n                } else {\n                    that.tooltipDiv.fadeOut(\"slow\", function(){\n                        $(this).remove();\n                        that.tooltipDiv = null;\n                    });\n                }\n            }\n        },\n\n        moveTooltip: function () {\n            var that = this,\n                owner = that.owner,\n                top = 0,\n                left = 0,\n                element = that.element,\n                offset = kendo.getOffset(element),\n                margin = 8,\n                viewport = $(window),\n                callout = that.tooltipDiv.find(\".k-callout\"),\n                width = that.tooltipDiv.outerWidth(),\n                height = that.tooltipDiv.outerHeight(),\n                dragHandles, sdhOffset, diff, anchorSize;\n\n            if (that.type) {\n                dragHandles = owner.wrapper.find(DRAG_HANDLE);\n                offset = kendo.getOffset(dragHandles.eq(0));\n                sdhOffset = kendo.getOffset(dragHandles.eq(1));\n\n                if (owner._isHorizontal) {\n                    top = sdhOffset.top;\n                    left = offset.left + ((sdhOffset.left - offset.left) / 2);\n                } else {\n                    top = offset.top + ((sdhOffset.top - offset.top) / 2);\n                    left = sdhOffset.left;\n                }\n\n                anchorSize = dragHandles.eq(0).outerWidth() + 2 * margin;\n            } else {\n                top = offset.top;\n                left = offset.left;\n                anchorSize = element.outerWidth() + 2 * margin;\n            }\n\n            if (owner._isHorizontal) {\n                left -= parseInt((width - element[owner._outerSize]()) / 2, 10);\n                top -= height + callout.height() + margin;\n            } else {\n                top -= parseInt((height - element[owner._outerSize]()) / 2, 10);\n                left -= width + callout.width() + margin;\n            }\n\n            if (owner._isHorizontal) {\n                diff = that._flip(top, height, anchorSize, viewport.outerHeight() + that._scrollOffset.top);\n                top += diff;\n                left += that._fit(left, width, viewport.outerWidth() + that._scrollOffset.left);\n            } else {\n                diff = that._flip(left, width, anchorSize, viewport.outerWidth() + that._scrollOffset.left);\n                top += that._fit(top, height, viewport.outerHeight() + that._scrollOffset.top);\n                left += diff;\n            }\n\n            if (diff > 0 && callout) {\n                callout.removeClass();\n                callout.addClass(\"k-callout k-callout-\" + (owner._isHorizontal ? \"n\" : \"w\"));\n            }\n\n            that.tooltipDiv.css({ top: top, left: left });\n        },\n\n        _fit: function(position, size, viewPortEnd) {\n            var output = 0;\n\n            if (position + size > viewPortEnd) {\n                output = viewPortEnd - (position + size);\n            }\n\n            if (position < 0) {\n                output = -position;\n            }\n\n            return output;\n        },\n\n        _flip: function(offset, size, anchorSize, viewPortEnd) {\n            var output = 0;\n\n            if (offset + size > viewPortEnd) {\n                output += -(anchorSize + size);\n            }\n\n            if (offset + output < 0) {\n                output += anchorSize + size;\n            }\n\n            return output;\n        },\n\n        constrainValue: function (position, min, max, maxOverflow) {\n            var that = this,\n                val = 0;\n\n            if (min < position && position < max) {\n                val = that.owner._getValueFromPosition(position, that.dragableArea);\n            } else {\n                if (maxOverflow ) {\n                    val = that.options.max;\n                } else {\n                    val = that.options.min;\n                }\n            }\n\n            return val;\n        }\n\n    };\n\n    kendo.ui.plugin(Slider);\n\n    var RangeSlider = SliderBase.extend({\n        init: function(element, options) {\n            var that = this,\n                inputs = $(element).find(\"input\"),\n                firstInput = inputs.eq(0)[0],\n                secondInput = inputs.eq(1)[0];\n\n            firstInput.type = \"text\";\n            secondInput.type = \"text\";\n\n            options = extend({}, {\n                selectionStart: parseAttr(firstInput, \"value\"),\n                min: parseAttr(firstInput, \"min\"),\n                max: parseAttr(firstInput, \"max\"),\n                smallStep: parseAttr(firstInput, \"step\")\n            }, {\n                selectionEnd: parseAttr(secondInput, \"value\"),\n                min: parseAttr(secondInput, \"min\"),\n                max: parseAttr(secondInput, \"max\"),\n                smallStep: parseAttr(secondInput, \"step\")\n            }, options);\n\n            if (options && options.enabled === undefined) {\n                options.enabled = !inputs.is(\"[disabled]\");\n            }\n\n            SliderBase.fn.init.call(that, element, options);\n            options = that.options;\n            if (!defined(options.selectionStart) || options.selectionStart === null) {\n                options.selectionStart = options.min;\n                inputs.eq(0).prop(\"value\", formatValue(options.min));\n            }\n\n            if (!defined(options.selectionEnd) || options.selectionEnd === null) {\n                options.selectionEnd = options.max;\n                inputs.eq(1).prop(\"value\", formatValue(options.max));\n            }\n\n            var dragHandles = that.wrapper.find(DRAG_HANDLE);\n\n            new RangeSlider.Selection(dragHandles, that, options);\n            that._firstHandleDrag = new Slider.Drag(dragHandles.eq(0), \"firstHandle\", that, options);\n            that._lastHandleDrag = new Slider.Drag(dragHandles.eq(1), \"lastHandle\" , that, options);\n        },\n\n        options: {\n            name: \"RangeSlider\",\n            leftDragHandleTitle: \"drag\",\n            rightDragHandleTitle: \"drag\",\n            tooltip: { format: \"{0:#,#.##}\" },\n            selectionStart: null,\n            selectionEnd: null\n        },\n\n        enable: function (enable) {\n            var that = this,\n                options = that.options,\n                clickHandler;\n\n            that.disable();\n            if (enable === false) {\n                return;\n            }\n\n            that.wrapper\n                .removeClass(STATE_DISABLED)\n                .addClass(STATE_DEFAULT);\n\n            that.wrapper.find(\"input\").removeAttr(DISABLED);\n\n            clickHandler = function (e) {\n                var touch = getTouches(e)[0];\n\n                if (!touch) {\n                    return;\n                }\n\n                var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY,\n                    dragableArea = that._getDraggableArea(),\n                    val = that._getValueFromPosition(mousePosition, dragableArea),\n                    target = $(e.target),\n                    from, to, drag;\n\n                if (target.hasClass(\"k-draghandle\")) {\n                    that.wrapper.find(\".\" + STATE_FOCUSED).removeClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n                    target.addClass(STATE_FOCUSED + \" \" + STATE_SELECTED);\n                    return;\n                }\n\n                if (val < options.selectionStart) {\n                    from = val;\n                    to = options.selectionEnd;\n                    drag = that._firstHandleDrag;\n                } else if (val > that.selectionEnd) {\n                    from = options.selectionStart;\n                    to = val;\n                    drag = that._lastHandleDrag;\n                } else {\n                    if (val - options.selectionStart <= options.selectionEnd - val) {\n                        from = val;\n                        to = options.selectionEnd;\n                        drag = that._firstHandleDrag;\n                    } else {\n                        from = options.selectionStart;\n                        to = val;\n                        drag = that._lastHandleDrag;\n                    }\n                }\n\n                drag.dragstart(e);\n                that._setValueInRange(from, to);\n                that._focusWithMouse(drag.element);\n            };\n\n            that.wrapper\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR)\n                    .on(TRACK_MOUSE_DOWN, clickHandler)\n                    .end()\n                    .on(TRACK_MOUSE_DOWN, function() {\n                        $(document.documentElement).one(\"selectstart\", kendo.preventDefault);\n                    })\n                    .on(TRACK_MOUSE_UP, function() {\n                        if (that._activeDragHandle) {\n                            that._activeDragHandle._end();\n                        }\n                    });\n\n            that.wrapper\n                .find(DRAG_HANDLE)\n                .attr(TABINDEX, 0)\n                .on(MOUSE_UP, function () {\n                    that._setTooltipTimeout();\n                })\n                .on(CLICK, function (e) {\n                    that._focusWithMouse(e.target);\n                    e.preventDefault();\n                })\n                .on(FOCUS, proxy(that._focus, that))\n                .on(BLUR, proxy(that._blur, that));\n\n            that.wrapper.find(DRAG_HANDLE)\n                .off(KEY_DOWN, kendo.preventDefault)\n                .eq(0).on(KEY_DOWN,\n                    proxy(function(e) {\n                        this._keydown(e, \"firstHandle\");\n                    }, that)\n                )\n                .end()\n                .eq(1).on(KEY_DOWN,\n                    proxy(function(e) {\n                        this._keydown(e, \"lastHandle\");\n                    }, that)\n                );\n\n            that.options.enabled = true;\n        },\n\n        disable: function () {\n            var that = this;\n\n            that.wrapper\n                .removeClass(STATE_DEFAULT)\n                .addClass(STATE_DISABLED);\n\n            that.wrapper.find(\"input\").prop(DISABLED, DISABLED);\n\n            that.wrapper\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n\n            that.wrapper\n                .find(DRAG_HANDLE)\n                .attr(TABINDEX, -1)\n                .off(MOUSE_UP)\n                .off(KEY_DOWN)\n                .off(CLICK)\n                .off(FOCUS)\n                .off(BLUR);\n\n            that.options.enabled = false;\n        },\n\n        _keydown: function (e, handle) {\n            var that = this,\n                selectionStartValue = that.options.selectionStart,\n                selectionEndValue = that.options.selectionEnd,\n                dragSelectionStart,\n                dragSelectionEnd,\n                activeHandleDrag;\n\n            if (e.keyCode in that._keyMap) {\n\n                that._clearTooltipTimeout();\n\n                if (handle == \"firstHandle\") {\n                    activeHandleDrag = that._activeHandleDrag = that._firstHandleDrag;\n                    selectionStartValue = that._keyMap[e.keyCode](selectionStartValue);\n\n                    if (selectionStartValue > selectionEndValue) {\n                        selectionEndValue = selectionStartValue;\n                    }\n                } else {\n                    activeHandleDrag = that._activeHandleDrag = that._lastHandleDrag;\n                    selectionEndValue = that._keyMap[e.keyCode](selectionEndValue);\n\n                    if (selectionStartValue > selectionEndValue) {\n                        selectionStartValue = selectionEndValue;\n                    }\n                }\n\n                that._setValueInRange(selectionStartValue, selectionEndValue);\n\n                dragSelectionStart = Math.max(selectionStartValue, that.options.selectionStart);\n                dragSelectionEnd = Math.min(selectionEndValue, that.options.selectionEnd);\n\n                activeHandleDrag.selectionEnd = Math.max(dragSelectionEnd, that.options.selectionStart);\n                activeHandleDrag.selectionStart = Math.min(dragSelectionStart, that.options.selectionEnd);\n\n                activeHandleDrag._updateTooltip(that.value()[that._activeHandle]);\n\n                e.preventDefault();\n            }\n        },\n\n        _update: function (selectionStart, selectionEnd) {\n            var that = this,\n                values = that.value();\n\n            var change = values[0] != selectionStart || values[1] != selectionEnd;\n\n            that.value([selectionStart, selectionEnd]);\n\n            if (change) {\n                that.trigger(CHANGE, {\n                    values: [selectionStart, selectionEnd],\n                    value: [selectionStart, selectionEnd]\n                });\n            }\n        },\n\n        value: function(value) {\n            if (value && value.length) {\n                return this._value(value[0], value[1]);\n            } else {\n                return this._value();\n            }\n        },\n\n        _value: function(start, end) {\n            var that = this,\n                options = that.options,\n                selectionStart = options.selectionStart,\n                selectionEnd = options.selectionEnd;\n\n            if (isNaN(start) && isNaN(end)) {\n                return [selectionStart, selectionEnd];\n            } else {\n                start = round(start);\n                end = round(end);\n            }\n\n            if (start >= options.min && start <= options.max &&\n                end >= options.min && end <= options.max && start <= end) {\n                if (selectionStart != start || selectionEnd != end) {\n                    that.element.find(\"input\")\n                        .eq(0).prop(\"value\", formatValue(start))\n                        .end()\n                        .eq(1).prop(\"value\", formatValue(end));\n\n                    options.selectionStart = start;\n                    options.selectionEnd = end;\n                    that._refresh();\n                    that._refreshAriaAttr(start, end);\n                }\n            }\n        },\n\n        values: function (start, end) {\n            if (isArray(start)) {\n                return this._value(start[0], start[1]);\n            } else {\n                return this._value(start, end);\n            }\n        },\n\n        _refresh: function() {\n            var that = this,\n                options = that.options;\n\n            that.trigger(MOVE_SELECTION, {\n                values: [options.selectionStart, options.selectionEnd],\n                value: [options.selectionStart, options.selectionEnd]\n            });\n\n            if (options.selectionStart == options.max && options.selectionEnd == options.max) {\n                that._setZIndex(\"firstHandle\");\n            }\n        },\n\n        _refreshAriaAttr: function(start, end) {\n            var that = this,\n                dragHandles = that.wrapper.find(DRAG_HANDLE),\n                drag = that._activeHandleDrag,\n                formattedValue;\n\n            formattedValue = that._getFormattedValue([start, end], drag);\n\n            dragHandles.eq(0).attr(\"aria-valuenow\", start);\n            dragHandles.eq(1).attr(\"aria-valuenow\", end);\n            dragHandles.attr(\"aria-valuetext\", formattedValue);\n        },\n\n        _setValueInRange: function (selectionStart, selectionEnd) {\n            var options = this.options;\n\n            selectionStart = math.max(math.min(selectionStart, options.max), options.min);\n\n            selectionEnd = math.max(math.min(selectionEnd, options.max), options.min);\n\n            if (selectionStart == options.max && selectionEnd == options.max) {\n                this._setZIndex(\"firstHandle\");\n            }\n\n            this._update(math.min(selectionStart, selectionEnd), math.max(selectionStart, selectionEnd));\n        },\n\n        _setZIndex: function (type) {\n            this.wrapper.find(DRAG_HANDLE).each(function (index) {\n                $(this).css(\"z-index\", type == \"firstHandle\" ? 1 - index : index);\n            });\n        },\n\n        _formResetHandler: function () {\n            var that = this,\n                options = that.options;\n\n            setTimeout(function () {\n                var inputs = that.element.find(\"input\");\n                var start = inputs[0].value;\n                var end = inputs[1].value;\n                that.values(start === \"\" || isNaN(start) ? options.min : start, end === \"\" || isNaN(end) ? options.max : end);\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            SliderBase.fn.destroy.call(that);\n\n            that.wrapper.off(NS)\n                .find(TICK_SELECTOR + \", \" + TRACK_SELECTOR).off(NS)\n                .end()\n                .find(DRAG_HANDLE).off(NS);\n\n            that._firstHandleDrag.draggable.destroy();\n            that._lastHandleDrag.draggable.destroy();\n        }\n    });\n\n    RangeSlider.Selection = function (dragHandles, that, options) {\n        function moveSelection(value) {\n            value = value || [];\n            var selectionStartValue = value[0] - options.min,\n                selectionEndValue = value[1] - options.min,\n                selectionStartIndex = math.ceil(round(selectionStartValue / options.smallStep)),\n                selectionEndIndex = math.ceil(round(selectionEndValue / options.smallStep)),\n                selectionStart = that._pixelSteps[selectionStartIndex],\n                selectionEnd = that._pixelSteps[selectionEndIndex],\n                halfHandle = parseInt(dragHandles.eq(0)[that._outerSize]() / 2, 10),\n                rtlCorrection = that._isRtl ? 2 : 0;\n\n            dragHandles.eq(0).css(that._position, selectionStart - halfHandle - rtlCorrection)\n                       .end()\n                       .eq(1).css(that._position, selectionEnd - halfHandle - rtlCorrection);\n\n            makeSelection(selectionStart, selectionEnd);\n        }\n\n        function makeSelection(selectionStart, selectionEnd) {\n            var selection,\n                selectionPosition,\n                selectionDiv = that._trackDiv.find(\".k-slider-selection\");\n\n            selection = math.abs(selectionStart - selectionEnd);\n\n            selectionDiv[that._sizeFn](selection);\n            if (that._isRtl) {\n                selectionPosition = math.max(selectionStart, selectionEnd);\n                selectionDiv.css(\"right\", that._maxSelection - selectionPosition - 1);\n            } else {\n                selectionPosition = math.min(selectionStart, selectionEnd);\n                selectionDiv.css(that._position, selectionPosition - 1);\n            }\n        }\n\n        moveSelection(that.value());\n\n        that.bind([ CHANGE, SLIDE, MOVE_SELECTION ], function (e) {\n            moveSelection(e.values);\n        });\n    };\n\n    kendo.ui.plugin(RangeSlider);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, parseInt, undefined){\n    // WARNING: removing the following jshint declaration and turning\n    // == into === to make JSHint happy will break functionality.\n    /*jshint eqnull:true  */\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        parseColor = kendo.parseColor,\n        Color = kendo.Color,\n        KEYS = kendo.keys,\n        BACKGROUNDCOLOR = \"background-color\",\n        ITEMSELECTEDCLASS = \"k-state-selected\",\n        SIMPLEPALETTE = \"000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7\",\n        WEBPALETTE = \"FFFFFF,FFCCFF,FF99FF,FF66FF,FF33FF,FF00FF,CCFFFF,CCCCFF,CC99FF,CC66FF,CC33FF,CC00FF,99FFFF,99CCFF,9999FF,9966FF,9933FF,9900FF,FFFFCC,FFCCCC,FF99CC,FF66CC,FF33CC,FF00CC,CCFFCC,CCCCCC,CC99CC,CC66CC,CC33CC,CC00CC,99FFCC,99CCCC,9999CC,9966CC,9933CC,9900CC,FFFF99,FFCC99,FF9999,FF6699,FF3399,FF0099,CCFF99,CCCC99,CC9999,CC6699,CC3399,CC0099,99FF99,99CC99,999999,996699,993399,990099,FFFF66,FFCC66,FF9966,FF6666,FF3366,FF0066,CCFF66,CCCC66,CC9966,CC6666,CC3366,CC0066,99FF66,99CC66,999966,996666,993366,990066,FFFF33,FFCC33,FF9933,FF6633,FF3333,FF0033,CCFF33,CCCC33,CC9933,CC6633,CC3333,CC0033,99FF33,99CC33,999933,996633,993333,990033,FFFF00,FFCC00,FF9900,FF6600,FF3300,FF0000,CCFF00,CCCC00,CC9900,CC6600,CC3300,CC0000,99FF00,99CC00,999900,996600,993300,990000,66FFFF,66CCFF,6699FF,6666FF,6633FF,6600FF,33FFFF,33CCFF,3399FF,3366FF,3333FF,3300FF,00FFFF,00CCFF,0099FF,0066FF,0033FF,0000FF,66FFCC,66CCCC,6699CC,6666CC,6633CC,6600CC,33FFCC,33CCCC,3399CC,3366CC,3333CC,3300CC,00FFCC,00CCCC,0099CC,0066CC,0033CC,0000CC,66FF99,66CC99,669999,666699,663399,660099,33FF99,33CC99,339999,336699,333399,330099,00FF99,00CC99,009999,006699,003399,000099,66FF66,66CC66,669966,666666,663366,660066,33FF66,33CC66,339966,336666,333366,330066,00FF66,00CC66,009966,006666,003366,000066,66FF33,66CC33,669933,666633,663333,660033,33FF33,33CC33,339933,336633,333333,330033,00FF33,00CC33,009933,006633,003333,000033,66FF00,66CC00,669900,666600,663300,660000,33FF00,33CC00,339900,336600,333300,330000,00FF00,00CC00,009900,006600,003300,000000\",\n        APPLY_CANCEL = {\n            apply  : \"Apply\",\n            cancel : \"Cancel\"\n        },\n        NS = \".kendoColorTools\",\n        CLICK_NS = \"click\" + NS,\n        KEYDOWN_NS = \"keydown\" + NS,\n\n        browser = kendo.support.browser,\n        isIE8 = browser.msie && browser.version < 9;\n\n    var ColorSelector = Widget.extend({\n        init: function(element, options) {\n            var that = this, ariaId;\n\n            Widget.fn.init.call(that, element, options);\n            element = that.element;\n            options = that.options;\n            that._value = options.value = parseColor(options.value);\n            that._tabIndex = element.attr(\"tabIndex\") || 0;\n\n            ariaId = that._ariaId = options.ariaId;\n            if (ariaId) {\n                element.attr(\"aria-labelledby\", ariaId);\n            }\n\n            if (options._standalone) {\n                that._triggerSelect = that._triggerChange;\n            }\n        },\n        options: {\n            name: \"ColorSelector\",\n            value: null,\n            _standalone: true\n        },\n        events: [\n            \"change\",\n            \"select\",\n            \"cancel\"\n        ],\n        color: function(value) {\n            if (value !== undefined) {\n                this._value = parseColor(value);\n                this._updateUI(this._value);\n            }\n\n            return this._value;\n        },\n        value: function(color) {\n            color = this.color(color);\n\n            if (color) {\n                if (this.options.opacity) {\n                    color = color.toCssRgba();\n                } else {\n                    color = color.toCss();\n                }\n            }\n\n            return color || null;\n        },\n        enable: function(enable) {\n            if (arguments.length === 0) {\n                enable = true;\n            }\n            $(\".k-disabled-overlay\", this.wrapper).remove();\n            if (!enable) {\n                this.wrapper.append(\"<div class='k-disabled-overlay'></div>\");\n            }\n            this._onEnable(enable);\n        },\n        _select: function(color, nohooks) {\n            var prev = this._value;\n            color = this.color(color);\n            if (!nohooks) {\n                this.element.trigger(\"change\");\n                if (!color.equals(prev)) {\n                    this.trigger(\"change\", { value: this.value() });\n                } else if (!this._standalone) {\n                    this.trigger(\"cancel\");\n                }\n            }\n        },\n        _triggerSelect: function(color) {\n            triggerEvent(this, \"select\", color);\n        },\n        _triggerChange: function(color) {\n            triggerEvent(this, \"change\", color);\n        },\n        destroy: function() {\n            if (this.element) {\n                this.element.off(NS);\n            }\n            if (this.wrapper) {\n                this.wrapper.off(NS).find(\"*\").off(NS);\n            }\n            this.wrapper = null;\n            Widget.fn.destroy.call(this);\n        },\n        _updateUI: $.noop,\n        _selectOnHide: function() {\n            return null;\n        },\n        _cancel: function() {\n            this.trigger(\"cancel\");\n        }\n    });\n\n    function triggerEvent(self, type, color) {\n        color = parseColor(color);\n        if (color && !color.equals(self.color())) {\n            if (type == \"change\") {\n                // UI is already updated.  setting _value directly\n                // rather than calling self.color(color) to avoid an\n                // endless loop.\n                self._value = color;\n            }\n            if (color.a != 1) {\n                color = color.toCssRgba();\n            } else {\n                color = color.toCss();\n            }\n            self.trigger(type, { value: color });\n        }\n    }\n\n    var ColorPalette = ColorSelector.extend({\n        init: function(element, options) {\n            var that = this;\n            ColorSelector.fn.init.call(that, element, options);\n            element = that.wrapper = that.element;\n            options = that.options;\n            var colors = options.palette;\n\n            if (colors == \"websafe\") {\n                colors = WEBPALETTE;\n                options.columns = 18;\n            } else if (colors == \"basic\") {\n                colors = SIMPLEPALETTE;\n            }\n\n            if (typeof colors == \"string\") {\n                colors = colors.split(\",\");\n            }\n\n            if ($.isArray(colors)) {\n                colors = $.map(colors, function(x) { return parseColor(x); });\n            }\n\n            that._selectedID = (options.ariaId || kendo.guid()) + \"_selected\";\n\n            element.addClass(\"k-widget k-colorpalette\")\n                .attr(\"role\", \"grid\")\n                .attr(\"aria-readonly\", \"true\")\n                .append($(that._template({\n                    colors   : colors,\n                    columns  : options.columns,\n                    tileSize : options.tileSize,\n                    value    : that._value,\n                    id       : options.ariaId\n                })))\n                .on(CLICK_NS, \".k-item\", function(ev){\n                    that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n                })\n                .attr(\"tabIndex\", that._tabIndex)\n                .on(KEYDOWN_NS, bind(that._keydown, that));\n\n            var tileSize = options.tileSize, width, height;\n            if (tileSize) {\n                if (/number|string/.test(typeof tileSize)) {\n                    width = height = parseFloat(tileSize);\n                } else if (typeof tileSize == \"object\") {\n                    width = parseFloat(tileSize.width);\n                    height = parseFloat(tileSize.height);\n                } else {\n                    throw new Error(\"Unsupported value for the 'tileSize' argument\");\n                }\n                element.find(\".k-item\").css({ width: width, height: height });\n            }\n        },\n        focus: function(){\n            this.wrapper.focus();\n        },\n        options: {\n            name: \"ColorPalette\",\n            columns: 10,\n            tileSize: null,\n            palette: \"basic\"\n        },\n        _onEnable: function(enable) {\n            if (enable) {\n                this.wrapper.attr(\"tabIndex\", this._tabIndex);\n            } else {\n                this.wrapper.removeAttr(\"tabIndex\");\n            }\n        },\n        _keydown: function(e) {\n            var selected,\n                wrapper = this.wrapper,\n                items = wrapper.find(\".k-item\"),\n                current = items.filter(\".\" + ITEMSELECTEDCLASS).get(0),\n                keyCode = e.keyCode;\n\n            if (keyCode == KEYS.LEFT) {\n                selected = relative(items, current, -1);\n            } else if (keyCode == KEYS.RIGHT) {\n                selected = relative(items, current, 1);\n            } else if (keyCode == KEYS.DOWN) {\n                selected = relative(items, current, this.options.columns);\n            } else if (keyCode == KEYS.UP) {\n                selected = relative(items, current, -this.options.columns);\n            } else if (keyCode == KEYS.ENTER) {\n                preventDefault(e);\n                if (current) {\n                    this._select($(current).css(BACKGROUNDCOLOR));\n                }\n            } else if (keyCode == KEYS.ESC) {\n                this._cancel();\n            }\n\n            if (selected) {\n                preventDefault(e);\n\n                this._current(selected);\n\n                try {\n                    var color = parseColor(selected.css(BACKGROUNDCOLOR));\n                    this._triggerSelect(color);\n                } catch(ex) {}\n            }\n        },\n        _current: function(item) {\n            this.wrapper.find(\".\" + ITEMSELECTEDCLASS)\n                .removeClass(ITEMSELECTEDCLASS)\n                .attr(\"aria-selected\", false)\n                .removeAttr(\"id\");\n\n            $(item)\n                .addClass(ITEMSELECTEDCLASS)\n                .attr(\"aria-selected\", true)\n                .attr(\"id\", this._selectedID);\n\n            this.element\n                .removeAttr(\"aria-activedescendant\")\n                .attr(\"aria-activedescendant\", this._selectedID);\n        },\n        _updateUI: function(color) {\n            var item = null;\n\n            this.wrapper.find(\".k-item\").each(function(){\n                var c = parseColor($(this).css(BACKGROUNDCOLOR));\n\n                if (c && c.equals(color)) {\n                    item = this;\n\n                    return false;\n                }\n            });\n\n            this._current(item);\n        },\n        _template: kendo.template(\n            '<table class=\"k-palette k-reset\" role=\"presentation\"><tr role=\"row\">' +\n              '# for (var i = 0; i < colors.length; ++i) { #' +\n                '# var selected = colors[i].equals(value); #' +\n                '# if (i && i % columns == 0) { # </tr><tr role=\"row\"> # } #' +\n                '<td role=\"gridcell\" unselectable=\"on\" style=\"background-color:#= colors[i].toCss() #\"' +\n                    '#= selected ? \" aria-selected=true\" : \"\" # ' +\n                    '#=(id && i === 0) ? \"id=\\\\\"\"+id+\"\\\\\" \" : \"\" # ' +\n                    'class=\"k-item#= selected ? \" ' + ITEMSELECTEDCLASS + '\" : \"\" #\" ' +\n                    'aria-label=\"#= colors[i].toCss() #\"></td>' +\n              '# } #' +\n            '</tr></table>'\n        )\n    });\n\n    var FlatColorPicker = ColorSelector.extend({\n        init: function(element, options) {\n            var that = this;\n            ColorSelector.fn.init.call(that, element, options);\n            options = that.options;\n            element = that.element;\n\n            that.wrapper = element.addClass(\"k-widget k-flatcolorpicker\")\n                .append(that._template(options));\n\n            that._hueElements = $(\".k-hsv-rectangle, .k-transparency-slider .k-slider-track\", element);\n\n            that._selectedColor = $(\".k-selected-color-display\", element);\n\n            that._colorAsText = $(\"input.k-color-value\", element);\n\n            that._sliders();\n\n            that._hsvArea();\n\n            that._updateUI(that._value || parseColor(\"#f00\"));\n\n            element\n                .find(\"input.k-color-value\").on(KEYDOWN_NS, function(ev){\n                    var input = this;\n                    if (ev.keyCode == KEYS.ENTER) {\n                        try {\n                            var color = parseColor(input.value);\n                            var val = that.color();\n                            that._select(color, color.equals(val));\n                        } catch(ex) {\n                            $(input).addClass(\"k-state-error\");\n                        }\n                    } else if (that.options.autoupdate) {\n                        setTimeout(function(){\n                            var color = parseColor(input.value, true);\n                            if (color) {\n                                that._updateUI(color, true);\n                            }\n                        }, 10);\n                    }\n                }).end()\n\n                .on(CLICK_NS, \".k-controls button.apply\", function(){\n                    // calling select for the currently displayed\n                    // color will trigger the \"change\" event.\n                    that._select(that._getHSV());\n                })\n                .on(CLICK_NS, \".k-controls button.cancel\", function(){\n                    // but on cancel, we simply select the previous\n                    // value (again, triggers \"change\" event).\n                    that._updateUI(that.color());\n                    that._cancel();\n                });\n\n            if (isIE8) {\n                // IE filters require absolute URLs\n                that._applyIEFilter();\n            }\n        },\n        destroy: function() {\n            this._hueSlider.destroy();\n            if (this._opacitySlider) {\n                this._opacitySlider.destroy();\n            }\n            this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle =\n                this._hueElements = this._selectedColor = this._colorAsText = null;\n            ColorSelector.fn.destroy.call(this);\n        },\n        options: {\n            name       : \"FlatColorPicker\",\n            opacity    : false,\n            buttons    : false,\n            input      : true,\n            preview    : true,\n            autoupdate : true,\n            messages   : APPLY_CANCEL\n        },\n        _applyIEFilter: function() {\n            var track = this.element.find(\".k-hue-slider .k-slider-track\")[0],\n                url = track.currentStyle.backgroundImage;\n\n            url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, \"\");\n            track.style.filter = \"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='\" + url + \"', sizingMethod='scale')\";\n        },\n        _sliders: function() {\n            var that = this,\n                element = that.element;\n\n            function hueChange(e) {\n                that._updateUI(that._getHSV(e.value, null, null, null));\n            }\n\n            that._hueSlider = element.find(\".k-hue-slider\").kendoSlider({\n                min: 0,\n                max: 359,\n                tickPlacement: \"none\",\n                showButtons: false,\n                slide: hueChange,\n                change: hueChange\n            }).data(\"kendoSlider\");\n\n            function opacityChange(e) {\n                that._updateUI(that._getHSV(null, null, null, e.value / 100));\n            }\n\n            that._opacitySlider = element.find(\".k-transparency-slider\").kendoSlider({\n                min: 0,\n                max: 100,\n                tickPlacement: \"none\",\n                showButtons: false,\n                slide: opacityChange,\n                change: opacityChange\n            }).data(\"kendoSlider\");\n        },\n        _hsvArea: function() {\n            var that = this,\n                element = that.element,\n                hsvRect = element.find(\".k-hsv-rectangle\"),\n                hsvHandle = hsvRect.find(\".k-draghandle\").attr(\"tabIndex\", 0).on(KEYDOWN_NS, bind(that._keydown, that));\n\n            function update(x, y) {\n                var offset = this.offset,\n                    dx = x - offset.left, dy = y - offset.top,\n                    rw = this.width, rh = this.height;\n\n                dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n                dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n                that._svChange(dx / rw, 1 - dy / rh);\n            }\n\n            that._hsvEvents = new kendo.UserEvents(hsvRect, {\n                global: true,\n                press: function(e) {\n                    this.offset = kendo.getOffset(hsvRect);\n                    this.width = hsvRect.width();\n                    this.height = hsvRect.height();\n                    hsvHandle.focus();\n                    update.call(this, e.x.location, e.y.location);\n                },\n                start: function() {\n                    hsvRect.addClass(\"k-dragging\");\n                    hsvHandle.focus();\n                },\n                move: function(e) {\n                    e.preventDefault();\n                    update.call(this, e.x.location, e.y.location);\n                },\n                end: function() {\n                    hsvRect.removeClass(\"k-dragging\");\n                }\n            });\n\n            that._hsvRect = hsvRect;\n            that._hsvHandle = hsvHandle;\n        },\n        _onEnable: function(enable) {\n            this._hueSlider.enable(enable);\n\n            if (this._opacitySlider) {\n                this._opacitySlider.enable(enable);\n            }\n\n            this.wrapper.find(\"input\").attr(\"disabled\", !enable);\n\n            var handle = this._hsvRect.find(\".k-draghandle\");\n\n            if (enable) {\n                handle.attr(\"tabIndex\", this._tabIndex);\n            } else {\n                handle.removeAttr(\"tabIndex\");\n            }\n        },\n        _keydown: function(ev) {\n            var that = this;\n            function move(prop, d) {\n                var c = that._getHSV();\n                c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n                if (c[prop] < 0) { c[prop] = 0; }\n                if (c[prop] > 1) { c[prop] = 1; }\n                that._updateUI(c);\n                preventDefault(ev);\n            }\n            function hue(d) {\n                var c = that._getHSV();\n                c.h += d * (ev.shiftKey ? 1 : 5);\n                if (c.h < 0) { c.h = 0; }\n                if (c.h > 359) { c.h = 359; }\n                that._updateUI(c);\n                preventDefault(ev);\n            }\n            switch (ev.keyCode) {\n              case KEYS.LEFT:\n                if (ev.ctrlKey) {\n                    hue(-1);\n                } else {\n                    move(\"s\", -1);\n                }\n                break;\n              case KEYS.RIGHT:\n                if (ev.ctrlKey) {\n                    hue(1);\n                } else {\n                    move(\"s\", 1);\n                }\n                break;\n              case KEYS.UP:\n                move(ev.ctrlKey && that._opacitySlider ? \"a\" : \"v\", 1);\n                break;\n              case KEYS.DOWN:\n                move(ev.ctrlKey && that._opacitySlider ? \"a\" : \"v\", -1);\n                break;\n              case KEYS.ENTER:\n                that._select(that._getHSV());\n                break;\n              case KEYS.F2:\n                that.wrapper.find(\"input.k-color-value\").focus().select();\n                break;\n              case KEYS.ESC:\n                that._cancel();\n                break;\n            }\n        },\n        focus: function() {\n            this._hsvHandle.focus();\n        },\n        _getHSV: function(h, s, v, a) {\n            var rect = this._hsvRect,\n                width = rect.width(),\n                height = rect.height(),\n                handlePosition = this._hsvHandle.position();\n\n            if (h == null) {\n                h = this._hueSlider.value();\n            }\n            if (s == null) {\n                s = handlePosition.left / width;\n            }\n            if (v == null) {\n                v = 1 - handlePosition.top / height;\n            }\n            if (a == null) {\n                a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n            }\n            return Color.fromHSV(h, s, v, a);\n        },\n        _svChange: function(s, v) {\n            var color = this._getHSV(null, s, v, null);\n            this._updateUI(color);\n        },\n        _updateUI: function(color, dontChangeInput) {\n            var that = this,\n                rect = that._hsvRect;\n\n            if (!color) {\n                return;\n            }\n\n            this._colorAsText.removeClass(\"k-state-error\");\n\n            that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n            if (!dontChangeInput) {\n                that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n            }\n            that._triggerSelect(color);\n\n            color = color.toHSV();\n            that._hsvHandle.css({\n                // saturation is 0 on the left side, full (1) on the right\n                left: color.s * rect.width() + \"px\",\n                // value is 0 on the bottom, full on the top.\n                top: (1 - color.v) * rect.height() + \"px\"\n            });\n\n            that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n            that._hueSlider.value(color.h);\n\n            if (that._opacitySlider) {\n                that._opacitySlider.value(100 * color.a);\n            }\n        },\n        _selectOnHide: function() {\n            return this.options.buttons ? null : this._getHSV();\n        },\n        _template: kendo.template(\n            '# if (preview) { #' +\n                '<div class=\"k-selected-color\"><div class=\"k-selected-color-display\"><input class=\"k-color-value\" #= !data.input ? \\'style=\\\"visibility: hidden;\\\"\\' : \\\"\\\" #></div></div>' +\n            '# } #' +\n            '<div class=\"k-hsv-rectangle\"><div class=\"k-hsv-gradient\"></div><div class=\"k-draghandle\"></div></div>' +\n            '<input class=\"k-hue-slider\" />' +\n            '# if (opacity) { #' +\n                '<input class=\"k-transparency-slider\" />' +\n            '# } #' +\n            '# if (buttons) { #' +\n                '<div unselectable=\"on\" class=\"k-controls\"><button class=\"k-button k-primary apply\">#: messages.apply #</button> <button class=\"k-button cancel\">#: messages.cancel #</button></div>' +\n            '# } #'\n        )\n    });\n\n    function relative(array, element, delta) {\n        array = Array.prototype.slice.call(array);\n        var n = array.length;\n        var pos = array.indexOf(element);\n        if (pos < 0) {\n            return delta < 0 ? array[n - 1] : array[0];\n        }\n        pos += delta;\n        if (pos < 0) {\n            pos += n;\n        } else {\n            pos %= n;\n        }\n        return array[pos];\n    }\n\n    /* -----[ The ColorPicker widget ]----- */\n\n    var ColorPicker = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n            Widget.fn.init.call(that, element, options);\n            options = that.options;\n            element = that.element;\n\n            var value = element.attr(\"value\") || element.val();\n            if (value) {\n                value = parseColor(value, true);\n            } else {\n                value = parseColor(options.value, true);\n            }\n            that._value = options.value = value;\n\n            var content = that.wrapper = $(that._template(options));\n            element.hide().after(content);\n\n            if (element.is(\"input\")) {\n                element.appendTo(content);\n\n                // if there exists a <label> associated with this\n                // input field, we must catch clicks on it to prevent\n                // the built-in color picker from showing up.\n                // https://github.com/telerik/kendo-ui-core/issues/292\n\n                var label = element.closest(\"label\");\n                var id = element.attr(\"id\");\n                if (id) {\n                    label = label.add('label[for=\"' + id + '\"]');\n                }\n                label.click(function(ev){\n                    that.open();\n                    ev.preventDefault();\n                });\n            }\n\n            that._tabIndex = element.attr(\"tabIndex\") || 0;\n\n            that.enable(!element.attr(\"disabled\"));\n\n            var accesskey = element.attr(\"accesskey\");\n            if (accesskey) {\n                element.attr(\"accesskey\", null);\n                content.attr(\"accesskey\", accesskey);\n            }\n\n            that.bind(\"activate\", function(ev){\n                if (!ev.isDefaultPrevented()) {\n                    that.toggle();\n                }\n            });\n\n            that._updateUI(value);\n        },\n        destroy: function() {\n            this.wrapper.off(NS).find(\"*\").off(NS);\n            if (this._popup) {\n                this._selector.destroy();\n                this._popup.destroy();\n            }\n            this._selector = this._popup = this.wrapper = null;\n            Widget.fn.destroy.call(this);\n        },\n        enable: function(enable) {\n            var that = this,\n                wrapper = that.wrapper,\n                innerWrapper = wrapper.children(\".k-picker-wrap\"),\n                icon = innerWrapper.find(\".k-select\");\n\n            if (arguments.length === 0) {\n                enable = true;\n            }\n\n            that.element.attr(\"disabled\", !enable);\n            wrapper.attr(\"aria-disabled\", !enable);\n\n            icon.off(NS).on(\"mousedown\" + NS, preventDefault);\n\n            wrapper.addClass(\"k-state-disabled\")\n                .removeAttr(\"tabIndex\")\n                .add(\"*\", wrapper).off(NS);\n\n            if (enable) {\n                wrapper.removeClass(\"k-state-disabled\")\n                    .attr(\"tabIndex\", that._tabIndex)\n                    .on(\"mouseenter\" + NS, function() { innerWrapper.addClass(\"k-state-hover\"); })\n                    .on(\"mouseleave\" + NS, function() { innerWrapper.removeClass(\"k-state-hover\"); })\n                    .on(\"focus\" + NS, function () { innerWrapper.addClass(\"k-state-focused\"); })\n                    .on(\"blur\" + NS, function () { innerWrapper.removeClass(\"k-state-focused\"); })\n                    .on(KEYDOWN_NS, bind(that._keydown, that))\n                    .on(CLICK_NS, \".k-icon\", bind(that.toggle, that))\n                    .on(CLICK_NS, that.options.toolIcon ? \".k-tool-icon\" : \".k-selected-color\", function(){\n                        that.trigger(\"activate\");\n                    });\n            }\n        },\n\n        _template: kendo.template(\n            '<span role=\"textbox\" aria-haspopup=\"true\" class=\"k-widget k-colorpicker k-header\">' +\n                '<span class=\"k-picker-wrap k-state-default\">' +\n                    '# if (toolIcon) { #' +\n                        '<span class=\"k-tool-icon #= toolIcon #\">' +\n                            '<span class=\"k-selected-color\"></span>' +\n                        '</span>' +\n                    '# } else { #' +\n                        '<span class=\"k-selected-color\"></span>' +\n                    '# } #' +\n                    '<span class=\"k-select\" unselectable=\"on\">' +\n                        '<span class=\"k-icon k-i-arrow-s\" unselectable=\"on\"></span>' +\n                    '</span>' +\n                '</span>' +\n            '</span>'\n        ),\n\n        options: {\n            name: \"ColorPicker\",\n            palette: null,\n            columns: 10,\n            toolIcon: null,\n            value: null,\n            messages: APPLY_CANCEL,\n            opacity: false,\n            buttons: true,\n            preview: true,\n            ARIATemplate: 'Current selected color is #=data || \"\"#'\n        },\n\n        events: [ \"activate\", \"change\", \"select\", \"open\", \"close\" ],\n\n        open: function() {\n            this._getPopup().open();\n        },\n        close: function() {\n            this._getPopup().close();\n        },\n        toggle: function() {\n            this._getPopup().toggle();\n        },\n        color: ColorSelector.fn.color,\n        value: ColorSelector.fn.value,\n        _select: ColorSelector.fn._select,\n        _triggerSelect: ColorSelector.fn._triggerSelect,\n        _isInputTypeColor: function() {\n            var el = this.element[0];\n            return (/^input$/i).test(el.tagName) && (/^color$/i).test(el.type);\n        },\n\n        _updateUI: function(value) {\n            var formattedValue = \"\";\n\n            if (value) {\n                if (this._isInputTypeColor() || value.a == 1) {\n                    // seems that input type=\"color\" doesn't support opacity\n                    // in colors; the only accepted format is hex #RRGGBB\n                    formattedValue = value.toCss();\n                } else {\n                    formattedValue = value.toCssRgba();\n                }\n\n                this.element.val(formattedValue);\n            }\n\n            if (!this._ariaTemplate) {\n                this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n            }\n\n            this.wrapper.attr(\"aria-label\", this._ariaTemplate(formattedValue));\n\n            this._triggerSelect(value);\n            this.wrapper.find(\".k-selected-color\").css(\n                BACKGROUNDCOLOR,\n                value ? value.toDisplay() : \"transparent\"\n            );\n        },\n        _keydown: function(ev) {\n            var key = ev.keyCode;\n            if (this._getPopup().visible()) {\n                if (key == KEYS.ESC) {\n                    this._selector._cancel();\n                } else {\n                    this._selector._keydown(ev);\n                }\n                preventDefault(ev);\n            }\n            else if (key == KEYS.ENTER || key == KEYS.DOWN) {\n                this.open();\n                preventDefault(ev);\n            }\n        },\n        _getPopup: function() {\n            var that = this, popup = that._popup;\n\n            if (!popup) {\n                var options = that.options;\n                var selectorType;\n\n                if (options.palette) {\n                    selectorType = ColorPalette;\n                } else {\n                    selectorType = FlatColorPicker;\n                }\n\n                options._standalone = false;\n                delete options.select;\n                delete options.change;\n                delete options.cancel;\n\n                var id = kendo.guid();\n                var selector = that._selector = new selectorType($('<div id=\"' + id +'\"/>').appendTo(document.body), options);\n\n                that.wrapper.attr(\"aria-owns\", id);\n\n                that._popup = popup = selector.wrapper.kendoPopup({\n                    anchor: that.wrapper,\n                    adjustSize: { width: 5, height: 0 }\n                }).data(\"kendoPopup\");\n\n                selector.bind({\n                    select: function(ev){\n                        that._updateUI(parseColor(ev.value));\n                    },\n                    change: function(){\n                        that._select(selector.color());\n                        that.close();\n                    },\n                    cancel: function() {\n                        that.close();\n                    }\n                });\n                popup.bind({\n                    close: function(ev){\n                        if (that.trigger(\"close\")) {\n                            ev.preventDefault();\n                            return;\n                        }\n                        that.wrapper.children(\".k-picker-wrap\").removeClass(\"k-state-focused\");\n                        var color = selector._selectOnHide();\n                        if (!color) {\n                            that.wrapper.focus();\n                            that._updateUI(that.color());\n                        } else {\n                            that._select(color);\n                        }\n                    },\n                    open: function(ev) {\n                        if (that.trigger(\"open\")) {\n                            ev.preventDefault();\n                        } else {\n                            that.wrapper.children(\".k-picker-wrap\").addClass(\"k-state-focused\");\n                        }\n                    },\n                    activate: function(){\n                        selector._select(that.color(), true);\n                        selector.focus();\n                        that.wrapper.children(\".k-picker-wrap\").addClass(\"k-state-focused\");\n                    }\n                });\n            }\n            return popup;\n        }\n    });\n\n    function preventDefault(ev) { ev.preventDefault(); }\n\n    function bind(callback, obj) {\n        return function() {\n            return callback.apply(obj, arguments);\n        };\n    }\n\n    ui.plugin(ColorPalette);\n    ui.plugin(FlatColorPicker);\n    ui.plugin(ColorPicker);\n\n})(jQuery, parseInt);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        caret = kendo.caret,\n        keys = kendo.keys,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        activeElement = kendo._activeElement,\n        extractFormat = kendo._extractFormat,\n        parse = kendo.parseFloat,\n        placeholderSupported = kendo.support.placeholder,\n        getCulture = kendo.getCulture,\n        round = kendo._round,\n        CHANGE = \"change\",\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        INPUT = \"k-input\",\n        SPIN = \"spin\",\n        ns = \".kendoNumericTextBox\",\n        TOUCHEND = \"touchend\",\n        MOUSELEAVE = \"mouseleave\" + ns,\n        HOVEREVENTS = \"mouseenter\" + ns + \" \" + MOUSELEAVE,\n        DEFAULT = \"k-state-default\",\n        FOCUSED = \"k-state-focused\",\n        HOVER = \"k-state-hover\",\n        FOCUS = \"focus\",\n        POINT = \".\",\n        SELECTED = \"k-state-selected\",\n        STATEDISABLED = \"k-state-disabled\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        INTEGER_REGEXP = /^(-)?(\\d*)$/,\n        NULL = null,\n        proxy = $.proxy;\n\n    var NumericTextBox = Widget.extend({\n         init: function(element, options) {\n             var that = this,\n             isStep = options && options.step !== undefined,\n             min, max, step, value, disabled;\n\n             Widget.fn.init.call(that, element, options);\n\n             options = that.options;\n             element = that.element\n                           .on(\"focusout\" + ns, proxy(that._focusout, that))\n                           .attr(\"role\", \"spinbutton\");\n\n             options.placeholder = options.placeholder || element.attr(\"placeholder\");\n\n             that._reset();\n             that._wrapper();\n             that._arrows();\n             that._input();\n\n             if (!kendo.support.mobileOS) {\n                 that._text.on(FOCUS + ns, proxy(that._click, that));\n             } else {\n                 that._text.on(TOUCHEND + ns + \" \" + FOCUS + ns, function(e) {\n                    that._toggleText(false);\n                    element.focus();\n                 });\n             }\n\n             min = that.min(element.attr(\"min\"));\n             max = that.max(element.attr(\"max\"));\n             step = that._parse(element.attr(\"step\"));\n\n             if (options.min === NULL && min !== NULL) {\n                 options.min = min;\n             }\n\n             if (options.max === NULL && max !== NULL) {\n                 options.max = max;\n             }\n\n             if (!isStep && step !== NULL) {\n                 options.step = step;\n             }\n\n             element.attr(\"aria-valuemin\", options.min)\n                    .attr(\"aria-valuemax\", options.max);\n\n             options.format = extractFormat(options.format);\n\n             value = options.value;\n             that.value(value !== NULL ? value : element.val());\n\n             disabled = element.is(\"[disabled]\");\n             if (disabled) {\n                 that.enable(false);\n             } else {\n                 that.readonly(element.is(\"[readonly]\"));\n             }\n\n             kendo.notify(that);\n         },\n\n        options: {\n            name: \"NumericTextBox\",\n            decimals: NULL,\n            min: NULL,\n            max: NULL,\n            value: NULL,\n            step: 1,\n            culture: \"\",\n            format: \"n\",\n            spinners: true,\n            placeholder: \"\",\n            upArrowText: \"Increase value\",\n            downArrowText: \"Decrease value\"\n        },\n        events: [\n            CHANGE,\n            SPIN\n        ],\n\n        _editable: function(options) {\n            var that = this,\n                element = that.element,\n                disable = options.disable,\n                readonly = options.readonly,\n                text = that._text.add(element),\n                wrapper = that._inputWrapper.off(HOVEREVENTS);\n\n            that._toggleText(true);\n\n            that._upArrowEventHandler.unbind(\"press\");\n            that._downArrowEventHandler.unbind(\"press\");\n            element.off(\"keydown\" + ns).off(\"keypress\" + ns).off(\"paste\" + ns);\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                text.removeAttr(DISABLED)\n                    .removeAttr(READONLY)\n                    .attr(ARIA_DISABLED, false)\n                    .attr(ARIA_READONLY, false);\n\n                that._upArrowEventHandler.bind(\"press\", function(e) {\n                    e.preventDefault();\n                    that._spin(1);\n                    that._upArrow.addClass(SELECTED);\n                });\n\n                that._downArrowEventHandler.bind(\"press\", function(e) {\n                    e.preventDefault();\n                    that._spin(-1);\n                    that._downArrow.addClass(SELECTED);\n                });\n\n                that.element\n                    .on(\"keydown\" + ns, proxy(that._keydown, that))\n                    .on(\"keypress\" + ns, proxy(that._keypress, that))\n                    .on(\"paste\" + ns, proxy(that._paste, that));\n\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                text.attr(DISABLED, disable)\n                    .attr(READONLY, readonly)\n                    .attr(ARIA_DISABLED, disable)\n                    .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.element\n                .add(that._text)\n                .add(that._upArrow)\n                .add(that._downArrow)\n                .add(that._inputWrapper)\n                .off(ns);\n\n            that._upArrowEventHandler.destroy();\n            that._downArrowEventHandler.destroy();\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n\n            Widget.fn.destroy.call(that);\n        },\n\n        min: function(value) {\n            return this._option(\"min\", value);\n        },\n\n        max: function(value) {\n            return this._option(\"max\", value);\n        },\n\n        step: function(value) {\n            return this._option(\"step\", value);\n        },\n\n        value: function(value) {\n            var that = this, adjusted;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            value = that._parse(value);\n            adjusted = that._adjust(value);\n\n            if (value !== adjusted) {\n                return;\n            }\n\n            that._update(value);\n            that._old = that._value;\n        },\n\n        focus: function() {\n            this._focusin();\n        },\n\n        _adjust: function(value) {\n            var that = this,\n            options = that.options,\n            min = options.min,\n            max = options.max;\n\n            if (value === NULL) {\n                return value;\n            }\n\n            if (min !== NULL && value < min) {\n                value = min;\n            } else if (max !== NULL && value > max) {\n                value = max;\n            }\n\n            return value;\n        },\n\n        _arrows: function() {\n            var that = this,\n            arrows,\n            _release = function() {\n                clearTimeout( that._spinning );\n                arrows.removeClass(SELECTED);\n            },\n            options = that.options,\n            spinners = options.spinners,\n            element = that.element;\n\n            arrows = element.siblings(\".k-icon\");\n\n            if (!arrows[0]) {\n                arrows = $(buttonHtml(\"n\", options.upArrowText) + buttonHtml(\"s\", options.downArrowText))\n                        .insertAfter(element);\n\n                arrows.wrapAll('<span class=\"k-select\"/>');\n            }\n\n            if (!spinners) {\n                arrows.parent().toggle(spinners);\n                that._inputWrapper.addClass(\"k-expand-padding\");\n            }\n\n            that._upArrow = arrows.eq(0);\n            that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n            that._downArrow = arrows.eq(1);\n            that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n        },\n\n        _blur: function() {\n            var that = this;\n\n            that._toggleText(true);\n            that._change(that.element.val());\n        },\n\n        _click: function(e) {\n            var that = this;\n\n            clearTimeout(that._focusing);\n            that._focusing = setTimeout(function() {\n                var input = e.target,\n                    idx = caret(input)[0],\n                    value = input.value.substring(0, idx),\n                    format = that._format(that.options.format),\n                    group = format[\",\"],\n                    result, groupRegExp, extractRegExp,\n                    caretPosition = 0;\n\n                if (group) {\n                    groupRegExp = new RegExp(\"\\\\\" + group, \"g\");\n                    extractRegExp = new RegExp(\"([\\\\d\\\\\" + group + \"]+)(\\\\\" + format[POINT] + \")?(\\\\d+)?\");\n                }\n\n                if (extractRegExp) {\n                    result = extractRegExp.exec(value);\n                }\n\n                if (result) {\n                    caretPosition = result[0].replace(groupRegExp, \"\").length;\n\n                    if (value.indexOf(\"(\") != -1 && that._value < 0) {\n                        caretPosition++;\n                    }\n                }\n\n                that._focusin();\n\n                caret(that.element[0], caretPosition);\n            });\n        },\n\n        _change: function(value) {\n            var that = this;\n\n            that._update(value);\n            value = that._value;\n\n            if (that._old != value) {\n                that._old = value;\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n\n                that.trigger(CHANGE);\n            }\n        },\n\n        _culture: function(culture) {\n            return culture || getCulture(this.options.culture);\n        },\n\n        _focusin: function() {\n            var that = this;\n            that._inputWrapper.addClass(FOCUSED);\n            that._toggleText(false);\n            that.element[0].focus();\n        },\n\n        _focusout: function() {\n            var that = this;\n\n            clearTimeout(that._focusing);\n            that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n            that._blur();\n        },\n\n        _format: function(format, culture) {\n            var numberFormat = this._culture(culture).numberFormat;\n\n            format = format.toLowerCase();\n\n            if (format.indexOf(\"c\") > -1) {\n                numberFormat = numberFormat.currency;\n            } else if (format.indexOf(\"p\") > -1) {\n                numberFormat = numberFormat.percent;\n            }\n\n            return numberFormat;\n        },\n\n        _input: function() {\n            var that = this,\n                CLASSNAME = \"k-formatted-value\",\n                element = that.element.addClass(INPUT).show()[0],\n                accessKey = element.accessKey,\n                wrapper = that.wrapper,\n                text;\n\n            text = wrapper.find(POINT + CLASSNAME);\n\n            if (!text[0]) {\n                text = $('<input type=\"text\"/>').insertBefore(element).addClass(CLASSNAME);\n            }\n\n            try {\n                element.setAttribute(\"type\", \"text\");\n            } catch(e) {\n                element.type = \"text\";\n            }\n\n            text[0].tabIndex = element.tabIndex;\n            text[0].style.cssText = element.style.cssText;\n            text.prop(\"placeholder\", that.options.placeholder);\n\n            if (accessKey) {\n                text.attr(\"accesskey\", accessKey);\n                element.accessKey = \"\";\n            }\n\n            that._text = text.addClass(element.className);\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode;\n\n            that._key = key;\n\n            if (key == keys.DOWN) {\n                that._step(-1);\n            } else if (key == keys.UP) {\n                that._step(1);\n            } else if (key == keys.ENTER) {\n                that._change(that.element.val());\n            }\n        },\n\n        _keypress: function(e) {\n            if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n                return;\n            }\n\n            var that = this;\n            var min = that.options.min;\n            var element = that.element;\n            var selection = caret(element);\n            var selectionStart = selection[0];\n            var selectionEnd = selection[1];\n            var character = String.fromCharCode(e.which);\n            var numberFormat = that._format(that.options.format);\n            var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n            var value = element.val();\n            var isValid;\n\n            if (isNumPadDecimal) {\n                character = numberFormat[POINT];\n            }\n\n            value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n            isValid = that._numericRegex(numberFormat).test(value);\n\n            if (isValid && isNumPadDecimal) {\n                element.val(value);\n                caret(element, selectionStart + character.length);\n\n                e.preventDefault();\n            } else if ((min !== null && min >= 0 && value.charAt(0) === \"-\") || !isValid) {\n                e.preventDefault();\n            }\n\n            that._key = 0;\n        },\n\n        _numericRegex: function(numberFormat) {\n            var that = this;\n            var separator = numberFormat[POINT];\n            var precision = that.options.decimals;\n\n            if (separator === POINT) {\n                separator = \"\\\\\" + separator;\n            }\n\n            if (precision === NULL) {\n                precision = numberFormat.decimals;\n            }\n\n            if (precision === 0) {\n                return INTEGER_REGEXP;\n            }\n\n            if (that._separator !== separator) {\n                that._separator = separator;\n                that._floatRegExp = new RegExp(\"^(-)?(((\\\\d+(\" + separator + \"\\\\d*)?)|(\" + separator + \"\\\\d*)))?$\");\n            }\n\n            return that._floatRegExp;\n        },\n\n        _paste: function(e) {\n            var that = this,\n                element = e.target,\n                value = element.value;\n\n            setTimeout(function() {\n                if (that._parse(element.value) === NULL) {\n                    that._update(value);\n                }\n            });\n        },\n\n        _option: function(option, value) {\n            var that = this,\n                options = that.options;\n\n            if (value === undefined) {\n                return options[option];\n            }\n\n            value = that._parse(value);\n\n            if (!value && option === \"step\") {\n                return;\n            }\n\n            options[option] = value;\n            that.element\n                .attr(\"aria-value\" + option, value)\n                .attr(option, value);\n        },\n\n        _spin: function(step, timeout) {\n            var that = this;\n\n            timeout = timeout || 500;\n\n            clearTimeout( that._spinning );\n            that._spinning = setTimeout(function() {\n                that._spin(step, 50);\n            }, timeout );\n\n            that._step(step);\n        },\n\n        _step: function(step) {\n            var that = this,\n                element = that.element,\n                value = that._parse(element.val()) || 0;\n\n            if (activeElement() != element[0]) {\n                that._focusin();\n            }\n\n            value += that.options.step * step;\n\n            that._update(that._adjust(value));\n\n            that.trigger(SPIN);\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _toggleText: function(toggle) {\n            var that = this;\n\n            that._text.toggle(toggle);\n            that.element.toggle(!toggle);\n        },\n\n        _parse: function(value, culture) {\n            return parse(value, this._culture(culture), this.options.format);\n        },\n\n        _update: function(value) {\n            var that = this,\n                options = that.options,\n                format = options.format,\n                decimals = options.decimals,\n                culture = that._culture(),\n                numberFormat = that._format(format, culture),\n                isNotNull;\n\n            if (decimals === NULL) {\n                decimals = numberFormat.decimals;\n            }\n\n            value = that._parse(value, culture);\n\n            isNotNull = value !== NULL;\n\n            if (isNotNull) {\n                value = parseFloat(round(value, decimals));\n            }\n\n            that._value = value = that._adjust(value);\n            that._placeholder(kendo.toString(value, format, culture));\n\n            if (isNotNull) {\n                value = value.toString();\n                if (value.indexOf(\"e\") !== -1) {\n                    value = round(+value, decimals);\n                }\n                value = value.replace(POINT, numberFormat[POINT]);\n            } else {\n                value = \"\";\n            }\n\n            that.element.val(value).attr(\"aria-valuenow\", value);\n        },\n\n        _placeholder: function(value) {\n            this._text.val(value);\n            if (!placeholderSupported && !value) {\n                this._text.val(this.options.placeholder);\n            }\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                DOMElement = element[0],\n                wrapper;\n\n            wrapper = element.parents(\".k-numerictextbox\");\n\n            if (!wrapper.is(\"span.k-numerictextbox\")) {\n                wrapper = element.hide().wrap('<span class=\"k-numeric-wrap k-state-default\" />').parent();\n                wrapper = wrapper.wrap(\"<span/>\").parent();\n            }\n\n            wrapper[0].style.cssText = DOMElement.style.cssText;\n            DOMElement.style.width = \"\";\n            that.wrapper = wrapper.addClass(\"k-widget k-numerictextbox\")\n                                  .addClass(DOMElement.className)\n                                  .css(\"display\", \"\");\n\n            that._inputWrapper = $(wrapper[0].firstChild);\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    setTimeout(function() {\n                        that.value(element[0].value);\n                    });\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        }\n    });\n\n    function buttonHtml(className, text) {\n        return '<span unselectable=\"on\" class=\"k-link\"><span unselectable=\"on\" class=\"k-icon k-i-arrow-' + className + '\" title=\"' + text + '\">' + text + '</span></span>';\n    }\n\n    ui.plugin(NumericTextBox);\n})(window.kendo.jQuery);\n\n\n\n\n\n/* jshint eqnull: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        proxy = $.proxy,\n        POPUP = \"kendoPopup\",\n        INIT = \"init\",\n        NS = \".kendoFilterMenu\",\n        EQ = \"Is equal to\",\n        NEQ = \"Is not equal to\",\n        roles = {\n            \"number\": \"numerictextbox\",\n            \"date\": \"datepicker\"\n        },\n        mobileRoles = {\n            \"string\": \"text\",\n            \"number\": \"number\",\n            \"date\": \"date\"\n        },\n        isFunction = kendo.isFunction,\n        Widget = ui.Widget;\n\n    var booleanTemplate =\n            '<div>' +\n                '<div class=\"k-filter-help-text\">#=messages.info#</div>'+\n                '<label>'+\n                    '<input type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"true\" name=\"filters[0].value\"/>' +\n                    '#=messages.isTrue#' +\n                '</label>' +\n                '<label>'+\n                    '<input type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"false\" name=\"filters[0].value\"/>' +\n                    '#=messages.isFalse#' +\n                '</label>' +\n                '<div>' +\n                '<button type=\"submit\" class=\"k-button k-primary\">#=messages.filter#</button>' +\n                '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>'+\n                '</div>' +\n            '</div>';\n\n    var defaultTemplate =\n            '<div>' +\n                '<div class=\"k-filter-help-text\">#=messages.info#</div>'+\n                '<select data-#=ns#bind=\"value: filters[0].operator\" data-#=ns#role=\"dropdownlist\">'+\n                    '#for(var op in operators){#'+\n                        '<option value=\"#=op#\">#=operators[op]#</option>' +\n                    '#}#'+\n                '</select>'+\n                '#if(values){#' +\n                    '<select data-#=ns#bind=\"value:filters[0].value\" data-#=ns#text-field=\"text\" data-#=ns#value-field=\"value\" data-#=ns#source=\\'#=kendo.stringify(values).replace(/\\'/g,\"&\\\\#39;\")#\\' data-#=ns#role=\"dropdownlist\" data-#=ns#option-label=\"#=messages.selectValue#\">' +\n                    '</select>' +\n                '#}else{#' +\n                    '<input data-#=ns#bind=\"value:filters[0].value\" class=\"k-textbox\" type=\"text\" #=role ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />'+\n                '#}#' +\n                '#if(extra){#'+\n                    '<select class=\"k-filter-and\" data-#=ns#bind=\"value: logic\" data-#=ns#role=\"dropdownlist\">'+\n                        '<option value=\"and\">#=messages.and#</option>'+\n                        '<option value=\"or\">#=messages.or#</option>'+\n                    '</select>'+\n                    '<select data-#=ns#bind=\"value: filters[1].operator\" data-#=ns#role=\"dropdownlist\">'+\n                        '#for(var op in operators){#'+\n                            '<option value=\"#=op#\">#=operators[op]#</option>'+\n                        '#}#'+\n                    '</select>'+\n                    '#if(values){#' +\n                        '<select data-#=ns#bind=\"value:filters[1].value\" data-#=ns#text-field=\"text\" data-#=ns#value-field=\"value\" data-#=ns#source=\\'#=kendo.stringify(values).replace(/\\'/g,\"&\\\\#39;\")#\\' data-#=ns#role=\"dropdownlist\" data-#=ns#option-label=\"#=messages.selectValue#\">' +\n                        '</select>'+\n                    '#}else{#' +\n                        '<input data-#=ns#bind=\"value: filters[1].value\" class=\"k-textbox\" type=\"text\" #=role ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"#/>'+\n                    '#}#' +\n                '#}#'+\n                '<div>'+\n                '<button type=\"submit\" class=\"k-button k-primary\">#=messages.filter#</button>'+\n                '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>'+\n                '</div>'+\n            '</div>';\n\n        var defaultMobileTemplate =\n            '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" class=\"k-grid-filter-menu\">'+\n                '<div data-#=ns#role=\"header\" class=\"k-header\">'+\n                    '<button class=\"k-button k-cancel\">#=messages.cancel#</button>'+\n                    '#=field#'+\n                    '<button type=\"submit\" class=\"k-button k-submit\">#=messages.filter#</button>'+\n                '</div>'+\n                '<form class=\"k-filter-menu k-mobile-list\">'+\n                    '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\">#=messages.info#</span>'+\n                    '<ul>'+\n                        '<li class=\"k-item\"><label class=\"k-label\">#=messages.operator#'+\n                            '<select data-#=ns#bind=\"value: filters[0].operator\">'+\n                                '#for(var op in operators){#'+\n                                    '<option value=\"#=op#\">#=operators[op]#</option>' +\n                                '#}#'+\n                            '</select>'+\n                        '</label></li>' +\n                        '<li class=\"k-item\"><label class=\"k-label\">#=messages.value#'+\n                            '#if(values){#' +\n                                '<select data-#=ns#bind=\"value:filters[0].value\">'+\n                                    '<option value=\"\">#=messages.selectValue#</option>' +\n                                    '#for(var val in values){#'+\n                                        '<option value=\"#=values[val].value#\">#=values[val].text#</option>' +\n                                    '#}#'+\n                                '</select>' +\n                            '#}else{#' +\n                                '<input data-#=ns#bind=\"value:filters[0].value\" class=\"k-textbox\" type=\"#=inputType#\" '+\n                                '#=useRole ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />'+\n                            '#}#' +\n                        '</label></li>'+\n                        '#if(extra){#'+\n                        '</ul>'+\n                        '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\"></span>'+\n                            '<li class=\"k-item\"><label class=\"k-label\"><input type=\"radio\" name=\"logic\" class=\"k-check\" data-#=ns#bind=\"checked: logic\" value=\"and\" />#=messages.and#</label></li>'+\n                            '<li class=\"k-item\"><label class=\"k-label\"><input type=\"radio\" name=\"logic\" class=\"k-check\" data-#=ns#bind=\"checked: logic\" value=\"or\" />#=messages.or#</label></li>'+\n                        '</ul>'+\n                        '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\"></span>'+\n                            '<li class=\"k-item\"><label class=\"k-label\">#=messages.operator#'+\n                                '<select data-#=ns#bind=\"value: filters[1].operator\">'+\n                                    '#for(var op in operators){#'+\n                                        '<option value=\"#=op#\">#=operators[op]#</option>' +\n                                    '#}#'+\n                                '</select>'+\n                            '</label></li>'+\n                            '<li class=\"k-item\"><label class=\"k-label\">#=messages.value#'+\n                                '#if(values){#' +\n                                    '<select data-#=ns#bind=\"value:filters[1].value\">'+\n                                        '<option value=\"\">#=messages.selectValue#</option>' +\n                                        '#for(var val in values){#'+\n                                            '<option value=\"#=values[val].value#\">#=values[val].text#</option>' +\n                                        '#}#'+\n                                    '</select>' +\n                                '#}else{#' +\n                                    '<input data-#=ns#bind=\"value:filters[1].value\" class=\"k-textbox\" type=\"#=inputType#\" '+\n                                    '#=useRole ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />'+\n                                '#}#' +\n                            '</label></li>'+\n                        '#}#'+\n                        '</ul>'+\n                        '</li><li class=\"k-button-container\">' +\n                            '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>'+\n                        '</li></ul>' +\n                    '</div>'+\n                '</form>'+\n            '</div>';\n\n    var booleanMobileTemplate =\n            '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" class=\"k-grid-filter-menu\">'+\n                '<div data-#=ns#role=\"header\" class=\"k-header\">'+\n                    '<button class=\"k-button k-cancel\">#=messages.cancel#</button>'+\n                    '#=field#'+\n                    '<button type=\"submit\" class=\"k-button k-submit\">#=messages.filter#</button>'+\n                '</div>'+\n                '<form class=\"k-filter-menu k-mobile-list\">'+\n                    '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\">#=messages.info#</span>'+\n                    '<ul>'+\n                        '<li class=\"k-item\"><label class=\"k-label\">'+\n                            '<input class=\"k-check\" type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"true\" name=\"filters[0].value\"/>' +\n                            '#=messages.isTrue#' +\n                        '</label></li>' +\n                        '<li class=\"k-item\"><label class=\"k-label\">'+\n                            '<input class=\"k-check\" type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"false\" name=\"filters[0].value\"/>' +\n                            '#=messages.isFalse#' +\n                        '</label></li>' +\n                    '</ul>'+\n                    '</li><li class=\"k-button-container\">' +\n                        '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>'+\n                    '</li></ul>' +\n                '</form>'+\n            '</div>';\n\n    function removeFiltersForField(expression, field) {\n        if (expression.filters) {\n            expression.filters = $.grep(expression.filters, function(filter) {\n                removeFiltersForField(filter, field);\n                if (filter.filters) {\n                    return filter.filters.length;\n                } else {\n                    return filter.field != field;\n                }\n            });\n        }\n    }\n\n    function convertItems(items) {\n        var idx,\n            length,\n            item,\n            value,\n            text,\n            result;\n\n        if (items && items.length) {\n            result = [];\n            for (idx = 0, length = items.length; idx < length; idx++) {\n                item = items[idx];\n                text = item.text || item.value || item;\n                value = item.value == null ? (item.text || item) : item.value;\n\n                result[idx] = { text: text, value: value };\n            }\n        }\n        return result;\n    }\n\n\n    function clearFilter(filters, field) {\n        return $.grep(filters, function(expr) {\n            if (expr.filters) {\n                expr.filters = $.grep(expr.filters, function(nested) {\n                    return nested.field != field;\n                });\n\n                return expr.filters.length;\n            }\n            return expr.field != field;\n        });\n    }\n\n    var FilterMenu = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                type = \"string\",\n                operators,\n                initial,\n                link,\n                field;\n\n            Widget.fn.init.call(that, element, options);\n\n            operators = that.operators = options.operators || {};\n\n            element = that.element;\n            options = that.options;\n\n            if (!options.appendToElement) {\n                link = element.addClass(\"k-with-icon k-filterable\").find(\".k-grid-filter\");\n\n                if (!link[0]) {\n                    link = element.prepend('<a class=\"k-grid-filter\" href=\"#\"><span class=\"k-icon k-filter\"/></a>').find(\".k-grid-filter\");\n                }\n\n                link.attr(\"tabindex\", -1).on(\"click\" + NS, proxy(that._click, that));\n            }\n\n            that.link = link || $();\n\n            that.dataSource = options.dataSource;\n\n            that.field = options.field || element.attr(kendo.attr(\"field\"));\n\n            that.model = that.dataSource.reader.model;\n\n            that._parse = function(value) {\n                 return value + \"\";\n            };\n\n            if (that.model && that.model.fields) {\n                field = that.model.fields[that.field];\n\n                if (field) {\n                    type = field.type || \"string\";\n                    if (field.parse) {\n                        that._parse = proxy(field.parse, field);\n                    }\n                }\n            }\n\n            if (options.values) {\n                type = \"enums\";\n            }\n\n            that.type = type;\n\n            operators = operators[type] || options.operators[type];\n\n            for (initial in operators) { // get the first operator\n                break;\n            }\n\n            that._defaultFilter = function() {\n                return { field: that.field, operator: initial || \"eq\", value: \"\" };\n            };\n\n            that._refreshHandler = proxy(that.refresh, that);\n\n            that.dataSource.bind(\"change\", that._refreshHandler);\n\n            if (options.appendToElement) { // force creation if used in column menu\n                that._init();\n            } else {\n                that.refresh(); //refresh if DataSource is fitered before menu is created\n            }\n        },\n\n        _init: function() {\n            var that = this,\n                ui = that.options.ui,\n                setUI = isFunction(ui),\n                role;\n\n            that.pane = that.options.pane;\n            if (that.pane) {\n                that._isMobile = true;\n            }\n\n            if (!setUI) {\n                role = ui || roles[that.type];\n            }\n\n            if (that._isMobile) {\n                that._createMobileForm(role);\n            } else {\n                that._createForm(role);\n            }\n\n            that.form\n                .on(\"submit\" + NS, proxy(that._submit, that))\n                .on(\"reset\" + NS, proxy(that._reset, that));\n\n            if (setUI) {\n                that.form.find(\".k-textbox\")\n                    .removeClass(\"k-textbox\")\n                    .each(function() {\n                        ui($(this));\n                    });\n            }\n\n            that.form\n                 .find(\"[\" + kendo.attr(\"role\") + \"=numerictextbox]\")\n                 .removeClass(\"k-textbox\")\n                 .end()\n                 .find(\"[\" + kendo.attr(\"role\") + \"=datetimepicker]\")\n                 .removeClass(\"k-textbox\")\n                 .end()\n                 .find(\"[\" + kendo.attr(\"role\") + \"=timepicker]\")\n                 .removeClass(\"k-textbox\")\n                 .end()\n                 .find(\"[\" + kendo.attr(\"role\") + \"=datepicker]\")\n                 .removeClass(\"k-textbox\");\n\n            that.refresh();\n\n            that.trigger(INIT, { field: that.field, container: that.form });\n        },\n\n        _createForm: function(role) {\n            var that = this,\n                options = that.options,\n                operators = that.operators || {},\n                type = that.type;\n\n            operators = operators[type] || options.operators[type];\n\n            that.form = $('<form class=\"k-filter-menu\"/>')\n                .html(kendo.template(type === \"boolean\" ? booleanTemplate : defaultTemplate)({\n                    field: that.field,\n                    format: options.format,\n                    ns: kendo.ns,\n                    messages: options.messages,\n                    extra: options.extra,\n                    operators: operators,\n                    type: type,\n                    role: role,\n                    values: convertItems(options.values)\n                }));\n\n            if (!options.appendToElement) {\n                that.popup = that.form[POPUP]({\n                    anchor: that.link,\n                    open: proxy(that._open, that),\n                    activate: proxy(that._activate, that),\n                    close: function() {\n                        if (that.options.closeCallback) {\n                            that.options.closeCallback(that.element);\n                        }\n                    }\n                }).data(POPUP);\n            } else {\n                that.element.append(that.form);\n                that.popup = that.element.closest(\".k-popup\").data(POPUP);\n            }\n\n            that.form\n                .on(\"keydown\" + NS, proxy(that._keydown, that));\n        },\n\n        _createMobileForm: function(role) {\n            var that = this,\n                options = that.options,\n                operators = that.operators || {},\n                type = that.type;\n\n            operators = operators[type] || options.operators[type];\n\n            that.form = $(\"<div />\")\n                .html(kendo.template(type === \"boolean\" ? booleanMobileTemplate : defaultMobileTemplate)({\n                    field: that.field,\n                    format: options.format,\n                    ns: kendo.ns,\n                    messages: options.messages,\n                    extra: options.extra,\n                    operators: operators,\n                    type: type,\n                    role: role,\n                    useRole: (!kendo.support.input.date && type === \"date\") || type === \"number\",\n                    inputType: mobileRoles[type],\n                    values: convertItems(options.values)\n                }));\n\n            that.view = that.pane.append(that.form.html());\n            that.form = that.view.element.find(\"form\");\n\n            that.view.element\n                .on(\"click\", \".k-submit\", function(e) {\n                    that.form.submit();\n                    e.preventDefault();\n                })\n                .on(\"click\", \".k-cancel\", function(e) {\n                    that._closeForm();\n                    e.preventDefault();\n                });\n        },\n\n        refresh: function() {\n            var that = this,\n                expression = that.dataSource.filter() || { filters: [], logic: \"and\" };\n\n            that.filterModel = kendo.observable({\n                logic: \"and\",\n                filters: [ that._defaultFilter(), that._defaultFilter()]\n            });\n\n            if (that.form) {\n                //NOTE: binding the form element directly causes weird error in IE when grid is bound through MVVM and column is sorted\n                kendo.bind(that.form.children().first(), that.filterModel);\n            }\n\n            if (that._bind(expression)) {\n                that.link.addClass(\"k-state-active\");\n            } else {\n                that.link.removeClass(\"k-state-active\");\n            }\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            if (that.form) {\n                kendo.unbind(that.form);\n                kendo.destroy(that.form);\n                that.form.unbind(NS);\n                if (that.popup) {\n                    that.popup.destroy();\n                    that.popup = null;\n                }\n                that.form = null;\n            }\n\n            if (that.view) {\n                that.view.purge();\n                that.view = null;\n            }\n\n            that.link.unbind(NS);\n\n            if (that._refreshHandler) {\n                that.dataSource.unbind(\"change\", that._refreshHandler);\n                that.dataSource = null;\n            }\n\n            that.element = that.link = that._refreshHandler = that.filterModel = null;\n        },\n\n        _bind: function(expression) {\n            var that = this,\n                filters = expression.filters,\n                idx,\n                length,\n                found = false,\n                current = 0,\n                filterModel = that.filterModel,\n                currentFilter,\n                filter;\n\n            for (idx = 0, length = filters.length; idx < length; idx++) {\n                filter = filters[idx];\n                if (filter.field == that.field) {\n                    filterModel.set(\"logic\", expression.logic);\n\n                    currentFilter = filterModel.filters[current];\n                    if (!currentFilter) {\n                        filterModel.filters.push({ field: that.field });\n                        currentFilter = filterModel.filters[current];\n                    }\n                    currentFilter.set(\"value\", that._parse(filter.value));\n                    currentFilter.set(\"operator\", filter.operator);\n\n                    current++;\n                    found = true;\n                } else if (filter.filters) {\n                    found = found || that._bind(filter);\n                }\n            }\n\n            return found;\n        },\n\n        _merge: function(expression) {\n            var that = this,\n                logic = expression.logic || \"and\",\n                filters = expression.filters,\n                filter,\n                result = that.dataSource.filter() || { filters:[], logic: \"and\" },\n                idx,\n                length;\n\n            removeFiltersForField(result, that.field);\n\n            filters = $.grep(filters, function(filter) {\n                return filter.value !== \"\" && filter.value != null;\n            });\n\n            for (idx = 0, length = filters.length; idx < length; idx++) {\n                filter = filters[idx];\n                filter.value = that._parse(filter.value);\n            }\n\n            if (filters.length) {\n                if (result.filters.length) {\n                    expression.filters = filters;\n\n                    if (result.logic !== \"and\") {\n                        result.filters = [ { logic: result.logic, filters: result.filters }];\n                        result.logic = \"and\";\n                    }\n\n                    if (filters.length > 1) {\n                        result.filters.push(expression);\n                    } else {\n                        result.filters.push(filters[0]);\n                    }\n                } else {\n                    result.filters = filters;\n                    result.logic = logic;\n                }\n            }\n\n            return result;\n        },\n\n        filter: function(expression) {\n            expression = this._merge(expression);\n\n            if (expression.filters.length) {\n                this.dataSource.filter(expression);\n            }\n        },\n\n        clear: function() {\n            var that = this,\n                expression = that.dataSource.filter() || { filters:[] };\n\n            expression.filters = $.grep(expression.filters, function(filter) {\n                if (filter.filters) {\n                    filter.filters = clearFilter(filter.filters, that.field);\n\n                    return filter.filters.length;\n                }\n\n                return filter.field != that.field;\n            });\n\n            if (!expression.filters.length) {\n                expression = null;\n            }\n\n            that.dataSource.filter(expression);\n        },\n\n        _submit: function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n\n            this.filter(this.filterModel.toJSON());\n\n            this._closeForm();\n        },\n\n        _reset: function() {\n            this.clear();\n\n            this._closeForm();\n        },\n\n        _closeForm: function() {\n            if (this._isMobile) {\n                this.pane.navigate(\"\", this.options.animations.right);\n            } else {\n                this.popup.close();\n            }\n        },\n\n        _click: function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n\n            if (!this.popup && !this.pane) {\n                this._init();\n            }\n\n            if (this._isMobile) {\n                this.pane.navigate(this.view, this.options.animations.left);\n            } else {\n                this.popup.toggle();\n            }\n        },\n\n        _open: function() {\n            var popup;\n\n            $(\".k-filter-menu\").not(this.form).each(function() {\n                popup = $(this).data(POPUP);\n                if (popup) {\n                    popup.close();\n                }\n            });\n        },\n\n        _activate: function() {\n            this.form.find(\":kendoFocusable:first\").focus();\n        },\n\n        _keydown: function(e) {\n            if (e.keyCode == kendo.keys.ESC) {\n                this.popup.close();\n            }\n        },\n\n        events: [ INIT ],\n\n        options: {\n            name: \"FilterMenu\",\n            extra: true,\n            appendToElement: false,\n            type: \"string\",\n            operators: {\n                string: {\n                    eq: EQ,\n                    neq: NEQ,\n                    startswith: \"Starts with\",\n                    contains: \"Contains\",\n                    doesnotcontain: \"Does not contain\",\n                    endswith: \"Ends with\"\n                },\n                number: {\n                    eq: EQ,\n                    neq: NEQ,\n                    gte: \"Is greater than or equal to\",\n                    gt: \"Is greater than\",\n                    lte: \"Is less than or equal to\",\n                    lt: \"Is less than\"\n                },\n                date: {\n                    eq: EQ,\n                    neq: NEQ,\n                    gte: \"Is after or equal to\",\n                    gt: \"Is after\",\n                    lte: \"Is before or equal to\",\n                    lt: \"Is before\"\n                },\n                enums: {\n                    eq: EQ,\n                    neq: NEQ\n                }\n            },\n            messages: {\n                info: \"Show items with value that:\",\n                isTrue: \"is true\",\n                isFalse: \"is false\",\n                filter: \"Filter\",\n                clear: \"Clear\",\n                and: \"And\",\n                or: \"Or\",\n                selectValue: \"-Select value-\",\n                operator: \"Operator\",\n                value: \"Value\",\n                cancel: \"Cancel\"\n            },\n            animations: {\n                left: \"slide\",\n                right: \"slide:right\"\n            }\n        }\n    });\n\n    ui.plugin(FilterMenu);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        activeElement = kendo._activeElement,\n        touch = (kendo.support.touch && kendo.support.mobileOS),\n        MOUSEDOWN = \"mousedown\",\n        CLICK = \"click\",\n        extend = $.extend,\n        proxy = $.proxy,\n        each = $.each,\n        template = kendo.template,\n        keys = kendo.keys,\n        Widget = ui.Widget,\n        excludedNodesRegExp = /^(ul|a|div)$/i,\n        NS = \".kendoMenu\",\n        IMG = \"img\",\n        OPEN = \"open\",\n        MENU = \"k-menu\",\n        LINK = \"k-link\",\n        LAST = \"k-last\",\n        CLOSE = \"close\",\n        TIMER = \"timer\",\n        FIRST = \"k-first\",\n        IMAGE = \"k-image\",\n        SELECT = \"select\",\n        ZINDEX = \"zIndex\",\n        ACTIVATE = \"activate\",\n        DEACTIVATE = \"deactivate\",\n        POINTERDOWN = \"touchstart\" + NS + \" MSPointerDown\" + NS + \" pointerdown\" + NS,\n        pointers = kendo.support.pointers,\n        msPointers = kendo.support.msPointers,\n        allPointers = msPointers || pointers,\n        MOUSEENTER = pointers ? \"pointerover\" : (msPointers ? \"MSPointerOver\" : \"mouseenter\"),\n        MOUSELEAVE = pointers ? \"pointerout\" : (msPointers ? \"MSPointerOut\" : \"mouseleave\"),\n        mobile = touch || allPointers,\n        DOCUMENT_ELEMENT = $(document.documentElement),\n        KENDOPOPUP = \"kendoPopup\",\n        DEFAULTSTATE = \"k-state-default\",\n        HOVERSTATE = \"k-state-hover\",\n        FOCUSEDSTATE = \"k-state-focused\",\n        DISABLEDSTATE = \"k-state-disabled\",\n        menuSelector = \".k-menu\",\n        groupSelector = \".k-menu-group\",\n        popupSelector = groupSelector + \",.k-animation-container\",\n        allItemsSelector = \":not(.k-list) > .k-item\",\n        disabledSelector = \".k-item.k-state-disabled\",\n        itemSelector = \".k-item:not(.k-state-disabled)\",\n        linkSelector = \".k-item:not(.k-state-disabled) > .k-link\",\n        exclusionSelector = \":not(.k-item.k-separator)\",\n        nextSelector = exclusionSelector + \":eq(0)\",\n        lastSelector = exclusionSelector + \":last\",\n        templateSelector = \"> div:not(.k-animation-container,.k-list-container)\",\n        touchPointerTypes = { \"2\": 1, \"touch\": 1 },\n\n        templates = {\n            content: template(\n                \"<div class='k-content #= groupCssClass() #' tabindex='-1'>#= content(item) #</div>\"\n            ),\n            group: template(\n                \"<ul class='#= groupCssClass(group) #'#= groupAttributes(group) # role='menu' aria-hidden='true'>\" +\n                    \"#= renderItems(data) #\" +\n                \"</ul>\"\n            ),\n            itemWrapper: template(\n                \"<#= tag(item) # class='#= textClass(item) #'#= textAttributes(item) #>\" +\n                    \"#= image(item) ##= sprite(item) ##= text(item) #\" +\n                    \"#= arrow(data) #\" +\n                \"</#= tag(item) #>\"\n            ),\n            item: template(\n                \"<li class='#= wrapperCssClass(group, item) #' role='menuitem' #=item.items ? \\\"aria-haspopup='true'\\\": \\\"\\\"#\" +\n                    \"#=item.enabled === false ? \\\"aria-disabled='true'\\\" : ''#>\" +\n                    \"#= itemWrapper(data) #\" +\n                    \"# if (item.items) { #\" +\n                    \"#= subGroup({ items: item.items, menu: menu, group: { expanded: item.expanded } }) #\" +\n                    \"# } else if (item.content || item.contentUrl) { #\" +\n                    \"#= renderContent(data) #\" +\n                    \"# } #\" +\n                \"</li>\"\n            ),\n            image: template(\"<img class='k-image' alt='' src='#= imageUrl #' />\"),\n            arrow: template(\"<span class='#= arrowClass(item, group) #'></span>\"),\n            sprite: template(\"<span class='k-sprite #= spriteCssClass #'></span>\"),\n            empty: template(\"\")\n        },\n\n        rendering = {\n\n            wrapperCssClass: function (group, item) {\n                var result = \"k-item\",\n                    index = item.index;\n\n                if (item.enabled === false) {\n                    result += \" k-state-disabled\";\n                } else {\n                    result += \" k-state-default\";\n                }\n\n                if (group.firstLevel && index === 0) {\n                    result += \" k-first\";\n                }\n\n                if (index == group.length-1) {\n                    result += \" k-last\";\n                }\n\n                if (item.cssClass) {\n                    result += \" \" + item.cssClass;\n                }\n\n                return result;\n            },\n\n            textClass: function() {\n                return LINK;\n            },\n\n            textAttributes: function(item) {\n                return item.url ? \" href='\" + item.url + \"'\" : \"\";\n            },\n\n            arrowClass: function(item, group) {\n                var result = \"k-icon\";\n\n                if (group.horizontal) {\n                    result += \" k-i-arrow-s\";\n                } else {\n                    result += \" k-i-arrow-e\";\n                }\n\n                return result;\n            },\n\n            text: function(item) {\n                return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n            },\n\n            tag: function(item) {\n                return item.url ? \"a\" : \"span\";\n            },\n\n            groupAttributes: function(group) {\n                return group.expanded !== true ? \" style='display:none'\" : \"\";\n            },\n\n            groupCssClass: function() {\n                return \"k-group k-menu-group\";\n            },\n\n            content: function(item) {\n                return item.content ? item.content : \"&nbsp;\";\n            }\n        };\n\n    function getEffectDirection(direction, root) {\n        direction = direction.split(\" \")[!root+0] || direction;\n        return direction.replace(\"top\", \"up\").replace(\"bottom\", \"down\");\n    }\n\n    function parseDirection(direction, root, isRtl) {\n        direction = direction.split(\" \")[!root+0] || direction;\n        var output = { origin: [\"bottom\", (isRtl ? \"right\" : \"left\")], position: [\"top\", (isRtl ? \"right\" : \"left\")] },\n            horizontal = /left|right/.test(direction);\n\n        if (horizontal) {\n            output.origin = [ \"top\", direction ];\n            output.position[1] = kendo.directions[direction].reverse;\n        } else {\n            output.origin[0] = direction;\n            output.position[0] = kendo.directions[direction].reverse;\n        }\n\n        output.origin = output.origin.join(\" \");\n        output.position = output.position.join(\" \");\n\n        return output;\n    }\n\n    function contains(parent, child) {\n        try {\n            return $.contains(parent, child);\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function updateItemClasses (item) {\n        item = $(item);\n\n        item.addClass(\"k-item\")\n            .children(IMG)\n            .addClass(IMAGE);\n        item\n            .children(\"a\")\n            .addClass(LINK)\n            .children(IMG)\n            .addClass(IMAGE);\n        item\n            .filter(\":not([disabled])\")\n            .addClass(DEFAULTSTATE);\n        item\n            .filter(\".k-separator:empty\")\n            .append(\"&nbsp;\");\n        item\n            .filter(\"li[disabled]\")\n            .addClass(DISABLEDSTATE)\n            .removeAttr(\"disabled\")\n            .attr(\"aria-disabled\", true);\n\n        if (!item.filter(\"[role]\").length) {\n            item.attr(\"role\", \"menuitem\");\n        }\n\n        if (!item.children(\".\" + LINK).length) {\n            item\n                .contents()      // exclude groups, real links, templates and empty text nodes\n                .filter(function() { return (!this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !$.trim(this.nodeValue))); })\n                .wrapAll(\"<span class='\" + LINK + \"'/>\");\n        }\n\n        updateArrow(item);\n        updateFirstLast(item);\n    }\n\n    function updateArrow (item) {\n        item = $(item);\n\n        item.find(\"> .k-link > [class*=k-i-arrow]:not(.k-sprite)\").remove();\n\n        item.filter(\":has(.k-menu-group)\")\n            .children(\".k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))\")\n            .each(function () {\n                var item = $(this),\n                    parent = item.parent().parent();\n\n                item.append(\"<span class='k-icon \" + (parent.hasClass(MENU + \"-horizontal\") ? \"k-i-arrow-s\" : \"k-i-arrow-e\") + \"'/>\");\n            });\n    }\n\n    function updateFirstLast (item) {\n        item = $(item);\n\n        item.filter(\".k-first:not(:first-child)\").removeClass(FIRST);\n        item.filter(\".k-last:not(:last-child)\").removeClass(LAST);\n        item.filter(\":first-child\").addClass(FIRST);\n        item.filter(\":last-child\").addClass(LAST);\n    }\n\n    var Menu = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.wrapper = that.element;\n            options = that.options;\n\n            that._initData(options);\n\n            that._updateClasses();\n\n            that._animations(options);\n\n            that.nextItemZIndex = 100;\n\n            that._tabindex();\n\n            that._focusProxy = proxy(that._focusHandler, that);\n\n            element.on(POINTERDOWN, itemSelector, that._focusProxy)\n                   .on(CLICK + NS, disabledSelector, false)\n                   .on(CLICK + NS, itemSelector, proxy(that._click , that))\n                   .on(\"keydown\" + NS, proxy(that._keydown, that))\n                   .on(\"focus\" + NS, proxy(that._focus, that))\n                   .on(\"focus\" + NS, \".k-content\", proxy(that._focus, that))\n                   .on(POINTERDOWN + \" \" + MOUSEDOWN + NS, \".k-content\", proxy(that._preventClose, that))\n                   .on(\"blur\" + NS, proxy(that._removeHoverItem, that))\n                   .on(\"blur\" + NS, \"[tabindex]\", proxy(that._checkActiveElement, that))\n                   .on(MOUSEENTER + NS, itemSelector, proxy(that._mouseenter, that))\n                   .on(MOUSELEAVE + NS, itemSelector, proxy(that._mouseleave, that))\n                   .on(MOUSEENTER + NS + \" \" + MOUSELEAVE + NS + \" \" +\n                       MOUSEDOWN + NS + \" \" + CLICK + NS, linkSelector, proxy(that._toggleHover, that));\n\n            if (options.openOnClick) {\n                that.clicked = false;\n                that._documentClickHandler = proxy(that._documentClick, that);\n                $(document).click(that._documentClickHandler);\n            }\n\n            element.attr(\"role\", \"menubar\");\n\n            if (element[0].id) {\n                that._ariaId = kendo.format(\"{0}_mn_active\", element[0].id);\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n            OPEN,\n            CLOSE,\n            ACTIVATE,\n            DEACTIVATE,\n            SELECT\n        ],\n\n        options: {\n            name: \"Menu\",\n            animation: {\n                open: {\n                    duration: 200\n                },\n                close: { // if close animation effects are defined, they will be used instead of open.reverse\n                    duration: 100\n                }\n            },\n            orientation: \"horizontal\",\n            direction: \"default\",\n            openOnClick: false,\n            closeOnClick: true,\n            hoverDelay: 100,\n            popupCollision: undefined\n        },\n\n        _initData: function(options) {\n            var that = this;\n\n            if (options.dataSource) {\n                that.angular(\"cleanup\", function(){\n                    return {\n                        elements: that.element.children()\n                    };\n                });\n                that.element.empty();\n                that.append(options.dataSource, that.element);\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: that.element.children()\n                    };\n                });\n            }\n        },\n\n        setOptions: function(options) {\n            var animation = this.options.animation;\n\n            this._animations(options);\n\n            options.animation = extend(true, animation, options.animation);\n\n            if (\"dataSource\" in options) {\n                this._initData(options);\n            }\n\n            this._updateClasses();\n\n            Widget.fn.setOptions.call(this, options);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.element.off(NS);\n\n            if (that._documentClickHandler) {\n                $(document).unbind(\"click\", that._documentClickHandler);\n            }\n\n            kendo.destroy(that.element);\n        },\n\n        enable: function (element, enable) {\n            this._toggleDisabled(element, enable !== false);\n\n            return this;\n        },\n\n        disable: function (element) {\n            this._toggleDisabled(element, false);\n\n            return this;\n        },\n\n        append: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.length ? referenceItem.find(\"> .k-menu-group, > .k-animation-container > .k-menu-group\") : null);\n\n            each(inserted.items, function () {\n                inserted.group.append(this);\n                updateArrow(this);\n            });\n\n            updateArrow(referenceItem);\n            updateFirstLast(inserted.group.find(\".k-first, .k-last\").add(inserted.items));\n\n            return this;\n        },\n\n        insertBefore: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n            each(inserted.items, function () {\n                referenceItem.before(this);\n                updateArrow(this);\n                updateFirstLast(this);\n            });\n\n            updateFirstLast(referenceItem);\n\n            return this;\n        },\n\n        insertAfter: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n            each(inserted.items, function () {\n                referenceItem.after(this);\n                updateArrow(this);\n                updateFirstLast(this);\n            });\n\n            updateFirstLast(referenceItem);\n\n            return this;\n        },\n\n        _insert: function (item, referenceItem, parent) {\n            var that = this,\n                items, groups;\n\n            if (!referenceItem || !referenceItem.length) {\n                parent = that.element;\n            }\n\n            var plain = $.isPlainObject(item),\n                groupData = {\n                    firstLevel: parent.hasClass(MENU),\n                    horizontal: parent.hasClass(MENU + \"-horizontal\"),\n                    expanded: true,\n                    length: parent.children().length\n                };\n\n            if (referenceItem && !parent.length) {\n                parent = $(Menu.renderGroup({ group: groupData })).appendTo(referenceItem);\n            }\n\n            if (plain || $.isArray(item)) { // is JSON\n                items = $($.map(plain ? [ item ] : item, function (value, idx) {\n                            if (typeof value === \"string\") {\n                                return $(value).get();\n                            } else {\n                                return $(Menu.renderItem({\n                                    group: groupData,\n                                    item: extend(value, { index: idx })\n                                })).get();\n                            }\n                        }));\n            } else {\n                if (typeof item == \"string\" && item.charAt(0) != \"<\") {\n                    items = that.element.find(item);\n                } else {\n                    items = $(item);\n                }\n\n                groups = items.find(\"> ul\")\n                                .addClass(\"k-menu-group\")\n                                .attr(\"role\", \"menu\");\n\n                items = items.filter(\"li\");\n\n                items.add(groups.find(\"> li\")).each(function () {\n                    updateItemClasses(this);\n                });\n            }\n\n            return { items: items, group: parent };\n        },\n\n        remove: function (element) {\n            element = this.element.find(element);\n\n            var that = this,\n                parent = element.parentsUntil(that.element, allItemsSelector),\n                group = element.parent(\"ul:not(.k-menu)\");\n\n            element.remove();\n\n            if (group && !group.children(allItemsSelector).length) {\n                var container = group.parent(\".k-animation-container\");\n                if (container.length) {\n                    container.remove();\n                } else {\n                    group.remove();\n                }\n            }\n\n            if (parent.length) {\n                parent = parent.eq(0);\n\n                updateArrow(parent);\n                updateFirstLast(parent);\n            }\n\n            return that;\n        },\n\n        open: function (element) {\n            var that = this,\n                options = that.options,\n                horizontal = options.orientation == \"horizontal\",\n                direction = options.direction,\n                isRtl = kendo.support.isRtl(that.wrapper);\n            element = that.element.find(element);\n\n            if (/^(top|bottom|default)$/.test(direction)) {\n                if (isRtl) {\n                    direction = horizontal ? (direction + \" left\").replace(\"default\", \"bottom\") : \"left\";\n                } else {\n                    direction = horizontal ? (direction + \" right\").replace(\"default\", \"bottom\") : \"right\";\n                }\n            }\n\n            element.siblings()\n                   .find(\">.k-popup:visible,>.k-animation-container>.k-popup:visible\")\n                   .each(function () {\n                       var popup = $(this).data(\"kendoPopup\");\n\n                       if (popup) {\n                           popup.close();\n                       }\n                   });\n\n            element.each(function () {\n                var li = $(this);\n\n                clearTimeout(li.data(TIMER));\n\n                li.data(TIMER, setTimeout(function () {\n                    var ul = li.find(\".k-menu-group:first:hidden\"),\n                        popup;\n\n                    if (ul[0] && that._triggerEvent({ item: li[0], type: OPEN }) === false) {\n\n                        if (!ul.find(\".k-menu-group\")[0] && ul.children(\".k-item\").length > 1) {\n                            var windowHeight = $(window).height(),\n                                setScrolling = function(){\n                                    ul.css({maxHeight: windowHeight - (ul.outerHeight() - ul.height()) - kendo.getShadows(ul).bottom, overflow: \"auto\"});\n                                };\n\n                            if (kendo.support.browser.msie && kendo.support.browser.version <= 7) {\n                                setTimeout(setScrolling, 0); // timeout required by IE7\n                            } else {\n                                setScrolling();\n                            }\n                        } else {\n                            ul.css({maxHeight: \"\", overflow: \"\"});\n                        }\n\n                        li.data(ZINDEX, li.css(ZINDEX));\n                        li.css(ZINDEX, that.nextItemZIndex ++);\n\n                        popup = ul.data(KENDOPOPUP);\n                        var root = li.parent().hasClass(MENU),\n                            parentHorizontal = root && horizontal,\n                            directions = parseDirection(direction, root, isRtl),\n                            effects = options.animation.open.effects,\n                            openEffects = effects !== undefined ? effects : \"slideIn:\" + getEffectDirection(direction, root);\n\n                        if (!popup) {\n                            popup = ul.kendoPopup({\n                                activate: function() { that._triggerEvent({ item: this.wrapper.parent(), type: ACTIVATE }); },\n                                deactivate: function(e) {\n                                    e.sender.element // Restore opacity after fade.\n                                        .removeData(\"targetTransform\")\n                                        .css({ opacity: \"\" });\n                                    that._triggerEvent({ item: this.wrapper.parent(), type: DEACTIVATE });\n                                },\n                                origin: directions.origin,\n                                position: directions.position,\n                                collision: options.popupCollision !== undefined ? options.popupCollision : (parentHorizontal ? \"fit\" : \"fit flip\"),\n                                anchor: li,\n                                appendTo: li,\n                                animation: {\n                                    open: extend(true, { effects: openEffects }, options.animation.open),\n                                    close: options.animation.close\n                                },\n                                close: function (e) {\n                                    var li = e.sender.wrapper.parent();\n\n                                    if (!that._triggerEvent({ item: li[0], type: CLOSE })) {\n                                        li.css(ZINDEX, li.data(ZINDEX));\n                                        li.removeData(ZINDEX);\n\n                                        if (touch) {\n                                            li.removeClass(HOVERSTATE);\n                                            that._removeHoverItem();\n                                        }\n                                    } else {\n                                        e.preventDefault();\n                                    }\n                                }\n                            }).data(KENDOPOPUP);\n                        } else {\n                            popup = ul.data(KENDOPOPUP);\n                            popup.options.origin = directions.origin;\n                            popup.options.position = directions.position;\n                            popup.options.animation.open.effects = openEffects;\n                        }\n                        ul.removeAttr(\"aria-hidden\");\n                        popup.open();\n                    }\n\n                }, that.options.hoverDelay));\n            });\n\n            return that;\n        },\n\n        close: function (items, dontClearClose) {\n            var that = this,\n                element = that.element;\n\n            items = element.find(items);\n\n            if (!items.length) {\n                items = element.find(\">.k-item\");\n            }\n\n            items.each(function () {\n                var li = $(this);\n\n                if (!dontClearClose && that._isRootItem(li)) {\n                    that.clicked = false;\n                }\n\n                clearTimeout(li.data(TIMER));\n\n                li.data(TIMER, setTimeout(function () {\n                    var popup = li.find(\".k-menu-group:not(.k-list-container):not(.k-calendar-container):first:visible\").data(KENDOPOPUP);\n\n                    if (popup) {\n                        popup.close();\n                        popup.element.attr(\"aria-hidden\", true);\n                    }\n                }, that.options.hoverDelay));\n            });\n\n            return that;\n        },\n\n        _toggleDisabled: function (items, enable) {\n            this.element.find(items).each(function () {\n                $(this)\n                    .toggleClass(DEFAULTSTATE, enable)\n                    .toggleClass(DISABLEDSTATE, !enable)\n                    .attr(\"aria-disabled\", !enable);\n            });\n        },\n\n        _toggleHover: function(e) {\n            var target = $(kendo.eventTarget(e) || e.target).closest(allItemsSelector),\n                isEnter = e.type == MOUSEENTER || MOUSEDOWN.indexOf(e.type) !== -1;\n\n            if (!target.parents(\"li.\" + DISABLEDSTATE).length) {\n                target.toggleClass(HOVERSTATE, isEnter || e.type == \"mousedown\" || e.type == \"click\");\n            }\n\n            this._removeHoverItem();\n        },\n\n        _preventClose: function() {\n            if (!this.options.closeOnClick) {\n                this._closurePrevented = true;\n            }\n        },\n\n        _checkActiveElement: function(e) {\n            var that = this,\n                hoverItem = $(e ? e.currentTarget : this._hoverItem()),\n                target = that._findRootParent(hoverItem)[0];\n\n            if (!this._closurePrevented) {\n                setTimeout(function() {\n                    if (!document.hasFocus() || (!contains(target, kendo._activeElement()) && e && !contains(target, e.currentTarget))) {\n                        that.close(target);\n                    }\n                }, 0);\n            }\n\n            this._closurePrevented = false;\n        },\n\n        _removeHoverItem: function() {\n            var oldHoverItem = this._hoverItem();\n\n            if (oldHoverItem && oldHoverItem.hasClass(FOCUSEDSTATE)) {\n                oldHoverItem.removeClass(FOCUSEDSTATE);\n                this._oldHoverItem = null;\n            }\n        },\n\n        _updateClasses: function() {\n            var element = this.element,\n                nonContentGroupsSelector = \".k-menu-init div ul\",\n                items;\n\n            element.removeClass(\"k-menu-horizontal k-menu-vertical\");\n            element.addClass(\"k-widget k-reset k-header k-menu-init \" + MENU).addClass(MENU + \"-\" + this.options.orientation);\n\n            element.find(\"li > ul\")\n                   .filter(function() {\n                       return !kendo.support.matchesSelector.call(this, nonContentGroupsSelector);\n                   })\n                   .addClass(\"k-group k-menu-group\")\n                   .attr(\"role\", \"menu\")\n                   .attr(\"aria-hidden\", element.is(\":visible\"))\n                   .end()\n                   .find(\"li > div\")\n                   .addClass(\"k-content\")\n                   .attr(\"tabindex\", \"-1\"); // Capture the focus before the Menu\n\n            items = element.find(\"> li,.k-menu-group > li\");\n\n            element.removeClass(\"k-menu-init\");\n\n            items.each(function () {\n                updateItemClasses(this);\n            });\n        },\n\n        _mouseenter: function (e) {\n            var that = this,\n                element = $(e.currentTarget),\n                hasChildren = (element.children(\".k-animation-container\").length || element.children(groupSelector).length);\n\n            if (e.delegateTarget != element.parents(menuSelector)[0]) {\n                return;\n            }\n\n            if ((!that.options.openOnClick || that.clicked) && !touch && !((pointers || msPointers) &&\n                e.originalEvent.pointerType in touchPointerTypes && that._isRootItem(element.closest(allItemsSelector)))) {\n                if (!contains(e.currentTarget, e.relatedTarget) && hasChildren) {\n                    that.open(element);\n                }\n            }\n\n            if (that.options.openOnClick && that.clicked || mobile) {\n                element.siblings().each(proxy(function (_, sibling) {\n                    that.close(sibling, true);\n                }, that));\n            }\n        },\n\n        _mouseleave: function (e) {\n            var that = this,\n                element = $(e.currentTarget),\n                hasChildren = (element.children(\".k-animation-container\").length || element.children(groupSelector).length);\n\n            if (element.parentsUntil(\".k-animation-container\", \".k-list-container,.k-calendar-container\")[0]) {\n                e.stopImmediatePropagation();\n                return;\n            }\n\n            if (!that.options.openOnClick && !touch && !((pointers || msPointers) &&\n                e.originalEvent.pointerType in touchPointerTypes) &&\n                !contains(e.currentTarget, e.relatedTarget || e.target) && hasChildren &&\n                !contains(e.currentTarget, kendo._activeElement())) {\n                    that.close(element);\n            }\n        },\n\n        _click: function (e) {\n            var that = this, openHandle,\n                options = that.options,\n                target = $(kendo.eventTarget(e)),\n                nodeName = target[0] ? target[0].nodeName.toUpperCase() : \"\",\n                formNode = (nodeName == \"INPUT\" || nodeName == \"SELECT\" || nodeName == \"BUTTON\" || nodeName == \"LABEL\"),\n                link = target.closest(\".\" + LINK),\n                element = target.closest(allItemsSelector),\n                href = link.attr(\"href\"), childGroup, childGroupVisible,\n                targetHref = target.attr(\"href\"),\n                sampleHref = $(\"<a href='#' />\").attr(\"href\"),\n                isLink = (!!href && href !== sampleHref),\n                isLocalLink = isLink && !!href.match(/^#/),\n                isTargetLink = (!!targetHref && targetHref !== sampleHref),\n                shouldCloseTheRootItem = (options.openOnClick && childGroupVisible && that._isRootItem(element));\n\n            if (target.closest(templateSelector, element[0]).length) {\n                return;\n            }\n\n            if (element.hasClass(DISABLEDSTATE)) {\n                e.preventDefault();\n                return;\n            }\n\n            if (!e.handled && that._triggerEvent({ item: element[0], type: SELECT }) && !formNode) { // We shouldn't stop propagation and shoudn't prevent form elements.\n                e.preventDefault();\n            }\n\n            e.handled = true;\n\n            childGroup = element.children(popupSelector);\n            childGroupVisible = childGroup.is(\":visible\");\n\n            if (options.closeOnClick && (!isLink || isLocalLink) && (!childGroup.length || shouldCloseTheRootItem)) {\n                element.removeClass(HOVERSTATE).css(\"height\"); // Force refresh for Chrome\n                that._oldHoverItem = that._findRootParent(element);\n                that.close(link.parentsUntil(that.element, allItemsSelector));\n                that.clicked = false;\n                if (\"MSPointerUp\".indexOf(e.type) != -1) {\n                    e.preventDefault();\n                }\n                return;\n            }\n\n            if (isLink && e.enterKey) {\n                link[0].click();\n            }\n\n            if ((!that._isRootItem(element) || !options.openOnClick) && !kendo.support.touch && !((pointers || msPointers) && that._isRootItem(element.closest(allItemsSelector)))) {\n                return;\n            }\n\n            if (!isLink && !formNode && !isTargetLink) {\n                e.preventDefault();\n            }\n\n            that.clicked = true;\n            openHandle = childGroup.is(\":visible\") ? CLOSE : OPEN;\n            if (!options.closeOnClick && openHandle == CLOSE) {\n                return;\n            }\n            that[openHandle](element);\n        },\n\n        _documentClick: function (e) {\n            if (contains(this.element[0], e.target)) {\n                return;\n            }\n\n            this.clicked = false;\n        },\n\n        _focus: function (e) {\n            var that = this,\n                target = e.target,\n                hoverItem = that._hoverItem(),\n                active = activeElement();\n\n            if (target != that.wrapper[0] && !$(target).is(\":kendoFocusable\")) {\n                e.stopPropagation();\n                $(target).closest(\".k-content\").closest(\".k-menu-group\").closest(\".k-item\").addClass(FOCUSEDSTATE);\n                that.wrapper.focus();\n                return;\n            }\n\n            if (active === e.currentTarget) {\n                if (hoverItem.length) {\n                    that._moveHover([], hoverItem);\n                } else if (!that._oldHoverItem) {\n                    that._moveHover([], that.wrapper.children().first());\n                }\n            }\n        },\n\n        _keydown: function (e) {\n            var that = this,\n                key = e.keyCode,\n                hoverItem = that._oldHoverItem,\n                target,\n                belongsToVertical,\n                hasChildren,\n                isRtl = kendo.support.isRtl(that.wrapper);\n\n            if (e.target != e.currentTarget && key != keys.ESC) {\n                return;\n            }\n\n            if (!hoverItem) {\n                hoverItem  = that._oldHoverItem = that._hoverItem();\n            }\n\n            belongsToVertical = that._itemBelongsToVertival(hoverItem);\n            hasChildren = that._itemHasChildren(hoverItem);\n\n            if (key == keys.RIGHT) {\n                target = that[isRtl ? \"_itemLeft\" : \"_itemRight\"](hoverItem, belongsToVertical, hasChildren);\n            } else if (key == keys.LEFT) {\n                target = that[isRtl ? \"_itemRight\" : \"_itemLeft\"](hoverItem, belongsToVertical, hasChildren);\n            } else if (key == keys.DOWN) {\n                target = that._itemDown(hoverItem, belongsToVertical, hasChildren);\n            } else if (key == keys.UP) {\n                target = that._itemUp(hoverItem, belongsToVertical, hasChildren);\n            } else if (key == keys.ESC) {\n                target = that._itemEsc(hoverItem, belongsToVertical);\n            } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n                target = hoverItem.children(\".k-link\");\n                if (target.length > 0) {\n                    that._click({ target: target[0], preventDefault: function () {}, enterKey: true });\n                    that._moveHover(hoverItem, that._findRootParent(hoverItem));\n                }\n            } else if (key == keys.TAB) {\n                target = that._findRootParent(hoverItem);\n                that._moveHover(hoverItem, target);\n                that._checkActiveElement();\n                return;\n            }\n\n            if (target && target[0]) {\n                e.preventDefault();\n                e.stopPropagation(); // needed to handle ESC in column menu only when a root item is focused\n            }\n        },\n\n        _hoverItem: function() {\n            return this.wrapper.find(\".k-item.k-state-hover,.k-item.k-state-focused\").filter(\":visible\");\n        },\n\n        _itemBelongsToVertival: function (item) {\n            var menuIsVertical = this.wrapper.hasClass(\"k-menu-vertical\");\n\n            if (!item.length) {\n                return menuIsVertical;\n            }\n            return item.parent().hasClass(\"k-menu-group\") || menuIsVertical;\n        },\n\n        _itemHasChildren: function (item) {\n            if (!item.length) {\n                return false;\n            }\n            return item.children(\"ul.k-menu-group, div.k-animation-container\").length > 0;\n        },\n\n        _moveHover: function (item, nextItem) {\n            var that = this,\n                id = that._ariaId;\n\n            if (item.length && nextItem.length) {\n                item.removeClass(FOCUSEDSTATE);\n            }\n\n            if (nextItem.length) {\n                if (nextItem[0].id) {\n                    id = nextItem[0].id;\n                }\n\n                nextItem.addClass(FOCUSEDSTATE);\n                that._oldHoverItem = nextItem;\n\n                if (id) {\n                    that.element.removeAttr(\"aria-activedescendant\");\n                    $(\"#\" + id).removeAttr(\"id\");\n                    nextItem.attr(\"id\", id);\n                    that.element.attr(\"aria-activedescendant\", id);\n                }\n            }\n        },\n\n        _findRootParent: function (item) {\n            if (this._isRootItem(item)) {\n                return item;\n            } else {\n                return item.parentsUntil(menuSelector, \"li.k-item\").last();\n            }\n        },\n\n        _isRootItem: function (item) {\n            return item.parent().hasClass(MENU);\n        },\n\n        _itemRight: function (item, belongsToVertical, hasChildren) {\n            var that = this,\n                nextItem,\n                parentItem;\n\n            if (item.hasClass(DISABLEDSTATE)) {\n                return;\n            }\n\n            if (!belongsToVertical) {\n                nextItem = item.nextAll(nextSelector);\n                if (!nextItem.length) {\n                    nextItem = item.prevAll(lastSelector);\n                }\n            } else if (hasChildren) {\n                that.open(item);\n                nextItem = item.find(\".k-menu-group\").children().first();\n            } else if (that.options.orientation == \"horizontal\") {\n                parentItem = that._findRootParent(item);\n                that.close(parentItem);\n                nextItem = parentItem.nextAll(nextSelector);\n            }\n\n            if (nextItem && !nextItem.length) {\n                nextItem = that.wrapper.children(\".k-item\").first();\n            } else if (!nextItem) {\n                nextItem = [];\n            }\n\n            that._moveHover(item, nextItem);\n            return nextItem;\n        },\n\n        _itemLeft: function (item, belongsToVertical) {\n            var that = this,\n                nextItem;\n\n            if (!belongsToVertical) {\n                nextItem = item.prevAll(nextSelector);\n                if (!nextItem.length) {\n                    nextItem = item.nextAll(lastSelector);\n                }\n            } else {\n                nextItem = item.parent().closest(\".k-item\");\n                that.close(nextItem);\n                if (that._isRootItem(nextItem) && that.options.orientation == \"horizontal\") {\n                    nextItem = nextItem.prevAll(nextSelector);\n                }\n            }\n\n            if (!nextItem.length) {\n                nextItem = that.wrapper.children(\".k-item\").last();\n            }\n\n            that._moveHover(item, nextItem);\n            return nextItem;\n        },\n\n        _itemDown: function (item, belongsToVertical, hasChildren) {\n            var that = this,\n                nextItem;\n\n            if (!belongsToVertical) {\n                if (!hasChildren || item.hasClass(DISABLEDSTATE)) {\n                    return;\n                } else {\n                    that.open(item);\n                    nextItem = item.find(\".k-menu-group\").children().first();\n                }\n            } else {\n                nextItem = item.nextAll(nextSelector);\n            }\n\n            if (!nextItem.length && item.length) {\n                nextItem = item.parent().children().first();\n            } else if (!item.length) {\n                nextItem = that.wrapper.children(\".k-item\").first();\n            }\n\n            that._moveHover(item, nextItem);\n            return nextItem;\n        },\n\n        _itemUp: function (item, belongsToVertical) {\n            var that = this,\n                nextItem;\n\n            if (!belongsToVertical) {\n                return;\n            } else {\n                nextItem = item.prevAll(nextSelector);\n            }\n\n            if (!nextItem.length && item.length) {\n                nextItem = item.parent().children().last();\n            } else if (!item.length) {\n                nextItem = that.wrapper.children(\".k-item\").last();\n            }\n\n            that._moveHover(item, nextItem);\n            return nextItem;\n        },\n\n        _itemEsc: function (item, belongsToVertical) {\n            var that = this,\n                nextItem;\n\n            if (!belongsToVertical) {\n                return item;\n            } else {\n                nextItem = item.parent().closest(\".k-item\");\n                that.close(nextItem);\n                that._moveHover(item, nextItem);\n            }\n\n            return nextItem;\n        },\n\n        _triggerEvent: function(e) {\n            var that = this;\n\n            return that.trigger(e.type, { type: e.type, item: e.item });\n        },\n\n        _focusHandler: function (e) {\n            var that = this,\n                item = $(kendo.eventTarget(e)).closest(allItemsSelector);\n\n            setTimeout(function () {\n                that._moveHover([], item);\n                if (item.children(\".k-content\")[0]) {\n                    item.parent().closest(\".k-item\").removeClass(FOCUSEDSTATE);\n                }\n            }, 200);\n        },\n\n        _animations: function(options) {\n            if (options && (\"animation\" in options) && !options.animation) {\n                options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n            }\n        }\n\n    });\n\n    // client-side rendering\n    extend(Menu, {\n        renderItem: function (options) {\n            options = extend({ menu: {}, group: {} }, options);\n\n            var empty = templates.empty,\n                item = options.item;\n\n            return templates.item(extend(options, {\n                image: item.imageUrl ? templates.image : empty,\n                sprite: item.spriteCssClass ? templates.sprite : empty,\n                itemWrapper: templates.itemWrapper,\n                renderContent: Menu.renderContent,\n                arrow: item.items || item.content ? templates.arrow : empty,\n                subGroup: Menu.renderGroup\n            }, rendering));\n        },\n\n        renderGroup: function (options) {\n            return templates.group(extend({\n                renderItems: function(options) {\n                    var html = \"\",\n                        i = 0,\n                        items = options.items,\n                        len = items ? items.length : 0,\n                        group = extend({ length: len }, options.group);\n\n                    for (; i < len; i++) {\n                        html += Menu.renderItem(extend(options, {\n                            group: group,\n                            item: extend({ index: i }, items[i])\n                        }));\n                    }\n\n                    return html;\n                }\n            }, options, rendering));\n        },\n\n        renderContent: function (options) {\n            return templates.content(extend(options, rendering));\n        }\n    });\n\n    var ContextMenu = Menu.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Menu.fn.init.call(that, element, options);\n\n            that.target = $(that.options.target);\n\n            that._popup();\n            that._wire();\n        },\n        options: {\n            name: \"ContextMenu\",\n            filter: null,\n            showOn: \"contextmenu\",\n            orientation: \"vertical\",\n            alignToAnchor: false,\n            target: \"body\"\n        },\n\n        events: [\n            OPEN,\n            CLOSE,\n            ACTIVATE,\n            DEACTIVATE,\n            SELECT\n        ],\n\n        setOptions: function(options) {\n            var that = this;\n\n            Menu.fn.setOptions.call(that, options);\n\n            that.target.off(that.showOn + NS, that._showProxy);\n\n            if (that.userEvents) {\n                that.userEvents.destroy();\n            }\n\n            that.target = $(that.options.target);\n            if (options.orientation && that.popup.wrapper[0]) {\n                that.popup.element.unwrap();\n            }\n\n            that._wire();\n\n            Menu.fn.setOptions.call(this, options);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.target.off(that.options.showOn + NS);\n            DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS, that._closeProxy);\n\n            if (that.userEvents) {\n                that.userEvents.destroy();\n            }\n\n            Menu.fn.destroy.call(that);\n        },\n\n        open: function(x, y) {\n            var that = this;\n\n            x = $(x)[0];\n\n            if (contains(that.element[0], $(x)[0])) { // call parent open for children elements\n                Menu.fn.open.call(that, x);\n            } else {\n                if (that._triggerEvent({ item: that.element, type: OPEN }) === false) {\n                    if (that.popup.visible() && that.options.filter) {\n                        that.popup.close(true);\n                    }\n\n                    if (y !== undefined) {\n                        that.popup.wrapper.hide();\n                        that.popup.open(x, y);\n                    } else {\n                        that.popup.options.anchor = (x ? x : that.popup.anchor) || that.target;\n                        that.popup.open();\n                    }\n\n                    DOCUMENT_ELEMENT.off(that.popup.downEvent, that.popup._mousedownProxy);\n                    DOCUMENT_ELEMENT\n                        .on(kendo.support.mousedown + NS, that._closeProxy);\n                }\n            }\n\n            return that;\n        },\n\n        close: function() {\n            var that = this;\n\n            if (contains(that.element[0], $(arguments[0])[0])) {\n                Menu.fn.close.call(that, arguments[0]);\n            } else {\n                if (that.popup.visible()) {\n                    if (that._triggerEvent({ item: that.element, type: CLOSE }) === false) {\n                        that.popup.close();\n                        DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS, that._closeProxy);\n                        that.unbind(SELECT, that._closeTimeoutProxy);\n                    }\n                }\n            }\n        },\n\n        _showHandler: function (e) {\n            var ev = e, offset,\n                that = this,\n                options = that.options;\n\n            if (e.event) {\n                ev = e.event;\n                ev.pageX = e.x.location;\n                ev.pageY = e.y.location;\n            }\n\n            if (contains(that.element[0], e.relatedTarget || e.target)) {\n                return;\n            }\n\n            that._eventOrigin = ev;\n\n            ev.preventDefault();\n            ev.stopImmediatePropagation();\n\n            that.element.find(\".\" + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n\n            if ((options.filter && kendo.support.matchesSelector.call(ev.currentTarget, options.filter)) || !options.filter) {\n                if (options.alignToAnchor) {\n                    that.open(ev.currentTarget);\n                } else {\n                    that.popup.options.anchor = ev.currentTarget;\n\n                    if (that._targetChild) {\n                        offset = that.target.offset();\n                        that.open(ev.pageX - offset.left, ev.pageY - offset.top);\n                    } else {\n                        that.open(ev.pageX, ev.pageY);\n                    }\n                }\n            }\n        },\n\n        _closeHandler: function (e) {\n            var that = this,\n\t\t\t\toptions = that.options,\n                target = $(e.relatedTarget || e.target),\n\t\t\t\tsameTarget = target.closest(that.target.selector)[0] == that.target[0],\n                children = target.closest(itemSelector).children(popupSelector),\n                containment = contains(that.element[0], target[0]);\n\n            that._eventOrigin = e;\n\n            var normalClick = e.which !== 3;\n\n            if (that.popup.visible() && ((normalClick && sameTarget) || !sameTarget) && ((that.options.closeOnClick && !children[0] && containment) || !containment)) {\n                    if (containment) {\n                        this.unbind(SELECT, this._closeTimeoutProxy);\n                        that.bind(SELECT, that._closeTimeoutProxy);\n                    } else {\n                        that.close();\n                    }\n            }\n        },\n\n        _wire: function() {\n            var that = this,\n                options = that.options,\n                target = that.target;\n\n            that._showProxy = proxy(that._showHandler, that);\n            that._closeProxy = proxy(that._closeHandler, that);\n            that._closeTimeoutProxy = proxy(that.close, that);\n\n            if (target[0]) {\n                if (kendo.support.mobileOS && options.showOn == \"contextmenu\") {\n                    that.userEvents = new kendo.UserEvents(target, {\n                        filter: options.filter,\n                        allowSelection: false\n                    });\n\n                    target.on(options.showOn + NS, false);\n                    that.userEvents.bind(\"hold\", that._showProxy);\n                } else {\n                    if (options.filter) {\n                        target.on(options.showOn + NS, options.filter, that._showProxy);\n                    } else {\n                        target.on(options.showOn + NS, that._showProxy);\n                    }\n                }\n            }\n        },\n\n        _triggerEvent: function(e) {\n            var that = this,\n                anchor = $(that.popup.options.anchor)[0],\n                origin = that._eventOrigin;\n\n            that._eventOrigin = undefined;\n\n            return that.trigger(e.type, extend({ type: e.type, item: e.item || this.element[0], target: anchor }, origin ? { event: origin } : {} ));\n        },\n\n        _popup: function() {\n            var that = this;\n\n            that._triggerProxy = proxy(that._triggerEvent, that);\n\n            that.popup = that.element\n                            .addClass(\"k-context-menu\")\n                            .kendoPopup({\n                                anchor: that.target || \"body\",\n                                copyAnchorStyles: that.options.copyAnchorStyles,\n                                collision: that.options.popupCollision || \"fit\",\n                                animation: that.options.animation,\n                                activate: that._triggerProxy,\n                                deactivate: that._triggerProxy\n                            }).data(\"kendoPopup\");\n\n            that._targetChild = contains(that.target[0], that.popup.element[0]);\n        }\n    });\n\n    ui.plugin(Menu);\n    ui.plugin(ContextMenu);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        proxy = $.proxy,\n        extend = $.extend,\n        grep = $.grep,\n        map = $.map,\n        inArray = $.inArray,\n        ACTIVE = \"k-state-selected\",\n        ASC = \"asc\",\n        DESC = \"desc\",\n        CHANGE = \"change\",\n        INIT = \"init\",\n        SELECT = \"select\",\n        POPUP = \"kendoPopup\",\n        FILTERMENU = \"kendoFilterMenu\",\n        MENU = \"kendoMenu\",\n        NS = \".kendoColumnMenu\",\n        Widget = ui.Widget;\n\n    function trim(text) {\n        return $.trim(text).replace(/&nbsp;/gi, \"\");\n    }\n\n    function toHash(arr, key) {\n        var result = {};\n        var idx, len, current;\n        for (idx = 0, len = arr.length; idx < len; idx ++) {\n            current = arr[idx];\n            result[current[key]] = current;\n        }\n        return result;\n    }\n\n    function leafColumns(columns) {\n        var result = [];\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (!columns[idx].columns) {\n                result.push(columns[idx]);\n                continue;\n            }\n            result = result.concat(leafColumns(columns[idx].columns));\n        }\n\n        return result;\n    }\n\n    var ColumnMenu = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                link;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n            that.owner = options.owner;\n            that.dataSource = options.dataSource;\n\n            that.field = element.attr(kendo.attr(\"field\"));\n            that.title = element.attr(kendo.attr(\"title\"));\n\n            link = element.find(\".k-header-column-menu\");\n\n            if (!link[0]) {\n                link = element.addClass(\"k-with-icon\").prepend('<a class=\"k-header-column-menu\" href=\"#\"><span class=\"k-icon k-i-arrowhead-s\"/></a>').find(\".k-header-column-menu\");\n            }\n\n            that.link = link\n                .attr(\"tabindex\", -1)\n                .on(\"click\" + NS, proxy(that._click, that));\n\n            that.wrapper = $('<div class=\"k-column-menu\"/>');\n        },\n\n        _init: function() {\n            var that = this;\n\n            that.pane = that.options.pane;\n            if (that.pane) {\n                that._isMobile = true;\n            }\n\n            if (that._isMobile) {\n                that._createMobileMenu();\n            } else {\n                that._createMenu();\n            }\n\n            that._angularItems(\"compile\");\n\n            that._sort();\n\n            that._columns();\n\n            that._filter();\n\n            that._lockColumns();\n\n            that.trigger(INIT, { field: that.field, container: that.wrapper });\n        },\n\n        events: [ INIT ],\n\n        options: {\n            name: \"ColumnMenu\",\n            messages: {\n                sortAscending: \"Sort Ascending\",\n                sortDescending: \"Sort Descending\",\n                filter: \"Filter\",\n                columns: \"Columns\",\n                done: \"Done\",\n                settings: \"Column Settings\",\n                lock: \"Lock\",\n                unlock: \"Unlock\"\n            },\n            filter: \"\",\n            columns: true,\n            sortable: true,\n            filterable: true,\n            animations: {\n                left: \"slide\"\n            }\n        },\n\n        _createMenu: function() {\n            var that = this,\n                options = that.options;\n\n            that.wrapper.html(kendo.template(template)({\n                ns: kendo.ns,\n                messages: options.messages,\n                sortable: options.sortable,\n                filterable: options.filterable,\n                columns: that._ownerColumns(),\n                showColumns: options.columns,\n                lockedColumns: options.lockedColumns\n            }));\n\n            that.popup = that.wrapper[POPUP]({\n                anchor: that.link,\n                open: proxy(that._open, that),\n                activate: proxy(that._activate, that),\n                close: function() {\n                    if (that.options.closeCallback) {\n                        that.options.closeCallback(that.element);\n                    }\n                }\n            }).data(POPUP);\n\n            that.menu = that.wrapper.children()[MENU]({\n                orientation: \"vertical\",\n                closeOnClick: false\n            }).data(MENU);\n        },\n\n        _createMobileMenu: function() {\n            var that = this,\n                options = that.options;\n\n            var html = kendo.template(mobileTemplate)({\n                ns: kendo.ns,\n                field: that.field,\n                title: that.title || that.field,\n                messages: options.messages,\n                sortable: options.sortable,\n                filterable: options.filterable,\n                columns: that._ownerColumns(),\n                showColumns: options.columns,\n                lockedColumns: options.lockedColumns\n            });\n\n            that.view = that.pane.append(html);\n\n            that.wrapper = that.view.element.find(\".k-column-menu\");\n\n            that.menu = new MobileMenu(that.wrapper.children(), {\n                pane: that.pane\n            });\n\n            that.view.element.on(\"click\", \".k-done\", function(e) {\n                that.close();\n                e.preventDefault();\n            });\n\n            if (that.options.lockedColumns) {\n                that.view.bind(\"show\", function() {\n                    that._updateLockedColumns();\n                });\n            }\n        },\n\n        _angularItems: function(action) {\n            var that = this;\n            that.angular(action, function(){\n                var items = that.wrapper.find(\".k-columns-item input[\" + kendo.attr(\"field\") + \"]\").map(function(){\n                    return $(this).closest(\"li\");\n                });\n                var data = map(that._ownerColumns(), function(col){\n                    return { column: col._originalObject };\n                });\n                return {\n                    elements: items,\n                    data: data\n                };\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that._angularItems(\"cleanup\");\n\n            Widget.fn.destroy.call(that);\n\n            if (that.filterMenu) {\n                that.filterMenu.destroy();\n            }\n\n            if (that._refreshHandler) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler);\n            }\n\n            if (that.options.columns && that.owner && that._updateColumnsMenuHandler) {\n                that.owner.unbind(\"columnShow\", that._updateColumnsMenuHandler);\n                that.owner.unbind(\"columnHide\", that._updateColumnsMenuHandler);\n            }\n\n            if (that.menu) {\n                that.menu.element.off(NS);\n                that.menu.destroy();\n            }\n\n            that.wrapper.off(NS);\n\n            if (that.popup) {\n                that.popup.destroy();\n            }\n\n            if (that.view) {\n                that.view.purge();\n            }\n\n            that.link.off(NS);\n            that.owner = null;\n            that.wrapper = null;\n            that.element = null;\n        },\n\n        close: function() {\n            this.menu.close();\n            if (this.popup) {\n                this.popup.close();\n                this.popup.element.off(\"keydown\" + NS);\n            }\n        },\n\n        _click: function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n\n            var options = this.options;\n\n            if (options.filter && this.element.is(!options.filter)) {\n                return;\n            }\n\n            if (!this.popup && !this.pane) {\n                this._init();\n            }\n\n            if (this._isMobile) {\n                this.pane.navigate(this.view, this.options.animations.left);\n            } else {\n                this.popup.toggle();\n            }\n        },\n\n        _open: function() {\n            var that = this;\n            $(\".k-column-menu\").not(that.wrapper).each(function() {\n                $(this).data(POPUP).close();\n            });\n            that.popup.element.on(\"keydown\" + NS, function(e) {\n                if (e.keyCode == kendo.keys.ESC) {\n                    that.close();\n                }\n            });\n\n            if (that.options.lockedColumns) {\n                that._updateLockedColumns();\n            }\n        },\n\n        _activate: function() {\n            this.menu.element.focus();\n        },\n\n        _ownerColumns: function() {\n            var columns = leafColumns(this.owner.columns),\n                menuColumns = grep(columns, function(col) {\n                    var result = true,\n                        title = trim(col.title || \"\");\n\n                    if (col.menu === false || (!col.field && !title.length)) {\n                        result = false;\n                    }\n\n                    return result;\n                });\n\n            return map(menuColumns, function(col) {\n                return {\n                    originalField: col.field,\n                    field: col.field || col.title,\n                    title: col.title || col.field,\n                    hidden: col.hidden,\n                    index: inArray(col, columns),\n                    locked: !!col.locked,\n                    _originalObject: col\n                };\n            });\n        },\n\n        _sort: function() {\n            var that = this;\n\n            if (that.options.sortable) {\n                that.refresh();\n\n                that._refreshHandler = proxy(that.refresh, that);\n\n                that.dataSource.bind(CHANGE, that._refreshHandler);\n\n                that.menu.bind(SELECT, function(e) {\n                    var item = $(e.item),\n                        dir;\n\n                    if (item.hasClass(\"k-sort-asc\")) {\n                        dir = ASC;\n                    } else if (item.hasClass(\"k-sort-desc\")) {\n                        dir = DESC;\n                    }\n\n                    if (!dir) {\n                        return;\n                    }\n\n                    item.parent().find(\".k-sort-\" + (dir == ASC ? DESC : ASC)).removeClass(ACTIVE);\n\n                    that._sortDataSource(item, dir);\n\n                    that.close();\n                });\n            }\n        },\n\n        _sortDataSource: function(item, dir) {\n            var that = this,\n                sortable = that.options.sortable,\n                compare = sortable.compare === null ? undefined : sortable.compare,\n                dataSource = that.dataSource,\n                idx,\n                length,\n                sort = dataSource.sort() || [];\n\n            if (item.hasClass(ACTIVE) && sortable && sortable.allowUnsort !== false) {\n                item.removeClass(ACTIVE);\n                dir = undefined;\n            } else {\n                item.addClass(ACTIVE);\n            }\n\n            if (sortable.mode === \"multiple\") {\n                for (idx = 0, length = sort.length; idx < length; idx++) {\n                    if (sort[idx].field === that.field) {\n                        sort.splice(idx, 1);\n                        break;\n                    }\n                }\n                sort.push({ field: that.field, dir: dir, compare: compare });\n            } else {\n                sort = [ { field: that.field, dir: dir, compare: compare} ];\n            }\n\n            dataSource.sort(sort);\n        },\n\n        _columns: function() {\n            var that = this;\n\n            if (that.options.columns) {\n\n                that._updateColumnsMenu();\n\n                that._updateColumnsMenuHandler = proxy(that._updateColumnsMenu, that);\n\n                that.owner.bind([\"columnHide\", \"columnShow\"], that._updateColumnsMenuHandler);\n\n                that.menu.bind(SELECT, function(e) {\n                    var item = $(e.item),\n                        input,\n                        index,\n                        column,\n                        columns = leafColumns(that.owner.columns),\n                        field;\n\n                    if (that._isMobile) {\n                        e.preventDefault();\n                    }\n\n                    if (!item.parent().closest(\"li.k-columns-item\")[0]) {\n                        return;\n                    }\n\n                    input = item.find(\":checkbox\");\n                    if (input.attr(\"disabled\")) {\n                        return;\n                    }\n\n                    field = input.attr(kendo.attr(\"field\"));\n\n                    column = grep(columns, function(column) {\n                        return column.field == field || column.title == field;\n                    })[0];\n\n                    if (column.hidden === true) {\n                        that.owner.showColumn(column);\n                    } else {\n                        that.owner.hideColumn(column);\n                    }\n                });\n            }\n        },\n\n        _updateColumnsMenu: function() {\n            var idx, length, current, checked, locked;\n            var fieldAttr = kendo.attr(\"field\"),\n                lockedAttr = kendo.attr(\"locked\"),\n                visible = grep(this._ownerColumns(), function(field) {\n                    return !field.hidden;\n                }),\n                visibleDataFields = grep(visible, function(field) {\n                    return field.originalField;\n                }),\n                lockedCount = grep(visibleDataFields, function(col) {\n                    return col.locked === true;\n                }).length,\n                nonLockedCount = grep(visibleDataFields, function(col) {\n                    return col.locked !== true;\n                }).length;\n\n            visible = map(visible, function(col) {\n                return col.field;\n            });\n\n            var checkboxes = this.wrapper\n                .find(\".k-columns-item input[\" + fieldAttr + \"]\")\n                .prop(\"disabled\", false)\n                .prop(\"checked\", false);\n\n            for (idx = 0, length = checkboxes.length; idx < length; idx ++) {\n                current = checkboxes.eq(idx);\n                locked = current.attr(lockedAttr) === \"true\";\n                checked = false;\n                if (inArray(current.attr(fieldAttr), visible) > -1) {\n                    checked = true;\n                    current.prop(\"checked\", checked);\n                }\n\n                if (checked) {\n                    if (lockedCount == 1 && locked) {\n                        current.prop(\"disabled\", true);\n                    }\n\n                    if (nonLockedCount == 1 && !locked) {\n                        current.prop(\"disabled\", true);\n                    }\n                }\n            }\n        },\n\n        _updateColumnsLockedState: function() {\n            var idx, length, current, locked, column;\n            var fieldAttr = kendo.attr(\"field\");\n            var lockedAttr = kendo.attr(\"locked\");\n            var columns = toHash(this._ownerColumns(), \"field\");\n            var checkboxes = this.wrapper\n                .find(\".k-columns-item input[type=checkbox]\");\n\n            for (idx = 0, length = checkboxes.length; idx < length; idx ++ ) {\n                current = checkboxes.eq(idx);\n                column = columns[current.attr(fieldAttr)];\n                if (column) {\n                    current.attr(lockedAttr, column.locked);\n                }\n            }\n\n            this._updateColumnsMenu();\n        },\n\n        _filter: function() {\n            var that = this,\n                widget = FILTERMENU,\n                options = that.options;\n\n            if (options.filterable !== false) {\n\n                if (options.filterable.multi) {\n                    widget = \"kendoFilterMultiCheck\";\n                }\n                that.filterMenu = that.wrapper.find(\".k-filterable\")[widget](\n                    extend(true, {}, {\n                        appendToElement: true,\n                        dataSource: options.dataSource,\n                        values: options.values,\n                        field: that.field\n                    },\n                    options.filterable)\n                    ).data(widget);\n\n                if (that._isMobile) {\n                    that.menu.bind(SELECT, function(e) {\n                        var item = $(e.item);\n\n                        if (item.hasClass(\"k-filter-item\")) {\n                            that.pane.navigate(that.filterMenu.view, that.options.animations.left);\n                        }\n                    });\n                }\n            }\n        },\n\n        _lockColumns: function() {\n            var that = this;\n            that.menu.bind(SELECT, function(e) {\n                var item = $(e.item);\n\n                if (item.hasClass(\"k-lock\")) {\n                    that.owner.lockColumn(that.field);\n                    that.close();\n                } else if (item.hasClass(\"k-unlock\")) {\n                    that.owner.unlockColumn(that.field);\n                    that.close();\n                }\n            });\n        },\n\n        _updateLockedColumns: function() {\n            var field = this.field;\n            var columns = this.owner.columns;\n            var column = grep(columns, function(column) {\n                return column.field == field || column.title == field;\n            })[0];\n\n            if (!column) {\n                return;\n            }\n\n            var locked = column.locked === true;\n            var length = grep(columns, function(column) {\n                return !column.hidden && ((column.locked && locked) || (!column.locked && !locked));\n            }).length;\n\n            var lockItem = this.wrapper.find(\".k-lock\").removeClass(\"k-state-disabled\");\n            var unlockItem = this.wrapper.find(\".k-unlock\").removeClass(\"k-state-disabled\");\n\n            if (locked || length == 1) {\n                lockItem.addClass(\"k-state-disabled\");\n            }\n\n            if (!locked || length == 1) {\n                unlockItem.addClass(\"k-state-disabled\");\n            }\n\n            this._updateColumnsLockedState();\n        },\n\n        refresh: function() {\n            var that = this,\n                sort = that.options.dataSource.sort() || [],\n                descriptor,\n                field = that.field,\n                idx,\n                length;\n\n            that.wrapper.find(\".k-sort-asc, .k-sort-desc\").removeClass(ACTIVE);\n\n            for (idx = 0, length = sort.length; idx < length; idx++) {\n               descriptor = sort[idx];\n\n               if (field == descriptor.field) {\n                   that.wrapper.find(\".k-sort-\" + descriptor.dir).addClass(ACTIVE);\n               }\n            }\n        }\n    });\n\n    var template = '<ul>'+\n                    '#if(sortable){#'+\n                        '<li class=\"k-item k-sort-asc\"><span class=\"k-link\"><span class=\"k-sprite k-i-sort-asc\"></span>${messages.sortAscending}</span></li>'+\n                        '<li class=\"k-item k-sort-desc\"><span class=\"k-link\"><span class=\"k-sprite k-i-sort-desc\"></span>${messages.sortDescending}</span></li>'+\n                        '#if(showColumns || filterable){#'+\n                            '<li class=\"k-separator\"></li>'+\n                        '#}#'+\n                    '#}#'+\n                    '#if(showColumns){#'+\n                        '<li class=\"k-item k-columns-item\"><span class=\"k-link\"><span class=\"k-sprite k-i-columns\"></span>${messages.columns}</span><ul>'+\n                        '#for (var idx = 0; idx < columns.length; idx++) {#'+\n                            '<li><input type=\"checkbox\" data-#=ns#field=\"#=columns[idx].field.replace(/\\\"/g,\"&\\\\#34;\")#\" data-#=ns#index=\"#=columns[idx].index#\" data-#=ns#locked=\"#=columns[idx].locked#\"/>#=columns[idx].title#</li>'+\n                        '#}#'+\n                        '</ul></li>'+\n                        '#if(filterable || lockedColumns){#'+\n                            '<li class=\"k-separator\"></li>'+\n                        '#}#'+\n                    '#}#'+\n                    '#if(filterable){#'+\n                        '<li class=\"k-item k-filter-item\"><span class=\"k-link\"><span class=\"k-sprite k-filter\"></span>${messages.filter}</span><ul>'+\n                            '<li><div class=\"k-filterable\"></div></li>'+\n                        '</ul></li>'+\n                        '#if(lockedColumns){#'+\n                            '<li class=\"k-separator\"></li>'+\n                        '#}#'+\n                    '#}#'+\n                    '#if(lockedColumns){#'+\n                        '<li class=\"k-item k-lock\"><span class=\"k-link\"><span class=\"k-sprite k-i-lock\"></span>${messages.lock}</span></li>'+\n                        '<li class=\"k-item k-unlock\"><span class=\"k-link\"><span class=\"k-sprite k-i-unlock\"></span>${messages.unlock}</span></li>'+\n                    '#}#'+\n                    '</ul>';\n\n    var mobileTemplate =\n            '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" class=\"k-grid-column-menu\">'+\n                '<div data-#=ns#role=\"header\" class=\"k-header\">'+\n                    '${messages.settings}'+\n                    '<button class=\"k-button k-done\">#=messages.done#</button>'+\n                '</div>'+\n                '<div class=\"k-column-menu k-mobile-list\"><ul><li>'+\n                    '<span class=\"k-link\">${title}</span><ul>'+\n                '#if(sortable){#'+\n                    '<li class=\"k-item k-sort-asc\"><span class=\"k-link\"><span class=\"k-sprite k-i-sort-asc\"></span>${messages.sortAscending}</span></li>'+\n                    '<li class=\"k-item k-sort-desc\"><span class=\"k-link\"><span class=\"k-sprite k-i-sort-desc\"></span>${messages.sortDescending}</span></li>'+\n                '#}#'+\n                '#if(lockedColumns){#'+\n                    '<li class=\"k-item k-lock\"><span class=\"k-link\"><span class=\"k-sprite k-i-lock\"></span>${messages.lock}</span></li>'+\n                    '<li class=\"k-item k-unlock\"><span class=\"k-link\"><span class=\"k-sprite k-i-unlock\"></span>${messages.unlock}</span></li>'+\n                '#}#'+\n                '#if(filterable){#'+\n                    '<li class=\"k-item k-filter-item\">'+\n                        '<span class=\"k-link k-filterable\">'+\n                            '<span class=\"k-sprite k-filter\"></span>'+\n                            '${messages.filter}</span>'+\n                    '</li>'+\n                '#}#'+\n                '</ul></li>'+\n                '#if(showColumns){#'+\n                    '<li class=\"k-columns-item\"><span class=\"k-link\">${messages.columns}</span><ul>'+\n                    '#for (var idx = 0; idx < columns.length; idx++) {#'+\n                        '<li class=\"k-item\"><label class=\"k-label\"><input type=\"checkbox\" class=\"k-check\" data-#=ns#field=\"#=columns[idx].field.replace(/\\\"/g,\"&\\\\#34;\")#\" data-#=ns#index=\"#=columns[idx].index#\" data-#=ns#locked=\"#=columns[idx].locked#\"/>#=columns[idx].title#</label></li>'+\n                    '#}#'+\n                    '</ul></li>'+\n                '#}#'+\n                '</ul></div>'+\n            '</div>';\n\n    var MobileMenu = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this.element.on(\"click\" + NS, \"li.k-item:not(.k-separator):not(.k-state-disabled)\", \"_click\");\n        },\n\n        events: [ SELECT ],\n\n        _click: function(e) {\n            if (!$(e.target).is(\"[type=checkbox]\")) {\n                e.preventDefault();\n            }\n\n            this.trigger(SELECT, { item: e.currentTarget });\n        },\n\n        close: function() {\n            this.options.pane.navigate(\"\");\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this.element.off(NS);\n        }\n    });\n\n    ui.plugin(ColumnMenu);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo;\n    var ui = kendo.ui;\n    var Widget = ui.Widget;\n    var DIR = \"dir\";\n    var ASC = \"asc\";\n    var SINGLE = \"single\";\n    var FIELD = \"field\";\n    var DESC = \"desc\";\n    var sorterNS = \".kendoColumnSorter\";\n    var TLINK = \".k-link\";\n    var ARIASORT = \"aria-sort\";\n    var proxy = $.proxy;\n\n    var ColumnSorter = Widget.extend({\n        init: function (element, options) {\n\n            var that = this, link;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._refreshHandler = proxy(that.refresh, that);\n\n            that.dataSource = that.options.dataSource.bind(\"change\", that._refreshHandler);\n\n            link = that.element.find(TLINK);\n\n            if (!link[0]) {\n                link = that.element.wrapInner('<a class=\"k-link\" href=\"#\"/>').find(TLINK);\n            }\n\n            that.link = link;\n\n            that.element.on(\"click\" + sorterNS, proxy(that._click, that));\n        },\n\n        options: {\n            name: \"ColumnSorter\",\n            mode: SINGLE,\n            allowUnsort: true,\n            compare: null,\n            filter: \"\"\n        },\n\n        destroy: function () {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.element.off(sorterNS);\n\n            that.dataSource.unbind(\"change\", that._refreshHandler);\n            that._refreshHandler = that.element = that.link = that.dataSource = null;\n        },\n\n        refresh: function () {\n            var that = this,\n                sort = that.dataSource.sort() || [],\n                idx,\n                length,\n                descriptor,\n                dir,\n                element = that.element,\n                field = element.attr(kendo.attr(FIELD));\n\n            element.removeAttr(kendo.attr(DIR));\n            element.removeAttr(ARIASORT);\n\n            for (idx = 0, length = sort.length; idx < length; idx++) {\n                descriptor = sort[idx];\n\n                if (field == descriptor.field) {\n                    element.attr(kendo.attr(DIR), descriptor.dir);\n                }\n            }\n\n            dir = element.attr(kendo.attr(DIR));\n\n            element.find(\".k-i-arrow-n,.k-i-arrow-s\").remove();\n\n            if (dir === ASC) {\n                $('<span class=\"k-icon k-i-arrow-n\" />').appendTo(that.link);\n                element.attr(ARIASORT, \"ascending\");\n            } else if (dir === DESC) {\n                $('<span class=\"k-icon k-i-arrow-s\" />').appendTo(that.link);\n                element.attr(ARIASORT, \"descending\");\n            }\n        },\n\n        _click: function (e) {\n            var that = this,\n                element = that.element,\n                field = element.attr(kendo.attr(FIELD)),\n                dir = element.attr(kendo.attr(DIR)),\n                options = that.options,\n                compare = that.options.compare === null ? undefined : that.options.compare,\n                sort = that.dataSource.sort() || [],\n                idx,\n                length;\n\n            e.preventDefault();\n\n            if (options.filter && !element.is(options.filter)) {\n                return;\n            }\n\n            if (dir === ASC) {\n                dir = DESC;\n            } else if (dir === DESC && options.allowUnsort) {\n                dir = undefined;\n            } else {\n                dir = ASC;\n            }\n\n            if (options.mode === SINGLE) {\n                sort = [{ field: field, dir: dir, compare: compare }];\n            } else if (options.mode === \"multiple\") {\n                for (idx = 0, length = sort.length; idx < length; idx++) {\n                    if (sort[idx].field === field) {\n                        sort.splice(idx, 1);\n                        break;\n                    }\n                }\n                sort.push({ field: field, dir: dir, compare: compare });\n            }\n\n            this.dataSource.sort(sort);\n        }\n    });\n\n    ui.plugin(ColumnSorter);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n/* jshint eqnull: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        extend = $.extend,\n        oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9,\n        isFunction = kendo.isFunction,\n        isPlainObject = $.isPlainObject,\n        inArray = $.inArray,\n        nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g,\n        ERRORTEMPLATE = '<div class=\"k-widget k-tooltip k-tooltip-validation\" style=\"margin:0.5em\"><span class=\"k-icon k-warning\"> </span>' +\n                    '#=message#<div class=\"k-callout k-callout-n\"></div></div>',\n        CHANGE = \"change\";\n\n    var specialRules = [\"url\", \"email\", \"number\", \"date\", \"boolean\"];\n\n    function fieldType(field) {\n        field = field != null ? field : \"\";\n        return field.type || $.type(field) || \"string\";\n    }\n\n    function convertToValueBinding(container) {\n        container.find(\":input:not(:button, [\" + kendo.attr(\"role\") + \"=upload], [\" + kendo.attr(\"skip\") + \"], [type=file]), select\").each(function() {\n            var bindAttr = kendo.attr(\"bind\"),\n                binding = this.getAttribute(bindAttr) || \"\",\n                bindingName = this.type === \"checkbox\" ||  this.type === \"radio\" ? \"checked:\" : \"value:\",\n                fieldName = this.name;\n\n            if (binding.indexOf(bindingName) === -1 && fieldName) {\n                binding += (binding.length ? \",\" : \"\") + bindingName + fieldName;\n\n                $(this).attr(bindAttr, binding);\n            }\n        });\n    }\n\n    function createAttributes(options) {\n        var field = (options.model.fields || options.model)[options.field],\n            type = fieldType(field),\n            validation = field ? field.validation : {},\n            ruleName,\n            DATATYPE = kendo.attr(\"type\"),\n            BINDING = kendo.attr(\"bind\"),\n            rule,\n            attr = {\n                name: options.field\n            };\n\n        for (ruleName in validation) {\n            rule = validation[ruleName];\n\n            if (inArray(ruleName, specialRules) >= 0) {\n                attr[DATATYPE] = ruleName;\n            } else if (!isFunction(rule)) {\n                attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n            }\n\n            attr[kendo.attr(ruleName + \"-msg\")] = rule.message;\n        }\n\n        if (inArray(type, specialRules) >= 0) {\n            attr[DATATYPE] = type;\n        }\n\n        attr[BINDING] = (type === \"boolean\" ? \"checked:\" : \"value:\") + options.field;\n\n        return attr;\n    }\n\n    function convertItems(items) {\n        var idx,\n            length,\n            item,\n            value,\n            text,\n            result;\n\n        if (items && items.length) {\n            result = [];\n            for (idx = 0, length = items.length; idx < length; idx++) {\n                item = items[idx];\n                text = item.text || item.value || item;\n                value = item.value == null ? (item.text || item) : item.value;\n\n                result[idx] = { text: text, value: value };\n            }\n        }\n        return result;\n    }\n\n    var editors = {\n        \"number\": function(container, options) {\n            var attr = createAttributes(options);\n            $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n            $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n        },\n        \"date\": function(container, options) {\n            var attr = createAttributes(options),\n                format = options.format;\n\n            if (format) {\n                format = kendo._extractFormat(format);\n            }\n\n            attr[kendo.attr(\"format\")] = format;\n\n            $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n            $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n        },\n        \"string\": function(container, options) {\n            var attr = createAttributes(options);\n\n            $('<input type=\"text\" class=\"k-input k-textbox\"/>').attr(attr).appendTo(container);\n        },\n        \"boolean\": function(container, options) {\n            var attr = createAttributes(options);\n            $('<input type=\"checkbox\" />').attr(attr).appendTo(container);\n        },\n        \"values\": function(container, options) {\n            var attr = createAttributes(options);\n            $('<select ' + kendo.attr(\"text-field\") + '=\"text\"' + kendo.attr(\"value-field\") + '=\"value\"' +\n                kendo.attr(\"source\") + \"=\\'\" + kendo.stringify(convertItems(options.values)).replace(/\\'/g,\"&apos;\") +\n                \"\\'\" + kendo.attr(\"role\") + '=\"dropdownlist\"/>') .attr(attr).appendTo(container);\n            $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n        }\n    };\n\n    function addValidationRules(modelField, rules) {\n        var validation = modelField ? (modelField.validation || {}) : {},\n            rule,\n            descriptor;\n\n        for (rule in validation) {\n            descriptor = validation[rule];\n\n            if (isPlainObject(descriptor) && descriptor.value) {\n                descriptor = descriptor.value;\n            }\n\n            if (isFunction(descriptor)) {\n                rules[rule] = descriptor;\n            }\n        }\n    }\n\n    var Editable = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            if (options.target) {\n                options.$angular = options.target.options.$angular;\n            }\n            Widget.fn.init.call(that, element, options);\n            that._validateProxy = $.proxy(that._validate, that);\n            that.refresh();\n        },\n\n        events: [CHANGE],\n\n        options: {\n            name: \"Editable\",\n            editors: editors,\n            clearContainer: true,\n            errorTemplate: ERRORTEMPLATE\n        },\n\n        editor: function(field, modelField) {\n            var that = this,\n                editors = that.options.editors,\n                isObject = isPlainObject(field),\n                fieldName = isObject ? field.field : field,\n                model = that.options.model || {},\n                isValuesEditor = isObject && field.values,\n                type = isValuesEditor ? \"values\" : fieldType(modelField),\n                isCustomEditor = isObject && field.editor,\n                editor = isCustomEditor ? field.editor : editors[type],\n                container = that.element.find(\"[\" + kendo.attr(\"container-for\") + \"=\" + fieldName.replace(nameSpecialCharRegExp, \"\\\\$1\")+ \"]\");\n\n            editor = editor ? editor : editors.string;\n\n            if (isCustomEditor && typeof field.editor === \"string\") {\n                editor = function(container) {\n                    container.append(field.editor);\n                };\n            }\n\n            container = container.length ? container : that.element;\n            editor(container, extend(true, {}, isObject ? field : { field: fieldName }, { model: model }));\n        },\n\n        _validate: function(e) {\n            var that = this,\n                input,\n                value = e.value,\n                preventChangeTrigger = that._validationEventInProgress,\n                values = {},\n                bindAttribute = kendo.attr(\"bind\"),\n                fieldName = e.field.replace(nameSpecialCharRegExp, \"\\\\$1\"),\n                checkedBinding = 'checked:' + fieldName,\n                valueBinding = 'value:' + fieldName;\n\n            values[e.field] = e.value;\n\n            input = $(':input[' + bindAttribute + '*=\"' + valueBinding + '\"],:input[' + bindAttribute + '*=\"' + checkedBinding + '\"]', that.element)\n                .filter(\"[\" + kendo.attr(\"validate\") + \"!='false']\");\n            if (input.length > 1) {\n                input = input.filter(function () {\n                    var element = $(this);\n                    var bindings = element.attr(bindAttribute).split(\",\");\n                    var matchesBinding = inArray(valueBinding, bindings) >= 0 || inArray(checkedBinding, bindings) >= 0;\n                    return matchesBinding && (!element.is(\":radio\") || element.val() == value);\n                });\n            }\n\n            try {\n                that._validationEventInProgress = true;\n\n                if (!that.validatable.validateInput(input) || (!preventChangeTrigger && that.trigger(CHANGE, { values: values }))) {\n                    e.preventDefault();\n                }\n\n            } finally {\n                that._validationEventInProgress = false;\n            }\n        },\n\n        end: function() {\n            return this.validatable.validate();\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.angular(\"cleanup\", function(){\n                return { elements: that.element };\n            });\n\n            Widget.fn.destroy.call(that);\n\n            that.options.model.unbind(\"set\", that._validateProxy);\n\n            kendo.unbind(that.element);\n\n            if (that.validatable) {\n                that.validatable.destroy();\n            }\n            kendo.destroy(that.element);\n\n            that.element.removeData(\"kendoValidator\");\n        },\n\n        refresh: function() {\n            var that = this,\n                idx,\n                length,\n                fields = that.options.fields || [],\n                container = that.options.clearContainer ? that.element.empty() : that.element,\n                model = that.options.model || {},\n                rules = {},\n                field,\n                isObject,\n                fieldName,\n                modelField,\n                modelFields;\n\n            if (!$.isArray(fields)) {\n                fields = [fields];\n            }\n\n            for (idx = 0, length = fields.length; idx < length; idx++) {\n                 field = fields[idx];\n                 isObject = isPlainObject(field);\n                 fieldName = isObject ? field.field : field;\n                 modelField = (model.fields || model)[fieldName];\n\n                 addValidationRules(modelField, rules);\n\n                 that.editor(field, modelField);\n            }\n\n            if (that.options.target) {\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: container,\n                        data: [ { dataItem: model } ]\n                    };\n                });\n            }\n\n            if (!length) {\n                modelFields = model.fields || model;\n                for (fieldName in modelFields) {\n                    addValidationRules(modelFields[fieldName], rules);\n               }\n            }\n\n            convertToValueBinding(container);\n\n            if (that.validatable) {\n                that.validatable.destroy();\n            }\n\n            kendo.bind(container, that.options.model);\n\n            that.options.model.unbind(\"set\", that._validateProxy);\n            that.options.model.bind(\"set\", that._validateProxy);\n\n            that.validatable = new kendo.ui.Validator(container, {\n                validateOnBlur: false,\n                errorTemplate: that.options.errorTemplate || undefined,\n                rules: rules });\n\n            var focusable = container.find(\":kendoFocusable\").eq(0).focus();\n            if (oldIE) {\n                focusable.focus();\n            }\n        }\n   });\n\n   ui.plugin(Editable);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        Draggable = kendo.ui.Draggable,\n        isPlainObject = $.isPlainObject,\n        activeElement = kendo._activeElement,\n        proxy = $.proxy,\n        extend = $.extend,\n        each = $.each,\n        template = kendo.template,\n        BODY = \"body\",\n        templates,\n        NS = \".kendoWindow\",\n        // classNames\n        KWINDOW = \".k-window\",\n        KWINDOWTITLE = \".k-window-title\",\n        KWINDOWTITLEBAR = KWINDOWTITLE + \"bar\",\n        KWINDOWCONTENT = \".k-window-content\",\n        KWINDOWRESIZEHANDLES = \".k-resize-handle\",\n        KOVERLAY = \".k-overlay\",\n        KCONTENTFRAME = \"k-content-frame\",\n        LOADING = \"k-loading\",\n        KHOVERSTATE = \"k-state-hover\",\n        KFOCUSEDSTATE = \"k-state-focused\",\n        MAXIMIZEDSTATE = \"k-window-maximized\",\n        // constants\n        VISIBLE = \":visible\",\n        HIDDEN = \"hidden\",\n        CURSOR = \"cursor\",\n        // events\n        OPEN = \"open\",\n        ACTIVATE = \"activate\",\n        DEACTIVATE = \"deactivate\",\n        CLOSE = \"close\",\n        REFRESH = \"refresh\",\n        RESIZE = \"resize\",\n        RESIZEEND = \"resizeEnd\",\n        DRAGSTART = \"dragstart\",\n        DRAGEND = \"dragend\",\n        ERROR = \"error\",\n        OVERFLOW = \"overflow\",\n        ZINDEX = \"zIndex\",\n        MINIMIZE_MAXIMIZE = \".k-window-actions .k-i-minimize,.k-window-actions .k-i-maximize\",\n        KPIN = \".k-i-pin\",\n        KUNPIN = \".k-i-unpin\",\n        PIN_UNPIN = KPIN + \",\" + KUNPIN,\n        TITLEBAR_BUTTONS = \".k-window-titlebar .k-window-action\",\n        REFRESHICON = \".k-window-titlebar .k-i-refresh\",\n        isLocalUrl = kendo.isLocalUrl;\n\n    function defined(x) {\n        return (typeof x != \"undefined\");\n    }\n\n    function constrain(value, low, high) {\n        return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n    }\n\n    function sizingAction(actionId, callback) {\n        return function() {\n            var that = this,\n                wrapper = that.wrapper,\n                style = wrapper[0].style,\n                options = that.options;\n\n            if (options.isMaximized || options.isMinimized) {\n                return;\n            }\n\n            that.restoreOptions = {\n                width: style.width,\n                height: style.height\n            };\n\n            wrapper\n                .children(KWINDOWRESIZEHANDLES).hide().end()\n                .children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide()\n                    .eq(0).before(templates.action({ name: \"Restore\" }));\n\n            callback.call(that);\n\n            if (actionId == \"maximize\") {\n                that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().hide();\n            } else {\n                that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().show();\n            }\n\n            return that;\n        };\n    }\n\n    function executableScript() {\n        return !this.type || this.type.toLowerCase().indexOf(\"script\") >= 0;\n    }\n\n    var Window = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                wrapper,\n                offset = {},\n                visibility, display, position,\n                isVisible = false,\n                content,\n                windowContent,\n                suppressActions = options && options.actions && !options.actions.length,\n                id;\n\n            Widget.fn.init.call(that, element, options);\n            options = that.options;\n            position = options.position;\n            element = that.element;\n            content = options.content;\n\n            if (suppressActions) {\n                options.actions = [];\n            }\n\n            that.appendTo = $(options.appendTo);\n\n            that._animations();\n\n            if (content && !isPlainObject(content)) {\n                content = options.content = { url: content };\n            }\n\n            // remove script blocks to prevent double-execution\n            element.find(\"script\").filter(executableScript).remove();\n\n            if (!element.parent().is(that.appendTo) && (position.top === undefined || position.left === undefined)) {\n                if (element.is(VISIBLE)) {\n                    offset = element.offset();\n                    isVisible = true;\n                } else {\n                    visibility = element.css(\"visibility\");\n                    display = element.css(\"display\");\n\n                    element.css({ visibility: HIDDEN, display: \"\" });\n                    offset = element.offset();\n                    element.css({ visibility: visibility, display: display });\n                }\n\n                if (position.top === undefined) {\n                    position.top = offset.top;\n                }\n                if (position.left === undefined) {\n                    position.left = offset.left;\n                }\n            }\n\n            if (!defined(options.visible) || options.visible === null) {\n                options.visible = element.is(VISIBLE);\n            }\n\n            wrapper = that.wrapper = element.closest(KWINDOW);\n\n            if (!element.is(\".k-content\") || !wrapper[0]) {\n                element.addClass(\"k-window-content k-content\");\n                that._createWindow(element, options);\n                wrapper = that.wrapper = element.closest(KWINDOW);\n\n                that._dimensions();\n            }\n\n            that._position();\n\n            if (options.pinned) {\n                that.pin(true);\n            }\n\n            if (content) {\n                that.refresh(content);\n            }\n\n            if (options.visible) {\n                that.toFront();\n            }\n\n            windowContent = wrapper.children(KWINDOWCONTENT);\n            that._tabindex(windowContent);\n\n            if (options.visible && options.modal) {\n                that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n            }\n\n            wrapper\n                .on(\"mouseenter\" + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that))\n                .on(\"mouseleave\" + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that))\n                .on(\"click\" + NS, \"> \" + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that));\n\n            windowContent\n                .on(\"keydown\" + NS, proxy(that._keydown, that))\n                .on(\"focus\" + NS, proxy(that._focus, that))\n                .on(\"blur\" + NS, proxy(that._blur, that));\n\n            this._resizable();\n\n            this._draggable();\n\n            id = element.attr(\"id\");\n            if (id) {\n                id = id + \"_wnd_title\";\n                wrapper.children(KWINDOWTITLEBAR)\n                       .children(KWINDOWTITLE)\n                       .attr(\"id\", id);\n\n                windowContent\n                    .attr({\n                        \"role\": \"dialog\",\n                        \"aria-labelledby\": id\n                    });\n            }\n\n            wrapper.add(wrapper.children(\".k-resize-handle,\" + KWINDOWTITLEBAR))\n                    .on(\"mousedown\" + NS, proxy(that.toFront, that));\n\n            that.touchScroller = kendo.touchScroller(element);\n\n            that._resizeHandler = proxy(that._onDocumentResize, that);\n\n            that._marker = kendo.guid().substring(0, 8);\n\n            $(window).on(\"resize\" + NS + that._marker, that._resizeHandler);\n\n            if (options.visible) {\n                that.trigger(OPEN);\n                that.trigger(ACTIVATE);\n            }\n\n            kendo.notify(that);\n        },\n\n        _buttonEnter: function(e) {\n            $(e.currentTarget).addClass(KHOVERSTATE);\n        },\n\n        _buttonLeave: function(e) {\n            $(e.currentTarget).removeClass(KHOVERSTATE);\n        },\n\n        _focus: function() {\n            this.wrapper.addClass(KFOCUSEDSTATE);\n        },\n\n        _blur: function() {\n            this.wrapper.removeClass(KFOCUSEDSTATE);\n        },\n\n        _dimensions: function() {\n            var wrapper = this.wrapper;\n            var options = this.options;\n            var width = options.width;\n            var height = options.height;\n            var maxHeight = options.maxHeight;\n            var dimensions = [\"minWidth\",\"minHeight\",\"maxWidth\",\"maxHeight\"];\n\n            this.title(options.title);\n\n            for (var i = 0; i < dimensions.length; i++) {\n                var value = options[dimensions[i]];\n                if (value && value != Infinity) {\n                    wrapper.css(dimensions[i], value);\n                }\n            }\n\n            if (maxHeight && maxHeight != Infinity) {\n                this.element.css(\"maxHeight\", maxHeight);\n            }\n\n            if (width) {\n                if (width.toString().indexOf(\"%\") > 0) {\n                    wrapper.width(width);\n                } else {\n                    wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n                }\n            }\n\n            if (height) {\n                if (height.toString().indexOf(\"%\") > 0) {\n                    wrapper.height(height);\n                } else {\n                    wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n                }\n            }\n\n            if (!options.visible) {\n                wrapper.hide();\n            }\n        },\n\n        _position: function() {\n            var wrapper = this.wrapper,\n                position = this.options.position;\n\n            if (position.top === 0) {\n                position.top = position.top.toString();\n            }\n\n            if (position.left === 0) {\n                position.left = position.left.toString();\n            }\n\n            wrapper.css({\n                top: position.top || \"\",\n                left: position.left || \"\"\n            });\n        },\n\n        _animations: function() {\n            var options = this.options;\n\n            if (options.animation === false) {\n                options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n            }\n        },\n\n        _resize: function() {\n            kendo.resize(this.element.children());\n        },\n\n        _resizable: function() {\n            var resizable = this.options.resizable;\n            var wrapper = this.wrapper;\n\n            if (this.resizing) {\n                wrapper\n                    .off(\"dblclick\" + NS)\n                    .children(KWINDOWRESIZEHANDLES).remove();\n\n                this.resizing.destroy();\n                this.resizing = null;\n            }\n\n            if (resizable) {\n                wrapper.on(\"dblclick\" + NS, KWINDOWTITLEBAR, proxy(function(e) {\n                    if (!$(e.target).closest(\".k-window-action\").length) {\n                        this.toggleMaximization();\n                    }\n                }, this));\n\n                each(\"n e s w se sw ne nw\".split(\" \"), function(index, handler) {\n                    wrapper.append(templates.resizeHandle(handler));\n                });\n\n                this.resizing = new WindowResizing(this);\n            }\n\n            wrapper = null;\n        },\n\n        _draggable: function() {\n            var draggable = this.options.draggable;\n\n            if (this.dragging) {\n                this.dragging.destroy();\n                this.dragging = null;\n            }\n            if (draggable) {\n                this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n            }\n        },\n\n        _actions: function() {\n            var actions = this.options.actions;\n            var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n            var container = titlebar.find(\".k-window-actions\");\n\n            actions = $.map(actions, function(action) {\n                return { name: action };\n            });\n\n            container.html(kendo.render(templates.action, actions));\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n            this._animations();\n            this._dimensions();\n            this._position();\n            this._resizable();\n            this._draggable();\n            this._actions();\n        },\n\n        events:[\n            OPEN,\n            ACTIVATE,\n            DEACTIVATE,\n            CLOSE,\n            REFRESH,\n            RESIZE,\n            RESIZEEND,\n            DRAGSTART,\n            DRAGEND,\n            ERROR\n        ],\n\n        options: {\n            name: \"Window\",\n            animation: {\n                open: {\n                    effects: { zoom: { direction: \"in\" }, fade: { direction: \"in\" } },\n                    duration: 350\n                },\n                close: {\n                    effects: { zoom: { direction: \"out\", properties: { scale: 0.7 } }, fade: { direction: \"out\" } },\n                    duration: 350,\n                    hide: true\n                }\n            },\n            title: \"\",\n            actions: [\"Close\"],\n            autoFocus: true,\n            modal: false,\n            resizable: true,\n            draggable: true,\n            minWidth: 90,\n            minHeight: 50,\n            maxWidth: Infinity,\n            maxHeight: Infinity,\n            pinned: false,\n            position: {},\n            content: null,\n            visible: null,\n            height: null,\n            width: null,\n            appendTo: \"body\"\n        },\n\n        _closable: function() {\n            return $.inArray(\"close\", $.map(this.options.actions, function(x) { return x.toLowerCase(); })) > -1;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                options = that.options,\n                keys = kendo.keys,\n                keyCode = e.keyCode,\n                wrapper = that.wrapper,\n                offset, handled,\n                distance = 10,\n                isMaximized = that.options.isMaximized,\n                newWidth, newHeight, w, h;\n\n            if (e.target != e.currentTarget || that._closing) {\n                return;\n            }\n\n            if (keyCode == keys.ESC && that._closable()) {\n                that._close(false);\n            }\n\n            if (options.draggable && !e.ctrlKey && !isMaximized) {\n                offset = kendo.getOffset(wrapper);\n\n                if (keyCode == keys.UP) {\n                    handled = wrapper.css(\"top\", offset.top - distance);\n                } else if (keyCode == keys.DOWN) {\n                    handled = wrapper.css(\"top\", offset.top + distance);\n                } else if (keyCode == keys.LEFT) {\n                    handled = wrapper.css(\"left\", offset.left - distance);\n                } else if (keyCode == keys.RIGHT) {\n                    handled = wrapper.css(\"left\", offset.left + distance);\n                }\n            }\n\n            if (options.resizable && e.ctrlKey && !isMaximized) {\n                if (keyCode == keys.UP) {\n                    handled = true;\n                    newHeight = wrapper.height() - distance;\n                } else if (keyCode == keys.DOWN) {\n                    handled = true;\n                    newHeight = wrapper.height() + distance;\n                } if (keyCode == keys.LEFT) {\n                    handled = true;\n                    newWidth = wrapper.width() - distance;\n                } else if (keyCode == keys.RIGHT) {\n                    handled = true;\n                    newWidth = wrapper.width() + distance;\n                }\n\n                if (handled) {\n                    w = constrain(newWidth, options.minWidth, options.maxWidth);\n                    h = constrain(newHeight, options.minHeight, options.maxHeight);\n\n                    if (!isNaN(w)) {\n                        wrapper.width(w);\n                        that.options.width = w + \"px\";\n                    }\n                    if (!isNaN(h)) {\n                        wrapper.height(h);\n                        that.options.height = h + \"px\";\n                    }\n\n                    that.resize();\n                }\n            }\n\n            if (handled) {\n                e.preventDefault();\n            }\n        },\n\n        _overlay: function (visible) {\n            var overlay = this.appendTo.children(KOVERLAY),\n                wrapper = this.wrapper;\n\n            if (!overlay.length) {\n                overlay = $(\"<div class='k-overlay' />\");\n            }\n\n            overlay\n                .insertBefore(wrapper[0])\n                .toggle(visible)\n                .css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n\n            return overlay;\n        },\n\n        _actionForIcon: function(icon) {\n            var iconClass = /\\bk-i-\\w+\\b/.exec(icon[0].className)[0];\n\n            return {\n                \"k-i-close\": \"_close\",\n                \"k-i-maximize\": \"maximize\",\n                \"k-i-minimize\": \"minimize\",\n                \"k-i-restore\": \"restore\",\n                \"k-i-refresh\": \"refresh\",\n                \"k-i-pin\": \"pin\",\n                \"k-i-unpin\": \"unpin\"\n            }[iconClass];\n        },\n\n        _windowActionHandler: function (e) {\n            if (this._closing) {\n                return;\n            }\n\n            var icon = $(e.target).closest(\".k-window-action\").find(\".k-icon\");\n            var action = this._actionForIcon(icon);\n\n            if (action) {\n                e.preventDefault();\n                this[action]();\n                return false;\n            }\n        },\n\n        _modals: function() {\n            var that = this;\n\n            var zStack = $(KWINDOW).filter(function() {\n                var dom = $(this);\n                var object = that._object(dom);\n                var options = object && object.options;\n\n                return options && options.modal && options.visible && dom.is(VISIBLE);\n            }).sort(function(a, b){\n                return +$(a).css(\"zIndex\") - +$(b).css(\"zIndex\");\n            });\n\n            that = null;\n\n            return zStack;\n        },\n\n        _object: function(element) {\n            var content = element.children(KWINDOWCONTENT);\n\n            return content.data(\"kendoWindow\") || content.data(\"kendo\" + this.options.name);\n        },\n\n        center: function () {\n            var that = this,\n                position = that.options.position,\n                wrapper = that.wrapper,\n                documentWindow = $(window),\n                scrollTop = 0,\n                scrollLeft = 0,\n                newTop, newLeft;\n\n            if (that.options.isMaximized) {\n                return that;\n            }\n\n            if (!that.options.pinned) {\n                scrollTop = documentWindow.scrollTop();\n                scrollLeft = documentWindow.scrollLeft();\n            }\n\n            newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n            newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css(\"paddingTop\"), 10)) / 2);\n\n            wrapper.css({\n                left: newLeft,\n                top: newTop\n            });\n\n            position.top = newTop;\n            position.left = newLeft;\n\n            return that;\n        },\n\n        title: function (text) {\n            var that = this,\n                wrapper = that.wrapper,\n                options = that.options,\n                titleBar = wrapper.children(KWINDOWTITLEBAR),\n                title = titleBar.children(KWINDOWTITLE),\n                titleBarHeight;\n\n            if (!arguments.length) {\n                return title.text();\n            }\n\n            if (text === false) {\n                wrapper.addClass(\"k-window-titleless\");\n                titleBar.remove();\n            } else {\n                if (!titleBar.length) {\n                    wrapper.prepend(templates.titlebar(options));\n                    that._actions();\n                    titleBar = wrapper.children(KWINDOWTITLEBAR);\n                } else {\n                    title.html(text);\n                }\n\n                titleBarHeight = titleBar.outerHeight();\n\n                wrapper.css(\"padding-top\", titleBarHeight);\n                titleBar.css(\"margin-top\", -titleBarHeight);\n            }\n\n            that.options.title = text;\n\n            return that;\n        },\n\n        content: function (html, data) {\n            var content = this.wrapper.children(KWINDOWCONTENT),\n                scrollContainer = content.children(\".km-scroll-container\");\n\n            content = scrollContainer[0] ? scrollContainer : content;\n\n            if (!defined(html)) {\n                return content.html();\n            }\n\n            this.angular(\"cleanup\", function(){\n                return { elements: content.children() };\n            });\n\n            kendo.destroy(this.element.children());\n\n            content.empty().html(html);\n\n            this.angular(\"compile\", function(){\n                var a = [];\n                for (var i = content.length; --i >= 0;) {\n                    a.push({ dataItem: data });\n                }\n                return {\n                    elements: content.children(),\n                    data: a\n                };\n            });\n\n            return this;\n        },\n\n        open: function () {\n            var that = this,\n                wrapper = that.wrapper,\n                options = that.options,\n                showOptions = options.animation.open,\n                contentElement = wrapper.children(KWINDOWCONTENT),\n                overlay;\n\n            if (!that.trigger(OPEN)) {\n                if (that._closing) {\n                    wrapper.kendoStop(true, true);\n                }\n\n                that._closing = false;\n\n                that.toFront();\n\n                if (options.autoFocus) {\n                    that.element.focus();\n                }\n\n                options.visible = true;\n\n                if (options.modal) {\n                    overlay = that._overlay(false);\n\n                    overlay.kendoStop(true, true);\n\n                    if (showOptions.duration && kendo.effects.Fade) {\n                        var overlayFx = kendo.fx(overlay).fadeIn();\n                        overlayFx.duration(showOptions.duration || 0);\n                        overlayFx.endValue(0.5);\n                        overlayFx.play();\n                    } else {\n                        overlay.css(\"opacity\", 0.5);\n                    }\n\n                    overlay.show();\n                }\n\n                if (!wrapper.is(VISIBLE)) {\n                    contentElement.css(OVERFLOW, HIDDEN);\n                    wrapper.show().kendoStop().kendoAnimate({\n                        effects: showOptions.effects,\n                        duration: showOptions.duration,\n                        complete: proxy(this._activate, this)\n                    });\n                }\n            }\n\n            if (options.isMaximized) {\n                that._documentScrollTop = $(document).scrollTop();\n                $(\"html, body\").css(OVERFLOW, HIDDEN);\n            }\n\n            return that;\n        },\n\n        _activate: function() {\n            if (this.options.autoFocus) {\n                this.element.focus();\n            }\n            this.trigger(ACTIVATE);\n            this.wrapper.children(KWINDOWCONTENT).css(OVERFLOW, \"\");\n        },\n\n        _removeOverlay: function(suppressAnimation) {\n            var modals = this._modals();\n            var options = this.options;\n            var hideOverlay = options.modal && !modals.length;\n            var overlay = options.modal ? this._overlay(true) : $(undefined);\n            var hideOptions = options.animation.close;\n\n            if (hideOverlay) {\n                if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n                    var overlayFx = kendo.fx(overlay).fadeOut();\n                    overlayFx.duration(hideOptions.duration || 0);\n                    overlayFx.startValue(0.5);\n                    overlayFx.play();\n                } else {\n                    this._overlay(false).remove();\n                }\n            } else if (modals.length) {\n                this._object(modals.last())._overlay(true);\n            }\n        },\n\n        _close: function(systemTriggered) {\n            var that = this,\n                wrapper = that.wrapper,\n                options = that.options,\n                showOptions = options.animation.open,\n                hideOptions = options.animation.close;\n\n            if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n                if (that._closing) {\n                    return;\n                }\n\n                that._closing = true;\n                options.visible = false;\n\n                $(KWINDOW).each(function(i, element) {\n                    var contentElement = $(element).children(KWINDOWCONTENT);\n\n                    // Remove overlay set by toFront\n                    if (element != wrapper && contentElement.find(\"> .\" + KCONTENTFRAME).length > 0) {\n                        contentElement.children(KOVERLAY).remove();\n                    }\n                });\n\n                this._removeOverlay();\n\n                wrapper.kendoStop().kendoAnimate({\n                    effects: hideOptions.effects || showOptions.effects,\n                    reverse: hideOptions.reverse === true,\n                    duration: hideOptions.duration,\n                    complete: proxy(this._deactivate, this)\n                });\n            }\n\n            if (that.options.isMaximized) {\n                $(\"html, body\").css(OVERFLOW, \"\");\n                if (that._documentScrollTop && that._documentScrollTop > 0) {\n                    $(document).scrollTop(that._documentScrollTop);\n                }\n            }\n        },\n\n        _deactivate: function() {\n            this.wrapper.hide().css(\"opacity\",\"\");\n            this.trigger(DEACTIVATE);\n            var lastModal = this._object(this._modals().last());\n            if (lastModal) {\n                lastModal.toFront();\n            }\n        },\n\n        close: function () {\n            this._close(true);\n            return this;\n        },\n\n        _actionable: function(element) {\n            return $(element).is(TITLEBAR_BUTTONS + \",\" + TITLEBAR_BUTTONS + \" .k-icon,:input,a\");\n        },\n\n        _shouldFocus: function(target) {\n            var active = activeElement(),\n                element = this.element;\n\n            return this.options.autoFocus &&\n                    !$(active).is(element) &&\n                    !this._actionable(target) &&\n                    (!element.find(active).length || !element.find(target).length);\n        },\n\n        toFront: function (e) {\n            var that = this,\n                wrapper = that.wrapper,\n                currentWindow = wrapper[0],\n                zIndex = +wrapper.css(ZINDEX),\n                originalZIndex = zIndex,\n                target = (e && e.target) || null;\n\n            $(KWINDOW).each(function(i, element) {\n                var windowObject = $(element),\n                    zIndexNew = windowObject.css(ZINDEX),\n                    contentElement = windowObject.children(KWINDOWCONTENT);\n\n                if (!isNaN(zIndexNew)) {\n                    zIndex = Math.max(+zIndexNew, zIndex);\n                }\n\n                // Add overlay to windows with iframes and lower z-index to prevent\n                // trapping of events when resizing / dragging\n                if (element != currentWindow && contentElement.find(\"> .\" + KCONTENTFRAME).length > 0) {\n                    contentElement.append(templates.overlay);\n                }\n            });\n\n            if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n                wrapper.css(ZINDEX, zIndex + 2);\n            }\n            that.element.find(\"> .k-overlay\").remove();\n\n            if (that._shouldFocus(target)) {\n                that.element.focus();\n\n                var scrollTop = $(window).scrollTop(),\n                    windowTop = parseInt(wrapper.position().top, 10);\n\n                if (windowTop > 0 && windowTop < scrollTop) {\n                    if (scrollTop > 0) {\n                        $(window).scrollTop(windowTop);\n                    } else {\n                        wrapper.css(\"top\", scrollTop);\n                    }\n                }\n            }\n\n            wrapper = null;\n\n            return that;\n        },\n\n        toggleMaximization: function () {\n            if (this._closing) {\n                return this;\n            }\n\n            return this[this.options.isMaximized ? \"restore\" : \"maximize\"]();\n        },\n\n        restore: function () {\n            var that = this;\n            var options = that.options;\n            var minHeight = options.minHeight;\n            var restoreOptions = that.restoreOptions;\n\n            if (!options.isMaximized && !options.isMinimized) {\n                return that;\n            }\n\n            if (minHeight && minHeight != Infinity) {\n                that.wrapper.css(\"min-height\", minHeight);\n            }\n\n            that.wrapper\n                .css({\n                    position: options.pinned ? \"fixed\" : \"absolute\",\n                    left: restoreOptions.left,\n                    top: restoreOptions.top,\n                    width: restoreOptions.width,\n                    height: restoreOptions.height\n                })\n                .removeClass(MAXIMIZEDSTATE)\n                .find(\".k-window-content,.k-resize-handle\").show().end()\n                .find(\".k-window-titlebar .k-i-restore\").parent().remove().end().end()\n                .find(MINIMIZE_MAXIMIZE).parent().show().end().end()\n                .find(PIN_UNPIN).parent().show();\n\n            that.options.width = restoreOptions.width;\n            that.options.height = restoreOptions.height;\n\n            $(\"html, body\").css(OVERFLOW, \"\");\n            if (this._documentScrollTop && this._documentScrollTop > 0) {\n                $(document).scrollTop(this._documentScrollTop);\n            }\n\n            options.isMaximized = options.isMinimized = false;\n\n            that.resize();\n\n            return that;\n        },\n\n        maximize: sizingAction(\"maximize\", function() {\n            var that = this,\n                wrapper = that.wrapper,\n                position = wrapper.position();\n\n            extend(that.restoreOptions, {\n                left: position.left,\n                top: position.top\n            });\n\n            wrapper.css({\n                    left: 0,\n                    top: 0,\n                    position: \"fixed\"\n                })\n                .addClass(MAXIMIZEDSTATE);\n\n            this._documentScrollTop = $(document).scrollTop();\n            $(\"html, body\").css(OVERFLOW, HIDDEN);\n\n            that.options.isMaximized = true;\n\n            that._onDocumentResize();\n        }),\n\n        minimize: sizingAction(\"minimize\", function() {\n            var that = this;\n\n            that.wrapper.css({\n                height: \"\",\n                minHeight: \"\"\n            });\n\n            that.element.hide();\n\n            that.options.isMinimized = true;\n        }),\n\n        pin: function(force) {\n            var that = this,\n                win = $(window),\n                wrapper = that.wrapper,\n                top = parseInt(wrapper.css(\"top\"), 10),\n                left = parseInt(wrapper.css(\"left\"), 10);\n\n            if (force || !that.options.pinned && !that.options.isMaximized) {\n                wrapper.css({position: \"fixed\", top: top - win.scrollTop(), left: left - win.scrollLeft()});\n                wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass(\"k-i-unpin\").removeClass(\"k-i-pin\");\n\n                that.options.pinned = true;\n            }\n        },\n\n        unpin: function() {\n            var that = this,\n                win = $(window),\n                wrapper = that.wrapper,\n                top = parseInt(wrapper.css(\"top\"), 10),\n                left = parseInt(wrapper.css(\"left\"), 10);\n\n            if (that.options.pinned && !that.options.isMaximized) {\n                wrapper.css({position: \"\", top: top + win.scrollTop(), left: left + win.scrollLeft()});\n                wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass(\"k-i-pin\").removeClass(\"k-i-unpin\");\n\n                that.options.pinned = false;\n            }\n        },\n\n        _onDocumentResize: function () {\n            var that = this,\n                wrapper = that.wrapper,\n                wnd = $(window),\n                zoomLevel = kendo.support.zoomLevel(),\n                w, h;\n\n            if (!that.options.isMaximized) {\n                return;\n            }\n\n            w = wnd.width() / zoomLevel;\n            h = wnd.height() / zoomLevel - parseInt(wrapper.css(\"padding-top\"), 10);\n\n            wrapper.css({\n                    width: w,\n                    height: h\n                });\n            that.options.width = w;\n            that.options.height = h;\n\n            that.resize();\n        },\n\n        refresh: function (options) {\n            var that = this,\n                initOptions = that.options,\n                element = $(that.element),\n                iframe,\n                showIframe,\n                url;\n\n            if (!isPlainObject(options)) {\n                options = { url: options };\n            }\n\n            options = extend({}, initOptions.content, options);\n\n            showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n\n            url = options.url;\n\n            if (url) {\n                if (!defined(showIframe)) {\n                    showIframe = !isLocalUrl(url);\n                }\n\n                if (!showIframe) {\n                    // perform AJAX request\n                    that._ajaxRequest(options);\n                } else {\n                    iframe = element.find(\".\" + KCONTENTFRAME)[0];\n\n                    if (iframe) {\n                        // refresh existing iframe\n                        iframe.src = url || iframe.src;\n                    } else {\n                        // render new iframe\n                        element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n                    }\n\n                    element.find(\".\" + KCONTENTFRAME)\n                        .unbind(\"load\" + NS)\n                        .on(\"load\" + NS, proxy(this._triggerRefresh, this));\n                }\n            } else {\n                if (options.template) {\n                    // refresh template\n                    that.content(template(options.template)({}));\n                }\n\n                that.trigger(REFRESH);\n            }\n\n            element.toggleClass(\"k-window-iframecontent\", !!showIframe);\n\n            return that;\n        },\n\n        _triggerRefresh: function() {\n            this.trigger(REFRESH);\n        },\n\n        _ajaxComplete: function() {\n            clearTimeout(this._loadingIconTimeout);\n            this.wrapper.find(REFRESHICON).removeClass(LOADING);\n        },\n\n        _ajaxError: function (xhr, status) {\n            this.trigger(ERROR, { status: status, xhr: xhr });\n        },\n\n        _ajaxSuccess: function (contentTemplate) {\n            return function (data) {\n                var html = data;\n                if (contentTemplate) {\n                    html = template(contentTemplate)(data || {});\n                }\n\n                this.content(html, data);\n                this.element.prop(\"scrollTop\", 0);\n\n                this.trigger(REFRESH);\n            };\n        },\n\n        _showLoading: function() {\n            this.wrapper.find(REFRESHICON).addClass(LOADING);\n        },\n\n        _ajaxRequest: function (options) {\n            this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n\n            $.ajax(extend({\n                type: \"GET\",\n                dataType: \"html\",\n                cache: false,\n                error: proxy(this._ajaxError, this),\n                complete: proxy(this._ajaxComplete, this),\n                success: proxy(this._ajaxSuccess(options.template), this)\n            }, options));\n        },\n\n        destroy: function () {\n            var that = this;\n\n            if (that.resizing) {\n                that.resizing.destroy();\n            }\n\n            if (that.dragging) {\n                that.dragging.destroy();\n            }\n\n            that.wrapper.off(NS)\n                .children(KWINDOWCONTENT).off(NS).end()\n                .find(\".k-resize-handle,.k-window-titlebar\").off(NS);\n\n            $(window).off(\"resize\" + NS + that._marker);\n\n            clearTimeout(that._loadingIconTimeout);\n\n            Widget.fn.destroy.call(that);\n\n            that.unbind(undefined);\n\n            kendo.destroy(that.wrapper);\n\n            that._removeOverlay(true);\n\n            that.wrapper.empty().remove();\n\n            that.wrapper = that.appendTo = that.element = $();\n        },\n\n        _createWindow: function() {\n            var contentHtml = this.element,\n                options = this.options,\n                iframeSrcAttributes,\n                wrapper,\n                isRtl = kendo.support.isRtl(contentHtml);\n\n            if (options.scrollable === false) {\n                contentHtml.attr(\"style\", \"overflow:hidden;\");\n            }\n\n            wrapper = $(templates.wrapper(options));\n\n            // Collect the src attributes of all iframes and then set them to empty string.\n            // This seems to fix this IE9 \"feature\": http://msdn.microsoft.com/en-us/library/gg622929%28v=VS.85%29.aspx?ppud=4\n            iframeSrcAttributes = contentHtml.find(\"iframe:not(.k-content)\").map(function() {\n                var src = this.getAttribute(\"src\");\n                this.src = \"\";\n                return src;\n            });\n\n            // Make sure the wrapper is appended to the body only once. IE9+ will throw exceptions if you move iframes in DOM\n            wrapper\n                .toggleClass(\"k-rtl\", isRtl)\n                .appendTo(this.appendTo)\n                .append(contentHtml)\n                .find(\"iframe:not(.k-content)\").each(function(index) {\n                   // Restore the src attribute of the iframes when they are part of the live DOM tree\n                   this.src = iframeSrcAttributes[index];\n                });\n\n            wrapper.find(\".k-window-title\")\n                .css(isRtl ? \"left\" : \"right\", wrapper.find(\".k-window-actions\").outerWidth() + 10);\n\n            contentHtml.css(\"visibility\", \"\").show();\n\n            contentHtml.find(\"[data-role=editor]\").each(function() {\n                var editor = $(this).data(\"kendoEditor\");\n\n                if (editor) {\n                    editor.refresh();\n                }\n            });\n\n            wrapper = contentHtml = null;\n        }\n    });\n\n    templates = {\n        wrapper: template(\"<div class='k-widget k-window' />\"),\n        action: template(\n            \"<a role='button' href='\\\\#' class='k-window-action k-link'>\" +\n                \"<span role='presentation' class='k-icon k-i-#= name.toLowerCase() #'>#= name #</span>\" +\n            \"</a>\"\n        ),\n        titlebar: template(\n            \"<div class='k-window-titlebar k-header'>&nbsp;\" +\n                \"<span class='k-window-title'>#= title #</span>\" +\n                \"<div class='k-window-actions' />\" +\n            \"</div>\"\n        ),\n        overlay: \"<div class='k-overlay' />\",\n        contentFrame: template(\n            \"<iframe frameborder='0' title='#= title #' class='\" + KCONTENTFRAME + \"' \" +\n                \"src='#= content.url #'>\" +\n                    \"This page requires frames in order to show content\" +\n            \"</iframe>\"\n        ),\n        resizeHandle: template(\"<div class='k-resize-handle k-resize-#= data #'></div>\")\n    };\n\n\n    function WindowResizing(wnd) {\n        var that = this;\n        that.owner = wnd;\n        that._draggable = new Draggable(wnd.wrapper, {\n            filter: \">\" + KWINDOWRESIZEHANDLES,\n            group: wnd.wrapper.id + \"-resizing\",\n            dragstart: proxy(that.dragstart, that),\n            drag: proxy(that.drag, that),\n            dragend: proxy(that.dragend, that)\n        });\n\n        that._draggable.userEvents.bind(\"press\", proxy(that.addOverlay, that));\n        that._draggable.userEvents.bind(\"release\", proxy(that.removeOverlay, that));\n    }\n\n    WindowResizing.prototype = {\n        addOverlay: function () {\n            this.owner.wrapper.append(templates.overlay);\n        },\n        removeOverlay: function () {\n            this.owner.wrapper.find(KOVERLAY).remove();\n        },\n        dragstart: function (e) {\n            var that = this;\n            var wnd = that.owner;\n            var wrapper = wnd.wrapper;\n\n            that.elementPadding = parseInt(wrapper.css(\"padding-top\"), 10);\n            that.initialPosition = kendo.getOffset(wrapper, \"position\");\n\n            that.resizeDirection = e.currentTarget.prop(\"className\").replace(\"k-resize-handle k-resize-\", \"\");\n\n            that.initialSize = {\n                width: wrapper.width(),\n                height: wrapper.height()\n            };\n\n            that.containerOffset = kendo.getOffset(wnd.appendTo, \"position\");\n\n            wrapper\n                .children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n\n            $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n        },\n        drag: function (e) {\n            var that = this,\n                wnd = that.owner,\n                wrapper = wnd.wrapper,\n                options = wnd.options,\n                direction = that.resizeDirection,\n                containerOffset = that.containerOffset,\n                initialPosition = that.initialPosition,\n                initialSize = that.initialSize,\n                newWidth, newHeight,\n                windowBottom, windowRight,\n                x = Math.max(e.x.location, containerOffset.left),\n                y = Math.max(e.y.location, containerOffset.top);\n\n            if (direction.indexOf(\"e\") >= 0) {\n                newWidth = x - initialPosition.left;\n\n                wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n            } else if (direction.indexOf(\"w\") >= 0) {\n                windowRight = initialPosition.left + initialSize.width;\n                newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n\n                wrapper.css({\n                    left: windowRight - newWidth - containerOffset.left,\n                    width: newWidth\n                });\n            }\n\n            if (direction.indexOf(\"s\") >= 0) {\n                newHeight = y - initialPosition.top - that.elementPadding;\n\n                wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n            } else if (direction.indexOf(\"n\") >= 0) {\n                windowBottom = initialPosition.top + initialSize.height;\n                newHeight = constrain(windowBottom - y, options.minHeight, options.maxHeight);\n\n                wrapper.css({\n                    top: windowBottom - newHeight - containerOffset.top,\n                    height: newHeight\n                });\n            }\n\n            if (newWidth) {\n                wnd.options.width = newWidth + \"px\";\n            }\n            if (newHeight) {\n                wnd.options.height = newHeight + \"px\";\n            }\n\n            wnd.resize();\n        },\n        dragend: function (e) {\n            var that = this,\n                wnd = that.owner,\n                wrapper = wnd.wrapper;\n\n            wrapper\n                .children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n\n            $(BODY).css(CURSOR, \"\");\n\n            if (wnd.touchScroller) {\n               wnd.touchScroller.reset();\n            }\n\n            if (e.keyCode == 27) {\n                wrapper.css(that.initialPosition)\n                    .css(that.initialSize);\n            }\n\n            wnd.trigger(RESIZEEND);\n\n            return false;\n        },\n        destroy: function() {\n            if (this._draggable) {\n                this._draggable.destroy();\n            }\n\n            this._draggable = this.owner = null;\n        }\n    };\n\n    function WindowDragging(wnd, dragHandle) {\n        var that = this;\n        that.owner = wnd;\n        that._draggable = new Draggable(wnd.wrapper, {\n            filter: dragHandle,\n            group: wnd.wrapper.id + \"-moving\",\n            dragstart: proxy(that.dragstart, that),\n            drag: proxy(that.drag, that),\n            dragend: proxy(that.dragend, that),\n            dragcancel: proxy(that.dragcancel, that)\n        });\n\n        that._draggable.userEvents.stopPropagation = false;\n    }\n\n    WindowDragging.prototype = {\n        dragstart: function (e) {\n            var wnd = this.owner,\n                element = wnd.element,\n                actions = element.find(\".k-window-actions\"),\n                containerOffset = kendo.getOffset(wnd.appendTo);\n\n            wnd.trigger(DRAGSTART);\n\n            wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, \"position\");\n\n            wnd.startPosition = {\n                left: e.x.client - wnd.initialWindowPosition.left,\n                top: e.y.client - wnd.initialWindowPosition.top\n            };\n\n            if (actions.length > 0) {\n                wnd.minLeftPosition = actions.outerWidth() + parseInt(actions.css(\"right\"), 10) - element.outerWidth();\n            } else {\n                wnd.minLeftPosition =  20 - element.outerWidth(); // at least 20px remain visible\n            }\n\n            wnd.minLeftPosition -= containerOffset.left;\n            wnd.minTopPosition = -containerOffset.top;\n\n            wnd.wrapper\n                .append(templates.overlay)\n                .children(KWINDOWRESIZEHANDLES).hide();\n\n            $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n        },\n\n        drag: function (e) {\n            var wnd = this.owner,\n                position = wnd.options.position,\n                newTop = Math.max(e.y.client - wnd.startPosition.top, wnd.minTopPosition),\n                newLeft = Math.max(e.x.client - wnd.startPosition.left, wnd.minLeftPosition),\n                coordinates = {\n                    left: newLeft,\n                    top: newTop\n                };\n\n            $(wnd.wrapper).css(coordinates);\n            position.top = newTop;\n            position.left = newLeft;\n        },\n\n        _finishDrag: function() {\n            var wnd = this.owner;\n\n            wnd.wrapper\n                .children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end()\n                .find(KOVERLAY).remove();\n\n            $(BODY).css(CURSOR, \"\");\n        },\n\n        dragcancel: function (e) {\n            this._finishDrag();\n\n            e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n        },\n\n        dragend: function () {\n            this._finishDrag();\n\n            this.owner.trigger(DRAGEND);\n\n            return false;\n        },\n        destroy: function() {\n            if (this._draggable) {\n                this._draggable.destroy();\n            }\n\n            this._draggable = this.owner = null;\n        }\n    };\n\n    kendo.ui.plugin(Window);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        angular = window.angular,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        attr = kendo.attr,\n        Class = kendo.Class,\n        Widget = ui.Widget,\n        ViewClone = kendo.ViewClone,\n        INIT = \"init\",\n        UI_OVERLAY = '<div style=\"height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 20000; display: none\" />',\n        BEFORE_SHOW = \"beforeShow\",\n        SHOW = \"show\",\n        AFTER_SHOW = \"afterShow\",\n        BEFORE_HIDE = \"beforeHide\",\n        TRANSITION_END = \"transitionEnd\",\n        TRANSITION_START = \"transitionStart\",\n        HIDE = \"hide\",\n        DESTROY = \"destroy\",\n        Z_INDEX = \"z-index\",\n        attrValue = kendo.attrValue,\n        roleSelector = kendo.roleSelector,\n        directiveSelector = kendo.directiveSelector,\n        compileMobileDirective = kendo.compileMobileDirective;\n\n    function initPopOvers(element) {\n        var popovers = element.find(roleSelector(\"popover\")),\n            idx, length,\n            roles = ui.roles;\n\n        for (idx = 0, length = popovers.length; idx < length; idx ++) {\n            kendo.initWidget(popovers[idx], {}, roles);\n        }\n    }\n\n    function preventScrollIfNotInput(e) {\n        if (!kendo.triggeredByInput(e)) {\n            e.preventDefault();\n        }\n    }\n\n    var View = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n            this.params = {};\n\n            $.extend(this, options);\n\n            this.transition = this.transition || this.defaultTransition;\n\n            this._id();\n\n            if (!this.options.$angular) {\n                this._layout();\n                this._overlay();\n                this._scroller();\n                this._model();\n            } else {\n                this._overlay();\n            }\n        },\n\n        events: [\n            INIT,\n            BEFORE_SHOW,\n            SHOW,\n            AFTER_SHOW,\n            BEFORE_HIDE,\n            HIDE,\n            DESTROY,\n            TRANSITION_START,\n            TRANSITION_END\n        ],\n\n        options: {\n            name: \"View\",\n            title: \"\",\n            layout: null,\n            getLayout: $.noop,\n            reload: false,\n            transition: \"\",\n            defaultTransition: \"\",\n            useNativeScrolling: false,\n            stretch: false,\n            zoom: false,\n            model: null,\n            modelScope: window,\n            scroller: {},\n            initWidgets: true\n        },\n\n        enable: function(enable) {\n            if(typeof enable == \"undefined\") {\n                enable = true;\n            }\n\n            if(enable) {\n                this.overlay.hide();\n            } else {\n                this.overlay.show();\n            }\n        },\n\n        destroy: function() {\n            if (this.layout) {\n                this.layout.detach(this);\n            }\n\n            this.trigger(DESTROY);\n\n\n            Widget.fn.destroy.call(this);\n\n            if (this.scroller) {\n                this.scroller.destroy();\n            }\n\n            if (this.options.$angular) {\n                this.element.scope().$destroy();\n            }\n\n            kendo.destroy(this.element);\n        },\n\n        purge: function() {\n            this.destroy();\n            this.element.remove();\n        },\n\n        triggerBeforeShow: function() {\n            if (this.trigger(BEFORE_SHOW, { view: this })) {\n                return false;\n            }\n            return true;\n        },\n\n        showStart: function() {\n            var element = this.element;\n\n            element.css(\"display\", \"\");\n\n            if (!this.inited) {\n                this.inited = true;\n                this.trigger(INIT, {view: this});\n            } else { // skip the initial controller update\n                this._invokeNgController();\n            }\n\n            if (this.layout) {\n                this.layout.attach(this);\n            }\n\n            this._padIfNativeScrolling();\n            this.trigger(SHOW, {view: this});\n            kendo.resize(element);\n        },\n\n        showEnd: function() {\n            this.trigger(AFTER_SHOW, {view: this});\n            this._padIfNativeScrolling();\n        },\n\n        hideStart: function() {\n            this.trigger(BEFORE_HIDE, {view: this});\n        },\n\n        hideEnd: function() {\n            var that = this;\n            that.element.hide();\n            that.trigger(HIDE, {view: that});\n\n            if (that.layout) {\n                that.layout.trigger(HIDE, { view : that, layout: that.layout });\n            }\n        },\n\n        beforeTransition: function(type){\n            this.trigger(TRANSITION_START, { type: type });\n        },\n\n        afterTransition: function(type){\n            this.trigger(TRANSITION_END, { type: type });\n        },\n\n        _padIfNativeScrolling: function() {\n            if (mobile.appLevelNativeScrolling()) {\n                var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android,\n                    skin = mobile.application.skin() || \"\",\n                    isAndroidForced = mobile.application.os.android || (skin.indexOf(\"android\") > -1),\n                    hasPlatformIndependentSkin = skin === \"flat\" || (skin.indexOf(\"material\") > -1),\n                    topContainer = (isAndroid || isAndroidForced) && (!hasPlatformIndependentSkin) ? \"footer\" : \"header\",\n                    bottomContainer = (isAndroid || isAndroidForced) && (!hasPlatformIndependentSkin) ? \"header\" : \"footer\";\n\n                this.content.css({\n                    paddingTop: this[topContainer].height(),\n                    paddingBottom: this[bottomContainer].height()\n                });\n            }\n        },\n\n        contentElement: function() {\n            var that = this;\n\n            return that.options.stretch ? that.content : that.scrollerContent;\n        },\n\n        clone: function(back) {\n            return new ViewClone(this);\n        },\n\n        _scroller: function() {\n            var that = this;\n\n            if (mobile.appLevelNativeScrolling()) {\n                return;\n            }\n            if (that.options.stretch) {\n                that.content.addClass(\"km-stretched-view\");\n            } else {\n                that.content.kendoMobileScroller($.extend(that.options.scroller, { zoom: that.options.zoom, useNative: that.options.useNativeScrolling }));\n\n                that.scroller = that.content.data(\"kendoMobileScroller\");\n                that.scrollerContent = that.scroller.scrollElement;\n            }\n\n            // prevent accidental address bar display when pulling the header\n            if (kendo.support.kineticScrollNeeded) {\n                $(that.element).on(\"touchmove\", \".km-header\", preventScrollIfNotInput);\n                if (!that.options.useNativeScrolling) {\n                    $(that.element).on(\"touchmove\", \".km-content\", preventScrollIfNotInput);\n                }\n            }\n        },\n\n        _model: function() {\n            var that = this,\n                element = that.element,\n                model = that.options.model;\n\n            if (typeof model === \"string\") {\n                model = kendo.getter(model)(that.options.modelScope);\n            }\n\n            that.model = model;\n\n            initPopOvers(element);\n\n            that.element.css(\"display\", \"\");\n            if (that.options.initWidgets) {\n                if (model) {\n                    kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n                } else {\n                    mobile.init(element.children());\n                }\n            }\n            that.element.css(\"display\", \"none\");\n        },\n\n        _id: function() {\n            var element = this.element,\n                idAttrValue = element.attr(\"id\") || \"\";\n\n            this.id = attrValue(element, \"url\") || \"#\" + idAttrValue;\n\n            if (this.id == \"#\") {\n                this.id = kendo.guid();\n                element.attr(\"id\", this.id);\n            }\n        },\n\n        _layout: function() {\n            var contentSelector = roleSelector(\"content\"),\n                element = this.element;\n\n            element.addClass(\"km-view\");\n\n            this.header = element.children(roleSelector(\"header\")).addClass(\"km-header\");\n            this.footer = element.children(roleSelector(\"footer\")).addClass(\"km-footer\");\n\n            if (!element.children(contentSelector)[0]) {\n              element.wrapInner(\"<div \" + attr(\"role\") + '=\"content\"></div>');\n            }\n\n            this.content = element.children(roleSelector(\"content\"))\n                                .addClass(\"km-content\");\n\n            this.element.prepend(this.header).append(this.footer);\n\n\n            this.layout = this.options.getLayout(this.layout);\n\n            if (this.layout) {\n                this.layout.setup(this);\n            }\n        },\n\n        _overlay: function() {\n            this.overlay = $(UI_OVERLAY).appendTo(this.element);\n        },\n\n        _invokeNgController: function() {\n            var controller,\n                scope;\n\n            if (this.options.$angular) {\n                controller = this.element.controller();\n                scope = this.element.scope();\n\n                if (controller) {\n                    var callback = $.proxy(this, '_callController', controller, scope);\n\n                    if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n                        callback();\n                    } else {\n                        scope.$apply(callback);\n                    }\n                }\n            }\n        },\n\n        _callController: function(controller, scope) {\n            this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n        }\n    });\n\n    function initWidgets(collection) {\n        collection.each(function() {\n            kendo.initWidget($(this), {}, ui.roles);\n        });\n    }\n\n    var Layout = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            element = this.element;\n\n            this.header = element.children(this._locate(\"header\")).addClass(\"km-header\");\n            this.footer = element.children(this._locate(\"footer\")).addClass(\"km-footer\");\n            this.elements = this.header.add(this.footer);\n\n            initPopOvers(element);\n\n            if (!this.options.$angular) {\n                kendo.mobile.init(this.element.children());\n            }\n            this.element.detach();\n            this.trigger(INIT, {layout: this});\n        },\n\n        _locate: function(selectors) {\n            return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n        },\n\n        options: {\n            name: \"Layout\",\n            id: null,\n            platform: null\n        },\n\n        events: [\n            INIT,\n            SHOW,\n            HIDE\n        ],\n\n        setup: function(view) {\n            if (!view.header[0]) { view.header = this.header; }\n            if (!view.footer[0]) { view.footer = this.footer; }\n        },\n\n        detach: function(view) {\n            var that = this;\n            if (view.header === that.header && that.header[0]) {\n                view.element.prepend(that.header.detach()[0].cloneNode(true));\n            }\n\n            if (view.footer === that.footer && that.footer.length) {\n                view.element.append(that.footer.detach()[0].cloneNode(true));\n            }\n        },\n\n        attach: function(view) {\n            var that = this,\n                previousView = that.currentView;\n\n            if (previousView) {\n                that.detach(previousView);\n            }\n\n            if (view.header === that.header) {\n                that.header.detach();\n                view.element.children(roleSelector(\"header\")).remove();\n                view.element.prepend(that.header);\n            }\n\n            if (view.footer === that.footer) {\n                that.footer.detach();\n                view.element.children(roleSelector(\"footer\")).remove();\n                view.element.append(that.footer);\n            }\n\n            that.trigger(SHOW, {layout: that, view: view});\n            that.currentView = view;\n        }\n    });\n\n    var Observable = kendo.Observable,\n        bodyRegExp = /<body[^>]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i,\n        LOAD_START = \"loadStart\",\n        LOAD_COMPLETE = \"loadComplete\",\n        SHOW_START = \"showStart\",\n        SAME_VIEW_REQUESTED = \"sameViewRequested\",\n        VIEW_SHOW = \"viewShow\",\n        VIEW_TYPE_DETERMINED = \"viewTypeDetermined\",\n        AFTER = \"after\";\n\n    var ViewEngine = Observable.extend({\n        init: function(options) {\n            var that = this,\n                views,\n                errorMessage,\n                container,\n                collection;\n\n            Observable.fn.init.call(that);\n\n            $.extend(that, options);\n            that.sandbox = $(\"<div />\");\n            container = that.container;\n\n            views = that._hideViews(container);\n            that.rootView = views.first();\n\n            if (!that.rootView[0] && options.rootNeeded) {\n                if (container[0] == kendo.mobile.application.element[0]) {\n                    errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n                } else {\n                    errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n                }\n                throw new Error(errorMessage);\n            }\n\n            that.layouts = {};\n\n            that.viewContainer = new kendo.ViewContainer(that.container);\n\n            that.viewContainer.bind(\"accepted\", function(e) {\n                e.view.params = that.params;\n            });\n\n            that.viewContainer.bind(\"complete\", function(e) {\n                that.trigger(VIEW_SHOW, { view: e.view });\n            });\n\n            that.viewContainer.bind(AFTER, function(e) {\n                that.trigger(AFTER);\n            });\n\n            this.getLayoutProxy = $.proxy(this, \"_getLayout\");\n            that._setupLayouts(container);\n\n            collection = container.children(that._locate(\"modalview drawer\"));\n            if (that.$angular) {\n                collection.each(function(idx, element) {\n                    compileMobileDirective($(element), function(scope) {\n                        //pass the options?\n                    });\n                });\n            } else {\n                initWidgets(collection);\n            }\n\n            this.bind(this.events, options);\n        },\n\n        events: [\n            SHOW_START,\n            AFTER,\n            VIEW_SHOW,\n            LOAD_START,\n            LOAD_COMPLETE,\n            SAME_VIEW_REQUESTED,\n            VIEW_TYPE_DETERMINED\n        ],\n\n        destroy: function() {\n            kendo.destroy(this.container);\n\n            for (var id in this.layouts) {\n                this.layouts[id].destroy();\n            }\n        },\n\n        view: function() {\n            return this.viewContainer.view;\n        },\n\n        showView: function(url, transition, params) {\n            url = url.replace(new RegExp(\"^\" + this.remoteViewURLPrefix), \"\");\n            if (url === \"\" && this.remoteViewURLPrefix) {\n                url = \"/\";\n            }\n\n            if (url.replace(/^#/, \"\") === this.url) {\n                this.trigger(SAME_VIEW_REQUESTED);\n                return false;\n            }\n\n            this.trigger(SHOW_START);\n\n            var that = this,\n                showClosure = function(view) {\n                    return that.viewContainer.show(view, transition, url);\n                },\n                element = that._findViewElement(url),\n                view = kendo.widgetInstance(element);\n\n            that.url = url.replace(/^#/, \"\");\n\n            that.params = params;\n\n            if (view && view.reload) {\n                view.purge();\n                element = [];\n            }\n\n            this.trigger(VIEW_TYPE_DETERMINED, { remote: element.length === 0, url: url });\n\n            if (element[0]) {\n                if (!view) {\n                    view = that._createView(element);\n                }\n\n                return showClosure(view);\n            } else {\n                if (this.serverNavigation) {\n                    location.href = url;\n                } else {\n                    that._loadView(url, showClosure);\n                }\n                return true;\n            }\n        },\n\n        append: function(html, url) {\n            var sandbox = this.sandbox,\n                urlPath = (url || \"\").split(\"?\")[0],\n                container = this.container,\n                views,\n                modalViews,\n                view;\n\n            if (bodyRegExp.test(html)) {\n                html = RegExp.$1;\n            }\n\n            sandbox[0].innerHTML = html;\n\n            container.append(sandbox.children(\"script, style\"));\n\n            views = this._hideViews(sandbox);\n            view = views.first();\n\n            // Generic HTML content found as remote view - no remote view markers\n            if (!view.length) {\n                views = view = sandbox.wrapInner(\"<div data-role=view />\").children(); // one element\n            }\n\n            if (urlPath) {\n                view.hide().attr(attr(\"url\"), urlPath);\n            }\n\n            this._setupLayouts(sandbox);\n\n            modalViews = sandbox.children(this._locate(\"modalview drawer\"));\n\n            container.append(sandbox.children(this._locate(\"layout modalview drawer\")).add(views));\n\n            // Initialize the modalviews after they have been appended to the final container\n            initWidgets(modalViews);\n\n            return this._createView(view);\n        },\n\n        _locate: function(selectors) {\n            return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n        },\n\n        _findViewElement: function(url) {\n            var element,\n                urlPath = url.split(\"?\")[0];\n\n            if (!urlPath) {\n                return this.rootView;\n            }\n\n            element = this.container.children(\"[\" + attr(\"url\") + \"='\" + urlPath + \"']\");\n\n            // do not try to search for \"#/foo/bar\" id, jQuery throws error\n            if (!element[0] && urlPath.indexOf(\"/\") === -1) {\n                element = this.container.children(urlPath.charAt(0) === \"#\" ? urlPath : \"#\" + urlPath);\n            }\n\n            return element;\n        },\n\n        _createView: function(element) {\n            if (this.$angular) {\n                var that = this;\n\n                return compileMobileDirective(element, function(scope) {\n                    scope.viewOptions = {\n                        defaultTransition: that.transition,\n                        loader: that.loader,\n                        container: that.container,\n                        getLayout: that.getLayoutProxy\n                    };\n                });\n            } else {\n                return kendo.initWidget(element, {\n                    defaultTransition: this.transition,\n                    loader: this.loader,\n                    container: this.container,\n                    getLayout: this.getLayoutProxy,\n                    modelScope: this.modelScope,\n                    reload: attrValue(element, \"reload\")\n                }, ui.roles);\n            }\n        },\n\n        _getLayout: function(name) {\n            if (name === \"\") {\n                return null;\n            }\n\n            return name ? this.layouts[name] : this.layouts[this.layout];\n        },\n\n        _loadView: function(url, callback) {\n            if (this._xhr) {\n                this._xhr.abort();\n            }\n\n            this.trigger(LOAD_START);\n\n            this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), \"html\")\n                .always($.proxy(this, \"_xhrComplete\", callback, url));\n        },\n\n        _xhrComplete: function(callback, url, response, status, err) {\n            var success = true;\n\n            if (typeof response === \"object\") {\n                if (response.status === 0) {\n                    if (response.responseText && response.responseText.length > 0) {\n                        success = true;\n                        response = response.responseText;\n                    } else { // request has been aborted for real\n                        return;\n                    }\n                }\n            }\n\n            this.trigger(LOAD_COMPLETE);\n\n            if (success) {\n                callback(this.append(response, url));\n            }\n        },\n\n        _hideViews: function(container) {\n            return container.children(this._locate(\"view splitview\")).hide();\n        },\n\n        _setupLayouts: function(element) {\n            var that = this,\n                layout;\n\n            element.children(that._locate(\"layout\")).each(function() {\n                if (that.$angular) {\n                    layout = compileMobileDirective($(this));\n                } else {\n                    layout = kendo.initWidget($(this), {}, ui.roles);\n                }\n\n                var platform = layout.options.platform;\n\n                if (!platform || platform === mobile.application.os.name) {\n                    that.layouts[layout.options.id] = layout;\n                } else {\n                    layout.destroy();\n                }\n            });\n\n        }\n    });\n\n    kendo.mobile.ViewEngine = ViewEngine;\n\n    ui.plugin(View);\n    ui.plugin(Layout);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Widget = ui.Widget,\n        CAPTURE_EVENTS = $.map(kendo.eventMap, function(value) { return value; }).join(\" \").split(\" \");\n\n    var Loader = Widget.extend({\n        init: function(container, options) {\n            var that = this,\n                element = $('<div class=\"km-loader\"><span class=\"km-loading km-spin\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>');\n\n            Widget.fn.init.call(that, element, options);\n\n            that.container = container;\n            that.captureEvents = false;\n\n            that._attachCapture();\n\n            element.append(that.options.loading).hide().appendTo(container);\n        },\n\n        options: {\n            name: \"Loader\",\n            loading: \"<h1>Loading...</h1>\",\n            timeout: 100\n        },\n\n        show: function() {\n            var that = this;\n\n            clearTimeout(that._loading);\n\n            if (that.options.loading === false) {\n                return;\n            }\n\n            that.captureEvents = true;\n            that._loading = setTimeout(function() {\n                that.element.show();\n            }, that.options.timeout);\n        },\n\n        hide: function() {\n            this.captureEvents = false;\n            clearTimeout(this._loading);\n            this.element.hide();\n        },\n\n        changeMessage: function(message) {\n            this.options.loading = message;\n            this.element.find(\">h1\").html(message);\n        },\n\n        transition: function() {\n            this.captureEvents = true;\n            this.container.css(\"pointer-events\", \"none\");\n        },\n\n        transitionDone: function() {\n            this.captureEvents = false;\n            this.container.css(\"pointer-events\", \"\");\n        },\n\n        _attachCapture: function() {\n            var that = this;\n            that.captureEvents = false;\n\n            function capture(e) {\n                if (that.captureEvents) {\n                    e.preventDefault();\n                }\n            }\n\n            for (var i = 0; i < CAPTURE_EVENTS.length; i ++) {\n                that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n            }\n        }\n    });\n\n    ui.plugin(Loader);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        roleSelector = kendo.roleSelector,\n        ui = mobile.ui,\n        Widget = ui.Widget,\n        ViewEngine = mobile.ViewEngine,\n        View = ui.View,\n        Loader = mobile.ui.Loader,\n\n        EXTERNAL = \"external\",\n        HREF = \"href\",\n        DUMMY_HREF = \"#!\",\n\n        NAVIGATE = \"navigate\",\n        VIEW_SHOW = \"viewShow\",\n        SAME_VIEW_REQUESTED = \"sameViewRequested\",\n        OS = kendo.support.mobileOS,\n        SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700,\n\n        WIDGET_RELS = /popover|actionsheet|modalview|drawer/,\n        BACK = \"#:back\",\n\n        attrValue = kendo.attrValue,\n        // navigation element roles\n        buttonRoles = \"button backbutton detailbutton listview-link\",\n        linkRoles = \"tab\";\n\n    var Pane = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n            element = that.element;\n\n            element.addClass(\"km-pane\");\n\n            if (that.options.collapsible) {\n                element.addClass(\"km-collapsible-pane\");\n            }\n\n            this.history = [];\n\n            this.historyCallback = function(url, params, backButtonPressed) {\n                var transition = that.transition;\n                that.transition = null;\n\n                // swiping back in iOS leaves the app in a very broken state if we perform a transition\n                if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n                    transition = \"none\";\n                }\n\n                return that.viewEngine.showView(url, transition, params);\n            };\n\n            this._historyNavigate = function(url) {\n                if (url === BACK) {\n                    if (that.history.length === 1) {\n                        return;\n                    }\n\n                    that.history.pop();\n                    url = that.history[that.history.length - 1];\n                } else {\n                    that.history.push(url);\n                }\n\n                that.historyCallback(url, kendo.parseQueryStringParams(url));\n            };\n\n            this._historyReplace = function(url) {\n                var params = kendo.parseQueryStringParams(url);\n                that.history[that.history.length - 1] = url;\n                that.historyCallback(url, params);\n            };\n\n            that.loader = new Loader(element, {\n                loading: that.options.loading\n            });\n\n            that.viewEngine = new ViewEngine({\n                container: element,\n                transition: options.transition,\n                modelScope: options.modelScope,\n                rootNeeded: !options.initial,\n                serverNavigation: options.serverNavigation,\n                remoteViewURLPrefix: options.root || \"\",\n                layout: options.layout,\n                $angular: options.$angular,\n                loader: that.loader,\n\n                showStart: function() {\n                    that.loader.transition();\n                    that.closeActiveDialogs();\n                },\n\n                after: function(e) {\n                    that.loader.transitionDone();\n                },\n\n                viewShow: function(e) {\n                    that.trigger(VIEW_SHOW, e);\n                },\n\n                loadStart: function() {\n                    that.loader.show();\n                },\n\n                loadComplete: function() {\n                    that.loader.hide();\n                },\n\n                sameViewRequested: function() {\n                    that.trigger(SAME_VIEW_REQUESTED);\n                },\n\n                viewTypeDetermined: function(e) {\n                    if (!e.remote || !that.options.serverNavigation)  {\n                        that.trigger(NAVIGATE, { url: e.url });\n                    }\n                }\n            });\n\n\n            this._setPortraitWidth();\n\n            kendo.onResize(function() {\n                that._setPortraitWidth();\n            });\n\n            that._setupAppLinks();\n        },\n\n        closeActiveDialogs: function() {\n            var dialogs = this.element.find(roleSelector(\"actionsheet popover modalview\")).filter(\":visible\");\n            dialogs.each(function() {\n                kendo.widgetInstance($(this), ui).close();\n            });\n        },\n\n        navigateToInitial: function() {\n            var initial = this.options.initial;\n\n            if (initial) {\n                this.navigate(initial);\n            }\n        },\n\n        options: {\n            name: \"Pane\",\n            portraitWidth: \"\",\n            transition: \"\",\n            layout: \"\",\n            collapsible: false,\n            initial: null,\n            modelScope: window,\n            loading: \"<h1>Loading...</h1>\"\n        },\n\n        events: [\n            NAVIGATE,\n            VIEW_SHOW,\n            SAME_VIEW_REQUESTED\n        ],\n\n        append: function(html) {\n            return this.viewEngine.append(html);\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.viewEngine.destroy();\n            this.userEvents.destroy();\n        },\n\n        navigate: function(url, transition) {\n            if (url instanceof View) {\n                url = url.id;\n            }\n\n            this.transition = transition;\n\n            this._historyNavigate(url);\n        },\n\n        replace: function(url, transition) {\n            if (url instanceof View) {\n                url = url.id;\n            }\n\n            this.transition = transition;\n\n            this._historyReplace(url);\n        },\n\n        bindToRouter: function(router) {\n            var that = this,\n                history = this.history,\n                viewEngine = this.viewEngine;\n\n            router.bind(\"init\", function(e) {\n                var url = e.url,\n                    attrUrl = router.pushState ? url : \"/\";\n\n                viewEngine.rootView.attr(kendo.attr(\"url\"), attrUrl);\n\n                // if current is set, then this means that the pane has navigated to a given view - we need to update the router accordingly.\n                var length = history.length;\n\n                if (url === \"/\" && length) {\n                    router.navigate(history[length - 1], true);\n                    e.preventDefault(); // prevents from executing routeMissing, by default\n                }\n            });\n\n            router.bind(\"routeMissing\", function(e) {\n                if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n                    e.preventDefault();\n                }\n            });\n\n            router.bind(\"same\", function() {\n                that.trigger(SAME_VIEW_REQUESTED);\n            });\n\n            that._historyNavigate = function(url) {\n                router.navigate(url);\n            };\n\n            that._historyReplace = function(url) {\n                router.replace(url);\n            };\n        },\n\n        hideLoading: function() {\n            this.loader.hide();\n        },\n\n        showLoading: function() {\n            this.loader.show();\n        },\n\n        changeLoadingMessage: function(message) {\n            this.loader.changeMessage(message);\n        },\n\n        view: function() {\n            return this.viewEngine.view();\n        },\n\n        _setPortraitWidth: function() {\n            var width,\n                portraitWidth = this.options.portraitWidth;\n\n            if (portraitWidth) {\n                width = kendo.mobile.application.element.is(\".km-vertical\") ? portraitWidth : \"auto\";\n                this.element.css(\"width\", width);\n            }\n        },\n\n        _setupAppLinks: function() {\n            var that = this;\n            this.element.handler(this)\n                .on(\"down\", roleSelector(linkRoles), \"_mouseup\")\n                .on(\"click\", roleSelector(linkRoles + \" \" + buttonRoles), \"_appLinkClick\");\n\n            this.userEvents = new kendo.UserEvents(this.element, {\n                filter: roleSelector(buttonRoles),\n                tap: function(e) {\n                    e.event.currentTarget = e.touch.currentTarget;\n                    that._mouseup(e.event);\n                }\n            });\n\n            // remove the ms-touch-action added by the user events, breaks native scrolling in WP8\n            this.element.css('-ms-touch-action', '');\n        },\n\n        _appLinkClick: function (e) {\n            var href = $(e.currentTarget).attr(\"href\");\n            var remote = href && href[0] !== \"#\" && this.options.serverNavigation;\n\n            if(!remote && attrValue($(e.currentTarget), \"rel\") != EXTERNAL) {\n                e.preventDefault();\n            }\n        },\n\n        _mouseup: function(e) {\n            if (e.which > 1 || e.isDefaultPrevented()) {\n                return;\n            }\n\n            var pane = this,\n                link = $(e.currentTarget),\n                transition = attrValue(link, \"transition\"),\n                rel = attrValue(link, \"rel\") || \"\",\n                target = attrValue(link, \"target\"),\n                href = link.attr(HREF),\n                delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0,\n                remote = href && href[0] !== \"#\" && this.options.serverNavigation;\n\n            if (delayedTouchEnd || remote || rel === EXTERNAL || (typeof href === \"undefined\") || href === DUMMY_HREF) {\n                return;\n            }\n\n            // Prevent iOS address bar progress display for in app navigation\n            link.attr(HREF, DUMMY_HREF);\n            setTimeout(function() { link.attr(HREF, href); });\n\n            if (rel.match(WIDGET_RELS)) {\n                kendo.widgetInstance($(href), ui).openFor(link);\n                // if propagation is not stopped and actionsheet is opened from tabstrip,\n                // the actionsheet is closed immediately.\n                if (rel === \"actionsheet\" || rel === \"drawer\") {\n                    e.stopPropagation();\n                }\n            } else {\n                if (target === \"_top\") {\n                    pane = mobile.application.pane;\n                }\n                else if (target) {\n                    pane = $(\"#\" + target).data(\"kendoMobilePane\");\n                }\n\n                pane.navigate(href, transition);\n            }\n\n            e.preventDefault();\n        }\n    });\n\n    Pane.wrap = function(element) {\n        if (!element.is(roleSelector(\"view\"))) {\n            element = element.wrap('<div data-' + kendo.ns + 'role=\"view\" data-stretch=\"true\"></div>').parent();\n        }\n\n        var paneContainer = element.wrap('<div class=\"km-pane-wrapper\"><div></div></div>').parent(),\n            pane = new Pane(paneContainer);\n\n        pane.navigate(\"\");\n\n        return pane;\n    };\n    ui.plugin(Pane);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        WRAPPER = '<div class=\"km-popup-wrapper\" />',\n        ARROW = '<div class=\"km-popup-arrow\" />',\n        OVERLAY = '<div class=\"km-popup-overlay\" />',\n        DIRECTION_CLASSES = \"km-up km-down km-left km-right\",\n        Widget = ui.Widget,\n        DIRECTIONS = {\n            \"down\": {\n                origin: \"bottom center\",\n                position: \"top center\"\n            },\n            \"up\": {\n                origin: \"top center\",\n                position: \"bottom center\"\n            },\n            \"left\": {\n                origin: \"center left\",\n                position: \"center right\",\n                collision: \"fit flip\"\n            },\n            \"right\": {\n                origin: \"center right\",\n                position: \"center left\",\n                collision: \"fit flip\"\n            }\n        },\n\n        ANIMATION = {\n            animation: {\n                open: {\n                    effects: \"fade:in\",\n                    duration: 0\n                },\n                close: {\n                    effects: \"fade:out\",\n                    duration: 400\n                }\n            }\n        },\n        DIMENSIONS = {\n            \"horizontal\": { offset: \"top\", size: \"height\" },\n            \"vertical\": { offset: \"left\", size: \"width\" }\n        },\n\n        REVERSE = {\n            \"up\": \"down\",\n            \"down\": \"up\",\n            \"left\": \"right\",\n            \"right\": \"left\"\n        };\n\n    var Popup = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                containerPopup = element.closest(\".km-modalview-wrapper\"),\n                viewport = element.closest(\".km-root\").children('.km-pane').first(),\n                container = containerPopup[0] ? containerPopup : viewport,\n                popupOptions,\n                axis;\n\n            if (options.viewport) {\n                viewport = options.viewport;\n            } else if (!viewport[0]) {\n                viewport = window;\n            }\n\n            if (options.container) {\n                container = options.container;\n            } else if (!container[0]) {\n                container = document.body;\n            }\n\n            popupOptions = {\n                viewport: viewport,\n                copyAnchorStyles: false,\n                autosize: true,\n                open: function() {\n                    that.overlay.show();\n                },\n\n                activate: $.proxy(that._activate, that),\n\n                deactivate: function() {\n                    that.overlay.hide();\n                    if (!that._apiCall) {\n                        that.trigger(HIDE);\n                    }\n\n                    that._apiCall = false;\n                }\n            };\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            element.wrap(WRAPPER).addClass(\"km-popup\").show();\n\n            axis = that.options.direction.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n            that.dimensions = DIMENSIONS[axis];\n\n            that.wrapper = element.parent().css({\n                width: options.width,\n                height: options.height\n            }).addClass(\"km-popup-wrapper km-\" + options.direction).hide();\n\n            that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n\n            that.overlay = $(OVERLAY).appendTo(container).hide();\n            popupOptions.appendTo = that.overlay;\n\n            if (options.className) {\n                that.overlay.addClass(options.className);\n            }\n\n            that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n        },\n\n        options: {\n            name: \"Popup\",\n            width: 240,\n            height: \"\",\n            direction: \"down\",\n            container: null,\n            viewport: null\n        },\n\n        events: [\n            HIDE\n        ],\n\n        show: function(target) {\n            this.popup.options.anchor = $(target);\n            this.popup.open();\n        },\n\n        hide: function() {\n            this._apiCall = true;\n            this.popup.close();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.popup.destroy();\n            this.overlay.remove();\n        },\n\n        target: function() {\n            return this.popup.options.anchor;\n        },\n\n        _activate: function() {\n            var that = this,\n                direction = that.options.direction,\n                dimensions = that.dimensions,\n                offset = dimensions.offset,\n                popup = that.popup,\n                anchor = popup.options.anchor,\n                anchorOffset = $(anchor).offset(),\n                elementOffset = $(popup.element).offset(),\n                cssClass = popup.flipped ? REVERSE[direction] : direction,\n                min = that.arrow[dimensions.size]() * 2,\n                max = that.element[dimensions.size]() - that.arrow[dimensions.size](),\n                size = $(anchor)[dimensions.size](),\n                offsetAmount = anchorOffset[offset] - elementOffset[offset] + (size / 2);\n\n            if (offsetAmount < min) {\n                offsetAmount = min;\n            }\n\n            if (offsetAmount > max) {\n                offsetAmount = max;\n            }\n\n            that.wrapper.removeClass(DIRECTION_CLASSES).addClass(\"km-\" + cssClass);\n            that.arrow.css(offset, offsetAmount).show();\n        }\n    });\n\n    var PopOver = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                popupOptions,\n                paneOptions;\n\n            that.initialOpen = false;\n\n            Widget.fn.init.call(that, element, options);\n\n            popupOptions = $.extend({\n                className: \"km-popover-root\",\n                hide: function() { that.trigger(CLOSE); }\n            }, this.options.popup);\n\n            that.popup = new Popup(that.element, popupOptions);\n            that.popup.overlay.on(\"move\", function(e) {\n                if (e.target == that.popup.overlay[0]) {\n                    e.preventDefault();\n                }\n            });\n\n            that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n            that.pane.navigateToInitial();\n\n            kendo.notify(that, ui);\n        },\n\n        options: {\n            name: \"PopOver\",\n            popup: { },\n            pane: { }\n        },\n\n        events: [\n            OPEN,\n            CLOSE\n        ],\n\n        open: function(target) {\n            this.popup.show(target);\n\n            if (!this.initialOpen) {\n                this.pane.navigate(\"\");\n                this.popup.popup._position();\n                this.initialOpen = true;\n            } else {\n                this.pane.view()._invokeNgController();\n            }\n        },\n\n        openFor: function(target) {\n            this.open(target);\n            this.trigger(OPEN, { target: this.popup.target() });\n        },\n\n        close: function() {\n            this.popup.hide();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.pane.destroy();\n            this.popup.destroy();\n\n            kendo.destroy(this.element);\n        }\n    });\n\n    ui.plugin(Popup);\n    ui.plugin(PopOver);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Popup = kendo.ui.Popup,\n        SHIM = '<div class=\"km-shim\"/>',\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        Widget = ui.Widget;\n\n    var Shim = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                app = kendo.mobile.application,\n                os = kendo.support.mobileOS,\n                osname = app ? app.os.name : (os ? os.name : \"ios\"),\n                ioswp = osname === \"ios\" || osname === \"wp\" || (app ? app.os.skin : false),\n                bb = osname === \"blackberry\",\n                align = options.align || (ioswp ?  \"bottom center\" : bb ? \"center right\" : \"center center\"),\n                position = options.position || (ioswp ? \"bottom center\" : bb ? \"center right\" : \"center center\"),\n                effect = options.effect || (ioswp ? \"slideIn:up\" : bb ? \"slideIn:left\" : \"fade:in\"),\n                shim = $(SHIM).handler(that).hide();\n\n            Widget.fn.init.call(that, element, options);\n\n            that.shim = shim;\n            element = that.element;\n            options = that.options;\n\n            if (options.className) {\n                that.shim.addClass(options.className);\n            }\n\n            if (!options.modal) {\n                that.shim.on(\"up\", \"_hide\");\n            }\n\n            (app ? app.element : $(document.body)).append(shim);\n\n            that.popup = new Popup(that.element, {\n                anchor: shim,\n                modal: true,\n                appendTo: shim,\n                origin: align,\n                position: position,\n                animation: {\n                    open: {\n                        effects: effect,\n                        duration: options.duration\n                    },\n                    close: {\n                        duration: options.duration\n                    }\n                },\n\n                close: function(e) {\n                    var prevented = false;\n\n                    if (!that._apiCall) {\n                        prevented = that.trigger(HIDE);\n                    }\n\n                    if (prevented) {\n                        e.preventDefault();\n                    }\n\n                    that._apiCall = false;\n                },\n\n                deactivate: function() { // Deactivate event can't be prevented.\n                    shim.hide();\n                },\n\n                open: function() {\n                    shim.show();\n                }\n            });\n\n            kendo.notify(that);\n        },\n\n        events: [ HIDE ],\n\n        options: {\n            name: \"Shim\",\n            modal: false,\n            align: undefined,\n            position: undefined,\n            effect: undefined,\n            duration: 200\n        },\n\n        show: function() {\n            this.popup.open();\n        },\n\n        hide: function() {\n            this._apiCall = true;\n            this.popup.close();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.shim.kendoDestroy();\n            this.popup.destroy();\n            this.shim.remove();\n        },\n\n        _hide: function(e) {\n            if (!e || !$.contains(this.shim.children().children(\".k-popup\")[0], e.target)) {\n                this.popup.close();\n            }\n        }\n    });\n\n    ui.plugin(Shim);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        support = kendo.support,\n        ui = kendo.mobile.ui,\n        Shim = ui.Shim,\n        Popup = ui.Popup,\n        Widget = ui.Widget,\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        COMMAND = \"command\",\n        BUTTONS = \"li>a\",\n        CONTEXT_DATA = \"actionsheetContext\",\n        WRAP = '<div class=\"km-actionsheet-wrapper\" />',\n        cancelTemplate = kendo.template('<li class=\"km-actionsheet-cancel\"><a href=\"\\\\#\">#:cancel#</a></li>');\n\n    var ActionSheet = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                ShimClass,\n                tablet,\n                type,\n                os = support.mobileOS;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n            type = options.type;\n            element = that.element;\n\n            if (type === \"auto\") {\n                tablet = os && os.tablet;\n            } else {\n                tablet = type === \"tablet\";\n            }\n\n            ShimClass = tablet ? Popup : Shim;\n\n            if (options.cancelTemplate) {\n                cancelTemplate = kendo.template(options.cancelTemplate);\n            }\n\n            element\n                .addClass(\"km-actionsheet\")\n                .append(cancelTemplate({cancel: that.options.cancel}))\n                .wrap(WRAP)\n                .on(\"up\", BUTTONS, \"_click\")\n                .on(\"click\", BUTTONS, kendo.preventDefault);\n\n            that.view().bind(\"destroy\", function() {\n                that.destroy();\n            });\n\n            that.wrapper = element.parent().addClass(type ? \" km-actionsheet-\" + type : \"\");\n\n            that.shim = new ShimClass(that.wrapper, $.extend({modal: os.ios && os.majorVersion < 7, className: \"km-actionsheet-root\"}, that.options.popup) );\n\n            that._closeProxy = $.proxy(that, \"_close\");\n            that.shim.bind(\"hide\", that._closeProxy);\n\n            if (tablet) {\n                kendo.onResize(that._closeProxy);\n            }\n\n            kendo.notify(that, ui);\n        },\n\n        events: [\n            OPEN,\n            CLOSE,\n            COMMAND\n        ],\n\n        options: {\n            name: \"ActionSheet\",\n            cancel: \"Cancel\",\n            type: \"auto\",\n            popup: { height: \"auto\" }\n        },\n\n        open: function(target, context) {\n            var that = this;\n            that.target = $(target);\n            that.context = context;\n            that.shim.show(target);\n        },\n\n        close: function() {\n            this.context = this.target = null;\n            this.shim.hide();\n        },\n\n        openFor: function(target) {\n            var that = this,\n                context = target.data(CONTEXT_DATA);\n\n            that.open(target, context);\n            that.trigger(OPEN, { target: target, context: context });\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            kendo.unbindResize(this._closeProxy);\n            this.shim.destroy();\n        },\n\n        _click: function(e) {\n            if (e.isDefaultPrevented()) {\n                return;\n            }\n\n            var currentTarget = $(e.currentTarget);\n            var action = currentTarget.data(\"action\");\n\n            if (action) {\n                var actionData = {\n                    target: this.target,\n                    context: this.context\n                },\n                $angular = this.options.$angular;\n\n                if ($angular) {\n                    this.element.injector().get(\"$parse\")(action)($angular[0])(actionData);\n                } else {\n                    kendo.getter(action)(window)(actionData);\n                }\n            }\n\n            this.trigger(COMMAND, { target: this.target, context: this.context, currentTarget: currentTarget });\n\n            e.preventDefault();\n            this._close();\n        },\n\n        _close: function(e) {\n            if (!this.trigger(CLOSE)) {\n                this.close();\n            } else {\n                e.preventDefault();\n            }\n        }\n    });\n\n    ui.plugin(ActionSheet);\n})(window.kendo.jQuery);\n\n\n\n\n\n/* jshint eqnull: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        DataSource = kendo.data.DataSource,\n        Groupable = ui.Groupable,\n        tbodySupportsInnerHtml = kendo.support.tbodyInnerHtml,\n        activeElement = kendo._activeElement,\n        Widget = ui.Widget,\n        keys = kendo.keys,\n        isPlainObject = $.isPlainObject,\n        extend = $.extend,\n        map = $.map,\n        grep = $.grep,\n        isArray = $.isArray,\n        inArray = $.inArray,\n        push = Array.prototype.push,\n        proxy = $.proxy,\n        isFunction = kendo.isFunction,\n        isEmptyObject = $.isEmptyObject,\n        math = Math,\n        PROGRESS = \"progress\",\n        ERROR = \"error\",\n        DATA_CELL = \":not(.k-group-cell):not(.k-hierarchy-cell):visible\",\n        SELECTION_CELL_SELECTOR = \"tbody>tr:not(.k-grouping-row):not(.k-detail-row):not(.k-group-footer) > td:not(.k-group-cell):not(.k-hierarchy-cell)\",\n        NAVROW = \"tr:not(.k-footer-template):visible\",\n        NAVCELL = \":not(.k-group-cell):not(.k-hierarchy-cell):visible\",\n        FIRSTNAVITEM = NAVROW + \":first>\" + NAVCELL + \":first\",\n        HEADERCELLS = \"th.k-header:not(.k-group-cell):not(.k-hierarchy-cell)\",\n        NS = \".kendoGrid\",\n        EDIT = \"edit\",\n        SAVE = \"save\",\n        REMOVE = \"remove\",\n        DETAILINIT = \"detailInit\",\n        FILTERMENUINIT = \"filterMenuInit\",\n        COLUMNMENUINIT = \"columnMenuInit\",\n        CHANGE = \"change\",\n        COLUMNHIDE = \"columnHide\",\n        COLUMNSHOW = \"columnShow\",\n        SAVECHANGES = \"saveChanges\",\n        DATABOUND = \"dataBound\",\n        DETAILEXPAND = \"detailExpand\",\n        DETAILCOLLAPSE = \"detailCollapse\",\n        FOCUSED = \"k-state-focused\",\n        SELECTED = \"k-state-selected\",\n        COLUMNRESIZE = \"columnResize\",\n        COLUMNREORDER = \"columnReorder\",\n        COLUMNLOCK = \"columnLock\",\n        COLUMNUNLOCK = \"columnUnlock\",\n        CLICK = \"click\",\n        HEIGHT = \"height\",\n        TABINDEX = \"tabIndex\",\n        FUNCTION = \"function\",\n        STRING = \"string\",\n        DELETECONFIRM = \"Are you sure you want to delete this record?\",\n        CONFIRMDELETE = \"Delete\",\n        CANCELDELETE = \"Cancel\",\n        formatRegExp = /(\\}|\\#)/ig,\n        templateHashRegExp = /#/ig,\n        whitespaceRegExp = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n        nonDataCellsRegExp = new RegExp(\"(^|\" + whitespaceRegExp + \")\" + \"(k-group-cell|k-hierarchy-cell)\" + \"(\" + whitespaceRegExp + \"|$)\"),\n        filterRowRegExp = new RegExp(\"(^|\" + whitespaceRegExp + \")\" + \"(k-filter-row)\" + \"(\" + whitespaceRegExp + \"|$)\"),\n        COMMANDBUTTONTMPL = '<a class=\"k-button k-button-icontext #=className#\" #=attr# href=\"\\\\#\"><span class=\"#=iconClass# #=imageClass#\"></span>#=text#</a>',\n        isRtl = false,\n        browser = kendo.support.browser,\n        isIE7 = browser.msie && browser.version == 7,\n        isIE8 = browser.msie && browser.version == 8;\n\n    var VirtualScrollable =  Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n            that._refreshHandler = proxy(that.refresh, that);\n            that.setDataSource(options.dataSource);\n            that.wrap();\n        },\n\n        setDataSource: function(dataSource) {\n            var that = this;\n            if (that.dataSource) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler);\n            }\n            that.dataSource = dataSource;\n            that.dataSource.bind(CHANGE, that._refreshHandler);\n        },\n\n        options: {\n            name: \"VirtualScrollable\",\n            itemHeight: $.noop,\n            prefetch: true\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.dataSource.unbind(CHANGE, that._refreshHandler);\n            that.wrapper.add(that.verticalScrollbar).off(NS);\n\n            if (that.drag) {\n                that.drag.destroy();\n                that.drag = null;\n            }\n            that.wrapper = that.element = that.verticalScrollbar = null;\n            that._refreshHandler = null;\n        },\n\n        wrap: function() {\n            var that = this,\n                // workaround for IE issue where scroll is not raised if container is same width as the scrollbar\n                scrollbar = kendo.support.scrollbar() + 1,\n                element = that.element,\n                wrapper;\n\n            element.css( {\n                width: \"auto\",\n                overflow: \"hidden\"\n            }).css((isRtl ? \"padding-left\" : \"padding-right\"), scrollbar);\n            that.content = element.children().first();\n            wrapper = that.wrapper = that.content.wrap('<div class=\"k-virtual-scrollable-wrap\"/>')\n                                .parent()\n                                .bind(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, proxy(that._wheelScroll, that));\n\n            if (kendo.support.kineticScrollNeeded) {\n                that.drag = new kendo.UserEvents(that.wrapper, {\n                    global: true,\n                    start: function(e) {\n                        e.sender.capture();\n                    },\n                    move: function(e) {\n                        that.verticalScrollbar.scrollTop(that.verticalScrollbar.scrollTop() - e.y.delta);\n                        wrapper.scrollLeft(wrapper.scrollLeft() - e.x.delta);\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            that.verticalScrollbar = $('<div class=\"k-scrollbar k-scrollbar-vertical\" />')\n                                        .css({\n                                            width: scrollbar\n                                        }).appendTo(element)\n                                        .bind(\"scroll\" + NS, proxy(that._scroll, that));\n        },\n\n        _wheelScroll: function (e) {\n            if (e.ctrlKey) {\n                return;\n            }\n\n            var scrollTop = this.verticalScrollbar.scrollTop(),\n                delta = kendo.wheelDeltaY(e);\n\n            if (delta) {\n                e.preventDefault();\n                //In Firefox DOMMouseScroll event cannot be canceled\n                $(e.currentTarget).one(\"wheel\" + NS, false);\n                this.verticalScrollbar.scrollTop(scrollTop + (-delta));\n            }\n        },\n\n        _scroll: function(e) {\n            var that = this,\n                delayLoading = !that.options.prefetch,\n                scrollTop = e.currentTarget.scrollTop,\n                dataSource = that.dataSource,\n                rowHeight = that.itemHeight,\n                skip = dataSource.skip() || 0,\n                start = that._rangeStart || skip,\n                height = that.element.innerHeight(),\n                isScrollingUp = !!(that._scrollbarTop && that._scrollbarTop > scrollTop),\n                firstItemIndex = math.max(math.floor(scrollTop / rowHeight), 0),\n                lastItemIndex = math.max(firstItemIndex + math.floor(height / rowHeight), 0);\n\n            that._scrollTop = scrollTop - (start * rowHeight);\n            that._scrollbarTop = scrollTop;\n\n            that._scrolling = delayLoading;\n\n            if (!that._fetch(firstItemIndex, lastItemIndex, isScrollingUp)) {\n                that.wrapper[0].scrollTop = that._scrollTop;\n            }\n\n            if (delayLoading) {\n                if (that._scrollingTimeout) {\n                    clearTimeout(that._scrollingTimeout);\n                }\n\n                that._scrollingTimeout = setTimeout(function() {\n                    that._scrolling = false;\n                    that._page(that._rangeStart, that.dataSource.take());\n                }, 100);\n            }\n        },\n\n        _fetch: function(firstItemIndex, lastItemIndex, scrollingUp) {\n            var that = this,\n                dataSource = that.dataSource,\n                itemHeight = that.itemHeight,\n                take = dataSource.take(),\n                rangeStart = that._rangeStart || dataSource.skip() || 0,\n                currentSkip = math.floor(firstItemIndex / take) * take,\n                fetching = false,\n                prefetchAt = 0.33;\n\n            if (firstItemIndex < rangeStart) {\n\n                fetching = true;\n                rangeStart = math.max(0, lastItemIndex - take);\n                that._scrollTop = (firstItemIndex - rangeStart) * itemHeight;\n                that._page(rangeStart, take);\n\n            } else if (lastItemIndex >= rangeStart + take && !scrollingUp) {\n\n                fetching = true;\n                rangeStart = firstItemIndex;\n                that._scrollTop = itemHeight;\n                that._page(rangeStart, take);\n\n            } else if (!that._fetching && that.options.prefetch) {\n\n                if (firstItemIndex < (currentSkip + take) - take * prefetchAt && firstItemIndex > take) {\n                    dataSource.prefetch(currentSkip - take, take);\n                }\n                if (lastItemIndex > currentSkip + take * prefetchAt) {\n                    dataSource.prefetch(currentSkip + take, take);\n                }\n\n            }\n            return fetching;\n        },\n\n        _page: function(skip, take) {\n            var that = this,\n                delayLoading = !that.options.prefetch,\n                dataSource = that.dataSource;\n\n            clearTimeout(that._timeout);\n            that._fetching = true;\n            that._rangeStart = skip;\n\n            if (dataSource.inRange(skip, take)) {\n                dataSource.range(skip, take);\n            } else {\n                if (!delayLoading) {\n                    kendo.ui.progress(that.wrapper.parent(), true);\n                }\n\n                that._timeout = setTimeout(function() {\n                    if (!that._scrolling) {\n                        if (delayLoading) {\n                            kendo.ui.progress(that.wrapper.parent(), true);\n                        }\n                        dataSource.range(skip, take);\n                    }\n                }, 100);\n            }\n        },\n\n        repaintScrollbar: function () {\n            var that = this,\n                html = \"\",\n                maxHeight = 250000,\n                dataSource = that.dataSource,\n                scrollbar = !kendo.support.kineticScrollNeeded ? kendo.support.scrollbar() : 0,\n                wrapperElement = that.wrapper[0],\n                totalHeight,\n                idx,\n                itemHeight;\n\n            itemHeight = that.itemHeight = that.options.itemHeight() || 0;\n\n            var addScrollBarHeight = (wrapperElement.scrollWidth > wrapperElement.offsetWidth) ? scrollbar : 0;\n\n            totalHeight = dataSource.total() * itemHeight + addScrollBarHeight;\n\n            for (idx = 0; idx < math.floor(totalHeight / maxHeight) ; idx++) {\n                html += '<div style=\"width:1px;height:' + maxHeight + 'px\"></div>';\n            }\n\n            if (totalHeight % maxHeight) {\n                html += '<div style=\"width:1px;height:' + (totalHeight % maxHeight) + 'px\"></div>';\n            }\n\n            that.verticalScrollbar.html(html);\n            wrapperElement.scrollTop = that._scrollTop;\n        },\n\n        refresh: function() {\n            var that = this,\n                dataSource = that.dataSource,\n                rangeStart = that._rangeStart;\n\n            kendo.ui.progress(that.wrapper.parent(), false);\n            clearTimeout(that._timeout);\n\n            that.repaintScrollbar();\n\n            if (that.drag) {\n                that.drag.cancel();\n            }\n\n            if (rangeStart && !that._fetching) { // we are rebound from outside local range should be reset\n                that._rangeStart = dataSource.skip();\n\n                if (dataSource.page() === 1) {// reset the scrollbar position if datasource is filtered\n                    that.verticalScrollbar[0].scrollTop = 0;\n                }\n            }\n            that._fetching = false;\n        }\n    });\n\n    function groupCells(count) {\n        return new Array(count + 1).join('<td class=\"k-group-cell\">&nbsp;</td>');\n    }\n\n    function stringifyAttributes(attributes) {\n        var attr,\n            result = \" \";\n\n        if (attributes) {\n            if (typeof attributes === STRING) {\n                return attributes;\n            }\n\n            for (attr in attributes) {\n                result += attr + '=\"' + attributes[attr] + '\"';\n            }\n        }\n        return result;\n    }\n\n    var defaultCommands = {\n        create: {\n            text: \"Add new record\",\n            imageClass: \"k-add\",\n            className: \"k-grid-add\",\n            iconClass: \"k-icon\"\n        },\n        cancel: {\n            text: \"Cancel changes\",\n            imageClass: \"k-cancel\",\n            className: \"k-grid-cancel-changes\",\n            iconClass: \"k-icon\"\n        },\n        save: {\n            text: \"Save changes\",\n            imageClass: \"k-update\",\n            className: \"k-grid-save-changes\",\n            iconClass: \"k-icon\"\n        },\n        destroy: {\n            text: \"Delete\",\n            imageClass: \"k-delete\",\n            className: \"k-grid-delete\",\n            iconClass: \"k-icon\"\n        },\n        edit: {\n            text: \"Edit\",\n            imageClass: \"k-edit\",\n            className: \"k-grid-edit\",\n            iconClass: \"k-icon\"\n        },\n        update: {\n            text: \"Update\",\n            imageClass: \"k-update\",\n            className: \"k-primary k-grid-update\",\n            iconClass: \"k-icon\"\n        },\n        canceledit: {\n            text: \"Cancel\",\n            imageClass: \"k-cancel\",\n            className: \"k-grid-cancel\",\n            iconClass: \"k-icon\"\n        },\n        excel: {\n            text: \"Export to Excel\",\n            imageClass: \"k-i-excel\",\n            className: \"k-grid-excel\",\n            iconClass: \"k-icon\"\n        },\n        pdf: {\n            text: \"Export to PDF\",\n            imageClass: \"k-i-pdf\",\n            className: \"k-grid-pdf\",\n            iconClass: \"k-icon\"\n        }\n    };\n\n    function heightAboveHeader(context) {\n        var top = 0;\n        $('> .k-grouping-header, > .k-grid-toolbar', context).each(function () {\n            top += this.offsetHeight;\n        });\n        return top;\n    }\n\n    function cursor(context, value) {\n        $('th, th .k-grid-filter, th .k-link', context)\n            .add(document.body)\n            .css('cursor', value);\n    }\n\n    function buildEmptyAggregatesObject(aggregates) {\n            var idx,\n                length,\n                aggregate = {},\n                fieldsMap = {};\n\n            if (!isEmptyObject(aggregates)) {\n                if (!isArray(aggregates)){\n                    aggregates = [aggregates];\n                }\n\n                for (idx = 0, length = aggregates.length; idx < length; idx++) {\n                    aggregate[aggregates[idx].aggregate] = 0;\n                    fieldsMap[aggregates[idx].field] = aggregate;\n                }\n            }\n\n            return fieldsMap;\n    }\n\n    function reorder(selector, source, dest, before, count) {\n        var sourceIndex = source;\n        source = $();\n        count = count || 1;\n        for (var idx = 0; idx < count; idx++) {\n            source = source.add(selector.eq(sourceIndex + idx));\n        }\n\n        if (typeof dest == \"number\") {\n            source[before ? \"insertBefore\" : \"insertAfter\"](selector.eq(dest));\n        } else {\n            source.appendTo(dest);\n        }\n    }\n\n    function elements(lockedContent, content, filter) {\n        return $(lockedContent).add(content).find(filter);\n    }\n\n    function attachCustomCommandEvent(context, container, commands) {\n        var idx,\n            length,\n            command,\n            commandName;\n\n        commands = !isArray(commands) ? [commands] : commands;\n\n        for (idx = 0, length = commands.length; idx < length; idx++) {\n            command = commands[idx];\n\n            if (isPlainObject(command) && command.click) {\n                commandName = command.name || command.text;\n                container.on(CLICK + NS, \"a.k-grid-\" + (commandName || \"\").replace(/\\s/g, \"\"), { commandName: commandName }, proxy(command.click, context));\n            }\n        }\n    }\n\n    function normalizeColumns(columns, encoded, hide) {\n        return map(columns, function(column) {\n            column = typeof column === STRING ? { field: column } : column;\n\n            var hidden;\n\n            if (!isVisible(column) || hide) {\n                column.attributes = addHiddenStyle(column.attributes);\n                column.footerAttributes = addHiddenStyle(column.footerAttributes);\n                column.headerAttributes = addHiddenStyle(column.headerAttributes);\n                hidden = true;\n            }\n\n            if (column.columns) {\n                column.columns = normalizeColumns(column.columns, encoded, hidden);\n            }\n\n            return extend({ encoded: encoded, hidden: hidden }, column);\n        });\n    }\n\n    function columnParent(column, columns) {\n        var parents = [];\n        columnParents(column, columns, parents);\n        return parents[parents.length - 1];\n    }\n\n    function columnParents(column, columns, parents) {\n        parents = parents || [];\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (column === columns[idx]) {\n                return true;\n            } else if (columns[idx].columns) {\n                var inserted = parents.length;\n                parents.push(columns[idx]);\n                if (!columnParents(column, columns[idx].columns, parents)) {\n                    parents.splice(inserted, parents.length - inserted);\n                } else {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    function setColumnVisibility(column, visible) {\n        var method = visible ? removeHiddenStyle : addHiddenStyle;\n        column.hidden = !visible;\n        column.attributes = method(column.attributes);\n        column.footerAttributes = method(column.footerAttributes);\n        column.headerAttributes = method(column.headerAttributes);\n    }\n\n    function isCellVisible() {\n        return this.style.display !== \"none\";\n    }\n\n    function isVisible(column) {\n        return visibleColumns([column]).length > 0;\n    }\n\n    function visibleColumns(columns) {\n        return grep(columns, function(column) {\n            var result = !column.hidden;\n            if (result && column.columns) {\n                result = visibleColumns(column.columns).length > 0;\n            }\n            return result;\n        });\n    }\n\n    function toJQuery(elements) {\n        return $(elements).map(function() { return this.toArray(); });\n    }\n\n    function updateCellRowSpan(cell, columns, sourceLockedColumnsCount) {\n        var lockedColumnDepth = depth(lockedColumns(columns));\n        var nonLockedColumnDepth = depth(nonLockedColumns(columns));\n\n        var rowSpan = cell.rowSpan;\n        if (sourceLockedColumnsCount) {\n            if (lockedColumnDepth > nonLockedColumnDepth) {\n                cell.rowSpan = (rowSpan - (lockedColumnDepth - nonLockedColumnDepth)) || 1;\n            } else {\n                cell.rowSpan = rowSpan + (nonLockedColumnDepth - lockedColumnDepth);\n            }\n        } else {\n            if (lockedColumnDepth > nonLockedColumnDepth) {\n                cell.rowSpan = rowSpan + (lockedColumnDepth - nonLockedColumnDepth);\n            } else {\n                cell.rowSpan = (rowSpan - (nonLockedColumnDepth - lockedColumnDepth)) || 1;\n            }\n        }\n    }\n\n    function moveCellsBetweenContainers(sources, target, leafs, columns, container, destination, groups) {\n        var sourcesDepth = depth(sources);\n        var targetDepth = depth([target]);\n\n        if (sourcesDepth > targetDepth) {\n            var groupCells = new Array(groups + 1).join('<th class=\"k-group-cell k-header\">&nbsp;</th>');\n            var rows = destination.children(\":not(.k-filter-row)\");\n            $(new Array((sourcesDepth - targetDepth) + 1).join(\"<tr>\" + groupCells + \"</tr>\")).insertAfter(rows.last());\n        }\n\n        addRowSpanValue(destination, sourcesDepth - targetDepth);\n\n        moveCells(leafs, columns, container, destination);\n    }\n\n    function updateCellIndex(thead, columns, offset) {\n        offset = offset || 0;\n\n        var position;\n        var cell;\n        var allColumns = columns;\n        columns = leafColumns(columns);\n\n        var cells = {};\n        var rows = thead.find(\">tr:not(.k-filter-row)\");\n\n        var filter = function() {\n            var el = $(this);\n            return !el.hasClass(\"k-group-cell\") && !el.hasClass(\"k-hierarchy-cell\");\n        };\n\n        for (var idx = 0, length = columns.length; idx < length; idx++) {\n            position = columnPosition(columns[idx], allColumns);\n\n            if (!cells[position.row]) {\n                cells[position.row] = rows.eq(position.row)\n                    .find(\".k-header\")\n                    .filter(filter);\n            }\n\n            cell = cells[position.row].eq(position.cell);\n            cell.attr(kendo.attr(\"index\"), offset + idx);\n        }\n\n\n        return columns.length;\n    }\n\n    function depth(columns) {\n        var result = 1;\n        var max = 0;\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (columns[idx].columns) {\n                var temp = depth(columns[idx].columns);\n                if (temp > max) {\n                    max = temp;\n                }\n            }\n        }\n        return result + max;\n    }\n\n    function moveCells(leafs, columns, container, destination) {\n        var sourcePosition = columnVisiblePosition(leafs[0], columns);\n\n        var ths = container.find(\">tr:not(.k-filter-row):eq(\" + sourcePosition.row + \")>th.k-header\");\n\n        var t = $();\n        var sourceIndex = sourcePosition.cell;\n        var idx;\n\n        for (idx = 0; idx < leafs.length; idx++) {\n            t = t.add(ths.eq(sourceIndex + idx));\n        }\n\n        destination.find(\">tr:not(.k-filter-row)\").eq(sourcePosition.row).append(t);\n\n        var children = [];\n        for (idx = 0; idx < leafs.length; idx++) {\n            if (leafs[idx].columns) {\n                children = children.concat(leafs[idx].columns);\n            }\n        }\n\n        if (children.length) {\n            moveCells(children, columns, container, destination);\n        }\n    }\n\n    function columnPosition(column, columns, row, cellCounts) {\n        var result;\n        var idx;\n\n        row = row || 0;\n        cellCounts = cellCounts || {};\n        cellCounts[row] = cellCounts[row] || 0;\n\n        for (idx = 0; idx < columns.length; idx++) {\n           if (columns[idx] == column) {\n                result = { cell: cellCounts[row], row: row };\n                break;\n           } else if (columns[idx].columns) {\n               result = columnPosition(column, columns[idx].columns, row + 1, cellCounts);\n               if (result) {\n                    break;\n               }\n           }\n\n           cellCounts[row]++;\n        }\n        return result;\n    }\n\n    function findReorderTarget(columns, target, source, before) {\n        if (target.columns) {\n            target = target.columns;\n            return target[before ? 0 : target.length - 1];\n        } else {\n            var parent = columnParent(target, columns);\n            var parentColumns;\n\n            if (parent) {\n                parentColumns = parent.columns;\n            } else {\n                parentColumns = columns;\n            }\n\n            var index = inArray(target, parentColumns);\n            if (index === 0 && before) {\n                index++;\n            } else if (index == parentColumns.length - 1 && !before) {\n                index--;\n            } else if (index > 0 || (index === 0 && !before)) {\n                index += before ? -1 : 1;\n            }\n\n            target = parentColumns[Math.max(index, 0)];\n            if (target && target != source && target.columns) {\n                return findReorderTarget(columns, target, source, before);\n            }\n        }\n        return null;\n    }\n\n\n    function columnVisiblePosition(column, columns, row, cellCounts) {\n        var result;\n        var idx;\n\n        row = row || 0;\n        cellCounts = cellCounts || {};\n        cellCounts[row] = cellCounts[row] || 0;\n\n        for (idx = 0; idx < columns.length; idx++) {\n           if (columns[idx] == column) {\n                result = { cell: cellCounts[row], row: row };\n                break;\n           } else if (columns[idx].columns) {\n               result = columnVisiblePosition(column, columns[idx].columns, row + 1, cellCounts);\n               if (result) {\n                    break;\n               }\n           }\n\n           if (!columns[idx].hidden) {\n               cellCounts[row]++;\n           }\n        }\n        return result;\n    }\n\n    function flatColumnsInDomOrder(columns) {\n        var result = flatColumns(lockedColumns(columns));\n        return result.concat(flatColumns(nonLockedColumns(columns)));\n    }\n\n    function flatColumns(columns) {\n        var result = [];\n        var children = [];\n        for (var idx = 0; idx < columns.length; idx++) {\n            result.push(columns[idx]);\n            if (columns[idx].columns) {\n                children = children.concat(columns[idx].columns);\n            }\n\n        }\n        if (children.length) {\n            result = result.concat(flatColumns(children));\n        }\n        return result;\n    }\n\n    function hiddenLeafColumnsCount(columns) {\n        var counter = 0;\n        var column;\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            column = columns[idx];\n\n            if (column.columns) {\n                counter += hiddenLeafColumnsCount(column.columns);\n            } else if (column.hidden) {\n                counter++;\n            }\n        }\n        return counter;\n    }\n\n    function columnsWidth(cols) {\n        var colWidth, width = 0;\n\n        for (var idx = 0, length = cols.length; idx < length; idx++) {\n            colWidth = cols[idx].style.width;\n            if (colWidth && colWidth.indexOf(\"%\") == -1) {\n                width += parseInt(colWidth, 10);\n            }\n        }\n\n        return width;\n    }\n\n    function removeRowSpanValue(container, count) {\n        var cells = container.find(\"tr:not(.k-filter-row) th:not(.k-group-cell,.k-hierarchy-cell)\");\n\n        var rowSpan;\n        for (var idx = 0; idx < cells.length; idx++) {\n            rowSpan = cells[idx].rowSpan;\n            if (rowSpan > 1) {\n                cells[idx].rowSpan = (rowSpan - count) || 1;\n            }\n        }\n    }\n\n    function addRowSpanValue(container, count) {\n        var cells = container.find(\"tr:not(.k-filter-row) th:not(.k-group-cell,.k-hierarchy-cell)\");\n\n        for (var idx = 0; idx < cells.length; idx++) {\n            cells[idx].rowSpan += count;\n        }\n    }\n\n    function removeEmptyRows(container) {\n        var rows = container.find(\"tr:not(.k-filter-row)\");\n\n        var emptyRowsCount = rows.filter(function() {\n            return !$(this).children().length;\n        }).remove().length;\n\n        var cells = rows.find(\"th:not(.k-group-cell,.k-hierarchy-cell)\");\n\n        for (var idx = 0; idx < cells.length; idx++) {\n            if (cells[idx].rowSpan > 1) {\n                cells[idx].rowSpan -= emptyRowsCount;\n            }\n        }\n        return rows.length - emptyRowsCount;\n    }\n\n    function mapColumnToCellRows(columns, cells, rows, rowIndex, offset) {\n        var idx, row, length, children = [];\n\n        for (idx = 0, length = columns.length; idx < length; idx++) {\n            row = rows[rowIndex] || [];\n            row.push(cells.eq(offset + idx));\n            rows[rowIndex] = row;\n\n            if (columns[idx].columns) {\n                children = children.concat(columns[idx].columns);\n            }\n        }\n\n        if (children.length) {\n            mapColumnToCellRows(children, cells, rows, rowIndex + 1, offset + columns.length);\n        }\n    }\n\n    function lockedColumns(columns) {\n        return grep(columns, function(column) {\n            return column.locked;\n        });\n    }\n\n    function nonLockedColumns(columns) {\n        return grep(columns, function(column) {\n            return !column.locked;\n        });\n    }\n\n    function visibleNonLockedColumns(columns) {\n        return grep(columns, function(column) {\n            return !column.locked && isVisible(column);\n        });\n    }\n\n    function visibleLockedColumns(columns) {\n        return grep(columns, function(column) {\n            return column.locked && isVisible(column);\n        });\n    }\n\n    function visibleLeafColumns(columns) {\n        var result = [];\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (columns[idx].hidden) {\n                continue;\n            }\n\n            if (columns[idx].columns) {\n                result = result.concat(visibleLeafColumns(columns[idx].columns));\n            } else {\n                result.push(columns[idx]);\n            }\n        }\n\n        return result;\n    }\n\n    function leafColumns(columns) {\n        var result = [];\n\n        for (var idx = 0; idx < columns.length; idx++) {\n            if (!columns[idx].columns) {\n                result.push(columns[idx]);\n                continue;\n            }\n            result = result.concat(leafColumns(columns[idx].columns));\n        }\n\n        return result;\n    }\n\n    function leafDataCells(container) {\n        var rows = container.find(\">tr:not(.k-filter-row)\");\n\n        var filter = function() {\n            var el = $(this);\n            return !el.hasClass(\"k-group-cell\") && !el.hasClass(\"k-hierarchy-cell\");\n        };\n\n        var cells = $();\n        if (rows.length > 1) {\n            cells = rows.find(\"th\")\n                .filter(filter)\n                .filter(function() { return this.rowSpan > 1; });\n        }\n\n        cells = cells.add(rows.last().find(\"th\").filter(filter));\n\n        var indexAttr = kendo.attr(\"index\");\n        cells.sort(function(a, b) {\n            a = $(a);\n            b = $(b);\n\n            var indexA = a.attr(indexAttr);\n            var indexB = b.attr(indexAttr);\n\n            if (indexA === undefined) {\n                indexA = $(a).index();\n            }\n            if (indexB === undefined) {\n                indexB = $(b).index();\n            }\n\n            indexA = parseInt(indexA, 10);\n            indexB = parseInt(indexB, 10);\n            return indexA > indexB ? 1 : (indexA < indexB ? -1 : 0);\n        });\n\n        return cells;\n    }\n\n    function parentColumnsCells(cell) {\n        var container = cell.closest(\"table\");\n        var result = $().add(cell);\n\n        var row = cell.closest(\"tr\");\n        var headerRows = container.find(\"tr:not(.k-filter-row)\");\n        var level = headerRows.index(row);\n        if (level > 0) {\n            var parent = headerRows.eq(level - 1);\n            var parentCellsWithChildren = parent.find(\"th:not(.k-group-cell,.k-hierarchy-cell)\").filter(function() {\n                return !$(this).attr(\"rowspan\");\n            });\n\n            var offset = 0;\n            var index = row.find(\"th:not(.k-group-cell,.k-hierarchy-cell)\").index(cell);\n\n            var prevCells = cell.prevAll(\":not(.k-group-cell,.k-hierarchy-cell)\").filter(function() {\n                return this.colSpan > 1;\n            });\n\n            for (idx = 0; idx < prevCells.length; idx++) {\n                offset += prevCells[idx].colSpan || 1;\n            }\n\n            index += Math.max(offset - 1, 0);\n\n            offset = 0;\n            for (var idx = 0; idx < parentCellsWithChildren.length; idx++) {\n                var parentCell = parentCellsWithChildren.eq(idx);\n                if (parentCell.attr(\"colSpan\")) {\n                    offset += parentCell[0].colSpan;\n                } else {\n                    offset += 1;\n                }\n                if (index >= idx && index < offset) {\n                    result = parentColumnsCells(parentCell).add(result);\n                    break;\n                }\n            }\n        }\n        return result;\n    }\n\n    function childColumnsCells(cell) {\n        var container = cell.closest(\"table\");\n        var result = $().add(cell);\n\n        var row = cell.closest(\"tr\");\n        var headerRows = container.find(\"tr:not(.k-filter-row)\");\n        var level = headerRows.index(row) + cell[0].rowSpan;\n        var colSpanAttr = kendo.attr(\"colspan\");\n\n        if (level <= headerRows.length - 1) {\n            var child = row.next();\n            var index = row.find(\"th:not(.k-group-cell,.k-hierarchy-cell)\").index(cell);\n            var prevCells = cell.prevAll(\":not(.k-group-cell,.k-hierarchy-cell)\");\n\n            var idx;\n\n            prevCells = prevCells.filter(function() {\n                return !this.rowSpan || this.rowSpan === 1;\n            });\n\n            var offset = 0;\n\n            for (idx = 0; idx < prevCells.length; idx++) {\n                offset += parseInt(prevCells.eq(idx).attr(colSpanAttr), 10) || 1;\n            }\n\n            var cells = child.find(\"th:not(.k-group-cell,.k-hierarchy-cell)\");\n            var colSpan = parseInt(cell.attr(colSpanAttr), 10) || 1;\n\n            idx = 0;\n\n            while (idx < colSpan) {\n                child = cells.eq(idx + offset);\n                result = result.add(childColumnsCells(child));\n                var value = parseInt(child.attr(colSpanAttr), 10);\n                if (value > 1) {\n                    colSpan -= value - 1;\n                }\n                idx++;\n            }\n        }\n\n        return result;\n    }\n\n    function appendContent(tbody, table, html) {\n        var placeholder,\n            tmp = tbody;\n\n        if (tbodySupportsInnerHtml) {\n            tbody[0].innerHTML = html;\n        } else {\n            placeholder = document.createElement(\"div\");\n            placeholder.innerHTML = \"<table><tbody>\" + html + \"</tbody></table>\";\n            tbody = placeholder.firstChild.firstChild;\n            table[0].replaceChild(tbody, tmp[0]);\n            tbody = $(tbody);\n        }\n        return tbody;\n    }\n\n    function addHiddenStyle(attr) {\n        attr = attr || {};\n        var style = attr.style;\n\n        if(!style) {\n            style = \"display:none\";\n        } else {\n            style = style.replace(/((.*)?display)(.*)?:([^;]*)/i, \"$1:none\");\n            if(style === attr.style) {\n                style = style.replace(/(.*)?/i, \"display:none;$1\");\n            }\n        }\n\n        return extend({}, attr, { style: style });\n    }\n\n    function removeHiddenStyle(attr) {\n        attr = attr || {};\n        var style = attr.style;\n\n        if(style) {\n            attr.style = style.replace(/(display\\s*:\\s*none\\s*;?)*/ig, \"\");\n        }\n\n        return attr;\n    }\n\n    function normalizeCols(table, visibleColumns, hasDetails, groups) {\n        var colgroup = table.find(\">colgroup\"),\n            width,\n            cols = map(visibleColumns, function(column) {\n                    width = column.width;\n                    if (width && parseInt(width, 10) !== 0) {\n                        return kendo.format('<col style=\"width:{0}\"/>', typeof width === STRING? width : width + \"px\");\n                    }\n\n                    return \"<col />\";\n                });\n\n        if (hasDetails || colgroup.find(\".k-hierarchy-col\").length) {\n            cols.splice(0, 0, '<col class=\"k-hierarchy-col\" />');\n        }\n\n        if (colgroup.length) {\n            colgroup.remove();\n        }\n\n        colgroup = $(new Array(groups + 1).join('<col class=\"k-group-col\">') + cols.join(\"\"));\n        if (!colgroup.is(\"colgroup\")) {\n            colgroup = $(\"<colgroup/>\").append(colgroup);\n        }\n\n        table.prepend(colgroup);\n\n        // fill gap after column hiding\n        if (browser.msie && browser.version == 8) {\n            table.css(\"display\", \"inline-table\");\n            window.setTimeout(function(){table.css(\"display\", \"\");}, 1);\n        }\n    }\n\n    function normalizeHeaderCells(th, columns) {\n        var lastIndex = 0;\n        var idx , len;\n\n        for (idx = 0, len = columns.length; idx < len; idx ++) {\n            if (columns[idx].locked) {\n                th.eq(idx).insertBefore(th.eq(lastIndex));\n                lastIndex ++;\n            }\n        }\n    }\n\n    function convertToObject(array) {\n        var result = {},\n            item,\n            idx,\n            length;\n\n        for (idx = 0, length = array.length; idx < length; idx++) {\n            item = array[idx];\n            result[item.value] = item.text;\n        }\n\n        return result;\n    }\n\n    function formatGroupValue(value, format, columnValues) {\n        var isForiegnKey = columnValues && columnValues.length && isPlainObject(columnValues[0]) && \"value\" in columnValues[0],\n            groupValue = isForiegnKey ? convertToObject(columnValues)[value] : value;\n\n        groupValue = groupValue != null ? groupValue : \"\";\n\n        return format ? kendo.format(format, groupValue) : groupValue;\n    }\n\n    function setCellVisibility(cells, index, visible) {\n        var pad = 0,\n            state,\n            cell = cells[pad];\n\n        while (cell) {\n            state = visible ? true : cell.style.display !== \"none\";\n\n            if (state && !nonDataCellsRegExp.test(cell.className) && --index < 0) {\n                cell.style.display = visible ? \"\" : \"none\";\n                break;\n            }\n\n            cell = cells[++pad];\n        }\n    }\n\n    function hideColumnCells(rows, columnIndex) {\n        var idx = 0,\n            length = rows.length,\n            cell, row;\n\n        for ( ; idx < length; idx += 1) {\n            row = rows.eq(idx);\n            if (row.is(\".k-grouping-row,.k-detail-row\")) {\n                cell = row.children(\":not(.k-group-cell):first,.k-detail-cell\").last();\n                cell.attr(\"colspan\", parseInt(cell.attr(\"colspan\"), 10) - 1);\n            } else {\n                if (row.hasClass(\"k-grid-edit-row\") && (cell = row.children(\".k-edit-container\")[0])) {\n                    cell = $(cell);\n                    cell.attr(\"colspan\", parseInt(cell.attr(\"colspan\"), 10) - 1);\n                    cell.find(\"col\").eq(columnIndex).remove();\n                    row = cell.find(\"tr:first\");\n                }\n\n                setCellVisibility(row[0].cells, columnIndex, false);\n            }\n        }\n    }\n\n    function groupRows(data) {\n        var result = [];\n        var item;\n\n        for (var idx = 0; idx < data.length; idx++) {\n            item = data[idx];\n            if (!(\"field\" in item && \"value\" in item && \"items\" in item)) {\n                break;\n            }\n\n            result.push(item);\n\n            if (item.hasSubgroups) {\n                result = result.concat(groupRows(item.items));\n            }\n        }\n\n        return result;\n    }\n\n    function showColumnCells(rows, columnIndex) {\n        var idx = 0,\n            length = rows.length,\n            cell, row, columns;\n\n        for ( ; idx < length; idx += 1) {\n            row = rows.eq(idx);\n            if (row.is(\".k-grouping-row,.k-detail-row\")) {\n                cell = row.children(\":not(.k-group-cell):first,.k-detail-cell\").last();\n                cell.attr(\"colspan\", parseInt(cell.attr(\"colspan\"), 10) + 1);\n            } else {\n                if (row.hasClass(\"k-grid-edit-row\") && (cell = row.children(\".k-edit-container\")[0])) {\n                    cell = $(cell);\n                    cell.attr(\"colspan\", parseInt(cell.attr(\"colspan\"), 10) + 1);\n                    normalizeCols(cell.find(\">form>table\"), visibleColumns(columns), false,  0);\n                    row = cell.find(\"tr:first\");\n                }\n\n                setCellVisibility(row[0].cells, columnIndex, true);\n            }\n        }\n    }\n\n    function updateColspan(toAdd, toRemove, num) {\n        num = num || 1;\n\n        var item, idx, length;\n        for (idx = 0, length = toAdd.length; idx < length; idx++) {\n            item = toAdd.eq(idx).children().last();\n            item.attr(\"colspan\", parseInt(item.attr(\"colspan\"), 10) + num);\n\n            item = toRemove.eq(idx).children().last();\n            item.attr(\"colspan\", parseInt(item.attr(\"colspan\"), 10) - num);\n        }\n    }\n\n    function tableWidth(table) {\n        var idx, length, width = 0;\n        var cols = table.find(\">colgroup>col\");\n\n        for (idx = 0, length = cols.length; idx < length; idx += 1) {\n            width += parseInt(cols[idx].style.width, 10);\n        }\n\n        return width;\n    }\n\n    var Grid = kendo.ui.DataBoundWidget.extend({\n        init: function(element, options, events) {\n            var that = this;\n\n            options = isArray(options) ? { dataSource: options } : options;\n\n            Widget.fn.init.call(that, element, options);\n\n            if (events) {\n                that._events = events;\n            }\n\n            isRtl = kendo.support.isRtl(element);\n\n            that._element();\n\n            that._aria();\n\n            that._columns(that.options.columns);\n\n            that._dataSource();\n\n            that._tbody();\n\n            that._pageable();\n\n            that._thead();\n\n            that._groupable();\n\n            that._toolbar();\n\n            that._setContentHeight();\n\n            that._templates();\n\n            that._navigatable();\n\n            that._selectable();\n\n            that._details();\n\n            that._editable();\n\n            that._attachCustomCommandsEvent();\n\n            if (that.options.autoBind) {\n                that.dataSource.fetch();\n            } else {\n                that._footer();\n            }\n\n            if (that.lockedContent) {\n                that.wrapper.addClass(\"k-grid-lockedcolumns\");\n                that._resizeHandler = function()  { that.resize(); };\n                $(window).on(\"resize\" + NS, that._resizeHandler);\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n           CHANGE,\n           \"dataBinding\",\n           \"cancel\",\n           DATABOUND,\n           DETAILEXPAND,\n           DETAILCOLLAPSE,\n           DETAILINIT,\n           FILTERMENUINIT,\n           COLUMNMENUINIT,\n           EDIT,\n           SAVE,\n           REMOVE,\n           SAVECHANGES,\n           COLUMNRESIZE,\n           COLUMNREORDER,\n           COLUMNSHOW,\n           COLUMNHIDE,\n           COLUMNLOCK,\n           COLUMNUNLOCK\n        ],\n\n        setDataSource: function(dataSource) {\n            var that = this;\n            var scrollable = that.options.scrollable;\n\n            that.options.dataSource = dataSource;\n\n            that._dataSource();\n\n            that._pageable();\n\n            that._thead();\n\n            if (scrollable) {\n                if (scrollable.virtual) {\n                    that.content.find(\">.k-virtual-scrollable-wrap\").scrollLeft(0);\n                } else {\n                    that.content.scrollLeft(0);\n                }\n            }\n\n            if (that.options.groupable) {\n                that._groupable();\n            }\n\n            if (that.virtualScrollable) {\n                that.virtualScrollable.setDataSource(that.options.dataSource);\n            }\n\n            if (that.options.navigatable) {\n                that._navigatable();\n            }\n\n            if (that.options.selectable) {\n                that._selectable();\n            }\n\n            if (that.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        options: {\n            name: \"Grid\",\n            columns: [],\n            toolbar: null,\n            autoBind: true,\n            filterable: false,\n            scrollable: true,\n            sortable: false,\n            selectable: false,\n            navigatable: false,\n            pageable: false,\n            editable: false,\n            groupable: false,\n            rowTemplate: \"\",\n            altRowTemplate: \"\",\n            dataSource: {},\n            height: null,\n            resizable: false,\n            reorderable: false,\n            columnMenu: false,\n            detailTemplate: null,\n            columnResizeHandleWidth: 3,\n            mobile: \"\",\n            messages: {\n                editable: {\n                    cancelDelete: CANCELDELETE,\n                    confirmation: DELETECONFIRM,\n                    confirmDelete: CONFIRMDELETE\n                },\n                commands: {\n                    create: defaultCommands.create.text,\n                    cancel: defaultCommands.cancel.text,\n                    save: defaultCommands.save.text,\n                    destroy: defaultCommands.destroy.text,\n                    edit: defaultCommands.edit.text,\n                    update: defaultCommands.update.text,\n                    canceledit: defaultCommands.canceledit.text,\n                    excel: defaultCommands.excel.text,\n                    pdf: defaultCommands.pdf.text\n                }\n            }\n        },\n\n        destroy: function() {\n            var that = this,\n                element;\n\n            that._destroyColumnAttachments();\n\n            Widget.fn.destroy.call(that);\n\n            if (that._resizeHandler) {\n                $(window).off(\"resize\" + NS, that._resizeHandler);\n            }\n\n            if (that.pager && that.pager.element) {\n                that.pager.destroy();\n            }\n\n            that.pager = null;\n\n            if (that.groupable && that.groupable.element) {\n                that.groupable.element.kendoGroupable(\"destroy\");\n            }\n\n            that.groupable = null;\n\n            if (that.options.reorderable) {\n                that.wrapper.data(\"kendoReorderable\").destroy();\n            }\n\n            if (that.selectable && that.selectable.element) {\n                that.selectable.destroy();\n            }\n\n            that.selectable = null;\n\n            if (that.resizable) {\n                that.resizable.destroy();\n\n                if (that._resizeUserEvents) {\n                    if (that._resizeHandleDocumentClickHandler) {\n                        $(document).off(\"click\", that._resizeHandleDocumentClickHandler);\n                    }\n                    that._resizeUserEvents.destroy();\n                    that._resizeUserEvents = null;\n                }\n                that.resizable = null;\n            }\n\n            if (that.virtualScrollable && that.virtualScrollable.element) {\n                that.virtualScrollable.destroy();\n            }\n\n            that.virtualScrollable = null;\n\n            that._destroyEditable();\n\n            if (that.dataSource) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler)\n                           .unbind(PROGRESS, that._progressHandler)\n                           .unbind(ERROR, that._errorHandler);\n\n                that._refreshHandler = that._progressHandler = that._errorHandler = null;\n            }\n\n            element = that.element\n                .add(that.wrapper)\n                .add(that.table)\n                .add(that.thead)\n                .add(that.wrapper.find(\">.k-grid-toolbar\"));\n\n            if (that.content) {\n                element = element\n                        .add(that.content)\n                        .add(that.content.find(\">.k-virtual-scrollable-wrap\"));\n            }\n\n            if (that.lockedHeader) {\n                that._removeLockedContainers();\n            }\n\n            if (that.pane) {\n                that.pane.destroy();\n            }\n\n            if (that._draggableInstance && that._draggableInstance.element) {\n                that._draggableInstance.destroy();\n            }\n\n            that._draggableInstance = null;\n\n            element.off(NS);\n\n            kendo.destroy(that.wrapper);\n\n            that.scrollables =\n            that.thead =\n            that.tbody =\n            that.element =\n            that.table =\n            that.content =\n            that.footer =\n            that.wrapper =\n            that._groupableClickHandler =\n            that._setContentWidthHandler = null;\n        },\n\n        getOptions: function() {\n            var result = extend(true, {}, this.options);\n            result.columns = kendo.deepExtend([], this.columns);\n            var dataSource = this.dataSource;\n\n            result.dataSource = $.extend( true, {}, dataSource.options);\n\n            result.dataSource.page = dataSource.page();\n            result.dataSource.filter = dataSource.filter();\n            result.dataSource.pageSize = dataSource.pageSize();\n            result.dataSource.sort = dataSource.sort();\n            result.dataSource.group = dataSource.group();\n            result.dataSource.aggregate = dataSource.aggregate();\n\n            result.$angular = undefined;\n\n            return result;\n        },\n\n        setOptions: function(options) {\n            var currentOptions = this.getOptions();\n            kendo.deepExtend(currentOptions, options);\n            if (!options.dataSource) {\n                currentOptions.dataSource = this.dataSource;\n            }\n            var wrapper = this.wrapper;\n            var events = this._events;\n            var element = this.element;\n\n            this.destroy();\n            this.options = null;\n            if (wrapper[0] !== element[0]) {\n                wrapper.before(element);\n                wrapper.remove();\n            }\n            element.empty();\n\n            this.init(element, currentOptions, events);\n            this._setEvents(currentOptions);\n\n        },\n\n        items: function() {\n            if (this.lockedContent) {\n                return this._items(this.tbody).add(this._items(this.lockedTable.children(\"tbody\")));\n            } else {\n                return this._items(this.tbody);\n            }\n        },\n\n        _items: function(container) {\n            return container.children().filter(function() {\n                var tr = $(this);\n                return !tr.hasClass(\"k-grouping-row\") && !tr.hasClass(\"k-detail-row\") && !tr.hasClass(\"k-group-footer\");\n            });\n        },\n\n        dataItems: function() {\n            var dataItems = kendo.ui.DataBoundWidget.fn.dataItems.call(this);\n            if (this.lockedContent) {\n                var n = dataItems.length, tmp = new Array(2 * n);\n                for (var i = n; --i >= 0;) {\n                    tmp[i] = tmp[i + n] = dataItems[i];\n                }\n                dataItems = tmp;\n            }\n\n            return dataItems;\n        },\n\n        _destroyColumnAttachments: function() {\n            var that = this;\n\n            that.resizeHandle = null;\n\n            if (!that.thead) {\n                return;\n            }\n\n            this.angular(\"cleanup\", function(){\n                return { elements: that.thead.get() };\n            });\n\n            that.thead.find(\"th\").each(function(){\n                var th = $(this),\n                    filterMenu = th.data(\"kendoFilterMenu\"),\n                    sortable = th.data(\"kendoColumnSorter\"),\n                    columnMenu = th.data(\"kendoColumnMenu\");\n\n                if (filterMenu) {\n                    filterMenu.destroy();\n                }\n\n                if (sortable) {\n                    sortable.destroy();\n                }\n\n                if (columnMenu) {\n                    columnMenu.destroy();\n                }\n            });\n        },\n\n        _attachCustomCommandsEvent: function() {\n            var that = this,\n                columns = leafColumns(that.columns || []),\n                command,\n                idx,\n                length;\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                command = columns[idx].command;\n\n                if (command) {\n                    attachCustomCommandEvent(that, that.wrapper, command);\n                }\n            }\n        },\n\n        _aria: function() {\n            var id = this.element.attr(\"id\") || \"aria\";\n\n            if (id) {\n                this._cellId = id + \"_active_cell\";\n            }\n        },\n\n        _element: function() {\n            var that = this,\n                table = that.element;\n\n            if (!table.is(\"table\")) {\n                if (that.options.scrollable) {\n                    table = that.element.find(\"> .k-grid-content > table\");\n                } else {\n                    table = that.element.children(\"table\");\n                }\n\n                if (!table.length) {\n                    table = $(\"<table />\").appendTo(that.element);\n                }\n            }\n\n            if (isIE7) {\n                table.attr(\"cellspacing\", 0);\n            }\n\n            that.table = table.attr(\"role\", that._hasDetails() ? \"treegrid\" : \"grid\");\n\n            that._wrapper();\n        },\n\n        _createResizeHandle: function(container, th) {\n            var that = this;\n            var indicatorWidth = that.options.columnResizeHandleWidth;\n            var scrollable = that.options.scrollable;\n            var resizeHandle = that.resizeHandle;\n            var groups = this._groups();\n            var left;\n\n            if (resizeHandle && that.lockedContent && resizeHandle.data(\"th\")[0] !== th[0]) {\n                resizeHandle.remove();\n                resizeHandle = null;\n            }\n\n            if (!resizeHandle) {\n                resizeHandle = that.resizeHandle = $('<div class=\"k-resize-handle\"><div class=\"k-resize-handle-inner\"></div></div>');\n                container.append(resizeHandle);\n            }\n\n            if (!isRtl) {\n                left = th[0].offsetWidth;\n\n                var cells = leafDataCells(th.closest(\"thead\"));\n                for (var idx = 0; idx < cells.length; idx++) {\n                    if (cells[idx] == th[0]) {\n                        break;\n                    }\n                    left += cells[idx].offsetWidth;\n                }\n\n                if (groups > 0) {\n                    left += container.find(\".k-group-cell:first\").outerWidth() * groups;\n                }\n\n                if (that._hasDetails()) {\n                    left += container.find(\".k-hierarchy-cell:first\").outerWidth();\n                }\n\n           } else {\n                left = th.position().left;\n                if (scrollable) {\n                    var headerWrap = th.closest(\".k-grid-header-wrap, .k-grid-header-locked\"),\n                        ieCorrection = browser.msie ? headerWrap.scrollLeft() : 0,\n                        webkitCorrection = browser.webkit ? (headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - headerWrap.scrollLeft()) : 0,\n                        firefoxCorrection = browser.mozilla ? (headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - (headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - headerWrap.scrollLeft())) : 0;\n\n                    left -= webkitCorrection - firefoxCorrection + ieCorrection;\n                }\n            }\n\n            resizeHandle.css({\n                top: th.position().top,//scrollable ? 0 : heightAboveHeader(that.wrapper),\n                left: left - indicatorWidth,\n                height: th.outerHeight(),\n                width: indicatorWidth * 3\n            })\n            .data(\"th\", th)\n            .show();\n        },\n\n        _positionColumnResizeHandle: function(container) {\n            var that = this,\n                indicatorWidth = that.options.columnResizeHandleWidth,\n                lockedHead = that.lockedHeader ? that.lockedHeader.find(\"thead:first\") : $();\n\n            that.thead.add(lockedHead).on(\"mousemove\" + NS, \"th\", function(e) {\n                var th = $(this);\n\n                if (th.hasClass(\"k-group-cell\") || th.hasClass(\"k-hierarchy-cell\")) {\n                    return;\n                }\n\n                var clientX = e.clientX,\n                    winScrollLeft = $(window).scrollLeft(),\n                    position = th.offset().left + (!isRtl ? this.offsetWidth : 0);\n\n                if(clientX + winScrollLeft > position - indicatorWidth && clientX + winScrollLeft < position + indicatorWidth) {\n                    that._createResizeHandle(th.closest(\"div\"), th);\n                } else if (that.resizeHandle) {\n                    that.resizeHandle.hide();\n                } else {\n                    cursor(that.wrapper, \"\");\n                }\n            });\n        },\n\n        _resizeHandleDocumentClick: function(e) {\n            if ($(e.target).closest(\".k-column-active\").length) {\n                return;\n            }\n\n            $(document).off(e);\n\n            this._hideResizeHandle();\n        },\n\n        _hideResizeHandle: function() {\n            if (this.resizeHandle) {\n                this.resizeHandle.data(\"th\")\n                    .removeClass(\"k-column-active\");\n\n                if (this.lockedContent && !this._isMobile) {\n                    this.resizeHandle.remove();\n                    this.resizeHandle = null;\n                } else {\n                    this.resizeHandle.hide();\n                }\n            }\n        },\n\n        _positionColumnResizeHandleTouch: function(container) {\n            var that = this,\n                lockedHead = that.lockedHeader ? that.lockedHeader.find(\"thead:first\") : $();\n\n            that._resizeUserEvents = new kendo.UserEvents(lockedHead.add(that.thead), {\n                filter: \"th:not(.k-group-cell):not(.k-hierarchy-cell)\",\n                threshold: 10,\n                hold: function(e) {\n                    var th = $(e.target);\n\n                    e.preventDefault();\n\n                    th.addClass(\"k-column-active\");\n                    that._createResizeHandle(th.closest(\"div\"), th);\n\n                    if (!that._resizeHandleDocumentClickHandler) {\n                        that._resizeHandleDocumentClickHandler = proxy(that._resizeHandleDocumentClick, that);\n                    }\n\n                    $(document).on(\"click\", that._resizeHandleDocumentClickHandler);\n                }\n            });\n        },\n\n        _resizable: function() {\n            var that = this,\n                options = that.options,\n                container,\n                columnStart,\n                columnWidth,\n                gridWidth,\n                isMobile = this._isMobile,\n                scrollbar = !kendo.support.mobileOS ? kendo.support.scrollbar() : 0,\n                isLocked,\n                col, th;\n\n            if (options.resizable) {\n                container = options.scrollable ? that.wrapper.find(\".k-grid-header-wrap:first\") : that.wrapper;\n\n                if (isMobile) {\n                    that._positionColumnResizeHandleTouch(container);\n                } else {\n                    that._positionColumnResizeHandle(container);\n                }\n\n                if (that.resizable) {\n                    that.resizable.destroy();\n                }\n\n                that.resizable = new ui.Resizable(container.add(that.lockedHeader), {\n                    handle: \".k-resize-handle\",\n                    hint: function(handle) {\n                        return $('<div class=\"k-grid-resize-indicator\" />').css({\n                            height: handle.data(\"th\").outerHeight() + that.tbody.attr(\"clientHeight\")\n                        });\n                    },\n                    start: function(e) {\n                        th = $(e.currentTarget).data(\"th\");\n\n                        if (isMobile) {\n                            that._hideResizeHandle();\n                        }\n\n                        var header = th.closest(\"table\"),\n                            index = $.inArray(th[0], leafDataCells(th.closest(\"thead\")).filter(\":visible\"));\n\n                        isLocked = header.parent().hasClass(\"k-grid-header-locked\");\n\n                        var contentTable =  isLocked ? that.lockedTable : that.table,\n                            footer = that.footer || $();\n\n                        if (that.footer && that.lockedContent) {\n                            footer = isLocked ? that.footer.children(\".k-grid-footer-locked\") : that.footer.children(\".k-grid-footer-wrap\");\n                        }\n\n                        cursor(that.wrapper, 'col-resize');\n\n                        if (options.scrollable) {\n                            col = header.find(\"col:not(.k-group-col):not(.k-hierarchy-col):eq(\" + index + \")\")\n                                .add(contentTable.children(\"colgroup\").find(\"col:not(.k-group-col):not(.k-hierarchy-col):eq(\" + index + \")\"))\n                                .add(footer.find(\"colgroup\").find(\"col:not(.k-group-col):not(.k-hierarchy-col):eq(\" + index + \")\"));\n                        } else {\n                            col = contentTable.children(\"colgroup\").find(\"col:not(.k-group-col):not(.k-hierarchy-col):eq(\" + index + \")\");\n                        }\n\n                        columnStart = e.x.location;\n                        columnWidth = th.outerWidth();\n                        gridWidth = isLocked ? contentTable.children(\"tbody\").outerWidth() : that.tbody.outerWidth(); // IE returns 0 if grid is empty and scrolling is enabled\n\n                        // fix broken UI in Chrome38+\n                        if (browser.webkit) {\n                            that.wrapper.addClass(\"k-grid-column-resizing\");\n                        }\n                    },\n                    resize: function(e) {\n                        var rtlMultiplier = isRtl ? -1 : 1,\n                            currentWidth = columnWidth + (e.x.location * rtlMultiplier) - (columnStart * rtlMultiplier);\n\n                        if (options.scrollable) {\n                            var footer;\n                            if (isLocked && that.lockedFooter) {\n                                footer = that.lockedFooter.children(\"table\");\n                            } else if (that.footer) {\n                                footer = that.footer.find(\">.k-grid-footer-wrap>table\");\n                            }\n                            if (!footer || !footer[0]) {\n                                footer = $();\n                            }\n                            var header = th.closest(\"table\");\n                            var contentTable = isLocked ? that.lockedTable : that.table;\n                            var constrain = false;\n                            var totalWidth = that.wrapper.width() - scrollbar;\n                            var width = currentWidth;\n\n                            if (isLocked && gridWidth - columnWidth + width > totalWidth) {\n                                width = columnWidth + (totalWidth - gridWidth - scrollbar * 2);\n                                if (width < 0) {\n                                    width = currentWidth;\n                                }\n                                constrain = true;\n                            }\n\n                            if (width > 10) {\n                                col.css('width', width);\n\n                                if (gridWidth) {\n                                    if (constrain) {\n                                        width = totalWidth - scrollbar * 2;\n                                    } else {\n                                        width = gridWidth + (e.x.location * rtlMultiplier) - (columnStart * rtlMultiplier);\n                                    }\n\n                                    contentTable\n                                        .add(header)\n                                        .add(footer)\n                                        .css('width', width);\n\n                                    if (!isLocked) {\n                                        that._footerWidth = width;\n                                    }\n                                }\n                            }\n                        } else if (currentWidth > 10) {\n                            col.css('width', currentWidth);\n                        }\n                    },\n                    resizeend: function() {\n                        var newWidth = th.outerWidth(),\n                            column,\n                            header;\n\n                        cursor(that.wrapper, \"\");\n\n                        if (browser.webkit) {\n                            that.wrapper.removeClass(\"k-grid-column-resizing\");\n                        }\n\n                        if (columnWidth != newWidth) {\n                            header = that.lockedHeader ? that.lockedHeader.find(\"thead:first tr:first\").add(that.thead.find(\"tr:first\")) : th.parent();\n\n                            var index = th.attr(kendo.attr(\"index\"));\n                            if (!index) {\n                                index = header.find(\"th:not(.k-group-cell):not(.k-hierarchy-cell)\").index(th);\n                            }\n                            column = leafColumns(that.columns)[index];\n\n                            column.width = newWidth;\n\n                            that.trigger(COLUMNRESIZE, {\n                                column: column,\n                                oldWidth: columnWidth,\n                                newWidth: newWidth\n                            });\n\n                            that._applyLockedContainersWidth();\n                            that._syncLockedContentHeight();\n                            that._syncLockedHeaderHeight();\n                        }\n\n                        that._hideResizeHandle();\n                        th = null;\n                    }\n                });\n\n            }\n        },\n\n        _draggable: function() {\n            var that = this;\n            if (that.options.reorderable) {\n                if (that._draggableInstance) {\n                    that._draggableInstance.destroy();\n                }\n\n                that._draggableInstance = that.wrapper.kendoDraggable({\n                    group: kendo.guid(),\n                    filter: that.content ? \".k-grid-header:first \" + HEADERCELLS : \"table:first>.k-grid-header \" + HEADERCELLS,\n                    drag: function() {\n                        that._hideResizeHandle();\n                    },\n                    hint: function(target) {\n                        return $('<div class=\"k-header k-drag-clue\" />')\n                            .css({\n                                width: target.width(),\n                                paddingLeft: target.css(\"paddingLeft\"),\n                                paddingRight: target.css(\"paddingRight\"),\n                                lineHeight: target.height() + \"px\",\n                                paddingTop: target.css(\"paddingTop\"),\n                                paddingBottom: target.css(\"paddingBottom\")\n                            })\n                            .html(target.attr(kendo.attr(\"title\")) || target.attr(kendo.attr(\"field\")) || target.text())\n                            .prepend('<span class=\"k-icon k-drag-status k-denied\" />');\n                    }\n                }).data(\"kendoDraggable\");\n            }\n        },\n\n        _reorderable: function() {\n            var that = this;\n            if (that.options.reorderable) {\n                if (that.wrapper.data(\"kendoReorderable\")) {\n                    that.wrapper.data(\"kendoReorderable\").destroy();\n                }\n\n                var targetParentContainerIndex = function(columns, sourceIndex, targetIndex) {\n                    var column = columns[sourceIndex];\n                    var target = columns[targetIndex];\n\n                    var parent = columnParent(column, that.columns);\n                    columns = parent ? parent.columns : that.columns;\n\n                    return inArray(target, columns);\n                };\n\n                that.wrapper.kendoReorderable({\n                    draggable: that._draggableInstance,\n                    dragOverContainers: function(sourceIndex, targetIndex) {\n                        var columns = flatColumnsInDomOrder(that.columns);\n                        return columns[sourceIndex].lockable !== false && targetParentContainerIndex(columns, sourceIndex, targetIndex) > -1;\n                    },\n                    inSameContainer: function(e) {\n                        return $(e.source).parent()[0] === $(e.target).parent()[0] && targetParentContainerIndex(flatColumnsInDomOrder(that.columns), e.sourceIndex, e.targetIndex) > -1;\n                    },\n                    change: function(e) {\n                        var columns = flatColumnsInDomOrder(that.columns);\n                        var column = columns[e.oldIndex];\n                        var newIndex = targetParentContainerIndex(columns, e.oldIndex, e.newIndex);\n\n                        that.trigger(COLUMNREORDER, {\n                            newIndex: newIndex,\n                            oldIndex: inArray(column, columns),\n                            column: column\n                        });\n\n                        that.reorderColumn(newIndex, column, e.position === \"before\");\n                    }\n                });\n            }\n        },\n\n        _reorderHeader: function(sources, target, before) {\n            var that = this;\n            var sourcePosition = columnPosition(sources[0], that.columns);\n            var destPosition = columnPosition(target, that.columns);\n\n            var leafs = [];\n            for (var idx = 0; idx < sources.length; idx++) {\n                if (sources[idx].columns) {\n                    leafs = leafs.concat(sources[idx].columns);\n                }\n            }\n\n            var ths = elements(that.lockedHeader, that.thead, \"tr:eq(\" + sourcePosition.row + \")>th.k-header:not(.k-group-cell,.k-hierarchy-cell)\");\n\n            var sourceLockedColumns = lockedColumns(sources).length;\n            var targetLockedColumns = lockedColumns([target]).length;\n\n            if (leafs.length) {\n                if (sourceLockedColumns > 0 && targetLockedColumns === 0) {\n                    moveCellsBetweenContainers(sources, target, leafs, that.columns, that.lockedHeader.find(\"thead\"), that.thead, this._groups());\n                } else if (sourceLockedColumns === 0 && targetLockedColumns > 0) {\n                    moveCellsBetweenContainers(sources, target, leafs, that.columns, that.thead, that.lockedHeader.find(\"thead\"), this._groups());\n                }\n\n                if (target.columns || sourcePosition.cell - destPosition.cell > 1 || destPosition.cell - sourcePosition.cell > 1) {\n                    target = findReorderTarget(that.columns, target, sources[0], before);\n                    if (target) {\n                        that._reorderHeader(leafs, target, before);\n                    }\n                }\n            } else if (sourceLockedColumns !== targetLockedColumns) { // move between containers\n                updateCellRowSpan(ths[sourcePosition.cell], that.columns, sourceLockedColumns);\n            }\n\n            reorder(ths, sourcePosition.cell, destPosition.cell, before, sources.length);\n        },\n\n        _reorderContent: function(sources, destination, before) {\n            var that = this;\n            var lockedRows = $();\n            var source = sources[0];\n            var visibleSources = visibleColumns(sources);\n            var sourceIndex = inArray(source, leafColumns(that.columns));\n            var destIndex = inArray(destination, leafColumns(that.columns));\n\n            var colSourceIndex = inArray(source, visibleLeafColumns(that.columns));\n            var colDest = inArray(destination, visibleLeafColumns(that.columns));\n            var lockedCount = lockedColumns(that.columns).length;\n            var isLocked = !!destination.locked;\n            var footer = that.footer || that.wrapper.find(\".k-grid-footer\");\n\n            var headerCol, footerCol;\n            headerCol = footerCol = colDest;\n\n            if (destination.hidden) {\n                if (isLocked) {\n                    colDest = that.lockedTable.find(\"colgroup\");\n                    headerCol = that.lockedHeader.find(\"colgroup\");\n                    footerCol = $(that.lockedFooter).find(\">table>colgroup\");\n                } else {\n                    colDest = that.tbody.prev();\n                    headerCol = that.thead.prev();\n                    footerCol = footer.find(\".k-grid-footer-wrap\").find(\">table>colgroup\");\n                }\n            }\n\n            if (that._hasFilterRow()) {\n                reorder(that.wrapper.find(\".k-filter-row th:not(.k-group-cell,.k-hierarchy-cell)\"), sourceIndex, destIndex, before, sources.length);\n            }\n\n            reorder(elements(that.lockedHeader, that.thead.prev(), \"col:not(.k-group-col,.k-hierarchy-col)\"), colSourceIndex, headerCol, before, visibleSources.length);\n\n            if (that.options.scrollable) {\n                reorder(elements(that.lockedTable, that.tbody.prev(), \"col:not(.k-group-col,.k-hierarchy-col)\"), colSourceIndex, colDest, before, visibleSources.length);\n            }\n\n            if (footer && footer.length) {\n                reorder(elements(that.lockedFooter, footer.find(\".k-grid-footer-wrap\"), \">table>colgroup>col:not(.k-group-col,.k-hierarchy-col)\"), colSourceIndex, footerCol, before, visibleSources.length);\n                reorder(footer.find(\".k-footer-template>td:not(.k-group-cell,.k-hierarchy-cell)\"), sourceIndex, destIndex, before, sources.length);\n            }\n\n            var rows = that.tbody.children(\":not(.k-grouping-row,.k-detail-row)\");\n            if (that.lockedTable) {\n                if (lockedCount > destIndex) {\n                    if (lockedCount <= sourceIndex) {\n                        updateColspan(\n                            that.lockedTable.find(\">tbody>tr.k-grouping-row\"),\n                            that.table.find(\">tbody>tr.k-grouping-row\"),\n                            sources.length\n                        );\n                    }\n                } else if (lockedCount > sourceIndex) {\n                    updateColspan(\n                        that.table.find(\">tbody>tr.k-grouping-row\"),\n                        that.lockedTable.find(\">tbody>tr.k-grouping-row\"),\n                        sources.length\n                    );\n                }\n\n                lockedRows = that.lockedTable.find(\">tbody>tr:not(.k-grouping-row,.k-detail-row)\");\n            }\n\n            for (var idx = 0, length = rows.length; idx < length; idx += 1) {\n                reorder(elements(lockedRows[idx], rows[idx], \">td:not(.k-group-cell,.k-hierarchy-cell)\"), sourceIndex, destIndex, before, sources.length);\n            }\n        },\n\n        reorderColumn: function(destIndex, column, before) {\n            var that = this,\n                parent = columnParent(column, that.columns),\n                columns = parent ? parent.columns : that.columns,\n                sourceIndex = inArray(column, columns),\n                destColumn = columns[destIndex],\n                lockChanged,\n                isLocked = !!destColumn.locked,\n                lockedCount = lockedColumns(that.columns).length;\n\n            if (sourceIndex === destIndex) {\n                return;\n            }\n\n            if (!column.locked && isLocked && nonLockedColumns(that.columns).length == 1) {\n                return;\n            }\n\n            if (column.locked && !isLocked && lockedCount == 1) {\n                return;\n            }\n\n            that._hideResizeHandle();\n\n            if (before === undefined) {\n                before = destIndex < sourceIndex;\n            }\n\n            var sourceColumns = [column];\n\n            that._reorderHeader(sourceColumns, destColumn, before);\n\n            if (that.lockedHeader) {\n                removeEmptyRows(that.thead);\n                removeEmptyRows(that.lockedHeader);\n            }\n\n            if (destColumn.columns) {\n                destColumn = leafColumns(destColumn.columns);\n                destColumn = destColumn[before ? 0 : destColumn.length - 1];\n            }\n\n            if (column.columns) {\n                sourceColumns = leafColumns(column.columns);\n            }\n\n            that._reorderContent(sourceColumns, destColumn, before);\n\n            lockChanged = !!column.locked;\n            lockChanged = lockChanged != isLocked;\n            column.locked = isLocked;\n\n            columns.splice(before ? destIndex : destIndex + 1, 0, column);\n            columns.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n\n            that._templates();\n\n            that._updateColumnCellIndex();\n\n            that._updateTablesWidth();\n            that._applyLockedContainersWidth();\n            that._syncLockedHeaderHeight();\n            that._syncLockedContentHeight();\n            that._updateFirstColumnClass();\n\n            if(!lockChanged) {\n                return;\n            }\n\n            if (isLocked) {\n                that.trigger(COLUMNLOCK, {\n                    column: column\n                });\n            } else {\n                that.trigger(COLUMNUNLOCK, {\n                    column: column\n                });\n            }\n        },\n\n        _updateColumnCellIndex: function() {\n            var header;\n            var offset = 0;\n\n            if (this.lockedHeader) {\n                header = this.lockedHeader.find(\"thead\");\n                offset = updateCellIndex(header, lockedColumns(this.columns));\n            }\n            updateCellIndex(this.thead, nonLockedColumns(this.columns), offset);\n        },\n\n        lockColumn: function(column) {\n            var columns = this.columns;\n\n            if (typeof column == \"number\") {\n                column = columns[column];\n            } else {\n                column = grep(columns, function(item) {\n                    return item.field === column;\n                })[0];\n            }\n\n            if (!column || column.locked || column.hidden) {\n                return;\n            }\n\n            var index = lockedColumns(columns).length - 1;\n            this.reorderColumn(index, column, false);\n        },\n\n        unlockColumn: function(column) {\n            var columns = this.columns;\n\n            if (typeof column == \"number\") {\n                column = columns[column];\n            } else {\n                column = grep(columns, function(item) {\n                    return item.field === column;\n                })[0];\n            }\n\n            if (!column || !column.locked || column.hidden) {\n                return;\n            }\n\n            var index = lockedColumns(columns).length;\n            this.reorderColumn(index, column, true);\n        },\n\n        cellIndex: function(td) {\n            var lockedColumnOffset = 0;\n\n            if (this.lockedTable && !$.contains(this.lockedTable[0], td[0])) {\n                lockedColumnOffset = leafColumns(lockedColumns(this.columns)).length;\n            }\n\n            return $(td).parent().children('td:not(.k-group-cell,.k-hierarchy-cell)').index(td) + lockedColumnOffset;\n        },\n\n        _modelForContainer: function(container) {\n            container = $(container);\n\n            if (!container.is(\"tr\") && this._editMode() !== \"popup\") {\n                container = container.closest(\"tr\");\n            }\n\n            var id = container.attr(kendo.attr(\"uid\"));\n\n            return this.dataSource.getByUid(id);\n        },\n\n        _editable: function() {\n            var that = this,\n                selectable = that.selectable && that.selectable.options.multiple,\n                editable = that.options.editable,\n                handler = function () {\n                    var target = activeElement(),\n                        cell = that._editContainer;\n\n                    if (cell && !$.contains(cell[0], target) && cell[0] !== target && !$(target).closest(\".k-animation-container\").length) {\n                        if (that.editable.end()) {\n                            that.closeCell();\n                        }\n                    }\n                };\n\n            if (editable) {\n                var mode = that._editMode();\n                if (mode === \"incell\") {\n                    if (editable.update !== false) {\n                        that.wrapper.on(CLICK + NS, \"tr:not(.k-grouping-row) > td\", function(e) {\n                            var td = $(this),\n                                isLockedCell = that.lockedTable && td.closest(\"table\")[0] === that.lockedTable[0];\n\n                            if (td.hasClass(\"k-hierarchy-cell\") ||\n                                td.hasClass(\"k-detail-cell\") ||\n                                td.hasClass(\"k-group-cell\") ||\n                                td.hasClass(\"k-edit-cell\") ||\n                                td.has(\"a.k-grid-delete\").length ||\n                                td.has(\"button.k-grid-delete\").length ||\n                                (td.closest(\"tbody\")[0] !== that.tbody[0] && !isLockedCell) ||\n                                $(e.target).is(\":input\")) {\n                                return;\n                            }\n\n                            if (that.editable) {\n                                if (that.editable.end()) {\n                                    if (selectable) {\n                                        $(activeElement()).blur();\n                                    }\n                                    that.closeCell();\n                                    that.editCell(td);\n                                }\n                            } else {\n                                that.editCell(td);\n                            }\n\n                        })\n                        .on(\"focusin\" + NS, function() {\n                            clearTimeout(that.timer);\n                            that.timer = null;\n                        })\n                        .on(\"focusout\" + NS, function() {\n                            that.timer = setTimeout(handler, 1);\n                        });\n                    }\n                } else {\n                    if (editable.update !== false) {\n                        that.wrapper.on(CLICK + NS, \"tbody>tr:not(.k-detail-row,.k-grouping-row):visible a.k-grid-edit\", function(e) {\n                            e.preventDefault();\n                            that.editRow($(this).closest(\"tr\"));\n                        });\n                    }\n                }\n\n                if (editable.destroy !== false) {\n                    that.wrapper.on(CLICK + NS, \"tbody>tr:not(.k-detail-row,.k-grouping-row):visible .k-grid-delete\", function(e) {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        that.removeRow($(this).closest(\"tr\"));\n                    });\n                } else {\n                    //Required for the MVC server wrapper delete button\n                    that.wrapper.on(CLICK + NS, \"tbody>tr:not(.k-detail-row,.k-grouping-row):visible button.k-grid-delete\", function(e) {\n                        e.stopPropagation();\n\n                        if (!that._confirmation()) {\n                            e.preventDefault();\n                        }\n                    });\n                }\n            }\n        },\n\n        editCell: function(cell) {\n            cell = $(cell);\n\n            var that = this,\n            column = leafColumns(that.columns)[that.cellIndex(cell)],\n                model = that._modelForContainer(cell);\n\n            that.closeCell();\n\n            if (model && (!model.editable || model.editable(column.field)) && !column.command && column.field) {\n\n                that._attachModelChange(model);\n\n                that._editContainer = cell;\n\n                that.editable = cell.addClass(\"k-edit-cell\")\n                    .kendoEditable({\n                        fields: { field: column.field, format: column.format, editor: column.editor, values: column.values },\n                        model: model,\n                        target: that,\n                        change: function(e) {\n                            if (that.trigger(SAVE, { values: e.values, container: cell, model: model } )) {\n                                e.preventDefault();\n                            }\n                        }\n                    }).data(\"kendoEditable\");\n\n                var tr = cell.parent().addClass(\"k-grid-edit-row\");\n\n                if (that.lockedContent) {\n                    adjustRowHeight(tr[0], that._relatedRow(tr).addClass(\"k-grid-edit-row\")[0]);\n                }\n\n                that.trigger(EDIT, { container: cell, model: model });\n            }\n        },\n\n        _adjustLockedHorizontalScrollBar: function() {\n            var table = this.table,\n                content = table.parent();\n\n            var scrollbar = table[0].offsetWidth > content[0].clientWidth ? kendo.support.scrollbar() : 0;\n            this.lockedContent.height(content.height() - scrollbar);\n        },\n\n        _syncLockedContentHeight: function() {\n            if (this.lockedTable) {\n                if (!this.touchScroller) {\n                    this._adjustLockedHorizontalScrollBar();\n                }\n                this._adjustRowsHeight(this.table, this.lockedTable);\n            }\n        },\n\n        _syncLockedHeaderHeight: function() {\n            if (this.lockedHeader) {\n                var lockedTable = this.lockedHeader.children(\"table\");\n                var table = this.thead.parent();\n\n                this._adjustRowsHeight(lockedTable, table);\n\n                syncTableHeight(lockedTable, table);\n            }\n        },\n\n        _syncLockedFooterHeight: function() {\n            if (this.lockedFooter && this.footer && this.footer.length) {\n                this._adjustRowsHeight(this.lockedFooter.children(\"table\"), this.footer.find(\".k-grid-footer-wrap > table\"));\n            }\n        },\n\n        _destroyEditable: function() {\n            var that = this;\n\n            var destroy = function() {\n                if (that.editable) {\n\n                    var container = that.editView ? that.editView.element : that._editContainer;\n\n                    if (container) {\n                        container.off(CLICK + NS, \"a.k-grid-cancel\", that._editCancelClickHandler);\n                        container.off(CLICK + NS, \"a.k-grid-update\", that._editUpdateClickHandler);\n                    }\n\n                    that._detachModelChange();\n                    that.editable.destroy();\n                    that.editable = null;\n                    that._editContainer = null;\n                    that._destroyEditView();\n                }\n            };\n\n            if (that.editable) {\n                if (that._editMode() === \"popup\" && !that._isMobile) {\n                    that._editContainer.data(\"kendoWindow\").bind(\"deactivate\", destroy).close();\n                } else {\n                    destroy();\n                }\n            }\n            if (that._actionSheet) {\n                that._actionSheet.destroy();\n                that._actionSheet = null;\n            }\n        },\n\n        _destroyEditView: function() {\n            if (this.editView) {\n                this.editView.purge();\n                this.editView = null;\n                this.pane.navigate(\"\");\n            }\n        },\n\n        _attachModelChange: function(model) {\n            var that = this;\n\n            that._modelChangeHandler = function(e) {\n                that._modelChange({ field: e.field, model: this });\n            };\n\n            model.bind(\"change\", that._modelChangeHandler);\n        },\n\n        _detachModelChange: function() {\n            var that = this,\n                container = that._editContainer,\n                model = that._modelForContainer(container);\n\n            if (model) {\n                model.unbind(CHANGE, that._modelChangeHandler);\n            }\n        },\n\n        closeCell: function(isCancel) {\n            var that = this,\n                cell = that._editContainer,\n                id,\n                column,\n                tr,\n                model;\n\n            if (!cell) {\n                return;\n            }\n\n            id = cell.closest(\"tr\").attr(kendo.attr(\"uid\"));\n            model = that.dataSource.getByUid(id);\n\n            if (isCancel && that.trigger(\"cancel\", { container: cell, model: model })) {\n                return;\n            }\n\n            cell.removeClass(\"k-edit-cell\");\n            column = leafColumns(that.columns)[that.cellIndex(cell)];\n\n            tr = cell.parent().removeClass(\"k-grid-edit-row\");\n\n            that._destroyEditable(); // editable should be destroyed before content of the container is changed\n\n            that._displayCell(cell, column, model);\n\n            if (cell.hasClass(\"k-dirty-cell\")) {\n                $('<span class=\"k-dirty\"/>').prependTo(cell);\n            }\n\n            if (that.lockedContent) {\n                adjustRowHeight(tr.css(\"height\", \"\")[0], that._relatedRow(tr).css(\"height\", \"\")[0]);\n            }\n        },\n\n        _displayCell: function(cell, column, dataItem) {\n            var that = this,\n                state = { storage: {}, count: 0 },\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                tmpl = kendo.template(that._cellTmpl(column, state), settings);\n\n            if (state.count > 0) {\n                tmpl = proxy(tmpl, state.storage);\n            }\n\n            cell.empty().html(tmpl(dataItem));\n\n            that.angular(\"compile\", function(){\n                return {\n                    elements: cell,\n                    data: [ { dataItem: dataItem } ]\n                };\n            });\n        },\n\n        removeRow: function(row) {\n            if (!this._confirmation(row)) {\n                return;\n            }\n\n            this._removeRow(row);\n        },\n\n        _removeRow: function(row) {\n            var that = this,\n                model,\n                mode = that._editMode();\n\n            if (mode !== \"incell\") {\n                that.cancelRow();\n            }\n\n            row = $(row).hide();\n            model = that._modelForContainer(row);\n\n            if (model && !that.trigger(REMOVE, { row: row, model: model })) {\n\n                that.dataSource.remove(model);\n\n                if (mode === \"inline\" || mode === \"popup\") {\n                    that.dataSource.sync();\n                }\n            } else if (mode === \"incell\") {\n                that._destroyEditable();\n            }\n        },\n\n        _editMode: function() {\n            var mode = \"incell\",\n                editable = this.options.editable;\n\n            if (editable !== true) {\n                if (typeof editable == \"string\") {\n                    mode = editable;\n                } else {\n                    mode = editable.mode || mode;\n                }\n            }\n\n            return mode;\n        },\n\n        editRow: function(row) {\n            var model;\n            var that = this;\n\n            if (row instanceof kendo.data.ObservableObject) {\n                model = row;\n            } else {\n                row = $(row);\n                model = that._modelForContainer(row);\n            }\n\n            var mode = that._editMode();\n            var container;\n\n            that.cancelRow();\n\n            if (model) {\n\n                that._attachModelChange(model);\n\n                if (mode === \"popup\") {\n                    that._createPopupEditor(model);\n                } else if (mode === \"inline\") {\n                    that._createInlineEditor(row, model);\n                } else if (mode === \"incell\") {\n                    $(row).children(DATA_CELL).each(function() {\n                        var cell = $(this);\n                        var column = leafColumns(that.columns)[cell.index()];\n\n                        model = that._modelForContainer(cell);\n\n                        if (model && (!model.editable || model.editable(column.field)) && column.field) {\n                            that.editCell(cell);\n                            return false;\n                        }\n                    });\n                }\n\n                container = that.editView ? that.editView.element : that._editContainer;\n\n                if (container) {\n                    if (!this._editCancelClickHandler) {\n                        this._editCancelClickHandler = proxy(this._editCancelClick, this);\n                    }\n\n                    container.on(CLICK + NS, \"a.k-grid-cancel\", this._editCancelClickHandler);\n\n                    if (!this._editUpdateClickHandler) {\n                        this._editUpdateClickHandler = proxy(this._editUpdateClick, this);\n                    }\n\n                    container.on(CLICK + NS, \"a.k-grid-update\", this._editUpdateClickHandler);\n                }\n            }\n        },\n\n        _editUpdateClick: function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n\n            this.saveRow();\n        },\n\n        _editCancelClick: function(e) {\n            var that = this;\n            var navigatable = that.options.navigatable;\n            var model = that.editable.options.model;\n            var container = that.editView ? that.editView.element : that._editContainer;\n\n            e.preventDefault();\n            e.stopPropagation();\n\n            if (that.trigger(\"cancel\", { container: container, model: model })) {\n                return;\n            }\n\n            var currentIndex = that.items().index($(that.current()).parent());\n\n            that.cancelRow();\n\n            if (navigatable) {\n                that.current(that.items().eq(currentIndex).children().filter(NAVCELL).first());\n                focusTable(that.table, true);\n            }\n        },\n\n        _createPopupEditor: function(model) {\n            var that = this,\n                html = '<div ' + kendo.attr(\"uid\") + '=\"' + model.uid + '\" class=\"k-popup-edit-form' + (that._isMobile ? ' k-mobile-list' : '') + '\"><div class=\"k-edit-form-container\">',\n                column,\n                command,\n                fields = [],\n                idx,\n                length,\n                tmpl,\n                updateText,\n                cancelText,\n                tempCommand,\n                columns = leafColumns(that.columns),\n                attr,\n                editable = that.options.editable,\n                template = editable.template,\n                options = isPlainObject(editable) ? editable.window : {},\n                settings = extend({}, kendo.Template, that.options.templateSettings);\n\n            options = options || {};\n\n            if (template) {\n                if (typeof template === STRING) {\n                    template = window.unescape(template);\n                }\n\n                html += (kendo.template(template, settings))(model);\n\n                for (idx = 0, length = columns.length; idx < length; idx++) {\n                    column = columns[idx];\n                    if (column.command) {\n                        tempCommand = getCommand(column.command, \"edit\");\n                        if (tempCommand) {\n                            command = tempCommand;\n                        }\n                    }\n                }\n            } else {\n                for (idx = 0, length = columns.length; idx < length; idx++) {\n                    column = columns[idx];\n\n                    if (!column.command) {\n                        html += '<div class=\"k-edit-label\"><label for=\"' + column.field + '\">' + (column.title || column.field || \"\") + '</label></div>';\n\n                        if ((!model.editable || model.editable(column.field)) && column.field) {\n                            fields.push({ field: column.field, format: column.format, editor: column.editor, values: column.values });\n                            html += '<div ' + kendo.attr(\"container-for\") + '=\"' + column.field + '\" class=\"k-edit-field\"></div>';\n                        } else {\n                            var state = { storage: {}, count: 0 };\n\n                            tmpl = kendo.template(that._cellTmpl(column, state), settings);\n\n                            if (state.count > 0) {\n                                tmpl = proxy(tmpl, state.storage);\n                            }\n\n                            html += '<div class=\"k-edit-field\">' + tmpl(model) + '</div>';\n                        }\n                    } else if (column.command) {\n                        tempCommand = getCommand(column.command, \"edit\");\n                        if (tempCommand) {\n                            command = tempCommand;\n                        }\n                    }\n                }\n            }\n\n            if (command) {\n                if (isPlainObject(command)) {\n                   if (command.text && isPlainObject(command.text)) {\n                       updateText = command.text.update;\n                       cancelText = command.text.cancel;\n                   }\n\n                   if (command.attr) {\n                       attr = command.attr;\n                   }\n                }\n            }\n\n            var container;\n\n            if (!that._isMobile) {\n                html += '<div class=\"k-edit-buttons k-state-default\">';\n                html += that._createButton({ name: \"update\", text: updateText, attr: attr }) + that._createButton({ name: \"canceledit\", text: cancelText, attr: attr });\n                html += '</div></div></div>';\n\n                container = that._editContainer = $(html)\n                .appendTo(that.wrapper).eq(0)\n                .kendoWindow(extend({\n                    modal: true,\n                    resizable: false,\n                    draggable: true,\n                    title: \"Edit\",\n                    visible: false,\n                    close: function(e) {\n                        if (e.userTriggered) {\n                            //The bellow line is required due to: draggable window in IE, change event will be triggered while the window is closing\n                            e.sender.element.focus();\n                            if (that.trigger(\"cancel\", { container: container, model: model })) {\n                                e.preventDefault();\n                                return;\n                            }\n\n                            var currentIndex = that.items().index($(that.current()).parent());\n\n                            that.cancelRow();\n                            if (that.options.navigatable) {\n                                that.current(that.items().eq(currentIndex).children().filter(NAVCELL).first());\n                                focusTable(that.table, true);\n                            }\n                        }\n                    }\n                }, options));\n            } else {\n                html += \"</div></div>\";\n                that.editView = that.pane.append(\n                    '<div data-' + kendo.ns + 'role=\"view\" data-' + kendo.ns + 'init-widgets=\"false\" class=\"k-grid-edit-form\">'+\n                        '<div data-' + kendo.ns + 'role=\"header\" class=\"k-header\">'+\n                            that._createButton({ name: \"update\", text: updateText, attr: attr }) +\n                            (options.title || \"Edit\") +\n                            that._createButton({ name: \"canceledit\", text: cancelText, attr: attr }) +\n                        '</div>'+\n                        html +\n                    '</div>');\n                container = that._editContainer = that.editView.element.find(\".k-popup-edit-form\");\n            }\n\n            that.editable = that._editContainer\n                .kendoEditable({\n                    fields: fields,\n                    model: model,\n                    clearContainer: false,\n                    target: that\n                }).data(\"kendoEditable\");\n\n            // TODO: Replace this code with labels and for=\"ID\"\n            if (that._isMobile) {\n                container.find(\"input[type=checkbox],input[type=radio]\")\n                         .parent(\".k-edit-field\")\n                         .addClass(\"k-check\")\n                         .prev(\".k-edit-label\")\n                         .addClass(\"k-check\")\n                         .click(function() {\n                             $(this).next().children(\"input\").click();\n                         });\n            }\n\n            that._openPopUpEditor();\n\n            that.trigger(EDIT, { container: container, model: model });\n        },\n\n        _openPopUpEditor: function() {\n            if (!this._isMobile) {\n                this._editContainer.data(\"kendoWindow\").center().open();\n            } else {\n                this.pane.navigate(this.editView, this._editAnimation);\n            }\n        },\n\n        _createInlineEditor: function(row, model) {\n            var that = this,\n                column,\n                cell,\n                command,\n                fields = [];\n\n\n            if (that.lockedContent) {\n                row = row.add(that._relatedRow(row));\n            }\n\n            row.children(\":not(.k-group-cell,.k-hierarchy-cell)\").each(function() {\n                cell = $(this);\n                column = leafColumns(that.columns)[that.cellIndex(cell)];\n\n                if (!column.command && column.field && (!model.editable || model.editable(column.field))) {\n                    fields.push({ field: column.field, format: column.format, editor: column.editor, values: column.values });\n                    cell.attr(kendo.attr(\"container-for\"), column.field);\n                    cell.empty();\n                } else if (column.command) {\n                    command = getCommand(column.command, \"edit\");\n                    if (command) {\n                        cell.empty();\n\n                        var updateText,\n                            cancelText,\n                            attr;\n\n                        if (isPlainObject(command)) {\n                            if (command.text && isPlainObject(command.text)) {\n                                updateText = command.text.update;\n                                cancelText = command.text.cancel;\n                            }\n\n                            if (command.attr) {\n                                attr = command.attr;\n                            }\n                        }\n\n                        $(that._createButton({ name: \"update\", text: updateText, attr: attr }) +\n                            that._createButton({ name: \"canceledit\", text: cancelText, attr: attr})).appendTo(cell);\n                    }\n                }\n            });\n\n            that._editContainer = row;\n\n            that.editable = new kendo.ui.Editable(row\n                .addClass(\"k-grid-edit-row\"),{\n                    target: that,\n                    fields: fields,\n                    model: model,\n                    clearContainer: false\n                });\n\n            if (row.length > 1) {\n\n                adjustRowHeight(row[0], row[1]);\n                that._applyLockedContainersWidth();\n            }\n\n            that.trigger(EDIT, { container: row, model: model });\n        },\n\n        cancelRow: function() {\n            var that = this,\n                container = that._editContainer,\n                model,\n                tr;\n\n            if (container) {\n                model = that._modelForContainer(container);\n\n                that._destroyEditable();\n\n                that.dataSource.cancelChanges(model);\n\n                if (that._editMode() !== \"popup\") {\n                    that._displayRow(container);\n                } else {\n                    that._displayRow(that.tbody.find(\"[\" + kendo.attr(\"uid\") + \"=\" + model.uid + \"]\"));\n                }\n            }\n        },\n\n        saveRow: function() {\n            var that = this,\n                container = that._editContainer,\n                model = that._modelForContainer(container),\n                editable = that.editable;\n\n            if (container && editable && editable.end() &&\n                !that.trigger(SAVE, { container: container, model: model } )) {\n\n                that.dataSource.sync();\n            }\n        },\n\n        _displayRow: function(row) {\n            var that = this,\n                model = that._modelForContainer(row),\n                related,\n                newRow,\n                nextRow,\n                isSelected = row.hasClass(\"k-state-selected\"),\n                isAlt = row.hasClass(\"k-alt\");\n\n            if (model) {\n\n                if (that.lockedContent) {\n                    related = $((isAlt ? that.lockedAltRowTemplate : that.lockedRowTemplate)(model));\n                    that._relatedRow(row.last()).replaceWith(related);\n                }\n\n                that.angular(\"cleanup\", function(){ return { elements: row.get() }; });\n\n                newRow = $((isAlt ? that.altRowTemplate : that.rowTemplate)(model));\n                row.replaceWith(newRow);\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: newRow.get(),\n                        data: [ { dataItem: model } ]\n                    };\n                });\n\n                if (isSelected && that.options.selectable) {\n                    that.select(newRow.add(related));\n                }\n\n                if (related) {\n                    adjustRowHeight(newRow[0], related[0]);\n                }\n\n                nextRow = newRow.next();\n                if (nextRow.hasClass(\"k-detail-row\") && nextRow.is(\":visible\")) {\n                    newRow.find(\".k-hierarchy-cell .k-icon\")\n                        .removeClass(\"k-plus\")\n                        .addClass(\"k-minus\");\n                }\n            }\n        },\n\n        _showMessage: function(messages, row) {\n            var that = this;\n\n            if (!that._isMobile) {\n                return window.confirm(messages.title);\n            }\n\n            var template = kendo.template('<ul>'+\n                '<li class=\"km-actionsheet-title\">#:title#</li>'+\n                '<li><a href=\"\\\\#\" class=\"k-button k-grid-delete\">#:confirmDelete#</a></li>'+\n            '</ul>');\n\n            var html = $(template(messages)).appendTo(that.view.element);\n\n            var actionSheet = that._actionSheet = new kendo.mobile.ui.ActionSheet(html, {\n                cancel: messages.cancelDelete,\n                cancelTemplate: '<li class=\"km-actionsheet-cancel\"><a class=\"k-button\" href=\"\\\\#\">#:cancel#</a></li>',\n                close: function() {\n                    this.destroy();\n                },\n                command: function(e) {\n                    var item = $(e.currentTarget).parent();\n                    if (!item.hasClass(\"km-actionsheet-cancel\")) {\n                        that._removeRow(row);\n                    }\n                },\n                popup: that._actionSheetPopupOptions\n            });\n\n            actionSheet.open(row);\n\n            return false;\n        },\n\n        _confirmation: function(row) {\n            var that = this,\n                editable = that.options.editable,\n                confirmation = editable === true || typeof editable === STRING ? that.options.messages.editable.confirmation : editable.confirmation;\n\n            if (confirmation !== false && confirmation != null) {\n\n                if (typeof confirmation === FUNCTION) {\n                    confirmation = confirmation(that._modelForContainer(row));\n                }\n\n                return that._showMessage({\n                        confirmDelete: editable.confirmDelete || that.options.messages.editable.confirmDelete,\n                        cancelDelete: editable.cancelDelete || that.options.messages.editable.cancelDelete,\n                        title: confirmation === true ? that.options.messages.editable.confirmation : confirmation\n                    }, row);\n            }\n\n            return true;\n        },\n\n        cancelChanges: function() {\n            this.dataSource.cancelChanges();\n        },\n\n        saveChanges: function() {\n            var that = this;\n\n            if (((that.editable && that.editable.end()) || !that.editable) && !that.trigger(SAVECHANGES)) {\n                that.dataSource.sync();\n            }\n        },\n\n        addRow: function() {\n            var that = this,\n                index,\n                dataSource = that.dataSource,\n                mode = that._editMode(),\n                createAt = that.options.editable.createAt || \"\",\n                pageSize = dataSource.pageSize(),\n                view = dataSource.view() || [];\n\n            if ((that.editable && that.editable.end()) || !that.editable) {\n                if (mode != \"incell\") {\n                    that.cancelRow();\n                }\n\n                index = dataSource.indexOf(view[0]);\n\n                if (createAt.toLowerCase() == \"bottom\") {\n                    index += view.length;\n\n                    if (pageSize && !dataSource.options.serverPaging && pageSize <= view.length) {\n                        index -= 1;\n                    }\n                }\n\n                if (index < 0) {\n                    if (dataSource.page() > dataSource.totalPages()) {\n                        index = (dataSource.page() - 1) * pageSize;\n                    } else {\n                        index = 0;\n                    }\n                }\n\n                var model = dataSource.insert(index, {}),\n                    id = model.uid,\n                    table = that.lockedContent ? that.lockedTable : that.table,\n                    row = table.find(\"tr[\" + kendo.attr(\"uid\") + \"=\" + id + \"]\"),\n                    cell = row.children(\"td:not(.k-group-cell,.k-hierarchy-cell)\").eq(that._firstEditableColumnIndex(row));\n\n                if (mode === \"inline\" && row.length) {\n                    that.editRow(row);\n                } else if (mode === \"popup\") {\n                    that.editRow(model);\n                } else if (cell.length) {\n                    that.editCell(cell);\n                }\n\n                if (createAt.toLowerCase() == \"bottom\" && that.lockedContent) {\n                    //scroll the containers to the bottom\n                    that.lockedContent[0].scrollTop = that.content[0].scrollTop = that.content[0].offsetHeight;\n                }\n            }\n        },\n\n        _firstEditableColumnIndex: function(container) {\n            var that = this,\n                column,\n                columns = leafColumns(that.columns),\n                idx,\n                length,\n                model = that._modelForContainer(container);\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                column = columns[idx];\n\n                if (model && (!model.editable || model.editable(column.field)) && !column.command && column.field) {\n                    return idx;\n                }\n            }\n            return -1;\n        },\n\n        _toolbar: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                toolbar = that.options.toolbar,\n                editable = that.options.editable,\n                container;\n\n            if (toolbar) {\n                container = that.wrapper.find(\".k-grid-toolbar\");\n\n                if (!container.length) {\n                    if (!isFunction(toolbar)) {\n                        toolbar = (typeof toolbar === STRING ? toolbar : that._toolbarTmpl(toolbar).replace(templateHashRegExp, \"\\\\#\"));\n                        toolbar = proxy(kendo.template(toolbar), that);\n                    }\n\n                    container = $('<div class=\"k-header k-grid-toolbar\" />')\n                        .html(toolbar({}))\n                        .prependTo(wrapper);\n\n                    that.angular(\"compile\", function(){\n                        return { elements: container.get() };\n                    });\n                }\n\n                if (editable && editable.create !== false) {\n                    container.on(CLICK + NS, \".k-grid-add\", function(e) { e.preventDefault(); that.addRow(); })\n                        .on(CLICK + NS, \".k-grid-cancel-changes\", function(e) { e.preventDefault(); that.cancelChanges(); })\n                        .on(CLICK + NS, \".k-grid-save-changes\", function(e) { e.preventDefault(); that.saveChanges(); });\n                }\n\n                container.on(CLICK + NS, \".k-grid-excel\", function(e) {\n                    e.preventDefault();\n\n                    that.saveAsExcel();\n                });\n\n                container.on(CLICK + NS, \".k-grid-pdf\", function(e) {\n                    e.preventDefault();\n\n                    that.saveAsPDF();\n                });\n            }\n        },\n\n        _toolbarTmpl: function(commands) {\n            var that = this,\n                idx,\n                length,\n                html = \"\";\n\n            if (isArray(commands)) {\n                for (idx = 0, length = commands.length; idx < length; idx++) {\n                    html += that._createButton(commands[idx]);\n                }\n            }\n            return html;\n        },\n\n        _createButton: function(command) {\n            var template = command.template || COMMANDBUTTONTMPL,\n                commandName = typeof command === STRING ? command : command.name || command.text,\n                className = defaultCommands[commandName] ? defaultCommands[commandName].className : \"k-grid-\" + (commandName || \"\").replace(/\\s/g, \"\"),\n                options = { className: className, text: commandName, imageClass: \"\", attr: \"\", iconClass: \"\" },\n                messages = this.options.messages.commands,\n                attributeClassMatch;\n\n            if (!commandName && !(isPlainObject(command) && command.template))  {\n                throw new Error(\"Custom commands should have name specified\");\n            }\n\n            if (isPlainObject(command)) {\n                if (command.className && inArray(options.className, command.className.split(\" \")) < 0) {\n                    command.className += \" \" + options.className;\n                } else if (command.className === undefined) {\n                    command.className = options.className;\n                }\n\n                if (commandName === \"edit\" && isPlainObject(command.text)) {\n                    command = extend(true, {}, command);\n                    command.text = command.text.edit;\n                }\n\n                if (command.attr) {\n                    if (isPlainObject(command.attr)) {\n                        command.attr = stringifyAttributes(command.attr);\n                    }\n\n                    if (typeof command.attr === STRING) {\n                        attributeClassMatch = command.attr.match(/class=\"(.+?)\"/);\n\n                        if (attributeClassMatch && inArray(attributeClassMatch[1], command.className.split(\" \")) < 0) {\n                            command.className += \" \" + attributeClassMatch[1];\n                        }\n                    }\n                }\n\n                options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] }, command);\n            } else {\n                options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] });\n            }\n\n            return kendo.template(template)(options);\n        },\n\n        _hasFooters: function() {\n            return !!this.footerTemplate ||\n                !!this.groupFooterTemplate ||\n                (this.footer && this.footer.length > 0) ||\n                this.wrapper.find(\".k-grid-footer\").length > 0;\n        },\n\n        _groupable: function() {\n            var that = this;\n\n            if (that._groupableClickHandler) {\n                that.table.add(that.lockedTable).off(CLICK + NS, that._groupableClickHandler);\n            } else {\n                that._groupableClickHandler = function(e) {\n                    var element = $(this),\n                    group = element.closest(\"tr\");\n\n                    if(element.hasClass('k-i-collapse')) {\n                        that.collapseGroup(group);\n                    } else {\n                        that.expandGroup(group);\n                    }\n                    e.preventDefault();\n                    e.stopPropagation();\n                };\n            }\n\n            if (that._isLocked()) {\n                that.lockedTable.on(CLICK + NS, \".k-grouping-row .k-i-collapse, .k-grouping-row .k-i-expand\", that._groupableClickHandler);\n            } else {\n                that.table.on(CLICK + NS, \".k-grouping-row .k-i-collapse, .k-grouping-row .k-i-expand\", that._groupableClickHandler);\n            }\n\n            that._attachGroupable();\n        },\n\n        _attachGroupable: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                groupable = that.options.groupable,\n                draggables = HEADERCELLS + \"[\" + kendo.attr(\"field\") + \"]\",\n                filter = that.content ? \".k-grid-header:first \" + draggables  : \"table:first>.k-grid-header \" + draggables;\n\n            if (groupable && groupable.enabled !== false) {\n\n                if(!wrapper.has(\"div.k-grouping-header\")[0]) {\n                    $(\"<div>&nbsp;</div>\").addClass(\"k-grouping-header\").prependTo(wrapper);\n                }\n\n                if (that.groupable) {\n                    that.groupable.destroy();\n                }\n\n                that.groupable = new Groupable(wrapper, extend({}, groupable, {\n                    draggable: that._draggableInstance,\n                    groupContainer: \">div.k-grouping-header\",\n                    dataSource: that.dataSource,\n                    draggableElements: filter,\n                    filter: filter,\n                    allowDrag: that.options.reorderable\n                }));\n            }\n        },\n\n        _continuousItems: function(filter, cell) {\n            if (!this.lockedContent) {\n                return;\n            }\n\n            var that = this;\n\n            var elements = that.table.add(that.lockedTable);\n\n            var lockedItems = $(filter, elements[0]);\n            var nonLockedItems = $(filter, elements[1]);\n            var columns = cell ? lockedColumns(that.columns).length : 1;\n            var nonLockedColumns = cell ? that.columns.length - columns : 1;\n            var result = [];\n\n            for (var idx = 0; idx < lockedItems.length; idx += columns) {\n                push.apply(result, lockedItems.slice(idx, idx + columns));\n                push.apply(result, nonLockedItems.splice(0, nonLockedColumns));\n            }\n\n            return result;\n        },\n\n        _selectable: function() {\n            var that = this,\n                multi,\n                cell,\n                notString = [],\n                isLocked = that._isLocked(),\n                selectable = that.options.selectable;\n\n            if (selectable) {\n\n                if (that.selectable) {\n                    that.selectable.destroy();\n                }\n\n                selectable = kendo.ui.Selectable.parseOptions(selectable);\n\n                multi = selectable.multiple;\n                cell = selectable.cell;\n\n                if (that._hasDetails()) {\n                    notString[notString.length] = \".k-detail-row\";\n                }\n                if (that.options.groupable || that._hasFooters()) {\n                    notString[notString.length] = \".k-grouping-row,.k-group-footer\";\n                }\n\n                notString = notString.join(\",\");\n\n                if (notString !== \"\") {\n                    notString = \":not(\" + notString + \")\";\n                }\n\n                var elements = that.table;\n                if (isLocked) {\n                    elements = elements.add(that.lockedTable);\n                }\n\n                var filter = \">\" + (cell ? SELECTION_CELL_SELECTOR : \"tbody>tr\" + notString);\n                that.selectable = new kendo.ui.Selectable(elements, {\n                    filter: filter,\n                    aria: true,\n                    multiple: multi,\n                    change: function() {\n                        that.trigger(CHANGE);\n                    },\n                    useAllItems: isLocked && multi && cell,\n                    relatedTarget: function(items) {\n                        if (cell || !isLocked) {\n                            return;\n                        }\n\n                        var related;\n                        var result = $();\n                        for (var idx = 0, length = items.length; idx < length; idx ++) {\n                            related = that._relatedRow(items[idx]);\n\n                            if (inArray(related[0], items) < 0) {\n                                result = result.add(related);\n                            }\n                        }\n\n                        return result;\n                    },\n                    continuousItems: function() {\n                        return that._continuousItems(filter, cell);\n                    }\n                });\n\n                if (that.options.navigatable) {\n                    elements.on(\"keydown\" + NS, function(e) {\n                        var current = that.current();\n                        var target = e.target;\n                        if (e.keyCode === keys.SPACEBAR && $.inArray(target, elements) > -1 &&\n                            !current.is(\".k-edit-cell,.k-header\") &&\n                            current.parent().is(\":not(.k-grouping-row,.k-detail-row,.k-group-footer)\")) {\n                            e.preventDefault();\n                            e.stopPropagation();\n                            current = cell ? current : current.parent();\n\n                            if (isLocked && !cell) {\n                                current = current.add(that._relatedRow(current));\n                            }\n\n                            if(multi) {\n                                if(!e.ctrlKey) {\n                                    that.selectable.clear();\n                                } else {\n                                    if(current.hasClass(SELECTED)) {\n                                        current.removeClass(SELECTED);\n                                        that.trigger(CHANGE);\n                                        return;\n                                    }\n                                }\n                            } else {\n                                that.selectable.clear();\n                            }\n\n                            that.selectable.value(current);\n                        }\n                    });\n                }\n            }\n        },\n\n        _relatedRow: function(row) {\n            var lockedTable = this.lockedTable;\n            row = $(row);\n\n            if (!lockedTable) {\n                return row;\n            }\n\n            var table = row.closest(this.table.add(this.lockedTable));\n            var index = table.find(\">tbody>tr\").index(row);\n\n            table = table[0] === this.table[0] ? lockedTable : this.table;\n\n            return table.find(\">tbody>tr\").eq(index);\n        },\n\n        clearSelection: function() {\n            var that = this;\n            that.selectable.clear();\n            that.trigger(CHANGE);\n        },\n\n        select: function(items) {\n            var that = this,\n                selectable = that.selectable;\n\n            items = $(items);\n            if(items.length) {\n                if(!selectable.options.multiple) {\n                    selectable.clear();\n                    items = items.first();\n                }\n\n                if (that._isLocked()) {\n                    items = items.add(items.map(function() {\n                        return that._relatedRow(this);\n                    }));\n                }\n\n                selectable.value(items);\n                return;\n            }\n\n            return selectable.value();\n        },\n\n        current: function(element) {\n            var that = this,\n                scrollable = that.options.scrollable,\n                current = that._current,\n                table = that.table.add(that.thead.parent());\n\n            if (element !== undefined && element.length) {\n                if (!current || current[0] !== element[0]) {\n                    if (current) {\n                        current.removeClass(FOCUSED).removeAttr(\"id\");\n                        table.removeAttr(\"aria-activedescendant\");\n                    }\n\n                    element.attr(\"id\", that._cellId);\n                    that._current = element.addClass(FOCUSED);\n\n                    table.attr(\"aria-activedescendant\", that._cellId);\n\n                    if(element.length && scrollable) {\n                        var content = element.closest(\"table\").parent();\n                        if (content.is(\".k-grid-content\")) {\n                            that._scrollTo(element.parent()[0], that.content[0]);\n                        } else if (content.is(\".k-grid-content-locked\")) {\n                            that._scrollTo(that._relatedRow(element.parent())[0], that.content[0]);\n                            that.lockedContent[0].scrollTop = that.content[0].scrollTop;\n                        }\n\n                        if (!content.is(\".k-grid-content-locked,.k-grid-header-locked\")) {\n                            if (scrollable.virtual) {\n                                that._scrollTo(element[0], that.content.find(\">.k-virtual-scrollable-wrap\")[0]);\n                            } else {\n                                that._scrollTo(element[0], that.content[0]);\n                            }\n                        }\n                    }\n                }\n            }\n\n            return that._current;\n        },\n\n        _removeCurrent: function() {\n            if (this._current) {\n                this._current.removeClass(FOCUSED);\n                this._current = null;\n            }\n        },\n\n        _scrollTo: function(element, container) {\n            var elementToLowercase = element.tagName.toLowerCase(),\n                isHorizontal =  elementToLowercase === \"td\" || elementToLowercase === \"th\",\n                elementOffset = element[isHorizontal ? \"offsetLeft\" : \"offsetTop\"],\n                elementOffsetDir = element[isHorizontal ? \"offsetWidth\" : \"offsetHeight\"],\n                containerScroll = container[isHorizontal ? \"scrollLeft\" : \"scrollTop\"],\n                containerOffsetDir = container[isHorizontal ? \"clientWidth\" : \"clientHeight\"],\n                bottomDistance = elementOffset + elementOffsetDir,\n                result = 0;\n\n                if (containerScroll > elementOffset) {\n                    result = elementOffset;\n                } else if (bottomDistance > (containerScroll + containerOffsetDir)) {\n                    if (elementOffsetDir <= containerOffsetDir) {\n                        result = (bottomDistance - containerOffsetDir);\n                    } else {\n                        result = elementOffset;\n                    }\n                } else {\n                    result = containerScroll;\n                }\n                container[isHorizontal ? \"scrollLeft\" : \"scrollTop\"] = result;\n        },\n\n        _navigatable: function() {\n            var that = this,\n                currentProxy = proxy(that.current, that),\n                table = that.table.add(that.lockedTable),\n                headerTable = that.thead.parent().add($(\">table\", that.lockedHeader)),\n                isLocked = that._isLocked(),\n                dataTable = table,\n                isRtl = kendo.support.isRtl(that.element);\n\n            if (!that.options.navigatable) {\n                return;\n            }\n\n            if (that.options.scrollable) {\n                dataTable = table.add(headerTable);\n                headerTable.attr(TABINDEX, -1);\n            }\n\n            dataTable.off(\"mousedown\" + NS + \" focus\" + NS + \" focusout\" + NS + \" keydown\" + NS);\n\n            headerTable.on(\"keydown\" + NS, function(e) {\n                if (e.altKey && e.keyCode == keys.DOWN) {\n                    currentProxy().find(\".k-grid-filter, .k-header-column-menu\").click();\n                    e.stopImmediatePropagation();\n                }\n            })\n            .find(\"a.k-link\").attr(\"tabIndex\", -1);\n\n            table\n            .attr(TABINDEX, math.max(table.attr(TABINDEX) || 0, 0))\n            .on(\"mousedown\" + NS + \" keydown\" + NS, \".k-detail-cell\", function(e) {\n                if (e.target !== e.currentTarget) {\n                    e.stopImmediatePropagation();\n                }\n            });\n\n            dataTable\n            .on((kendo.support.touch ? \"touchstart\" + NS : \"mousedown\" + NS), NAVROW + \">\" + NAVCELL, proxy(tableClick, that))\n            .on(\"focus\" + NS, function() {\n                if (kendo.support.touch) {\n                    return;\n                }\n\n                var current = currentProxy();\n                if (current && current.is(\":visible\")) {\n                    current.addClass(FOCUSED);\n                } else {\n                    currentProxy($(this).find(FIRSTNAVITEM));\n                }\n\n                table.attr(TABINDEX, -1);\n                headerTable.attr(TABINDEX, -1);\n                $(this).attr(TABINDEX, 0);\n            })\n            .on(\"focusout\" + NS, function() {\n                var current = currentProxy();\n                if (current) {\n                    current.removeClass(FOCUSED);\n                }\n            })\n            .on(\"keydown\" + NS, function(e) {\n                var key = e.keyCode,\n                    handled = false,\n                    canHandle = !e.isDefaultPrevented() && !$(e.target).is(\":button,a,:input,a>.k-icon\"),\n                    pageable = that.options.pageable,\n                    dataSource = that.dataSource,\n                    isInCell = that._editMode() == \"incell\",\n                    active,\n                    currentIndex,\n                    row,\n                    index,\n                    tableToFocus,\n                    shiftKey = e.shiftKey,\n                    relatedRow = proxy(that._relatedRow, that),\n                    current = currentProxy();\n\n                if (current && current.is(\"th\")) {\n                    canHandle = true;\n                }\n\n                if (canHandle && key == keys.UP) {\n                    currentProxy(moveVertical(current, e.currentTarget, table, headerTable, true, lockedColumns(that.columns).length));\n                    handled = true;\n                } else if (canHandle && key == keys.DOWN) {\n                    currentProxy(moveVertical(current, e.currentTarget, table, headerTable, false, lockedColumns(that.columns).length));\n                    handled = true;\n                } else if (canHandle && key == (isRtl ? keys.RIGHT : keys.LEFT)) {\n                    currentProxy(moveLeft(current, e.currentTarget, table, headerTable, relatedRow));\n                    handled = true;\n                } else if (canHandle && key == (isRtl ? keys.LEFT : keys.RIGHT)) {\n                    currentProxy(moveRight(current, e.currentTarget, table, headerTable, relatedRow));\n                    handled = true;\n                } else if (canHandle && pageable && keys.PAGEDOWN == key) {\n                    dataSource.page(dataSource.page() + 1);\n                    handled = true;\n                } else if (canHandle && pageable && keys.PAGEUP == key) {\n                    dataSource.page(dataSource.page() - 1);\n                    handled = true;\n                } else if (key == keys.ENTER || keys.F2 == key) {\n                    current = current ? current : table.find(FIRSTNAVITEM);\n\n                    if (!current.length) {\n                        return;\n                    }\n\n                    if (!$(e.target).is(\"table\") && !$.contains(current[0], e.target)) {\n                        current = $(e.target).closest(\"[role=gridcell]\");\n                    }\n\n                    if (current.is(\"th\")) {\n                        current.find(\".k-link\").click();\n                        handled = true;\n                    } else if (current.parent().is(\".k-master-row,.k-grouping-row\")) {\n                        current.parent().find(\".k-icon:first\").click();\n                        handled = true;\n                    } else {\n                        var focusable = current.find(\":kendoFocusable:first\");\n                        if (!current.hasClass(\"k-edit-cell\") && focusable[0] && current.hasClass(\"k-state-focused\")) {\n                            focusable.focus();\n                            handled = true;\n                        } else if (that.options.editable && !$(e.target).is(\":button,.k-button,textarea\")) {\n                            var container = $(e.target).closest(\"[role=gridcell]\");\n                            if (!container[0]) {\n                                container = current;\n                            }\n\n                            that._handleEditing(container, false, isInCell ? e.currentTarget : table[0]);\n                            handled = true;\n                        }\n                    }\n                } else if (keys.ESC == key) {\n                    active = activeElement();\n                    if (current && $.contains(current[0], active) && !current.hasClass(\"k-edit-cell\") && !current.parent().hasClass(\"k-grid-edit-row\")) {\n                        focusTable(e.currentTarget, true);\n                        handled = true;\n                    } else if (that._editContainer && (!current || that._editContainer.has(current[0]) || current[0] === that._editContainer[0])) {\n                        if (isInCell) {\n                            that.closeCell(true);\n                        } else {\n                            currentIndex = $(current).parent().index();\n                            if (active) {\n                                active.blur();\n                            }\n                            that.cancelRow();\n                            if (currentIndex >= 0) {\n                                that.current(table.find(\">tbody>tr\").eq(currentIndex).children().filter(NAVCELL).first());\n                            }\n                        }\n\n                        if (browser.msie && browser.version < 9) {\n                            document.body.focus();\n                        }\n                        focusTable(isInCell ? e.currentTarget : table[0], true);\n                        handled = true;\n                    }\n                } else if (keys.TAB == key) {\n                    var cell;\n\n                    current = $(current);\n                    if (that.options.editable && isInCell) {\n                         cell = $(activeElement()).closest(\".k-edit-cell\");\n\n                         if (cell[0] && cell[0] !== current[0]) {\n                             current = cell;\n                         }\n                    }\n\n                    cell = tabNext(current, e.currentTarget, table, relatedRow, shiftKey);\n\n                    if (!current.is(\"th\") && cell.length && that.options.editable && isInCell) {\n                        that._handleEditing(current, cell, cell.closest(table));\n                        handled = true;\n                    }\n                }\n\n                if (handled) {\n                    //prevent browser scrolling\n                    e.preventDefault();\n                    //required in hierarchy\n                    e.stopPropagation();\n                }\n            });\n        },\n\n        _handleEditing: function(current, next, table) {\n            var that = this,\n                active = $(activeElement()),\n                mode = that._editMode(),\n                isIE = browser.msie,\n                oldIE = isIE && browser.version < 9,\n                editContainer = that._editContainer,\n                focusable,\n                isEdited;\n\n            table = $(table);\n            if (mode == \"incell\") {\n                isEdited = current.hasClass(\"k-edit-cell\");\n            } else {\n                isEdited = current.parent().hasClass(\"k-grid-edit-row\");\n            }\n\n            if (that.editable) {\n                if ($.contains(editContainer[0], active[0])) {\n                    if (browser.opera || oldIE) {\n                        active.change().triggerHandler(\"blur\");\n                    } else {\n                        active.blur();\n                        if (isIE) {\n                            //IE10 with jQuery 1.9.x does not trigger blur handler\n                            //numeric textbox does trigger change\n                            active.blur();\n                        }\n                    }\n                }\n\n                if (!that.editable) {\n                    focusTable(table);\n                    return;\n                }\n\n                if (that.editable.end()) {\n                    if (mode == \"incell\") {\n                        that.closeCell();\n                    } else {\n                        that.saveRow();\n                        isEdited = true;\n                    }\n                } else {\n                    if (mode == \"incell\") {\n                        that.current(editContainer);\n                    } else {\n                        that.current(editContainer.children().filter(DATA_CELL).first());\n                    }\n                    focusable = editContainer.find(\":kendoFocusable:first\")[0];\n                    if (focusable) {\n                        focusable.focus();\n                    }\n                    return;\n                }\n            }\n\n            if (next) {\n                that.current(next);\n            }\n\n            if (oldIE) {\n                document.body.focus();\n            }\n            focusTable(table, true);\n            if ((!isEdited && !next) || next) {\n                if (mode == \"incell\") {\n                    that.editCell(that.current());\n                } else {\n                    that.editRow(that.current().parent());\n                }\n            }\n        },\n\n        _wrapper: function() {\n            var that = this,\n                table = that.table,\n                height = that.options.height,\n                wrapper = that.element;\n\n            if (!wrapper.is(\"div\")) {\n               wrapper = wrapper.wrap(\"<div/>\").parent();\n            }\n\n            that.wrapper = wrapper.addClass(\"k-grid k-widget\");\n\n            if (height) {\n                that.wrapper.css(HEIGHT, height);\n                table.css(HEIGHT, \"auto\");\n            }\n\n            that._initMobile();\n        },\n\n        _initMobile: function() {\n            var options = this.options;\n            var that = this;\n\n            this._isMobile = (options.mobile === true && kendo.support.mobileOS) ||\n                                options.mobile === \"phone\" ||\n                                options.mobile === \"tablet\";\n\n            if (this._isMobile) {\n                var html = this.wrapper.addClass(\"k-grid-mobile\").wrap(\n                        '<div data-' + kendo.ns + 'role=\"view\" ' +\n                        'data-' + kendo.ns + 'init-widgets=\"false\"></div>'\n                    )\n                    .parent();\n\n                this.pane = kendo.mobile.ui.Pane.wrap(html);\n                this.view = this.pane.view();\n                this._actionSheetPopupOptions = $(document.documentElement).hasClass(\"km-root\") ? { modal: false } : {\n                    align: \"bottom center\",\n                    position: \"bottom center\",\n                    effect: \"slideIn:up\"\n                };\n\n                if (options.height) {\n                    this.pane.element.parent().css(HEIGHT, options.height);\n                }\n\n                this._editAnimation = \"slide\";\n\n                this.view.bind(\"show\", function() {\n                    if (that._isLocked()) {\n                        that._updateTablesWidth();\n                        that._applyLockedContainersWidth();\n                        that._syncLockedContentHeight();\n                        that._syncLockedHeaderHeight();\n                        that._syncLockedFooterHeight();\n                    }\n                });\n            }\n        },\n\n        _tbody: function() {\n            var that = this,\n                table = that.table,\n                tbody;\n\n            tbody = table.find(\">tbody\");\n\n            if (!tbody.length) {\n                tbody = $(\"<tbody/>\").appendTo(table);\n            }\n\n            that.tbody = tbody.attr(\"role\", \"rowgroup\");\n        },\n\n        _scrollable: function() {\n            var that = this,\n                header,\n                table,\n                options = that.options,\n                scrollable = options.scrollable,\n                hasVirtualScroll = scrollable !== true && scrollable.virtual && !that.virtualScrollable,\n                scrollbar = !kendo.support.kineticScrollNeeded || hasVirtualScroll ? kendo.support.scrollbar() : 0;\n\n            if (scrollable) {\n                header = that.wrapper.children(\".k-grid-header\");\n\n                if (!header[0]) {\n                    header = $('<div class=\"k-grid-header\" />').insertBefore(that.table);\n                }\n\n                // workaround for IE issue where scroll is not raised if container is same width as the scrollbar\n                header.css((isRtl ? \"padding-left\" : \"padding-right\"), scrollable.virtual ? scrollbar + 1 : scrollbar);\n                table = $('<table role=\"grid\" />');\n                if (isIE7) {\n                    table.attr(\"cellspacing\", 0);\n                }\n\n                table.width(that.table[0].style.width);\n\n                table.append(that.thead);\n                header.empty().append($('<div class=\"k-grid-header-wrap\" />').append(table));\n\n\n                that.content = that.table.parent();\n\n                if (that.content.is(\".k-virtual-scrollable-wrap, .km-scroll-container\")) {\n                    that.content = that.content.parent();\n                }\n\n                if (!that.content.is(\".k-grid-content, .k-virtual-scrollable-wrap\")) {\n                    that.content = that.table.wrap('<div class=\"k-grid-content\" />').parent();\n                }\n                if (hasVirtualScroll) {\n                    that.virtualScrollable = new VirtualScrollable(that.content, {\n                        dataSource: that.dataSource,\n                        itemHeight: function() { return that._averageRowHeight(); }\n                    });\n                }\n\n                that.scrollables = header.children(\".k-grid-header-wrap\");\n\n                // the footer may exists if rendered from the server\n                var footer = that.wrapper.find(\".k-grid-footer\");\n\n                if (footer.length) {\n                    that.scrollables = that.scrollables.add(footer.children(\".k-grid-footer-wrap\"));\n                }\n\n                if (scrollable.virtual) {\n                    that.content.find(\">.k-virtual-scrollable-wrap\").unbind(\"scroll\" + NS).bind(\"scroll\" + NS, function () {\n                        that.scrollables.scrollLeft(this.scrollLeft);\n                        if (that.lockedContent) {\n                            that.lockedContent[0].scrollTop = this.scrollTop;\n                        }\n                    });\n                } else {\n                    that.content.unbind(\"scroll\" + NS).bind(\"scroll\" + NS, function () {\n                        that.scrollables.scrollLeft(this.scrollLeft);\n                        if (that.lockedContent) {\n                            that.lockedContent[0].scrollTop = this.scrollTop;\n                        }\n                    });\n\n                    var touchScroller = that.content.data(\"kendoTouchScroller\");\n                    if (touchScroller) {\n                        touchScroller.destroy();\n                    }\n\n                    touchScroller = kendo.touchScroller(that.content);\n                    if (touchScroller && touchScroller.movable) {\n                        that.touchScroller = touchScroller;\n                        touchScroller.movable.bind(\"change\", function(e) {\n                            that.scrollables.scrollLeft(-e.sender.x);\n                            if (that.lockedContent) {\n                                that.lockedContent.scrollTop(-e.sender.y);\n                            }\n                        });\n\n                        that.one(DATABOUND, function (e) {\n                            e.sender.wrapper.addClass(\"k-grid-backface\");\n                        });\n                    }\n                }\n            }\n        },\n\n        _setContentWidth: function() {\n            var that = this,\n                hiddenDivClass = 'k-grid-content-expander',\n                hiddenDiv = '<div class=\"' + hiddenDivClass + '\"></div>',\n                resizable = that.resizable,\n                expander;\n\n            if (that.options.scrollable && that.wrapper.is(\":visible\")) {\n                expander = that.table.parent().children('.' + hiddenDivClass);\n                that._setContentWidthHandler = proxy(that._setContentWidth, that);\n                if (!that.dataSource || !that.dataSource.view().length) {\n                    if (!expander[0]) {\n                        expander = $(hiddenDiv).appendTo(that.table.parent());\n                        if (resizable) {\n                            resizable.bind(\"resize\", that._setContentWidthHandler);\n                        }\n                    }\n                    if (that.thead) {\n                        expander.width(that.thead.width());\n                    }\n                } else if (expander[0]) {\n                    expander.remove();\n                    if (resizable) {\n                        resizable.unbind(\"resize\", that._setContentWidthHandler);\n                    }\n                }\n\n                that._applyLockedContainersWidth();\n           }\n        },\n\n        _applyLockedContainersWidth: function() {\n            if (this.options.scrollable && this.lockedHeader) {\n                var headerTable = this.thead.parent(),\n                    headerWrap = headerTable.parent(),\n                    contentWidth = this.wrapper[0].clientWidth,\n                    groups = this._groups(),\n                    scrollbar = kendo.support.scrollbar(),\n                    cols = this.lockedHeader.find(\">table>colgroup>col:not(.k-group-col, .k-hierarchy-col)\"),\n                    nonLockedCols = headerTable.find(\">colgroup>col:not(.k-group-col, .k-hierarchy-col)\"),\n                    width = columnsWidth(cols),\n                    nonLockedColsWidth = columnsWidth(nonLockedCols),\n                    footerWrap;\n\n                if (groups > 0) {\n                    width += this.lockedHeader.find(\".k-group-cell:first\").outerWidth() * groups;\n                }\n\n                if (width >= contentWidth) {\n                    width = contentWidth - 3 * scrollbar;\n                }\n\n                this.lockedHeader\n                    .add(this.lockedContent)\n                    .width(width);\n\n                headerWrap[0].style.width = headerWrap.parent().width() - width - 2 + \"px\";\n\n                headerTable.add(this.table).width(nonLockedColsWidth);\n\n                if (this.virtualScrollable) {\n                    contentWidth -= scrollbar;\n                }\n\n                this.content[0].style.width = contentWidth - width - 2 + \"px\";\n\n                if (this.lockedFooter && this.lockedFooter.length) {\n                    this.lockedFooter.width(width);\n                    footerWrap = this.footer.find(\".k-grid-footer-wrap\");\n                    footerWrap[0].style.width = headerWrap[0].clientWidth + \"px\";\n                    footerWrap.children().first().width(nonLockedColsWidth);\n                }\n            }\n        },\n\n        _setContentHeight: function() {\n            var that = this,\n                options = that.options,\n                height = that.wrapper.innerHeight(),\n                header = that.wrapper.children(\".k-grid-header\"),\n                scrollbar = kendo.support.scrollbar();\n\n            if (options.scrollable && that.wrapper.is(\":visible\")) {\n\n                height -= header.outerHeight();\n\n                if (that.pager) {\n                    height -= that.pager.element.outerHeight();\n                }\n\n                if(options.groupable) {\n                    height -= that.wrapper.children(\".k-grouping-header\").outerHeight();\n                }\n\n                if(options.toolbar) {\n                    height -= that.wrapper.children(\".k-grid-toolbar\").outerHeight();\n                }\n\n                if (that.footerTemplate) {\n                    height -= that.wrapper.children(\".k-grid-footer\").outerHeight();\n                }\n\n                var isGridHeightSet = function(el) {\n                    var initialHeight, newHeight;\n                    if (el[0].style.height) {\n                        return true;\n                    } else {\n                        initialHeight = el.height();\n                    }\n\n                    el.height(\"auto\");\n                    newHeight = el.height();\n\n                    if (initialHeight != newHeight) {\n                        el.height(\"\");\n                        return true;\n                    }\n                    el.height(\"\");\n                    return false;\n                };\n\n                if (isGridHeightSet(that.wrapper)) { // set content height only if needed\n                    if (height > scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n                        if (that.lockedContent) {\n                            scrollbar = that.table[0].offsetWidth > that.table.parent()[0].clientWidth ? scrollbar : 0;\n                            that.lockedContent.height(height - scrollbar);\n                        }\n\n                        that.content.height(height);\n                    } else {\n                        that.content.height(scrollbar * 2 + 1);\n                    }\n                }\n            }\n        },\n\n        _averageRowHeight: function() {\n            var that = this,\n                itemsCount = that._items(that.tbody).length,\n                rowHeight = that._rowHeight;\n\n            if (itemsCount === 0) {\n                return rowHeight;\n            }\n\n            if (!that._rowHeight) {\n                that._rowHeight = rowHeight = that.table.outerHeight() / itemsCount;\n                that._sum = rowHeight;\n                that._measures = 1;\n            }\n\n            var currentRowHeight = that.table.outerHeight() / itemsCount;\n\n            if (rowHeight !== currentRowHeight) {\n                that._measures ++;\n                that._sum += currentRowHeight;\n                that._rowHeight = that._sum / that._measures;\n            }\n            return rowHeight;\n        },\n\n        _dataSource: function() {\n            var that = this,\n                options = that.options,\n                pageable,\n                dataSource = options.dataSource;\n\n            dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n            if (isPlainObject(dataSource)) {\n                extend(dataSource, { table: that.table, fields: that.columns });\n\n                pageable = options.pageable;\n\n                if (isPlainObject(pageable) && pageable.pageSize !== undefined) {\n                    dataSource.pageSize = pageable.pageSize;\n                }\n            }\n\n            if (that.dataSource && that._refreshHandler) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler)\n                                .unbind(PROGRESS, that._progressHandler)\n                                .unbind(ERROR, that._errorHandler);\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._requestStart, that);\n                that._errorHandler = proxy(that._error, that);\n            }\n\n            that.dataSource = DataSource.create(dataSource)\n                                .bind(CHANGE, that._refreshHandler)\n                                .bind(PROGRESS, that._progressHandler)\n                                .bind(ERROR, that._errorHandler);\n        },\n\n        _error: function() {\n            this._progress(false);\n        },\n\n        _requestStart: function() {\n            this._progress(true);\n        },\n\n        _modelChange: function(e) {\n            var that = this,\n                tbody = that.tbody,\n                model = e.model,\n                row = that.tbody.find(\"tr[\" + kendo.attr(\"uid\") + \"=\" + model.uid +\"]\"),\n                relatedRow,\n                cell,\n                column,\n                isAlt = row.hasClass(\"k-alt\"),\n                tmp,\n                idx = that._items(tbody).index(row),\n                isLocked = that.lockedContent,\n                selectable,\n                selectableRow,\n                childCells,\n                originalCells,\n                length;\n\n            if (isLocked) {\n                relatedRow = that._relatedRow(row);\n            }\n\n            if (row.add(relatedRow).children(\".k-edit-cell\").length && !that.options.rowTemplate) {\n                row.add(relatedRow).children(\":not(.k-group-cell,.k-hierarchy-cell)\").each(function() {\n                    cell = $(this);\n                    column = leafColumns(that.columns)[that.cellIndex(cell)];\n\n                    if (column.field === e.field) {\n                        if (!cell.hasClass(\"k-edit-cell\")) {\n                            that._displayCell(cell, column, model);\n                            $('<span class=\"k-dirty\"/>').prependTo(cell);\n                        } else {\n                            cell.addClass(\"k-dirty-cell\");\n                        }\n                    }\n                });\n\n            } else if (!row.hasClass(\"k-grid-edit-row\")) {\n\n                selectableRow = $().add(row);\n\n                if (isLocked) {\n                    tmp = (isAlt ? that.lockedAltRowTemplate : that.lockedRowTemplate)(model);\n\n                    selectableRow = selectableRow.add(relatedRow);\n\n                    relatedRow.replaceWith(tmp);\n                }\n\n                that.angular(\"cleanup\", function(){ return { elements: selectableRow.get() }; });\n\n                tmp = (isAlt ? that.altRowTemplate : that.rowTemplate)(model);\n\n                row.replaceWith(tmp);\n\n                tmp = that._items(tbody).eq(idx);\n\n                var angularData = [ { dataItem: model } ];\n\n                if (isLocked) {\n                    row = row.add(relatedRow);\n\n                    relatedRow = that._relatedRow(tmp)[0];\n                    adjustRowHeight(tmp[0], relatedRow);\n\n                    tmp = tmp.add(relatedRow);\n                    angularData.push({ dataItem: model });\n                }\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: tmp.get(),\n                        data: angularData\n                     };\n                });\n\n                selectable = that.options.selectable;\n                if (selectable && row.hasClass(\"k-state-selected\")) {\n                   that.select(tmp);\n                }\n\n                originalCells = selectableRow.children(\":not(.k-group-cell,.k-hierarchy-cell)\");\n                childCells = tmp.children(\":not(.k-group-cell,.k-hierarchy-cell)\");\n\n                for (idx = 0, length = that.columns.length; idx < length; idx++) {\n                    column = that.columns[idx];\n\n                    cell = childCells.eq(idx);\n                    if (selectable && originalCells.eq(idx).hasClass(\"k-state-selected\")) {\n                        cell.addClass(\"k-state-selected\");\n                    }\n\n                    if (column.field === e.field) {\n                       $('<span class=\"k-dirty\"/>').prependTo(cell);\n                    }\n                }\n\n                that.trigger(\"itemChange\", { item: tmp, data: model, ns: ui });\n            }\n        },\n\n        _pageable: function() {\n            var that = this,\n                wrapper,\n                pageable = that.options.pageable;\n\n            if (pageable) {\n                wrapper = that.wrapper.children(\"div.k-grid-pager\");\n\n                if (!wrapper.length) {\n                    wrapper = $('<div class=\"k-pager-wrap k-grid-pager\"/>').appendTo(that.wrapper);\n                }\n\n                if (that.pager) {\n                    that.pager.destroy();\n                }\n\n                if (typeof pageable === \"object\" && pageable instanceof kendo.ui.Pager) {\n                    that.pager = pageable;\n                } else {\n                    that.pager = new kendo.ui.Pager(wrapper, extend({}, pageable, { dataSource: that.dataSource }));\n                }\n            }\n        },\n\n        _footer: function() {\n            var that = this,\n                aggregates = that.dataSource.aggregates(),\n                html = \"\",\n                footerTemplate = that.footerTemplate,\n                options = that.options,\n                footerWrap,\n                footer = that.footer || that.wrapper.find(\".k-grid-footer\");\n\n            if (footerTemplate) {\n                aggregates = !isEmptyObject(aggregates) ? aggregates : buildEmptyAggregatesObject(that.dataSource.aggregate());\n\n                html = $(that._wrapFooter(footerTemplate(aggregates)));\n\n                if (footer.length) {\n                    var tmp = html;\n\n                    that.angular(\"cleanup\", function(){\n                        return { elements: footer.get() };\n                    });\n\n                    footer.replaceWith(tmp);\n                    footer = that.footer = tmp;\n                } else {\n                    if (options.scrollable) {\n                        footer = that.footer = options.pageable ? html.insertBefore(that.wrapper.children(\"div.k-grid-pager\")) : html.appendTo(that.wrapper);\n                    } else {\n                        footer = that.footer = html.insertBefore(that.tbody);\n                    }\n                }\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: footer.find(\"td\").get(),\n                        data: map(that.columns, function(col, i){\n                            return {\n                                column: col,\n                                aggregate: aggregates[col.field]\n                            };\n                        })\n                    };\n                });\n\n            } else if (footer && !that.footer) {\n                that.footer = footer;\n            }\n\n            if (footer.length) {\n                if (options.scrollable) {\n                    footerWrap = footer.attr(\"tabindex\", -1).children(\".k-grid-footer-wrap\");\n                    that.scrollables = that.scrollables\n                        .filter(function() { return !$(this).is(\".k-grid-footer-wrap\"); })\n                        .add(footerWrap);\n                }\n\n                if (that._footerWidth) {\n                    footer.find(\"table\").css('width', that._footerWidth);\n                }\n\n                if (footerWrap) {\n                    var offset = that.content.scrollLeft();\n\n                    var hasVirtualScroll = options.scrollable !== true && options.scrollable.virtual && !that.virtualScrollable;\n                    if(hasVirtualScroll){\n                        offset = that.wrapper.find('.k-virtual-scrollable-wrap').scrollLeft();\n                    }\n                    footerWrap.scrollLeft(offset);\n                }\n            }\n\n            if (that.lockedContent) {\n                that._appendLockedColumnFooter();\n                that._applyLockedContainersWidth();\n                that._syncLockedFooterHeight();\n            }\n        },\n\n        _wrapFooter: function(footerRow) {\n            var that = this,\n                html = \"\",\n                scrollbar = !kendo.support.mobileOS ? kendo.support.scrollbar() : 0;\n\n            if (that.options.scrollable) {\n                html = $('<div class=\"k-grid-footer\"><div class=\"k-grid-footer-wrap\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><tbody>' + footerRow + '</tbody></table></div></div>');\n                that._appendCols(html.find(\"table\"));\n                html.css((isRtl ? \"padding-left\" : \"padding-right\"), scrollbar); // Update inner fix.\n\n                return html;\n            }\n\n            return '<tfoot class=\"k-grid-footer\">' + footerRow + '</tfoot>';\n        },\n\n        _columnMenu: function() {\n            var that = this,\n                menu,\n                columns = leafColumns(that.columns),\n                column,\n                options = that.options,\n                columnMenu = options.columnMenu,\n                menuOptions,\n                sortable,\n                filterable,\n                cells,\n                hasMultiColumnHeaders = grep(that.columns, function(item) {\n                    return item.columns !== undefined;\n                }).length > 0,\n                isMobile = this._isMobile,\n                initCallback = function(e) {\n                    that.trigger(COLUMNMENUINIT, { field: e.field, container: e.container });\n                },\n                closeCallback = function(element) {\n                    focusTable(element.closest(\"table\"), true);\n                },\n                $angular = options.$angular;\n\n            if (columnMenu) {\n                if (typeof columnMenu == \"boolean\") {\n                    columnMenu = {};\n                }\n\n                cells = leafDataCells(that.thead);\n\n                for (var idx = 0, length = cells.length; idx < length; idx++) {\n                    column = columns[idx];\n                    var cell = cells.eq(idx);\n\n                    if (!column.command && (column.field || cell.attr(\"data-\" + kendo.ns + \"field\"))) {\n                        menu = cell.data(\"kendoColumnMenu\");\n                        if (menu) {\n                            menu.destroy();\n                        }\n\n                        sortable = column.sortable !== false && columnMenu.sortable !== false && options.sortable !== false ? extend({}, options.sortable, {\n                            compare: (column.sortable || {}).compare\n                        }) : false;\n\n                        filterable = options.filterable && column.filterable !== false && columnMenu.filterable !== false ? extend({ pane: that.pane }, column.filterable, options.filterable) : false;\n                        menuOptions = {\n                            dataSource: that.dataSource,\n                            values: column.values,\n                            columns: columnMenu.columns,\n                            sortable: sortable,\n                            filterable: filterable,\n                            messages: columnMenu.messages,\n                            owner: that,\n                            closeCallback: closeCallback,\n                            init: initCallback,\n                            pane: that.pane,\n                            filter: isMobile ? \":not(.k-column-active)\" : \"\",\n                            lockedColumns: !hasMultiColumnHeaders && column.lockable !== false && lockedColumns(columns).length > 0\n                        };\n\n                        if ($angular) {\n                            menuOptions.$angular = $angular;\n                        }\n\n                        cell.kendoColumnMenu(menuOptions);\n                    }\n                }\n            }\n        },\n\n        _headerCells: function() {\n            return this.thead.find(\"th\").filter(function() {\n                var th = $(this);\n                return !th.hasClass(\"k-group-cell\") && !th.hasClass(\"k-hierarchy-cell\");\n            });\n        },\n\n        _filterable: function() {\n            var that = this,\n                columns = leafColumns(that.columns),\n                filterMenu,\n                cells,\n                cell,\n                filterInit = function(e) {\n                    that.trigger(FILTERMENUINIT, { field: e.field, container: e.container });\n                },\n                closeCallback = function(element) {\n                    focusTable(element.closest(\"table\"), true);\n                },\n                filterable = that.options.filterable;\n                if (filterable && typeof filterable.mode == STRING && filterable.mode.indexOf(\"menu\") == -1) {\n                    filterable = false;\n                }\n\n            if (filterable && !that.options.columnMenu) {\n                cells = leafDataCells(that.thead);//that._headerCells();\n\n                for (var idx = 0, length = cells.length; idx < length; idx++) {\n                    cell = cells.eq(idx);\n\n                    if (columns[idx].filterable !== false && !columns[idx].command && (columns[idx].field || cell.attr(\"data-\" + kendo.ns + \"field\"))) {\n                        filterMenu = cell.data(\"kendoFilterMenu\");\n\n                        if (filterMenu) {\n                            filterMenu.destroy();\n                        }\n\n                        var columnFilterable = columns[idx].filterable;\n\n                        var options = extend({},\n                            filterable,\n                            columnFilterable,\n                            {\n                                dataSource: that.dataSource,\n                                values: columns[idx].values,\n                                closeCallback: closeCallback,\n                                init: filterInit,\n                                pane: that.pane\n                            }\n                        );\n\n                        if (columnFilterable && columnFilterable.messages) {\n                            options.messages = extend(true, {}, filterable.messages, columnFilterable.messages);\n                        }\n\n                        cell.kendoFilterMenu(options);\n                    }\n                }\n            }\n        },\n\n        _filterRow: function() {\n            var that = this;\n            if (!that._hasFilterRow()) {\n               return;\n            }\n\n            var columns = leafColumns(that.columns),\n                filterable = that.options.filterable,\n                rowheader = that.thead.find(\".k-filter-row\");\n\n            this._updateHeader(this.dataSource.group().length);\n\n            for (var i = 0; i < columns.length; i++) {\n                var suggestDataSource,\n                    col = columns[i],\n                    operators = that.options.filterable.operators,\n                    customDataSource = false,\n                    th = $(\"<th/>\"),\n                    field = col.field;\n\n                if (col.hidden) {\n                    th.hide();\n                }\n                rowheader.append(th);\n                if (field && col.filterable !== false) {\n                    var cellOptions = col.filterable && col.filterable.cell || {};\n\n                    suggestDataSource = that.options.dataSource;\n                    if (suggestDataSource instanceof DataSource) {\n                        suggestDataSource = that.options.dataSource.options;\n                    }\n\n                    var messages = extend(true, {}, filterable.messages);\n                    if (col.filterable) {\n                        extend(true, messages, col.filterable.messages);\n                    }\n\n                    if (cellOptions.enabled === false) {\n                        th.html(\"&nbsp;\");\n                        continue;\n                    }\n                    if (cellOptions.dataSource) {\n                        suggestDataSource = cellOptions.dataSource;\n                        customDataSource = true;\n                    }\n                    if (col.filterable && col.filterable.operators) {\n                        operators =  col.filterable.operators;\n                    }\n\n                    $(\"<span/>\").attr(kendo.attr(\"field\"), field)\n                        .kendoFilterCell({\n                            dataSource: that.dataSource,\n                            suggestDataSource: suggestDataSource,\n                            customDataSource: customDataSource,\n                            field: field,\n                            messages: messages,\n                            values: col.values,\n                            template: cellOptions.template,\n                            delay: cellOptions.delay,\n                            inputWidth: cellOptions.inputWidth,\n                            suggestionOperator: cellOptions.suggestionOperator,\n                            minLength: cellOptions.minLength,\n                            dataTextField: cellOptions.dataTextField,\n                            operator: cellOptions.operator,\n                            operators: operators,\n                            showOperators: cellOptions.showOperators\n                        }).appendTo(th);\n                } else {\n                    th.html(\"&nbsp;\");\n                }\n            }\n        },\n\n        _sortable: function() {\n            var that = this,\n                columns = leafColumns(that.columns),\n                column,\n                sorterInstance,\n                cell,\n                sortable = that.options.sortable;\n\n            if (sortable) {\n                var cells = leafDataCells(that.thead);\n\n                for (var idx = 0, length = cells.length; idx < length; idx++) {\n                    column = columns[idx];\n\n                    if (column.sortable !== false && !column.command && column.field) {\n                        cell = cells.eq(idx);\n\n                        sorterInstance = cell.data(\"kendoColumnSorter\");\n\n                        if (sorterInstance) {\n                            sorterInstance.destroy();\n                        }\n\n                        cell.attr(\"data-\" + kendo.ns +\"field\", column.field)\n                            .kendoColumnSorter(\n                                extend({}, sortable, column.sortable, {\n                                    dataSource: that.dataSource,\n                                    aria: true,\n                                    filter: \":not(.k-column-active)\"\n                                })\n                            );\n                    }\n                }\n                cells = null;\n            }\n        },\n\n        _columns: function(columns) {\n            var that = this,\n                table = that.table,\n                encoded,\n                cols = table.find(\"col\"),\n                lockedCols,\n                dataSource = that.options.dataSource;\n\n            // using HTML5 data attributes as a configuration option e.g. <th data-field=\"foo\">Foo</foo>\n            columns = columns.length ? columns : map(table.find(\"th\"), function(th, idx) {\n                th = $(th);\n                var sortable = th.attr(kendo.attr(\"sortable\")),\n                    filterable = th.attr(kendo.attr(\"filterable\")),\n                    type = th.attr(kendo.attr(\"type\")),\n                    groupable = th.attr(kendo.attr(\"groupable\")),\n                    field = th.attr(kendo.attr(\"field\")),\n                    menu = th.attr(kendo.attr(\"menu\"));\n\n                if (!field) {\n                   field = th.text().replace(/\\s|[^A-z0-9]/g, \"\");\n                }\n\n                return {\n                    field: field,\n                    type: type,\n                    sortable: sortable !== \"false\",\n                    filterable: filterable !== \"false\",\n                    groupable: groupable !== \"false\",\n                    menu: menu,\n                    template: th.attr(kendo.attr(\"template\")),\n                    width: cols.eq(idx).css(\"width\")\n                };\n            });\n\n            encoded = !(that.table.find(\"tbody tr\").length > 0 && (!dataSource || !dataSource.transport));\n\n            if (that.options.scrollable) {\n                var initialColumns = columns;\n                lockedCols = lockedColumns(columns);\n                columns = nonLockedColumns(columns);\n\n                if (lockedCols.length > 0 && columns.length === 0) {\n                    throw new Error(\"There should be at least one non locked column\");\n                }\n\n                normalizeHeaderCells(that.element.find(\"tr:has(th):first\").find(\"th:not(.k-group-cell)\"), initialColumns);\n                columns = lockedCols.concat(columns);\n            }\n\n            that.columns = normalizeColumns(columns, encoded);\n        },\n\n        _groups: function() {\n            var group = this.dataSource.group();\n\n            return group ? group.length : 0;\n        },\n\n        _tmpl: function(rowTemplate, columns, alt, skipGroupCells) {\n            var that = this,\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                idx,\n                length = columns.length,\n                template,\n                state = { storage: {}, count: 0 },\n                column,\n                type,\n                hasDetails = that._hasDetails(),\n                className = [],\n                groups = that._groups();\n\n            if (!rowTemplate) {\n                rowTemplate = \"<tr\";\n\n                if (alt) {\n                    className.push(\"k-alt\");\n                }\n\n                if (hasDetails) {\n                    className.push(\"k-master-row\");\n                }\n\n                if (className.length) {\n                    rowTemplate += ' class=\"' + className.join(\" \") + '\"';\n                }\n\n                if (length) { // data item is an object\n                    rowTemplate += ' ' + kendo.attr(\"uid\") + '=\"#=' + kendo.expr(\"uid\", settings.paramName) + '#\"';\n                }\n\n                rowTemplate += \" role='row'>\";\n\n                if (groups > 0 && !skipGroupCells) {\n                    rowTemplate += groupCells(groups);\n                }\n\n                if (hasDetails) {\n                    rowTemplate += '<td class=\"k-hierarchy-cell\"><a class=\"k-icon k-plus\" href=\"\\\\#\" tabindex=\"-1\"></a></td>';\n                }\n\n                for (idx = 0; idx < length; idx++) {\n                    column = columns[idx];\n                    template = column.template;\n                    type = typeof template;\n\n                    rowTemplate += \"<td\" + stringifyAttributes(column.attributes) + \" role='gridcell'>\";\n                    rowTemplate += that._cellTmpl(column, state);\n\n                    rowTemplate += \"</td>\";\n                }\n\n                rowTemplate += \"</tr>\";\n            }\n\n            rowTemplate = kendo.template(rowTemplate, settings);\n\n            if (state.count > 0) {\n                return proxy(rowTemplate, state.storage);\n            }\n\n            return rowTemplate;\n        },\n\n        _headerCellText: function(column) {\n            var that = this,\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                template = column.headerTemplate,\n                type = typeof(template),\n                text = column.title || column.field || \"\";\n\n            if (type === FUNCTION) {\n                text = kendo.template(template, settings)({});\n            } else if (type === STRING) {\n                text = template;\n            }\n            return text;\n        },\n\n        _cellTmpl: function(column, state) {\n            var that = this,\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                template = column.template,\n                paramName = settings.paramName,\n                field = column.field,\n                html = \"\",\n                idx,\n                length,\n                format = column.format,\n                type = typeof template,\n                columnValues = column.values;\n\n            if (column.command) {\n                if (isArray(column.command)) {\n                    for (idx = 0, length = column.command.length; idx < length; idx++) {\n                        html += that._createButton(column.command[idx]);\n                    }\n                    return html.replace(templateHashRegExp, \"\\\\#\");\n                }\n                return that._createButton(column.command).replace(templateHashRegExp, \"\\\\#\");\n            }\n            if (type === FUNCTION) {\n                state.storage[\"tmpl\" + state.count] = template;\n                html += \"#=this.tmpl\" + state.count + \"(\" + paramName + \")#\";\n                state.count ++;\n            } else if (type === STRING) {\n                html += template;\n            } else if (columnValues && columnValues.length && isPlainObject(columnValues[0]) && \"value\" in columnValues[0] && field) {\n                html += \"#var v =\" + kendo.stringify(convertToObject(columnValues)).replace(templateHashRegExp, \"\\\\#\") + \"#\";\n                html += \"#var f = v[\";\n\n                if (!settings.useWithBlock) {\n                    html += paramName + \".\";\n                }\n\n                html += field + \"]#\";\n                html += \"${f != null ? f : ''}\";\n            } else {\n                html += column.encoded ? \"#:\" : \"#=\";\n\n                if (format) {\n                    html += 'kendo.format(\\\"' + format.replace(formatRegExp,\"\\\\$1\") + '\\\",';\n                }\n\n                if (field) {\n                    field = kendo.expr(field, paramName);\n                    html += field + \"==null?'':\" + field;\n                } else {\n                    html += \"''\";\n                }\n\n                if (format) {\n                    html += \")\";\n                }\n\n                html += \"#\";\n            }\n            return html;\n        },\n\n        _templates: function() {\n            var that = this,\n                options = that.options,\n                dataSource = that.dataSource,\n                groups = dataSource.group(),\n                footer = that.footer || that.wrapper.find(\".k-grid-footer\"),\n                aggregates = dataSource.aggregate(),\n                columnLeafs = leafColumns(that.columns),\n                columnsLocked = leafColumns(lockedColumns(that.columns)),\n                columns = options.scrollable ? leafColumns(nonLockedColumns(that.columns)) : columnLeafs;\n\n            if (options.scrollable && columnsLocked.length) {\n                if (options.rowTemplate || options.altRowTemplate) {\n                    throw new Error(\"Having both row template and locked columns is not supported\");\n                }\n\n                that.rowTemplate = that._tmpl(options.rowTemplate, columns, false, true);\n                that.altRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columns, true, true);\n\n                that.lockedRowTemplate = that._tmpl(options.rowTemplate, columnsLocked);\n                that.lockedAltRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columnsLocked, true);\n            } else {\n                that.rowTemplate = that._tmpl(options.rowTemplate, columns);\n                that.altRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columns, true);\n            }\n\n            if (that._hasDetails()) {\n                that.detailTemplate = that._detailTmpl(options.detailTemplate || \"\");\n            }\n\n            if ((that._group && !isEmptyObject(aggregates)) || (!isEmptyObject(aggregates) && !footer.length) ||\n                grep(columnLeafs, function(column) { return column.footerTemplate; }).length) {\n\n                that.footerTemplate = that._footerTmpl(columnLeafs, aggregates, \"footerTemplate\", \"k-footer-template\");\n            }\n\n            if (groups && grep(columnLeafs, function(column) { return column.groupFooterTemplate; }).length) {\n                aggregates = $.map(groups, function(g) { return g.aggregates; });\n\n                that.groupFooterTemplate = that._footerTmpl(columns, aggregates, \"groupFooterTemplate\", \"k-group-footer\", columnsLocked.length);\n\n                if (options.scrollable && columnsLocked.length) {\n                    that.lockedGroupFooterTemplate = that._footerTmpl(columnsLocked, aggregates, \"groupFooterTemplate\", \"k-group-footer\");\n                }\n            }\n        },\n\n        _footerTmpl: function(columns, aggregates, templateName, rowClass, skipGroupCells) {\n            var that = this,\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                paramName = settings.paramName,\n                html = \"\",\n                idx,\n                length,\n                template,\n                type,\n                storage = {},\n                count = 0,\n                scope = {},\n                groups = that._groups(),\n                fieldsMap = buildEmptyAggregatesObject(aggregates),\n                column;\n\n            html += '<tr class=\"' + rowClass + '\">';\n\n            if (groups > 0 && !skipGroupCells) {\n                html += groupCells(groups);\n            }\n\n            if (that._hasDetails()) {\n                html += '<td class=\"k-hierarchy-cell\">&nbsp;</td>';\n            }\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                column = columns[idx];\n                template = column[templateName];\n                type = typeof template;\n\n                html += \"<td\" + stringifyAttributes(column.footerAttributes) + \">\";\n\n                if (template) {\n                    if (type !== FUNCTION) {\n                        scope = fieldsMap[column.field] ? extend({}, settings, { paramName: paramName + \"['\" + column.field + \"']\" }) : {};\n                        template = kendo.template(template, scope);\n                    }\n\n                    storage[\"tmpl\" + count] = template;\n                    html += \"#=this.tmpl\" + count + \"(\" + paramName + \")#\";\n                    count ++;\n                } else {\n                    html += \"&nbsp;\";\n                }\n\n                html += \"</td>\";\n            }\n\n            html += '</tr>';\n\n            html = kendo.template(html, settings);\n\n            if (count > 0) {\n                return proxy(html, storage);\n            }\n\n            return html;\n        },\n\n        _detailTmpl: function(template) {\n            var that = this,\n                html = \"\",\n                settings = extend({}, kendo.Template, that.options.templateSettings),\n                paramName = settings.paramName,\n                templateFunctionStorage = {},\n                templateFunctionCount = 0,\n                groups = that._groups(),\n                colspan = visibleColumns(leafColumns(that.columns)).length,\n                type = typeof template;\n\n            html += '<tr class=\"k-detail-row\">';\n            if (groups > 0) {\n                html += groupCells(groups);\n            }\n            html += '<td class=\"k-hierarchy-cell\"></td><td class=\"k-detail-cell\"' + (colspan? ' colspan=\"' + colspan + '\"' : '') + \">\";\n\n            if (type === FUNCTION) {\n                templateFunctionStorage[\"tmpl\" + templateFunctionCount] = template;\n                html += \"#=this.tmpl\" + templateFunctionCount + \"(\" + paramName + \")#\";\n                templateFunctionCount ++;\n            } else {\n                html += template;\n            }\n\n            html += \"</td></tr>\";\n\n            html = kendo.template(html, settings);\n\n            if (templateFunctionCount > 0) {\n                return proxy(html, templateFunctionStorage);\n            }\n\n            return html;\n        },\n\n        _hasDetails: function() {\n            var that = this;\n\n            return that.options.detailTemplate !== null  || (that._events[DETAILINIT] || []).length;\n        },\n        _hasFilterRow: function() {\n            var filterable = this.options.filterable;\n            var hasFiltering = filterable &&\n                    typeof filterable.mode == STRING &&\n                    filterable.mode.indexOf(\"row\") != -1;\n            var columns = this.columns;\n            var columnsWithoutFiltering = $.grep(columns, function(col, idx) {\n                return col.filterable === false;\n            });\n\n            if (columns.length && columnsWithoutFiltering.length == columns.length) {\n                hasFiltering = false;\n            }\n\n            return hasFiltering;\n        },\n\n        _details: function() {\n            var that = this;\n\n            if (that.options.scrollable && that._hasDetails() && lockedColumns(that.columns).length) {\n                throw new Error(\"Having both detail template and locked columns is not supported\");\n            }\n\n            that.table.on(CLICK + NS, \".k-hierarchy-cell .k-plus, .k-hierarchy-cell .k-minus\", function(e) {\n                var button = $(this),\n                    expanding = button.hasClass(\"k-plus\"),\n                    masterRow = button.closest(\"tr.k-master-row\"),\n                    detailRow,\n                    detailTemplate = that.detailTemplate,\n                    data,\n                    hasDetails = that._hasDetails();\n\n                button.toggleClass(\"k-plus\", !expanding)\n                    .toggleClass(\"k-minus\", expanding);\n\n                detailRow = masterRow.next();\n\n                if (hasDetails && !detailRow.hasClass(\"k-detail-row\")) {\n                    data = that.dataItem(masterRow);\n\n                    detailRow = $(detailTemplate(data))\n                        .addClass(masterRow.hasClass(\"k-alt\") ? \"k-alt\" : \"\")\n                        .insertAfter(masterRow);\n\n                    that.angular(\"compile\", function(){\n                        return {\n                            elements: detailRow.get(),\n                            data: [ { dataItem: data } ]\n                        };\n                    });\n\n                    that.trigger(DETAILINIT, { masterRow: masterRow, detailRow: detailRow, data: data, detailCell: detailRow.find(\".k-detail-cell\") });\n                }\n\n                that.trigger(expanding ? DETAILEXPAND : DETAILCOLLAPSE, { masterRow: masterRow, detailRow: detailRow});\n                detailRow.toggle(expanding);\n\n                if (that._current) {\n                    that._current.attr(\"aria-expanded\", expanding);\n                }\n\n                e.preventDefault();\n                return false;\n            });\n        },\n\n        dataItem: function(tr) {\n            tr = $(tr)[0];\n            if (!tr) {\n                return null;\n            }\n\n            var rows = this.tbody.children(),\n                classesRegEx = /k-grouping-row|k-detail-row|k-group-footer/,\n                idx = tr.sectionRowIndex,\n                j, correctIdx;\n\n            correctIdx = idx;\n\n            for (j = 0; j < idx; j++) {\n                if (classesRegEx.test(rows[j].className)) {\n                    correctIdx--;\n                }\n            }\n\n            return this._data[correctIdx];\n        },\n\n        expandRow: function(tr) {\n            $(tr).find('> td .k-plus, > td .k-i-expand').click();\n        },\n\n        collapseRow: function(tr) {\n            $(tr).find('> td .k-minus, > td .k-i-collapse').click();\n        },\n\n        _createHeaderCells: function(columns, rowSpan) {\n            var that = this,\n                idx,\n                th,\n                text,\n                html = \"\",\n                length,\n                leafs = leafColumns(that.columns);\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                th = columns[idx].column || columns[idx];\n                text = that._headerCellText(th);\n\n                var index = inArray(th, leafs);\n\n                if (!th.command) {\n                    html += \"<th role='columnheader' \" + kendo.attr(\"field\") + \"='\" + (th.field || \"\") + \"' \";\n\n                    if (rowSpan && !columns[idx].colSpan) {\n                        html += \" rowspan='\" + rowSpan + \"'\";\n                    }\n\n                    if (columns[idx].colSpan > 1) {\n                        html += 'colspan=\"' + (columns[idx].colSpan - hiddenLeafColumnsCount(th.columns)) + '\" ';\n                        html += kendo.attr(\"colspan\") + \"='\" + columns[idx].colSpan + \"'\";\n                    }\n\n                    if (th.title) {\n                        html += kendo.attr(\"title\") + '=\"' + th.title.replace(/'/g, \"\\'\") + '\" ';\n                    }\n\n                    if (th.groupable !== undefined) {\n                        html += kendo.attr(\"groupable\") + \"='\" + th.groupable + \"' \";\n                    }\n\n                    if (th.aggregates && th.aggregates.length) {\n                        html += kendo.attr(\"aggregates\") + \"='\" + th.aggregates + \"'\";\n                    }\n\n                    if (index > -1) {\n                        html += kendo.attr(\"index\") + \"='\" + index + \"'\";\n                    }\n\n                    html += stringifyAttributes(th.headerAttributes);\n\n                    html += \">\" + text + \"</th>\";\n                } else {\n                    html += \"<th\" + stringifyAttributes(th.headerAttributes);\n\n                    if (rowSpan && !columns[idx].colSpan) {\n                        html += \" rowspan='\" + rowSpan + \"'\";\n                    }\n\n                    if (index > -1) {\n                        html += kendo.attr(\"index\") + \"='\" + index + \"'\";\n                    }\n\n                    html += \">\" + text + \"</th>\";\n                }\n            }\n            return html;\n        },\n\n        _appendLockedColumnContent: function() {\n            var columns = this.columns,\n                idx,\n                colgroup = this.table.find(\"colgroup\"),\n                cols = colgroup.find(\"col:not(.k-group-col,.k-hierarchy-col)\"),\n                length,\n                lockedCols = $(),\n                skipHiddenCount = 0,\n                container,\n                colSpan,\n                spanIdx,\n                colOffset = 0;\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                if (columns[idx].locked) {\n\n                    if (isVisible(columns[idx])) {\n                        colSpan = 1;\n\n                        if (columns[idx].columns) {\n                            colSpan = leafColumns(columns[idx].columns).length - hiddenLeafColumnsCount(columns[idx].columns);\n                        }\n\n                        colSpan = colSpan || 1;\n                        for (spanIdx = 0; spanIdx < colSpan; spanIdx++) {\n                            lockedCols = lockedCols.add(cols.eq(idx + colOffset + spanIdx - skipHiddenCount));\n                        }\n                        colOffset += colSpan - 1;\n                    } else {\n                        skipHiddenCount ++;\n                    }\n                }\n            }\n\n            container = $('<div class=\"k-grid-content-locked\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><colgroup/><tbody></tbody></table></div>');\n            // detach is required for IE8, otherwise it switches to compatibility mode\n            colgroup.detach();\n            container.find(\"colgroup\").append(lockedCols);\n            colgroup.insertBefore(this.table.find(\"tbody\"));\n\n            this.lockedContent = container.insertBefore(this.content);\n            this.lockedTable = container.children(\"table\");\n        },\n\n        _appendLockedColumnFooter: function() {\n            var that = this;\n            var footer = that.footer;\n            var cells = footer.find(\".k-footer-template>td\");\n            var cols = footer.find(\".k-grid-footer-wrap>table>colgroup>col\");\n            var html = $('<div class=\"k-grid-footer-locked\"><table><colgroup /><tbody><tr class=\"k-footer-template\"></tr></tbody></table></div>');\n            var idx, length;\n            var groups = that._groups();\n            var lockedCells = $(), lockedCols = $();\n\n            lockedCells = lockedCells.add(cells.filter(\".k-group-cell\"));\n            for (idx = 0, length = leafColumns(lockedColumns(that.columns)).length; idx < length; idx++) {\n                lockedCells = lockedCells.add(cells.eq(idx + groups));\n            }\n\n            lockedCols = lockedCols.add(cols.filter(\".k-group-col\"));\n            for (idx = 0, length = leafColumns(visibleLockedColumns(that.columns)).length; idx < length; idx++) {\n                lockedCols = lockedCols.add(cols.eq(idx + groups));\n            }\n\n            lockedCells.appendTo(html.find(\"tr\"));\n            lockedCols.appendTo(html.find(\"colgroup\"));\n            that.lockedFooter = html.prependTo(footer);\n        },\n\n        _appendLockedColumnHeader: function(container) {\n            var that = this,\n                columns = this.columns,\n                idx,\n                html,\n                length,\n                colgroup,\n                tr,\n                trFilter,\n                table,\n                header,\n                filtercellCells,\n                rows = [],\n                skipHiddenCount = 0,\n                cols = $(),\n                hasFilterRow = that._hasFilterRow(),\n                filterCellOffset = 0,\n                filterCells = $(),\n                cell,\n                leafColumnsCount = 0,\n                cells = $();\n\n            colgroup = that.thead.prev().find(\"col:not(.k-group-col,.k-hierarchy-col)\");\n            header = that.thead.find(\"tr:first .k-header:not(.k-group-cell,.k-hierarchy-cell)\");\n            filtercellCells = that.thead.find(\".k-filter-row\").find(\"th:not(.k-group-cell,.k-hierarchy-cell)\");\n\n            var colOffset = 0;\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                if (columns[idx].locked) {\n                    cell = header.eq(idx);\n                    leafColumnsCount = leafColumns(columns[idx].columns || []).length;\n\n                    if (isVisible(columns[idx])) {\n                        var colSpan;\n\n                        if (columns[idx].columns) {\n                            colSpan = leafColumnsCount - hiddenLeafColumnsCount(columns[idx].columns);\n                        }\n\n                        colSpan = colSpan || 1;\n                        for (var spanIdx = 0; spanIdx < colSpan; spanIdx++) {\n                            cols = cols.add(colgroup.eq(idx + colOffset + spanIdx - skipHiddenCount));\n                        }\n                        colOffset += colSpan - 1;\n                    }\n\n                    mapColumnToCellRows([columns[idx]], childColumnsCells(cell), rows, 0, 0);\n\n                    leafColumnsCount = leafColumnsCount || 1;\n                    for (var j = 0; j < leafColumnsCount; j++) {\n                        filterCells = filterCells.add(filtercellCells.eq(filterCellOffset + j));\n                    }\n                    filterCellOffset += leafColumnsCount;\n                }\n\n                if (columns[idx].columns) {\n                    skipHiddenCount += hiddenLeafColumnsCount(columns[idx].columns);\n                }\n\n                if (!isVisible(columns[idx])) {\n                    skipHiddenCount++;\n                }\n            }\n\n            if (rows.length) {\n                html = '<div class=\"k-grid-header-locked\" style=\"width:1px\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><colgroup/><thead>';\n                html += new Array(rows.length + 1).join(\"<tr></tr>\");\n                html += (hasFilterRow ? '<tr class=\"k-filter-row\" />' : '') + '</thead></table></div>';\n\n                table = $(html);\n\n                colgroup = table.find(\"colgroup\");\n                colgroup.append(that.thead.prev().find(\"col.k-group-col\").add(cols));\n\n                tr = table.find(\"thead tr:not(.k-filter-row)\");\n                for (idx = 0, length = rows.length; idx < length; idx++) {\n                    cells = toJQuery(rows[idx]);\n                    tr.eq(idx).append(that.thead.find(\"tr:eq(\" + idx + \") .k-group-cell\").add(cells));\n                }\n\n                var count = removeEmptyRows(this.thead);\n                if (rows.length < count) {\n                    removeRowSpanValue(table, count);\n                }\n\n                trFilter = table.find(\".k-filter-row\");\n                trFilter.append(that.thead.find(\".k-filter-row .k-group-cell\").add(filterCells));\n\n                this.lockedHeader = table.prependTo(container);\n                this._syncLockedHeaderHeight();\n            }\n        },\n\n        _removeLockedContainers: function() {\n            var elements = this.lockedHeader\n                .add(this.lockedContent)\n                .add(this.lockedFooter);\n\n            kendo.destroy(elements);\n            elements.off(NS).remove();\n\n            this.lockedHeader = this.lockedContent = this.lockedFooter = null;\n            this.selectable = null;\n        },\n\n        _thead: function() {\n            var that = this,\n                columns = that.columns,\n                hasDetails = that._hasDetails() && columns.length,\n                hasFilterRow = that._hasFilterRow(),\n                idx,\n                length,\n                html = \"\",\n                thead = that.table.find(\">thead\"),\n                hasTHead = that.element.find(\"thead:first\").length > 0,\n                tr,\n                text,\n                th;\n\n            if (!thead.length) {\n                thead = $(\"<thead/>\").insertBefore(that.tbody);\n            }\n\n            if (that.lockedHeader && that.thead) {\n                tr = that.thead.find(\"tr:has(th):not(.k-filter-row)\").html(\"\");\n\n                that._removeLockedContainers();\n            } else if (hasTHead) {\n                tr = that.element.find(\"thead:first tr:has(th):not(.k-filter-row)\");\n            } else {\n                tr = that.element.find(\"tr:has(th):first\");\n            }\n\n            if (!tr.length) {\n                tr = thead.children().first();\n                if (!tr.length) {\n                   var rows = [{ rowSpan: 1, cells: [], index: 0 }];\n                   that._prepareColumns(rows, columns);\n\n                   for (idx = 0; idx < rows.length; idx++) {\n                       html += \"<tr>\";\n                       if (hasDetails) {\n                           html += '<th class=\"k-hierarchy-cell\">&nbsp;</th>';\n                       }\n                       html += that._createHeaderCells(rows[idx].cells, rows[idx].rowSpan);\n                       html += \"</tr>\";\n                   }\n\n                   tr = $(html);\n               }\n            }\n\n            if (hasFilterRow) {\n                var filterRow = $(\"<tr/>\");\n                filterRow.addClass(\"k-filter-row\");\n                if (hasDetails) {\n                    filterRow.prepend('<th class=\"k-hierarchy-cell\">&nbsp;</th>');\n                }\n\n                thead.append(filterRow);\n            }\n\n            if (!tr.children().length) {\n                html = \"\";\n                if (hasDetails) {\n                    html += '<th class=\"k-hierarchy-cell\">&nbsp;</th>';\n                }\n\n                html += that._createHeaderCells(columns);\n\n                tr.html(html);\n            } else if (hasDetails && !tr.find(\".k-hierarchy-cell\")[0]) {\n                tr.prepend('<th class=\"k-hierarchy-cell\">&nbsp;</th>');\n            }\n\n            tr.attr(\"role\", \"row\").find(\"th\").addClass(\"k-header\");\n\n            if(!that.options.scrollable) {\n                thead.addClass(\"k-grid-header\");\n            }\n\n            tr.find(\"script\").remove().end().prependTo(thead);\n\n            if (that.thead) {\n                that._destroyColumnAttachments();\n            }\n\n            this.angular(\"cleanup\", function(){\n                return {\n                    elements: thead.find(\"th\").get()\n                };\n            });\n\n            this.angular(\"compile\", function(){\n                return {\n                    elements: thead.find(\"th\").get(),\n                    data: map(columns, function(col) { return { column: col }; })\n                };\n            });\n\n            that.thead = thead.attr(\"role\", \"rowgroup\");\n\n            that._sortable();\n\n            that._filterable();\n\n            that._filterRow();\n\n            that._scrollable();\n\n            that._updateCols();\n\n            that._columnMenu();\n\n            if (this.options.scrollable && lockedColumns(this.columns).length) {\n\n                that._appendLockedColumnHeader(that.thead.closest(\".k-grid-header\"));\n\n                that._appendLockedColumnContent();\n\n                that.lockedContent.bind(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, proxy(that._wheelScroll, that));\n\n                that._applyLockedContainersWidth();\n            }\n\n            that._updateColumnCellIndex();\n\n            that._updateFirstColumnClass();\n\n            that._resizable();\n\n            that._draggable();\n\n            that._reorderable();\n\n            if (that.groupable) {\n                that._attachGroupable();\n            }\n        },\n\n        _updateFirstColumnClass: function() {\n            var that = this,\n                columns = that.columns || [],\n                hasDetails = that._hasDetails() && columns.length;\n\n            if (!hasDetails && !that._groups()) {\n                var rows = $();\n\n                var tr = that.thead.find(\">tr:not(.k-filter-row):not(:first)\");\n                columns = nonLockedColumns(columns);\n\n                if (tr.length && columns[0] && !columns[0].columns) {\n                    rows = rows.add(tr);\n                }\n\n                if (that._isLocked()) {\n                    tr = that.lockedHeader.find(\"thead>tr:not(.k-filter-row):not(:first)\");\n                    columns = lockedColumns(that.columns);\n\n                    if (tr.length && columns[0] && !columns[0].columns) {\n                        rows = rows.add(tr);\n                    }\n                }\n\n                rows.each(function() {\n                    var ths = $(this).find(\"th\");\n                    ths.removeClass(\"k-first\");\n                    ths.eq(0).addClass(\"k-first\");\n                });\n            }\n        },\n\n        _prepareColumns: function(rows, columns, parentCell, parentRow) {\n            var row = parentRow || rows[rows.length - 1];\n\n            var childRow = rows[row.index + 1];\n            var totalColSpan = 0;\n\n            for (var idx = 0; idx < columns.length; idx++) {\n                var cell = { column: columns[idx], colSpan: 0 };\n                row.cells.push(cell);\n\n                if (columns[idx].columns && columns[idx].columns.length) {\n                    if (!childRow) {\n                        childRow = { rowSpan: 0, cells: [], index: rows.length };\n                        rows.push(childRow);\n                    }\n                    cell.colSpan = columns[idx].columns.length;\n                    this._prepareColumns(rows, columns[idx].columns, cell, childRow);\n                    totalColSpan += cell.colSpan - 1;\n                    row.rowSpan = rows.length - row.index;\n                }\n            }\n            if (parentCell) {\n                parentCell.colSpan += totalColSpan;\n            }\n        },\n\n        _wheelScroll: function (e) {\n            if (e.ctrlKey) {\n                return;\n            }\n\n            var content = this.content;\n\n            if (this.options.scrollable.virtual) {\n                content = this.virtualScrollable.verticalScrollbar;\n            }\n\n            var scrollTop = content.scrollTop(),\n                delta = kendo.wheelDeltaY(e);\n\n            if (delta) {\n                e.preventDefault();\n                //In Firefox DOMMouseScroll event cannot be canceled\n                $(e.currentTarget).one(\"wheel\" + NS, false);\n\n                content.scrollTop(scrollTop + (-delta));\n            }\n        },\n\n        _isLocked: function() {\n            return this.lockedHeader != null;\n        },\n\n        _updateCols: function(table) {\n            table = table || this.thead.parent().add(this.table);\n\n            this._appendCols(table, this._isLocked());\n        },\n\n        _updateLockedCols: function(table) {\n            if (this._isLocked()) {\n                table = table || this.lockedHeader.find(\"table\").add(this.lockedTable);\n\n                normalizeCols(table, visibleLeafColumns(visibleLockedColumns(this.columns)), this._hasDetails(), this._groups());\n            }\n        },\n\n        _appendCols: function(table, locked) {\n            if (locked) {\n                normalizeCols(table, visibleLeafColumns(visibleNonLockedColumns(this.columns)), this._hasDetails(), 0);\n            } else {\n                normalizeCols(table, visibleLeafColumns(visibleColumns(this.columns)), this._hasDetails(), this._groups());\n            }\n        },\n\n        _autoColumns: function(schema) {\n            if (schema && schema.toJSON) {\n                var that = this,\n                    field;\n\n                schema = schema.toJSON();\n\n                for (field in schema) {\n                    that.columns.push({ field: field });\n                }\n\n                that._thead();\n\n                that._templates();\n            }\n        },\n\n        _rowsHtml: function(data, templates) {\n            var that = this,\n                html = \"\",\n                idx,\n                rowTemplate = templates.rowTemplate,\n                altRowTemplate = templates.altRowTemplate,\n                length;\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (idx % 2) {\n                    html += altRowTemplate(data[idx]);\n                } else {\n                    html += rowTemplate(data[idx]);\n                }\n\n                that._data.push(data[idx]);\n            }\n\n            return html;\n        },\n\n        _groupRowHtml: function(group, colspan, level, groupHeaderBuilder, templates, skipColspan) {\n            var that = this,\n                html = \"\",\n                idx,\n                length,\n                field = group.field,\n                column = grep(leafColumns(that.columns), function(column) { return column.field == field; })[0] || { },\n                template = column.groupHeaderTemplate,\n                text =  (column.title || field) + ': ' + formatGroupValue(group.value, column.format, column.values),\n                footerDefaults = that._groupAggregatesDefaultObject || {},\n                aggregates = extend({}, footerDefaults, group.aggregates),\n                data = extend({}, { field: group.field, value: group.value, aggregates: aggregates }, group.aggregates[group.field]),\n                rowTemplate = templates.rowTemplate,\n                altRowTemplate = templates.altRowTemplate,\n                groupFooterTemplate = templates.groupFooterTemplate,\n                groupItems = group.items;\n\n            if (template) {\n                text  = typeof template === FUNCTION ? template(data) : kendo.template(template)(data);\n            }\n\n            html += groupHeaderBuilder(colspan, level, text);\n\n            if(group.hasSubgroups) {\n                for(idx = 0, length = groupItems.length; idx < length; idx++) {\n                    html += that._groupRowHtml(groupItems[idx], skipColspan ? colspan : colspan - 1, level + 1, groupHeaderBuilder, templates, skipColspan);\n                }\n            } else {\n                html += that._rowsHtml(groupItems, templates);\n            }\n\n            if (groupFooterTemplate) {\n                html += groupFooterTemplate(aggregates);\n            }\n            return html;\n        },\n\n        collapseGroup: function(group) {\n            group = $(group);\n\n            var level,\n                groupable = this.options.groupable,\n                showFooter =  groupable.showFooter,\n                footerCount = showFooter ? 0 : 1,\n                offset,\n                relatedGroup = $(),\n                idx,\n                length,\n                tr;\n\n            if (this._isLocked()) {\n                if (!group.closest(\"div\").hasClass(\"k-grid-content-locked\")) {\n                    relatedGroup = group.nextAll(\"tr\");\n                    group = this.lockedTable.find(\">tbody>tr:eq(\" + group.index() + \")\");\n                } else {\n                    relatedGroup = this.tbody.children(\"tr:eq(\" + group.index() + \")\").nextAll(\"tr\");\n                }\n            }\n\n            level = group.find(\".k-group-cell\").length;\n            group.find(\".k-icon\").addClass(\"k-i-expand\").removeClass(\"k-i-collapse\");\n            group.find(\"td:first\").attr(\"aria-expanded\", false);\n            group = group.nextAll(\"tr\");\n\n            for (idx = 0, length = group.length; idx < length; idx ++ ) {\n                tr = group.eq(idx);\n                offset = tr.find(\".k-group-cell\").length;\n\n                if (tr.hasClass(\"k-grouping-row\")) {\n                    footerCount++;\n                } else if (tr.hasClass(\"k-group-footer\")) {\n                    footerCount--;\n                }\n\n                if (offset <= level || (tr.hasClass(\"k-group-footer\") && footerCount < 0)) {\n                    break;\n                }\n\n                tr.hide();\n                relatedGroup.eq(idx).hide();\n            }\n        },\n\n        expandGroup: function(group) {\n            group = $(group);\n\n            var that = this,\n                showFooter = that.options.groupable.showFooter,\n                level,\n                tr,\n                offset,\n                relatedGroup = $(),\n                idx,\n                length,\n                footersVisibility = [],\n                groupsCount = 1;\n\n            if (this._isLocked()) {\n                if (!group.closest(\"div\").hasClass(\"k-grid-content-locked\")) {\n                    relatedGroup = group.nextAll(\"tr\");\n                    group = this.lockedTable.find(\">tbody>tr:eq(\" + group.index() + \")\");\n                } else {\n                    relatedGroup = this.tbody.children(\"tr:eq(\" + group.index() + \")\").nextAll(\"tr\");\n                }\n            }\n\n            level = group.find(\".k-group-cell\").length;\n            group.find(\".k-icon\").addClass(\"k-i-collapse\").removeClass(\"k-i-expand\");\n            group.find(\"td:first\").attr(\"aria-expanded\", true);\n            group = group.nextAll(\"tr\");\n\n            for (idx = 0, length = group.length; idx < length; idx ++ ) {\n                tr = group.eq(idx);\n                offset = tr.find(\".k-group-cell\").length;\n                if (offset <= level) {\n                    break;\n                }\n\n                if (offset == level + 1 && !tr.hasClass(\"k-detail-row\")) {\n                    tr.show();\n                    relatedGroup.eq(idx).show();\n\n                    if (tr.hasClass(\"k-grouping-row\") && tr.find(\".k-icon\").hasClass(\"k-i-collapse\")) {\n                        that.expandGroup(tr);\n                    }\n\n                    if (tr.hasClass(\"k-master-row\") && tr.find(\".k-icon\").hasClass(\"k-minus\")) {\n                        tr.next().show();\n                        relatedGroup.eq(idx + 1).show();\n                    }\n                }\n\n                if (tr.hasClass(\"k-grouping-row\")) {\n                    if (showFooter) {\n                        footersVisibility.push(tr.is(\":visible\"));\n                    }\n                    groupsCount ++;\n                }\n\n                if (tr.hasClass(\"k-group-footer\")) {\n                    if (showFooter) {\n                        tr.toggle(footersVisibility.pop());\n                    }\n                    if (groupsCount == 1) {\n                        tr.show();\n                        relatedGroup.eq(idx).show();\n                    } else {\n                        groupsCount --;\n                    }\n                }\n            }\n        },\n\n        _updateHeader: function(groups) {\n            var that = this,\n                container = that._isLocked() ? that.lockedHeader.find(\"thead\") : that.thead,\n                filterCells = container.find(\"tr.k-filter-row\").find(\"th.k-group-cell\").length,\n                length = container.find(\"tr:first\").find(\"th.k-group-cell\").length,\n                rows = container.children(\"tr:not(:first)\").filter(function() {\n                    return !$(this).children(\":visible\").length;\n                });\n\n            if(groups > length) {\n                $(new Array(groups - length + 1).join('<th class=\"k-group-cell k-header\">&nbsp;</th>')).prependTo(container.children(\"tr:not(.k-filter-row)\"));\n                if (that.element.is(\":visible\")) {\n                    rows.find(\"th.k-group-cell\").hide();\n                }\n            } else if(groups < length) {\n                container.find(\"tr\").each(function() {\n                    $(this).find(\"th.k-group-cell\")\n                        .filter(\":eq(\" + groups + \"),\" + \":gt(\" + groups + \")\").remove();\n                });\n            }\n            if(groups > filterCells) {\n                $(new Array(groups - filterCells + 1).join('<th class=\"k-group-cell k-header\">&nbsp;</th>')).prependTo(container.find(\".k-filter-row\"));\n            }\n        },\n\n        _firstDataItem: function(data, grouped) {\n            if(data && grouped) {\n                if(data.hasSubgroups) {\n                    data = this._firstDataItem(data.items[0], grouped);\n                } else {\n                    data = data.items[0];\n                }\n            }\n            return data;\n        },\n\n        _updateTablesWidth: function() {\n            var that = this,\n                tables;\n\n            if (!that._isLocked()) {\n                return;\n            }\n\n            tables =\n                $(\">.k-grid-footer>.k-grid-footer-wrap>table\", that.wrapper)\n                .add(that.thead.parent())\n                .add(that.table);\n\n            that._footerWidth = tableWidth(tables.eq(0));\n            tables.width(that._footerWidth);\n\n            tables =\n                $(\">.k-grid-footer>.k-grid-footer-locked>table\", that.wrapper)\n                .add(that.lockedHeader.find(\">table\"))\n                .add(that.lockedTable);\n\n            tables.width(tableWidth(tables.eq(0)));\n        },\n\n        hideColumn: function(column) {\n            var that = this,\n                cell,\n                tables,\n                idx,\n                cols,\n                colWidth,\n                position,\n                row,\n                width = 0,\n                parents = [],\n                headerCellIndex,\n                length,\n                footer = that.footer || that.wrapper.find(\".k-grid-footer\"),\n                columns = that.columns,\n                visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find(\">table>thead\")).filter(isCellVisible).length : 0,\n                columnIndex;\n\n            if (typeof column == \"number\") {\n                column = columns[column];\n            } else if (isPlainObject(column)) {\n                column = grep(flatColumns(columns), function(item) {\n                    return item === column;\n                })[0];\n            } else {\n                column = grep(flatColumns(columns), function(item) {\n                    return item.field === column;\n                })[0];\n            }\n\n            if (!column || !isVisible(column)) {\n                return;\n            }\n\n\n            if (column.columns && column.columns.length) {\n                position = columnVisiblePosition(column, columns);\n\n                setColumnVisibility(column, false);\n\n                setCellVisibility(elements($(\">table>thead\", that.lockedHeader), that.thead, \">tr:eq(\" + position.row + \")>th\"), position.cell, false);\n\n                for (idx = 0; idx < column.columns.length; idx++) {\n                   this.hideColumn(column.columns[idx]);\n                }\n\n                that.trigger(COLUMNHIDE, { column: column });\n\n                return;\n            }\n\n            columnIndex = inArray(column, visibleColumns(leafColumns(columns)));\n            setColumnVisibility(column, false);\n\n            that._setParentsVisibility(column, false);\n\n            that._templates();\n\n            that._updateCols();\n            that._updateLockedCols();\n\n            var container = that.thead;\n\n            headerCellIndex = columnIndex;\n            if (that.lockedHeader && visibleLocked > columnIndex) {\n                container = that.lockedHeader.find(\">table>thead\");\n            } else {\n                headerCellIndex -= visibleLocked;\n            }\n\n            cell = leafDataCells(container).filter(isCellVisible).eq(headerCellIndex);\n            cell[0].style.display = \"none\";\n\n            setCellVisibility(elements($(\">table>thead\", that.lockedHeader), that.thead, \">tr.k-filter-row>th\"), columnIndex, false);\n            if (footer[0]) {\n                that._updateCols(footer.find(\">.k-grid-footer-wrap>table\"));\n                that._updateLockedCols(footer.find(\">.k-grid-footer-locked>table\"));\n                setCellVisibility(footer.find(\".k-footer-template>td\"), columnIndex, false);\n            }\n\n            if (that.lockedTable && visibleLocked > columnIndex) {\n                hideColumnCells(that.lockedTable.find(\">tbody>tr\"), columnIndex);\n            } else {\n                hideColumnCells(that.tbody.children(), columnIndex - visibleLocked);\n            }\n\n            if (that.lockedTable) {\n                that._updateTablesWidth();\n                that._applyLockedContainersWidth();\n                that._syncLockedContentHeight();\n                that._syncLockedHeaderHeight();\n                that._syncLockedFooterHeight();\n            } else {\n                cols = that.thead.prev().find(\"col\");\n                for (idx = 0, length = cols.length; idx < length; idx += 1) {\n                    colWidth = cols[idx].style.width;\n                    if (colWidth && colWidth.indexOf(\"%\") == -1) {\n                        width += parseInt(colWidth, 10);\n                    } else {\n                        width = 0;\n                        break;\n                    }\n                }\n\n                tables = $(\">.k-grid-header table:first,>.k-grid-footer table:first\",that.wrapper).add(that.table);\n                that._footerWidth = null;\n\n                if (width) {\n                    tables.each(function() {\n                        this.style.width = width + \"px\";\n                    });\n\n                    that._footerWidth = width;\n                }\n                if(browser.msie && browser.version == 8) {\n                    tables.css(\"display\", \"inline-table\");\n                    setTimeout(function() {\n                        tables.css(\"display\", \"table\");\n                    }, 1);\n                }\n            }\n\n            that._updateFirstColumnClass();\n            that.trigger(COLUMNHIDE, { column: column });\n        },\n\n        _setParentsVisibility: function(column, visible) {\n            var columns = this.columns;\n            var idx;\n            var parents = [];\n            var parent;\n            var position;\n            var cell;\n            var colSpan;\n\n            var predicate = visible ?\n                function(p) { return visibleColumns(p.columns).length && p.hidden; } :\n                function(p) { return !visibleColumns(p.columns).length && !p.hidden; };\n\n\n            if (columnParents(column, columns, parents) && parents.length) {\n                for (idx = parents.length - 1; idx >= 0; idx--) {\n                    parent = parents[idx];\n                    position = columnPosition(parent, columns);\n                    cell = elements($(\">table>thead\", this.lockedHeader), this.thead, \">tr:eq(\" + position.row + \")>th:not(.k-group-cell):not(.k-hierarchy-cell)\").eq(position.cell);\n\n                    if (predicate(parent)) {\n                        setColumnVisibility(parent, visible);\n                        cell[0].style.display = visible ? \"\" : \"none\";\n                    }\n\n                    if (cell.filter(\"[\" + kendo.attr(\"colspan\") + \"]\").length) {\n                        colSpan = parseInt(cell.attr(kendo.attr(\"colspan\")), 10);\n                        cell[0].colSpan = (colSpan - hiddenLeafColumnsCount(parent.columns)) || 1;\n                    }\n                }\n            }\n        },\n\n        showColumn: function(column) {\n            var that = this,\n                idx,\n                length,\n                cell,\n                tables,\n                width,\n                row,\n                headerCellIndex,\n                position,\n                colWidth,\n                cols,\n                columns = that.columns,\n                footer = that.footer || that.wrapper.find(\".k-grid-footer\"),\n                lockedColumnsCount = that.lockedHeader ? leafDataCells(that.lockedHeader.find(\">table>thead\")).length : 0,\n                columnIndex;\n\n            if (typeof column == \"number\") {\n                column = columns[column];\n            } else if (isPlainObject(column)) {\n                column = grep(flatColumns(columns), function(item) {\n                    return item === column;\n                })[0];\n            } else {\n                column = grep(flatColumns(columns), function(item) {\n                    return item.field === column;\n                })[0];\n            }\n\n            if (!column || isVisible(column)) {\n                return;\n            }\n\n            if (column.columns && column.columns.length) {\n                position = columnVisiblePosition(column, columns);\n\n                setColumnVisibility(column, true);\n\n                setCellVisibility(elements($(\">table>thead\", that.lockedHeader), that.thead, \">tr:eq(\" + position.row + \")>th\"), position.cell, true);\n\n                for (idx = 0; idx < column.columns.length; idx++) {\n                   this.showColumn(column.columns[idx]);\n                }\n\n                that.trigger(COLUMNSHOW, { column: column });\n\n                return;\n            }\n\n            columnIndex = inArray(column, leafColumns(columns));\n\n            setColumnVisibility(column, true);\n\n            that._setParentsVisibility(column, true);\n\n            that._templates();\n            that._updateCols();\n            that._updateLockedCols();\n\n            var container = that.thead;\n\n            headerCellIndex = columnIndex;\n            if (that.lockedHeader && lockedColumnsCount > columnIndex) {\n                container = that.lockedHeader.find(\">table>thead\");\n            } else {\n                headerCellIndex -= lockedColumnsCount;\n            }\n\n            cell = leafDataCells(container).eq(headerCellIndex);\n            cell[0].style.display = \"\";\n\n            setCellVisibility(elements($(\">table>thead\", that.lockedHeader), that.thead, \">tr.k-filter-row>th\"), columnIndex, true);\n            if (footer[0]) {\n                that._updateCols(footer.find(\">.k-grid-footer-wrap>table\"));\n                that._updateLockedCols(footer.find(\">.k-grid-footer-locked>table\"));\n                setCellVisibility(footer.find(\".k-footer-template>td\"), columnIndex, true);\n            }\n\n            if (that.lockedTable && lockedColumnsCount > columnIndex) {\n                showColumnCells(that.lockedTable.find(\">tbody>tr\"), columnIndex);\n            } else {\n                showColumnCells(that.tbody.children(), columnIndex - lockedColumnsCount);\n            }\n\n            if (that.lockedTable) {\n                that._updateTablesWidth();\n                that._applyLockedContainersWidth();\n                that._syncLockedContentHeight();\n                that._syncLockedHeaderHeight();\n            } else {\n                tables = $(\">.k-grid-header table:first,>.k-grid-footer table:first\",that.wrapper).add(that.table);\n                if (!column.width) {\n                    tables.width(\"\");\n                } else {\n                    width = 0;\n                    cols = that.thead.prev().find(\"col\");\n                    for (idx = 0, length = cols.length; idx < length; idx += 1) {\n                        colWidth = cols[idx].style.width;\n                        if (colWidth.indexOf(\"%\") > -1) {\n                            width = 0;\n                            break;\n                        }\n                        width += parseInt(colWidth, 10);\n                    }\n\n                    that._footerWidth = null;\n                    if (width) {\n                        tables.each(function() {\n                            this.style.width = width + \"px\";\n                        });\n                        that._footerWidth = width;\n                    }\n                }\n            }\n\n            that._updateFirstColumnClass();\n\n            that.trigger(COLUMNSHOW, { column: column });\n        },\n\n        _progress: function(toggle) {\n            var element = this.element;\n\n            if (this.lockedContent) {\n                element = this.wrapper;\n            } else if (this.element.is(\"table\")) {\n                element = this.element.parent();\n            } else if (this.content && this.content.length) {\n                element = this.content;\n            }\n\n            kendo.ui.progress(element, toggle);\n        },\n\n        _resize: function() {\n            if (this.content) {\n                this._setContentWidth();\n                this._setContentHeight();\n            }\n            if (this.virtualScrollable) {\n                this.virtualScrollable.repaintScrollbar();\n            }\n        },\n\n        _isActiveInTable: function() {\n            var active = activeElement();\n\n            return this.table[0] === active ||\n                $.contains(this.table[0], active) ||\n                (this._isLocked() &&\n                    (this.lockedTable[0] === active || $.contains(this.lockedTable[0], active))\n                );\n        },\n\n        refresh: function(e) {\n            var that = this,\n                length,\n                idx,\n                html = \"\",\n                data = that.dataSource.view(),\n                navigatable = that.options.navigatable,\n                currentIndex,\n                current = $(that.current()),\n                isCurrentInHeader = false,\n                groups = (that.dataSource.group() || []).length,\n                colspan = groups + visibleLeafColumns(visibleColumns(that.columns)).length;\n\n            if (e && e.action === \"itemchange\" && that.editable) { // skip rebinding if editing is in progress\n                return;\n            }\n\n            e = e || {};\n\n            if (that.trigger(\"dataBinding\", { action: e.action || \"rebind\", index: e.index, items: e.items })) {\n                return;\n            }\n\n            that._angularItems(\"cleanup\");\n\n            if (navigatable && (that._isActiveInTable() || (that._editContainer && that._editContainer.data(\"kendoWindow\")))) {\n                isCurrentInHeader = current.is(\"th\");\n                currentIndex = 0;\n                if (isCurrentInHeader) {\n                    currentIndex = that.thead.find(\"th:not(.k-group-cell)\").index(current);\n                }\n            }\n\n            that._destroyEditable();\n\n            that._progress(false);\n\n            that._hideResizeHandle();\n\n            that._data = [];\n\n            if (!that.columns.length) {\n                that._autoColumns(that._firstDataItem(data[0], groups));\n                colspan = groups + that.columns.length;\n            }\n\n            that._group = groups > 0 || that._group;\n\n            if(that._group) {\n                that._templates();\n                that._updateCols();\n                that._updateLockedCols();\n                that._updateHeader(groups);\n                that._group = groups > 0;\n            }\n\n            that._renderContent(data, colspan, groups);\n\n            that._renderLockedContent(data, colspan, groups);\n\n            that._footer();\n\n            that._setContentHeight();\n\n            that._setContentWidth();\n\n            if (that.lockedTable) {\n                //requires manual trigger of scroll to sync both tables\n                if (that.options.scrollable.virtual) {\n                    that.content.find(\">.k-virtual-scrollable-wrap\").trigger(\"scroll\");\n                } else {\n                    that.content.trigger(\"scroll\");\n                }\n            }\n\n            if (currentIndex >= 0) {\n                that._removeCurrent();\n                if (!isCurrentInHeader) {\n                    that.current(that.table.add(that.lockedTable).find(FIRSTNAVITEM).first());\n                } else {\n                    that.current(that.thead.find(\"th:not(.k-group-cell)\").eq(currentIndex));\n                }\n\n                if (that._current) {\n                    focusTable(that._current.closest(\"table\")[0], true);\n                }\n            }\n\n            if (that.touchScroller) {\n                that.touchScroller.contentResized();\n            }\n\n            if (that.selectable) {\n                that.selectable.resetTouchEvents();\n            }\n\n            that._angularItems(\"compile\");\n\n            that.trigger(DATABOUND);\n       },\n\n       _angularItems: function(cmd) {\n\n           kendo.ui.DataBoundWidget.fn._angularItems.call(this, cmd);\n\n           this._angularGroupItems(cmd);\n       },\n\n       _angularGroupItems: function(cmd) {\n           var that = this;\n\n           if (that._group) {\n              that.angular(cmd, function(){\n                   return {\n                       elements: that.tbody.children(\".k-grouping-row\"),\n                       data: $.map(groupRows(that.dataSource.view()), function(dataItem){\n                           return { dataItem: dataItem };\n                       })\n                   };\n               });\n           }\n       },\n\n       _renderContent: function(data, colspan, groups) {\n            var that = this,\n                idx,\n                length,\n                html = \"\",\n                isLocked = that.lockedContent != null,\n                templates = {\n                        rowTemplate: that.rowTemplate,\n                        altRowTemplate: that.altRowTemplate,\n                        groupFooterTemplate: that.groupFooterTemplate\n                    };\n\n            colspan = isLocked ? colspan - visibleLeafColumns(visibleLockedColumns(that.columns)).length : colspan;\n\n            if(groups > 0) {\n\n                colspan = isLocked ? colspan - groups : colspan;\n\n                if (that.detailTemplate) {\n                    colspan++;\n                }\n\n                if (that.groupFooterTemplate) {\n                    that._groupAggregatesDefaultObject = buildEmptyAggregatesObject(that.dataSource.aggregate());\n                }\n\n                for (idx = 0, length = data.length; idx < length; idx++) {\n                    html += that._groupRowHtml(data[idx], colspan, 0, isLocked ? groupRowLockedContentBuilder : groupRowBuilder, templates, isLocked);\n                }\n            } else {\n                html += that._rowsHtml(data, templates);\n            }\n\n            that.tbody = appendContent(that.tbody, that.table, html);\n       },\n\n       _renderLockedContent: function(data, colspan, groups) {\n           var html = \"\",\n               idx,\n               length,\n               templates = {\n                   rowTemplate: this.lockedRowTemplate,\n                   altRowTemplate: this.lockedAltRowTemplate,\n                   groupFooterTemplate: this.lockedGroupFooterTemplate\n               };\n\n           if (this.lockedContent) {\n\n               var table = this.lockedTable;\n\n               if (groups > 0) {\n                   colspan = colspan - visibleColumns(leafColumns(nonLockedColumns(this.columns))).length;\n                   for (idx = 0, length = data.length; idx < length; idx++) {\n                       html += this._groupRowHtml(data[idx], colspan, 0, groupRowBuilder, templates);\n                   }\n               } else {\n                   html = this._rowsHtml(data, templates);\n               }\n\n               appendContent(table.children(\"tbody\"), table, html);\n\n               this._syncLockedContentHeight();\n           }\n       },\n\n       _adjustRowsHeight: function(table1, table2) {\n           var rows = table1[0].rows,\n               length = rows.length,\n               idx,\n               rows2 = table2[0].rows,\n               containers = table1.add(table2),\n               containersLength = containers.length,\n               heights = [];\n\n           for (idx = 0; idx < length; idx++) {\n               if (!rows2[idx]) {\n                   break;\n               }\n\n               if (rows[idx].style.height) {\n                   rows[idx].style.height = rows2[idx].style.height = \"\";\n               }\n\n               var offsetHeight1 = rows[idx].offsetHeight;\n               var offsetHeight2 = rows2[idx].offsetHeight;\n               var height = 0;\n\n               if (offsetHeight1 > offsetHeight2) {\n                   height = offsetHeight1;\n               } else if (offsetHeight1 < offsetHeight2) {\n                   height = offsetHeight2;\n               }\n\n               heights.push(height);\n           }\n\n           for (idx = 0; idx < containersLength; idx++) {\n               containers[idx].style.display = \"none\";\n           }\n\n           for (idx = 0; idx < length; idx++) {\n               if (heights[idx]) {\n                   //add one to resolve row misalignment in IE\n                   rows[idx].style.height = rows2[idx].style.height = (heights[idx] + 1) + \"px\";\n               }\n           }\n\n           for (idx = 0; idx < containersLength; idx++) {\n               containers[idx].style.display = \"\";\n           }\n       }\n   });\n\n   if (kendo.ExcelMixin) {\n       kendo.ExcelMixin.extend(Grid.prototype);\n   }\n\n   if (kendo.PDFMixin) {\n       kendo.PDFMixin.extend(Grid.prototype);\n   }\n\n   function syncTableHeight(table1, table2) {\n       table1 = table1[0];\n       table2 = table2[0];\n\n       if (table1.rows.length !== table2.rows.length) {\n           var lockedHeigth = table1.offsetHeight;\n           var tableHeigth = table2.offsetHeight;\n\n           var row;\n           var diff;\n           if (lockedHeigth > tableHeigth) {\n               row = table2.rows[table2.rows.length - 1];\n\n               if (filterRowRegExp.test(row.className)) {\n                   row = table2.rows[table2.rows.length - 2];\n               }\n\n               diff = lockedHeigth - tableHeigth;\n           } else {\n               row = table1.rows[table1.rows.length - 1];\n\n               if (filterRowRegExp.test(row.className)) {\n                   row = table1.rows[table1.rows.length - 2];\n               }\n\n               diff = tableHeigth - lockedHeigth;\n           }\n           row.style.height = row.offsetHeight + diff + \"px\";\n       }\n   }\n\n   function adjustRowHeight(row1, row2) {\n       var height;\n       var offsetHeight1 = row1.offsetHeight;\n       var offsetHeight2 = row2.offsetHeight;\n\n       if (offsetHeight1 > offsetHeight2) {\n           height = offsetHeight1 + \"px\";\n       } else if (offsetHeight1 < offsetHeight2) {\n           height = offsetHeight2 + \"px\";\n       }\n\n       if (height) {\n           row1.style.height = row2.style.height = height;\n       }\n   }\n\n\n   function getCommand(commands, name) {\n       var idx, length, command;\n\n       if (typeof commands === STRING && commands === name) {\n          return commands;\n       }\n\n       if (isPlainObject(commands) && commands.name === name) {\n           return commands;\n       }\n\n       if (isArray(commands)) {\n           for (idx = 0, length = commands.length; idx < length; idx++) {\n               command = commands[idx];\n\n               if ((typeof command === STRING && command === name) || (command.name === name)) {\n                   return command;\n               }\n           }\n       }\n       return null;\n   }\n\n   function focusTable(table, direct) {\n       var msie = browser.msie;\n       if (direct === true) {\n           table = $(table);\n           var condition = true || msie && table.parent().is(\".k-grid-content,.k-grid-header-wrap\"),\n               scrollTop, scrollLeft;\n           if (condition) {\n               scrollTop = table.parent().scrollTop();\n               scrollLeft = table.parent().scrollLeft();\n           }\n\n           if (msie) {\n               try {\n                   //The setActive method does not cause the document to scroll to the active object in the current page\n                   table[0].setActive();\n               } catch(e) {\n                   table[0].focus();\n               }\n           } else {\n               table[0].focus(); //because preventDefault bellow, IE cannot focus the table alternative is unselectable=on\n           }\n\n           if (condition) {\n               table.parent().scrollTop(scrollTop);\n               table.parent().scrollLeft(scrollLeft);\n           }\n\n       } else {\n           $(table).one(\"focusin\", function(e) { e.preventDefault(); }).focus();\n       }\n   }\n\n   function tableClick(e) {\n       var currentTarget = $(e.currentTarget),\n           isHeader = currentTarget.is(\"th\"),\n           table = this.table.add(this.lockedTable),\n           headerTable = this.thead.parent().add($(\">table\", this.lockedHeader)),\n           isInput = $(e.target).is(\":button,a,:input,a>.k-icon,textarea,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap\"),\n           currentTable = currentTarget.closest(\"table\")[0];\n\n       if (kendo.support.touch || (isInput && currentTarget.find(kendo.roleSelector(\"filtercell\")).length)) {\n           return;\n       }\n\n       if (currentTable !== table[0] && currentTable !== table[1] && currentTable !== headerTable[0] && currentTable !== headerTable[1]) {\n           return;\n       }\n\n       if ($(e.target).is(\"a.k-i-collapse, a.k-i-expand\")) {\n           return;\n       }\n\n       this.current(currentTarget);\n\n       if (isHeader || !isInput) {\n           setTimeout(function() {\n               //Do not focus if widget, because in IE8 a DDL will be closed\n               if (!(isIE8 && $(kendo._activeElement()).hasClass(\"k-widget\"))) {\n                    //DOMElement.focus() only for header, because IE doesn't really focus the table\n                    focusTable(currentTable, true);\n                }\n           });\n       }\n\n       if (isHeader) {\n           e.preventDefault(); //if any problem occurs, call preventDefault only for the clicked header links\n       }\n   }\n\n   function verticalTable(current, downTable, upTable, up) {\n       current = $(current);\n       if (up) {\n           var temp = downTable;\n           downTable = upTable;\n           upTable = temp;\n       }\n\n       if (downTable.not(current).length != downTable.length) {\n           return current;\n       }\n\n       return current[0] == upTable[0] ?\n                   downTable.eq(0) : downTable.eq(1);\n   }\n\n   function moveVertical(current, currentTable, dataTable, headerTable, up, lockedColumns) {\n       var row, index;\n       var nextFn = up ? \"prevAll\" : \"nextAll\";\n\n       if (current) {\n           row = current.parent()[nextFn](NAVROW).first();\n           if (!row[0] && (up || current.is(\"th\")) || (!up && current[0].rowSpan > 1)) {\n               currentTable = verticalTable(currentTable, dataTable, headerTable, up);\n               focusTable(currentTable, true);\n               if (up && !current.is(\".k-header\")) {\n                   return leafDataCells(currentTable.find(\"thead:first\")).eq(current.index());\n               }\n               row = currentTable.find((up ? \">thead>\" : \">tbody>\") + NAVROW).first();\n           }\n\n           if (!up && current[0].colSpan > 1 && current.is(\".k-header\")) { // is not leaf header column\n               current = childColumnsCells(current).eq(1);\n           } else {\n               if (current.is(\".k-header\") && up) {\n                   var parents = parentColumnsCells(current);\n                   current = parents.eq(parents.length - 2);\n               } else {\n                   index = current.attr(kendo.attr(\"index\"));\n                   if (index === undefined || up) {\n                       index = current.index();\n                   } else if (currentTable.parent().prev().hasClass(\"k-grid-content-locked\")){\n                       index -= lockedColumns;\n                   }\n                   current = row.children().eq(index);\n               }\n           }\n\n           if (!current[0] || !current.is(NAVCELL)) {\n               current = row.children(NAVCELL).first();\n           }\n       } else {\n           current = dataTable.find(FIRSTNAVITEM);\n       }\n\n       return current;\n   }\n\n   function moveLeft(current, currentTable, dataTable, headerTable, relatedRow) {\n       var isLocked = dataTable.length > 1;\n\n       if (current) {\n           if (current.prevAll(\":visible\")[0]) {\n               current = current.prevAll(DATA_CELL).first();\n           } else if (isLocked) {\n               if (currentTable == dataTable[1]) {\n                   focusTable(dataTable[0]);\n                   current = relatedRow(current.parent()).children(DATA_CELL).last();\n               } else if (currentTable == headerTable[1]) {\n                   focusTable(headerTable[0]);\n                   current = headerTable.eq(0).find(\"tr>\" + DATA_CELL).last();\n               }\n           }\n       } else {\n           current = dataTable.find(FIRSTNAVITEM);\n       }\n\n       return current;\n   }\n\n   function moveRight(current, currentTable, dataTable, headerTable, relatedRow) {\n       var isLocked = dataTable.length > 1;\n\n       if (current) {\n           if (current.nextAll(\":visible\")[0]) {\n               current = current.nextAll(DATA_CELL).first();\n           } else if (isLocked) {\n               if (currentTable == dataTable[0]) {\n                   focusTable(dataTable[1]);\n                   current = relatedRow(current.parent()).children(DATA_CELL).first();\n               } else if (currentTable == headerTable[0]) {\n                   focusTable(headerTable[1]);\n                   current = headerTable.eq(1).find(\"tr>\" + DATA_CELL).first();\n               }\n           }\n       } else {\n           current = dataTable.find(FIRSTNAVITEM);\n       }\n\n       return current;\n   }\n\n   function tabNext(current, currentTable, dataTable, relatedRow, back) {\n       var isLocked = dataTable.length == 2;\n       var switchRow = true;\n       var next = back ? current.prevAll(DATA_CELL + \":first\") : current.nextAll(\":visible:first\");\n\n       if (!next.length) {\n           next = current.parent();\n           if (isLocked) {\n               switchRow = (back && currentTable == dataTable[0]) || (!back && currentTable == dataTable[1]);\n               next = relatedRow(next);\n           }\n\n           if (switchRow) {\n               next = next[back ? \"prevAll\" : \"nextAll\"](\"tr:not(.k-grouping-row):not(.k-detail-row):visible:first\");\n           }\n           next = next.children(DATA_CELL + (back ? \":last\" : \":first\"));\n       }\n\n       return next;\n   }\n\n   function groupRowBuilder(colspan, level, text) {\n       return '<tr class=\"k-grouping-row\">' + groupCells(level) +\n           '<td colspan=\"' + colspan + '\" aria-expanded=\"true\">' +\n           '<p class=\"k-reset\">' +\n           '<a class=\"k-icon k-i-collapse\" href=\"#\" tabindex=\"-1\"></a>' + text +\n       '</p></td></tr>';\n   }\n\n   function groupRowLockedContentBuilder(colspan, level, text) {\n       return '<tr class=\"k-grouping-row\">' +\n           '<td colspan=\"' + colspan + '\" aria-expanded=\"true\">' +\n           '<p class=\"k-reset\">&nbsp;</p></td></tr>';\n   }\n\n   ui.plugin(Grid);\n   ui.plugin(VirtualScrollable);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        CHANGE = \"change\",\n        CANCEL = \"cancel\",\n        DATABOUND = \"dataBound\",\n        DATABINDING = \"dataBinding\",\n        Widget = kendo.ui.Widget,\n        keys = kendo.keys,\n        FOCUSSELECTOR =  \">*\",\n        PROGRESS = \"progress\",\n        ERROR = \"error\",\n        FOCUSED = \"k-state-focused\",\n        SELECTED = \"k-state-selected\",\n        KEDITITEM = \"k-edit-item\",\n        STRING = \"string\",\n        EDIT = \"edit\",\n        REMOVE = \"remove\",\n        SAVE = \"save\",\n        CLICK = \"click\",\n        NS = \".kendoListView\",\n        proxy = $.proxy,\n        activeElement = kendo._activeElement,\n        progress = kendo.ui.progress,\n        DataSource = kendo.data.DataSource;\n\n    var ListView = kendo.ui.DataBoundWidget.extend( {\n        init: function(element, options) {\n            var that = this;\n\n            options = $.isArray(options) ? { dataSource: options } : options;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n\n            that.wrapper = element = that.element;\n\n            if (element[0].id) {\n                that._itemId = element[0].id + \"_lv_active\";\n            }\n\n            that._element();\n\n            that._dataSource();\n\n            that._templates();\n\n            that._navigatable();\n\n            that._selectable();\n\n            that._pageable();\n\n            that._crudHandlers();\n\n            if (that.options.autoBind){\n                that.dataSource.fetch();\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n            CHANGE,\n            CANCEL,\n            DATABINDING,\n            DATABOUND,\n            EDIT,\n            REMOVE,\n            SAVE\n        ],\n\n        options: {\n            name: \"ListView\",\n            autoBind: true,\n            selectable: false,\n            navigatable: false,\n            template: \"\",\n            altTemplate: \"\",\n            editTemplate: \"\"\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n\n            this._templates();\n        },\n\n        _templates: function() {\n            var options = this.options;\n\n            this.template = kendo.template(options.template || \"\");\n            this.altTemplate = kendo.template(options.altTemplate || options.template);\n            this.editTemplate = kendo.template(options.editTemplate || \"\");\n        },\n\n        _item: function(action) {\n            return this.element.children()[action]();\n        },\n\n        items: function() {\n            return this.element.children();\n        },\n\n        dataItem: function(element) {\n            var attr = kendo.attr(\"uid\");\n            var uid = $(element).closest(\"[\" + attr + \"]\").attr(attr);\n\n            return this.dataSource.getByUid(uid);\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n            this._dataSource();\n\n            if (this.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        _unbindDataSource: function() {\n            var that = this;\n\n            that.dataSource.unbind(CHANGE, that._refreshHandler)\n                            .unbind(PROGRESS, that._progressHandler)\n                            .unbind(ERROR, that._errorHandler);\n        },\n\n        _dataSource: function() {\n            var that = this;\n\n            if (that.dataSource && that._refreshHandler) {\n                that._unbindDataSource();\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._progress, that);\n                that._errorHandler = proxy(that._error, that);\n            }\n\n            that.dataSource = DataSource.create(that.options.dataSource)\n                                .bind(CHANGE, that._refreshHandler)\n                                .bind(PROGRESS, that._progressHandler)\n                                .bind(ERROR, that._errorHandler);\n        },\n\n        _progress: function() {\n            progress(this.element, true);\n        },\n\n        _error: function() {\n            progress(this.element, false);\n        },\n\n        _element: function() {\n            this.element.addClass(\"k-widget k-listview\").attr(\"role\", \"listbox\");\n        },\n\n        refresh: function(e) {\n            var that = this,\n                view = that.dataSource.view(),\n                data,\n                items,\n                item,\n                html = \"\",\n                idx,\n                length,\n                template = that.template,\n                altTemplate = that.altTemplate,\n                active = activeElement();\n\n            e = e || {};\n\n            if (e.action === \"itemchange\") {\n                if (!that._hasBindingTarget() && !that.editable) {\n                    data = e.items[0];\n                    item = that.items().filter(\"[\" + kendo.attr(\"uid\") + \"=\" + data.uid + \"]\");\n\n                    if (item.length > 0) {\n                        idx = item.index();\n\n                        that.angular(\"cleanup\", function() {\n                            return { elements: [ item ]};\n                        });\n\n                        item.replaceWith(template(data));\n                        item = that.items().eq(idx);\n                        item.attr(kendo.attr(\"uid\"), data.uid);\n\n                        that.angular(\"compile\", function() {\n                            return { elements: [ item ], data: [ { dataItem: data } ]};\n                        });\n\n                        that.trigger(\"itemChange\", {\n                            item: item,\n                            data: data\n                        });\n                    }\n                }\n\n                return;\n            }\n\n            if (that.trigger(DATABINDING, { action: e.action || \"rebind\", items: e.items, index: e.index })) {\n                return;\n            }\n\n            that._angularItems(\"cleanup\");\n\n            that._destroyEditable();\n\n            for (idx = 0, length = view.length; idx < length; idx++) {\n                if (idx % 2) {\n                    html += altTemplate(view[idx]);\n                } else {\n                    html += template(view[idx]);\n                }\n            }\n\n            that.element.html(html);\n\n            items = that.items();\n            for (idx = 0, length = view.length; idx < length; idx++) {\n                items.eq(idx).attr(kendo.attr(\"uid\"), view[idx].uid)\n                             .attr(\"role\", \"option\")\n                             .attr(\"aria-selected\", \"false\");\n            }\n\n            if (that.element[0] === active && that.options.navigatable) {\n                that.current(items.eq(0));\n            }\n\n            that._angularItems(\"compile\");\n\n            that.trigger(DATABOUND);\n        },\n\n        _pageable: function() {\n            var that = this,\n                pageable = that.options.pageable,\n                settings,\n                pagerId;\n\n            if ($.isPlainObject(pageable)) {\n                pagerId = pageable.pagerId;\n                settings = $.extend({}, pageable, {\n                    dataSource: that.dataSource,\n                    pagerId: null\n                });\n\n                that.pager = new kendo.ui.Pager($(\"#\" + pagerId), settings);\n            }\n        },\n\n        _selectable: function() {\n            var that = this,\n                multi,\n                current,\n                selectable = that.options.selectable,\n                navigatable = that.options.navigatable;\n\n            if (selectable) {\n                multi = kendo.ui.Selectable.parseOptions(selectable).multiple;\n\n                that.selectable = new kendo.ui.Selectable(that.element, {\n                    aria: true,\n                    multiple: multi,\n                    filter: FOCUSSELECTOR,\n                    change: function() {\n                        that.trigger(CHANGE);\n                    }\n                });\n\n                if (navigatable) {\n                    that.element.on(\"keydown\" + NS, function(e) {\n                        if (e.keyCode === keys.SPACEBAR) {\n                            current = that.current();\n                            if (e.target == e.currentTarget) {\n                                e.preventDefault();\n                            }\n                            if(multi) {\n                                if(!e.ctrlKey) {\n                                    that.selectable.clear();\n                                } else {\n                                    if (current && current.hasClass(SELECTED)) {\n                                        current.removeClass(SELECTED);\n                                        return;\n                                    }\n                                }\n                            } else {\n                                that.selectable.clear();\n                            }\n\n                            that.selectable.value(current);\n                        }\n                    });\n                }\n            }\n        },\n\n        current: function(candidate) {\n            var that = this,\n                element = that.element,\n                current = that._current,\n                id = that._itemId;\n\n            if (candidate === undefined) {\n                return current;\n            }\n\n            if (current && current[0]) {\n                if (current[0].id === id) {\n                    current.removeAttr(\"id\");\n                }\n\n                current.removeClass(FOCUSED);\n                element.removeAttr(\"aria-activedescendant\");\n            }\n\n            if (candidate && candidate[0]) {\n                id = candidate[0].id || id;\n\n                that._scrollTo(candidate[0]);\n\n                element.attr(\"aria-activedescendant\", id);\n                candidate.addClass(FOCUSED).attr(\"id\", id);\n            }\n\n            that._current = candidate;\n        },\n\n        _scrollTo: function(element) {\n            var that = this,\n                container,\n                UseJQueryoffset = false,\n                SCROLL = \"scroll\";\n\n            if (that.wrapper.css(\"overflow\") == \"auto\" || that.wrapper.css(\"overflow\") == SCROLL) {\n                container = that.wrapper[0];\n            } else {\n                container = window;\n                UseJQueryoffset = true;\n            }\n\n            var scrollDirectionFunc = function(direction, dimension) {\n\n                var elementOffset = UseJQueryoffset ? $(element).offset()[direction.toLowerCase()] : element[\"offset\" + direction],\n                    elementDimension = element[\"client\" + dimension],\n                    containerScrollAmount = $(container)[SCROLL + direction](),\n                    containerDimension = $(container)[dimension.toLowerCase()]();\n\n                if (elementOffset + elementDimension > containerScrollAmount + containerDimension) {\n                    $(container)[SCROLL + direction](elementOffset + elementDimension - containerDimension);\n                } else if (elementOffset < containerScrollAmount) {\n                    $(container)[SCROLL + direction](elementOffset);\n                }\n            };\n\n            scrollDirectionFunc(\"Top\", \"Height\");\n            scrollDirectionFunc(\"Left\", \"Width\");\n        },\n\n        _navigatable: function() {\n            var that = this,\n                navigatable = that.options.navigatable,\n                element = that.element,\n                clickCallback = function(e) {\n                    that.current($(e.currentTarget));\n                    if(!$(e.target).is(\":button,a,:input,a>.k-icon,textarea\")) {\n                        element.focus();\n                    }\n                };\n\n            if (navigatable) {\n                that._tabindex();\n                element.on(\"focus\" + NS, function() {\n                        var current = that._current;\n                        if(!current || !current.is(\":visible\")) {\n                            current = that._item(\"first\");\n                        }\n\n                        that.current(current);\n                    })\n                    .on(\"focusout\" + NS, function() {\n                        if (that._current) {\n                            that._current.removeClass(FOCUSED);\n                        }\n                    })\n                    .on(\"keydown\" + NS, function(e) {\n                        var key = e.keyCode,\n                            current = that.current(),\n                            target = $(e.target),\n                            canHandle = !target.is(\":button,textarea,a,a>.t-icon,input\"),\n                            isTextBox = target.is(\":text\"),\n                            preventDefault = kendo.preventDefault,\n                            editItem = element.find(\".\" + KEDITITEM),\n                            active = activeElement(), idx;\n\n                        if ((!canHandle && !isTextBox && keys.ESC != key) || (isTextBox && keys.ESC != key && keys.ENTER != key)) {\n                            return;\n                        }\n\n                        if (keys.UP === key || keys.LEFT === key) {\n                            if (current) {\n                                current = current.prev();\n                            }\n\n                            that.current(!current || !current[0] ? that._item(\"last\") : current);\n                            preventDefault(e);\n                        } else if (keys.DOWN === key || keys.RIGHT === key) {\n                            if (current) {\n                                current = current.next();\n                            }\n                            that.current(!current || !current[0] ? that._item(\"first\") : current);\n                            preventDefault(e);\n                        } else if (keys.PAGEUP === key) {\n                            that.current(null);\n                            that.dataSource.page(that.dataSource.page() - 1);\n                            preventDefault(e);\n                        } else if (keys.PAGEDOWN === key) {\n                            that.current(null);\n                            that.dataSource.page(that.dataSource.page() + 1);\n                            preventDefault(e);\n                        } else if (keys.HOME === key) {\n                            that.current(that._item(\"first\"));\n                            preventDefault(e);\n                        } else if (keys.END === key) {\n                            that.current(that._item(\"last\"));\n                            preventDefault(e);\n                        } else if (keys.ENTER === key) {\n                            if (editItem.length !== 0 && (canHandle || isTextBox)) {\n                                idx = that.items().index(editItem);\n                                if (active) {\n                                    active.blur();\n                                }\n                                that.save();\n                                var focusAgain = function(){\n                                    that.element.trigger(\"focus\");\n                                    that.current(that.items().eq(idx));\n                                };\n                                that.one(\"dataBound\", focusAgain);\n                            } else if (that.options.editTemplate !== \"\") {\n                                that.edit(current);\n                            }\n                        } else if (keys.ESC === key) {\n                            editItem = element.find(\".\" + KEDITITEM);\n                            if (editItem.length === 0) {\n                                return;\n                            }\n                            idx = that.items().index(editItem);\n                            that.cancel();\n                            that.element.trigger(\"focus\");\n                            that.current(that.items().eq(idx));\n                        }\n                    });\n\n                element.on(\"mousedown\" + NS + \" touchstart\" + NS, FOCUSSELECTOR, proxy(clickCallback, that));\n            }\n       },\n\n       clearSelection: function() {\n           var that = this;\n           that.selectable.clear();\n           that.trigger(CHANGE);\n       },\n\n       select: function(items) {\n           var that = this,\n               selectable = that.selectable;\n\n            items = $(items);\n            if(items.length) {\n                if(!selectable.options.multiple) {\n                    selectable.clear();\n                    items = items.first();\n                }\n                selectable.value(items);\n                return;\n            }\n\n           return selectable.value();\n       },\n\n       _destroyEditable: function() {\n           var that = this;\n           if (that.editable) {\n               that.editable.destroy();\n               delete that.editable;\n           }\n       },\n\n       _modelFromElement: function(element) {\n           var uid = element.attr(kendo.attr(\"uid\"));\n\n           return this.dataSource.getByUid(uid);\n       },\n\n       _closeEditable: function(validate) {\n           var that = this,\n               editable = that.editable,\n               data,\n               item,\n               index,\n               template = that.template,\n               valid = true;\n\n           if (editable) {\n               if (validate) {\n                   valid = editable.end();\n               }\n\n               if (valid) {\n                   if (editable.element.index() % 2) {\n                       template = that.altTemplate;\n                   }\n\n                   data = that._modelFromElement(editable.element);\n                   that._destroyEditable();\n\n                   index = editable.element.index();\n                   editable.element.replaceWith(template(data));\n                   item = that.items().eq(index);\n                   item.attr(kendo.attr(\"uid\"), data.uid);\n\n                   if (that._hasBindingTarget()) {\n                        kendo.bind(item, data);\n                   }\n               }\n           }\n\n           return valid;\n       },\n\n       edit: function(item) {\n           var that = this,\n               data = that._modelFromElement(item),\n               container,\n               uid = data.uid,\n               index;\n\n            that.cancel();\n\n            item = that.items().filter(\"[\" + kendo.attr(\"uid\") + \"=\" + uid + \"]\");\n            index = item.index();\n            item.replaceWith(that.editTemplate(data));\n            container = that.items().eq(index).addClass(KEDITITEM).attr(kendo.attr(\"uid\"), data.uid);\n            that.editable = container.kendoEditable({\n                model: data,\n                clearContainer: false,\n                errorTemplate: false,\n                target: that\n            }).data(\"kendoEditable\");\n\n            that.trigger(EDIT, { model: data, item: container });\n       },\n\n       save: function() {\n           var that = this,\n               editable = that.editable,\n               model;\n\n           if (!editable) {\n               return;\n           }\n\n           editable = editable.element;\n           model = that._modelFromElement(editable);\n\n           if (!that.trigger(SAVE, { model: model, item: editable }) && that._closeEditable(true)) {\n               that.dataSource.sync();\n           }\n       },\n\n       remove: function(item) {\n           var that = this,\n               dataSource = that.dataSource,\n               data = that._modelFromElement(item);\n\n           if (!that.trigger(REMOVE, { model: data, item: item })) {\n               item.hide();\n               dataSource.remove(data);\n               dataSource.sync();\n           }\n       },\n\n       add: function() {\n           var that = this,\n               dataSource = that.dataSource,\n               index = dataSource.indexOf((dataSource.view() || [])[0]);\n\n           if (index < 0) {\n               index = 0;\n           }\n\n           that.cancel();\n           dataSource.insert(index, {});\n           that.edit(that.element.children().first());\n       },\n\n       cancel: function() {\n           var that = this,\n               dataSource = that.dataSource;\n\n           if (that.editable) {\n               var container = that.editable.element;\n               var model = that._modelFromElement(container);\n\n               if (!that.trigger(CANCEL, { model: model, container: container})) {\n                   dataSource.cancelChanges(model);\n                   that._closeEditable(false);\n               }\n           }\n       },\n\n       _crudHandlers: function() {\n           var that = this,\n               clickNS = CLICK + NS;\n\n           that.element.on(clickNS, \".k-edit-button\", function(e) {\n               var item = $(this).closest(\"[\" + kendo.attr(\"uid\") + \"]\");\n               that.edit(item);\n               e.preventDefault();\n           });\n\n           that.element.on(clickNS, \".k-delete-button\", function(e) {\n               var item = $(this).closest(\"[\" + kendo.attr(\"uid\") + \"]\");\n               that.remove(item);\n               e.preventDefault();\n           });\n\n           that.element.on(clickNS, \".k-update-button\", function(e) {\n               that.save();\n               e.preventDefault();\n           });\n\n           that.element.on(clickNS, \".k-cancel-button\", function(e) {\n               that.cancel();\n               e.preventDefault();\n           });\n       },\n\n       destroy: function() {\n           var that = this;\n\n           Widget.fn.destroy.call(that);\n\n           that._unbindDataSource();\n\n           that._destroyEditable();\n\n           that.element.off(NS);\n\n           if (that.pager) {\n               that.pager.destroy();\n           }\n\n           kendo.destroy(that.element);\n       }\n    });\n\n    kendo.ui.plugin(ListView);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        antiForgeryTokens = kendo.antiForgeryTokens,\n        logToConsole = kendo.logToConsole,\n        rFileExtension = /\\.([^\\.]+)$/,\n        NS = \".kendoUpload\",\n        SELECT = \"select\",\n        UPLOAD = \"upload\",\n        SUCCESS = \"success\",\n        ERROR = \"error\",\n        COMPLETE = \"complete\",\n        CANCEL = \"cancel\",\n        PROGRESS = \"progress\",\n        REMOVE = \"remove\";\n\n    var Upload = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.name = element.name;\n            that.multiple = that.options.multiple;\n            that.localization = that.options.localization;\n\n            var activeInput = that.element;\n            that.wrapper = activeInput.closest(\".k-upload\");\n            if (that.wrapper.length === 0) {\n                that.wrapper = that._wrapInput(activeInput);\n            }\n\n            that._activeInput(activeInput);\n            that.toggle(that.options.enabled);\n\n            var ns = that._ns = NS + \"-\" + kendo.guid();\n            activeInput.closest(\"form\")\n                .on(\"submit\" + ns, $.proxy(that._onParentFormSubmit, that))\n                .on(\"reset\" + ns, $.proxy(that._onParentFormReset, that));\n\n            if (that.options.async.saveUrl) {\n                that._module = that._supportsFormData() ?\n                new formDataUploadModule(that) :\n                new iframeUploadModule(that);\n                that._async = true;\n\n                var initialFiles = that.options.files;\n                if (initialFiles.length > 0) {\n                    that._renderInitialFiles(initialFiles);\n                }\n\n            } else {\n                that._module = new syncUploadModule(that);\n            }\n\n            if (that._supportsDrop()) {\n                that._setupDropZone();\n            }\n\n            that.wrapper\n            .on(\"click\", \".k-upload-action\", $.proxy(that._onFileAction, that))\n            .on(\"click\", \".k-upload-selected\", $.proxy(that._onUploadSelected, that));\n\n            if(that.element.val()) {\n                that._onInputChange({ target: that.element });\n            }\n        },\n\n        events: [\n            SELECT,\n            UPLOAD,\n            SUCCESS,\n            ERROR,\n            COMPLETE,\n            CANCEL,\n            PROGRESS,\n            REMOVE\n        ],\n\n        options: {\n            name: \"Upload\",\n            enabled: true,\n            multiple: true,\n            showFileList: true,\n            template: \"\",\n            files: [],\n            async: {\n                removeVerb: \"POST\",\n                autoUpload: true,\n                withCredentials: true\n            },\n            localization: {\n                \"select\": \"Select files...\",\n                \"cancel\": \"Cancel\",\n                \"retry\": \"Retry\",\n                \"remove\": \"Remove\",\n                \"uploadSelectedFiles\": \"Upload files\",\n                \"dropFilesHere\": \"drop files here to upload\",\n                \"statusUploading\": \"uploading\",\n                \"statusUploaded\": \"uploaded\",\n                \"statusWarning\": \"warning\",\n                \"statusFailed\": \"failed\",\n                \"headerStatusUploading\": \"Uploading...\",\n                \"headerStatusUploaded\": \"Done\"\n            }\n        },\n\n        setOptions: function(options) {\n            var that = this,\n                activeInput = that.element;\n\n            Widget.fn.setOptions.call(that, options);\n\n            that.multiple = that.options.multiple;\n\n            activeInput.attr(\"multiple\", that._supportsMultiple() ? that.multiple : false);\n            that.toggle(that.options.enabled);\n        },\n\n        enable: function(enable) {\n            enable = typeof (enable) === \"undefined\" ? true : enable;\n            this.toggle(enable);\n        },\n\n        disable: function() {\n            this.toggle(false);\n        },\n\n        toggle: function(enable) {\n            enable = typeof (enable) === \"undefined\" ? enable : !enable;\n            this.wrapper.toggleClass(\"k-state-disabled\", enable);\n            this.element.prop(\"disabled\", enable);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            $(document)\n                .add($(\".k-dropzone\", that.wrapper))\n                .add(that.wrapper.closest(\"form\"))\n                .off(that._ns);\n\n            $(that.element).off(NS);\n\n            Widget.fn.destroy.call(that);\n        },\n\n        _addInput: function(sourceInput) {\n            //check if source input is a DOM element. Required for some unit tests\n            if (!sourceInput[0].nodeType) {\n                return;\n            }\n\n            var that = this,\n                input = sourceInput.clone().val(\"\");\n\n            input\n                .insertAfter(that.element)\n                .data(\"kendoUpload\", that);\n\n            $(that.element)\n                .hide()\n                .attr(\"tabindex\", \"-1\")\n                .removeAttr(\"id\")\n                .off(NS);\n\n            that._activeInput(input);\n            that.element.focus();\n        },\n\n        _activeInput: function(input) {\n            var that = this,\n                wrapper = that.wrapper;\n\n            that.element = input;\n\n            input\n                .attr(\"multiple\", that._supportsMultiple() ? that.multiple : false)\n                .attr(\"autocomplete\", \"off\")\n                .on(\"click\" + NS, function(e) {\n                    if (wrapper.hasClass(\"k-state-disabled\")) {\n                        e.preventDefault();\n                    }\n                })\n                .on(\"focus\" + NS, function() {\n                    $(this).parent().addClass(\"k-state-focused\");\n                })\n                .on(\"blur\" + NS, function() {\n                    $(this).parent().removeClass(\"k-state-focused\");\n                })\n                .on(\"change\" + NS, $.proxy(that._onInputChange, that))\n                .on(\"keydown\" + NS, $.proxy(that._onInputKeyDown, that));\n        },\n\n        _onInputKeyDown: function(e) {\n            var that = this;\n            var firstButton = that.wrapper.find(\".k-upload-action:first\");\n\n            if (e.keyCode === kendo.keys.TAB && firstButton.length > 0) {\n                e.preventDefault();\n\n                firstButton.focus();\n            }\n        },\n\n        _onInputChange: function(e) {\n            var that = this;\n            var input = $(e.target);\n            var files = assignGuidToFiles(that._inputFiles(input), that._isAsyncNonBatch());\n\n            var prevented = that.trigger(SELECT, { files: files });\n\n            if (prevented) {\n                that._addInput(input);\n                input.remove();\n            } else {\n                that._module.onSelect({target : input}, files);\n            }\n        },\n\n        _onDrop: function (e) {\n            var dt = e.originalEvent.dataTransfer;\n            var that = this;\n            var droppedFiles = dt.files;\n            var files = assignGuidToFiles(getAllFileInfo(droppedFiles), that._isAsyncNonBatch());\n\n            stopEvent(e);\n\n            if (droppedFiles.length > 0) {\n                if (!that.multiple && files.length > 1) {\n                    files.splice(1, files.length - 1);\n                }\n\n                var prevented = that.trigger(SELECT, { files: files });\n                if (!prevented) {\n                    that._module.onSelect({target : $(\".k-dropzone\", that.wrapper) }, files);\n                }\n            }\n        },\n\n        _isAsyncNonBatch: function () {\n            return (this._async && !this.options.async.batch) || false;\n        },\n\n        _renderInitialFiles: function(files) {\n            var that = this;\n            var idx = 0;\n            files = assignGuidToFiles(files, true);\n\n            for (idx = 0; idx < files.length; idx++) {\n                var currentFile = files[idx];\n\n                var fileEntry = that._enqueueFile(currentFile.name, { fileNames: [ currentFile ] });\n                fileEntry.addClass(\"k-file-success\").data(\"files\", [ files[idx] ]);\n\n                $(\".k-progress\", fileEntry).width('100%');\n                $(\".k-upload-status\", fileEntry).prepend(\"<span class='k-upload-pct'>100%</span>\");\n\n                if (that._supportsRemove()){\n                    that._fileAction(fileEntry, REMOVE);\n                }\n            }\n        },\n\n        _prepareTemplateData: function(name, data) {\n            var filesData = data.fileNames,\n                templateData = {},\n                totalSize = 0,\n                idx = 0;\n\n            for (idx = 0; idx < filesData.length; idx++) {\n                totalSize += filesData[idx].size;\n            }\n\n            templateData.name = name;\n            templateData.size = totalSize;\n            templateData.files = data.fileNames;\n\n            return templateData;\n        },\n\n        _prepareDefaultFileEntryTemplate: function(name, data) {\n            var extension = \"\";\n            var defaultTemplate = $(\"<li class='k-file'>\" +\n                    \"<span class='k-progress'></span>\" +\n                    \"<span class='k-icon'></span>\" +\n                    \"<span class='k-filename' title='\" + name + \"'>\" + name + \"</span>\" +\n                    \"<strong class='k-upload-status'></strong>\" +\n                    \"</li>\");\n\n            if (data.fileNames.length == 1 && !!data.fileNames[0].extension) {\n                extension = data.fileNames[0].extension.substring(1);\n                $('.k-icon', defaultTemplate).addClass('k-i-' + extension);\n            }\n            return defaultTemplate;\n        },\n\n        _enqueueFile: function(name, data) {\n            var that = this;\n            var existingFileEntries;\n            var fileEntry;\n            var fileUid = data.fileNames[0].uid;\n            var fileList =  $(\".k-upload-files\", that.wrapper);\n            var options = that.options;\n            var template = options.template;\n            var templateData;\n\n            if (fileList.length === 0) {\n                fileList = $(\"<ul class='k-upload-files k-reset'></ul>\").appendTo(that.wrapper);\n                if (!that.options.showFileList) {\n                    fileList.hide();\n                }\n\n                that.wrapper.removeClass(\"k-upload-empty\");\n            }\n\n            existingFileEntries = $(\".k-file\", fileList);\n\n            if (!template) {\n                fileEntry = that._prepareDefaultFileEntryTemplate(name, data);\n            } else {\n                templateData = that._prepareTemplateData(name, data);\n                template = kendo.template(template);\n\n                fileEntry = $(\"<li class='k-file'>\" + template(templateData) + \"</li>\");\n                fileEntry.find(\".k-upload-action\").addClass(\"k-button k-button-bare\");\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: fileEntry,\n                        data: [ templateData ]\n                    };\n                });\n            }\n\n            fileEntry\n                .attr(kendo.attr(\"uid\"), fileUid)\n                .appendTo(fileList)\n                .data(data);\n\n            if (!that._async) {\n                $(\".k-progress\", fileEntry).width('100%');\n            }\n\n            if (!that.multiple && existingFileEntries.length > 0) {\n                if (!that.trigger(REMOVE, { files: existingFileEntries.data(\"fileNames\") })) {\n                    that._module.onRemove({target : $(existingFileEntries, that.wrapper)});\n                }\n            }\n\n            return fileEntry;\n        },\n\n        _removeFileEntry: function(fileEntry) {\n            var that = this;\n            var fileList = fileEntry.closest(\".k-upload-files\");\n            var allFiles;\n            var allCompletedFiles;\n\n            fileEntry.remove();\n            allFiles = $(\".k-file\", fileList);\n            allCompletedFiles = $(\".k-file-success, .k-file-error\", fileList);\n\n            if (allCompletedFiles.length === allFiles.length) {\n                this._hideUploadButton();\n            }\n\n            if (allFiles.length === 0) {\n                fileList.remove();\n                that.wrapper.addClass(\"k-upload-empty\");\n                that._hideHeaderUploadstatus();\n            }\n        },\n\n        _fileAction: function(fileElement, actionKey) {\n            var classDictionary = { remove: \"k-delete\", cancel: \"k-cancel\", retry: \"k-retry\" };\n            var iconsClassDictionary = {remove: \"k-i-close\", cancel: \"k-i-close\", retry: \"k-i-refresh\"};\n\n            if (!classDictionary.hasOwnProperty(actionKey)) {\n                return;\n            }\n\n            this._clearFileAction(fileElement);\n\n            if (!this.options.template) {\n                fileElement.find(\".k-upload-status .k-upload-action\").remove();\n                fileElement.find(\".k-upload-status\").append(\n                    this._renderAction(classDictionary[actionKey], this.localization[actionKey], iconsClassDictionary[actionKey])\n                );\n            } else {\n                fileElement.find(\".k-upload-action\")\n                           .addClass(\"k-button k-button-bare\")\n                           .append(\"<span class='k-icon \" + iconsClassDictionary[actionKey] + \" \" + classDictionary[actionKey] +\n                                   \"' title='\" + this.localization[actionKey] + \"'></span>\")\n                           .show();\n            }\n        },\n\n        _fileState: function(fileEntry, stateKey) {\n            var localization = this.localization,\n                states = {\n                    uploading: {\n                        text : localization.statusUploading\n                    },\n                    uploaded: {\n                        text : localization.statusUploaded\n                    },\n                    failed: {\n                        text : localization.statusFailed\n                    }\n                },\n                currentState = states[stateKey];\n\n            if (currentState) {\n                $(\".k-icon:not(.k-delete, .k-cancel, .k-retry)\", fileEntry).text(currentState.text);\n            }\n        },\n\n        _renderAction: function (actionClass, actionText, iconClass) {\n            if (actionClass !== \"\") {\n                return $(\n                \"<button type='button' class='k-button k-button-bare k-upload-action'>\" +\n                    \"<span class='k-icon \"+ iconClass + \" \" + actionClass + \"' title='\" + actionText + \"'></span>\" +\n                \"</button>\"\n                );\n            }\n            else {\n                return $(\n                \"<button type='button' class='k-button'>\" +\n                    actionText +\n                \"</button>\"\n                );\n            }\n        },\n\n        _clearFileAction: function(fileElement) {\n            $(\".k-upload-action\", fileElement).empty().hide();\n        },\n\n        _onFileAction: function(e) {\n            var that = this;\n\n            if (!that.wrapper.hasClass(\"k-state-disabled\")) {\n                var button = $(e.target).closest(\".k-upload-action\"),\n                    icon = button.find(\".k-icon\"),\n                    fileEntry = button.closest(\".k-file\"),\n                    eventArgs = { files: fileEntry.data(\"fileNames\") };\n\n                if (icon.hasClass(\"k-delete\")) {\n                    if (!that.trigger(REMOVE, eventArgs)) {\n                        that._module.onRemove({target : $(fileEntry, that.wrapper)}, eventArgs.data);\n                    }\n                } else if (icon.hasClass(\"k-cancel\")) {\n                    that.trigger(CANCEL, eventArgs);\n                    that._module.onCancel({ target: $(fileEntry, that.wrapper) });\n                    this._checkAllComplete();\n                    that._updateHeaderUploadStatus();\n                } else if (icon.hasClass(\"k-retry\")) {\n                    $(\".k-warning\", fileEntry).remove();\n                    that._module.onRetry({ target: $(fileEntry, that.wrapper) });\n                }\n            }\n\n            return false;\n        },\n\n        _onUploadSelected: function() {\n            var that = this;\n            var wrapper = that.wrapper;\n\n            if (!wrapper.hasClass(\"k-state-disabled\")) {\n                this._module.onSaveSelected();\n            }\n\n            return false;\n        },\n\n        _onFileProgress: function(e, percentComplete) {\n            var progressPct;\n\n            if (!this.options.template) {\n                progressPct = $(\".k-upload-pct\", e.target);\n                if (progressPct.length === 0) {\n                    $(\".k-upload-status\", e.target).prepend(\"<span class='k-upload-pct'></span>\");\n                }\n\n                $(\".k-upload-pct\", e.target).text(percentComplete + \"%\");\n                $(\".k-progress\", e.target).width(percentComplete + \"%\");\n            } else {\n                $(\".k-progress\", e.target).width(percentComplete + \"%\");\n            }\n\n            this.trigger(PROGRESS, {\n                files: getFileEntry(e).data(\"fileNames\"),\n                percentComplete: percentComplete\n            });\n        },\n\n        _onUploadSuccess: function(e, response, xhr) {\n            var fileEntry = getFileEntry(e);\n\n            this._fileState(fileEntry, \"uploaded\");\n            fileEntry.removeClass('k-file-progress').addClass('k-file-success');\n            this._updateHeaderUploadStatus();\n\n            this.trigger(SUCCESS, {\n                files: fileEntry.data(\"fileNames\"),\n                response: response,\n                operation: \"upload\",\n                XMLHttpRequest: xhr\n            });\n\n            if (this._supportsRemove()) {\n                this._fileAction(fileEntry, REMOVE);\n            } else {\n                this._clearFileAction(fileEntry);\n            }\n\n            this._checkAllComplete();\n        },\n\n        _onUploadError: function(e, xhr) {\n            var fileEntry = getFileEntry(e);\n            var uploadPercentage = $('.k-upload-pct', fileEntry);\n\n            this._fileState(fileEntry, \"failed\");\n            fileEntry.removeClass('k-file-progress').addClass('k-file-error');\n            $('.k-progress', fileEntry).width(\"100%\");\n\n            if (uploadPercentage.length > 0) {\n                uploadPercentage.empty().removeClass('k-upload-pct').addClass('k-icon k-warning');\n            } else {\n                $('.k-upload-status', fileEntry).prepend(\"<span class='k-icon k-warning'></span>\");\n            }\n\n            this._updateHeaderUploadStatus();\n            this._fileAction(fileEntry, \"retry\");\n\n            this.trigger(ERROR, {\n                operation: \"upload\",\n                files: fileEntry.data(\"fileNames\"),\n                XMLHttpRequest: xhr\n            });\n\n            logToConsole(\"Server response: \" + xhr.responseText);\n\n            this._checkAllComplete();\n        },\n\n        _showUploadButton: function() {\n            var uploadButton = $(\".k-upload-selected\", this.wrapper);\n            if (uploadButton.length === 0) {\n                uploadButton =\n                    this._renderAction(\"\", this.localization.uploadSelectedFiles)\n                    .addClass(\"k-upload-selected\");\n            }\n\n            this.wrapper.append(uploadButton);\n        },\n\n        _hideUploadButton: function() {\n            $(\".k-upload-selected\", this.wrapper).remove();\n        },\n\n        _showHeaderUploadStatus: function() {\n            var localization = this.localization;\n            var dropZone = $(\".k-dropzone\", this.wrapper);\n            var headerUploadStatus = $('.k-upload-status-total', this.wrapper);\n\n            if (headerUploadStatus.length !== 0) {\n                headerUploadStatus.remove();\n            }\n\n            headerUploadStatus = '<strong class=\"k-upload-status k-upload-status-total\">' + localization.headerStatusUploading +\n            '<span class=\"k-icon k-loading\">' + localization.statusUploading + '</span>' +\n            '</strong>';\n\n            if (dropZone.length > 0) {\n                dropZone.append(headerUploadStatus);\n            } else {\n                $('.k-upload-button', this.wrapper).after(headerUploadStatus);\n            }\n        },\n\n        _updateHeaderUploadStatus: function() {\n            var that = this;\n            var localization = that.localization;\n            var currentlyUploading = $('.k-file', that.wrapper).not('.k-file-success, .k-file-error');\n            var failedUploads;\n            var headerUploadStatus;\n            var headerUploadStatusIcon;\n\n            if (currentlyUploading.length === 0) {\n                failedUploads = $('.k-file.k-file-error', that.wrapper);\n\n                headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n                headerUploadStatusIcon = $('.k-icon', headerUploadStatus)\n                                              .removeClass('k-loading')\n                                              .addClass((failedUploads.length !== 0) ? 'k-warning' : \"k-i-tick\")\n                                              .text((failedUploads.length !== 0) ? localization.statusWarning : localization.statusUploaded);\n\n                headerUploadStatus.text(that.localization.headerStatusUploaded)\n                                  .append(headerUploadStatusIcon);\n            }\n        },\n\n        _hideHeaderUploadstatus: function() {\n            $('.k-upload-status-total', this.wrapper).remove();\n        },\n\n        _onParentFormSubmit: function() {\n            var upload = this,\n                element = upload.element;\n\n            if(typeof this._module.onAbort !== 'undefined'){\n                this._module.onAbort();\n            }\n\n            if (!element.value) {\n                var input = $(element);\n\n                // Prevent submitting an empty input\n                input.attr(\"disabled\", \"disabled\");\n\n                window.setTimeout(function() {\n                    // Restore the input so the Upload remains functional\n                    // in case the user cancels the form submit\n                    input.removeAttr(\"disabled\");\n                }, 0);\n            }\n        },\n\n        _onParentFormReset: function() {\n            $(\".k-upload-files\", this.wrapper).remove();\n        },\n\n        _supportsFormData: function() {\n            return typeof(FormData) != \"undefined\";\n        },\n\n        _supportsMultiple: function() {\n            var windows = this._userAgent().indexOf(\"Windows\") > -1;\n\n            return !kendo.support.browser.opera &&\n                   !(kendo.support.browser.safari && windows);\n        },\n\n        _supportsDrop: function() {\n            var userAgent = this._userAgent().toLowerCase(),\n                isChrome = /chrome/.test(userAgent),\n                isSafari = !isChrome && /safari/.test(userAgent),\n                isWindowsSafari = isSafari && /windows/.test(userAgent);\n\n            return !isWindowsSafari && this._supportsFormData() && (this.options.async.saveUrl);\n        },\n\n        _userAgent: function() {\n            return navigator.userAgent;\n        },\n\n        _setupDropZone: function() {\n            var that = this;\n\n            $(\".k-upload-button\", this.wrapper)\n                .wrap(\"<div class='k-dropzone'></div>\");\n\n            var ns = that._ns;\n            var dropZone = $(\".k-dropzone\", that.wrapper)\n                .append($(\"<em>\" + that.localization.dropFilesHere + \"</em>\"))\n                .on(\"dragenter\" + ns, stopEvent)\n                .on(\"dragover\" + ns, function(e) { e.preventDefault(); })\n                .on(\"drop\" + ns, $.proxy(this._onDrop, this));\n\n            bindDragEventWrappers(dropZone, ns,\n                function() { dropZone.addClass(\"k-dropzone-hovered\"); },\n                function() { dropZone.removeClass(\"k-dropzone-hovered\"); });\n\n            bindDragEventWrappers($(document), ns,\n                function() {\n                    dropZone.addClass(\"k-dropzone-active\");\n                    dropZone.closest('.k-upload').removeClass('k-upload-empty');\n                },\n                function() {\n                    dropZone.removeClass(\"k-dropzone-active\");\n                    if ($('li.k-file', dropZone.closest('.k-upload')).length === 0) {\n                        dropZone.closest('.k-upload').addClass('k-upload-empty');\n                    }\n                });\n        },\n\n        _supportsRemove: function() {\n            return !!this.options.async.removeUrl;\n        },\n\n        _submitRemove: function(fileNames, data, onSuccess, onError) {\n            var upload = this,\n                removeField = upload.options.async.removeField || \"fileNames\",\n                params = $.extend(data, antiForgeryTokens());\n\n            params[removeField] = fileNames;\n\n            jQuery.ajax({\n                  type: this.options.async.removeVerb,\n                  dataType: \"json\",\n                  dataFilter: normalizeJSON,\n                  url: this.options.async.removeUrl,\n                  traditional: true,\n                  data: params,\n                  success: onSuccess,\n                  error: onError\n            });\n        },\n\n        _wrapInput: function(input) {\n            var that = this;\n            var options = that.options;\n\n            input.wrap(\"<div class='k-widget k-upload k-header'><div class='k-button k-upload-button'></div></div>\");\n\n            if(!options.async.saveUrl) {\n                input.closest(\".k-upload\").addClass(\"k-upload-sync\");\n            }\n\n            input.closest(\".k-upload\").addClass(\"k-upload-empty\");\n\n            input.closest(\".k-button\")\n                .append(\"<span>\" + this.localization.select + \"</span>\");\n\n            return input.closest(\".k-upload\");\n        },\n\n        _checkAllComplete: function() {\n            if ($(\".k-file.k-file-progress\", this.wrapper).length === 0) {\n                this.trigger(COMPLETE);\n            }\n        },\n\n        _inputFiles: function(sourceInput) {\n            return inputFiles(sourceInput);\n        }\n    });\n\n    // Synchronous upload module\n    var syncUploadModule = function(upload) {\n        this.name = \"syncUploadModule\";\n        this.element = upload.wrapper;\n        this.upload = upload;\n        this.element\n            .closest(\"form\")\n                .attr(\"enctype\", \"multipart/form-data\")\n                .attr(\"encoding\", \"multipart/form-data\");\n    };\n\n    syncUploadModule.prototype = {\n        onSelect: function(e, files) {\n            var upload = this.upload;\n            var sourceInput = $(e.target);\n\n            upload._addInput(sourceInput);\n\n            var file = upload._enqueueFile(getFileName(sourceInput), {\n                \"relatedInput\" : sourceInput, \"fileNames\": files\n            });\n\n            upload._fileAction(file, REMOVE);\n        },\n\n        onRemove: function(e) {\n            var fileEntry = getFileEntry(e);\n            fileEntry.data(\"relatedInput\").remove();\n\n            this.upload._removeFileEntry(fileEntry);\n        }\n    };\n\n    var iframeUploadModule = function(upload) {\n        this.name = \"iframeUploadModule\";\n        this.element = upload.wrapper;\n        this.upload = upload;\n        this.iframes = [];\n    };\n\n    Upload._frameId = 0;\n\n    iframeUploadModule.prototype = {\n        onSelect: function(e, files) {\n            var upload = this.upload,\n                sourceInput = $(e.target);\n\n            var fileEntry = this.prepareUpload(sourceInput, files);\n\n            if (upload.options.async.autoUpload) {\n                this.performUpload(fileEntry);\n            } else {\n                if (upload._supportsRemove()) {\n                    this.upload._fileAction(fileEntry, REMOVE);\n                }\n\n                upload._showUploadButton();\n            }\n        },\n\n        prepareUpload: function(sourceInput, files) {\n            var upload = this.upload;\n            var activeInput = $(upload.element);\n            var name = upload.options.async.saveField || sourceInput.attr(\"name\");\n\n            upload._addInput(sourceInput);\n\n            sourceInput.attr(\"name\", name);\n\n            var iframe = this.createFrame(upload.name + \"_\" + Upload._frameId++);\n            this.registerFrame(iframe);\n\n            var form = this.createForm(upload.options.async.saveUrl, iframe.attr(\"name\"))\n                .append(activeInput);\n\n            var fileEntry = upload._enqueueFile(\n                getFileName(sourceInput),\n                { \"frame\": iframe, \"relatedInput\": activeInput, \"fileNames\": files });\n\n            iframe\n                .data({ \"form\": form, \"file\": fileEntry });\n\n            return fileEntry;\n        },\n\n        performUpload: function(fileEntry) {\n            var e = { files: fileEntry.data(\"fileNames\") },\n                iframe = fileEntry.data(\"frame\"),\n                upload = this.upload;\n\n            if (!upload.trigger(UPLOAD, e)) {\n                upload._hideUploadButton();\n                upload._showHeaderUploadStatus();\n\n                iframe.appendTo(document.body);\n\n                var form = iframe.data(\"form\")\n                    .attr(\"action\", upload.options.async.saveUrl)\n                    .appendTo(document.body);\n\n                e.data = $.extend({ }, e.data, antiForgeryTokens());\n                for (var key in e.data) {\n                    var dataInput = form.find(\"input[name='\" + key + \"']\");\n                    if (dataInput.length === 0) {\n                        dataInput = $(\"<input>\", { type: \"hidden\", name: key })\n                            .prependTo(form);\n                    }\n                    dataInput.val(e.data[key]);\n                }\n\n                upload._fileAction(fileEntry, CANCEL);\n                upload._fileState(fileEntry, \"uploading\");\n                $(fileEntry).removeClass(\"k-file-error\").addClass(\"k-file-progress\");\n\n                iframe\n                    .one(\"load\", $.proxy(this.onIframeLoad, this));\n\n                form[0].submit();\n            } else {\n                upload._removeFileEntry(iframe.data(\"file\"));\n                this.cleanupFrame(iframe);\n                this.unregisterFrame(iframe);\n            }\n        },\n\n        onSaveSelected: function() {\n            var module = this;\n\n            $(\".k-file\", this.element).each(function() {\n                var fileEntry = $(this),\n                    started = isFileUploadStarted(fileEntry);\n\n                if (!started) {\n                    module.performUpload(fileEntry);\n                }\n            });\n        },\n\n        onIframeLoad: function(e) {\n            var iframe = $(e.target),\n                responseText;\n\n            try {\n                responseText = iframe.contents().text();\n            } catch (ex) {\n                responseText = \"Error trying to get server response: \" + ex;\n            }\n\n            this.processResponse(iframe, responseText);\n        },\n\n        processResponse: function(iframe, responseText) {\n            var fileEntry = iframe.data(\"file\"),\n                module = this,\n                fakeXHR = {\n                    responseText: responseText\n                };\n            tryParseJSON(responseText,\n                function(jsonResult) {\n                    $.extend(fakeXHR, { statusText: \"OK\", status: \"200\" });\n                    module.upload._onFileProgress({ target : $(fileEntry, module.upload.wrapper) }, 100);\n                    module.upload._onUploadSuccess({ target : $(fileEntry, module.upload.wrapper) }, jsonResult, fakeXHR);\n\n                    module.cleanupFrame(iframe);\n                    module.unregisterFrame(iframe);\n                },\n                function() {\n                    $.extend(fakeXHR, { statusText: \"error\", status: \"500\" });\n                    module.upload._onUploadError({ target : $(fileEntry, module.upload.wrapper) }, fakeXHR);\n                }\n            );\n        },\n\n        onCancel: function(e) {\n            var iframe = $(e.target).data(\"frame\");\n\n            this.stopFrameSubmit(iframe);\n            this.cleanupFrame(iframe);\n            this.unregisterFrame(iframe);\n            this.upload._removeFileEntry(iframe.data(\"file\"));\n        },\n\n        onRetry: function(e) {\n            var fileEntry = getFileEntry(e);\n            this.performUpload(fileEntry);\n        },\n\n        onRemove: function(e, data) {\n            var fileEntry = getFileEntry(e);\n\n            var iframe = fileEntry.data(\"frame\");\n            if (iframe) {\n                this.unregisterFrame(iframe);\n                this.upload._removeFileEntry(fileEntry);\n                this.cleanupFrame(iframe);\n            } else {\n                removeUploadedFile(fileEntry, this.upload, data);\n            }\n        },\n\n        onAbort: function() {\n            var element = this.element,\n                module = this;\n\n            $.each(this.iframes, function() {\n                $(\"input\", this.data(\"form\")).appendTo(element);\n                module.stopFrameSubmit(this[0]);\n                this.data(\"form\").remove();\n                this.remove();\n            });\n\n            this.iframes = [];\n        },\n\n        createFrame: function(id) {\n            return $(\n                \"<iframe\" +\n                \" name='\" + id + \"'\" +\n                \" id='\" + id + \"'\" +\n                \" style='display:none;' />\"\n            );\n        },\n\n        createForm: function(action, target) {\n            return $(\n                \"<form enctype='multipart/form-data' method='POST'\" +\n                \" action='\" + action + \"'\" +\n                \" target='\" + target + \"'\" +\n                \"/>\");\n        },\n\n        stopFrameSubmit: function(frame) {\n            if (typeof(frame.stop) != \"undefined\") {\n                frame.stop();\n            } else if (frame.document) {\n                frame.document.execCommand(\"Stop\");\n            }\n        },\n\n        registerFrame: function(frame) {\n            this.iframes.push(frame);\n        },\n\n        unregisterFrame: function(frame) {\n            this.iframes = $.grep(this.iframes, function(value) {\n                return value.attr(\"name\") != frame.attr(\"name\");\n            });\n        },\n\n        cleanupFrame: function(frame) {\n            var form = frame.data(\"form\");\n\n            frame.data(\"file\").data(\"frame\", null);\n\n            setTimeout(function () {\n                form.remove();\n                frame.remove();\n            }, 1);\n        }\n    };\n\n    // FormData upload module\n    var formDataUploadModule = function(upload) {\n        this.name = \"formDataUploadModule\";\n        this.element = upload.wrapper;\n        this.upload = upload;\n    };\n\n    formDataUploadModule.prototype = {\n        onSelect: function(e, files) {\n            var upload = this.upload,\n                module = this,\n                sourceElement = $(e.target),\n                fileEntries = this.prepareUpload(sourceElement, files);\n\n            $.each(fileEntries, function() {\n                if (upload.options.async.autoUpload) {\n                    module.performUpload(this);\n                } else {\n                    if (upload._supportsRemove()) {\n                        upload._fileAction(this, REMOVE);\n                    }\n                    upload._showUploadButton();\n                }\n            });\n        },\n\n        prepareUpload: function(sourceElement, files) {\n            var fileEntries = this.enqueueFiles(files);\n\n            if (sourceElement.is(\"input\")) {\n                $.each(fileEntries, function() {\n                    $(this).data(\"relatedInput\", sourceElement);\n                });\n                sourceElement.data(\"relatedFileEntries\", fileEntries);\n                this.upload._addInput(sourceElement);\n            }\n\n            return fileEntries;\n        },\n\n        enqueueFiles: function(files) {\n            var upload = this.upload,\n                name,\n                i,\n                filesLength = files.length,\n                currentFile,\n                fileEntry,\n                fileEntries = [];\n\n            if (upload.options.async.batch === true) {\n                name = $.map(files, function(file) { return file.name; })\n                       .join(\", \");\n\n                fileEntry = upload._enqueueFile(name, { fileNames: files });\n                fileEntry.data(\"files\", files);\n\n                fileEntries.push(fileEntry);\n            } else {\n                for (i = 0; i < filesLength; i++) {\n                    currentFile = files[i];\n                    name = currentFile.name;\n\n                    fileEntry = upload._enqueueFile(name, { fileNames: [ currentFile ] });\n                    fileEntry.data(\"files\", [ currentFile ]);\n\n                    fileEntries.push(fileEntry);\n                }\n            }\n\n            return fileEntries;\n        },\n\n        performUpload: function(fileEntry) {\n            var upload = this.upload,\n                formData = this.createFormData(),\n                xhr = this.createXHR(),\n                e = {\n                    files: fileEntry.data(\"fileNames\"),\n                    XMLHttpRequest: xhr\n                };\n\n            if (!upload.trigger(UPLOAD, e)) {\n                upload._fileAction(fileEntry, CANCEL);\n                upload._hideUploadButton();\n                upload._showHeaderUploadStatus();\n\n                e.data = $.extend({ }, e.data, antiForgeryTokens());\n                for (var key in e.data) {\n                    formData.append(key, e.data[key]);\n                }\n\n                this.populateFormData(formData, fileEntry.data(\"files\"));\n\n                upload._fileState(fileEntry, \"uploading\");\n                $(fileEntry).removeClass(\"k-file-error\").addClass(\"k-file-progress\");\n\n                this.postFormData(upload.options.async.saveUrl, formData, fileEntry, xhr);\n            } else {\n                this.removeFileEntry(fileEntry);\n            }\n        },\n\n        onSaveSelected: function() {\n            var module = this;\n\n            $(\".k-file\", this.element).each(function() {\n                var fileEntry = $(this),\n                    started = isFileUploadStarted(fileEntry);\n\n                if (!started) {\n                    module.performUpload(fileEntry);\n                }\n            });\n        },\n\n        onCancel: function(e) {\n            var fileEntry = getFileEntry(e);\n            this.stopUploadRequest(fileEntry);\n            this.removeFileEntry(fileEntry);\n        },\n\n        onRetry: function(e) {\n            var fileEntry = getFileEntry(e);\n            this.performUpload(fileEntry);\n        },\n\n        onRemove: function(e, data) {\n            var fileEntry = getFileEntry(e);\n\n            if (fileEntry.hasClass(\"k-file-success\")) {\n                removeUploadedFile(fileEntry, this.upload, data);\n            } else {\n                this.removeFileEntry(fileEntry);\n            }\n        },\n\n        createXHR: function() {\n            return new XMLHttpRequest();\n        },\n\n        postFormData: function(url, data, fileEntry, xhr) {\n            var module = this;\n\n            fileEntry.data(\"request\", xhr);\n\n            xhr.addEventListener(\"load\", function(e) {\n                module.onRequestSuccess.call(module, e, fileEntry);\n            }, false);\n\n            xhr.addEventListener(ERROR, function(e) {\n                module.onRequestError.call(module, e, fileEntry);\n            }, false);\n\n            xhr.upload.addEventListener(\"progress\", function(e) {\n                module.onRequestProgress.call(module, e, fileEntry);\n            }, false);\n\n            xhr.open(\"POST\", url, true);\n            xhr.withCredentials = this.upload.options.async.withCredentials;\n            xhr.send(data);\n        },\n\n        createFormData: function() {\n            return new FormData();\n        },\n\n        populateFormData: function(data, files) {\n            var upload = this.upload,\n                i,\n                length = files.length;\n\n            for (i = 0; i < length; i++) {\n                data.append(\n                    upload.options.async.saveField || upload.name,\n                    files[i].rawFile\n                );\n            }\n\n            return data;\n        },\n\n        onRequestSuccess: function(e, fileEntry) {\n            var xhr = e.target,\n                module = this;\n\n            function raiseError() {\n                module.upload._onUploadError({ target : $(fileEntry, module.upload.wrapper) }, xhr);\n            }\n\n            if (xhr.status >= 200 && xhr.status <= 299) {\n                tryParseJSON(xhr.responseText,\n                    function(jsonResult) {\n                        module.upload._onFileProgress({ target : $(fileEntry, module.upload.wrapper) }, 100);\n                        module.upload._onUploadSuccess({ target : $(fileEntry, module.upload.wrapper) }, jsonResult, xhr);\n                        module.cleanupFileEntry(fileEntry);\n                    },\n                    raiseError\n                );\n            } else {\n                raiseError();\n            }\n        },\n\n        onRequestError: function(e, fileEntry) {\n            var xhr = e.target;\n            this.upload._onUploadError({ target : $(fileEntry, this.upload.wrapper) }, xhr);\n        },\n\n        cleanupFileEntry: function(fileEntry) {\n            var relatedInput = fileEntry.data(\"relatedInput\"),\n                uploadComplete = true;\n\n            if (relatedInput) {\n                $.each(relatedInput.data(\"relatedFileEntries\") || [], function() {\n                    // Exclude removed file entries and self\n                    if (this.parent().length > 0 && this[0] != fileEntry[0]) {\n                        uploadComplete = uploadComplete && this.hasClass(\"k-file-success\");\n                    }\n                });\n\n                if (uploadComplete) {\n                    relatedInput.remove();\n                }\n            }\n        },\n\n        removeFileEntry: function(fileEntry) {\n            this.cleanupFileEntry(fileEntry);\n            this.upload._removeFileEntry(fileEntry);\n        },\n\n        onRequestProgress: function(e, fileEntry) {\n            var percentComplete = Math.round(e.loaded * 100 / e.total);\n            this.upload._onFileProgress({ target : $(fileEntry, this.upload.wrapper) }, percentComplete);\n        },\n\n        stopUploadRequest: function(fileEntry) {\n            fileEntry.data(\"request\").abort();\n        }\n    };\n\n    // Helper functions\n    function getFileName(input) {\n        return $.map(inputFiles(input), function (file) {\n            return file.name;\n        }).join(\", \");\n    }\n\n    function inputFiles($input) {\n        var input = $input[0];\n\n        if (input.files) {\n            return getAllFileInfo(input.files);\n        } else {\n            return [{\n                name: stripPath(input.value),\n                extension: getFileExtension(input.value),\n                size: null\n            }];\n        }\n    }\n\n    function getAllFileInfo(rawFiles) {\n        return $.map(rawFiles, function (file) {\n            return getFileInfo(file);\n        });\n    }\n\n    function getFileInfo(rawFile) {\n        // Older Firefox versions (before 3.6) use fileName and fileSize\n        var fileName = rawFile.name || rawFile.fileName;\n        return {\n            name: kendo.htmlEncode(fileName),\n            extension: getFileExtension(fileName),\n            size: rawFile.size || rawFile.fileSize,\n            rawFile: rawFile\n        };\n    }\n\n    function getFileExtension(fileName) {\n        var matches = fileName.match(rFileExtension);\n        return matches ? matches[0] : \"\";\n    }\n\n    function stripPath(name) {\n        var slashIndex = name.lastIndexOf(\"\\\\\");\n        return (slashIndex != -1) ? name.substr(slashIndex + 1) : name;\n    }\n\n    function assignGuidToFiles(files, unique) {\n        var uid = kendo.guid();\n\n        return $.map(files, function(file){\n            file.uid = unique ? kendo.guid() : uid;\n\n            return file;\n        });\n    }\n\n    function shouldRemoveFileEntry(upload) {\n        return !upload.multiple && $(\".k-file\", upload.wrapper).length > 1;\n    }\n\n    function removeUploadedFile(fileEntry, upload, data) {\n        if (!upload._supportsRemove()) {\n            if(shouldRemoveFileEntry(upload)) {\n                upload._removeFileEntry(fileEntry);\n            }\n\n            return;\n        }\n\n        var files = fileEntry.data(\"fileNames\");\n        var fileNames = $.map(files, function(file) { return file.name; });\n\n        upload._submitRemove(fileNames, data,\n            function onSuccess(data, textStatus, xhr) {\n                upload._removeFileEntry(fileEntry);\n\n                upload.trigger(SUCCESS, {\n                    operation: \"remove\",\n                    files: files,\n                    response: data,\n                    XMLHttpRequest: xhr\n                });\n            },\n\n            function onError(xhr) {\n                if(shouldRemoveFileEntry(upload)) {\n                    upload._removeFileEntry(fileEntry);\n                }\n\n                upload.trigger(ERROR, {\n                    operation: \"remove\",\n                    files: files,\n                    XMLHttpRequest: xhr\n                });\n\n                logToConsole(\"Server response: \" + xhr.responseText);\n            }\n        );\n    }\n\n    function tryParseJSON(input, onSuccess, onError) {\n        var success = false,\n            json = \"\";\n\n        try {\n            json = $.parseJSON(normalizeJSON(input));\n            success = true;\n        } catch (e) {\n            onError();\n        }\n\n        if (success) {\n            onSuccess(json);\n        }\n    }\n\n    function normalizeJSON(input) {\n        if (typeof input === \"undefined\" || input === \"\") {\n            input = \"{}\";\n        }\n\n        return input;\n    }\n\n    function stopEvent(e) {\n        e.stopPropagation(); e.preventDefault();\n    }\n\n    function bindDragEventWrappers(element, namespace, onDragEnter, onDragLeave) {\n        var hideInterval, lastDrag;\n\n        element\n            .on(\"dragenter\" + namespace, function() {\n                onDragEnter();\n                lastDrag = new Date();\n\n                if (!hideInterval) {\n                    hideInterval = setInterval(function() {\n                        var sinceLastDrag = new Date() - lastDrag;\n                        if (sinceLastDrag > 100) {\n                            onDragLeave();\n\n                            clearInterval(hideInterval);\n                            hideInterval = null;\n                        }\n                    }, 100);\n                }\n            })\n            .on(\"dragover\" + namespace, function() {\n                lastDrag = new Date();\n            });\n    }\n\n    function isFileUploadStarted(fileEntry) {\n        return fileEntry.is(\".k-file-progress, .k-file-success, .k-file-error\");\n    }\n\n    function getFileEntry(e) {\n        return $(e.target).closest(\".k-file\");\n    }\n\n    kendo.ui.plugin(Upload);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        isPlainObject = $.isPlainObject,\n        proxy = $.proxy,\n        extend = $.extend,\n        placeholderSupported = kendo.support.placeholder,\n        browser = kendo.support.browser,\n        isFunction = kendo.isFunction,\n        trimSlashesRegExp = /(^\\/|\\/$)/g,\n        CHANGE = \"change\",\n        APPLY = \"apply\",\n        ERROR = \"error\",\n        CLICK = \"click\",\n        NS = \".kendoFileBrowser\",\n        BREADCRUBMSNS = \".kendoBreadcrumbs\",\n        SEARCHBOXNS = \".kendoSearchBox\",\n        NAMEFIELD = \"name\",\n        SIZEFIELD = \"size\",\n        TYPEFIELD = \"type\",\n        DEFAULTSORTORDER = { field: TYPEFIELD, dir: \"asc\" },\n        EMPTYTILE = kendo.template('<li class=\"k-tile-empty\"><strong>${text}</strong></li>'),\n        TOOLBARTMPL = '<div class=\"k-widget k-filebrowser-toolbar k-header k-floatwrap\">' +\n                            '<div class=\"k-toolbar-wrap\">' +\n                                '# if (showUpload) { # ' +\n                                    '<div class=\"k-widget k-upload\"><div class=\"k-button k-button-icontext k-upload-button\">' +\n                                        '<span class=\"k-icon k-add\"></span>#=messages.uploadFile#<input type=\"file\" name=\"file\" /></div></div>' +\n                                '# } #' +\n\n                                '# if (showCreate) { #' +\n                                     '<button type=\"button\" class=\"k-button k-button-icon\"><span class=\"k-icon k-addfolder\" /></button>' +\n                                '# } #' +\n\n                                '# if (showDelete) { #' +\n                                    '<button type=\"button\" class=\"k-button k-button-icon k-state-disabled\"><span class=\"k-icon k-delete\" /></button>&nbsp;' +\n                                '# } #' +\n                            '</div>' +\n                            '<div class=\"k-tiles-arrange\">' +\n                                '<label>#=messages.orderBy#: <select /></label></a>' +\n                            '</div>' +\n                        '</div>';\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"filebrowser\": {\n                data: function(data) {\n                    return data.items || data || [];\n                },\n                model: {\n                    id: \"name\",\n                    fields: {\n                        name: \"name\",\n                        size: \"size\",\n                        type: \"type\"\n                    }\n                }\n            }\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"filebrowser\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n                },\n                _call: function(type, options) {\n                    options.data = $.extend({}, options.data, { path: this.options.path() });\n\n                    if (isFunction(this.options[type])) {\n                        this.options[type].call(this, options);\n                    } else {\n                        kendo.data.RemoteTransport.fn[type].call(this, options);\n                    }\n                },\n                read: function(options) {\n                    this._call(\"read\", options);\n                },\n                create: function(options) {\n                    this._call(\"create\", options);\n                },\n                destroy: function(options) {\n                    this._call(\"destroy\", options);\n                },\n                update: function() {\n                    //updates are handled by the upload\n                },\n                options: {\n                    read: {\n                        type: \"POST\"\n                    },\n                    update: {\n                        type: \"POST\"\n                    },\n                    create: {\n                        type: \"POST\"\n                    },\n                    destroy: {\n                        type: \"POST\"\n                    }\n                }\n            })\n        }\n    });\n\n    function bindDragEventWrappers(element, onDragEnter, onDragLeave) {\n        var hideInterval, lastDrag;\n\n        element\n            .on(\"dragenter\" + NS, function() {\n                onDragEnter();\n                lastDrag = new Date();\n\n                if (!hideInterval) {\n                    hideInterval = setInterval(function() {\n                        var sinceLastDrag = new Date() - lastDrag;\n                        if (sinceLastDrag > 100) {\n                            onDragLeave();\n\n                            clearInterval(hideInterval);\n                            hideInterval = null;\n                        }\n                    }, 100);\n                }\n            })\n            .on(\"dragover\" + NS, function() {\n                lastDrag = new Date();\n            });\n    }\n\n    var offsetTop;\n    if (browser.msie && browser.version < 8) {\n        offsetTop = function (element) {\n            return element.offsetTop;\n        };\n    } else {\n        offsetTop = function (element) {\n            return element.offsetTop - $(element).height();\n        };\n    }\n\n    function concatPaths(path, name) {\n        if(path === undefined || !path.match(/\\/$/)) {\n            path = (path || \"\") + \"/\";\n        }\n        return path + name;\n    }\n\n    function sizeFormatter(value) {\n        if(!value) {\n            return \"\";\n        }\n\n        var suffix = \" bytes\";\n\n        if (value >= 1073741824) {\n            suffix = \" GB\";\n            value /= 1073741824;\n        } else if (value >= 1048576) {\n            suffix = \" MB\";\n            value /= 1048576;\n        } else  if (value >= 1024) {\n            suffix = \" KB\";\n            value /= 1024;\n        }\n\n        return Math.round(value * 100) / 100 + suffix;\n    }\n\n    function fieldName(fields, name) {\n        var descriptor = fields[name];\n\n        if (isPlainObject(descriptor)) {\n            return descriptor.from || descriptor.field || name;\n        }\n        return descriptor;\n    }\n\n    var FileBrowser = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            options = options || {};\n\n            Widget.fn.init.call(that, element, options);\n\n            that.element.addClass(\"k-filebrowser\");\n\n            that.element\n                .on(CLICK + NS, \".k-filebrowser-toolbar button:not(.k-state-disabled):has(.k-delete)\", proxy(that._deleteClick, that))\n                .on(CLICK + NS, \".k-filebrowser-toolbar button:not(.k-state-disabled):has(.k-addfolder)\", proxy(that._addClick, that))\n                .on(\"keydown\" + NS, \"li.k-state-selected input\", proxy(that._directoryKeyDown, that))\n                .on(\"blur\" + NS, \"li.k-state-selected input\", proxy(that._directoryBlur, that));\n\n            that._dataSource();\n\n            that.refresh();\n\n            that.path(that.options.path);\n        },\n\n        options: {\n            name: \"FileBrowser\",\n            messages: {\n                uploadFile: \"Upload\",\n                orderBy: \"Arrange by\",\n                orderByName: \"Name\",\n                orderBySize: \"Size\",\n                directoryNotFound: \"A directory with this name was not found.\",\n                emptyFolder: \"Empty Folder\",\n                deleteFile: 'Are you sure you want to delete \"{0}\"?',\n                invalidFileType: \"The selected file \\\"{0}\\\" is not valid. Supported file types are {1}.\",\n                overwriteFile: \"A file with name \\\"{0}\\\" already exists in the current directory. Do you want to overwrite it?\",\n                dropFilesHere: \"drop file here to upload\",\n                search: \"Search\"\n            },\n            transport: {},\n            path: \"/\",\n            fileTypes: \"*.*\"\n        },\n\n        events: [ERROR, CHANGE, APPLY],\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.dataSource\n                .unbind(ERROR, that._errorHandler);\n\n            that.element\n                .add(that.list)\n                .add(that.toolbar)\n                .off(NS);\n\n            kendo.destroy(that.element);\n        },\n\n        value: function() {\n            var that = this,\n                selected = that._selectedItem(),\n                path,\n                fileUrl = that.options.transport.fileUrl;\n\n            if (selected && selected.get(TYPEFIELD) === \"f\") {\n                path = concatPaths(that.path(), selected.get(NAMEFIELD)).replace(trimSlashesRegExp, \"\");\n                if (fileUrl) {\n                    path = isFunction(fileUrl) ? fileUrl(path) : kendo.format(fileUrl, encodeURIComponent(path));\n                }\n                return path;\n            }\n        },\n\n        _selectedItem: function() {\n            var listView = this.listView,\n                selected = listView.select();\n\n            if (selected.length) {\n                return this.dataSource.getByUid(selected.attr(kendo.attr(\"uid\")));\n            }\n        },\n\n        _toolbar: function() {\n            var that = this,\n                template = kendo.template(TOOLBARTMPL),\n                messages = that.options.messages,\n                arrangeBy = [\n                    { text: messages.orderByName, value: \"name\" },\n                    { text: messages.orderBySize, value: \"size\" }\n                ];\n\n            that.toolbar = $(template({\n                    messages: messages,\n                    showUpload: that.options.transport.uploadUrl,\n                    showCreate: that.options.transport.create,\n                    showDelete: that.options.transport.destroy\n                }))\n                .appendTo(that.element)\n                .find(\".k-upload input\")\n                .kendoUpload({\n                    multiple: false,\n                    localization: {\n                        dropFilesHere: messages.dropFilesHere\n                    },\n                    async: {\n                        saveUrl: that.options.transport.uploadUrl,\n                        autoUpload: true\n                    },\n                    upload: proxy(that._fileUpload, that),\n                    error: function(e) {\n                        that._error({ xhr: e.XMLHttpRequest, status: \"error\" });\n                    }\n                }).end();\n\n            that.upload = that.toolbar\n                .find(\".k-upload input\")\n                .data(\"kendoUpload\");\n\n            that.arrangeBy = that.toolbar.find(\".k-tiles-arrange select\")\n                .kendoDropDownList({\n                    dataSource: arrangeBy,\n                    dataTextField: \"text\",\n                    dataValueField: \"value\",\n                    change: function() {\n                        that.orderBy(this.value());\n                    }\n                })\n                .data(\"kendoDropDownList\");\n\n            that._attachDropzoneEvents();\n        },\n\n        _attachDropzoneEvents: function() {\n            var that = this;\n\n            if (that.options.transport.uploadUrl) {\n                bindDragEventWrappers($(document.documentElement),\n                    $.proxy(that._dropEnter, that),\n                    $.proxy(that._dropLeave, that)\n                );\n                that._scrollHandler = proxy(that._positionDropzone, that);\n            }\n        },\n\n        _dropEnter: function() {\n            this._positionDropzone();\n            $(document).on(\"scroll\" + NS, this._scrollHandler);\n        },\n\n        _dropLeave: function() {\n            this._removeDropzone();\n            $(document).off(\"scroll\" + NS, this._scrollHandler);\n        },\n\n        _positionDropzone: function() {\n            var that = this,\n                element = that.element,\n                offset = element.offset();\n\n            that.toolbar.find(\".k-dropzone\")\n                .addClass(\"k-filebrowser-dropzone\")\n                .offset(offset)\n                .css({\n                    width: element[0].clientWidth,\n                    height: element[0].clientHeight,\n                    lineHeight: element[0].clientHeight + \"px\"\n                });\n        },\n\n        _removeDropzone: function() {\n            this.toolbar.find(\".k-dropzone\")\n                .removeClass(\"k-filebrowser-dropzone\")\n                .css({ width: \"\", height: \"\", lineHeight: \"\", top: \"\", left: \"\" });\n        },\n\n        _deleteClick: function() {\n            var that = this,\n                item = that.listView.select(),\n                message = kendo.format(that.options.messages.deleteFile, item.find(\"strong\").text());\n\n            if (item.length && that._showMessage(message, \"confirm\")) {\n                that.listView.remove(item);\n            }\n        },\n\n        _addClick: function() {\n            this.createDirectory();\n        },\n\n        _getFieldName: function(name) {\n            return fieldName(this.dataSource.reader.model.fields, name);\n        },\n\n        _fileUpload: function(e) {\n            var that = this,\n                options = that.options,\n                fileTypes = options.fileTypes,\n                filterRegExp = new RegExp((\"(\" + fileTypes.split(\",\").join(\")|(\") + \")\").replace(/\\*\\./g , \".*.\"), \"i\"),\n                fileName = e.files[0].name,\n                fileNameField = NAMEFIELD,\n                sizeField = SIZEFIELD,\n                model;\n\n            if (filterRegExp.test(fileName)) {\n                e.data = { path: that.path() };\n\n                model = that._createFile(fileName);\n\n                if (!model) {\n                    e.preventDefault();\n                } else {\n                    that.upload.one(\"success\", function(e) {\n                        model.set(fileNameField, e.response[that._getFieldName(fileNameField)]);\n                        model.set(sizeField, e.response[that._getFieldName(sizeField)]);\n                        that._tiles = that.listView.items().filter(\"[\" + kendo.attr(\"type\") + \"=f]\");\n                    });\n                }\n            } else {\n                e.preventDefault();\n                that._showMessage(kendo.format(options.messages.invalidFileType, fileName, fileTypes));\n            }\n        },\n\n        _findFile: function(name) {\n            var data = this.dataSource.data(),\n                idx,\n                result,\n                typeField = TYPEFIELD,\n                nameField = NAMEFIELD,\n                length;\n\n            name = name.toLowerCase();\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (data[idx].get(typeField) === \"f\" &&\n                    data[idx].get(nameField).toLowerCase() === name) {\n\n                    result = data[idx];\n                    break;\n                }\n            }\n            return result;\n        },\n\n        _createFile: function(fileName) {\n            var that = this,\n                idx,\n                length,\n                index = 0,\n                model = {},\n                typeField = TYPEFIELD,\n                view = that.dataSource.view(),\n                file = that._findFile(fileName);\n\n            if (file && !that._showMessage(kendo.format(that.options.messages.overwriteFile, fileName), \"confirm\")) {\n                return null;\n            }\n\n            if (file) {\n                return file;\n            }\n\n            for (idx = 0, length = view.length; idx < length; idx++) {\n                if (view[idx].get(typeField) === \"f\") {\n                    index = idx;\n                    break;\n                }\n            }\n\n            model[typeField] = \"f\";\n            model[NAMEFIELD] = fileName;\n            model[SIZEFIELD] = 0;\n\n            return that.dataSource.insert(++index, model);\n        },\n\n        createDirectory: function() {\n            var that = this,\n                idx,\n                length,\n                lastDirectoryIdx = 0,\n                typeField = TYPEFIELD,\n                nameField = NAMEFIELD,\n                view = that.dataSource.data(),\n                name = that._nameDirectory(),\n                model = new that.dataSource.reader.model();\n\n            for (idx = 0, length = view.length; idx < length; idx++) {\n                if (view[idx].get(typeField) === \"d\") {\n                    lastDirectoryIdx = idx;\n                }\n            }\n\n            model.set(typeField, \"d\");\n            model.set(nameField, name);\n\n            that.listView.one(\"dataBound\", function() {\n                var selected = that.listView.items()\n                    .filter(\"[\" + kendo.attr(\"uid\") + \"=\" + model.uid + \"]\"),\n                    input = selected.find(\"input\");\n\n                if (selected.length) {\n                    this.edit(selected);\n                }\n\n                this.element.scrollTop(selected.attr(\"offsetTop\") - this.element[0].offsetHeight);\n\n                setTimeout(function() {\n                    input.select();\n                });\n            })\n            .one(\"save\", function(e) {\n                var value = e.model.get(nameField);\n\n                if (!value) {\n                    e.model.set(nameField, name);\n                } else {\n                    e.model.set(nameField, that._nameExists(value, model.uid) ? that._nameDirectory() : value);\n                }\n            });\n\n            that.dataSource.insert(++lastDirectoryIdx, model);\n        },\n\n        _directoryKeyDown: function(e) {\n            if (e.keyCode == 13) {\n                e.currentTarget.blur();\n            }\n        },\n\n        _directoryBlur: function() {\n            this.listView.save();\n        },\n\n        _nameExists: function(name, uid) {\n            var data = this.dataSource.data(),\n                typeField = TYPEFIELD,\n                nameField = NAMEFIELD,\n                idx,\n                length;\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (data[idx].get(typeField) === \"d\" &&\n                    data[idx].get(nameField).toLowerCase() === name.toLowerCase() &&\n                    data[idx].uid !== uid) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _nameDirectory: function() {\n            var name = \"New folder\",\n                data = this.dataSource.data(),\n                directoryNames = [],\n                typeField = TYPEFIELD,\n                nameField = NAMEFIELD,\n                candidate,\n                idx,\n                length;\n\n            for (idx = 0, length = data.length; idx < length; idx++) {\n                if (data[idx].get(typeField) === \"d\" && data[idx].get(nameField).toLowerCase().indexOf(name.toLowerCase()) > -1) {\n                    directoryNames.push(data[idx].get(nameField));\n                }\n            }\n\n            if ($.inArray(name, directoryNames) > -1) {\n                idx = 2;\n\n                do {\n                    candidate = name + \" (\" + idx + \")\";\n                    idx++;\n                } while ($.inArray(candidate, directoryNames) > -1);\n\n                name = candidate;\n            }\n\n            return name;\n        },\n\n        orderBy: function(field) {\n            this.dataSource.sort([\n                { field: TYPEFIELD, dir: \"asc\" },\n                { field: field, dir: \"asc\" }\n            ]);\n        },\n\n        search: function(name) {\n            this.dataSource.filter({\n                field: NAMEFIELD,\n                operator: \"contains\",\n                value: name\n            });\n        },\n\n        _content: function() {\n            var that = this;\n\n            that.list = $('<ul class=\"k-reset k-floats k-tiles\" />')\n                .appendTo(that.element)\n                .on(\"dblclick\" + NS, \"li\", proxy(that._dblClick, that));\n\n            that.listView = new kendo.ui.ListView(that.list, {\n                dataSource: that.dataSource,\n                template: that._itemTmpl(),\n                editTemplate: that._editTmpl(),\n                selectable: true,\n                autoBind: false,\n                dataBinding: function(e) {\n                    that.toolbar.find(\".k-delete\").parent().addClass(\"k-state-disabled\");\n\n                    if (e.action === \"remove\" || e.action === \"sync\") {\n                        e.preventDefault();\n                    }\n                },\n                dataBound: function() {\n                    if (that.dataSource.view().length) {\n                        that._tiles = this.items().filter(\"[\" + kendo.attr(\"type\") + \"=f]\");\n                    } else {\n                        this.wrapper.append(EMPTYTILE({ text: that.options.messages.emptyFolder }));\n                    }\n                },\n                change: proxy(that._listViewChange, that)\n            });\n        },\n\n        _dblClick: function(e) {\n            var that = this,\n                li = $(e.currentTarget);\n\n            if (li.hasClass(\"k-edit-item\")) {\n                that._directoryBlur();\n            }\n\n            if (li.filter(\"[\" + kendo.attr(\"type\") + \"=d]\").length) {\n                var folder = that.dataSource.getByUid(li.attr(kendo.attr(\"uid\")));\n                if (folder) {\n                    that.path(concatPaths(that.path(), folder.get(NAMEFIELD)));\n                    that.breadcrumbs.value(that.path());\n                }\n            } else if (li.filter(\"[\" + kendo.attr(\"type\") + \"=f]\").length) {\n                that.trigger(APPLY);\n            }\n        },\n\n        _listViewChange: function() {\n            var selected = this._selectedItem();\n\n            if (selected) {\n                this.toolbar.find(\".k-delete\").parent().removeClass(\"k-state-disabled\");\n\n                if (selected.get(TYPEFIELD) === \"f\") {\n                    this.trigger(CHANGE);\n                }\n            }\n        },\n\n        _dataSource: function() {\n            var that = this,\n                options = that.options,\n                transport = options.transport,\n                typeSortOrder = extend({}, DEFAULTSORTORDER),\n                nameSortOrder = { field: NAMEFIELD, dir: \"asc\" },\n                schema,\n                dataSource = {\n                    type: transport.type || \"filebrowser\",\n                    sort: [typeSortOrder, nameSortOrder]\n                };\n\n            if (isPlainObject(transport)) {\n                transport.path = proxy(that.path, that);\n                dataSource.transport = transport;\n            }\n\n            if (isPlainObject(options.schema)) {\n                dataSource.schema = options.schema;\n            } else if (transport.type && isPlainObject(kendo.data.schemas[transport.type])) {\n                schema = kendo.data.schemas[transport.type];\n            }\n\n            if (that.dataSource && that._errorHandler) {\n                that.dataSource.unbind(ERROR, that._errorHandler);\n            } else {\n                that._errorHandler = proxy(that._error, that);\n            }\n\n            that.dataSource = kendo.data.DataSource.create(dataSource)\n                .bind(ERROR, that._errorHandler);\n        },\n\n        _navigation: function() {\n            var that = this,\n                navigation = $('<div class=\"k-floatwrap\"><input/><input/></div>')\n                    .appendTo(this.element);\n\n            that.breadcrumbs = navigation.find(\"input:first\")\n                    .kendoBreadcrumbs({\n                        value: that.options.path,\n                        change: function() {\n                            that.path(this.value());\n                        }\n                    }).data(\"kendoBreadcrumbs\");\n\n            that.searchBox = navigation.parent().find(\"input:last\")\n                    .kendoSearchBox({\n                        label: that.options.messages.search,\n                        change: function() {\n                            that.search(this.value());\n                        }\n                    }).data(\"kendoSearchBox\");\n        },\n\n        _error: function(e) {\n            var that = this,\n                status;\n\n            if (!that.trigger(ERROR, e)) {\n                status = e.xhr.status;\n\n                if (e.status == 'error') {\n                    if (status == '404') {\n                        that._showMessage(that.options.messages.directoryNotFound);\n                    } else if (status != '0') {\n                        that._showMessage('Error! The requested URL returned ' + status + ' - ' + e.xhr.statusText);\n                    }\n                } else if (status == 'timeout') {\n                    that._showMessage('Error! Server timeout.');\n                }\n            }\n        },\n\n        _showMessage: function(message, type) {\n            return window[type || \"alert\"](message);\n        },\n\n        refresh: function() {\n            var that = this;\n            that._navigation();\n            that._toolbar();\n            that._content();\n        },\n\n        _editTmpl: function() {\n            var html = '<li class=\"k-tile k-state-selected\" ' + kendo.attr(\"uid\") + '=\"#=uid#\" ';\n\n            html += kendo.attr(\"type\") + '=\"${' + TYPEFIELD + '}\">';\n            html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n            html += '<div class=\"k-thumb\"><span class=\"k-icon k-folder\"></span></div>';\n            html += \"#}else{#\";\n            html += '<div class=\"k-thumb\"><span class=\"k-icon k-loading\"></span></div>';\n            html += \"#}#\";\n            html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n            html += '<input class=\"k-input\" ' + kendo.attr(\"bind\") + '=\"value:' + NAMEFIELD + '\"/>';\n            html += \"#}#\";\n            html += '</li>';\n\n            return proxy(kendo.template(html), { sizeFormatter: sizeFormatter } );\n        },\n\n        _itemTmpl: function() {\n            var that = this,\n                html = '<li class=\"k-tile\" ' + kendo.attr(\"uid\") + '=\"#=uid#\" ';\n\n            html += kendo.attr(\"type\") + '=\"${' + TYPEFIELD + '}\">';\n            html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n            html += '<div class=\"k-thumb\"><span class=\"k-icon k-folder\"></span></div>';\n            html += \"#}else{#\";\n            html += '<div class=\"k-thumb\"><span class=\"k-icon k-file\"></span></div>';\n            html += \"#}#\";\n            html += '<strong>${' + NAMEFIELD + '}</strong>';\n            html += '#if(' + TYPEFIELD + ' == \"f\") { # <span class=\"k-filesize\">${this.sizeFormatter(' + SIZEFIELD + ')}</span> #}#';\n            html += '</li>';\n\n            return proxy(kendo.template(html), { sizeFormatter: sizeFormatter } );\n        },\n\n        path: function(value) {\n            var that = this,\n                path = that._path || \"\";\n\n            if (value !== undefined) {\n                that._path = value.replace(trimSlashesRegExp, \"\") + \"/\";\n                that.dataSource.read({ path: that._path });\n                return;\n            }\n\n            if (path) {\n                path = path.replace(trimSlashesRegExp, \"\");\n            }\n\n            return path === \"/\" || path === \"\" ? \"\" : (path + \"/\");\n        }\n    });\n\n    var SearchBox = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            options = options || {};\n\n            Widget.fn.init.call(that, element, options);\n\n            if (placeholderSupported) {\n                that.element.attr(\"placeholder\", that.options.label);\n            }\n\n            that._wrapper();\n\n            that.element\n                .on(\"keydown\" + SEARCHBOXNS, proxy(that._keydown, that))\n                .on(\"change\" + SEARCHBOXNS, proxy(that._updateValue, that));\n\n            that.wrapper\n                .on(CLICK + SEARCHBOXNS, \"a\", proxy(that._click, that));\n\n            if (!placeholderSupported) {\n                that.element.on(\"focus\" + SEARCHBOXNS, proxy(that._focus, that))\n                    .on(\"blur\" + SEARCHBOXNS, proxy(that._blur, that));\n            }\n        },\n\n        options: {\n            name: \"SearchBox\",\n            label: \"Search\",\n            value: \"\"\n        },\n\n        events: [ CHANGE ],\n\n        destroy: function() {\n            var that = this;\n\n            that.wrapper\n                .add(that.element)\n                .add(that.label)\n                .off(SEARCHBOXNS);\n\n            Widget.fn.destroy.call(that);\n        },\n\n        _keydown: function(e) {\n            if (e.keyCode === 13) {\n                this._updateValue();\n            }\n        },\n\n        _click: function(e) {\n            e.preventDefault();\n            this._updateValue();\n        },\n\n        _updateValue: function() {\n            var that = this,\n                value = that.element.val();\n\n            if (value !== that.value()) {\n                that.value(value);\n\n                that.trigger(CHANGE);\n            }\n        },\n\n        _blur: function() {\n            this._updateValue();\n            this._toggleLabel();\n        },\n\n        _toggleLabel: function() {\n            if (!placeholderSupported) {\n                this.label.toggle(!this.element.val());\n            }\n        },\n\n        _focus: function() {\n            this.label.hide();\n        },\n\n        _wrapper: function() {\n            var element = this.element,\n                wrapper = element.parents(\".k-search-wrap\");\n\n            element[0].style.width = \"\";\n            element.addClass(\"k-input\");\n\n            if (!wrapper.length) {\n                wrapper = element.wrap($('<div class=\"k-widget k-search-wrap k-textbox\"/>')).parent();\n                if (!placeholderSupported) {\n                    $('<label style=\"display:block\">' + this.options.label + '</label>').insertBefore(element);\n                }\n                $('<a href=\"#\" class=\"k-icon k-i-search k-search\"/>').appendTo(wrapper);\n            }\n\n            this.wrapper = wrapper;\n            this.label = wrapper.find(\">label\");\n        },\n\n        value: function(value) {\n            var that = this;\n\n            if (value !== undefined) {\n                that.options.value = value;\n                that.element.val(value);\n                that._toggleLabel();\n                return;\n            }\n            return that.options.value;\n        }\n    });\n\n    var Breadcrumbs = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            options = options || {};\n\n            Widget.fn.init.call(that, element, options);\n\n            that._wrapper();\n\n            that.wrapper\n                .on(\"focus\" + BREADCRUBMSNS, \"input\", proxy(that._focus, that))\n                .on(\"blur\" + BREADCRUBMSNS, \"input\", proxy(that._blur, that))\n                .on(\"keydown\" + BREADCRUBMSNS, \"input\", proxy(that._keydown, that))\n                .on(CLICK + BREADCRUBMSNS, \"a.k-i-arrow-n:first\", proxy(that._rootClick, that))\n                .on(CLICK + BREADCRUBMSNS, \"a:not(.k-i-arrow-n)\", proxy(that._click, that));\n\n            that.value(that.options.value);\n        },\n\n        options: {\n            name: \"Breadcrumbs\",\n            gap: 50\n        },\n\n        events: [ CHANGE ],\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.wrapper\n                .add(that.wrapper.find(\"input\"))\n                .add(that.wrapper.find(\"a\"))\n                .off(BREADCRUBMSNS);\n        },\n\n        _update: function(val) {\n            val = (val || \"\").charAt(0) === \"/\" ? val : (\"/\" + (val || \"\"));\n\n            if (val !== this.value()) {\n                this.value(val);\n                this.trigger(CHANGE);\n            }\n        },\n\n        _click: function(e) {\n            e.preventDefault();\n            this._update(this._path($(e.target).prevAll(\"a:not(.k-i-arrow-n)\").addBack()));\n        },\n\n        _rootClick: function(e) {\n            e.preventDefault();\n            this._update(\"\");\n        },\n\n        _focus: function() {\n            var that = this,\n                element = that.element;\n\n            that.overlay.hide();\n            that.element.val(that.value());\n\n            setTimeout(function() {\n               element.select();\n            });\n        },\n\n        _blur: function() {\n            if (this.overlay.is(\":visible\")) {\n                return;\n            }\n\n            var that = this,\n                element = that.element,\n                val = element.val().replace(/\\/{2,}/g, \"/\");\n\n            that.overlay.show();\n            element.val(\"\");\n            that._update(val);\n        },\n\n        _keydown: function(e) {\n            var that = this;\n            if (e.keyCode === 13) {\n                that._blur();\n\n                setTimeout(function() {\n                    that.overlay.find(\"a:first\").focus();\n                });\n            }\n        },\n\n        _wrapper: function() {\n            var element = this.element,\n                wrapper = element.parents(\".k-breadcrumbs\"),\n                overlay;\n\n            element[0].style.width = \"\";\n            element.addClass(\"k-input\");\n\n            if (!wrapper.length) {\n                wrapper = element.wrap($('<div class=\"k-widget k-breadcrumbs k-textbox\"/>')).parent();\n            }\n\n            overlay = wrapper.find(\".k-breadcrumbs-wrap\");\n            if (!overlay.length) {\n                overlay = $('<div class=\"k-breadcrumbs-wrap\"/>').appendTo(wrapper);\n            }\n            this.wrapper = wrapper;\n            this.overlay = overlay;\n        },\n\n        refresh: function() {\n            var html = \"\",\n                value = this.value(),\n                segments,\n                segment,\n                idx,\n                length;\n\n            if (value === undefined || !value.match(/^\\//)) {\n                value = \"/\" + (value || \"\");\n            }\n\n            segments = value.split(\"/\");\n\n            for (idx = 0, length = segments.length; idx < length; idx++) {\n                segment = segments[idx];\n                if (segment) {\n                    if (!html) {\n                        html += '<a href=\"#\" class=\"k-icon k-i-arrow-n\">root</a>';\n                    }\n                    html += '<a class=\"k-link\" href=\"#\">' + segments[idx] + '</a>';\n                    html += '<span class=\"k-icon k-i-arrow-e\">&gt;</span>';\n                }\n            }\n            this.overlay.empty().append($(html));\n\n            this._adjustSectionWidth();\n        },\n\n        _adjustSectionWidth: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                width = wrapper.width() - that.options.gap,\n                links = that.overlay.find(\"a\"),\n                a;\n\n            links.each(function(index) {\n                a = $(this);\n\n                if (a.parent().width() > width) {\n                    if (index == links.length - 1) {\n                        a.width(width);\n                    } else {\n                        a.prev().addBack().hide();\n                    }\n                }\n            });\n        },\n\n        value: function(val) {\n            if (val !== undefined) {\n                this._value = val.replace(/\\/{2,}/g, \"/\");\n                this.refresh();\n                return;\n            }\n            return this._value;\n        },\n\n        _path: function(trail) {\n            return \"/\" + $.map(trail, function(b) {\n                return $(b).text();\n            }).join(\"/\");\n        }\n    });\n\n    kendo.ui.plugin(FileBrowser);\n    kendo.ui.plugin(Breadcrumbs);\n    kendo.ui.plugin(SearchBox);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        FileBrowser = kendo.ui.FileBrowser,\n        isPlainObject = $.isPlainObject,\n        proxy = $.proxy,\n        extend = $.extend,\n        placeholderSupported = kendo.support.placeholder,\n        browser = kendo.support.browser,\n        isFunction = kendo.isFunction,\n        trimSlashesRegExp = /(^\\/|\\/$)/g,\n        CHANGE = \"change\",\n        APPLY = \"apply\",\n        ERROR = \"error\",\n        CLICK = \"click\",\n        NS = \".kendoImageBrowser\",\n        NAMEFIELD = \"name\",\n        SIZEFIELD = \"size\",\n        TYPEFIELD = \"type\",\n        DEFAULTSORTORDER = { field: TYPEFIELD, dir: \"asc\" },\n        EMPTYTILE = kendo.template('<li class=\"k-tile-empty\"><strong>${text}</strong></li>'),\n        TOOLBARTMPL = '<div class=\"k-widget k-filebrowser-toolbar k-header k-floatwrap\">' +\n                            '<div class=\"k-toolbar-wrap\">' +\n                                '# if (showUpload) { # ' +\n                                    '<div class=\"k-widget k-upload\"><div class=\"k-button k-button-icontext k-upload-button\">' +\n                                        '<span class=\"k-icon k-add\"></span>#=messages.uploadFile#<input type=\"file\" name=\"file\" /></div></div>' +\n                                '# } #' +\n\n                                '# if (showCreate) { #' +\n                                     '<button type=\"button\" class=\"k-button k-button-icon\"><span class=\"k-icon k-addfolder\" /></button>' +\n                                '# } #' +\n\n                                '# if (showDelete) { #' +\n                                    '<button type=\"button\" class=\"k-button k-button-icon k-state-disabled\"><span class=\"k-icon k-delete\" /></button>&nbsp;' +\n                                '# } #' +\n                            '</div>' +\n                            '<div class=\"k-tiles-arrange\">' +\n                                '<label>#=messages.orderBy#: <select /></label></a>' +\n                            '</div>' +\n                        '</div>';\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"imagebrowser\": {\n                data: function(data) {\n                    return data.items || data || [];\n                },\n                model: {\n                    id: \"name\",\n                    fields: {\n                        name: \"name\",\n                        size: \"size\",\n                        type: \"type\"\n                    }\n                }\n            }\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"imagebrowser\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n                },\n                _call: function(type, options) {\n                    options.data = $.extend({}, options.data, { path: this.options.path() });\n\n                    if (isFunction(this.options[type])) {\n                        this.options[type].call(this, options);\n                    } else {\n                        kendo.data.RemoteTransport.fn[type].call(this, options);\n                    }\n                },\n                read: function(options) {\n                    this._call(\"read\", options);\n                },\n                create: function(options) {\n                    this._call(\"create\", options);\n                },\n                destroy: function(options) {\n                    this._call(\"destroy\", options);\n                },\n                update: function() {\n                    //updates are handled by the upload\n                },\n                options: {\n                    read: {\n                        type: \"POST\"\n                    },\n                    update: {\n                        type: \"POST\"\n                    },\n                    create: {\n                        type: \"POST\"\n                    },\n                    destroy: {\n                        type: \"POST\"\n                    }\n                }\n            })\n        }\n    });\n\n    function bindDragEventWrappers(element, onDragEnter, onDragLeave) {\n        var hideInterval, lastDrag;\n\n        element\n            .on(\"dragenter\" + NS, function() {\n                onDragEnter();\n                lastDrag = new Date();\n\n                if (!hideInterval) {\n                    hideInterval = setInterval(function() {\n                        var sinceLastDrag = new Date() - lastDrag;\n                        if (sinceLastDrag > 100) {\n                            onDragLeave();\n\n                            clearInterval(hideInterval);\n                            hideInterval = null;\n                        }\n                    }, 100);\n                }\n            })\n            .on(\"dragover\" + NS, function() {\n                lastDrag = new Date();\n            });\n    }\n\n    var offsetTop;\n    if (browser.msie && browser.version < 8) {\n        offsetTop = function (element) {\n            return element.offsetTop;\n        };\n    } else {\n        offsetTop = function (element) {\n            return element.offsetTop - $(element).height();\n        };\n    }\n\n    function concatPaths(path, name) {\n        if(path === undefined || !path.match(/\\/$/)) {\n            path = (path || \"\") + \"/\";\n        }\n        return path + name;\n    }\n\n    function sizeFormatter(value) {\n        if(!value) {\n            return \"\";\n        }\n\n        var suffix = \" bytes\";\n\n        if (value >= 1073741824) {\n            suffix = \" GB\";\n            value /= 1073741824;\n        } else if (value >= 1048576) {\n            suffix = \" MB\";\n            value /= 1048576;\n        } else  if (value >= 1024) {\n            suffix = \" KB\";\n            value /= 1024;\n        }\n\n        return Math.round(value * 100) / 100 + suffix;\n    }\n\n    function fieldName(fields, name) {\n        var descriptor = fields[name];\n\n        if (isPlainObject(descriptor)) {\n            return descriptor.from || descriptor.field || name;\n        }\n        return descriptor;\n    }\n\n    var ImageBrowser = FileBrowser.extend({\n        init: function(element, options) {\n            var that = this;\n\n            options = options || {};\n\n            FileBrowser.fn.init.call(that, element, options);\n\n            that.element.addClass(\"k-imagebrowser\");\n        },\n\n        options: {\n            name: \"ImageBrowser\",\n            fileTypes: \"*.png,*.gif,*.jpg,*.jpeg\"\n        },\n\n        value: function () {\n            var that = this,\n                selected = that._selectedItem(),\n                path,\n                imageUrl = that.options.transport.imageUrl;\n\n            if (selected && selected.get(TYPEFIELD) === \"f\") {\n                path = concatPaths(that.path(), selected.get(NAMEFIELD)).replace(trimSlashesRegExp, \"\");\n                if (imageUrl) {\n                    path = isFunction(imageUrl) ? imageUrl(path) : kendo.format(imageUrl, encodeURIComponent(path));\n                }\n                return path;\n            }\n        },\n\n        _fileUpload: function(e) {\n            var that = this,\n                options = that.options,\n                fileTypes = options.fileTypes,\n                filterRegExp = new RegExp((\"(\" + fileTypes.split(\",\").join(\")|(\") + \")\").replace(/\\*\\./g , \".*.\"), \"i\"),\n                fileName = e.files[0].name,\n                fileNameField = NAMEFIELD,\n                sizeField = SIZEFIELD,\n                model;\n\n            if (filterRegExp.test(fileName)) {\n                e.data = { path: that.path() };\n\n                model = that._createFile(fileName);\n\n                if (!model) {\n                    e.preventDefault();\n                } else {\n                    model._uploading = true;\n                    that.upload.one(\"success\", function(e) {\n                        delete model._uploading;\n                        model.set(fileNameField, e.response[that._getFieldName(fileNameField)]);\n                        model.set(sizeField, e.response[that._getFieldName(sizeField)]);\n                        that._tiles = that.listView.items().filter(\"[\" + kendo.attr(\"type\") + \"=f]\");\n                        that._scroll();\n                    });\n                }\n            } else {\n                e.preventDefault();\n                that._showMessage(kendo.format(options.messages.invalidFileType, fileName, fileTypes));\n            }\n        },\n\n        _content: function() {\n            var that = this;\n\n            that.list = $('<ul class=\"k-reset k-floats k-tiles\" />')\n                .appendTo(that.element)\n                .on(\"scroll\" + NS, proxy(that._scroll, that))\n                .on(\"dblclick\" + NS, \"li\", proxy(that._dblClick, that));\n\n            that.listView = new kendo.ui.ListView(that.list, {\n                dataSource: that.dataSource,\n                template: that._itemTmpl(),\n                editTemplate: that._editTmpl(),\n                selectable: true,\n                autoBind: false,\n                dataBinding: function(e) {\n                    that.toolbar.find(\".k-delete\").parent().addClass(\"k-state-disabled\");\n\n                    if (e.action === \"remove\" || e.action === \"sync\") {\n                        e.preventDefault();\n                    }\n                },\n                dataBound: function() {\n                    if (that.dataSource.view().length) {\n                        that._tiles = this.items().filter(\"[\" + kendo.attr(\"type\") + \"=f]\");\n                        that._scroll();\n                    } else {\n                        this.wrapper.append(EMPTYTILE({ text: that.options.messages.emptyFolder }));\n                    }\n                },\n                change: proxy(that._listViewChange, that)\n            });\n        },\n\n        _dataSource: function() {\n            var that = this,\n                options = that.options,\n                transport = options.transport,\n                typeSortOrder = extend({}, DEFAULTSORTORDER),\n                nameSortOrder = { field: NAMEFIELD, dir: \"asc\" },\n                schema,\n                dataSource = {\n                    type: transport.type || \"imagebrowser\",\n                    sort: [typeSortOrder, nameSortOrder]\n                };\n\n            if (isPlainObject(transport)) {\n                transport.path = proxy(that.path, that);\n                dataSource.transport = transport;\n            }\n\n            if (isPlainObject(options.schema)) {\n                dataSource.schema = options.schema;\n            } else if (transport.type && isPlainObject(kendo.data.schemas[transport.type])) {\n                schema = kendo.data.schemas[transport.type];\n            }\n\n            if (that.dataSource && that._errorHandler) {\n                that.dataSource.unbind(ERROR, that._errorHandler);\n            } else {\n                that._errorHandler = proxy(that._error, that);\n            }\n\n            that.dataSource = kendo.data.DataSource.create(dataSource)\n                .bind(ERROR, that._errorHandler);\n        },\n\n        _loadImage: function(li) {\n            var that = this,\n                element = $(li),\n                dataItem = that.dataSource.getByUid(element.attr(kendo.attr(\"uid\"))),\n                name = dataItem.get(NAMEFIELD),\n                thumbnailUrl = that.options.transport.thumbnailUrl,\n                img = $(\"<img />\", { alt: name }),\n                urlJoin = \"?\";\n\n            if (dataItem._uploading) {\n                return;\n            }\n\n            img.hide()\n               .on(\"load\" + NS, function() {\n                   $(this).prev().remove().end().addClass(\"k-image\").fadeIn();\n               });\n\n            element.find(\".k-loading\").after(img);\n\n            if (isFunction(thumbnailUrl)) {\n                thumbnailUrl = thumbnailUrl(that.path(), encodeURIComponent(name));\n            } else {\n                if (thumbnailUrl.indexOf(\"?\") >= 0) {\n                    urlJoin = \"&\";\n                }\n\n                thumbnailUrl = thumbnailUrl + urlJoin + \"path=\" + that.path() + encodeURIComponent(name);\n            }\n\n            // IE8 will trigger the load event immediately when the src is assigned\n            // if the image is loaded from the cache\n            img.attr(\"src\", thumbnailUrl);\n\n            li.loaded = true;\n        },\n\n        _scroll: function() {\n            var that = this;\n            if (that.options.transport && that.options.transport.thumbnailUrl) {\n                clearTimeout(that._timeout);\n\n                that._timeout = setTimeout(function() {\n                    var height = that.list.outerHeight(),\n                        viewTop = that.list.scrollTop(),\n                        viewBottom = viewTop + height;\n\n                    that._tiles.each(function() {\n                        var top = offsetTop(this),\n                            bottom = top + this.offsetHeight;\n\n                        if ((top >= viewTop && top < viewBottom) || (bottom >= viewTop && bottom < viewBottom)) {\n                            that._loadImage(this);\n                        }\n\n                        if (top > viewBottom) {\n                            return false;\n                        }\n                    });\n\n                    that._tiles = that._tiles.filter(function() {\n                        return !this.loaded;\n                    });\n\n                }, 250);\n            }\n        },\n\n        _itemTmpl: function() {\n            var that = this,\n                html = '<li class=\"k-tile\" ' + kendo.attr(\"uid\") + '=\"#=uid#\" ';\n\n            html += kendo.attr(\"type\") + '=\"${' + TYPEFIELD + '}\">';\n            html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n            html += '<div class=\"k-thumb\"><span class=\"k-icon k-folder\"></span></div>';\n            html += \"#}else{#\";\n            if (that.options.transport && that.options.transport.thumbnailUrl) {\n                html += '<div class=\"k-thumb\"><span class=\"k-icon k-loading\"></span></div>';\n            } else {\n                html += '<div class=\"k-thumb\"><span class=\"k-icon k-file\"></span></div>';\n            }\n            html += \"#}#\";\n            html += '<strong>${' + NAMEFIELD + '}</strong>';\n            html += '#if(' + TYPEFIELD + ' == \"f\") { # <span class=\"k-filesize\">${this.sizeFormatter(' + SIZEFIELD + ')}</span> #}#';\n            html += '</li>';\n\n            return proxy(kendo.template(html), { sizeFormatter: sizeFormatter } );\n        }\n    });\n\n    kendo.ui.plugin(ImageBrowser);\n})(window.kendo.jQuery);\n\n\n\n(function($,undefined) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        Widget = kendo.ui.Widget,\n        os = kendo.support.mobileOS,\n        browser = kendo.support.browser,\n        extend = $.extend,\n        proxy = $.proxy,\n        deepExtend = kendo.deepExtend,\n        NS = \".kendoEditor\",\n        keys = kendo.keys;\n\n    // options can be: template (as string), cssClass, title, defaultValue\n    var ToolTemplate = Class.extend({\n        init: function(options) {\n            this.options = options;\n        },\n\n        getHtml: function() {\n            var options = this.options;\n            return kendo.template(options.template, {useWithBlock:false})(options);\n        }\n    });\n\n    var EditorUtils = {\n        editorWrapperTemplate:\n            '<table cellspacing=\"4\" cellpadding=\"0\" class=\"k-widget k-editor k-header\" role=\"presentation\"><tbody>' +\n                '<tr role=\"presentation\"><td class=\"k-editor-toolbar-wrap\" role=\"presentation\"><ul class=\"k-editor-toolbar\" role=\"toolbar\" /></td></tr>' +\n                '<tr><td class=\"k-editable-area\" /></tr>' +\n            '</tbody></table>',\n\n        buttonTemplate:\n            '<a href=\"\" role=\"button\" class=\"k-tool\"' +\n            '#= data.popup ? \" data-popup\" : \"\" #' +\n            ' unselectable=\"on\" title=\"#= data.title #\"><span unselectable=\"on\" class=\"k-tool-icon #= data.cssClass #\">#= data.title #</span></a>',\n\n        colorPickerTemplate:\n            '<div class=\"k-colorpicker #= data.cssClass #\" />',\n\n        comboBoxTemplate:\n            '<select title=\"#= data.title #\" class=\"#= data.cssClass #\" />',\n\n        dropDownListTemplate:\n            '<span class=\"k-editor-dropdown\"><select title=\"#= data.title #\" class=\"#= data.cssClass #\" /></span>',\n\n        separatorTemplate:\n            '<span class=\"k-separator\" />',\n\n        formatByName: function(name, format) {\n            for (var i = 0; i < format.length; i++) {\n                if ($.inArray(name, format[i].tags) >= 0) {\n                    return format[i];\n                }\n            }\n        },\n\n        registerTool: function(toolName, tool) {\n            var toolOptions = tool.options;\n\n            if (toolOptions && toolOptions.template) {\n                toolOptions.template.options.cssClass = \"k-\" + toolName;\n            }\n\n            if (!tool.name) {\n                tool.options.name = toolName;\n                tool.name = toolName.toLowerCase();\n            }\n\n            Editor.defaultTools[toolName] = tool;\n        },\n\n        registerFormat: function(formatName, format) {\n            Editor.fn.options.formats[formatName] = format;\n        }\n    };\n\n    var messages = {\n        bold: \"Bold\",\n        italic: \"Italic\",\n        underline: \"Underline\",\n        strikethrough: \"Strikethrough\",\n        superscript: \"Superscript\",\n        subscript: \"Subscript\",\n        justifyCenter: \"Center text\",\n        justifyLeft: \"Align text left\",\n        justifyRight: \"Align text right\",\n        justifyFull: \"Justify\",\n        insertUnorderedList: \"Insert unordered list\",\n        insertOrderedList: \"Insert ordered list\",\n        indent: \"Indent\",\n        outdent: \"Outdent\",\n        createLink: \"Insert hyperlink\",\n        unlink: \"Remove hyperlink\",\n        insertImage: \"Insert image\",\n        insertFile: \"Insert file\",\n        insertHtml: \"Insert HTML\",\n        viewHtml: \"View HTML\",\n        fontName: \"Select font family\",\n        fontNameInherit: \"(inherited font)\",\n        fontSize: \"Select font size\",\n        fontSizeInherit: \"(inherited size)\",\n        formatBlock: \"Format\",\n        formatting: \"Format\",\n        foreColor: \"Color\",\n        backColor: \"Background color\",\n        style: \"Styles\",\n        emptyFolder: \"Empty Folder\",\n        uploadFile: \"Upload\",\n        orderBy: \"Arrange by:\",\n        orderBySize: \"Size\",\n        orderByName: \"Name\",\n        invalidFileType: \"The selected file \\\"{0}\\\" is not valid. Supported file types are {1}.\",\n        deleteFile: 'Are you sure you want to delete \"{0}\"?',\n        overwriteFile: 'A file with name \"{0}\" already exists in the current directory. Do you want to overwrite it?',\n        directoryNotFound: \"A directory with this name was not found.\",\n        imageWebAddress: \"Web address\",\n        imageAltText: \"Alternate text\",\n        imageWidth: \"Width (px)\",\n        imageHeight: \"Height (px)\",\n        fileWebAddress: \"Web address\",\n        fileTitle: \"Title\",\n        linkWebAddress: \"Web address\",\n        linkText: \"Text\",\n        linkToolTip: \"ToolTip\",\n        linkOpenInNewWindow: \"Open link in new window\",\n        dialogUpdate: \"Update\",\n        dialogInsert: \"Insert\",\n        dialogCancel: \"Cancel\",\n        createTable: \"Create table\",\n        createTableHint: \"Create a {0} x {1} table\",\n        addColumnLeft: \"Add column on the left\",\n        addColumnRight: \"Add column on the right\",\n        addRowAbove: \"Add row above\",\n        addRowBelow: \"Add row below\",\n        deleteRow: \"Delete row\",\n        deleteColumn: \"Delete column\"\n    };\n\n    var supportedBrowser = !os || (os.ios && os.flatVersion >= 500) || (!os.ios && typeof(document.documentElement.contentEditable) != 'undefined');\n\n    var toolGroups = {\n        basic: [ \"bold\", \"italic\", \"underline\" ],\n        alignment: [ \"justifyLeft\", \"justifyCenter\", \"justifyRight\" ],\n        lists: [ \"insertUnorderedList\", \"insertOrderedList\" ],\n        indenting: [ \"indent\", \"outdent\" ],\n        links: [ \"createLink\", \"unlink\" ],\n        tables: [ \"createTable\", \"addColumnLeft\", \"addColumnRight\", \"addRowAbove\", \"addRowBelow\", \"deleteRow\", \"deleteColumn\" ]\n    };\n\n    var Editor = Widget.extend({\n        init: function (element, options) {\n            var that = this,\n                value,\n                editorNS = kendo.ui.editor,\n                toolbarContainer,\n                toolbarOptions,\n                type;\n\n            /* suppress initialization in mobile webkit devices (w/o proper contenteditable support) */\n            if (!supportedBrowser) {\n                return;\n            }\n\n            Widget.fn.init.call(that, element, options);\n\n            that.options = deepExtend({}, that.options, options);\n\n            element = that.element;\n\n            type = editorNS.Dom.name(element[0]);\n\n            element.closest(\"form\").on(\"submit\" + NS, function () {\n                that.update();\n            });\n\n            toolbarOptions = extend({}, that.options);\n            toolbarOptions.editor = that;\n\n            if (type == \"textarea\") {\n                that._wrapTextarea();\n\n                toolbarContainer = that.wrapper.find(\".k-editor-toolbar\");\n\n                if (element[0].id) {\n                    toolbarContainer.attr(\"aria-controls\", element[0].id);\n                }\n            } else {\n                that.element.attr(\"contenteditable\", true).addClass(\"k-widget k-editor k-editor-inline\");\n\n                toolbarOptions.popup = true;\n\n                toolbarContainer = $('<ul class=\"k-editor-toolbar\" role=\"toolbar\" />').insertBefore(element);\n            }\n\n            that.toolbar = new editorNS.Toolbar(toolbarContainer[0], toolbarOptions);\n\n            that.toolbar.bindTo(that);\n\n            if (type == \"textarea\") {\n                setTimeout(function () {\n                    var heightStyle = that.wrapper[0].style.height;\n                    var expectedHeight = parseInt(heightStyle, 10);\n                    var actualHeight = that.wrapper.height();\n                    if (heightStyle.indexOf(\"px\") > 0 && !isNaN(expectedHeight) && actualHeight > expectedHeight) {\n                        that.wrapper.height(expectedHeight - (actualHeight - expectedHeight));\n                    }\n                });\n            }\n\n            that._initializeContentElement(that);\n\n            that.keyboard = new editorNS.Keyboard([\n                new editorNS.TypingHandler(that),\n                new editorNS.BackspaceHandler(that),\n                new editorNS.SystemHandler(that)\n            ]);\n\n            that.clipboard = new editorNS.Clipboard(this);\n\n            that.undoRedoStack = new editorNS.UndoRedoStack();\n\n            if (options && options.value) {\n                value = options.value;\n            } else if (that.textarea) {\n                // indented HTML introduces problematic ranges in IE\n                value = element.val().replace(/[\\r\\n\\v\\f\\t ]+/ig, \" \");\n            } else {\n                value = element[0].innerHTML;\n            }\n\n            that.value(value);\n\n            $(document)\n                .on(\"mousedown\", proxy(that._endTyping, that))\n                .on(\"mouseup\", proxy(that._mouseup, that));\n\n            kendo.notify(that);\n        },\n\n        _endTyping: function() {\n            var keyboard = this.keyboard;\n\n            try {\n                if (keyboard.isTypingInProgress()) {\n                    keyboard.endTyping(true);\n\n                    this.saveSelection();\n                }\n            } catch (e) { }\n        },\n\n        _selectionChange: function() {\n            if (!browser.msie) {\n                kendo.ui.editor.Dom.ensureTrailingBreaks(this.body);\n            }\n\n            this._selectionStarted = false;\n            this.saveSelection();\n            this.trigger(\"select\", {});\n        },\n\n        _wrapTextarea: function() {\n            var that = this,\n                textarea = that.element,\n                w = textarea[0].style.width,\n                h = textarea[0].style.height,\n                template = EditorUtils.editorWrapperTemplate,\n                editorWrap = $(template).insertBefore(textarea).width(w).height(h),\n                editArea = editorWrap.find(\".k-editable-area\");\n\n            textarea.attr(\"autocomplete\", \"off\")\n                .appendTo(editArea).addClass(\"k-content k-raw-content\").css(\"display\", \"none\");\n\n            that.textarea = textarea;\n            that.wrapper = editorWrap;\n        },\n\n        _createContentElement: function(stylesheets) {\n            var editor = this;\n            var iframe, wnd, doc;\n            var textarea = editor.textarea;\n            var specifiedDomain = editor.options.domain;\n            var domain = specifiedDomain || document.domain;\n            var domainScript = \"\";\n            var src = 'javascript:\"\"';\n\n            // automatically relax same-origin policy if document.domain != location.hostname,\n            // or forcefully relax if options.domain is specified (for document.domain = document.domain scenario)\n            if (specifiedDomain || domain != location.hostname) {\n                // relax same-origin policy\n                domainScript = \"<script>document.domain=\\\"\" + domain + \"\\\"</script>\";\n                src = \"javascript:document.write('\" + domainScript + \"')\";\n            }\n\n            textarea.hide();\n\n            iframe = $(\"<iframe />\", { frameBorder: \"0\" })[0];\n\n            $(iframe)\n                .css(\"display\", \"\")\n                .addClass(\"k-content\")\n                .insertBefore(textarea);\n\n\n            iframe.src = src;\n\n            wnd = iframe.contentWindow || iframe;\n            doc = wnd.document || iframe.contentDocument;\n\n            $(iframe).one(\"load\", function() {\n                editor.toolbar.decorateFrom(doc.body);\n            });\n\n            doc.open();\n            doc.write(\n                \"<!DOCTYPE html><html><head>\" +\n                \"<meta charset='utf-8' />\" +\n                \"<style>\" +\n                    \"html,body{padding:0;margin:0;height:100%;min-height:100%;}\" +\n                    \"body{font-size:12px;font-family:Verdana,Geneva,sans-serif;padding-top:1px;margin-top:-1px;\" +\n                    \"word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space;\" +\n                    (kendo.support.isRtl(textarea) ? \"direction:rtl;\" : \"\") +\n                    \"}\" +\n                    \"h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em}h3{font-size:1.16em}h4{font-size:1em}h5{font-size:.83em}h6{font-size:.7em}\" +\n                    \"p{margin:0 0 1em;padding:0 .2em}.k-marker{display:none;}.k-paste-container,.Apple-style-span{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}\" +\n                    \"ul,ol{padding-left:2.5em}\" +\n                    \"span{-ms-high-contrast-adjust:none;}\" +\n                    \"a{color:#00a}\" +\n                    \"code{font-size:1.23em}\" +\n                    \"telerik\\\\3Ascript{display: none;}\" +\n                    \".k-table{table-layout:fixed;width:100%;border-spacing:0;margin: 0 0 1em;}\" +\n                    \".k-table td{min-width:1px;padding:.2em .3em;}\" +\n                    \".k-table,.k-table td{outline:0;border: 1px dotted #ccc;}\" +\n                    \".k-table p{margin:0;padding:0;}\" +\n                \"</style>\" +\n                domainScript +\n                \"<script>(function(d,c){d[c]('header'),d[c]('article'),d[c]('nav'),d[c]('section'),d[c]('footer');})(document, 'createElement');</script>\" +\n                $.map(stylesheets, function(href){\n                    return \"<link rel='stylesheet' href='\" + href + \"'>\";\n                }).join(\"\") +\n                \"</head><body autocorrect='off' contenteditable='true'></body></html>\"\n            );\n\n            doc.close();\n\n            return wnd;\n        },\n\n        _blur: function() {\n            var textarea = this.textarea;\n            var old = textarea ? textarea.val() : this._oldValue;\n            var value = this.options.encoded ? this.encodedValue() : this.value();\n\n            this.update();\n\n            if (textarea) {\n                textarea.trigger(\"blur\");\n            }\n\n            if (value != old) {\n                this.trigger(\"change\");\n            }\n        },\n\n        _initializeContentElement: function() {\n            var editor = this;\n            var doc;\n            var blurTrigger;\n\n            if (editor.textarea) {\n                editor.window = editor._createContentElement(editor.options.stylesheets);\n                doc = editor.document = editor.window.contentDocument || editor.window.document;\n                editor.body = doc.body;\n\n                blurTrigger = editor.window;\n\n                $(doc).on(\"mouseup\" + NS, proxy(editor._mouseup, editor));\n            } else {\n                editor.window = window;\n                doc = editor.document = document;\n                editor.body = editor.element[0];\n\n                blurTrigger = editor.body;\n\n                editor.toolbar.decorateFrom(editor.body);\n            }\n\n            $(blurTrigger).on(\"blur\" + NS, proxy(this._blur, this));\n\n            try {\n                doc.execCommand(\"enableInlineTableEditing\", null, false);\n            } catch(e) { }\n\n            if (kendo.support.touch) {\n                $(doc).on(\"selectionchange\" + NS, proxy(this._selectionChange, this))\n                      .on(\"keydown\" + NS, function() {\n                          // necessary in iOS when touch events are bound to the page\n                          if (kendo._activeElement() != doc.body) {\n                              editor.window.focus();\n                          }\n                      });\n            }\n\n            $(editor.body)\n                .on(\"keydown\" + NS, function (e) {\n                    var range;\n\n                    if (e.keyCode === keys.F10) {\n                        // Handling with timeout to avoid the default IE menu\n                        setTimeout(proxy(editor.toolbar.focus, editor.toolbar), 100);\n\n                        e.preventDefault();\n                        return;\n                    } else if (e.keyCode == keys.LEFT || e.keyCode == keys.RIGHT) {\n                        // skip bom nodes when navigating with arrows\n                        range = editor.getRange();\n                        var left = e.keyCode == keys.LEFT;\n                        var container = range[left ? \"startContainer\" : \"endContainer\"];\n                        var offset = range[left ? \"startOffset\" : \"endOffset\"];\n                        var direction = left ? -1 : 1;\n\n                        if (left) {\n                            offset -= 1;\n                        }\n\n                        if (offset + direction > 0 && container.nodeType == 3 && container.nodeValue[offset] == \"\\ufeff\") {\n                            range.setStart(container, offset + direction);\n                            range.collapse(true);\n                            editor.selectRange(range);\n                        }\n                    }\n\n                    var toolName = editor.keyboard.toolFromShortcut(editor.toolbar.tools, e);\n\n                    if (toolName) {\n                        e.preventDefault();\n                        if (!/^(undo|redo)$/.test(toolName)) {\n                            editor.keyboard.endTyping(true);\n                        }\n                        editor.trigger(\"keydown\", e);\n                        editor.exec(toolName);\n                        return false;\n                    }\n\n                    editor.keyboard.clearTimeout();\n\n                    editor.keyboard.keydown(e);\n                })\n                .on(\"keyup\" + NS, function (e) {\n                    var selectionCodes = [8, 9, 33, 34, 35, 36, 37, 38, 39, 40, 40, 45, 46];\n\n                    if ($.inArray(e.keyCode, selectionCodes) > -1 || (e.keyCode == 65 && e.ctrlKey && !e.altKey && !e.shiftKey)) {\n                        editor._selectionChange();\n                    }\n\n                    editor.keyboard.keyup(e);\n                })\n                .on(\"mousedown\" + NS, function(e) {\n                    editor._selectionStarted = true;\n\n                    // handle middle-click and ctrl-click on links\n                    if (browser.gecko) {\n                        return;\n                    }\n\n                    var target = $(e.target);\n\n                    if ((e.which == 2 || (e.which == 1 && e.ctrlKey)) &&\n                        target.is(\"a[href]\")) {\n                        window.open(target.attr(\"href\"), \"_new\");\n                    }\n                })\n                .on(\"click\" + NS, function(e) {\n                    var dom = kendo.ui.editor.Dom, range;\n\n                    if (dom.name(e.target) === \"img\") {\n                        range = editor.createRange();\n                        range.selectNode(e.target);\n                        editor.selectRange(range);\n                    }\n                })\n                .on(\"cut\" + NS + \" paste\" + NS, function (e) {\n                    editor.clipboard[\"on\" + e.type](e);\n                })\n                .on(\"focusin\" + NS, function() {\n                    $(this).addClass(\"k-state-active\");\n                    editor.toolbar.show();\n                })\n                .on(\"focusout\" + NS, function() {\n                    setTimeout(function() {\n                        var active = kendo._activeElement();\n                        var body = editor.body;\n                        var toolbar = editor.toolbar;\n\n                        if (active != body && !$.contains(body, active) && !$(active).is(\".k-editortoolbar-dragHandle\") && !toolbar.focused()) {\n                            $(body).removeClass(\"k-state-active\");\n                            toolbar.hide();\n                        }\n                    }, 10);\n                });\n        },\n\n        _mouseup: function() {\n            var that = this;\n\n            if (that._selectionStarted) {\n                setTimeout(function() {\n                    that._selectionChange();\n                }, 1);\n            }\n        },\n\n\n        refresh: function() {\n            var that = this;\n\n            if (that.textarea) {\n                // preserve updated value before re-initializing\n                // don't use update() to prevent the editor from encoding the content too early\n                that.textarea.val(that.value());\n                that.wrapper.find(\"iframe\").remove();\n                that._initializeContentElement(that);\n                that.value(that.textarea.val());\n            }\n        },\n\n        events: [\n            \"select\",\n            \"change\",\n            \"execute\",\n            \"error\",\n            \"paste\",\n            \"keydown\",\n            \"keyup\"\n        ],\n\n        options: {\n            name: \"Editor\",\n            messages: messages,\n            formats: {},\n            encoded: true,\n            domain: null,\n            serialization: {\n                entities: true,\n                scripts: false\n            },\n            stylesheets: [],\n            dialogOptions: {\n                modal: true, resizable: false, draggable: true,\n                animation: false\n            },\n            fontName: [\n                { text: \"Arial\", value: \"Arial,Helvetica,sans-serif\" },\n                { text: \"Courier New\", value: \"'Courier New',Courier,monospace\" },\n                { text: \"Georgia\", value: \"Georgia,serif\" },\n                { text: \"Impact\", value: \"Impact,Charcoal,sans-serif\" },\n                { text: \"Lucida Console\", value: \"'Lucida Console',Monaco,monospace\" },\n                { text: \"Tahoma\", value: \"Tahoma,Geneva,sans-serif\" },\n                { text: \"Times New Roman\", value: \"'Times New Roman',Times,serif\" },\n                { text: \"Trebuchet MS\", value: \"'Trebuchet MS',Helvetica,sans-serif\" },\n                { text: \"Verdana\", value: \"Verdana,Geneva,sans-serif\" }\n            ],\n            fontSize: [\n                { text: \"1 (8pt)\",  value: \"xx-small\" },\n                { text: \"2 (10pt)\", value: \"x-small\" },\n                { text: \"3 (12pt)\", value: \"small\" },\n                { text: \"4 (14pt)\", value: \"medium\" },\n                { text: \"5 (18pt)\", value: \"large\" },\n                { text: \"6 (24pt)\", value: \"x-large\" },\n                { text: \"7 (36pt)\", value: \"xx-large\" }\n            ],\n            formatBlock: [\n                { text: \"Paragraph\", value: \"p\" },\n                { text: \"Quotation\", value: \"blockquote\" },\n                { text: \"Heading 1\", value: \"h1\" },\n                { text: \"Heading 2\", value: \"h2\" },\n                { text: \"Heading 3\", value: \"h3\" },\n                { text: \"Heading 4\", value: \"h4\" },\n                { text: \"Heading 5\", value: \"h5\" },\n                { text: \"Heading 6\", value: \"h6\" }\n            ],\n            tools: [].concat.call(\n                [\"formatting\"],\n                toolGroups.basic,\n                toolGroups.alignment,\n                toolGroups.lists,\n                toolGroups.indenting,\n                toolGroups.links,\n                [\"insertImage\"],\n                toolGroups.tables\n            )\n        },\n\n        destroy: function() {\n            var that = this;\n            Widget.fn.destroy.call(that);\n\n            $(that.window)\n                .add(that.document)\n                .add(that.body)\n                .add(that.wrapper)\n                .add(that.element.closest(\"form\"))\n                .off(NS);\n\n            $(document).off(\"mousedown\", proxy(that._endTyping, that))\n                       .off(\"mouseup\", proxy(that._mouseup, that));\n\n            that._focusOutside();\n\n            that.toolbar.destroy();\n\n            kendo.destroy(that.wrapper);\n        },\n\n        _focusOutside: function () {\n            // move focus outside the Editor, see https://github.com/telerik/kendo/issues/3673\n            if (kendo.support.browser.msie && this.textarea) {\n                var tempInput = $(\"<input style='position:absolute;left:-10px;top:-10px;width:1px;height:1px;font-size:0;border:0;' />\").appendTo(document.body).focus();\n                tempInput.blur().remove();\n            }\n        },\n\n        state: function(toolName) {\n            var tool = Editor.defaultTools[toolName];\n            var finder = tool && (tool.options.finder || tool.finder);\n            var RangeUtils = kendo.ui.editor.RangeUtils;\n            var range, textNodes;\n\n            if (finder) {\n                range = this.getRange();\n\n                textNodes = RangeUtils.textNodes(range);\n\n                if (!textNodes.length && range.collapsed) {\n                    textNodes = [range.startContainer];\n                }\n\n                return finder.getFormat ? finder.getFormat(textNodes) : finder.isFormatted(textNodes);\n            }\n\n            return false;\n        },\n\n        value: function (html) {\n            var body = this.body,\n                editorNS = kendo.ui.editor,\n                dom = editorNS.Dom,\n                currentHtml = editorNS.Serializer.domToXhtml(body, this.options.serialization);\n\n            if (html === undefined) {\n                return currentHtml;\n            }\n\n            if (html == currentHtml) {\n                return;\n            }\n\n            editorNS.Serializer.htmlToDom(html, body);\n\n            if (!browser.msie) {\n                kendo.ui.editor.Dom.ensureTrailingBreaks(this.body);\n            }\n\n            this.selectionRestorePoint = null;\n            this.update();\n\n            this.toolbar.refreshTools();\n        },\n\n        saveSelection: function(range) {\n            range = range || this.getRange();\n            var container = range.commonAncestorContainer,\n                body = this.body;\n\n            if (container == body || $.contains(body, container)) {\n                this.selectionRestorePoint = new kendo.ui.editor.RestorePoint(range);\n            }\n        },\n\n        _focusBody: function() {\n            var body = this.body;\n            var iframe = this.wrapper && this.wrapper.find(\"iframe\")[0];\n            var documentElement = this.document.documentElement;\n            var activeElement = kendo._activeElement();\n\n            if (activeElement != body && activeElement != iframe) {\n                var scrollTop = documentElement.scrollTop;\n                body.focus();\n                documentElement.scrollTop = scrollTop;\n            }\n        },\n\n        restoreSelection: function() {\n            this._focusBody();\n\n            if (this.selectionRestorePoint) {\n                this.selectRange(this.selectionRestorePoint.toRange());\n            }\n        },\n\n        focus: function () {\n            this.restoreSelection();\n        },\n\n        update: function (value) {\n            value = value || this.options.encoded ? this.encodedValue() : this.value();\n\n            if (this.textarea) {\n                this.textarea.val(value);\n            } else {\n                this._oldValue = value;\n            }\n        },\n\n        encodedValue: function () {\n            return kendo.ui.editor.Dom.encode(this.value());\n        },\n\n        createRange: function (document) {\n            return kendo.ui.editor.RangeUtils.createRange(document || this.document);\n        },\n\n        getSelection: function () {\n            return kendo.ui.editor.SelectionUtils.selectionFromDocument(this.document);\n        },\n\n        selectRange: function(range) {\n            this._focusBody();\n            var selection = this.getSelection();\n            selection.removeAllRanges();\n            selection.addRange(range);\n            this.saveSelection(range);\n        },\n\n        getRange: function () {\n            var selection = this.getSelection(),\n                range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : this.createRange(),\n                doc = this.document;\n\n            if (range.startContainer == doc && range.endContainer == doc && !range.startOffset && !range.endOffset) {\n                range.setStart(this.body, 0);\n                range.collapse(true);\n            }\n\n            return range;\n        },\n\n        selectedHtml: function() {\n            return kendo.ui.editor.Serializer.domToXhtml(this.getRange().cloneContents());\n        },\n\n        paste: function (html, options) {\n            var command = new kendo.ui.editor.InsertHtmlCommand($.extend({\n                range: this.getRange(),\n                html: html\n            }, options));\n\n            command.editor = this;\n\n            command.exec();\n        },\n\n        exec: function (name, params) {\n            var that = this,\n                range,\n                tool, command = null;\n\n            if (!name) {\n                throw new Error(\"kendoEditor.exec(): `name` parameter cannot be empty\");\n            }\n\n            name = name.toLowerCase();\n\n            // restore selection\n            if (!that.keyboard.isTypingInProgress()) {\n                that.restoreSelection();\n            }\n\n            tool = that.toolbar.toolById(name);\n\n            if (!tool) {\n                // execute non-toolbar tool\n                for (var id in Editor.defaultTools) {\n                    if (id.toLowerCase() == name) {\n                        tool = Editor.defaultTools[id];\n                        break;\n                    }\n                }\n            }\n\n            if (tool) {\n                range = that.getRange();\n\n                if (tool.command) {\n                    command = tool.command(extend({ range: range }, params));\n                }\n\n                that.trigger(\"execute\", { name: name, command: command });\n\n                if (/^(undo|redo)$/i.test(name)) {\n                    that.undoRedoStack[name]();\n                } else if (command) {\n                    if (!command.managesUndoRedo) {\n                        that.undoRedoStack.push(command);\n                    }\n\n                    command.editor = that;\n                    command.exec();\n\n                    if (command.async) {\n                        command.change = proxy(that._selectionChange, that);\n                        return;\n                    }\n                }\n\n                that._selectionChange();\n            }\n        }\n    });\n\n    Editor.defaultTools = {\n        undo: { options: { key: \"Z\", ctrl: true } },\n        redo: { options: { key: \"Y\", ctrl: true } }\n    };\n\n    kendo.ui.plugin(Editor);\n\n    var Tool = Class.extend({\n        init: function(options) {\n            this.options = options;\n        },\n\n        initialize: function(ui, options) {\n            ui.attr({ unselectable: \"on\", title: options.title });\n        },\n\n        command: function (commandArguments) {\n            return new this.options.command(commandArguments);\n        },\n\n        update: $.noop\n    });\n\n    Tool.exec = function (editor, name, value) {\n        editor.exec(name, { value: value });\n    };\n\n    var FormatTool = Tool.extend({\n        init: function (options) {\n            Tool.fn.init.call(this, options);\n        },\n\n        command: function (commandArguments) {\n            var that = this;\n            return new kendo.ui.editor.FormatCommand(extend(commandArguments, {\n                    formatter: that.options.formatter\n                }));\n        },\n\n        update: function(ui, nodes) {\n            var isFormatted = this.options.finder.isFormatted(nodes);\n\n            ui.toggleClass(\"k-state-selected\", isFormatted);\n            ui.attr(\"aria-pressed\", isFormatted);\n        }\n    });\n\n    EditorUtils.registerTool(\"separator\", new Tool({ template: new ToolTemplate({template: EditorUtils.separatorTemplate})}));\n\n    // Exports ================================================================\n\n    var bomFill = browser.msie && browser.version < 9 ? '\\ufeff' : '';\n    var emptyElementContent = '<br class=\"k-br\" />';\n\n    if (browser.msie) {\n        if (browser.version < 10) {\n            emptyElementContent = '\\ufeff';\n        } else if (browser.version < 11) {\n            emptyElementContent = ' '; // allow up/down arrows to focus empty rows\n        }\n    }\n\n    extend(kendo.ui, {\n        editor: {\n            ToolTemplate: ToolTemplate,\n            EditorUtils: EditorUtils,\n            Tool: Tool,\n            FormatTool: FormatTool,\n            _bomFill: bomFill,\n            emptyElementContent: emptyElementContent\n        }\n    });\n\n})(window.jQuery);\n\n(function($) {\n\nvar kendo = window.kendo,\n    map = $.map,\n    extend = $.extend,\n    browser = kendo.support.browser,\n    STYLE = \"style\",\n    FLOAT = \"float\",\n    CSSFLOAT = \"cssFloat\",\n    STYLEFLOAT = \"styleFloat\",\n    CLASS = \"class\",\n    KMARKER = \"k-marker\";\n\nfunction makeMap(items) {\n    var obj = {},\n        i, len;\n\n    for (i = 0, len = items.length; i < len; i++) {\n        obj[items[i]] = true;\n    }\n    return obj;\n}\n\nvar empty = makeMap(\"area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed\".split(\",\")),\n    nonListBlockElements = \"div,p,h1,h2,h3,h4,h5,h6,address,applet,blockquote,button,center,dd,dir,dl,dt,fieldset,form,frameset,hr,iframe,isindex,map,menu,noframes,noscript,object,pre,script,table,tbody,td,tfoot,th,thead,tr,header,article,nav,footer,section,aside,main,figure,figcaption\".split(\",\"),\n    blockElements = nonListBlockElements.concat([\"ul\",\"ol\",\"li\"]),\n    block = makeMap(blockElements),\n    inlineElements = \"span,em,a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,strike,strong,sub,sup,textarea,tt,u,var,data,time,mark,ruby\".split(\",\"),\n    inline = makeMap(inlineElements),\n    fillAttrs = makeMap(\"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected\".split(\",\"));\n\nvar normalize = function (node) {\n    if (node.nodeType == 1) {\n        node.normalize();\n    }\n};\n\nif (browser.msie && browser.version >= 8) {\n    normalize = function(parent) {\n        if (parent.nodeType == 1 && parent.firstChild) {\n            var prev = parent.firstChild,\n                node = prev;\n\n            while (true) {\n                node = node.nextSibling;\n\n                if (!node) {\n                    break;\n                }\n\n                if (node.nodeType == 3 && prev.nodeType == 3) {\n                    node.nodeValue = prev.nodeValue + node.nodeValue;\n                    Dom.remove(prev);\n                }\n\n                prev = node;\n            }\n        }\n    };\n}\n\nvar whitespace = /^\\s+$/,\n    rgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i,\n    bom = /\\ufeff/g,\n    whitespaceOrBom = /^(\\s+|\\ufeff)$/,\n    persistedScrollTop,\n    cssAttributes =\n           (\"color,padding-left,padding-right,padding-top,padding-bottom,\" +\n            \"background-color,background-attachment,background-image,background-position,background-repeat,\" +\n            \"border-top-style,border-top-width,border-top-color,\" +\n            \"border-bottom-style,border-bottom-width,border-bottom-color,\" +\n            \"border-left-style,border-left-width,border-left-color,\" +\n            \"border-right-style,border-right-width,border-right-color,\" +\n            \"font-family,font-size,font-style,font-variant,font-weight,line-height\"\n           ).split(\",\"),\n    htmlRe = /[<>\\&]/g,\n    entityRe = /[\\u00A0-\\u2666<>\\&]/g,\n    entityTable = {\n            34: 'quot', 38: 'amp', 39: 'apos', 60: 'lt', 62: 'gt',\n            160: 'nbsp', 161: 'iexcl', 162: 'cent', 163: 'pound', 164: 'curren',\n            165: 'yen', 166: 'brvbar', 167: 'sect', 168: 'uml', 169: 'copy',\n            170: 'ordf', 171: 'laquo', 172: 'not', 173: 'shy', 174: 'reg',\n            175: 'macr', 176: 'deg', 177: 'plusmn', 178: 'sup2', 179: 'sup3',\n            180: 'acute', 181: 'micro', 182: 'para', 183: 'middot', 184: 'cedil',\n            185: 'sup1', 186: 'ordm', 187: 'raquo', 188: 'frac14', 189: 'frac12',\n            190: 'frac34', 191: 'iquest', 192: 'Agrave', 193: 'Aacute', 194: 'Acirc',\n            195: 'Atilde', 196: 'Auml', 197: 'Aring', 198: 'AElig', 199: 'Ccedil',\n            200: 'Egrave', 201: 'Eacute', 202: 'Ecirc', 203: 'Euml', 204: 'Igrave',\n            205: 'Iacute', 206: 'Icirc', 207: 'Iuml', 208: 'ETH', 209: 'Ntilde',\n            210: 'Ograve', 211: 'Oacute', 212: 'Ocirc', 213: 'Otilde', 214: 'Ouml',\n            215: 'times', 216: 'Oslash', 217: 'Ugrave', 218: 'Uacute', 219: 'Ucirc',\n            220: 'Uuml', 221: 'Yacute', 222: 'THORN', 223: 'szlig', 224: 'agrave',\n            225: 'aacute', 226: 'acirc', 227: 'atilde', 228: 'auml', 229: 'aring',\n            230: 'aelig', 231: 'ccedil', 232: 'egrave', 233: 'eacute', 234: 'ecirc',\n            235: 'euml', 236: 'igrave', 237: 'iacute', 238: 'icirc', 239: 'iuml',\n            240: 'eth', 241: 'ntilde', 242: 'ograve', 243: 'oacute', 244: 'ocirc',\n            245: 'otilde', 246: 'ouml', 247: 'divide', 248: 'oslash', 249: 'ugrave',\n            250: 'uacute', 251: 'ucirc', 252: 'uuml', 253: 'yacute', 254: 'thorn',\n            255: 'yuml', 402: 'fnof', 913: 'Alpha', 914: 'Beta', 915: 'Gamma',\n            916: 'Delta', 917: 'Epsilon', 918: 'Zeta', 919: 'Eta', 920: 'Theta',\n            921: 'Iota', 922: 'Kappa', 923: 'Lambda', 924: 'Mu', 925: 'Nu',\n            926: 'Xi', 927: 'Omicron', 928: 'Pi', 929: 'Rho', 931: 'Sigma',\n            932: 'Tau', 933: 'Upsilon', 934: 'Phi', 935: 'Chi', 936: 'Psi',\n            937: 'Omega', 945: 'alpha', 946: 'beta', 947: 'gamma', 948: 'delta',\n            949: 'epsilon', 950: 'zeta', 951: 'eta', 952: 'theta', 953: 'iota',\n            954: 'kappa', 955: 'lambda', 956: 'mu', 957: 'nu', 958: 'xi',\n            959: 'omicron', 960: 'pi', 961: 'rho', 962: 'sigmaf', 963: 'sigma',\n            964: 'tau', 965: 'upsilon', 966: 'phi', 967: 'chi', 968: 'psi',\n            969: 'omega', 977: 'thetasym', 978: 'upsih', 982: 'piv', 8226: 'bull',\n            8230: 'hellip', 8242: 'prime', 8243: 'Prime', 8254: 'oline', 8260: 'frasl',\n            8472: 'weierp', 8465: 'image', 8476: 'real', 8482: 'trade', 8501: 'alefsym',\n            8592: 'larr', 8593: 'uarr', 8594: 'rarr', 8595: 'darr', 8596: 'harr',\n            8629: 'crarr', 8656: 'lArr', 8657: 'uArr', 8658: 'rArr', 8659: 'dArr',\n            8660: 'hArr', 8704: 'forall', 8706: 'part', 8707: 'exist', 8709: 'empty',\n            8711: 'nabla', 8712: 'isin', 8713: 'notin', 8715: 'ni', 8719: 'prod',\n            8721: 'sum', 8722: 'minus', 8727: 'lowast', 8730: 'radic', 8733: 'prop',\n            8734: 'infin', 8736: 'ang', 8743: 'and', 8744: 'or', 8745: 'cap',\n            8746: 'cup', 8747: 'int', 8756: 'there4', 8764: 'sim', 8773: 'cong',\n            8776: 'asymp', 8800: 'ne', 8801: 'equiv', 8804: 'le', 8805: 'ge',\n            8834: 'sub', 8835: 'sup', 8836: 'nsub', 8838: 'sube', 8839: 'supe',\n            8853: 'oplus', 8855: 'otimes', 8869: 'perp', 8901: 'sdot', 8968: 'lceil',\n            8969: 'rceil', 8970: 'lfloor', 8971: 'rfloor', 9001: 'lang', 9002: 'rang',\n            9674: 'loz', 9824: 'spades', 9827: 'clubs', 9829: 'hearts', 9830: 'diams',\n            338: 'OElig', 339: 'oelig', 352: 'Scaron', 353: 'scaron', 376: 'Yuml',\n            710: 'circ', 732: 'tilde', 8194: 'ensp', 8195: 'emsp', 8201: 'thinsp',\n            8204: 'zwnj', 8205: 'zwj', 8206: 'lrm', 8207: 'rlm', 8211: 'ndash',\n            8212: 'mdash', 8216: 'lsquo', 8217: 'rsquo', 8218: 'sbquo', 8220: 'ldquo',\n            8221: 'rdquo', 8222: 'bdquo', 8224: 'dagger', 8225: 'Dagger', 8240: 'permil',\n            8249: 'lsaquo', 8250: 'rsaquo', 8364: 'euro'\n        };\n\nvar Dom = {\n    block: block,\n    inline: inline,\n\n    findNodeIndex: function(node, skipText) {\n        var i = 0;\n\n        if (!node) {\n            return -1;\n        }\n\n        while (true) {\n            node = node.previousSibling;\n\n            if (!node) {\n                break;\n            }\n\n            if (!(skipText && node.nodeType == 3)) {\n                i++;\n            }\n        }\n\n        return i;\n    },\n\n    isDataNode: function(node) {\n        return node && node.nodeValue !== null && node.data !== null;\n    },\n\n    isAncestorOf: function(parent, node) {\n        try {\n            return !Dom.isDataNode(parent) && ($.contains(parent, Dom.isDataNode(node) ? node.parentNode : node) || node.parentNode == parent);\n        } catch (e) {\n            return false;\n        }\n    },\n\n    isAncestorOrSelf: function(root, node) {\n        return Dom.isAncestorOf(root, node) || root == node;\n    },\n\n    findClosestAncestor: function(root, node) {\n        if (Dom.isAncestorOf(root, node)) {\n            while (node && node.parentNode != root) {\n                node = node.parentNode;\n            }\n        }\n\n        return node;\n    },\n\n    getNodeLength: function(node) {\n        return Dom.isDataNode(node) ? node.length : node.childNodes.length;\n    },\n\n    splitDataNode: function(node, offset) {\n        var newNode = node.cloneNode(false);\n        var denormalizedText = \"\";\n        var iterator = node.nextSibling;\n        var temp;\n\n        while (iterator && iterator.nodeType == 3 && iterator.nodeValue) {\n            denormalizedText += iterator.nodeValue;\n            temp = iterator;\n            iterator = iterator.nextSibling;\n            Dom.remove(temp);\n        }\n\n        node.deleteData(offset, node.length);\n        newNode.deleteData(0, offset);\n        newNode.nodeValue += denormalizedText;\n        Dom.insertAfter(newNode, node);\n    },\n\n    attrEquals: function(node, attributes) {\n        for (var key in attributes) {\n            var value = node[key];\n\n            if (key == FLOAT) {\n                value = node[kendo.support.cssFloat ? CSSFLOAT : STYLEFLOAT];\n            }\n\n            if (typeof value == \"object\") {\n                if (!Dom.attrEquals(value, attributes[key])) {\n                    return false;\n                }\n            } else if (value != attributes[key]) {\n                return false;\n            }\n        }\n\n        return true;\n    },\n\n    blockParentOrBody: function(node) {\n        return Dom.parentOfType(node, blockElements) || node.ownerDocument.body;\n    },\n\n    blockParents: function(nodes) {\n        var blocks = [],\n            i, len;\n\n        for (i = 0, len = nodes.length; i < len; i++) {\n            var block = Dom.parentOfType(nodes[i], Dom.blockElements);\n            if (block && $.inArray(block, blocks) < 0) {\n                blocks.push(block);\n            }\n        }\n\n        return blocks;\n    },\n\n    windowFromDocument: function(document) {\n        return document.defaultView || document.parentWindow;\n    },\n\n    normalize: normalize,\n    blockElements: blockElements,\n    nonListBlockElements: nonListBlockElements,\n    inlineElements: inlineElements,\n    empty: empty,\n    fillAttrs: fillAttrs,\n\n    toHex: function (color) {\n        var matches = rgb.exec(color);\n\n        if (!matches) {\n            return color;\n        }\n\n        return \"#\" + map(matches.slice(1), function (x) {\n            x = parseInt(x, 10).toString(16);\n            return x.length > 1 ? x : \"0\" + x;\n        }).join(\"\");\n    },\n\n    encode: function (value, options) {\n        var encodableChars = (!options || options.entities) ? entityRe : htmlRe;\n        return value.replace(encodableChars, function(c) {\n            var charCode = c.charCodeAt(0);\n            var entity = entityTable[charCode];\n            return entity ? '&'+entity+';' : c;\n        });\n    },\n\n    stripBom: function(text) {\n        return (text || \"\").replace(bom, \"\");\n    },\n\n    insignificant: function(node) {\n        var attr = node.attributes;\n\n        return node.className == \"k-marker\" || (Dom.is(node, 'br') && (node.className == \"k-br\" || attr._moz_dirty || attr._moz_editor_bogus_node));\n    },\n\n    emptyNode: function(node) {\n        var significantNodes = $.grep(node.childNodes, function(child) {\n            if (Dom.is(child, 'br')) {\n                return false;\n            } else if (Dom.insignificant(child)) {\n                return false;\n            } else if (child.nodeType == 3 && whitespaceOrBom.test(child.nodeValue)) {\n                return false;\n            } else if (Dom.is(child, 'p') && Dom.emptyNode(child)) {\n                return false;\n            }\n\n            return true;\n        });\n\n        return !significantNodes.length;\n    },\n\n    name: function (node) {\n        return node.nodeName.toLowerCase();\n    },\n\n    significantChildNodes: function(node) {\n        return $.grep(node.childNodes, function(child) {\n            return child.nodeType != 3 || !Dom.isWhitespace(child);\n        });\n    },\n\n    lastTextNode: function(node) {\n        var result = null;\n\n        if (node.nodeType == 3) {\n            return node;\n        }\n\n        for (var child = node.lastChild; child; child = child.previousSibling) {\n            result = Dom.lastTextNode(child);\n\n            if (result) {\n                return result;\n            }\n        }\n\n        return result;\n    },\n\n    is: function (node, nodeName) {\n        return Dom.name(node) == nodeName;\n    },\n\n    isMarker: function(node) {\n        return node.className == KMARKER;\n    },\n\n    isWhitespace: function(node) {\n        return whitespace.test(node.nodeValue);\n    },\n\n    isBlock: function(node) {\n        return block[Dom.name(node)];\n    },\n\n    isEmpty: function(node) {\n        return empty[Dom.name(node)];\n    },\n\n    isInline: function(node) {\n        return inline[Dom.name(node)];\n    },\n\n    scrollContainer: function(doc) {\n        var wnd = Dom.windowFromDocument(doc),\n            scrollContainer = (wnd.contentWindow || wnd).document || wnd.ownerDocument || wnd;\n\n        if (kendo.support.browser.webkit || scrollContainer.compatMode == 'BackCompat') {\n            scrollContainer = scrollContainer.body;\n        } else {\n            scrollContainer = scrollContainer.documentElement;\n        }\n\n        return scrollContainer;\n    },\n\n    scrollTo: function (node) {\n        var element = $(Dom.isDataNode(node) ? node.parentNode : node),\n            wnd = Dom.windowFromDocument(node.ownerDocument),\n            windowHeight = wnd.innerHeight,\n            elementTop, elementHeight,\n            scrollContainer = Dom.scrollContainer(node.ownerDocument);\n\n        if (Dom.name(element[0]) == \"br\") {\n            element = element.parent();\n        }\n\n        elementTop = element.offset().top;\n        elementHeight = element[0].offsetHeight;\n\n        if (Dom.is(element[0], \"p\")) {\n            elementHeight = parseInt(element.css(\"line-height\"), 10) ||\n                            Math.ceil(1.2 * parseInt(element.css(\"font-size\"), 10)) ||\n                            15;\n        }\n\n        if (elementHeight + elementTop > scrollContainer.scrollTop + windowHeight) {\n            scrollContainer.scrollTop = elementHeight + elementTop - windowHeight;\n        }\n    },\n\n    persistScrollTop: function(doc) {\n        persistedScrollTop = Dom.scrollContainer(doc).scrollTop;\n    },\n\n    restoreScrollTop: function(doc) {\n        Dom.scrollContainer(doc).scrollTop = persistedScrollTop;\n    },\n\n    insertAt: function (parent, newElement, position) {\n        parent.insertBefore(newElement, parent.childNodes[position] || null);\n    },\n\n    insertBefore: function (newElement, referenceElement) {\n        if (referenceElement.parentNode) {\n            return referenceElement.parentNode.insertBefore(newElement, referenceElement);\n        } else {\n            return referenceElement;\n        }\n    },\n\n    insertAfter: function (newElement, referenceElement) {\n        return referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);\n    },\n\n    remove: function (node) {\n        node.parentNode.removeChild(node);\n    },\n\n    removeTextSiblings: function(node) {\n        var parentNode = node.parentNode;\n\n        while (node.nextSibling && node.nextSibling.nodeType == 3) {\n            parentNode.removeChild(node.nextSibling);\n        }\n\n        while (node.previousSibling && node.previousSibling.nodeType == 3) {\n            parentNode.removeChild(node.previousSibling);\n        }\n    },\n\n    trim: function (parent) {\n        for (var i = parent.childNodes.length - 1; i >= 0; i--) {\n            var node = parent.childNodes[i];\n            if (Dom.isDataNode(node)) {\n                if (!Dom.stripBom(node.nodeValue).length) {\n                    Dom.remove(node);\n                }\n\n                if (Dom.isWhitespace(node)) {\n                    Dom.insertBefore(node, parent);\n                }\n            } else if (node.className != KMARKER) {\n                Dom.trim(node);\n                if (!node.childNodes.length && !Dom.isEmpty(node)) {\n                    Dom.remove(node);\n                }\n            }\n        }\n\n        return parent;\n    },\n\n    closest: function(node, tag) {\n        while (node && Dom.name(node) != tag) {\n            node = node.parentNode;\n        }\n\n        return node;\n    },\n\n    sibling: function(node, direction) {\n        do {\n            node = node[direction];\n        } while (node && node.nodeType != 1);\n\n        return node;\n    },\n\n    next: function(node) {\n        return Dom.sibling(node, \"nextSibling\");\n    },\n\n    prev: function(node) {\n        return Dom.sibling(node, \"previousSibling\");\n    },\n\n    parentOfType: function (node, tags) {\n        do {\n            node = node.parentNode;\n        } while (node && !(Dom.ofType(node, tags)));\n\n        return node;\n    },\n\n    ofType: function (node, tags) {\n        return $.inArray(Dom.name(node), tags) >= 0;\n    },\n\n    changeTag: function (referenceElement, tagName, skipAttributes) {\n        var newElement = Dom.create(referenceElement.ownerDocument, tagName),\n            attributes = referenceElement.attributes,\n            i, len, name, value, attribute;\n\n        if (!skipAttributes) {\n            for (i = 0, len = attributes.length; i < len; i++) {\n                attribute = attributes[i];\n                if (attribute.specified) {\n                    // IE < 8 cannot set class or style via setAttribute\n                    name = attribute.nodeName;\n                    value = attribute.nodeValue;\n                    if (name == CLASS) {\n                        newElement.className = value;\n                    } else if (name == STYLE) {\n                        newElement.style.cssText = referenceElement.style.cssText;\n                    } else {\n                        newElement.setAttribute(name, value);\n                    }\n                }\n            }\n        }\n\n        while (referenceElement.firstChild) {\n            newElement.appendChild(referenceElement.firstChild);\n        }\n\n        Dom.insertBefore(newElement, referenceElement);\n        Dom.remove(referenceElement);\n        return newElement;\n    },\n\n    editableParent: function(node) {\n        while (node && (node.nodeType == 3 || node.contentEditable !== 'true')) {\n            node = node.parentNode;\n        }\n\n        return node;\n    },\n\n    wrap: function (node, wrapper) {\n        Dom.insertBefore(wrapper, node);\n        wrapper.appendChild(node);\n        return wrapper;\n    },\n\n    unwrap: function (node) {\n        var parent = node.parentNode;\n        while (node.firstChild) {\n            parent.insertBefore(node.firstChild, node);\n        }\n\n        parent.removeChild(node);\n    },\n\n    create: function (document, tagName, attributes) {\n        return Dom.attr(document.createElement(tagName), attributes);\n    },\n\n    attr: function (element, attributes) {\n        attributes = extend({}, attributes);\n\n        if (attributes && STYLE in attributes) {\n            Dom.style(element, attributes.style);\n            delete attributes.style;\n        }\n\n        for (var attr in attributes) {\n            if (attributes[attr] === null) {\n                element.removeAttribute(attr);\n                delete attributes[attr];\n            } else if (attr == \"className\") {\n                element[attr] = attributes[attr];\n            }\n        }\n\n        return extend(element, attributes);\n    },\n\n    style: function (node, value) {\n        $(node).css(value || {});\n    },\n\n    unstyle: function (node, value) {\n        for (var key in value) {\n            if (key == FLOAT) {\n                key = kendo.support.cssFloat ? CSSFLOAT : STYLEFLOAT;\n            }\n\n            node.style[key] = \"\";\n        }\n\n        if (node.style.cssText === \"\") {\n            node.removeAttribute(STYLE);\n        }\n    },\n\n    inlineStyle: function(body, name, attributes) {\n        var span = $(Dom.create(body.ownerDocument, name, attributes)),\n            style;\n\n        body.appendChild(span[0]);\n\n        style = map(cssAttributes, function(value) {\n            if (browser.msie && value == \"line-height\" && span.css(value) == \"1px\") {\n                return \"line-height:1.5\";\n            } else {\n                return value + \":\" + span.css(value);\n            }\n        }).join(\";\");\n\n        span.remove();\n\n        return style;\n    },\n\n    getEffectiveBackground: function(element) {\n        var backgroundStyle = element.css(\"background-color\");\n\n        if (backgroundStyle.indexOf(\"rgba(0, 0, 0, 0\") < 0 && backgroundStyle !== \"transparent\") {\n            return backgroundStyle;\n        } else if (element[0].tagName.toLowerCase() === \"html\") {\n            return \"Window\";\n        } else {\n            return Dom.getEffectiveBackground(element.parent());\n        }\n    },\n\n    removeClass: function(node, classNames) {\n        var className = \" \" + node.className + \" \",\n            classes = classNames.split(\" \"),\n            i, len;\n\n        for (i = 0, len = classes.length; i < len; i++) {\n            className = className.replace(\" \" + classes[i] + \" \", \" \");\n        }\n\n        className = $.trim(className);\n\n        if (className.length) {\n            node.className = className;\n        } else {\n            node.removeAttribute(CLASS);\n        }\n    },\n\n    commonAncestor: function () {\n        var count = arguments.length,\n            paths = [],\n            minPathLength = Infinity,\n            output = null,\n            i, ancestors, node, first, j;\n\n        if (!count) {\n            return null;\n        }\n\n        if (count == 1) {\n            return arguments[0];\n        }\n\n        for (i = 0; i < count; i++) {\n            ancestors = [];\n            node = arguments[i];\n            while (node) {\n                ancestors.push(node);\n                node = node.parentNode;\n            }\n            paths.push(ancestors.reverse());\n            minPathLength = Math.min(minPathLength, ancestors.length);\n        }\n\n        if (count == 1) {\n            return paths[0][0];\n        }\n\n        for (i = 0; i < minPathLength; i++) {\n            first = paths[0][i];\n\n            for (j = 1; j < count; j++) {\n                if (first != paths[j][i]) {\n                    return output;\n                }\n            }\n\n            output = first;\n        }\n        return output;\n    },\n\n    closestSplittableParent: function(nodes) {\n        var result;\n\n        if (nodes.length == 1) {\n            result = Dom.parentOfType(nodes[0], [\"ul\",\"ol\"]);\n        } else {\n            result = Dom.commonAncestor.apply(null, nodes);\n        }\n\n        if (!result) {\n            result = Dom.parentOfType(nodes[0], [\"p\", \"td\"]) || nodes[0].ownerDocument.body;\n        }\n\n        if (Dom.isInline(result)) {\n            result = Dom.blockParentOrBody(result);\n        }\n\n        var editableParents = map(nodes, Dom.editableParent);\n        var editableAncestor = Dom.commonAncestor(editableParents)[0];\n\n        if ($.contains(result, editableAncestor)) {\n            result = editableAncestor;\n        }\n\n        return result;\n    },\n\n    closestEditable: function(node, types) {\n        var closest = Dom.parentOfType(node, types);\n        var editable = Dom.editableParent(node);\n\n        if (closest && editable && $.contains(closest, editable)) {\n            closest = editable;\n        } else if (!closest && editable) {\n            closest = editable;\n        }\n\n        return closest;\n    },\n\n    closestEditableOfType: function(node, types) {\n        var editable = Dom.closestEditable(node, types);\n\n        if (editable && Dom.ofType(editable, types)) {\n            return editable;\n        }\n    },\n\n    filter: function(tagName, nodes, invert) {\n        var i = 0;\n        var len = nodes.length;\n        var result = [];\n        var name;\n\n        for (; i < len; i++) {\n            name = Dom.name(nodes[i]);\n            if ((!invert && name == tagName) || (invert && name != tagName)) {\n                result.push(nodes[i]);\n            }\n        }\n\n        return result;\n    },\n\n    ensureTrailingBreaks: function(node) {\n        var elements = $(node).find(\"p,td,th\");\n        var length = elements.length;\n        var i = 0;\n\n        if (length) {\n            for (; i < length; i++) {\n                Dom.ensureTrailingBreak(elements[i]);\n            }\n        } else {\n            Dom.ensureTrailingBreak(node);\n        }\n    },\n\n    ensureTrailingBreak: function(node) {\n        var lastChild = node.lastChild;\n        var name = lastChild && Dom.name(lastChild);\n        var br;\n\n        if (!name ||\n            (name != \"br\" && name != \"img\") ||\n            (name == \"br\" && lastChild.className != \"k-br\")) {\n            br = node.ownerDocument.createElement(\"br\");\n            br.className = \"k-br\";\n            node.appendChild(br);\n        }\n    }\n};\n\nkendo.ui.editor.Dom = Dom;\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\n// Imports ================================================================\nvar kendo = window.kendo;\nvar Editor = kendo.ui.editor;\nvar dom = Editor.Dom;\nvar extend = $.extend;\n\nvar fontSizeMappings = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(',');\nvar quoteRe = /\"/g; //\"\nvar brRe = /<br[^>]*>/i;\nvar pixelRe = /^\\d+(\\.\\d*)?(px)?$/i;\nvar emptyPRe = /<p><\\/p>/i;\nvar cssDeclaration = /([\\w|\\-]+)\\s*:\\s*([^;]+);?/i;\nvar sizzleAttr = /^sizzle-\\d+/i;\nvar scriptAttr = /^k-script-/i;\nvar onerrorRe = /\\s*onerror\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/i;\n\nvar div = document.createElement(\"div\");\ndiv.innerHTML = \" <hr>\";\nvar supportsLeadingWhitespace = div.firstChild.nodeType === 3;\ndiv = null;\n\nvar Serializer = {\n    toEditableHtml: function(html) {\n        var br = '<br class=\"k-br\">';\n\n        html = html || \"\";\n\n        return html\n            .replace(/<!\\[CDATA\\[(.*)?\\]\\]>/g, \"<!--[CDATA[$1]]-->\")\n            .replace(/<script([^>]*)>(.*)?<\\/script>/ig, \"<k:script$1>$2<\\/k:script>\")\n            .replace(/<img([^>]*)>/ig, function(match) {\n                return match.replace(onerrorRe, \"\");\n            })\n            .replace(/(<\\/?img[^>]*>)[\\r\\n\\v\\f\\t ]+/ig, \"$1\")\n            .replace(/^<(table|blockquote)/i, br + '<$1')\n            .replace(/<\\/(table|blockquote)>$/i, '</$1>' + br);\n    },\n\n    _fillEmptyElements: function(body) {\n        // fills empty elements to allow them to be focused\n        $(body).find(\"p\").each(function() {\n            var p = $(this);\n            if (/^\\s*$/g.test(p.text()) && !p.find(\"img,input\").length) {\n                var node = this;\n                while (node.firstChild && node.firstChild.nodeType != 3) {\n                    node = node.firstChild;\n                }\n\n                if (node.nodeType == 1 && !dom.empty[dom.name(node)]) {\n                    node.innerHTML = kendo.ui.editor.emptyElementContent;\n                }\n            }\n        });\n    },\n\n    _removeSystemElements: function(body) {\n        // removes persisted system elements\n        $(\".k-paste-container\", body).remove();\n    },\n\n    _resetOrderedLists: function(root){\n        // fix for IE9 OL bug -- https://connect.microsoft.com/IE/feedback/details/657695/ordered-list-numbering-changes-from-correct-to-0-0\n        var ols = root.getElementsByTagName(\"ol\"), i, ol, originalStart;\n\n        for (i = 0; i < ols.length; i++) {\n            ol = ols[i];\n            originalStart = ol.getAttribute(\"start\");\n\n            ol.setAttribute(\"start\", 1);\n\n            if (originalStart) {\n                ol.setAttribute(\"start\", originalStart);\n            } else {\n                ol.removeAttribute(originalStart);\n            }\n        }\n    },\n\n    _preventScriptExecution: function(root) {\n        $(root).find(\"*\").each(function() {\n            var attributes = this.attributes;\n            var attribute, i, l, name;\n\n            for (i = 0, l = attributes.length; i < l; i++) {\n                attribute = attributes[i];\n                name = attribute.nodeName;\n\n                if (attribute.specified && /^on/i.test(name)) {\n                    this.setAttribute(\"k-script-\" + name, attribute.value);\n                    this.removeAttribute(name);\n                }\n            }\n        });\n    },\n\n    htmlToDom: function(html, root) {\n        var browser = kendo.support.browser;\n        var msie = browser.msie;\n        var legacyIE = msie && browser.version < 9;\n\n        html = Serializer.toEditableHtml(html);\n\n        if (legacyIE) {\n            // Internet Explorer removes comments from the beginning of the html\n            html = \"<br/>\" + html;\n\n            var originalSrc = \"originalsrc\",\n                originalHref = \"originalhref\";\n\n            // IE < 8 makes href and src attributes absolute\n            html = html.replace(/href\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/, originalHref + '=\"$1\"');\n            html = html.replace(/src\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/, originalSrc + '=\"$1\"');\n\n        }\n\n        root.innerHTML = html;\n\n        if (legacyIE) {\n            dom.remove(root.firstChild);\n\n            $(root).find(\"k\\\\:script,script,link,img,a\").each(function () {\n                var node = this;\n                if (node[originalHref]) {\n                    node.setAttribute(\"href\", node[originalHref]);\n                    node.removeAttribute(originalHref);\n                }\n                if (node[originalSrc]) {\n                    node.setAttribute(\"src\", node[originalSrc]);\n                    node.removeAttribute(originalSrc);\n                }\n            });\n        } else if (msie) {\n            // having unicode characters creates denormalized DOM tree in IE9\n            dom.normalize(root);\n\n            Serializer._resetOrderedLists(root);\n        }\n\n        Serializer._preventScriptExecution(root);\n\n        Serializer._fillEmptyElements(root);\n\n        Serializer._removeSystemElements(root);\n\n        // add k-table class to all tables\n        $(\"table\", root).addClass(\"k-table\");\n\n        return root;\n    },\n\n    domToXhtml: function(root, options) {\n        var result = [];\n        var tagMap = {\n            'k:script': {\n                start: function (node) { result.push('<script'); attr(node); result.push('>'); },\n                end: function () { result.push('</script>'); },\n                skipEncoding: true\n            },\n            b: {\n                start: function () { result.push('<strong>'); },\n                end: function () { result.push('</strong>'); }\n            },\n            i: {\n                start: function () { result.push('<em>'); },\n                end: function () { result.push('</em>'); }\n            },\n            u: {\n                start: function () { result.push('<span style=\"text-decoration:underline;\">'); },\n                end: function () { result.push('</span>'); }\n            },\n            iframe: {\n                start: function (node) { result.push('<iframe'); attr(node); result.push('>'); },\n                end: function () { result.push('</iframe>'); }\n            },\n            font: {\n                start: function (node) {\n                    result.push('<span style=\"');\n\n                    var color = node.getAttribute('color');\n                    var size = fontSizeMappings[node.getAttribute('size')];\n                    var face = node.getAttribute('face');\n\n                    if (color) {\n                        result.push('color:');\n                        result.push(dom.toHex(color));\n                        result.push(';');\n                    }\n\n                    if (face) {\n                        result.push('font-face:');\n                        result.push(face);\n                        result.push(';');\n                    }\n\n                    if (size) {\n                        result.push('font-size:');\n                        result.push(size);\n                        result.push(';');\n                    }\n\n                    result.push('\">');\n                },\n                end: function () {\n                    result.push('</span>');\n                }\n            }\n        };\n\n        tagMap.script = tagMap[\"k:script\"];\n\n        options = options || {};\n\n        function styleAttr(cssText) {\n            // In IE < 8 the style attribute does not return proper nodeValue\n            var trim = $.trim;\n            var css = trim(cssText).split(';');\n            var i, length = css.length;\n            var match;\n            var property, value;\n\n            for (i = 0, length = css.length; i < length; i++) {\n                if (!css[i].length) {\n                    continue;\n                }\n\n                match = cssDeclaration.exec(css[i]);\n\n                // IE8 does not provide a value for 'inherit'\n                if (!match) {\n                    continue;\n                }\n\n                property = trim(match[1].toLowerCase());\n                value = trim(match[2]);\n\n                if (property == \"font-size-adjust\" || property == \"font-stretch\") {\n                    continue;\n                }\n\n                if (property.indexOf('color') >= 0) {\n                    value = dom.toHex(value);\n                } else if (property.indexOf('font') >= 0) {\n                    value = value.replace(quoteRe, \"'\");\n                } else if (/\\burl\\(/g.test(value)) {\n                    value = value.replace(quoteRe, \"\");\n                }\n\n                result.push(property);\n                result.push(':');\n                result.push(value);\n                result.push(';');\n            }\n        }\n\n        function attr(node) {\n            var specifiedAttributes = [];\n            var attributes = node.attributes;\n            var attribute, i, l;\n            var name, value, specified;\n\n            if (dom.is(node, 'img')) {\n                var width = node.style.width,\n                    height = node.style.height,\n                    $node = $(node);\n\n                if (width && pixelRe.test(width)) {\n                    $node.attr('width', parseInt(width, 10));\n                    dom.unstyle(node, { width: undefined });\n                }\n\n                if (height && pixelRe.test(height)) {\n                    $node.attr('height', parseInt(height, 10));\n                    dom.unstyle(node, { height: undefined });\n                }\n            }\n\n            for (i = 0, l = attributes.length; i < l; i++) {\n                attribute = attributes[i];\n\n                name = attribute.nodeName;\n                value = attribute.value;\n                specified = attribute.specified;\n\n                // In IE < 8 the 'value' attribute is not returned as 'specified'. The same goes for type=\"text\"\n                if (name == 'value' && 'value' in node && node.value) {\n                    specified = true;\n                } else if (name == 'type' && value == 'text') {\n                    specified = true;\n                } else if (name == \"class\" && !value) {\n                    specified = false;\n                } else if (sizzleAttr.test(name)) {\n                    specified = false;\n                } else if (name == 'complete') {\n                    specified = false;\n                } else if (name == 'altHtml') {\n                    specified = false;\n                } else if (name == 'start' && (dom.is(node, \"ul\") || dom.is(node, \"ol\"))) {\n                    specified = false;\n                } else if (name.indexOf('_moz') >= 0) {\n                    specified = false;\n                } else if (scriptAttr.test(name)) {\n                    specified = !!options.scripts;\n                }\n\n                if (specified) {\n                    specifiedAttributes.push(attribute);\n                }\n            }\n\n            if (!specifiedAttributes.length) {\n                return;\n            }\n\n            specifiedAttributes.sort(function (a, b) {\n                return a.nodeName > b.nodeName ? 1 : a.nodeName < b.nodeName ? -1 : 0;\n            });\n\n            for (i = 0, l = specifiedAttributes.length; i < l; i++) {\n                attribute = specifiedAttributes[i];\n                name = attribute.nodeName;\n                value = attribute.value;\n\n                if (name == \"class\" && value == \"k-table\") {\n                    continue;\n                }\n\n                name = name.replace(scriptAttr, \"\");\n\n                result.push(' ');\n                result.push(name);\n                result.push('=\"');\n\n                if (name == 'style') {\n                    styleAttr(value || node.style.cssText);\n                } else if (name == 'src' || name == 'href') {\n                    result.push(kendo.htmlEncode(node.getAttribute(name, 2)));\n                } else {\n                    result.push(dom.fillAttrs[name] ? name : value);\n                }\n\n                result.push('\"');\n            }\n        }\n\n        function children(node, skip, skipEncoding) {\n            for (var childNode = node.firstChild; childNode; childNode = childNode.nextSibling) {\n                child(childNode, skip, skipEncoding);\n            }\n        }\n\n        function text(node) {\n            return node.nodeValue.replace(/\\ufeff/g, \"\");\n        }\n\n        function child(node, skip, skipEncoding) {\n            var nodeType = node.nodeType,\n                tagName, mapper,\n                parent, value, previous;\n\n            if (nodeType == 1) {\n                tagName = dom.name(node);\n\n                if (!tagName || dom.insignificant(node)) {\n                    return;\n                }\n\n                if (dom.isInline(node) && node.childNodes.length == 1 && node.firstChild.nodeType == 3&&  !text(node.firstChild)) {\n                    return;\n                }\n\n                if (!options.scripts && (tagName == \"script\" || tagName == \"k:script\")) {\n                    return;\n                }\n\n                mapper = tagMap[tagName];\n\n                if (mapper) {\n                    mapper.start(node);\n                    children(node, false, mapper.skipEncoding);\n                    mapper.end(node);\n                    return;\n                }\n\n                result.push('<');\n                result.push(tagName);\n\n                attr(node);\n\n                if (dom.empty[tagName]) {\n                    result.push(' />');\n                } else {\n                    result.push('>');\n                    children(node, skip || dom.is(node, 'pre'));\n                    result.push('</');\n                    result.push(tagName);\n                    result.push('>');\n                }\n            } else if (nodeType == 3) {\n                value = text(node);\n\n                if (!skip && supportsLeadingWhitespace) {\n                    parent = node.parentNode;\n                    previous = node.previousSibling;\n\n                    if (!previous) {\n                         previous = (dom.isInline(parent) ? parent : node).previousSibling;\n                    }\n\n                    if (!previous || previous.innerHTML === \"\" || dom.isBlock(previous)) {\n                        value = value.replace(/^[\\r\\n\\v\\f\\t ]+/, '');\n                    }\n\n                    value = value.replace(/ +/, ' ');\n                }\n\n                result.push(skipEncoding ? value : dom.encode(value, options));\n\n            } else if (nodeType == 4) {\n                result.push('<![CDATA[');\n                result.push(node.data);\n                result.push(']]>');\n            } else if (nodeType == 8) {\n                if (node.data.indexOf('[CDATA[') < 0) {\n                    result.push('<!--');\n                    result.push(node.data);\n                    result.push('-->');\n                } else {\n                    result.push('<!');\n                    result.push(node.data);\n                    result.push('>');\n                }\n            }\n        }\n\n        function textOnly(root) {\n            var childrenCount = root.childNodes.length;\n            var textChild = childrenCount && root.firstChild.nodeType == 3;\n\n            return textChild && (childrenCount == 1 || (childrenCount == 2 && dom.insignificant(root.lastChild)));\n        }\n\n        if (textOnly(root)) {\n            return dom.encode(text(root.firstChild).replace(/[\\r\\n\\v\\f\\t ]+/, ' '), options);\n        }\n\n        children(root);\n\n        result = result.join('');\n\n        // if serialized dom contains only whitespace elements, consider it empty (required field validation)\n        if (result.replace(brRe, \"\").replace(emptyPRe, \"\") === \"\") {\n            return \"\";\n        }\n\n        return result;\n    }\n\n};\n\nextend(Editor, {\n    Serializer: Serializer\n});\n\n})(window.kendo.jQuery);\n\n(function($) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        extend = $.extend,\n        Editor = kendo.ui.editor,\n        browser = kendo.support.browser,\n        dom = Editor.Dom,\n        findNodeIndex = dom.findNodeIndex,\n        isDataNode = dom.isDataNode,\n        findClosestAncestor = dom.findClosestAncestor,\n        getNodeLength = dom.getNodeLength,\n        normalize = dom.normalize;\n\nvar SelectionUtils = {\n    selectionFromWindow: function(window) {\n        if (!(\"getSelection\" in window)) {\n            return new W3CSelection(window.document);\n        }\n\n        return window.getSelection();\n    },\n\n    selectionFromRange: function(range) {\n        var rangeDocument = RangeUtils.documentFromRange(range);\n        return SelectionUtils.selectionFromDocument(rangeDocument);\n    },\n\n    selectionFromDocument: function(document) {\n        return SelectionUtils.selectionFromWindow(dom.windowFromDocument(document));\n    }\n};\n\nvar W3CRange = Class.extend({\n    init: function(doc) {\n        $.extend(this, {\n            ownerDocument: doc, /* not part of the spec; used when cloning ranges, traversing the dom and creating fragments */\n            startContainer: doc,\n            endContainer: doc,\n            commonAncestorContainer: doc,\n            startOffset: 0,\n            endOffset: 0,\n            collapsed: true\n        });\n    },\n\n    // Positioning Methods\n    setStart: function (node, offset) {\n        this.startContainer = node;\n        this.startOffset = offset;\n        updateRangeProperties(this);\n        fixIvalidRange(this, true);\n    },\n\n    setEnd: function (node, offset) {\n        this.endContainer = node;\n        this.endOffset = offset;\n        updateRangeProperties(this);\n        fixIvalidRange(this, false);\n    },\n\n    setStartBefore: function (node) {\n        this.setStart(node.parentNode, findNodeIndex(node));\n    },\n\n    setStartAfter: function (node) {\n        this.setStart(node.parentNode, findNodeIndex(node) + 1);\n    },\n\n    setEndBefore: function (node) {\n        this.setEnd(node.parentNode, findNodeIndex(node));\n    },\n\n    setEndAfter: function (node) {\n        this.setEnd(node.parentNode, findNodeIndex(node) + 1);\n    },\n\n    selectNode: function (node) {\n        this.setStartBefore(node);\n        this.setEndAfter(node);\n    },\n\n    selectNodeContents: function (node) {\n        this.setStart(node, 0);\n        this.setEnd(node, node[node.nodeType === 1 ? 'childNodes' : 'nodeValue'].length);\n    },\n\n    collapse: function (toStart) {\n        var that = this;\n\n        if (toStart) {\n            that.setEnd(that.startContainer, that.startOffset);\n        } else {\n            that.setStart(that.endContainer, that.endOffset);\n        }\n    },\n\n    // Editing Methods\n\n    deleteContents: function () {\n        var that = this,\n            range = that.cloneRange();\n\n        if (that.startContainer != that.commonAncestorContainer) {\n            that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n        }\n\n        that.collapse(true);\n\n        (function deleteSubtree(iterator) {\n            while (iterator.next()) {\n                if (iterator.hasPartialSubtree()) {\n                    deleteSubtree(iterator.getSubtreeIterator());\n                } else {\n                    iterator.remove();\n                }\n            }\n        })(new RangeIterator(range));\n    },\n\n    cloneContents: function () {\n        // clone subtree\n        var document = RangeUtils.documentFromRange(this);\n        return (function cloneSubtree(iterator) {\n                var node, frag = document.createDocumentFragment();\n\n                while (node = iterator.next()) {\n                    node = node.cloneNode(!iterator.hasPartialSubtree());\n\n                    if (iterator.hasPartialSubtree()) {\n                        node.appendChild(cloneSubtree(iterator.getSubtreeIterator()));\n                    }\n\n                    frag.appendChild(node);\n                }\n\n                return frag;\n        })(new RangeIterator(this));\n    },\n\n    extractContents: function () {\n        var that = this,\n            range = that.cloneRange();\n\n        if (that.startContainer != that.commonAncestorContainer) {\n            that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n        }\n\n        that.collapse(true);\n\n        var document = RangeUtils.documentFromRange(that);\n\n        return (function extractSubtree(iterator) {\n            var node, frag = document.createDocumentFragment();\n\n            while (node = iterator.next()) {\n                if (iterator.hasPartialSubtree()) {\n                    node = node.cloneNode(false);\n                    node.appendChild(extractSubtree(iterator.getSubtreeIterator()));\n                } else {\n                    iterator.remove(that.originalRange);\n                }\n\n                frag.appendChild(node);\n            }\n\n            return frag;\n        })(new RangeIterator(range));\n    },\n\n    insertNode: function (node) {\n        var that = this;\n\n        if (isDataNode(that.startContainer)) {\n            if (that.startOffset != that.startContainer.nodeValue.length) {\n                dom.splitDataNode(that.startContainer, that.startOffset);\n            }\n\n            dom.insertAfter(node, that.startContainer);\n        } else {\n            dom.insertAt(that.startContainer, node, that.startOffset);\n        }\n\n        that.setStart(that.startContainer, that.startOffset);\n    },\n\n    cloneRange: function () {\n        // fast copy\n        return $.extend(new W3CRange(this.ownerDocument), {\n            startContainer: this.startContainer,\n            endContainer: this.endContainer,\n            commonAncestorContainer: this.commonAncestorContainer,\n            startOffset: this.startOffset,\n            endOffset: this.endOffset,\n            collapsed: this.collapsed,\n\n            originalRange: this /* not part of the spec; used to update the original range when calling extractContents() on clones */\n        });\n    },\n\n    // used for debug purposes\n    toString: function () {\n        var startNodeName = this.startContainer.nodeName,\n            endNodeName = this.endContainer.nodeName;\n\n        return [startNodeName == \"#text\" ? this.startContainer.nodeValue : startNodeName, '(', this.startOffset, ') : ',\n                endNodeName == \"#text\" ? this.endContainer.nodeValue : endNodeName, '(', this.endOffset, ')'].join('');\n    }\n});\n\n/* can be used in Range.compareBoundaryPoints if we need it one day */\nfunction compareBoundaries(start, end, startOffset, endOffset) {\n    if (start == end) {\n        return endOffset - startOffset;\n    }\n\n    // end is child of start\n    var container = end;\n    while (container && container.parentNode != start) {\n        container = container.parentNode;\n    }\n\n    if (container) {\n        return findNodeIndex(container) - startOffset;\n    }\n\n    // start is child of end\n    container = start;\n    while (container && container.parentNode != end) {\n        container = container.parentNode;\n    }\n\n    if (container) {\n        return endOffset - findNodeIndex(container) - 1;\n    }\n\n    // deep traversal\n    var root = dom.commonAncestor(start, end);\n    var startAncestor = start;\n\n    while (startAncestor && startAncestor.parentNode != root) {\n        startAncestor = startAncestor.parentNode;\n    }\n\n    if (!startAncestor) {\n        startAncestor = root;\n    }\n\n    var endAncestor = end;\n    while (endAncestor && endAncestor.parentNode != root) {\n        endAncestor = endAncestor.parentNode;\n    }\n\n    if (!endAncestor) {\n        endAncestor = root;\n    }\n\n    if (startAncestor == endAncestor) {\n        return 0;\n    }\n\n    return findNodeIndex(endAncestor) - findNodeIndex(startAncestor);\n}\n\nfunction fixIvalidRange(range, toStart) {\n    function isInvalidRange(range) {\n        try {\n            return compareBoundaries(range.startContainer, range.endContainer, range.startOffset, range.endOffset) < 0;\n        } catch (ex) {\n            // range was initially invalid (e.g. when cloned from invalid range) - it must be fixed\n            return true;\n        }\n    }\n\n    if (isInvalidRange(range)) {\n        if (toStart) {\n            range.commonAncestorContainer = range.endContainer = range.startContainer;\n            range.endOffset = range.startOffset;\n        } else {\n            range.commonAncestorContainer = range.startContainer = range.endContainer;\n            range.startOffset = range.endOffset;\n        }\n\n        range.collapsed = true;\n    }\n}\n\nfunction updateRangeProperties(range) {\n    range.collapsed = range.startContainer == range.endContainer && range.startOffset == range.endOffset;\n\n    var node = range.startContainer;\n    while (node && node != range.endContainer && !dom.isAncestorOf(node, range.endContainer)) {\n        node = node.parentNode;\n    }\n\n    range.commonAncestorContainer = node;\n}\n\nvar RangeIterator = Class.extend({\n    init: function(range) {\n        $.extend(this, {\n            range: range,\n            _current: null,\n            _next: null,\n            _end: null\n        });\n\n        if (range.collapsed) {\n            return;\n        }\n\n        var root = range.commonAncestorContainer;\n\n        this._next = range.startContainer == root && !isDataNode(range.startContainer) ?\n        range.startContainer.childNodes[range.startOffset] :\n        findClosestAncestor(root, range.startContainer);\n\n        this._end = range.endContainer == root && !isDataNode(range.endContainer) ?\n        range.endContainer.childNodes[range.endOffset] :\n        findClosestAncestor(root, range.endContainer).nextSibling;\n    },\n\n    hasNext: function () {\n        return !!this._next;\n    },\n\n    next: function () {\n        var that = this,\n            current = that._current = that._next;\n        that._next = that._current && that._current.nextSibling != that._end ?\n        that._current.nextSibling : null;\n\n        if (isDataNode(that._current)) {\n            if (that.range.endContainer == that._current) {\n                current = current.cloneNode(true);\n                current.deleteData(that.range.endOffset, current.length - that.range.endOffset);\n            }\n\n            if (that.range.startContainer == that._current) {\n                current = current.cloneNode(true);\n                current.deleteData(0, that.range.startOffset);\n            }\n        }\n\n        return current;\n    },\n\n    traverse: function (callback) {\n        var that = this,\n            current;\n\n        function next() {\n            that._current = that._next;\n            that._next = that._current && that._current.nextSibling != that._end ? that._current.nextSibling : null;\n            return that._current;\n        }\n\n        while (current = next()) {\n            if (that.hasPartialSubtree()) {\n                that.getSubtreeIterator().traverse(callback);\n            } else {\n                callback(current);\n            }\n        }\n\n        return current;\n    },\n\n    remove: function (originalRange) {\n        var that = this,\n            inStartContainer = that.range.startContainer == that._current,\n            inEndContainer = that.range.endContainer == that._current,\n            start, end, delta;\n\n        if (isDataNode(that._current) && (inStartContainer || inEndContainer)) {\n            start = inStartContainer ? that.range.startOffset : 0;\n            end = inEndContainer ? that.range.endOffset : that._current.length;\n            delta = end - start;\n\n            if (originalRange && (inStartContainer || inEndContainer)) {\n                if (that._current == originalRange.startContainer && start <= originalRange.startOffset) {\n                    originalRange.startOffset -= delta;\n                }\n\n                if (that._current == originalRange.endContainer && end <= originalRange.endOffset) {\n                    originalRange.endOffset -= delta;\n                }\n            }\n\n            that._current.deleteData(start, delta);\n        } else {\n            var parent = that._current.parentNode;\n\n            if (originalRange && (that.range.startContainer == parent || that.range.endContainer == parent)) {\n                var nodeIndex = findNodeIndex(that._current);\n\n                if (parent == originalRange.startContainer && nodeIndex <= originalRange.startOffset) {\n                    originalRange.startOffset -= 1;\n                }\n\n                if (parent == originalRange.endContainer && nodeIndex < originalRange.endOffset) {\n                    originalRange.endOffset -= 1;\n                }\n            }\n\n            dom.remove(that._current);\n        }\n    },\n\n    hasPartialSubtree: function () {\n        return !isDataNode(this._current) &&\n        (dom.isAncestorOrSelf(this._current, this.range.startContainer) ||\n            dom.isAncestorOrSelf(this._current, this.range.endContainer));\n    },\n\n    getSubtreeIterator: function () {\n        var that = this,\n            subRange = that.range.cloneRange();\n\n        subRange.selectNodeContents(that._current);\n\n        if (dom.isAncestorOrSelf(that._current, that.range.startContainer)) {\n            subRange.setStart(that.range.startContainer, that.range.startOffset);\n        }\n\n        if (dom.isAncestorOrSelf(that._current, that.range.endContainer)) {\n            subRange.setEnd(that.range.endContainer, that.range.endOffset);\n        }\n\n        return new RangeIterator(subRange);\n    }\n});\n\nvar W3CSelection = Class.extend({\n    init: function(doc) {\n        this.ownerDocument = doc;\n        this.rangeCount = 1;\n    },\n\n    addRange: function (range) {\n        var textRange = this.ownerDocument.body.createTextRange();\n\n        // end container should be adopted first in order to prevent selection with negative length\n        adoptContainer(textRange, range, false);\n        adoptContainer(textRange, range, true);\n\n        textRange.select();\n    },\n\n    removeAllRanges: function () {\n        var selection = this.ownerDocument.selection;\n\n        if (selection.type != \"None\") {\n            selection.empty();\n        }\n    },\n\n    getRangeAt: function () {\n        var textRange,\n            range = new W3CRange(this.ownerDocument),\n            selection = this.ownerDocument.selection,\n            element, commonAncestor;\n\n        try {\n            textRange = selection.createRange();\n            element = textRange.item ? textRange.item(0) : textRange.parentElement();\n            if (element.ownerDocument != this.ownerDocument) {\n                return range;\n            }\n        } catch (ex) {\n            return range;\n        }\n\n        if (selection.type == \"Control\") {\n            range.selectNode(textRange.item(0));\n        } else {\n            commonAncestor = textRangeContainer(textRange);\n            adoptEndPoint(textRange, range, commonAncestor, true);\n            adoptEndPoint(textRange, range, commonAncestor, false);\n\n            if (range.startContainer.nodeType == 9) {\n                range.setStart(range.endContainer, range.startOffset);\n            }\n\n            if (range.endContainer.nodeType == 9) {\n                range.setEnd(range.startContainer, range.endOffset);\n            }\n\n            if (textRange.compareEndPoints(\"StartToEnd\", textRange) === 0) {\n                range.collapse(false);\n            }\n\n            var startContainer = range.startContainer,\n                endContainer = range.endContainer,\n                body = this.ownerDocument.body;\n\n            if (!range.collapsed && range.startOffset === 0 && range.endOffset == getNodeLength(range.endContainer) &&  // check for full body selection\n                !(startContainer == endContainer && isDataNode(startContainer) && startContainer.parentNode == body)) { // but not when single textnode is selected\n                var movedStart = false,\n                    movedEnd = false;\n\n                while (findNodeIndex(startContainer) === 0 && startContainer == startContainer.parentNode.firstChild && startContainer != body) {\n                    startContainer = startContainer.parentNode;\n                    movedStart = true;\n                }\n\n                while (findNodeIndex(endContainer) == getNodeLength(endContainer.parentNode) - 1 && endContainer == endContainer.parentNode.lastChild && endContainer != body) {\n                    endContainer = endContainer.parentNode;\n                    movedEnd = true;\n                }\n\n                if (startContainer == body && endContainer == body && movedStart && movedEnd) {\n                    range.setStart(startContainer, 0);\n                    range.setEnd(endContainer, getNodeLength(body));\n                }\n            }\n        }\n\n        return range;\n    }\n});\n\nfunction textRangeContainer(textRange) {\n    var left = textRange.duplicate(),\n        right = textRange.duplicate();\n\n    left.collapse(true);\n    right.collapse(false);\n\n    return dom.commonAncestor(textRange.parentElement(), left.parentElement(), right.parentElement());\n}\n\nfunction adoptContainer(textRange, range, start) {\n    // find anchor node and offset\n    var container = range[start ? \"startContainer\" : \"endContainer\"],\n        offset = range[start ? \"startOffset\" : \"endOffset\"],\n        textOffset = 0,\n        isData = isDataNode(container),\n        anchorNode = isData ? container : container.childNodes[offset] || null,\n        anchorParent = isData ? container.parentNode : container,\n        doc = range.ownerDocument,\n        cursor = doc.body.createTextRange(),\n        cursorNode;\n\n    // visible data nodes need a text offset\n    if (container.nodeType == 3 || container.nodeType == 4) {\n        textOffset = offset;\n    }\n\n    if (!anchorParent) {\n        anchorParent = doc.body;\n    }\n\n    if (anchorParent.nodeName.toLowerCase() == \"img\") {\n        cursor.moveToElementText(anchorParent);\n        cursor.collapse(false);\n        textRange.setEndPoint(start ? \"StartToStart\" : \"EndToStart\", cursor);\n    } else {\n        // create a cursor element node to position range (since we can't select text nodes)\n        cursorNode = anchorParent.insertBefore(dom.create(doc, \"a\"), anchorNode);\n\n        cursor.moveToElementText(cursorNode);\n        dom.remove(cursorNode);\n        cursor[start ? \"moveStart\" : \"moveEnd\"](\"character\", textOffset);\n        cursor.collapse(false);\n        textRange.setEndPoint(start ? \"StartToStart\" : \"EndToStart\", cursor);\n    }\n}\n\nfunction adoptEndPoint(textRange, range, commonAncestor, start) {\n    var cursorNode = dom.create(range.ownerDocument, \"a\"),\n        cursor = textRange.duplicate(),\n        comparison = start ? \"StartToStart\" : \"StartToEnd\",\n        result, parent, target,\n        previous, next,\n        args, index,\n        appended = false;\n\n    cursorNode.innerHTML = \"\\ufeff\";\n    cursor.collapse(start);\n\n    parent = cursor.parentElement();\n\n    if (!dom.isAncestorOrSelf(commonAncestor, parent)) {\n        parent = commonAncestor;\n    }\n\n    // detect range end points\n    // insert cursorNode within the textRange parent and move the cursor until it gets outside of the textRange\n    do {\n        if (appended) {\n            parent.insertBefore(cursorNode, cursorNode.previousSibling);\n        } else {\n            parent.appendChild(cursorNode);\n            appended = true;\n        }\n        cursor.moveToElementText(cursorNode);\n    } while ((result = cursor.compareEndPoints(comparison, textRange)) > 0 && cursorNode.previousSibling);\n\n    target = cursorNode.nextSibling;\n\n    if (result == -1 && isDataNode(target)) {\n        cursor.setEndPoint(start ? \"EndToStart\" : \"EndToEnd\", textRange);\n\n        dom.remove(cursorNode);\n\n        args = [target, cursor.text.length];\n    } else {\n        previous = !start && cursorNode.previousSibling;\n        next = start && cursorNode.nextSibling;\n\n        if (isDataNode(next)) {\n            args = [next, 0];\n        } else if (isDataNode(previous)) {\n            args = [previous, previous.length];\n        } else {\n            index = findNodeIndex(cursorNode);\n\n            if (parent.nextSibling && index == parent.childNodes.length - 1) {\n                args = [parent.nextSibling, 0];\n            } else {\n                args = [parent, index];\n            }\n        }\n\n        dom.remove(cursorNode);\n    }\n\n    range[start ? \"setStart\" : \"setEnd\"].apply(range, args);\n}\n\nvar RangeEnumerator = Class.extend({\n    init: function(range) {\n        this.enumerate = function () {\n            var nodes = [];\n\n            function visit(node) {\n                if (dom.is(node, \"img\") || (node.nodeType == 3 && (!dom.isWhitespace(node) || node.nodeValue == \"\\ufeff\"))) {\n                    nodes.push(node);\n                } else {\n                    node = node.firstChild;\n                    while (node) {\n                        visit(node);\n                        node = node.nextSibling;\n                    }\n                }\n            }\n\n            new RangeIterator(range).traverse(visit);\n\n            return nodes;\n        };\n    }\n});\n\nvar RestorePoint = Class.extend({\n    init: function(range, body) {\n        var that = this;\n        that.range = range;\n        that.rootNode = RangeUtils.documentFromRange(range);\n        that.body = body || that.getEditable(range);\n        if (dom.name(that.body) != \"body\") {\n            that.rootNode = that.body;\n        }\n        that.html = that.body.innerHTML;\n\n        that.startContainer = that.nodeToPath(range.startContainer);\n        that.endContainer = that.nodeToPath(range.endContainer);\n        that.startOffset = that.offset(range.startContainer, range.startOffset);\n        that.endOffset = that.offset(range.endContainer, range.endOffset);\n    },\n\n    index: function(node) {\n        var result = 0,\n            lastType = node.nodeType;\n\n        while (node = node.previousSibling) {\n            var nodeType = node.nodeType;\n\n            if (nodeType != 3 || lastType != nodeType) {\n                result ++;\n            }\n\n            lastType = nodeType;\n        }\n\n        return result;\n    },\n\n    getEditable: function(range) {\n        var root = range.commonAncestorContainer;\n\n        while (root && (root.nodeType == 3 || root.attributes && !root.attributes.contentEditable)) {\n            root = root.parentNode;\n        }\n\n        return root;\n    },\n\n    restoreHtml: function() {\n        this.body.innerHTML = this.html;\n    },\n\n    offset: function(node, value) {\n        if (node.nodeType == 3) {\n            while ((node = node.previousSibling) && node.nodeType == 3) {\n                value += node.nodeValue.length;\n            }\n        }\n\n        return value;\n    },\n\n    nodeToPath: function(node) {\n        var path = [];\n\n        while (node != this.rootNode) {\n            path.push(this.index(node));\n            node = node.parentNode;\n        }\n\n        return path;\n    },\n\n    toRangePoint: function(range, start, path, denormalizedOffset) {\n        var node = this.rootNode,\n            length = path.length,\n            offset = denormalizedOffset;\n\n        while (length--) {\n            node = node.childNodes[path[length]];\n        }\n\n        while (node && node.nodeType == 3 && node.nodeValue.length < offset) {\n            offset -= node.nodeValue.length;\n            node = node.nextSibling;\n        }\n\n        if (node && offset >= 0) {\n            range[start ? 'setStart' : 'setEnd'](node, offset);\n        }\n    },\n\n    toRange: function () {\n        var that = this,\n            result = that.range.cloneRange();\n\n        that.toRangePoint(result, true, that.startContainer, that.startOffset);\n        that.toRangePoint(result, false, that.endContainer, that.endOffset);\n\n        return result;\n    }\n\n});\n\nvar Marker = Class.extend({\n    init: function() {\n        this.caret = null;\n    },\n\n    addCaret: function (range) {\n        var that = this;\n\n        that.caret = dom.create(RangeUtils.documentFromRange(range), 'span', { className: 'k-marker' });\n        range.insertNode(that.caret);\n        range.selectNode(that.caret);\n        return that.caret;\n    },\n\n    removeCaret: function (range) {\n        var that = this,\n            previous = that.caret.previousSibling,\n            startOffset = 0;\n\n        if (previous) {\n            startOffset = isDataNode(previous) ? previous.nodeValue.length : findNodeIndex(previous);\n        }\n\n        var container = that.caret.parentNode;\n        var containerIndex = previous ? findNodeIndex(previous) : 0;\n\n        dom.remove(that.caret);\n        normalize(container);\n\n        var node = container.childNodes[containerIndex];\n\n        if (isDataNode(node)) {\n            range.setStart(node, startOffset);\n        } else if (node) {\n            var textNode = dom.lastTextNode(node);\n            if (textNode) {\n                range.setStart(textNode, textNode.nodeValue.length);\n            } else {\n                range[previous ? 'setStartAfter' : 'setStartBefore'](node);\n            }\n        } else {\n            if (!browser.msie && !container.innerHTML) {\n                container.innerHTML = '<br _moz_dirty=\"\" />';\n            }\n\n            range.selectNodeContents(container);\n        }\n        range.collapse(true);\n    },\n\n    add: function (range, expand) {\n        var that = this;\n\n        var collapsed = range.collapsed && !RangeUtils.isExpandable(range);\n        var doc = RangeUtils.documentFromRange(range);\n\n        if (expand && range.collapsed) {\n            that.addCaret(range);\n            range = RangeUtils.expand(range);\n        }\n\n        var rangeBoundary = range.cloneRange();\n\n        rangeBoundary.collapse(false);\n        that.end = dom.create(doc, 'span', { className: 'k-marker' });\n        rangeBoundary.insertNode(that.end);\n\n        rangeBoundary = range.cloneRange();\n        rangeBoundary.collapse(true);\n        that.start = that.end.cloneNode(true);\n        rangeBoundary.insertNode(that.start);\n\n        that._removeDeadMarkers(that.start, that.end);\n\n        if (collapsed) {\n            var bom = doc.createTextNode(\"\\ufeff\");\n            dom.insertAfter(bom.cloneNode(), that.start);\n            dom.insertBefore(bom, that.end);\n        }\n\n        normalize(range.commonAncestorContainer);\n\n        range.setStartBefore(that.start);\n        range.setEndAfter(that.end);\n\n        return range;\n    },\n\n    _removeDeadMarkers: function(start, end) {\n        if (start.previousSibling && start.previousSibling.nodeValue == \"\\ufeff\") {\n            dom.remove(start.previousSibling);\n        }\n\n        if (end.nextSibling && end.nextSibling.nodeValue == \"\\ufeff\") {\n            dom.remove(end.nextSibling);\n        }\n    },\n\n    remove: function (range) {\n        var that = this,\n            start = that.start,\n            end = that.end,\n            shouldNormalizeStart,\n            shouldNormalizeEnd,\n            shouldNormalize;\n\n        normalize(range.commonAncestorContainer);\n\n        while (!start.nextSibling && start.parentNode) {\n            start = start.parentNode;\n        }\n\n        while (!end.previousSibling && end.parentNode) {\n            end = end.parentNode;\n        }\n\n        // merely accessing the siblings will solve range issues in IE\n        shouldNormalizeStart = (start.previousSibling && start.previousSibling.nodeType == 3) &&\n                               (start.nextSibling && start.nextSibling.nodeType == 3);\n\n        shouldNormalizeEnd = (end.previousSibling && end.previousSibling.nodeType == 3) &&\n                             (end.nextSibling && end.nextSibling.nodeType == 3);\n\n        shouldNormalize = shouldNormalizeStart && shouldNormalizeEnd;\n\n        start = start.nextSibling;\n        end = end.previousSibling;\n\n        var collapsed = false;\n        var collapsedToStart = false;\n        // collapsed range\n        if (start == that.end) {\n            collapsedToStart = !!that.start.previousSibling;\n            start = end = that.start.previousSibling || that.end.nextSibling;\n            collapsed = true;\n        }\n\n        dom.remove(that.start);\n        dom.remove(that.end);\n\n        if (!start || !end) {\n            range.selectNodeContents(range.commonAncestorContainer);\n            range.collapse(true);\n            return;\n        }\n\n        var startOffset = collapsed ? isDataNode(start) ? start.nodeValue.length : start.childNodes.length : 0;\n        var endOffset = isDataNode(end) ? end.nodeValue.length : end.childNodes.length;\n\n        if (start.nodeType == 3) {\n            while (start.previousSibling && start.previousSibling.nodeType == 3) {\n                start = start.previousSibling;\n                startOffset += start.nodeValue.length;\n            }\n        }\n\n        if (end.nodeType == 3) {\n            while (end.previousSibling && end.previousSibling.nodeType == 3) {\n                end = end.previousSibling;\n                endOffset += end.nodeValue.length;\n            }\n        }\n\n        var startIndex = findNodeIndex(start), startParent = start.parentNode;\n        var endIndex = findNodeIndex(end), endParent = end.parentNode;\n\n        for (var startPointer = start; startPointer.previousSibling; startPointer = startPointer.previousSibling) {\n            if (startPointer.nodeType == 3 && startPointer.previousSibling.nodeType == 3) {\n                startIndex--;\n            }\n        }\n\n        for (var endPointer = end; endPointer.previousSibling; endPointer = endPointer.previousSibling) {\n            if (endPointer.nodeType == 3 && endPointer.previousSibling.nodeType == 3) {\n                endIndex--;\n            }\n        }\n\n        normalize(startParent);\n\n        if (start.nodeType == 3) {\n            start = startParent.childNodes[startIndex];\n        }\n\n        normalize(endParent);\n        if (end.nodeType == 3) {\n            end = endParent.childNodes[endIndex];\n        }\n\n        if (collapsed) {\n            if (start.nodeType == 3) {\n                range.setStart(start, startOffset);\n            } else {\n                range[collapsedToStart ? 'setStartAfter' : 'setStartBefore'](start);\n            }\n\n            range.collapse(true);\n\n        } else {\n            if (start.nodeType == 3) {\n                range.setStart(start, startOffset);\n            } else {\n                range.setStartBefore(start);\n            }\n\n            if (end.nodeType == 3) {\n                range.setEnd(end, endOffset);\n            } else {\n                range.setEndAfter(end);\n            }\n        }\n        if (that.caret) {\n            that.removeCaret(range);\n        }\n    }\n\n});\n\nvar boundary = /[\\u0009-\\u000d]|\\u0020|\\u00a0|\\ufeff|\\.|,|;|:|!|\\(|\\)|\\?/;\n\nvar RangeUtils = {\n    nodes: function(range) {\n        var nodes = RangeUtils.textNodes(range);\n        if (!nodes.length) {\n            range.selectNodeContents(range.commonAncestorContainer);\n            nodes = RangeUtils.textNodes(range);\n            if (!nodes.length) {\n                nodes = dom.significantChildNodes(range.commonAncestorContainer);\n            }\n        }\n        return nodes;\n    },\n\n    textNodes: function(range) {\n        return new RangeEnumerator(range).enumerate();\n    },\n\n    documentFromRange: function(range) {\n        var startContainer = range.startContainer;\n        return startContainer.nodeType == 9 ? startContainer : startContainer.ownerDocument;\n    },\n\n    createRange: function(document) {\n        if (browser.msie && browser.version < 9) {\n            return new W3CRange(document);\n        }\n\n        return document.createRange();\n    },\n\n    selectRange: function(range) {\n        var image = RangeUtils.image(range);\n        if (image) {\n            range.setStartAfter(image);\n            range.setEndAfter(image);\n        }\n        var selection = SelectionUtils.selectionFromRange(range);\n        selection.removeAllRanges();\n        selection.addRange(range);\n    },\n\n    stringify: function(range) {\n        return kendo.format(\n            \"{0}:{1} - {2}:{3}\",\n            dom.name(range.startContainer), range.startOffset,\n            dom.name(range.endContainer), range.endOffset\n        );\n    },\n\n    split: function(range, node, trim) {\n        function partition(start) {\n            var partitionRange = range.cloneRange();\n            partitionRange.collapse(start);\n            partitionRange[start ? 'setStartBefore' : 'setEndAfter'](node);\n            var contents = partitionRange.extractContents();\n            if (trim) {\n                contents = dom.trim(contents);\n            }\n            dom[start ? 'insertBefore' : 'insertAfter'](contents, node);\n        }\n        partition(true);\n        partition(false);\n    },\n\n    mapAll: function(range, map) {\n        var nodes = [];\n\n        new RangeIterator(range).traverse(function(node) {\n            var mapped = map(node);\n\n            if (mapped && $.inArray(mapped, nodes) < 0) {\n                nodes.push(mapped);\n            }\n        });\n\n        return nodes;\n    },\n\n    getAll: function(range, predicate) {\n        var selector = predicate;\n\n        if (typeof predicate == \"string\") {\n            predicate = function(node) {\n                return dom.is(node, selector);\n            };\n        }\n\n        return RangeUtils.mapAll(range, function (node) {\n            if (predicate(node)) {\n                return node;\n            }\n        });\n    },\n\n    getMarkers: function(range) {\n        return RangeUtils.getAll(range, function(node) {\n            return node.className == 'k-marker';\n        });\n    },\n\n    image: function (range) {\n        var nodes = RangeUtils.getAll(range, \"img\");\n\n        if (nodes.length == 1) {\n            return nodes[0];\n        }\n    },\n\n    wrapSelectedElements: function(range) {\n        var startEditable = dom.editableParent(range.startContainer);\n        var endEditable = dom.editableParent(range.endContainer);\n\n        while (range.startOffset === 0 && range.startContainer != startEditable) {\n            range.setStart(range.startContainer.parentNode, dom.findNodeIndex(range.startContainer));\n        }\n\n        function isEnd(offset, container) {\n            var length = dom.getNodeLength(container);\n\n            if (offset == length) {\n                return true;\n            }\n\n            for (var i = offset; i < length; i++) {\n                if (!dom.insignificant(container.childNodes[i])) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        while (isEnd(range.endOffset, range.endContainer) && range.endContainer != endEditable) {\n            range.setEnd(range.endContainer.parentNode, dom.findNodeIndex(range.endContainer) + 1);\n        }\n\n        return range;\n    },\n\n    expand: function (range) {\n        var result = range.cloneRange();\n\n        var startContainer = result.startContainer.childNodes[result.startOffset === 0 ? 0 : result.startOffset - 1];\n        var endContainer = result.endContainer.childNodes[result.endOffset];\n\n        if (!isDataNode(startContainer) || !isDataNode(endContainer)) {\n            return result;\n        }\n\n        var beforeCaret = startContainer.nodeValue;\n        var afterCaret = endContainer.nodeValue;\n\n        if (!beforeCaret || !afterCaret) {\n            return result;\n        }\n\n        var startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n        var endOffset = afterCaret.search(boundary);\n\n        if (!startOffset || !endOffset) {\n            return result;\n        }\n\n        endOffset = endOffset == -1 ? afterCaret.length : endOffset;\n        startOffset = startOffset == -1 ? 0 : beforeCaret.length - startOffset;\n\n        result.setStart(startContainer, startOffset);\n        result.setEnd(endContainer, endOffset);\n\n        return result;\n    },\n\n    isExpandable: function (range) {\n        var node = range.startContainer;\n        var rangeDocument = RangeUtils.documentFromRange(range);\n\n        if (node == rangeDocument || node == rangeDocument.body) {\n            return false;\n        }\n\n        var result = range.cloneRange();\n\n        var value = node.nodeValue;\n        if (!value) {\n            return false;\n        }\n\n        var beforeCaret = value.substring(0, result.startOffset);\n        var afterCaret = value.substring(result.startOffset);\n\n        var startOffset = 0, endOffset = 0;\n\n        if (beforeCaret) {\n            startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n        }\n\n        if (afterCaret) {\n            endOffset = afterCaret.search(boundary);\n        }\n\n        return startOffset && endOffset;\n    }\n};\n\nextend(Editor, {\n    SelectionUtils: SelectionUtils,\n    W3CRange: W3CRange,\n    RangeIterator: RangeIterator,\n    W3CSelection: W3CSelection,\n    RangeEnumerator: RangeEnumerator,\n    RestorePoint: RestorePoint,\n    Marker: Marker,\n    RangeUtils: RangeUtils\n});\n\n})(window.kendo.jQuery);\n\n(function($) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        editorNS = kendo.ui.editor,\n        EditorUtils = editorNS.EditorUtils,\n        registerTool = EditorUtils.registerTool,\n        dom = editorNS.Dom,\n        Tool = editorNS.Tool,\n        ToolTemplate = editorNS.ToolTemplate,\n        RestorePoint = editorNS.RestorePoint,\n        Marker = editorNS.Marker,\n        extend = $.extend;\n\nfunction finishUpdate(editor, startRestorePoint) {\n    var endRestorePoint = editor.selectionRestorePoint = new RestorePoint(editor.getRange());\n    var command = new GenericCommand(startRestorePoint, endRestorePoint);\n    command.editor = editor;\n\n    editor.undoRedoStack.push(command);\n\n    return endRestorePoint;\n}\n\nvar Command = Class.extend({\n    init: function(options) {\n        this.options = options;\n        this.restorePoint = new RestorePoint(options.range);\n        this.marker = new Marker();\n        this.formatter = options.formatter;\n    },\n\n    getRange: function () {\n        return this.restorePoint.toRange();\n    },\n\n    lockRange: function (expand) {\n        return this.marker.add(this.getRange(), expand);\n    },\n\n    releaseRange: function (range) {\n        this.marker.remove(range);\n        this.editor.selectRange(range);\n    },\n\n    undo: function () {\n        var point = this.restorePoint;\n        point.restoreHtml();\n        this.editor.selectRange(point.toRange());\n    },\n\n    redo: function () {\n        this.exec();\n    },\n\n    createDialog: function (content, options) {\n        var editor = this.editor;\n\n        return $(content).appendTo(document.body)\n            .kendoWindow(extend({}, editor.options.dialogOptions, options))\n            .closest(\".k-window\").toggleClass(\"k-rtl\", kendo.support.isRtl(editor.wrapper)).end();\n    },\n\n    exec: function () {\n        var range = this.lockRange(true);\n        this.formatter.editor = this.editor;\n        this.formatter.toggle(range);\n        this.releaseRange(range);\n    }\n});\n\nvar GenericCommand = Class.extend({\n    init: function(startRestorePoint, endRestorePoint) {\n        this.body = startRestorePoint.body;\n        this.startRestorePoint = startRestorePoint;\n        this.endRestorePoint = endRestorePoint;\n    },\n\n    redo: function () {\n        this.body.innerHTML = this.endRestorePoint.html;\n        this.editor.selectRange(this.endRestorePoint.toRange());\n    },\n\n    undo: function () {\n        this.body.innerHTML = this.startRestorePoint.html;\n        this.editor.selectRange(this.startRestorePoint.toRange());\n    }\n});\n\nvar InsertHtmlCommand = Command.extend({\n    init: function(options) {\n        Command.fn.init.call(this, options);\n\n        this.managesUndoRedo = true;\n    },\n\n    exec: function() {\n        var editor = this.editor;\n        var options = this.options;\n        var range = options.range;\n        var body = editor.body;\n        var startRestorePoint = new RestorePoint(range, body);\n        var html = options.html || options.value || '';\n\n        editor.selectRange(range);\n\n        editor.clipboard.paste(html, options);\n\n        if (options.postProcess) {\n            options.postProcess(editor, editor.getRange());\n        }\n\n        var genericCommand = new GenericCommand(startRestorePoint, new RestorePoint(editor.getRange(), body));\n        genericCommand.editor = editor;\n        editor.undoRedoStack.push(genericCommand);\n\n        editor.focus();\n    }\n});\n\nvar InsertHtmlTool = Tool.extend({\n    initialize: function(ui, initOptions) {\n        var editor = initOptions.editor,\n            options = this.options,\n            dataSource = options.items ? options.items : editor.options.insertHtml;\n\n        new editorNS.SelectBox(ui, {\n            dataSource: dataSource,\n            dataTextField: \"text\",\n            dataValueField: \"value\",\n            change: function () {\n                Tool.exec(editor, 'insertHtml', this.value());\n            },\n            title: editor.options.messages.insertHtml,\n            highlightFirst: false\n        });\n    },\n\n    command: function (commandArguments) {\n        return new InsertHtmlCommand(commandArguments);\n    },\n\n    update: function(ui) {\n        var selectbox = ui.data(\"kendoSelectBox\") || ui.find(\"select\").data(\"kendoSelectBox\");\n        selectbox.close();\n        selectbox.value(selectbox.options.title);\n    }\n});\n\nvar UndoRedoStack = Class.extend({\n    init: function() {\n        this.stack = [];\n        this.currentCommandIndex = -1;\n    },\n\n    push: function (command) {\n        this.stack = this.stack.slice(0, this.currentCommandIndex + 1);\n        this.currentCommandIndex = this.stack.push(command) - 1;\n    },\n\n    undo: function () {\n        if (this.canUndo()) {\n            this.stack[this.currentCommandIndex--].undo();\n        }\n    },\n\n    redo: function () {\n        if (this.canRedo()) {\n            this.stack[++this.currentCommandIndex].redo();\n        }\n    },\n\n    canUndo: function () {\n        return this.currentCommandIndex >= 0;\n    },\n\n    canRedo: function () {\n        return this.currentCommandIndex != this.stack.length - 1;\n    }\n});\n\nvar TypingHandler = Class.extend({\n    init: function(editor) {\n        this.editor = editor;\n    },\n\n    keydown: function (e) {\n        var that = this,\n            editor = that.editor,\n            keyboard = editor.keyboard,\n            isTypingKey = keyboard.isTypingKey(e),\n            evt = extend($.Event(), e);\n\n        that.editor.trigger(\"keydown\", evt);\n\n        if (evt.isDefaultPrevented()) {\n            e.preventDefault();\n            return true;\n        }\n\n        if (!evt.isDefaultPrevented() && isTypingKey && !keyboard.isTypingInProgress()) {\n            var range = editor.getRange();\n            that.startRestorePoint = new RestorePoint(range);\n\n            keyboard.startTyping(function () {\n                that.endRestorePoint = finishUpdate(editor, that.startRestorePoint);\n            });\n\n            return true;\n        }\n\n        return false;\n    },\n\n    keyup: function (e) {\n        var keyboard = this.editor.keyboard;\n\n        this.editor.trigger(\"keyup\", e);\n\n        if (keyboard.isTypingInProgress()) {\n            keyboard.endTyping();\n            return true;\n        }\n\n        return false;\n    }\n});\n\nvar BackspaceHandler = Class.extend({\n    init: function(editor) {\n        this.editor = editor;\n    },\n    keydown: function(e) {\n        if (e.keyCode === kendo.keys.BACKSPACE) {\n            var editor = this.editor;\n            var range = editor.getRange();\n            var emptyParagraphContent = kendo.support.browser.msie ? '' : '<br _moz_dirty=\"\" />';\n\n            if (range.collapsed) {\n                return;\n            }\n\n            e.preventDefault();\n\n            var startRestorePoint = new RestorePoint(range);\n            var ancestor = range.commonAncestorContainer;\n\n            if (/t(able|body|r)/i.test(dom.name(ancestor))) {\n                range.selectNode(dom.closest(ancestor, \"table\"));\n            }\n\n            range.deleteContents();\n\n            ancestor = range.commonAncestorContainer;\n\n            if (dom.name(ancestor) === \"p\" && ancestor.innerHTML === \"\") {\n                ancestor.innerHTML = emptyParagraphContent;\n                range.setStart(ancestor, 0);\n                range.collapse(true);\n                editor.selectRange(range);\n            }\n\n            finishUpdate(editor, startRestorePoint);\n        }\n    },\n    keyup: function() {}\n});\n\nvar SystemHandler = Class.extend({\n    init: function(editor) {\n        this.editor = editor;\n        this.systemCommandIsInProgress = false;\n    },\n\n    createUndoCommand: function () {\n        this.startRestorePoint = this.endRestorePoint = finishUpdate(this.editor, this.startRestorePoint);\n    },\n\n    changed: function () {\n        if (this.startRestorePoint) {\n            return this.startRestorePoint.html != this.editor.body.innerHTML;\n        }\n\n        return false;\n    },\n\n    keydown: function (e) {\n        var that = this,\n            editor = that.editor,\n            keyboard = editor.keyboard;\n\n        if (keyboard.isModifierKey(e)) {\n\n            if (keyboard.isTypingInProgress()) {\n                keyboard.endTyping(true);\n            }\n\n            that.startRestorePoint = new RestorePoint(editor.getRange());\n            return true;\n        }\n\n        if (keyboard.isSystem(e)) {\n            that.systemCommandIsInProgress = true;\n\n            if (that.changed()) {\n                that.systemCommandIsInProgress = false;\n                that.createUndoCommand();\n            }\n\n            return true;\n        }\n\n        return false;\n    },\n\n    keyup: function (e) {\n        var that = this;\n\n        if (that.systemCommandIsInProgress && that.changed()) {\n            that.systemCommandIsInProgress = false;\n            that.createUndoCommand();\n            return true;\n        }\n\n        return false;\n    }\n});\n\nvar Keyboard = Class.extend({\n    init: function(handlers) {\n        this.handlers = handlers;\n        this.typingInProgress = false;\n    },\n\n    isCharacter: function(keyCode) {\n        return (keyCode >= 48 && keyCode <= 90) || (keyCode >= 96 && keyCode <= 111) ||\n               (keyCode >= 186 && keyCode <= 192) || (keyCode >= 219 && keyCode <= 222) ||\n               keyCode == 229;\n    },\n\n    toolFromShortcut: function (tools, e) {\n        var key = String.fromCharCode(e.keyCode),\n            toolName,\n            toolOptions;\n\n        for (toolName in tools) {\n            toolOptions = $.extend({ ctrl: false, alt: false, shift: false }, tools[toolName].options);\n\n            if ((toolOptions.key == key || toolOptions.key == e.keyCode) &&\n                toolOptions.ctrl == e.ctrlKey &&\n                toolOptions.alt == e.altKey &&\n                toolOptions.shift == e.shiftKey) {\n                return toolName;\n            }\n        }\n    },\n\n    isTypingKey: function (e) {\n        var keyCode = e.keyCode;\n        return (this.isCharacter(keyCode) && !e.ctrlKey && !e.altKey) ||\n               keyCode == 32 || keyCode == 13 || keyCode == 8 ||\n               (keyCode == 46 && !e.shiftKey && !e.ctrlKey && !e.altKey);\n    },\n\n    isModifierKey: function (e) {\n        var keyCode = e.keyCode;\n        return (keyCode == 17 && !e.shiftKey && !e.altKey) ||\n               (keyCode == 16 && !e.ctrlKey && !e.altKey) ||\n               (keyCode == 18 && !e.ctrlKey && !e.shiftKey);\n    },\n\n    isSystem: function (e) {\n        return e.keyCode == 46 && e.ctrlKey && !e.altKey && !e.shiftKey;\n    },\n\n    startTyping: function (callback) {\n        this.onEndTyping = callback;\n        this.typingInProgress = true;\n    },\n\n    stopTyping: function() {\n        if (this.typingInProgress && this.onEndTyping) {\n            this.onEndTyping();\n        }\n        this.typingInProgress = false;\n    },\n\n    endTyping: function (force) {\n        var that = this;\n        that.clearTimeout();\n        if (force) {\n            that.stopTyping();\n        } else {\n            that.timeout = window.setTimeout($.proxy(that.stopTyping, that), 1000);\n        }\n    },\n\n    isTypingInProgress: function () {\n        return this.typingInProgress;\n    },\n\n    clearTimeout: function () {\n        window.clearTimeout(this.timeout);\n    },\n\n    notify: function(e, what) {\n        var i, handlers = this.handlers;\n\n        for (i = 0; i < handlers.length; i++) {\n            if (handlers[i][what](e)) {\n                break;\n            }\n        }\n    },\n\n    keydown: function (e) {\n        this.notify(e, 'keydown');\n    },\n\n    keyup: function (e) {\n        this.notify(e, 'keyup');\n    }\n});\n\nvar Clipboard = Class.extend({\n    init: function(editor) {\n        this.editor = editor;\n        this.cleaners = [\n            new ScriptCleaner(),\n            new MSWordFormatCleaner(),\n            new WebkitFormatCleaner()\n        ];\n    },\n\n    htmlToFragment: function(html) {\n        var editor = this.editor,\n            doc = editor.document,\n            container = dom.create(doc, 'div'),\n            fragment = doc.createDocumentFragment();\n\n        container.innerHTML = html;\n\n        while (container.firstChild) {\n            fragment.appendChild(container.firstChild);\n        }\n\n        return fragment;\n    },\n\n    isBlock: function(html) {\n        return (/<(div|p|ul|ol|table|h[1-6])/i).test(html);\n    },\n\n    _startModification: function() {\n        var range;\n        var restorePoint;\n        var editor = this.editor;\n\n        if (this._inProgress) {\n            return;\n        }\n\n        this._inProgress = true;\n\n        range = editor.getRange();\n        restorePoint = new RestorePoint(range);\n\n        dom.persistScrollTop(editor.document);\n\n        return { range: range, restorePoint: restorePoint };\n    },\n\n    _endModification: function(modificationInfo) {\n        finishUpdate(this.editor, modificationInfo.restorePoint);\n\n        this.editor._selectionChange();\n\n        this._inProgress = false;\n    },\n\n    _contentModification: function(before, after) {\n        var that = this;\n        var editor = that.editor;\n        var modificationInfo = that._startModification();\n\n        if (!modificationInfo) {\n            return;\n        }\n\n        before.call(that, editor, modificationInfo.range);\n\n        setTimeout(function() {\n            after.call(that, editor, modificationInfo.range);\n\n            that._endModification(modificationInfo);\n        });\n    },\n\n    oncut: function() {\n        this._contentModification($.noop, $.noop);\n    },\n\n    _fileToDataURL: function(clipboardItem, complete) {\n        var blob = clipboardItem.getAsFile();\n        var reader = new FileReader();\n\n        reader.onload = complete || $.noop;\n\n        reader.readAsDataURL(blob);\n    },\n\n    _triggerPaste: function(html, options) {\n        var args = { html: html || \"\" };\n\n        args.html = args.html.replace(/\\ufeff/g, \"\");\n\n        this.editor.trigger(\"paste\", args);\n\n        this.paste(args.html, options || {});\n\n    },\n\n    _handleImagePaste: function(e) {\n        if (!('FileReader' in window)) {\n            return;\n        }\n\n        var that = this;\n        var clipboardData = e.clipboardData || e.originalEvent.clipboardData;\n        var items = clipboardData && (clipboardData.items || clipboardData.files);\n\n        if (!items || !items.length) {\n            return;\n        }\n\n        if (!/^image\\//i.test(items[0].type)) {\n            return;\n        }\n\n        var modificationInfo = that._startModification();\n\n        if (!modificationInfo) {\n            return;\n        }\n\n        this._fileToDataURL(items[0], function(e) {\n            that._triggerPaste('<img src=\"' + e.target.result + '\" />');\n\n            that._endModification(modificationInfo);\n        });\n\n        return true;\n    },\n\n    onpaste: function(e) {\n        if (this._handleImagePaste(e)) {\n            return;\n        }\n\n        this._contentModification(\n            function beforePaste(editor, range) {\n                var clipboardNode = dom.create(editor.document, 'div', {\n                        className:'k-paste-container',\n                        innerHTML: \"\\ufeff\"\n                    });\n                var browser = kendo.support.browser;\n\n                editor.body.appendChild(clipboardNode);\n\n                // text ranges are slow in IE10-, DOM ranges are buggy in IE9-10\n                if (browser.msie && browser.version < 11) {\n                    e.preventDefault();\n                    var r = editor.createRange();\n                    r.selectNodeContents(clipboardNode);\n                    editor.selectRange(r);\n                    var textRange = editor.document.body.createTextRange();\n                    textRange.moveToElementText(clipboardNode);\n                    $(editor.body).unbind('paste');\n                    textRange.execCommand('Paste');\n                    $(editor.body).bind('paste', $.proxy(this.onpaste, this));\n                } else {\n                    var clipboardRange = editor.createRange();\n                    clipboardRange.selectNodeContents(clipboardNode);\n                    editor.selectRange(clipboardRange);\n                }\n\n                range.deleteContents();\n            },\n            function afterPaste(editor, range) {\n                var html = \"\", args = { html: \"\" }, containers;\n                var browser = kendo.support.browser;\n\n                editor.selectRange(range);\n\n                containers = $(editor.body).children(\".k-paste-container\");\n\n                containers.each(function() {\n                    var lastChild = this.lastChild;\n\n                    if (lastChild && dom.is(lastChild, 'br')) {\n                        dom.remove(lastChild);\n                    }\n\n                    html += this.innerHTML;\n                });\n\n                containers.remove();\n\n                this._triggerPaste(html, { clean: true });\n            }\n        );\n    },\n\n    splittableParent: function(block, node) {\n        var parentNode, body;\n\n        if (block) {\n            return dom.closestEditableOfType(node, ['p', 'ul', 'ol']) || node.parentNode;\n        }\n\n        parentNode = node.parentNode;\n        body = node.ownerDocument.body;\n\n        if (dom.isInline(parentNode)) {\n            while (parentNode.parentNode != body && !dom.isBlock(parentNode.parentNode)) {\n                parentNode = parentNode.parentNode;\n            }\n        }\n\n        return parentNode;\n    },\n\n    paste: function (html, options) {\n        var editor = this.editor,\n            i, l;\n\n        options = extend({ clean: false, split: true }, options);\n\n        for (i = 0, l = this.cleaners.length; i < l; i++) {\n            if (this.cleaners[i].applicable(html)) {\n                html = this.cleaners[i].clean(html);\n            }\n        }\n\n        if (options.clean) {\n            // remove br elements which immediately precede block elements\n            html = html.replace(/(<br>(\\s|&nbsp;)*)+(<\\/?(div|p|li|col|t))/ig, \"$3\");\n            // remove empty inline elements\n            html = html.replace(/<(a|span)[^>]*><\\/\\1>/ig, \"\");\n        }\n\n        // It is possible in IE to copy just <li> tags\n        html = html.replace(/^<li/i, '<ul><li').replace(/li>$/g, 'li></ul>');\n\n        var block = this.isBlock(html);\n\n        editor.focus();\n        var range = editor.getRange();\n        range.deleteContents();\n\n        if (range.startContainer == editor.document) {\n            range.selectNodeContents(editor.body);\n        }\n\n        var marker = new Marker();\n        var caret = marker.addCaret(range);\n\n        var parent = this.splittableParent(block, caret);\n        var unwrap = false;\n        var splittable = parent != editor.body && !dom.is(parent, \"td\");\n\n        if (options.split && splittable && (block || dom.isInline(parent))) {\n            range.selectNode(caret);\n            editorNS.RangeUtils.split(range, parent, true);\n            unwrap = true;\n        }\n\n        var fragment = this.htmlToFragment(html);\n\n        if (fragment.firstChild && fragment.firstChild.className === \"k-paste-container\") {\n            var fragmentsHtml = [];\n            for (i = 0, l = fragment.childNodes.length; i < l; i++) {\n                fragmentsHtml.push(fragment.childNodes[i].innerHTML);\n            }\n\n            fragment = this.htmlToFragment(fragmentsHtml.join('<br />'));\n        }\n\n        $(fragment.childNodes)\n            .filter(\"table\").addClass(\"k-table\").end()\n            .find(\"table\").addClass(\"k-table\");\n\n        range.insertNode(fragment);\n\n        parent = this.splittableParent(block, caret);\n        if (unwrap) {\n            while (caret.parentNode != parent) {\n                dom.unwrap(caret.parentNode);\n            }\n\n            dom.unwrap(caret.parentNode);\n        }\n\n        dom.normalize(range.commonAncestorContainer);\n        caret.style.display = 'inline';\n        dom.restoreScrollTop(editor.document);\n        dom.scrollTo(caret);\n        marker.removeCaret(range);\n        editor.selectRange(range);\n    }\n});\n\nvar Cleaner = Class.extend({\n    clean: function(html) {\n        var that = this,\n            replacements = that.replacements,\n            i, l;\n\n        for (i = 0, l = replacements.length; i < l; i += 2) {\n            html = html.replace(replacements[i], replacements[i+1]);\n        }\n\n        return html;\n    }\n});\n\nvar ScriptCleaner = Cleaner.extend({\n    init: function() {\n        this.replacements = [\n            /<(\\/?)script([^>]*)>/i, \"<$1telerik:script$2>\"\n        ];\n    },\n\n    applicable: function(html) {\n        return (/<script[^>]*>/i).test(html);\n    }\n});\n\nvar MSWordFormatCleaner = Cleaner.extend({\n    init: function() {\n        this.replacements = [\n            /<\\?xml[^>]*>/gi, '',\n            /<!--(.|\\n)*?-->/g, '', /* comments */\n            /&quot;/g, \"'\", /* encoded quotes (in attributes) */\n            /(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?(h[1-6]|hr|p|div|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|address|pre|form|blockquote|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*/g, '$1',\n            /<br><br>/g, '<BR><BR>',\n            /<br>(?!\\n)/g, ' ',\n            /<table([^>]*)>(\\s|&nbsp;)+<t/gi, '<table$1><t',\n            /<tr[^>]*>(\\s|&nbsp;)*<\\/tr>/gi, '',\n            /<tbody[^>]*>(\\s|&nbsp;)*<\\/tbody>/gi, '',\n            /<table[^>]*>(\\s|&nbsp;)*<\\/table>/gi, '',\n            /<BR><BR>/g, '<br>',\n            /^\\s*(&nbsp;)+/gi, '',\n            /(&nbsp;|<br[^>]*>)+\\s*$/gi, '',\n            /mso-[^;\"]*;?/ig, '', /* office-related CSS attributes */\n            /<(\\/?)b(\\s[^>]*)?>/ig, '<$1strong$2>',\n            /<(\\/?)i(\\s[^>]*)?>/ig, '<$1em$2>',\n            /<o:p>&nbsp;<\\/o:p>/ig, '&nbsp;',\n            /<\\/?(meta|link|style|o:|v:|x:)[^>]*>((?:.|\\n)*?<\\/(meta|link|style|o:|v:|x:)[^>]*>)?/ig, '', /* external references and namespaced tags */\n            /<\\/o>/g, '',\n            /style=([\"|'])\\s*\\1/g, '', /* empty style attributes */\n            /(<br[^>]*>)?\\n/g, function ($0, $1) { return $1 ? $0 : ' '; } /* phantom extra line feeds */\n        ];\n    },\n\n    applicable: function(html) {\n        return (/class=\"?Mso|style=\"[^\"]*mso-/i).test(html) || (/urn:schemas-microsoft-com:office/).test(html);\n    },\n\n    stripEmptyAnchors: function(html) {\n        return html.replace(/<a([^>]*)>\\s*<\\/a>/ig, function(a, attributes) {\n            if (!attributes || attributes.indexOf(\"href\") < 0) {\n                return \"\";\n            }\n\n            return a;\n        });\n    },\n\n    listType: function(html) {\n        var startingSymbol;\n\n        if (/^(<span [^>]*texhtml[^>]*>)?<span [^>]*(Symbol|Wingdings)[^>]*>/i.test(html)) {\n            startingSymbol = true;\n        }\n\n        html = html.replace(/<\\/?\\w+[^>]*>/g, '').replace(/&nbsp;/g, '\\u00a0');\n\n        if ((!startingSymbol && /^[\\u2022\\u00b7\\u00a7\\u00d8o]\\u00a0+/.test(html)) ||\n            (startingSymbol && /^.\\u00a0+/.test(html))) {\n            return 'ul';\n        }\n\n        if (/^\\s*\\w+[\\.\\)]\\u00a0{2,}/.test(html)) {\n            return 'ol';\n        }\n    },\n\n    _convertToLi: function(p) {\n        var content;\n\n        if (p.childNodes.length == 1) {\n            content = p.firstChild.innerHTML.replace(/^\\w+[\\.\\)](&nbsp;)+ /, \"\");\n        } else {\n            dom.remove(p.firstChild);\n\n            // check for roman numerals\n            if (p.firstChild.nodeType == 3) {\n                if (/^[ivx]+\\.$/i.test(p.firstChild.nodeValue)) {\n                    dom.remove(p.firstChild);\n                }\n            }\n\n            if (/^(&nbsp;|\\s)+$/i.test(p.firstChild.innerHTML)) {\n                dom.remove(p.firstChild);\n            }\n\n            content = p.innerHTML;\n        }\n\n        dom.remove(p);\n\n        return dom.create(document, 'li', { innerHTML: content });\n    },\n\n    lists: function(placeholder) {\n        var blockChildren = $(dom.blockElements.join(','), placeholder),\n            lastMargin = -1,\n            lastType,\n            name,\n            levels = {'ul':{}, 'ol':{}},\n            li = placeholder,\n            i, p, type, margin, list, key, child;\n\n        for (i = 0; i < blockChildren.length; i++) {\n            p = blockChildren[i];\n            type = this.listType(p.innerHTML);\n            name = dom.name(p);\n\n            if (name == \"td\") {\n                continue;\n            }\n\n            if (!type || name != 'p') {\n                if (!p.innerHTML) {\n                    dom.remove(p);\n                } else {\n                    levels = {'ul':{}, 'ol':{}};\n                    li = placeholder;\n                    lastMargin = -1;\n                }\n                continue;\n            }\n\n            margin = parseFloat(p.style.marginLeft || 0);\n            list = levels[type][margin];\n\n            if (margin > lastMargin || !list) {\n                list = dom.create(document, type);\n\n                if (li == placeholder) {\n                    dom.insertBefore(list, p);\n                } else {\n                    li.appendChild(list);\n                }\n\n                levels[type][margin] = list;\n            }\n\n            if (lastType != type) {\n                for (key in levels) {\n                    for (child in levels[key]) {\n                        if ($.contains(list, levels[key][child])) {\n                            delete levels[key][child];\n                        }\n                    }\n                }\n            }\n\n            li = this._convertToLi(p);\n\n            list.appendChild(li);\n            lastMargin = margin;\n            lastType = type;\n        }\n    },\n\n    removeAttributes: function(element) {\n        var attributes = element.attributes,\n            i = attributes.length;\n\n        while (i--) {\n            if (dom.name(attributes[i]) != \"colspan\") {\n                element.removeAttributeNode(attributes[i]);\n            }\n        }\n    },\n\n    createColGroup: function(row) {\n        var cells = row.cells;\n        var table = $(row).closest(\"table\");\n        var colgroup = table.children(\"colgroup\");\n\n        if (cells.length < 2) {\n            return;\n        } else if (colgroup.length) {\n            cells = colgroup.children();\n            colgroup[0].parentNode.removeChild(colgroup[0]);\n        }\n\n        colgroup = $($.map(cells, function(cell) {\n                var width = cell.width;\n                if (width && parseInt(width, 10) !== 0) {\n                    return kendo.format('<col style=\"width:{0}px;\"/>', width);\n                }\n\n                return \"<col />\";\n            }).join(\"\"));\n\n        // jquery 1.9/2.0 discrepancy\n        if (!colgroup.is(\"colgroup\")) {\n            colgroup = $(\"<colgroup/>\").append(colgroup);\n        }\n\n        colgroup.prependTo(table);\n    },\n\n    convertHeaders: function(row) {\n        var cells = row.cells,\n            i,\n            boldedCells = $.map(cells, function(cell) {\n                var child = $(cell).children(\"p\").children(\"strong\")[0];\n\n                if (child && dom.name(child) == \"strong\") {\n                    return child;\n                }\n            });\n\n        if (boldedCells.length == cells.length) {\n            for (i = 0; i < boldedCells.length; i++) {\n                dom.unwrap(boldedCells[i]);\n            }\n\n            $(row).closest(\"table\")\n                .find(\"colgroup\").after(\"<thead></thead>\").end()\n                .find(\"thead\").append(row);\n\n            for (i = 0; i < cells.length; i++) {\n                dom.changeTag(cells[i], \"th\");\n            }\n        }\n    },\n\n    removeParagraphs: function(cells) {\n        var i, j, len, cell, paragraphs;\n\n        for (i = 0; i < cells.length; i++) {\n            this.removeAttributes(cells[i]);\n\n            // remove paragraphs and insert line breaks between them\n            cell = $(cells[i]);\n            paragraphs = cell.children(\"p\");\n\n            for (j = 0, len = paragraphs.length; j < len; j++) {\n                if (j < len - 1) {\n                    dom.insertAfter(dom.create(document, \"br\"), paragraphs[j]);\n                }\n\n                dom.unwrap(paragraphs[j]);\n            }\n        }\n    },\n\n    removeDefaultColors: function(spans) {\n        for (var i = 0; i < spans.length; i++) {\n            if (/^\\s*color:\\s*[^;]*;?$/i.test(spans[i].style.cssText)) {\n                dom.unwrap(spans[i]);\n            }\n        }\n    },\n\n    tables: function(placeholder) {\n        var tables = $(placeholder).find(\"table\"),\n            that = this,\n            rows,\n            firstRow, longestRow, i, j;\n\n        for (i = 0; i < tables.length; i++) {\n            rows = tables[i].rows;\n            longestRow = firstRow = rows[0];\n\n            for (j = 1; j < rows.length; j++) {\n                if (rows[j].cells.length > longestRow.cells.length) {\n                    longestRow = rows[j];\n                }\n            }\n\n            that.createColGroup(longestRow);\n            that.convertHeaders(firstRow);\n\n            that.removeAttributes(tables[i]);\n\n            that.removeParagraphs(tables.eq(i).find(\"td,th\"));\n            that.removeDefaultColors(tables.eq(i).find(\"span\"));\n        }\n    },\n\n    headers: function(placeholder) {\n        var titles = $(placeholder).find(\"p.MsoTitle\");\n\n        for (var i = 0; i < titles.length; i++) {\n            dom.changeTag(titles[i], \"h1\");\n        }\n    },\n\n    clean: function(html) {\n        var that = this, placeholder;\n\n        html = Cleaner.fn.clean.call(that, html);\n        html = that.stripEmptyAnchors(html);\n\n        placeholder = dom.create(document, 'div', {innerHTML: html});\n        that.headers(placeholder);\n        that.lists(placeholder);\n        that.tables(placeholder);\n\n        html = placeholder.innerHTML.replace(/(<[^>]*)\\s+class=\"?[^\"\\s>]*\"?/ig, '$1');\n\n        return html;\n    }\n});\n\nvar WebkitFormatCleaner = Cleaner.extend({\n    init: function() {\n        this.replacements = [\n            /\\s+class=\"Apple-style-span[^\"]*\"/gi, '',\n            /<(div|p|h[1-6])\\s+style=\"[^\"]*\"/gi, '<$1',\n            /^<div>(.*)<\\/div>$/, '$1'\n        ];\n    },\n\n    applicable: function(html) {\n        return (/class=\"?Apple-style-span|style=\"[^\"]*-webkit-nbsp-mode/i).test(html);\n    }\n});\n\nextend(editorNS, {\n    Command: Command,\n    GenericCommand: GenericCommand,\n    InsertHtmlCommand: InsertHtmlCommand,\n    InsertHtmlTool: InsertHtmlTool,\n    UndoRedoStack: UndoRedoStack,\n    TypingHandler: TypingHandler,\n    SystemHandler: SystemHandler,\n    BackspaceHandler: BackspaceHandler,\n    Keyboard: Keyboard,\n    Clipboard: Clipboard,\n    Cleaner: Cleaner,\n    MSWordFormatCleaner: MSWordFormatCleaner,\n    WebkitFormatCleaner: WebkitFormatCleaner\n});\n\nregisterTool(\"insertHtml\", new InsertHtmlTool({template: new ToolTemplate({template: EditorUtils.dropDownListTemplate, title: \"Insert HTML\", initialValue: \"Insert HTML\"})}));\n\n})(window.kendo.jQuery);\n\n(function($) {\n\nvar kendo = window.kendo,\n    Class = kendo.Class,\n    Editor = kendo.ui.editor,\n    formats = kendo.ui.Editor.fn.options.formats,\n    EditorUtils = Editor.EditorUtils,\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate,\n    FormatTool = Editor.FormatTool,\n    dom = Editor.Dom,\n    RangeUtils = Editor.RangeUtils,\n    extend = $.extend,\n    registerTool = Editor.EditorUtils.registerTool,\n    registerFormat = Editor.EditorUtils.registerFormat,\n    KMARKER = \"k-marker\";\n\nvar InlineFormatFinder = Class.extend({\n    init: function(format) {\n        this.format = format;\n    },\n\n    numberOfSiblings: function(referenceNode) {\n        var textNodesCount = 0,\n            elementNodesCount = 0,\n            markerCount = 0,\n            parentNode = referenceNode.parentNode,\n            node;\n\n        for (node = parentNode.firstChild; node; node = node.nextSibling) {\n            if (node != referenceNode) {\n                if (node.className == KMARKER) {\n                    markerCount++;\n                } else if (node.nodeType == 3) {\n                    textNodesCount++;\n                } else {\n                    elementNodesCount++;\n                }\n            }\n        }\n\n        if (markerCount > 1 && parentNode.firstChild.className == KMARKER && parentNode.lastChild.className == KMARKER) {\n            // full node selection\n            return 0;\n        } else {\n            return elementNodesCount + textNodesCount;\n        }\n    },\n\n    findSuitable: function (sourceNode, skip) {\n        if (!skip && this.numberOfSiblings(sourceNode) > 0) {\n            return null;\n        }\n\n        var node = sourceNode.parentNode;\n        var tags = this.format[0].tags;\n\n        while (!dom.ofType(node, tags)) {\n            if (this.numberOfSiblings(node) > 0) {\n                return null;\n            }\n\n            node = node.parentNode;\n        }\n\n        return node;\n    },\n\n    findFormat: function (sourceNode) {\n        var format = this.format,\n            attrEquals = dom.attrEquals,\n            i, len, node, tags, attributes;\n\n        for (i = 0, len = format.length; i < len; i++) {\n            node = sourceNode;\n            tags = format[i].tags;\n            attributes = format[i].attr;\n\n            if (node && dom.ofType(node, tags) && attrEquals(node, attributes)) {\n                return node;\n            }\n\n            while (node) {\n                node = dom.parentOfType(node, tags);\n                if (node && attrEquals(node, attributes)) {\n                    return node;\n                }\n            }\n        }\n\n        return null;\n    },\n\n    isFormatted: function (nodes) {\n        var i, len;\n\n        for (i = 0, len = nodes.length; i < len; i++) {\n            if (this.findFormat(nodes[i])) {\n                return true;\n            }\n        }\n        return false;\n    }\n});\n\nvar InlineFormatter = Class.extend({\n    init: function(format, values) {\n        this.finder = new InlineFormatFinder(format);\n        this.attributes = extend({}, format[0].attr, values);\n        this.tag = format[0].tags[0];\n    },\n\n    wrap: function(node) {\n        return dom.wrap(node, dom.create(node.ownerDocument, this.tag, this.attributes));\n    },\n\n    activate: function(range, nodes) {\n        if (this.finder.isFormatted(nodes)) {\n            this.split(range);\n            this.remove(nodes);\n        } else {\n            this.apply(nodes);\n        }\n    },\n\n    toggle: function (range) {\n        var nodes = RangeUtils.textNodes(range);\n\n        if (nodes.length > 0) {\n            this.activate(range, nodes);\n        }\n    },\n\n    apply: function (nodes) {\n        var formatNodes = [];\n        var i, l, node, formatNode;\n\n        for (i = 0, l = nodes.length; i < l; i++) {\n            node = nodes[i];\n            formatNode = this.finder.findSuitable(node);\n            if (formatNode) {\n                dom.attr(formatNode, this.attributes);\n            } else {\n                while (!dom.isBlock(node.parentNode) && node.parentNode.childNodes.length == 1) {\n                    node = node.parentNode;\n                }\n\n                formatNode = this.wrap(node);\n            }\n\n            formatNodes.push(formatNode);\n        }\n\n        this.consolidate(formatNodes);\n    },\n\n    remove: function (nodes) {\n        var i, l, formatNode;\n\n        for (i = 0, l = nodes.length; i < l; i++) {\n            formatNode = this.finder.findFormat(nodes[i]);\n            if (formatNode) {\n                if (this.attributes && this.attributes.style) {\n                    dom.unstyle(formatNode, this.attributes.style);\n                    if (!formatNode.style.cssText && !formatNode.attributes[\"class\"]) {\n                        dom.unwrap(formatNode);\n                    }\n                } else {\n                    dom.unwrap(formatNode);\n                }\n            }\n        }\n    },\n\n    split: function (range) {\n        var nodes = RangeUtils.textNodes(range);\n        var l = nodes.length;\n        var i, formatNode;\n\n        if (l > 0) {\n            for (i = 0; i < l; i++) {\n                formatNode = this.finder.findFormat(nodes[i]);\n                if (formatNode) {\n                    RangeUtils.split(range, formatNode, true);\n                }\n            }\n        }\n    },\n\n    consolidate: function (nodes) {\n        var node, last;\n\n        while (nodes.length > 1) {\n            node = nodes.pop();\n            last = nodes[nodes.length - 1];\n\n            if (node.previousSibling && node.previousSibling.className == KMARKER) {\n                last.appendChild(node.previousSibling);\n            }\n\n            if (node.tagName == last.tagName && node.previousSibling == last && node.style.cssText == last.style.cssText) {\n                while (node.firstChild) {\n                    last.appendChild(node.firstChild);\n                }\n                dom.remove(node);\n            }\n        }\n    }\n});\n\nvar GreedyInlineFormatFinder = InlineFormatFinder.extend({\n    init: function(format, greedyProperty) {\n        this.format = format;\n        this.greedyProperty = greedyProperty;\n        InlineFormatFinder.fn.init.call(this, format);\n    },\n\n    getInlineCssValue: function(node) {\n        var attributes = node.attributes;\n        var trim = $.trim;\n        var i, l, attribute, name, attributeValue, css, pair, cssIndex, len;\n        var propertyAndValue, property, value;\n\n        if (!attributes) {\n            return;\n        }\n\n        for (i = 0, l = attributes.length; i < l; i++) {\n            attribute = attributes[i];\n            name = attribute.nodeName;\n            attributeValue = attribute.nodeValue;\n\n            if (attribute.specified && name == \"style\") {\n\n                css = trim(attributeValue || node.style.cssText).split(\";\");\n\n                for (cssIndex = 0, len = css.length; cssIndex < len; cssIndex++) {\n                    pair = css[cssIndex];\n                    if (pair.length) {\n                        propertyAndValue = pair.split(\":\");\n                        property = trim(propertyAndValue[0].toLowerCase());\n                        value = trim(propertyAndValue[1]);\n\n                        if (property != this.greedyProperty) {\n                            continue;\n                        }\n\n                        return property.indexOf(\"color\") >= 0 ? dom.toHex(value) : value;\n                    }\n                }\n            }\n        }\n    },\n\n    getFormatInner: function (node) {\n        var $node = $(dom.isDataNode(node) ? node.parentNode : node);\n        var parents = $node.parentsUntil(\"[contentEditable]\").addBack().toArray().reverse();\n        var i, len, value;\n\n        for (i = 0, len = parents.length; i < len; i++) {\n            value = this.greedyProperty == \"className\" ? parents[i].className : this.getInlineCssValue(parents[i]);\n            if (value) {\n                return value;\n            }\n        }\n\n        return \"inherit\";\n    },\n\n    getFormat: function (nodes) {\n        var result = this.getFormatInner(nodes[0]), i, len;\n\n        for (i = 1, len = nodes.length; i < len; i++) {\n            if (result != this.getFormatInner(nodes[i])) {\n                return \"\";\n            }\n        }\n\n        return result;\n    },\n\n    isFormatted: function (nodes) {\n        return this.getFormat(nodes) !== \"\";\n    }\n});\n\nvar GreedyInlineFormatter = InlineFormatter.extend({\n    init: function(format, values, greedyProperty) {\n        InlineFormatter.fn.init.call(this, format, values);\n\n        this.values = values;\n        this.finder = new GreedyInlineFormatFinder(format, greedyProperty);\n\n        if (greedyProperty) {\n            this.greedyProperty = kendo.toCamelCase(greedyProperty);\n        }\n\n    },\n\n    activate: function(range, nodes) {\n        var greedyProperty = this.greedyProperty;\n        var action = \"apply\";\n\n        this.split(range);\n\n        if (greedyProperty && this.values.style[greedyProperty] == \"inherit\") {\n            action = \"remove\";\n        }\n\n        this[action](nodes);\n    }\n});\n\nvar InlineFormatTool = FormatTool.extend({\n    init: function(options) {\n        FormatTool.fn.init.call(this, extend(options, {\n            finder: new InlineFormatFinder(options.format),\n            formatter: function () { return new InlineFormatter(options.format); }\n        }));\n    }\n});\n\nvar DelayedExecutionTool = Tool.extend({\n    update: function(ui, nodes) {\n        var list = ui.data(this.type);\n\n        list.close();\n        list.value(this.finder.getFormat(nodes));\n    }\n});\n\nvar FontTool = DelayedExecutionTool.extend({\n    init: function(options) {\n        Tool.fn.init.call(this, options);\n\n        // IE has single selection hence we are using select box instead of combobox\n        this.type = (kendo.support.browser.msie || kendo.support.touch) ? \"kendoDropDownList\" : \"kendoComboBox\";\n        this.format = [{ tags: [\"span\"] }];\n        this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr);\n    },\n\n    command: function (commandArguments) {\n        var options = this.options,\n            format = this.format,\n            style = {};\n\n        return new Editor.FormatCommand(extend(commandArguments, {\n            formatter: function () {\n                style[options.domAttr] = commandArguments.value;\n\n                return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n            }\n        }));\n    },\n\n    initialize: function (ui, initOptions) {\n        var editor = initOptions.editor,\n            options = this.options,\n            toolName = options.name,\n            dataSource,\n            defaultValue = [];\n\n        if (options.defaultValue) {\n           defaultValue = [{\n                text: editor.options.messages[options.defaultValue[0].text],\n                value: options.defaultValue[0].value\n           }];\n        }\n\n        dataSource = defaultValue.concat(options.items ? options.items : (editor.options[toolName] || [] ));\n\n        ui[this.type]({\n            dataTextField: \"text\",\n            dataValueField: \"value\",\n            dataSource: dataSource,\n            change: function () {\n                Tool.exec(editor, toolName, this.value());\n            },\n            highlightFirst: false\n        });\n\n        ui.closest(\".k-widget\").removeClass(\"k-\" + toolName).find(\"*\").addBack().attr(\"unselectable\", \"on\");\n\n        ui.data(this.type).value(\"inherit\");\n    }\n\n});\n\nvar ColorTool = Tool.extend({\n    init: function(options) {\n        Tool.fn.init.call(this, options);\n\n        this.format = [{ tags: [\"span\"] }];\n        this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr);\n    },\n\n    options: {\n        palette: \"websafe\"\n    },\n\n    update: function() {\n        this._widget.close();\n    },\n\n    command: function (commandArguments) {\n        var options = this.options,\n            format = this.format,\n            style = {};\n\n        return new Editor.FormatCommand(extend(commandArguments, {\n            formatter: function () {\n                style[options.domAttr] = commandArguments.value;\n\n                return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n            }\n        }));\n    },\n\n    initialize: function(ui, initOptions) {\n        var editor = initOptions.editor,\n            toolName = this.name,\n            options =  extend({}, ColorTool.fn.options, this.options),\n            palette = options.palette;\n\n        ui = this._widget = new kendo.ui.ColorPicker(ui, {\n            value: $.isArray(palette) ? palette[0] : \"#000\",\n            toolIcon: \"k-\" + options.name,\n            palette: palette,\n            change: function() {\n                var color = ui.value();\n                if (color) {\n                    Tool.exec(editor, toolName, color);\n                }\n                editor.focus();\n            },\n            activate: function(e) {\n                e.preventDefault();\n                ui.trigger(\"change\");\n            }\n        });\n        ui.wrapper\n            .attr({ title: initOptions.title, unselectable: \"on\" })\n            .find(\"*\").attr(\"unselectable\", \"on\");\n    }\n});\n\nextend(Editor, {\n    InlineFormatFinder: InlineFormatFinder,\n    InlineFormatter: InlineFormatter,\n    DelayedExecutionTool: DelayedExecutionTool,\n    GreedyInlineFormatFinder: GreedyInlineFormatFinder,\n    GreedyInlineFormatter: GreedyInlineFormatter,\n    InlineFormatTool: InlineFormatTool,\n    FontTool: FontTool,\n    ColorTool: ColorTool\n});\n\nregisterFormat(\"bold\", [ { tags: [\"strong\", \"b\"] }, { tags: [\"span\"], attr: { style: { fontWeight: \"bold\"}} } ]);\nregisterTool(\"bold\", new InlineFormatTool({ key: \"B\", ctrl: true, format: formats.bold, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Bold\"}) }));\n\nregisterFormat(\"italic\", [ { tags: [\"em\", \"i\"] }, { tags: [\"span\"], attr: { style: { fontStyle: \"italic\"}} } ]);\nregisterTool(\"italic\", new InlineFormatTool({ key: \"I\", ctrl: true, format: formats.italic, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Italic\"})}));\n\nregisterFormat(\"underline\", [ { tags: [\"span\"], attr: { style: { textDecoration: \"underline\"}} }, { tags: [\"u\"] } ]);\nregisterTool(\"underline\", new InlineFormatTool({ key: \"U\", ctrl: true, format: formats.underline, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Underline\"})}));\n\nregisterFormat(\"strikethrough\", [ { tags: [\"del\", \"strike\"] }, { tags: [\"span\"], attr: { style: { textDecoration: \"line-through\"}} } ]);\nregisterTool(\"strikethrough\", new InlineFormatTool({format: formats.strikethrough, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Strikethrough\"})}));\n\nregisterFormat(\"superscript\", [ { tags: [\"sup\"] } ]);\nregisterTool(\"superscript\", new InlineFormatTool({format: formats.superscript, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Superscript\"})}));\n\nregisterFormat(\"subscript\", [ { tags: [\"sub\"] } ]);\nregisterTool(\"subscript\", new InlineFormatTool({format: formats.subscript, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Subscript\"})}));\n\nregisterTool(\"foreColor\", new ColorTool({cssAttr:\"color\", domAttr:\"color\", name:\"foreColor\", template: new ToolTemplate({template: EditorUtils.colorPickerTemplate, title: \"Color\"})}));\n\nregisterTool(\"backColor\", new ColorTool({cssAttr:\"background-color\", domAttr: \"backgroundColor\", name:\"backColor\", template: new ToolTemplate({template: EditorUtils.colorPickerTemplate, title: \"Background Color\"})}));\n\nregisterTool(\"fontName\", new FontTool({cssAttr:\"font-family\", domAttr: \"fontFamily\", name:\"fontName\", defaultValue: [{ text: \"fontNameInherit\",  value: \"inherit\" }], template: new ToolTemplate({template: EditorUtils.comboBoxTemplate, title: \"Font Name\"})}));\n\nregisterTool(\"fontSize\", new FontTool({cssAttr:\"font-size\", domAttr:\"fontSize\", name:\"fontSize\", defaultValue: [{ text: \"fontSizeInherit\",  value: \"inherit\" }], template: new ToolTemplate({template: EditorUtils.comboBoxTemplate, title: \"Font Size\"})}));\n\n})(window.kendo.jQuery);\n\n(function($) {\n\nvar kendo = window.kendo,\n    Class = kendo.Class,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    formats = kendo.ui.Editor.fn.options.formats,\n    dom = Editor.Dom,\n    Command = Editor.Command,\n    ToolTemplate = Editor.ToolTemplate,\n    FormatTool = Editor.FormatTool,\n    EditorUtils = Editor.EditorUtils,\n    registerTool = EditorUtils.registerTool,\n    registerFormat = EditorUtils.registerFormat,\n    RangeUtils = Editor.RangeUtils;\n\nvar BlockFormatFinder = Class.extend({\n    init: function(format) {\n        this.format = format;\n    },\n\n    contains: function(node, children) {\n        var i, len, child;\n\n        for (i = 0, len = children.length; i < len; i++) {\n            child = children[i];\n            if (!child || !dom.isAncestorOrSelf(node, child)) {\n                return false;\n            }\n        }\n\n        return true;\n    },\n\n    findSuitable: function (nodes) {\n        var format = this.format,\n            suitable = [],\n            i, len, candidate;\n\n        for (i = 0, len = nodes.length; i < len; i++) {\n            for (var f = format.length - 1; f >= 0; f--) {\n                candidate = dom.ofType(nodes[i], format[f].tags) ? nodes[i] : dom.parentOfType(nodes[i], format[f].tags);\n                if (candidate) {\n                    break;\n                }\n            }\n\n            if (!candidate || candidate.contentEditable === 'true') {\n                return [];\n            }\n\n            if ($.inArray(candidate, suitable) < 0) {\n                suitable.push(candidate);\n            }\n        }\n\n        for (i = 0, len = suitable.length; i < len; i++) {\n            if (this.contains(suitable[i], suitable)) {\n                return [suitable[i]];\n            }\n        }\n\n        return suitable;\n    },\n\n    findFormat: function (sourceNode) {\n        var format = this.format,\n            i, len, node, tags, attributes;\n        var editableParent = dom.editableParent(sourceNode);\n\n        for (i = 0, len = format.length; i < len; i++) {\n            node = sourceNode;\n            tags = format[i].tags;\n            attributes = format[i].attr;\n\n            while (node && dom.isAncestorOf(editableParent, node)) {\n                if (dom.ofType(node, tags) && dom.attrEquals(node, attributes)) {\n                    return node;\n                }\n\n                node = node.parentNode;\n            }\n        }\n        return null;\n    },\n\n    getFormat: function (nodes) {\n        var that = this,\n            findFormat = function(node) {\n                    return that.findFormat(dom.isDataNode(node) ? node.parentNode : node);\n                },\n            result = findFormat(nodes[0]),\n            i, len;\n\n        if (!result) {\n            return \"\";\n        }\n\n        for (i = 1, len = nodes.length; i < len; i++) {\n            if (result != findFormat(nodes[i])) {\n                return \"\";\n            }\n        }\n\n        return result.nodeName.toLowerCase();\n    },\n\n    isFormatted: function (nodes) {\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            if (!this.findFormat(nodes[i])) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n});\n\nvar BlockFormatter = Class.extend({\n    init: function (format, values) {\n        this.format = format;\n        this.values = values;\n        this.finder = new BlockFormatFinder(format);\n    },\n\n    wrap: function(tag, attributes, nodes) {\n        var commonAncestor = nodes.length == 1 ? dom.blockParentOrBody(nodes[0]) : dom.commonAncestor.apply(null, nodes);\n\n        if (dom.isInline(commonAncestor)) {\n            commonAncestor = dom.blockParentOrBody(commonAncestor);\n        }\n\n        var ancestors = dom.significantChildNodes(commonAncestor),\n            position = dom.findNodeIndex(ancestors[0]),\n            wrapper = dom.create(commonAncestor.ownerDocument, tag, attributes),\n            i, ancestor;\n\n        for (i = 0; i < ancestors.length; i++) {\n            ancestor = ancestors[i];\n            if (dom.isBlock(ancestor)) {\n                dom.attr(ancestor, attributes);\n\n                if (wrapper.childNodes.length) {\n                    dom.insertBefore(wrapper, ancestor);\n                    wrapper = wrapper.cloneNode(false);\n                }\n\n                position = dom.findNodeIndex(ancestor) + 1;\n\n                continue;\n            }\n\n            wrapper.appendChild(ancestor);\n        }\n\n        if (wrapper.firstChild) {\n            dom.insertAt(commonAncestor, wrapper, position);\n        }\n    },\n\n    apply: function (nodes) {\n        var format, values = this.values;\n\n        function attributes(format) {\n            return extend({}, format && format.attr, values);\n        }\n\n        var images = dom.filter(\"img\", nodes);\n        var imageFormat = EditorUtils.formatByName(\"img\", this.format);\n        var imageAttributes = attributes(imageFormat);\n        $.each(images, function() {\n            dom.attr(this, imageAttributes);\n        });\n\n        // only images were selected, no need to wrap\n        if (images.length == nodes.length) {\n            return;\n        }\n\n        var nonImages = dom.filter(\"img\", nodes, true);\n        var formatNodes = this.finder.findSuitable(nonImages);\n\n        if (formatNodes.length) {\n            for (var i = 0, len = formatNodes.length; i < len; i++) {\n                format = EditorUtils.formatByName(dom.name(formatNodes[i]), this.format);\n                dom.attr(formatNodes[i], attributes(format));\n            }\n        } else {\n            format = this.format[0];\n            this.wrap(format.tags[0], attributes(format), nonImages);\n        }\n    },\n\n    remove: function (nodes) {\n        var i, l, formatNode, namedFormat, name;\n\n        for (i = 0, l = nodes.length; i < l; i++) {\n            formatNode = this.finder.findFormat(nodes[i]);\n            if (formatNode) {\n                name = dom.name(formatNode);\n                if (name == \"div\" && !formatNode.getAttribute(\"class\")) {\n                    dom.unwrap(formatNode);\n                } else {\n                    namedFormat = EditorUtils.formatByName(name, this.format);\n                    if (namedFormat.attr.style) {\n                        dom.unstyle(formatNode, namedFormat.attr.style);\n                    }\n                    if (namedFormat.attr.className) {\n                        dom.removeClass(formatNode, namedFormat.attr.className);\n                    }\n                }\n            }\n        }\n    },\n\n    toggle: function (range) {\n        var that = this,\n            nodes = RangeUtils.nodes(range);\n\n        if (that.finder.isFormatted(nodes)) {\n            that.remove(nodes);\n        } else {\n            that.apply(nodes);\n        }\n    }\n});\n\nvar GreedyBlockFormatter = Class.extend({\n    init: function (format, values) {\n        var that = this;\n        that.format = format;\n        that.values = values;\n        that.finder = new BlockFormatFinder(format);\n    },\n\n    apply: function (nodes) {\n        var format = this.format;\n        var blocks = dom.blockParents(nodes);\n        var formatTag = format[0].tags[0];\n        var i, len, list, formatter, range;\n        var element;\n        var tagName;\n\n        if (blocks.length) {\n            for (i = 0, len = blocks.length; i < len; i++) {\n                tagName = dom.name(blocks[i]);\n\n                if (tagName == \"li\") {\n                    list = blocks[i].parentNode;\n                    formatter = new Editor.ListFormatter(list.nodeName.toLowerCase(), formatTag);\n                    range = this.editor.createRange();\n                    range.selectNode(blocks[i]);\n                    formatter.toggle(range);\n                } else if (formatTag && (tagName == \"td\" || blocks[i].attributes.contentEditable)) {\n                    new BlockFormatter(format, this.values).apply(blocks[i].childNodes);\n                } else {\n                    element = dom.changeTag(blocks[i], formatTag);\n                    dom.attr(element, format[0].attr);\n                }\n            }\n        } else {\n            new BlockFormatter(format, this.values).apply(nodes);\n        }\n    },\n\n    toggle: function (range) {\n        var nodes = RangeUtils.textNodes(range);\n        if (!nodes.length) {\n            range.selectNodeContents(range.commonAncestorContainer);\n            nodes = RangeUtils.textNodes(range);\n            if (!nodes.length) {\n                nodes = dom.significantChildNodes(range.commonAncestorContainer);\n            }\n        }\n\n        this.apply(nodes);\n    }\n});\n\nvar FormatCommand = Command.extend({\n    init: function (options) {\n        options.formatter = options.formatter();\n        Command.fn.init.call(this, options);\n    }\n});\n\nvar BlockFormatTool = FormatTool.extend({ init: function (options) {\n        FormatTool.fn.init.call(this, extend(options, {\n            finder: new BlockFormatFinder(options.format),\n            formatter: function () {\n                return new BlockFormatter(options.format);\n            }\n        }));\n    }\n});\n\nextend(Editor, {\n    BlockFormatFinder: BlockFormatFinder,\n    BlockFormatter: BlockFormatter,\n    GreedyBlockFormatter: GreedyBlockFormatter,\n    FormatCommand: FormatCommand,\n    BlockFormatTool: BlockFormatTool\n});\n\nvar listElements = [\"ul\",\"ol\",\"li\"];\n\nregisterFormat(\"justifyLeft\", [\n    { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"left\" }} },\n    { tags: [\"img\"], attr: { style: { \"float\": \"left\", display: \"\", marginLeft: \"\", marginRight: \"\" }} },\n    { tags: listElements, attr: { style: { textAlign: \"left\", listStylePosition: \"\" }} }\n]);\nregisterTool(\"justifyLeft\", new BlockFormatTool({\n    format: formats.justifyLeft,\n    template: new ToolTemplate({\n        template: EditorUtils.buttonTemplate,\n        title: \"Justify Left\"\n    })\n}));\n\nregisterFormat(\"justifyCenter\", [\n    { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"center\" }} },\n    { tags: [\"img\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" }} },\n    { tags: listElements, attr: { style: { textAlign: \"center\", listStylePosition: \"inside\" }} }\n]);\nregisterTool(\"justifyCenter\", new BlockFormatTool({\n    format: formats.justifyCenter,\n    template: new ToolTemplate({\n        template: EditorUtils.buttonTemplate,\n        title: \"Justify Center\"\n    })\n}));\n\nregisterFormat(\"justifyRight\", [\n    { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"right\" }} },\n    { tags: [\"img\"], attr: { style: { \"float\": \"right\", display: \"\", marginLeft: \"\", marginRight: \"\" }} },\n    { tags: listElements, attr: { style: { textAlign: \"right\", listStylePosition: \"inside\" }} }\n]);\nregisterTool(\"justifyRight\", new BlockFormatTool({\n    format: formats.justifyRight,\n    template: new ToolTemplate({\n        template: EditorUtils.buttonTemplate,\n        title: \"Justify Right\"\n    })\n}));\n\nregisterFormat(\"justifyFull\", [\n    { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"justify\" }} },\n    { tags: [\"img\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" }} },\n    { tags: listElements, attr: { style: { textAlign: \"justify\", listStylePosition: \"\" }} }\n]);\nregisterTool(\"justifyFull\", new BlockFormatTool({\n    format: formats.justifyFull,\n    template: new ToolTemplate({\n        template: EditorUtils.buttonTemplate,\n        title: \"Justify Full\"\n    })\n}));\n\n})(window.kendo.jQuery);\n\n(function($) {\n\n// Imports ================================================================\nvar kendo = window.kendo,\n    extend = $.extend,\n    editorNS = kendo.ui.editor,\n    dom = editorNS.Dom,\n    Command = editorNS.Command,\n    Tool = editorNS.Tool,\n    BlockFormatter = editorNS.BlockFormatter,\n    normalize = dom.normalize,\n    RangeUtils = editorNS.RangeUtils,\n    registerTool = editorNS.EditorUtils.registerTool;\n\nvar ParagraphCommand = Command.extend({\n    init: function(options) {\n        this.options = options;\n        Command.fn.init.call(this, options);\n    },\n\n    _insertMarker: function(doc, range) {\n        var marker = dom.create(doc, 'a'), container;\n        marker.className = \"k-marker\";\n\n        range.insertNode(marker);\n\n        if (!marker.parentNode) {\n            // inserting paragraph in Firefox full body range\n            container = range.commonAncestorContainer;\n            container.innerHTML = \"\";\n            container.appendChild(marker);\n        }\n\n        normalize(marker.parentNode);\n\n        return marker;\n    },\n\n    _moveFocus: function(range, candidate) {\n        if (dom.isEmpty(candidate)) {\n            range.setStartBefore(candidate);\n        } else {\n            range.selectNodeContents(candidate);\n\n            var focusNode = RangeUtils.textNodes(range)[0];\n\n            if (!focusNode) {\n                while (candidate.childNodes.length && !dom.is(candidate.firstChild, \"br\")) {\n                    candidate = candidate.firstChild;\n                }\n\n                focusNode = candidate;\n            }\n\n            if (dom.isEmpty(focusNode)) {\n                range.setStartBefore(focusNode);\n            } else {\n                range.selectNodeContents(focusNode);\n            }\n        }\n    },\n\n    shouldTrim: function(range) {\n        var blocks = 'p,h1,h2,h3,h4,h5,h6'.split(','),\n            startInBlock = dom.parentOfType(range.startContainer, blocks),\n            endInBlock = dom.parentOfType(range.endContainer, blocks);\n        return (startInBlock && !endInBlock) || (!startInBlock && endInBlock);\n    },\n\n    _blankAfter: function (node) {\n        while (node && (dom.isMarker(node) || dom.stripBom(node.nodeValue) === \"\")) {\n            node = node.nextSibling;\n        }\n\n        return !node;\n    },\n\n    exec: function () {\n        var range = this.getRange(),\n            doc = RangeUtils.documentFromRange(range),\n            parent, previous, next,\n            emptyParagraphContent = editorNS.emptyElementContent,\n            paragraph, marker, li, heading, rng,\n            shouldTrim = this.shouldTrim(range);\n\n        range.deleteContents();\n\n        marker = this._insertMarker(doc, range);\n\n        li = dom.closestEditableOfType(marker, ['li']);\n        heading = dom.closestEditableOfType(marker, 'h1,h2,h3,h4,h5,h6'.split(','));\n\n        if (li) {\n            // hitting 'enter' in empty li\n            if (dom.emptyNode(li)) {\n                paragraph = dom.create(doc, 'p');\n\n                if (li.nextSibling) {\n                    rng = range.cloneRange();\n                    rng.selectNode(li);\n\n                    RangeUtils.split(rng, li.parentNode);\n                }\n\n                dom.insertAfter(paragraph, li.parentNode);\n                dom.remove(li.parentNode.childNodes.length == 1 ? li.parentNode : li);\n                paragraph.innerHTML = emptyParagraphContent;\n                next = paragraph;\n            }\n        } else if (heading && this._blankAfter(marker)) {\n            paragraph = dom.create(doc, 'p');\n\n            dom.insertAfter(paragraph, heading);\n            paragraph.innerHTML = emptyParagraphContent;\n            dom.remove(marker);\n            next = paragraph;\n        }\n\n        if (!next) {\n            if (!(li || heading)) {\n                new BlockFormatter([{ tags: ['p']}]).apply([marker]);\n            }\n\n            range.selectNode(marker);\n\n            parent = dom.parentOfType(marker, [li ? 'li' : heading ? dom.name(heading) : 'p']);\n\n            RangeUtils.split(range, parent, shouldTrim);\n\n            previous = parent.previousSibling;\n\n            if (dom.is(previous, 'li') && previous.firstChild && !dom.is(previous.firstChild, 'br')) {\n                previous = previous.firstChild;\n            }\n\n            next = parent.nextSibling;\n\n            this.clean(previous);\n            this.clean(next, { links: true });\n\n            if (dom.is(next, 'li') && next.firstChild && !dom.is(next.firstChild, 'br')) {\n                next = next.firstChild;\n            }\n\n            dom.remove(parent);\n\n            // normalize updates the caret display in Gecko\n            normalize(previous);\n        }\n\n        normalize(next);\n\n        this._moveFocus(range, next);\n\n        range.collapse(true);\n\n        dom.scrollTo(next);\n\n        RangeUtils.selectRange(range);\n    },\n\n    clean: function(node, options) {\n        var root = node;\n\n        if (node.firstChild && dom.is(node.firstChild, 'br')) {\n            dom.remove(node.firstChild);\n        }\n\n        if (dom.isDataNode(node) && !node.nodeValue) {\n            node = node.parentNode;\n        }\n\n        if (node) {\n            while (node.firstChild && node.firstChild.nodeType == 1) {\n                node = node.firstChild;\n            }\n\n            if (!dom.isEmpty(node) && /^\\s*$/.test(node.innerHTML)) {\n                node.innerHTML = editorNS.emptyElementContent;\n            }\n\n            if (options && options.links) {\n                while (node != root) {\n                    if (dom.is(node, \"a\") && dom.emptyNode(node)) {\n                        dom.unwrap(node);\n                        break;\n                    }\n                    node = node.parentNode;\n                }\n            }\n        }\n    }\n});\n\nvar NewLineCommand = Command.extend({\n    init: function(options) {\n        this.options = options;\n        Command.fn.init.call(this, options);\n    },\n\n    exec: function () {\n        var range = this.getRange();\n        var br = dom.create(RangeUtils.documentFromRange(range), 'br');\n        var filler;\n        var browser = kendo.support.browser;\n        var oldIE = browser.msie && browser.version < 11;\n\n        range.deleteContents();\n        range.insertNode(br);\n\n        normalize(br.parentNode);\n\n        if (!oldIE && (!br.nextSibling || dom.isWhitespace(br.nextSibling))) {\n            // Gecko and WebKit cannot put the caret after only one br.\n            filler = br.cloneNode(true);\n            filler.className = 'k-br';\n            dom.insertAfter(filler, br);\n        }\n\n        range.setStartAfter(br);\n        range.collapse(true);\n\n        dom.scrollTo(br.nextSibling || br);\n\n        RangeUtils.selectRange(range);\n    }\n});\n\nextend(editorNS, {\n    ParagraphCommand: ParagraphCommand,\n    NewLineCommand: NewLineCommand\n});\n\nregisterTool(\"insertLineBreak\", new Tool({ key: 13, shift: true, command: NewLineCommand }));\nregisterTool(\"insertParagraph\", new Tool({ key: 13, command: ParagraphCommand }));\n\n})(window.kendo.jQuery);\n\n(function($) {\n\n// Imports ================================================================\nvar kendo = window.kendo,\n    Class = kendo.Class,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    dom = Editor.Dom,\n    RangeUtils = Editor.RangeUtils,\n    EditorUtils = Editor.EditorUtils,\n    Command = Editor.Command,\n    ToolTemplate = Editor.ToolTemplate,\n    FormatTool = Editor.FormatTool,\n    BlockFormatFinder = Editor.BlockFormatFinder,\n    textNodes = RangeUtils.textNodes,\n    registerTool = Editor.EditorUtils.registerTool;\n\nvar ListFormatFinder = BlockFormatFinder.extend({\n    init: function(tag) {\n        this.tag = tag;\n        var tags = this.tags = [tag == 'ul' ? 'ol' : 'ul', tag];\n\n        BlockFormatFinder.fn.init.call(this, [{ tags: tags}]);\n    },\n\n    isFormatted: function (nodes) {\n        var formatNodes = [];\n        var formatNode, i;\n\n        for (i = 0; i < nodes.length; i++) {\n            formatNode = this.findFormat(nodes[i]);\n\n            if (formatNode && dom.name(formatNode) == this.tag) {\n                formatNodes.push(formatNode);\n            }\n        }\n\n        if (formatNodes.length < 1) {\n            return false;\n        }\n\n        if (formatNodes.length != nodes.length) {\n            return false;\n        }\n\n        // check if sequential lists are selected\n        for (i = 0; i < formatNodes.length; i++) {\n            if (formatNodes[i].parentNode != formatNode.parentNode) {\n                break;\n            }\n\n            if (formatNodes[i] != formatNode) {\n                return false;\n            }\n        }\n\n        return true;\n    },\n\n    findSuitable: function (nodes) {\n        var candidate = this.findFormat(nodes[0]);\n\n        if (candidate && dom.name(candidate) == this.tag) {\n            return candidate;\n        }\n\n        return null;\n    }\n\n});\n\nvar ListFormatter = Class.extend({\n    init: function(tag, unwrapTag) {\n        var that = this;\n        that.finder = new ListFormatFinder(tag);\n        that.tag = tag;\n        that.unwrapTag = unwrapTag;\n    },\n\n    isList: function(node) {\n        var name = dom.name(node);\n\n        return name == \"ul\" || name == \"ol\" || name == \"dl\";\n    },\n\n    wrap: function(list, nodes) {\n        var li = dom.create(list.ownerDocument, \"li\"),\n            i, node;\n\n        for (i = 0; i < nodes.length; i++) {\n            node = nodes[i];\n\n            if (dom.is(node, 'li')) {\n                list.appendChild(node);\n                continue;\n            }\n\n            if (this.isList(node)) {\n                while (node.firstChild) {\n                    list.appendChild(node.firstChild);\n                }\n                continue;\n            }\n\n            if (dom.is(node, \"td\")) {\n                while (node.firstChild) {\n                    li.appendChild(node.firstChild);\n                }\n                list.appendChild(li);\n                node.appendChild(list);\n                list = list.cloneNode(false);\n                li = li.cloneNode(false);\n                continue;\n            }\n\n            li.appendChild(node);\n\n            if (dom.isBlock(node)) {\n                list.appendChild(li);\n                dom.unwrap(node);\n                li = li.cloneNode(false);\n            }\n        }\n\n        if (li.firstChild) {\n            list.appendChild(li);\n        }\n    },\n\n    containsAny: function(parent, nodes) {\n        for (var i = 0; i < nodes.length; i++) {\n            if (dom.isAncestorOrSelf(parent, nodes[i])) {\n                return true;\n            }\n        }\n\n        return false;\n    },\n\n    suitable: function (candidate, nodes) {\n        if (candidate.className == \"k-marker\") {\n            var sibling = candidate.nextSibling;\n\n            if (sibling && dom.isBlock(sibling)) {\n                return false;\n            }\n\n            sibling = candidate.previousSibling;\n\n            if (sibling && dom.isBlock(sibling)) {\n                return false;\n            }\n        }\n\n        return this.containsAny(candidate, nodes) || dom.isInline(candidate) || candidate.nodeType == 3;\n    },\n\n    _parentLists: function(node) {\n        var editable = dom.closestEditable(node);\n\n        return $(node).parentsUntil(editable, \"ul,ol\");\n    },\n\n    split: function (range) {\n        var nodes = textNodes(range);\n        var start, end, parents;\n\n        if (nodes.length) {\n            start = dom.parentOfType(nodes[0], ['li']);\n            end = dom.parentOfType(nodes[nodes.length - 1], ['li']);\n            range.setStartBefore(start);\n            range.setEndAfter(end);\n\n            for (var i = 0, l = nodes.length; i < l; i++) {\n                var formatNode = this.finder.findFormat(nodes[i]);\n                if (formatNode) {\n                    parents = this._parentLists(formatNode);\n                    if (parents.length) {\n                        RangeUtils.split(range, parents.last()[0], true);\n                    } else {\n                        RangeUtils.split(range, formatNode, true);\n                    }\n                }\n            }\n        }\n    },\n\n    merge: function(tag, formatNode) {\n        var prev = formatNode.previousSibling, next;\n\n        while (prev && (prev.className == \"k-marker\" || (prev.nodeType == 3 && dom.isWhitespace(prev)))) {\n            prev = prev.previousSibling;\n        }\n\n        // merge with previous list\n        if (prev && dom.name(prev) == tag) {\n            while(formatNode.firstChild) {\n                prev.appendChild(formatNode.firstChild);\n            }\n            dom.remove(formatNode);\n            formatNode = prev;\n        }\n\n        next = formatNode.nextSibling;\n        while (next && (next.className == \"k-marker\" || (next.nodeType == 3 && dom.isWhitespace(next)))) {\n            next = next.nextSibling;\n        }\n\n        // merge with next list\n        if (next && dom.name(next) == tag) {\n            while(formatNode.lastChild) {\n                next.insertBefore(formatNode.lastChild, next.firstChild);\n            }\n            dom.remove(formatNode);\n        }\n    },\n\n    breakable: function(node) {\n        return (\n            node != node.ownerDocument.body &&\n            !/table|tbody|tr|td/.test(dom.name(node)) &&\n            !node.attributes.contentEditable\n        );\n    },\n\n    applyOnSection: function (section, nodes) {\n        var tag = this.tag;\n        var commonAncestor = dom.closestSplittableParent(nodes);\n\n        var ancestors = [];\n\n        var formatNode = this.finder.findSuitable(nodes);\n\n        if (!formatNode) {\n            formatNode = new ListFormatFinder(tag == \"ul\" ? \"ol\" : \"ul\").findSuitable(nodes);\n        }\n\n        var childNodes;\n\n        if (/table|tbody/.test(dom.name(commonAncestor))) {\n            childNodes = $.map(nodes, function(node) {\n                return dom.parentOfType(node, [\"td\"]);\n            });\n        } else {\n            childNodes = dom.significantChildNodes(commonAncestor);\n\n            if ($.grep(childNodes, dom.isBlock).length) {\n                childNodes = $.grep(childNodes, $.proxy(function(node) {\n                    return this.containsAny(node, nodes);\n                }, this));\n            }\n\n            if (!childNodes.length) {\n                childNodes = nodes;\n            }\n        }\n\n        function pushAncestor() {\n            ancestors.push(this);\n        }\n\n        for (var i = 0; i < childNodes.length; i++) {\n            var child = childNodes[i];\n            var suitable = (!formatNode || !dom.isAncestorOrSelf(formatNode, child)) && this.suitable(child, nodes);\n\n            if (!suitable) {\n                continue;\n            }\n\n            if (formatNode && this.isList(child)) {\n                // merging lists\n                $.each(child.childNodes, pushAncestor);\n                dom.remove(child);\n            } else {\n                ancestors.push(child);\n            }\n        }\n\n        if (ancestors.length == childNodes.length && this.breakable(commonAncestor)) {\n            ancestors = [commonAncestor];\n        }\n\n        if (!formatNode) {\n            formatNode = dom.create(commonAncestor.ownerDocument, tag);\n            dom.insertBefore(formatNode, ancestors[0]);\n        }\n\n        this.wrap(formatNode, ancestors);\n\n        if (!dom.is(formatNode, tag)) {\n            dom.changeTag(formatNode, tag);\n        }\n\n        this.merge(tag, formatNode);\n    },\n\n    apply: function (nodes) {\n        var i = 0,\n            sections = [],\n            lastSection,\n            lastNodes,\n            section;\n\n        // split nodes into sections that need to be different lists\n        do {\n            section = dom.closestEditable(nodes[i], [\"td\",\"body\"]);\n\n            if (!lastSection || section != lastSection) {\n                if (lastSection) {\n                    sections.push({\n                        section: lastSection,\n                        nodes: lastNodes\n                    });\n                }\n\n                lastNodes = [nodes[i]];\n                lastSection = section;\n            } else {\n                lastNodes.push(nodes[i]);\n            }\n\n            i++;\n        } while (i < nodes.length);\n\n        sections.push({\n            section: lastSection,\n            nodes: lastNodes\n        });\n\n        for (i = 0; i < sections.length; i++) {\n            this.applyOnSection(sections[i].section, sections[i].nodes);\n        }\n    },\n\n    unwrap: function(ul) {\n        var fragment = ul.ownerDocument.createDocumentFragment(),\n            unwrapTag = this.unwrapTag,\n            parents,\n            li,\n            p,\n            child;\n\n        for (li = ul.firstChild; li; li = li.nextSibling) {\n            p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n\n            while(li.firstChild) {\n                child = li.firstChild;\n\n                if (dom.isBlock(child)) {\n\n                    if (p.firstChild) {\n                        fragment.appendChild(p);\n                        p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n                    }\n\n                    fragment.appendChild(child);\n                } else {\n                    p.appendChild(child);\n                }\n            }\n\n            if (p.firstChild) {\n                fragment.appendChild(p);\n            }\n        }\n\n        parents = this._parentLists(ul);\n\n        if (parents[0]) {\n            dom.insertAfter(fragment, parents.last()[0]);\n            parents.last().remove();\n        } else {\n            dom.insertAfter(fragment, ul);\n        }\n\n        dom.remove(ul);\n    },\n\n    remove: function (nodes) {\n        var formatNode;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n            formatNode = this.finder.findFormat(nodes[i]);\n\n            if (formatNode) {\n                this.unwrap(formatNode);\n            }\n        }\n    },\n\n    toggle: function (range) {\n        var that = this,\n            nodes = textNodes(range),\n            ancestor = range.commonAncestorContainer;\n\n        if (!nodes.length) {\n            range.selectNodeContents(ancestor);\n            nodes = textNodes(range);\n            if (!nodes.length) {\n                var text = ancestor.ownerDocument.createTextNode(\"\");\n                range.startContainer.appendChild(text);\n                nodes = [text];\n                range.selectNode(text.parentNode);\n            }\n        }\n\n        if (that.finder.isFormatted(nodes)) {\n            that.split(range);\n            that.remove(nodes);\n        } else {\n            that.apply(nodes);\n        }\n    }\n\n});\n\nvar ListCommand = Command.extend({\n    init: function(options) {\n        options.formatter = new ListFormatter(options.tag);\n        Command.fn.init.call(this, options);\n    }\n});\n\nvar ListTool = FormatTool.extend({\n    init: function(options) {\n        this.options = options;\n        FormatTool.fn.init.call(this, extend(options, {\n            finder: new ListFormatFinder(options.tag)\n        }));\n    },\n\n    command: function (commandArguments) {\n        return new ListCommand(extend(commandArguments, { tag: this.options.tag }));\n    }\n});\n\nextend(Editor, {\n    ListFormatFinder: ListFormatFinder,\n    ListFormatter: ListFormatter,\n    ListCommand: ListCommand,\n    ListTool: ListTool\n});\n\nregisterTool(\"insertUnorderedList\", new ListTool({tag:'ul', template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Insert unordered list\"})}));\nregisterTool(\"insertOrderedList\", new ListTool({tag:'ol', template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Insert ordered list\"})}));\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    Class = kendo.Class,\n    extend = $.extend,\n    proxy = $.proxy,\n    Editor = kendo.ui.editor,\n    dom = Editor.Dom,\n    RangeUtils = Editor.RangeUtils,\n    EditorUtils = Editor.EditorUtils,\n    Command = Editor.Command,\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate,\n    InlineFormatter = Editor.InlineFormatter,\n    InlineFormatFinder = Editor.InlineFormatFinder,\n    textNodes = RangeUtils.textNodes,\n    registerTool = Editor.EditorUtils.registerTool;\n\nvar LinkFormatFinder = Class.extend({\n    findSuitable: function (sourceNode) {\n        return dom.parentOfType(sourceNode, [\"a\"]);\n    }\n});\n\nvar LinkFormatter = Class.extend({\n    init: function() {\n        this.finder = new LinkFormatFinder();\n    },\n\n    apply: function (range, attributes) {\n        var nodes = textNodes(range);\n        var markers, doc, formatter, a, parent;\n\n        if (attributes.innerHTML) {\n            doc = RangeUtils.documentFromRange(range);\n            markers = RangeUtils.getMarkers(range);\n\n            range.deleteContents();\n            a = dom.create(doc, \"a\", attributes);\n            range.insertNode(a);\n\n            parent = a.parentNode;\n            if (dom.name(parent) == \"a\") {\n                dom.insertAfter(a, parent);\n            }\n\n            if (dom.emptyNode(parent)) {\n                dom.remove(parent);\n            }\n\n            // move range and markers after inserted link\n            var ref = a;\n            for (var i = 0; i < markers.length; i++) {\n                dom.insertAfter(markers[i], ref);\n                ref = markers[i];\n            }\n\n            if (markers.length) {\n                dom.insertBefore(doc.createTextNode(\"\\ufeff\"), markers[1]);\n                dom.insertAfter(doc.createTextNode(\"\\ufeff\"), markers[1]);\n                range.setStartBefore(markers[0]);\n                range.setEndAfter(markers[markers.length-1]);\n            }\n        } else {\n            formatter = new InlineFormatter([{ tags: [\"a\"]}], attributes);\n            formatter.finder = this.finder;\n            formatter.apply(nodes);\n        }\n    }\n});\n\nvar UnlinkCommand = Command.extend({\n    init: function(options) {\n        options.formatter = /** @ignore */ {\n            toggle : function(range) {\n                new InlineFormatter([{ tags: [\"a\"]}]).remove(textNodes(range));\n            }\n        };\n        this.options = options;\n        Command.fn.init.call(this, options);\n    }\n});\n\nvar LinkCommand = Command.extend({\n    init: function(options) {\n        this.options = options;\n        Command.fn.init.call(this, options);\n        this.formatter = new LinkFormatter();\n\n        if (!options.url) {\n            this.attributes = null;\n            this.async = true;\n        } else {\n            this.exec = function() {\n                this.formatter.apply(options.range, {\n                    href: options.url,\n                    innerHTML: options.text || options.url,\n                    target: options.target\n                });\n            };\n        }\n    },\n\n    _dialogTemplate: function() {\n        return kendo.template(\n            '<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' +\n                \"<div class='k-edit-label'>\" +\n                    \"<label for='k-editor-link-url'>#: messages.linkWebAddress #</label>\" +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    \"<input type='text' class='k-input k-textbox' id='k-editor-link-url'>\" +\n                \"</div>\" +\n                \"<div class='k-edit-label k-editor-link-text-row'>\" +\n                    \"<label for='k-editor-link-text'>#: messages.linkText #</label>\" +\n                \"</div>\" +\n                \"<div class='k-edit-field k-editor-link-text-row'>\" +\n                    \"<input type='text' class='k-input k-textbox' id='k-editor-link-text'>\" +\n                \"</div>\" +\n                \"<div class='k-edit-label'>\" +\n                    \"<label for='k-editor-link-title'>#: messages.linkToolTip #</label>\" +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    \"<input type='text' class='k-input k-textbox' id='k-editor-link-title'>\" +\n                \"</div>\" +\n                \"<div class='k-edit-label'></div>\" +\n                \"<div class='k-edit-field'>\" +\n                    \"<input type='checkbox' class='k-checkbox' id='k-editor-link-target'>\" +\n                    \"<label for='k-editor-link-target' class='k-checkbox-label'>#: messages.linkOpenInNewWindow #</label>\" +\n                \"</div>\" +\n                \"<div class='k-edit-buttons k-state-default'>\" +\n                    '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' +\n                    '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' +\n                \"</div>\" +\n            \"</div>\"\n        )({\n            messages: this.editor.options.messages\n        });\n    },\n\n    exec: function () {\n        var collapsed = this.getRange().collapsed;\n        var messages = this.editor.options.messages;\n\n        this._initialText = \"\";\n        this._range = this.lockRange(true);\n        var nodes = textNodes(this._range);\n\n        var a = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null;\n        var img = nodes.length && dom.name(nodes[0]) == \"img\";\n\n        var dialog = this.createDialog(this._dialogTemplate(), {\n            title: messages.createLink,\n            close: proxy(this._close, this),\n            visible: false\n        });\n\n        if (a) {\n            this._range.selectNodeContents(a);\n            nodes = textNodes(this._range);\n        }\n\n        this._initialText = this.linkText(nodes);\n\n        dialog\n            .find(\".k-dialog-insert\").click(proxy(this._apply, this)).end()\n            .find(\".k-dialog-close\").click(proxy(this._close, this)).end()\n            .find(\".k-edit-field input\").keydown(proxy(this._keydown, this)).end()\n            .find(\"#k-editor-link-url\").val(this.linkUrl(a)).end()\n            .find(\"#k-editor-link-text\").val(this._initialText).end()\n            .find(\"#k-editor-link-title\").val(a ? a.title : \"\").end()\n            .find(\"#k-editor-link-target\").attr(\"checked\", a ? a.target == \"_blank\" : false).end()\n            .find(\".k-editor-link-text-row\").toggle(!img);\n\n        this._dialog = dialog.data(\"kendoWindow\").center().open();\n\n        $(\"#k-editor-link-url\", dialog).focus().select();\n    },\n\n    _keydown: function (e) {\n        var keys = kendo.keys;\n\n        if (e.keyCode == keys.ENTER) {\n            this._apply(e);\n        } else if (e.keyCode == keys.ESC) {\n            this._close(e);\n        }\n    },\n\n    _apply: function (e) {\n        var element = this._dialog.element;\n        var href = $(\"#k-editor-link-url\", element).val();\n        var title, text, target;\n        var textInput = $(\"#k-editor-link-text\", element);\n\n        if (href && href != \"http://\") {\n\n            if (href.indexOf(\"@\") > 0 && !/^(\\w+:)|(\\/\\/)/i.test(href)) {\n                href = \"mailto:\" + href;\n            }\n\n            this.attributes = { href: href };\n\n            title = $(\"#k-editor-link-title\", element).val();\n            if (title) {\n                this.attributes.title = title;\n            }\n\n            if (textInput.is(\":visible\")) {\n                text = textInput.val();\n                if (!text && !this._initialText) {\n                    this.attributes.innerHTML = href;\n                } else if (text && (text !== this._initialText)) {\n                    this.attributes.innerHTML = dom.stripBom(text);\n                }\n            }\n\n            target = $(\"#k-editor-link-target\", element).is(\":checked\");\n            this.attributes.target = target ? \"_blank\" : null;\n\n            this.formatter.apply(this._range, this.attributes);\n        }\n\n        this._close(e);\n\n        if (this.change) {\n            this.change();\n        }\n    },\n\n    _close: function (e) {\n        e.preventDefault();\n        this._dialog.destroy();\n\n        dom.windowFromDocument(RangeUtils.documentFromRange(this._range)).focus();\n\n        this.releaseRange(this._range);\n    },\n\n    linkUrl: function(anchor) {\n        if (anchor) {\n            // IE < 8 returns absolute url if getAttribute is not used\n            return anchor.getAttribute(\"href\", 2);\n        }\n\n        return \"http://\";\n    },\n\n    linkText: function (nodes) {\n        var text = \"\";\n        var i;\n\n        for (i = 0; i < nodes.length; i++) {\n            text += nodes[i].nodeValue;\n        }\n\n        return dom.stripBom(text || \"\");\n    },\n\n    redo: function () {\n        var range = this.lockRange(true);\n\n        this.formatter.apply(range, this.attributes);\n        this.releaseRange(range);\n    }\n\n});\n\nvar UnlinkTool = Tool.extend({\n    init: function(options) {\n        this.options = options;\n        this.finder = new InlineFormatFinder([{tags:[\"a\"]}]);\n\n        Tool.fn.init.call(this, $.extend(options, {command:UnlinkCommand}));\n    },\n\n    initialize: function(ui, options) {\n        Tool.fn.initialize.call(this, ui, options);\n        ui.addClass(\"k-state-disabled\");\n    },\n\n    update: function (ui, nodes) {\n        ui.toggleClass(\"k-state-disabled\", !this.finder.isFormatted(nodes))\n          .removeClass(\"k-state-hover\");\n    }\n});\n\nextend(kendo.ui.editor, {\n    LinkFormatFinder: LinkFormatFinder,\n    LinkFormatter: LinkFormatter,\n    UnlinkCommand: UnlinkCommand,\n    LinkCommand: LinkCommand,\n    UnlinkTool: UnlinkTool\n});\n\nregisterTool(\"createLink\", new Tool({ key: \"K\", ctrl: true, command: LinkCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Create Link\"})}));\nregisterTool(\"unlink\", new UnlinkTool({ key: \"K\", ctrl: true, shift: true, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Remove Link\"})}));\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    EditorUtils = Editor.EditorUtils,\n    dom = Editor.Dom,\n    registerTool = EditorUtils.registerTool,\n    ToolTemplate = Editor.ToolTemplate,\n    RangeUtils = Editor.RangeUtils,\n    Command = Editor.Command,\n    LinkFormatter = Editor.LinkFormatter,\n    textNodes = RangeUtils.textNodes,\n    keys = kendo.keys,\n    KEDITORFILEURL = \"#k-editor-file-url\",\n    KEDITORFILETITLE = \"#k-editor-file-title\";\n\nvar FileCommand = Command.extend({\n    init: function(options) {\n        var that = this;\n        Command.fn.init.call(that, options);\n\n        that.formatter = new LinkFormatter();\n\n        that.async = true;\n        that.attributes = {};\n    },\n\n    insertFile: function(file, range) {\n        var attributes = this.attributes;\n        var doc = RangeUtils.documentFromRange(range);\n\n        if (attributes.href && attributes.href != \"http://\") {\n\n            if (!file) {\n                file = dom.create(doc, \"a\", {href: attributes.href});\n                file.innerHTML = attributes.innerHTML;\n\n                range.deleteContents();\n                range.insertNode(file);\n\n                if (!file.nextSibling) {\n                    dom.insertAfter(doc.createTextNode(\"\\ufeff\"), file);\n                }\n\n                range.setStartAfter(file);\n                range.setEndAfter(file);\n                RangeUtils.selectRange(range);\n                return true;\n            } else {\n                dom.attr(file, attributes);\n            }\n        }\n\n        return false;\n    },\n\n    _dialogTemplate: function(showBrowser) {\n        return kendo.template(\n            '<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' +\n                '# if (showBrowser) { #' +\n                    '<div class=\"k-filebrowser\"></div>' +\n                '# } #' +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-file-url\">#: messages.fileWebAddress #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-file-url\">' +\n                \"</div>\" +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-file-title\">#: messages.fileTitle #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-file-title\">' +\n                \"</div>\" +\n                '<div class=\"k-edit-buttons k-state-default\">' +\n                    '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' +\n                    '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' +\n                '</div>' +\n            '</div>'\n        )({\n            messages: this.editor.options.messages,\n            showBrowser: showBrowser\n        });\n    },\n\n    redo: function () {\n        var that = this,\n            range = that.lockRange();\n\n        this.formatter.apply(range, this.attributes);\n        that.releaseRange(range);\n    },\n\n    exec: function () {\n        var that = this,\n            range = that.lockRange(),\n            nodes = textNodes(range),\n            applied = false,\n            file = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null,\n            dialog,\n            options = that.editor.options,\n            messages = options.messages,\n            fileBrowser = options.fileBrowser,\n            showBrowser = !!(kendo.ui.FileBrowser && fileBrowser && fileBrowser.transport && fileBrowser.transport.read !== undefined),\n            dialogOptions = {\n                title: messages.insertFile,\n                visible: false,\n                resizable: showBrowser\n            };\n\n        function apply(e) {\n            var element = dialog.element,\n                href = element.find(KEDITORFILEURL).val().replace(/ /g, \"%20\"),\n                innerHTML = element.find(KEDITORFILETITLE).val();\n\n            that.attributes = {\n                href: href,\n                innerHTML: innerHTML !== \"\" ? innerHTML : href\n            };\n\n            applied = that.insertFile(file, range);\n\n            close(e);\n\n            if (that.change) {\n                that.change();\n            }\n        }\n\n        function close(e) {\n            e.preventDefault();\n            dialog.destroy();\n\n            dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n            if (!applied) {\n                that.releaseRange(range);\n            }\n        }\n\n        function keyDown(e) {\n            if (e.keyCode == keys.ENTER) {\n                apply(e);\n            } else if (e.keyCode == keys.ESC) {\n                close(e);\n            }\n        }\n\n        dialogOptions.close = close;\n\n        if (showBrowser) {\n            dialogOptions.width = 750;\n        }\n\n        dialog = this.createDialog(that._dialogTemplate(showBrowser), dialogOptions)\n            .toggleClass(\"k-filebrowser-dialog\", showBrowser)\n            .find(\".k-dialog-insert\").click(apply).end()\n            .find(\".k-dialog-close\").click(close).end()\n            .find(\".k-edit-field input\").keydown(keyDown).end()\n            // IE < 8 returns absolute url if getAttribute is not used\n            .find(KEDITORFILEURL).val(file ? file.getAttribute(\"href\", 2) : \"http://\").end()\n            .find(KEDITORFILETITLE).val(file ? file.title : \"\").end()\n            .data(\"kendoWindow\");\n\n        if (showBrowser) {\n            new kendo.ui.FileBrowser(\n                dialog.element.find(\".k-filebrowser\"),\n                extend({}, fileBrowser, {\n                    change: function() {\n                        dialog.element.find(KEDITORFILEURL).val(this.value());\n                    },\n                    apply: apply\n                })\n            );\n        }\n\n        dialog.center().open();\n        dialog.element.find(KEDITORFILEURL).focus().select();\n    }\n\n});\n\nkendo.ui.editor.FileCommand = FileCommand;\n\nregisterTool(\"insertFile\", new Editor.Tool({ command: FileCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Insert File\" }) }));\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    EditorUtils = Editor.EditorUtils,\n    dom = Editor.Dom,\n    registerTool = EditorUtils.registerTool,\n    ToolTemplate = Editor.ToolTemplate,\n    RangeUtils = Editor.RangeUtils,\n    Command = Editor.Command,\n    keys = kendo.keys,\n    KEDITORIMAGEURL = \"#k-editor-image-url\",\n    KEDITORIMAGETITLE = \"#k-editor-image-title\",\n    KEDITORIMAGEWIDTH = \"#k-editor-image-width\",\n    KEDITORIMAGEHEIGHT = \"#k-editor-image-height\";\n\nvar ImageCommand = Command.extend({\n    init: function(options) {\n        var that = this;\n        Command.fn.init.call(that, options);\n\n        that.async = true;\n        that.attributes = {};\n    },\n\n    insertImage: function(img, range) {\n        var attributes = this.attributes;\n        var doc = RangeUtils.documentFromRange(range);\n\n        if (attributes.src && attributes.src != \"http://\") {\n\n            var removeIEAttributes = function() {\n                setTimeout(function(){\n                    if (!attributes.width) {\n                        img.removeAttribute(\"width\");\n                    }\n\n                    if (!attributes.height) {\n                        img.removeAttribute(\"height\");\n                    }\n\n                    img.removeAttribute(\"complete\");\n                });\n            };\n\n            if (!img) {\n                img = dom.create(doc, \"img\", attributes);\n                img.onload = img.onerror = function () {\n                    removeIEAttributes();\n                };\n\n                range.deleteContents();\n                range.insertNode(img);\n\n                if (!img.nextSibling) {\n                    dom.insertAfter(doc.createTextNode(\"\\ufeff\"), img);\n                }\n\n                removeIEAttributes();\n\n                range.setStartAfter(img);\n                range.setEndAfter(img);\n                RangeUtils.selectRange(range);\n                return true;\n            } else {\n                dom.attr(img, attributes);\n                removeIEAttributes();\n            }\n        }\n\n        return false;\n    },\n\n    _dialogTemplate: function(showBrowser) {\n        return kendo.template(\n            '<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' +\n                '# if (showBrowser) { #' +\n                    '<div class=\"k-filebrowser k-imagebrowser\"></div>' +\n                '# } #' +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-image-url\">#: messages.imageWebAddress #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-url\">' +\n                \"</div>\" +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-image-title\">#: messages.imageAltText #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-title\">' +\n                \"</div>\" +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-image-width\">#: messages.imageWidth #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-width\">' +\n                \"</div>\" +\n                \"<div class='k-edit-label'>\" +\n                    '<label for=\"k-editor-image-height\">#: messages.imageHeight #</label>' +\n                \"</div>\" +\n                \"<div class='k-edit-field'>\" +\n                    '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-height\">' +\n                \"</div>\" +\n                '<div class=\"k-edit-buttons k-state-default\">' +\n                    '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' +\n                    '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' +\n                '</div>' +\n            '</div>'\n        )({\n            messages: this.editor.options.messages,\n            showBrowser: showBrowser\n        });\n    },\n\n    redo: function () {\n        var that = this,\n            range = that.lockRange();\n\n        if (!that.insertImage(RangeUtils.image(range), range)) {\n            that.releaseRange(range);\n        }\n    },\n\n    exec: function () {\n        var that = this,\n            range = that.lockRange(),\n            applied = false,\n            img = RangeUtils.image(range),\n            imageWidth = img && img.getAttribute(\"width\") || \"\",\n            imageHeight = img && img.getAttribute(\"height\") || \"\",\n            dialog,\n            options = that.editor.options,\n            messages = options.messages,\n            imageBrowser = options.imageBrowser,\n            showBrowser = !!(kendo.ui.ImageBrowser && imageBrowser && imageBrowser.transport && imageBrowser.transport.read !== undefined),\n            dialogOptions = {\n                title: messages.insertImage,\n                visible: false,\n                resizable: showBrowser\n            };\n\n        function apply(e) {\n            var element = dialog.element,\n                w = parseInt(element.find(KEDITORIMAGEWIDTH).val(), 10),\n                h = parseInt(element.find(KEDITORIMAGEHEIGHT).val(), 10);\n\n            that.attributes = {\n                src: element.find(KEDITORIMAGEURL).val().replace(/ /g, \"%20\"),\n                alt: element.find(KEDITORIMAGETITLE).val()\n            };\n\n            that.attributes.width = null;\n            that.attributes.height = null;\n\n            if (!isNaN(w) && w > 0) {\n                that.attributes.width = w;\n            }\n\n            if (!isNaN(h) && h > 0) {\n                that.attributes.height = h;\n            }\n\n            applied = that.insertImage(img, range);\n\n            close(e);\n\n            if (that.change) {\n                that.change();\n            }\n        }\n\n        function close(e) {\n            e.preventDefault();\n            dialog.destroy();\n\n            dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n            if (!applied) {\n                that.releaseRange(range);\n            }\n        }\n\n        function keyDown(e) {\n            if (e.keyCode == keys.ENTER) {\n                apply(e);\n            } else if (e.keyCode == keys.ESC) {\n                close(e);\n            }\n        }\n\n        dialogOptions.close = close;\n\n        if (showBrowser) {\n            dialogOptions.width = 750;\n        }\n\n        dialog = this.createDialog(that._dialogTemplate(showBrowser), dialogOptions)\n            .toggleClass(\"k-filebrowser-dialog\", showBrowser)\n            .find(\".k-dialog-insert\").click(apply).end()\n            .find(\".k-dialog-close\").click(close).end()\n            .find(\".k-edit-field input\").keydown(keyDown).end()\n            // IE < 8 returns absolute url if getAttribute is not used\n            .find(KEDITORIMAGEURL).val(img ? img.getAttribute(\"src\", 2) : \"http://\").end()\n            .find(KEDITORIMAGETITLE).val(img ? img.alt : \"\").end()\n            .find(KEDITORIMAGEWIDTH).val(imageWidth).end()\n            .find(KEDITORIMAGEHEIGHT).val(imageHeight).end()\n            .data(\"kendoWindow\");\n\n        if (showBrowser) {\n            new kendo.ui.ImageBrowser(\n                dialog.element.find(\".k-imagebrowser\"),\n                extend({}, imageBrowser, {\n                    change: function() {\n                        dialog.element.find(KEDITORIMAGEURL).val(this.value());\n                    },\n                    apply: apply\n                })\n            );\n        }\n\n        dialog.center().open();\n        dialog.element.find(KEDITORIMAGEURL).focus().select();\n    }\n\n});\n\nkendo.ui.editor.ImageCommand = ImageCommand;\n\nregisterTool(\"insertImage\", new Editor.Tool({ command: ImageCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Insert Image\" }) }));\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    DropDownList = kendo.ui.DropDownList,\n    dom = kendo.ui.editor.Dom;\n\nvar SelectBox = DropDownList.extend({\n    init: function(element, options) {\n        var that = this;\n\n        DropDownList.fn.init.call(that, element, options);\n\n        // overlay drop-down with popout for snappier interaction\n        if (kendo.support.mobileOS.ios) {\n            this._initSelectOverlay();\n            this.bind(\"dataBound\", $.proxy(this._initSelectOverlay, this));\n        }\n\n        that.value(that.options.title);\n\n        that.bind(\"open\", function() {\n            if (that.options.autoSize) {\n                var list = that.list,\n                    listWidth;\n\n                list.css({\n                        whiteSpace: \"nowrap\",\n                        width: \"auto\"\n                    });\n\n                listWidth = list.width();\n\n                if (listWidth) {\n                    listWidth += 20;\n                } else {\n                    listWidth = that._listWidth;\n                }\n\n                list.css(\"width\", listWidth + kendo.support.scrollbar());\n\n                that._listWidth = listWidth;\n            }\n        });\n    },\n    options: {\n        name: \"SelectBox\"\n    },\n\n    _initSelectOverlay: function() {\n        var selectBox = this;\n        var value = selectBox.value();\n        var view = this.dataSource.view();\n        var item;\n        var html = \"\";\n        var encode = kendo.htmlEncode;\n\n        for (var i = 0; i < view.length; i++) {\n            item = view[i];\n\n            html += \"<option value='\" + encode(item.value) + \"'\";\n\n            if (item.value == value) {\n                html += \" selected\";\n            }\n\n            html += \">\" + encode(item.text) + \"</option>\";\n        }\n\n        var select = $(\"<select class='k-select-overlay'>\" + html + \"</select>\");\n        var wrapper = $(this.element).closest(\".k-widget\");\n\n        wrapper.next(\".k-select-overlay\").remove();\n\n        select.insertAfter(wrapper);\n\n        select.on(\"change\", function() {\n            selectBox.value(this.value);\n            selectBox.trigger(\"change\");\n        });\n    },\n\n    value: function(value) {\n        var that = this,\n            result = DropDownList.fn.value.call(that, value);\n\n        if (value === undefined) {\n            return result;\n        }\n\n        if (value !== DropDownList.fn.value.call(that)) {\n           that.text(that.options.title);\n\n           if (that._current) {\n               that._current.removeClass(\"k-state-selected\");\n           }\n\n           that.current(null);\n           that._oldIndex = that.selectedIndex = -1;\n        }\n    },\n\n    decorate: function(body) {\n        var that = this,\n            dataSource = that.dataSource,\n            items = dataSource.data(),\n            i, tag, className, style;\n\n        if (body) {\n            that.list.css(\"background-color\", dom.getEffectiveBackground($(body)));\n        }\n\n        for (i = 0; i < items.length; i++) {\n            tag = items[i].tag || \"span\";\n            className = items[i].className;\n\n            style = dom.inlineStyle(body, tag, { className : className });\n\n            style = style.replace(/\"/g, \"'\");\n\n            items[i].style = style + \";display:inline-block\";\n        }\n\n        dataSource.trigger(\"change\");\n    }\n});\n\n\nkendo.ui.plugin(SelectBox);\nkendo.ui.editor.SelectBox = SelectBox;\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\n// Imports ================================================================\nvar kendo = window.kendo,\n    Class = kendo.Class,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    dom = Editor.Dom,\n    EditorUtils = Editor.EditorUtils,\n    registerTool = EditorUtils.registerTool,\n    Command = Editor.Command,\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate,\n    RangeUtils = Editor.RangeUtils,\n    blockElements = dom.blockElements,\n    BlockFormatFinder = Editor.BlockFormatFinder,\n    BlockFormatter = Editor.BlockFormatter;\n\nfunction indent(node, value) {\n    var isRtl = $(node).css(\"direction\") == \"rtl\",\n        indentDirection = isRtl ? \"Right\" : \"Left\",\n        property = dom.name(node) != \"td\" ? \"margin\" + indentDirection : \"padding\" + indentDirection;\n    if (value === undefined) {\n        return node.style[property] || 0;\n    } else {\n        if (value > 0) {\n            node.style[property] = value + \"px\";\n        } else {\n            node.style[property] = \"\";\n\n            if (!node.style.cssText) {\n                node.removeAttribute(\"style\");\n            }\n        }\n    }\n}\n\nvar IndentFormatter = Class.extend({\n    init: function() {\n        this.finder = new BlockFormatFinder([{tags:dom.blockElements}]);\n    },\n\n    apply: function (nodes) {\n        var formatNodes = this.finder.findSuitable(nodes),\n            targets = [],\n            i, len, formatNode, parentList, sibling;\n\n        if (formatNodes.length) {\n            for (i = 0, len = formatNodes.length; i < len; i++) {\n                if (dom.is(formatNodes[i], \"li\")) {\n                    if (!$(formatNodes[i]).index()) {\n                        targets.push(formatNodes[i].parentNode);\n                    } else if ($.inArray(formatNodes[i].parentNode, targets) < 0) {\n                        targets.push(formatNodes[i]);\n                    }\n                } else {\n                    targets.push(formatNodes[i]);\n                }\n            }\n\n            while (targets.length) {\n                formatNode = targets.shift();\n                if (dom.is(formatNode, \"li\")) {\n                    parentList = formatNode.parentNode;\n                    sibling = $(formatNode).prev(\"li\");\n                    var siblingList = sibling.find(\"ul,ol\").last();\n\n                    var nestedList = $(formatNode).children(\"ul,ol\")[0];\n\n                    if (nestedList && sibling[0]) {\n                        if (siblingList[0]) {\n                           siblingList.append(formatNode);\n                           siblingList.append($(nestedList).children());\n                           dom.remove(nestedList);\n                        } else {\n                            sibling.append(nestedList);\n                            nestedList.insertBefore(formatNode, nestedList.firstChild);\n                        }\n                    } else {\n                        nestedList = sibling.children(\"ul,ol\")[0];\n                        if (!nestedList) {\n                            nestedList = dom.create(formatNode.ownerDocument, dom.name(parentList));\n                            sibling.append(nestedList);\n                        }\n\n                        while (formatNode && formatNode.parentNode == parentList) {\n                            nestedList.appendChild(formatNode);\n                            formatNode = targets.shift();\n                        }\n                    }\n                } else {\n                    var marginLeft = parseInt(indent(formatNode), 10) + 30;\n                    indent(formatNode, marginLeft);\n\n                    for (var targetIndex = 0; targetIndex < targets.length; targetIndex++) {\n                        if ($.contains(formatNode, targets[targetIndex])) {\n                            targets.splice(targetIndex, 1);\n                        }\n                    }\n                }\n            }\n        } else {\n            var formatter = new BlockFormatter([{tags:[\"p\"]}], {style:{marginLeft:30}});\n\n            formatter.apply(nodes);\n        }\n    },\n\n    remove: function(nodes) {\n        var formatNodes = this.finder.findSuitable(nodes),\n            targetNode, i, len, list, listParent, siblings,\n            formatNode, marginLeft;\n\n        for (i = 0, len = formatNodes.length; i < len; i++) {\n            formatNode = $(formatNodes[i]);\n\n            if (formatNode.is(\"li\")) {\n                list = formatNode.parent();\n                listParent = list.parent();\n                // listParent will be ul or ol in case of invalid dom - <ul><li></li><ul><li></li></ul></ul>\n                if (listParent.is(\"li,ul,ol\") && !indent(list[0])) {\n                    // skip already processed nodes\n                    if (targetNode && $.contains(targetNode, listParent[0])) {\n                        continue;\n                    }\n\n                    siblings = formatNode.nextAll(\"li\");\n                    if (siblings.length) {\n                        $(list[0].cloneNode(false)).appendTo(formatNode).append(siblings);\n                    }\n\n                    if (listParent.is(\"li\")) {\n                        formatNode.insertAfter(listParent);\n                    } else {\n                        formatNode.appendTo(listParent);\n                    }\n\n                    if (!list.children(\"li\").length) {\n                        list.remove();\n                    }\n\n                    continue;\n                } else {\n                    if (targetNode == list[0]) {\n                        // removing format on sibling LI elements\n                        continue;\n                    }\n                    targetNode = list[0];\n                }\n            } else {\n                targetNode = formatNodes[i];\n            }\n\n            marginLeft = parseInt(indent(targetNode), 10) - 30;\n            indent(targetNode, marginLeft);\n        }\n    }\n\n});\n\nvar IndentCommand = Command.extend({\n    init: function(options) {\n        options.formatter = /** @ignore */ {\n            toggle : function(range) {\n                new IndentFormatter().apply(RangeUtils.nodes(range));\n            }\n        };\n        Command.fn.init.call(this, options);\n    }\n});\n\nvar OutdentCommand = Command.extend({\n    init: function(options) {\n        options.formatter = {\n            toggle : function(range) {\n                new IndentFormatter().remove(RangeUtils.nodes(range));\n            }\n        };\n        Command.fn.init.call(this, options);\n    }\n});\n\nvar OutdentTool = Tool.extend({\n    init: function(options) {\n        Tool.fn.init.call(this, options);\n\n        this.finder = new BlockFormatFinder([{tags:blockElements}]);\n    },\n\n    initialize: function(ui, options) {\n        Tool.fn.initialize.call(this, ui, options);\n        ui.addClass(\"k-state-disabled\");\n    },\n\n    update: function (ui, nodes) {\n        var suitable = this.finder.findSuitable(nodes),\n            isOutdentable, listParentsCount, i, len;\n\n        for (i = 0, len = suitable.length; i < len; i++) {\n            isOutdentable = indent(suitable[i]);\n\n            if (!isOutdentable) {\n                listParentsCount = $(suitable[i]).parents(\"ul,ol\").length;\n                isOutdentable = (dom.is(suitable[i], \"li\") && (listParentsCount > 1 || indent(suitable[i].parentNode))) ||\n                                (dom.ofType(suitable[i], [\"ul\",\"ol\"]) && listParentsCount > 0);\n            }\n\n            if (isOutdentable) {\n                ui.removeClass(\"k-state-disabled\");\n                return;\n            }\n        }\n\n        ui.addClass(\"k-state-disabled\").removeClass(\"k-state-hover\");\n    }\n});\n\nextend(Editor, {\n    IndentFormatter: IndentFormatter,\n    IndentCommand: IndentCommand,\n    OutdentCommand: OutdentCommand,\n    OutdentTool: OutdentTool\n});\n\nregisterTool(\"indent\", new Tool({ command: IndentCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Indent\"}) }));\nregisterTool(\"outdent\", new OutdentTool({ command: OutdentCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Outdent\"})}));\n\n})(window.kendo.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    extend = $.extend,\n    Editor = kendo.ui.editor,\n    EditorUtils = Editor.EditorUtils,\n    Command = Editor.Command,\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate;\n\nvar ViewHtmlCommand = Command.extend({\n    init: function(options) {\n        var cmd = this;\n        cmd.options = options;\n        Command.fn.init.call(cmd, options);\n        cmd.attributes = null;\n        cmd.async = true;\n    },\n\n    exec: function() {\n        var that = this,\n            editor = that.editor,\n            messages = editor.options.messages,\n            dialog = $(kendo.template(ViewHtmlCommand.template)(messages)).appendTo(document.body),\n            content = ViewHtmlCommand.indent(editor.value()),\n            textarea = \".k-editor-textarea\";\n\n        function apply(e) {\n            editor.value(dialog.find(textarea).val());\n\n            close(e);\n\n            if (that.change) {\n                that.change();\n            }\n\n            editor.trigger(\"change\");\n        }\n\n        function close(e) {\n            e.preventDefault();\n\n            dialog.data(\"kendoWindow\").destroy();\n\n            editor.focus();\n        }\n\n        this.createDialog(dialog, {\n            title: messages.viewHtml,\n            close: close,\n            visible: false\n        })\n            .find(textarea).val(content).end()\n            .find(\".k-dialog-update\").click(apply).end()\n            .find(\".k-dialog-close\").click(close).end()\n            .data(\"kendoWindow\").center().open();\n\n        dialog.find(textarea).focus();\n    }\n});\n\nextend(ViewHtmlCommand, {\n    template: \"<div class='k-editor-dialog k-popup-edit-form k-edit-form-container k-viewhtml-dialog'>\" +\n                \"<textarea class='k-editor-textarea k-input'></textarea>\" +\n                \"<div class='k-edit-buttons k-state-default'>\" +\n                    \"<button class='k-dialog-update k-button k-primary'>#: dialogUpdate #</button>\" +\n                    \"<button class='k-dialog-close k-button'>#: dialogCancel #</button>\" +\n                \"</div>\" +\n            \"</div>\",\n    indent: function(content) {\n        return content.replace(/<\\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/ig, \"</$1>\\n\")\n                      .replace(/<(ul|ol)([^>]*)><li/ig, \"<$1$2>\\n<li\")\n                      .replace(/<br \\/>/ig, \"<br />\\n\")\n                      .replace(/\\n$/, \"\");\n    }\n});\n\nkendo.ui.editor.ViewHtmlCommand = ViewHtmlCommand;\n\nEditor.EditorUtils.registerTool(\"viewHtml\", new Tool({ command: ViewHtmlCommand, template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"View HTML\"})}));\n\n})(window.kendo.jQuery);\n\n(function($) {\n\nvar kendo = window.kendo,\n    Editor = kendo.ui.editor,\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate,\n    DelayedExecutionTool = Editor.DelayedExecutionTool,\n    Command = Editor.Command,\n    dom = Editor.Dom,\n    EditorUtils = Editor.EditorUtils,\n    RangeUtils = Editor.RangeUtils,\n    registerTool = EditorUtils.registerTool;\n\n\nvar FormattingTool = DelayedExecutionTool.extend({\n    init: function(options) {\n        var that = this;\n        Tool.fn.init.call(that, kendo.deepExtend({}, that.options, options));\n\n        that.type = \"kendoSelectBox\";\n\n        that.finder = {\n            getFormat: function() { return \"\"; }\n        };\n    },\n\n    options: {\n        items: [\n            { text: \"Paragraph\", value: \"p\" },\n            { text: \"Quotation\", value: \"blockquote\" },\n            { text: \"Heading 1\", value: \"h1\" },\n            { text: \"Heading 2\", value: \"h2\" },\n            { text: \"Heading 3\", value: \"h3\" },\n            { text: \"Heading 4\", value: \"h4\" },\n            { text: \"Heading 5\", value: \"h5\" },\n            { text: \"Heading 6\", value: \"h6\" }\n        ],\n        width: 110\n    },\n\n    toFormattingItem: function(item) {\n        var value = item.value;\n\n        if (!value) {\n            return item;\n        }\n\n        if (item.tag || item.className) {\n            return item;\n        }\n\n        var dot = value.indexOf(\".\");\n\n        if (dot === 0) {\n            item.className = value.substring(1);\n        } else if (dot == -1) {\n            item.tag = value;\n        } else {\n            item.tag = value.substring(0, dot);\n            item.className = value.substring(dot + 1);\n        }\n\n        return item;\n    },\n\n    command: function (args) {\n        var item = args.value;\n\n        item = this.toFormattingItem(item);\n\n        return new Editor.FormatCommand({\n            range: args.range,\n            formatter: function () {\n                var formatter,\n                    tags = (item.tag || item.context || \"span\").split(\",\"),\n                    format = [{\n                        tags: tags,\n                        attr: { className: item.className || \"\" }\n                    }];\n\n                if ($.inArray(tags[0], dom.inlineElements) >= 0) {\n                    formatter = new Editor.GreedyInlineFormatter(format);\n                } else {\n                    formatter = new Editor.GreedyBlockFormatter(format);\n                }\n\n                return formatter;\n            }\n        });\n    },\n\n    initialize: function(ui, initOptions) {\n        var editor = initOptions.editor;\n        var options = this.options;\n        var toolName = options.name;\n        var that = this;\n\n        ui.width(options.width);\n\n        ui.kendoSelectBox({\n            dataTextField: \"text\",\n            dataValueField: \"value\",\n            dataSource: options.items || editor.options[toolName],\n            title: editor.options.messages[toolName],\n            autoSize: true,\n            change: function () {\n                Tool.exec(editor, toolName, this.dataItem().toJSON());\n            },\n            dataBound: function() {\n                var i, items = this.dataSource.data();\n\n                for (i = 0; i < items.length; i++) {\n                    items[i] = that.toFormattingItem(items[i]);\n                }\n            },\n            highlightFirst: false,\n            template: kendo.template(\n                '<span unselectable=\"on\" style=\"display:block;#=(data.style||\"\")#\">#:data.text#</span>'\n            )\n        });\n\n        ui.addClass(\"k-decorated\")\n            .closest(\".k-widget\")\n                .removeClass(\"k-\" + toolName)\n                .find(\"*\").addBack()\n                    .attr(\"unselectable\", \"on\");\n    },\n\n    getFormattingValue: function(items, nodes) {\n        for (var i = 0; i < items.length; i++) {\n            var item = items[i];\n            var tag = item.tag || item.context || \"\";\n            var className = item.className ? \".\"+item.className : \"\";\n            var selector = tag + className;\n\n            var element = $(nodes[0]).closest(selector)[0];\n\n            if (!element) {\n                continue;\n            }\n\n            if (nodes.length == 1) {\n                return item.value;\n            }\n\n            for (var n = 1; n < nodes.length; n++) {\n                if (!$(nodes[n]).closest(selector)[0]) {\n                    break;\n                } else if (n == nodes.length - 1) {\n                    return item.value;\n                }\n            }\n        }\n\n        return \"\";\n    },\n\n    update: function(ui, nodes) {\n        var selectBox = $(ui).data(this.type);\n\n        // necessary until formatBlock is deleted\n        if (!selectBox) {\n            return;\n        }\n\n        var dataSource = selectBox.dataSource,\n            items = dataSource.data(),\n            i, context,\n            ancestor = dom.commonAncestor.apply(null, nodes);\n\n        for (i = 0; i < items.length; i++) {\n            context = items[i].context;\n\n            items[i].visible = !context || !!$(ancestor).closest(context).length;\n        }\n\n        dataSource.filter([{ field: \"visible\", operator: \"eq\", value: true }]);\n\n        DelayedExecutionTool.fn.update.call(this, ui, nodes);\n\n        selectBox.value(this.getFormattingValue(dataSource.view(), nodes));\n\n        selectBox.wrapper.toggleClass(\"k-state-disabled\", !dataSource.view().length);\n    }\n});\n\nvar CleanFormatCommand = Command.extend({\n    exec: function() {\n        var range = this.lockRange(true);\n        var remove = this.options.remove || \"strong,em,span\".split(\",\");\n\n        RangeUtils.wrapSelectedElements(range);\n\n        var iterator = new Editor.RangeIterator(range);\n\n        iterator.traverse(function clean(node) {\n            if (!node || dom.isMarker(node)) {\n                return;\n            }\n\n            if (node.nodeType == 1 && !dom.insignificant(node)) {\n                for (var i = node.childNodes.length-1; i >= 0; i--) {\n                    clean(node.childNodes[i]);\n                }\n\n                node.removeAttribute(\"style\");\n                node.removeAttribute(\"class\");\n            }\n\n            if ($.inArray(dom.name(node), remove) > -1) {\n                dom.unwrap(node);\n            }\n        });\n\n        this.releaseRange(range);\n    }\n});\n\n$.extend(Editor, {\n    FormattingTool: FormattingTool,\n    CleanFormatCommand: CleanFormatCommand\n});\n\nregisterTool(\"formatting\", new FormattingTool({ template: new ToolTemplate({ template: EditorUtils.dropDownListTemplate, title: \"Format\" }) }));\nregisterTool(\"cleanFormatting\", new Tool({ command: CleanFormatCommand, template: new ToolTemplate({ template: EditorUtils.buttonTemplate, title: \"Clean formatting\" }) }));\n\n})(window.kendo.jQuery);\n\n(function($,undefined) {\n    var kendo = window.kendo;\n    var ui = kendo.ui;\n    var editorNS = ui.editor;\n    var Widget = ui.Widget;\n    var extend = $.extend;\n    var proxy = $.proxy;\n    var keys = kendo.keys;\n    var NS = \".kendoEditor\";\n\n    var focusable = \"a.k-tool:not(.k-state-disabled),\" +\n                    \".k-widget.k-colorpicker,.k-selectbox,.k-dropdown,.k-combobox .k-input\";\n\n    var Toolbar = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            options = extend({}, options, { name: \"EditorToolbar\" });\n\n            Widget.fn.init.call(that, element, options);\n\n            if (options.popup) {\n                that._initPopup();\n            }\n        },\n\n        events: [\n            \"execute\"\n        ],\n\n        groups: {\n            basic: [\"bold\", \"italic\", \"underline\", \"strikethrough\"],\n            scripts: [\"subscript\", \"superscript\" ],\n            alignment: [\"justifyLeft\", \"justifyCenter\", \"justifyRight\", \"justifyFull\" ],\n            links: [\"insertImage\", \"insertFile\", \"createLink\", \"unlink\"],\n            lists: [\"insertUnorderedList\", \"insertOrderedList\", \"indent\", \"outdent\"],\n            tables: [ \"createTable\", \"addColumnLeft\", \"addColumnRight\", \"addRowAbove\", \"addRowBelow\", \"deleteRow\", \"deleteColumn\" ],\n            advanced: [ \"viewHtml\", \"cleanFormatting\" ]\n        },\n\n        _initPopup: function() {\n            this.window = $(this.element)\n                .wrap(\"<div class='editorToolbarWindow k-header' />\")\n                .parent()\n                .prepend(\"<button class='k-button k-button-bare k-editortoolbar-dragHandle'><span class='k-icon k-i-move' /></button>\")\n                .kendoWindow({\n                    title: false,\n                    resizable: false,\n                    draggable: {\n                        dragHandle: \".k-editortoolbar-dragHandle\"\n                    },\n                    animation: {\n                        open: { effects: \"fade:in\" },\n                        close: { effects: \"fade:out\" }\n                    },\n                    minHeight: 42,\n                    visible: false,\n                    autoFocus: false,\n                    actions: [],\n                    dragend: function() {\n                        this._moved = true;\n                    }\n                })\n                .on(\"mousedown\", function(e){\n                    if (!$(e.target).is(\".k-icon\")) {\n                        e.preventDefault();\n                    }\n                })\n                .data(\"kendoWindow\");\n        },\n\n        items: function() {\n            return this.element.children().find(\"> *, select\");\n        },\n\n        focused: function() {\n            return this.element.find(\".k-state-focused\").length > 0;\n        },\n\n        toolById: function(name) {\n            var id, tools = this.tools;\n\n            for (id in tools) {\n                if (id.toLowerCase() == name) {\n                    return tools[id];\n                }\n            }\n        },\n\n        toolGroupFor: function(toolName) {\n            var i, groups = this.groups;\n\n            if (this.isCustomTool(toolName)) {\n                return \"custom\";\n            }\n\n            for (i in groups) {\n                if ($.inArray(toolName, groups[i]) >= 0) {\n                    return i;\n                }\n            }\n        },\n\n        bindTo: function(editor) {\n            var that = this,\n                window = that.window;\n\n            // detach from editor that was previously listened to\n            if (that._editor) {\n                that._editor.unbind(\"select\", proxy(that.refreshTools, that));\n            }\n\n            that._editor = editor;\n\n            // re-initialize the tools\n            that.tools = that.expandTools(editor.options.tools);\n            that.render();\n\n            that.element.find(\".k-combobox .k-input\").keydown(function(e) {\n                var combobox = $(this).closest(\".k-combobox\").data(\"kendoComboBox\"),\n                    key = e.keyCode;\n\n                if (key == keys.RIGHT || key == keys.LEFT) {\n                    combobox.close();\n                } else if (key == keys.DOWN) {\n                    if (!combobox.dropDown.isOpened()) {\n                        e.stopImmediatePropagation();\n                        combobox.open();\n                    }\n                }\n            });\n\n            that._attachEvents();\n\n            that.items().each(function initializeTool() {\n                var toolName = that._toolName(this),\n                    tool = that.tools[toolName],\n                    options = tool && tool.options,\n                    messages = editor.options.messages,\n                    description = options && options.tooltip || messages[toolName],\n                    ui = $(this);\n\n                if (!tool || !tool.initialize) {\n                    return;\n                }\n\n                if (toolName == \"fontSize\" || toolName == \"fontName\") {\n                    var inheritText = messages[toolName + \"Inherit\"];\n\n                    ui.find(\"input\").val(inheritText).end()\n                      .find(\"span.k-input\").text(inheritText).end();\n                }\n\n                tool.initialize(ui, {\n                    title: that._appendShortcutSequence(description, tool),\n                    editor: that._editor\n                });\n\n                ui.closest(\".k-widget\", that.element).addClass(\"k-editor-widget\");\n\n                ui.closest(\".k-colorpicker\", that.element).next(\".k-colorpicker\").addClass(\"k-editor-widget\");\n            });\n\n            editor.bind(\"select\", proxy(that.refreshTools, that));\n\n            that.update();\n\n            if (window) {\n                window.wrapper.css({top: \"\", left: \"\", width: \"\"});\n            }\n        },\n\n        show: function() {\n            var that = this,\n                window = that.window,\n                editorOptions = that.options.editor,\n                wrapper, editorElement, editorOffset;\n\n            if (window) {\n                wrapper = window.wrapper;\n                editorElement = editorOptions.element;\n\n                if (!wrapper.is(\":visible\") || !that.window.options.visible) {\n\n                    if (!wrapper[0].style.width) {\n                        wrapper.width(editorElement.outerWidth() - parseInt(wrapper.css(\"border-left-width\"), 10) - parseInt(wrapper.css(\"border-right-width\"), 10));\n                    }\n\n                    // track content position when other parts of page change\n                    if (!window._moved) {\n                        editorOffset = editorElement.offset();\n                        wrapper.css({\n                            top: Math.max(0, parseInt(editorOffset.top, 10) - wrapper.outerHeight() - parseInt(that.window.element.css(\"padding-bottom\"), 10)),\n                            left: Math.max(0, parseInt(editorOffset.left, 10))\n                        });\n                    }\n\n                    window.open();\n                }\n            }\n        },\n\n        hide: function() {\n            if (this.window) {\n                this.window.close();\n            }\n        },\n\n        focus: function() {\n            var TABINDEX = \"tabIndex\";\n            var element = this.element;\n            var tabIndex = this._editor.element.attr(TABINDEX);\n\n            // Chrome can't focus something which has already been focused\n            element.attr(TABINDEX, tabIndex || 0).focus()\n                .find(focusable).first().focus();\n\n            if (!tabIndex && tabIndex !== 0) {\n                element.removeAttr(TABINDEX);\n            }\n        },\n\n        _appendShortcutSequence: function(localizedText, tool) {\n            if (!tool.key) {\n                return localizedText;\n            }\n\n            var res = localizedText + \" (\";\n\n            if (tool.ctrl) {\n                res += \"Ctrl + \";\n            }\n\n            if (tool.shift) {\n                res += \"Shift + \";\n            }\n\n            if (tool.alt) {\n                res += \"Alt + \";\n            }\n\n            res += tool.key + \")\";\n\n            return res;\n        },\n\n        _nativeTools: [\n            \"insertLineBreak\",\n            \"insertParagraph\",\n            \"redo\",\n            \"undo\"\n        ],\n\n        tools: {}, // tools collection is copied from defaultTools during initialization\n\n        isCustomTool: function(toolName) {\n            return !(toolName in kendo.ui.Editor.defaultTools);\n        },\n\n        // expand the tools parameter to contain tool options objects\n        expandTools: function(tools) {\n            var currentTool,\n                i,\n                nativeTools = this._nativeTools,\n                options,\n                defaultTools = kendo.deepExtend({}, kendo.ui.Editor.defaultTools),\n                result = {},\n                name;\n\n            for (i = 0; i < tools.length; i++) {\n                currentTool = tools[i];\n                name = currentTool.name;\n\n                if ($.isPlainObject(currentTool)) {\n                    if (name && defaultTools[name]) {\n                        // configured tool\n                        result[name] = extend({}, defaultTools[name]);\n                        extend(result[name].options, currentTool);\n                    } else {\n                        // custom tool\n                        options = extend({ cssClass: \"k-i-custom\", type: \"button\", title: \"\" }, currentTool);\n                        if (!options.name) {\n                            options.name = \"custom\";\n                        }\n\n                        options.cssClass = \"k-\" + (options.name == \"custom\" ? \"i-custom\" : options.name);\n\n                        if (!options.template && options.type == \"button\") {\n                            options.template = editorNS.EditorUtils.buttonTemplate;\n                            options.title = options.title || options.tooltip;\n                        }\n\n                        result[name] = {\n                            options: options\n                        };\n                    }\n                } else if (defaultTools[currentTool]) {\n                    // tool by name\n                    result[currentTool] = defaultTools[currentTool];\n                }\n            }\n\n            for (i = 0; i < nativeTools.length; i++) {\n                if (!result[nativeTools[i]]) {\n                    result[nativeTools[i]] = defaultTools[nativeTools[i]];\n                }\n            }\n\n            return result;\n        },\n\n        render: function() {\n            var that = this,\n                tools = that.tools,\n                options, template, toolElement,\n                toolName,\n                editorElement = that._editor.element,\n                element = that.element.empty(),\n                groupName, newGroupName,\n                toolConfig = that._editor.options.tools,\n                browser = kendo.support.browser,\n                group, i;\n\n            function stringify(template) {\n                var result;\n\n                if (template.getHtml) {\n                    result = template.getHtml();\n                } else {\n                    if (!$.isFunction(template)) {\n                        template = kendo.template(template);\n                    }\n\n                    result = template(options);\n                }\n\n                return $.trim(result);\n            }\n\n            function endGroup() {\n                if (group.children().length) {\n                    group.appendTo(element);\n                }\n            }\n\n            function startGroup() {\n                group = $(\"<li class='k-tool-group' role='presentation' />\");\n            }\n\n            element.empty();\n\n            startGroup();\n\n            for (i = 0; i < toolConfig.length; i++) {\n                toolName = toolConfig[i].name || toolConfig[i];\n                options = tools[toolName] && tools[toolName].options;\n\n                if (!options && $.isPlainObject(toolName)) {\n                    options = toolName;\n                }\n\n                template = options && options.template;\n\n                if (toolName == \"break\") {\n                    endGroup();\n                    $(\"<li class='k-row-break' />\").appendTo(that.element);\n                    startGroup();\n                }\n\n                if (!template) {\n                    continue;\n                }\n\n                newGroupName = that.toolGroupFor(toolName);\n\n                if (groupName != newGroupName) {\n                    endGroup();\n                    startGroup();\n                    groupName = newGroupName;\n                }\n\n                template = stringify(template);\n\n                toolElement = $(template).appendTo(group);\n\n                if (newGroupName == \"custom\") {\n                    endGroup();\n                    startGroup();\n                }\n\n                if (options.exec && toolElement.hasClass(\"k-tool\")) {\n                    toolElement.click(proxy(options.exec, editorElement[0]));\n                }\n            }\n\n            endGroup();\n\n            $(that.element).children(\":has(> .k-tool)\").addClass(\"k-button-group\");\n\n            if (that.options.popup && browser.msie && browser.version < 9) {\n                that.window.wrapper.find(\"*\").attr(\"unselectable\", \"on\");\n            }\n\n            that.updateGroups();\n\n            that.angular(\"compile\", function(){\n                return { elements: that.element };\n            });\n        },\n\n        updateGroups: function() {\n            $(this.element).children().each(function() {\n                $(this).children().filter(function(){\n                    return this.style.display !== \"none\";\n                })\n                    .removeClass(\"k-group-end\")\n                    .first().addClass(\"k-group-start\").end()\n                    .last().addClass(\"k-group-end\").end();\n            });\n        },\n\n        decorateFrom: function(body) {\n            this.items().filter(\".k-decorated\")\n                .each(function() {\n                    var selectBox = $(this).data(\"kendoSelectBox\");\n\n                    if (selectBox) {\n                        selectBox.decorate(body);\n                    }\n                });\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            var id, tools = this.tools;\n\n            for (id in tools) {\n                if (tools[id].destroy) {\n                    tools[id].destroy();\n                }\n            }\n\n            if (this.window) {\n                this.window.destroy();\n            }\n        },\n\n        _attachEvents: function() {\n            var that = this,\n                buttons = \"[role=button].k-tool\",\n                enabledButtons = buttons + \":not(.k-state-disabled)\",\n                disabledButtons = buttons + \".k-state-disabled\";\n\n            that.element\n                .off(NS)\n                .on(\"mouseenter\" + NS, enabledButtons, function() { $(this).addClass(\"k-state-hover\"); })\n                .on(\"mouseleave\" + NS, enabledButtons, function() { $(this).removeClass(\"k-state-hover\"); })\n                .on(\"mousedown\" + NS, buttons, function(e) {\n                    e.preventDefault();\n                })\n                .on(\"keydown\" + NS, focusable, function(e) {\n                    var current = this;\n                    var focusElement,\n                        keyCode = e.keyCode;\n\n                    function move(direction, constrain) {\n                        var tools = that.element.find(focusable);\n                        var index = tools.index(current) + direction;\n\n                        if (constrain) {\n                            index = Math.max(0, Math.min(tools.length - 1, index));\n                        }\n\n                        return tools[index];\n                    }\n\n                    if (keyCode == keys.RIGHT || keyCode == keys.LEFT) {\n                        if (!$(current).hasClass(\".k-dropdown\")) {\n                            focusElement = move(keyCode == keys.RIGHT ? 1 : -1, true);\n                        }\n                    } else if (keyCode == keys.ESC) {\n                        focusElement = that._editor;\n                    } else if (keyCode == keys.TAB && !(e.ctrlKey || e.altKey)) {\n                        // skip tabbing to disabled tools, and focus the editing area when running out of tools\n                        if (e.shiftKey) {\n                            focusElement = move(-1);\n                        } else {\n                            focusElement = move(1);\n\n                            if (!focusElement) {\n                                focusElement = that._editor;\n                            }\n                        }\n                    }\n\n                    if (focusElement) {\n                        e.preventDefault();\n                        focusElement.focus();\n                    }\n                })\n                .on(\"click\" + NS, enabledButtons, function(e) {\n                    var button = $(this);\n                    e.preventDefault();\n                    e.stopPropagation();\n                    button.removeClass(\"k-state-hover\");\n                    if (!button.is(\"[data-popup]\")) {\n                        that._editor.exec(that._toolName(this));\n                    }\n                })\n                .on(\"click\" + NS, disabledButtons, function(e) { e.preventDefault(); });\n\n        },\n\n\n        _toolName: function (element) {\n            if (!element) {\n                return;\n            }\n\n            var className = element.className;\n\n            if (/k-tool\\b/i.test(className)) {\n                className = element.firstChild.className;\n            }\n\n            var tool = $.grep(className.split(\" \"), function (x) {\n                return !/^k-(widget|tool|tool-icon|state-hover|header|combobox|dropdown|selectbox|colorpicker)$/i.test(x);\n            });\n\n            return tool[0] ? tool[0].substring(tool[0].lastIndexOf(\"-\") + 1) : \"custom\";\n        },\n\n        refreshTools: function() {\n            var that = this,\n                editor = that._editor,\n                range = editor.getRange(),\n                nodes = kendo.ui.editor.RangeUtils.textNodes(range);\n\n            if (!nodes.length) {\n                nodes = [range.startContainer];\n            }\n\n            that.items().each(function () {\n                var tool = that.tools[that._toolName(this)];\n                if (tool && tool.update) {\n                    tool.update($(this), nodes);\n                }\n            });\n\n            this.update();\n        },\n\n        update: function() {\n            this.element.children().children().each(function() {\n                var tool = $(this);\n                tool.css(\"display\", tool.hasClass(\"k-state-disabled\") ? \"none\" : \"\");\n            });\n            this.updateGroups();\n        }\n    });\n\n$.extend(editorNS, {\n    Toolbar: Toolbar\n});\n\n})(window.jQuery);\n\n(function($, undefined) {\n\nvar kendo = window.kendo,\n    extend = $.extend,\n    proxy = $.proxy,\n    Editor = kendo.ui.editor,\n    dom = Editor.Dom,\n    EditorUtils = Editor.EditorUtils,\n    RangeUtils = Editor.RangeUtils,\n    Command = Editor.Command,\n    NS = \".kendoEditor\",\n    ACTIVESTATE = \"k-state-active\",\n    SELECTEDSTATE = \"k-state-selected\",\n    Tool = Editor.Tool,\n    ToolTemplate = Editor.ToolTemplate,\n    InsertHtmlCommand = Editor.InsertHtmlCommand,\n    BlockFormatFinder = Editor.BlockFormatFinder,\n    registerTool = Editor.EditorUtils.registerTool;\n\nvar editableCell = \"<td>\" + Editor.emptyElementContent + \"</td>\";\n\nvar tableFormatFinder = new BlockFormatFinder([{tags:[\"table\"]}]);\n\nvar TableCommand = InsertHtmlCommand.extend({\n    _tableHtml: function(rows, columns) {\n        rows = rows || 1;\n        columns = columns || 1;\n\n        return \"<table class='k-table' data-last>\" +\n                   new Array(rows + 1).join(\"<tr>\" + new Array(columns + 1).join(editableCell) + \"</tr>\") +\n               \"</table>\";\n    },\n\n    postProcess: function(editor, range) {\n        var insertedTable = $(\"table[data-last]\", editor.document).removeAttr(\"data-last\");\n\n        range.selectNodeContents(insertedTable.find(\"td\")[0]);\n\n        editor.selectRange(range);\n    },\n\n    exec: function() {\n        var options = this.options;\n        options.html = this._tableHtml(options.rows, options.columns);\n        options.postProcess = this.postProcess;\n\n        InsertHtmlCommand.fn.exec.call(this);\n    }\n});\n\nvar PopupTool = Tool.extend({\n    initialize: function(ui, options) {\n        Tool.fn.initialize.call(this, ui, options);\n\n        var popup = $(this.options.popupTemplate).appendTo(\"body\").kendoPopup({\n            anchor: ui,\n            copyAnchorStyles: false,\n            open: proxy(this._open, this),\n            activate: proxy(this._activate, this),\n            close: proxy(this._close, this)\n        }).data(\"kendoPopup\");\n\n        ui.click(proxy(this._toggle, this))\n          .keydown(proxy(this._keydown, this));\n\n        this._editor = options.editor;\n        this._popup = popup;\n    },\n\n    popup: function() {\n        return this._popup;\n    },\n\n    _activate: $.noop,\n\n    _open: function() {\n        this._popup.options.anchor.addClass(ACTIVESTATE);\n    },\n\n    _close: function() {\n        this._popup.options.anchor.removeClass(ACTIVESTATE);\n    },\n\n    _keydown: function(e) {\n        var keys = kendo.keys;\n        var key = e.keyCode;\n\n        if (key == keys.DOWN && e.altKey) {\n            this._popup.open();\n        } else if (key == keys.ESC) {\n            this._popup.close();\n        }\n    },\n\n    _toggle: function(e) {\n        var button = $(e.target).closest(\".k-tool\");\n\n        if (!button.hasClass(\"k-state-disabled\")) {\n            this.popup().toggle();\n        }\n    },\n\n    update: function(ui) {\n        this.popup().close();\n\n        ui.removeClass(\"k-state-hover\");\n    },\n\n    destroy: function() {\n        this._popup.destroy();\n    }\n});\n\nvar InsertTableTool = PopupTool.extend({\n    init: function(options) {\n        this.cols = 8;\n        this.rows = 6;\n\n        PopupTool.fn.init.call(this, $.extend(options, {\n            command: TableCommand,\n            popupTemplate:\n                \"<div class='k-ct-popup'>\" +\n                    new Array(this.cols * this.rows + 1).join(\"<span class='k-ct-cell k-state-disabled' />\") +\n                    \"<div class='k-status'></div>\" +\n                \"</div>\"\n        }));\n    },\n\n    _activate: function() {\n        var that = this,\n            element = that._popup.element,\n            cells = element.find(\".k-ct-cell\"),\n            firstCell = cells.eq(0),\n            lastCell = cells.eq(cells.length - 1),\n            start = kendo.getOffset(firstCell),\n            end = kendo.getOffset(lastCell),\n            cols = that.cols,\n            rows = that.rows,\n            cellWidth, cellHeight;\n\n        element.find(\"*\").addBack().attr(\"unselectable\", \"on\");\n\n        end.left += lastCell[0].offsetWidth;\n        end.top += lastCell[0].offsetHeight;\n\n        cellWidth = (end.left - start.left) / cols;\n        cellHeight = (end.top - start.top) / rows;\n\n        function tableFromLocation(e) {\n            var w = $(window);\n            return {\n                row: Math.floor((e.clientY + w.scrollTop() - start.top) / cellHeight) + 1,\n                col: Math.floor((e.clientX + w.scrollLeft() - start.left) / cellWidth) + 1\n            };\n        }\n\n        element\n            .on(\"mousemove\" + NS, function(e) {\n                that._setTableSize(tableFromLocation(e));\n            })\n            .on(\"mouseleave\" + NS, function() {\n                that._setTableSize();\n            })\n            .on(\"mouseup\" + NS, function(e) {\n                that._exec(tableFromLocation(e));\n            });\n    },\n\n    _valid: function(size) {\n        return size && size.row > 0 && size.col > 0 && size.row <= this.rows && size.col <= this.cols;\n    },\n\n    _exec: function(size) {\n        if (this._valid(size)) {\n            this._editor.exec(\"createTable\", {\n                rows: size.row,\n                columns: size.col\n            });\n            this._popup.close();\n        }\n    },\n\n    _setTableSize: function(size) {\n        var element = this._popup.element;\n        var status = element.find(\".k-status\");\n        var cells = element.find(\".k-ct-cell\");\n        var rows = this.rows;\n        var cols = this.cols;\n        var messages = this._editor.options.messages;\n\n        if (this._valid(size)) {\n            status.text(kendo.format(messages.createTableHint, size.row, size.col));\n\n            cells.each(function(i) {\n                $(this).toggleClass(\n                    SELECTEDSTATE,\n                    i % cols < size.col && i / cols < size.row\n                );\n            });\n        } else {\n            status.text(messages.dialogCancel);\n            cells.removeClass(SELECTEDSTATE);\n        }\n    },\n\n    _keydown: function(e) {\n        PopupTool.fn._keydown.call(this, e);\n\n        var keys = kendo.keys;\n        var key = e.keyCode;\n        var cells = this._popup.element.find(\".k-ct-cell\");\n        var focus = Math.max(cells.filter(\".k-state-selected\").last().index(), 0);\n        var selectedRows = Math.floor(focus / this.cols);\n        var selectedColumns = focus % this.cols;\n\n        var changed = false;\n\n        if (key == keys.DOWN && !e.altKey) {\n            changed = true;\n            selectedRows++;\n        } else if (key == keys.UP) {\n            changed = true;\n            selectedRows--;\n        } else if (key == keys.RIGHT) {\n            changed = true;\n            selectedColumns++;\n        } else if (key == keys.LEFT) {\n            changed = true;\n            selectedColumns--;\n        }\n\n        var tableSize = {\n            row: Math.max(1, Math.min(this.rows, selectedRows + 1)),\n            col: Math.max(1, Math.min(this.cols, selectedColumns + 1))\n        };\n\n        if (key == keys.ENTER) {\n            this._exec(tableSize);\n        } else {\n            this._setTableSize(tableSize);\n        }\n\n        if (changed) {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n        }\n    },\n\n    _open: function() {\n        var messages = this._editor.options.messages;\n\n        PopupTool.fn._open.call(this);\n\n        this.popup().element\n            .find(\".k-status\").text(messages.dialogCancel).end()\n            .find(\".k-ct-cell\").removeClass(SELECTEDSTATE);\n    },\n\n    _close: function() {\n        PopupTool.fn._close.call(this);\n        this.popup().element.off(NS);\n    },\n\n    update: function (ui, nodes) {\n        var isFormatted;\n\n        PopupTool.fn.update.call(this, ui);\n\n        isFormatted = tableFormatFinder.isFormatted(nodes);\n        ui.toggleClass(\"k-state-disabled\", isFormatted);\n    }\n});\n\nvar InsertRowCommand = Command.extend({\n    exec: function () {\n        var range = this.lockRange(true),\n            td = range.endContainer,\n            cellCount, row,\n            newRow;\n\n        while (dom.name(td) != \"td\") {\n            td = td.parentNode;\n        }\n\n        row = td.parentNode;\n        cellCount = row.children.length;\n        newRow = row.cloneNode(true);\n\n        for (var i = 0; i < row.cells.length; i++) {\n            newRow.cells[i].innerHTML = Editor.emptyElementContent;\n        }\n\n        if (this.options.position == \"before\") {\n            dom.insertBefore(newRow, row);\n        } else {\n            dom.insertAfter(newRow, row);\n        }\n\n        this.releaseRange(range);\n    }\n});\n\nvar InsertColumnCommand = Command.extend({\n    exec: function () {\n        var range = this.lockRange(true),\n            td = dom.closest(range.endContainer, \"td\"),\n            table = dom.closest(td, \"table\"),\n            columnIndex,\n            i,\n            rows = table.rows,\n            cell,\n            newCell,\n            position = this.options.position;\n\n        columnIndex = dom.findNodeIndex(td);\n\n        for (i = 0; i < rows.length; i++) {\n            cell = rows[i].cells[columnIndex];\n\n            newCell = cell.cloneNode();\n            newCell.innerHTML = Editor.emptyElementContent;\n\n            if (position == \"before\") {\n                dom.insertBefore(newCell, cell);\n            } else {\n                dom.insertAfter(newCell, cell);\n            }\n        }\n\n        this.releaseRange(range);\n    }\n});\n\nvar DeleteRowCommand = Command.extend({\n    exec: function () {\n        var range = this.lockRange();\n        var rows = RangeUtils.mapAll(range, function(node) {\n            return $(node).closest(\"tr\")[0];\n        });\n        var table = dom.closest(rows[0], \"table\");\n        var focusElement;\n\n        if (table.rows.length <= rows.length) {\n            focusElement = dom.next(table);\n            if (!focusElement || dom.insignificant(focusElement)) {\n                focusElement = dom.prev(table);\n            }\n\n            dom.remove(table);\n        } else {\n            for (var i = 0; i < rows.length; i++) {\n                var row = rows[i];\n                dom.removeTextSiblings(row);\n\n                focusElement = dom.next(row) || dom.prev(row);\n                focusElement = focusElement.cells[0];\n\n                dom.remove(row);\n            }\n        }\n\n        if (focusElement) {\n            range.setStart(focusElement, 0);\n            range.collapse(true);\n            this.editor.selectRange(range);\n        }\n    }\n});\n\nvar DeleteColumnCommand = Command.extend({\n    exec: function () {\n        var range = this.lockRange(),\n            td = dom.closest(range.endContainer, \"td\"),\n            table = dom.closest(td, \"table\"),\n            rows = table.rows,\n            columnIndex = dom.findNodeIndex(td, true),\n            columnCount = rows[0].cells.length,\n            focusElement, i;\n\n        if (columnCount == 1) {\n            focusElement = dom.next(table);\n            if (!focusElement || dom.insignificant(focusElement)) {\n                focusElement = dom.prev(table);\n            }\n\n            dom.remove(table);\n        } else {\n            dom.removeTextSiblings(td);\n\n            focusElement = dom.next(td) || dom.prev(td);\n\n            for (i = 0; i < rows.length; i++) {\n                dom.remove(rows[i].cells[columnIndex]);\n            }\n        }\n\n        if (focusElement) {\n            range.setStart(focusElement, 0);\n            range.collapse(true);\n            this.editor.selectRange(range);\n        }\n    }\n});\n\nvar TableModificationTool = Tool.extend({\n    command: function (options) {\n        options = extend(options, this.options);\n\n        if (options.action == \"delete\") {\n            if (options.type == \"row\") {\n                return new DeleteRowCommand(options);\n            } else {\n                return new DeleteColumnCommand(options);\n            }\n        } else {\n            if (options.type == \"row\") {\n                return new InsertRowCommand(options);\n            } else {\n                return new InsertColumnCommand(options);\n            }\n        }\n    },\n\n    initialize: function(ui, options) {\n        Tool.fn.initialize.call(this, ui, options);\n        ui.addClass(\"k-state-disabled\");\n    },\n\n    update: function(ui, nodes) {\n        var isFormatted = !tableFormatFinder.isFormatted(nodes);\n        ui.toggleClass(\"k-state-disabled\", isFormatted);\n    }\n});\n\nextend(kendo.ui.editor, {\n    PopupTool: PopupTool,\n    TableCommand: TableCommand,\n    InsertTableTool: InsertTableTool,\n    TableModificationTool: TableModificationTool,\n    InsertRowCommand: InsertRowCommand,\n    InsertColumnCommand: InsertColumnCommand,\n    DeleteRowCommand: DeleteRowCommand,\n    DeleteColumnCommand: DeleteColumnCommand\n});\n\nregisterTool(\"createTable\", new InsertTableTool({ template: new ToolTemplate({template: EditorUtils.buttonTemplate, popup: true, title: \"Create table\"})}));\n\nregisterTool(\"addColumnLeft\", new TableModificationTool({ type: \"column\", position: \"before\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Add column on the left\"})}));\nregisterTool(\"addColumnRight\", new TableModificationTool({ type: \"column\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Add column on the right\"})}));\nregisterTool(\"addRowAbove\", new TableModificationTool({ type: \"row\", position: \"before\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Add row above\"})}));\nregisterTool(\"addRowBelow\", new TableModificationTool({ type: \"row\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Add row below\"})}));\nregisterTool(\"deleteRow\", new TableModificationTool({ type: \"row\", action: \"delete\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Delete row\"})}));\nregisterTool(\"deleteColumn\", new TableModificationTool({ type: \"column\", action: \"delete\", template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Delete column\"})}));\n//registerTool(\"mergeCells\", new Tool({ template: new ToolTemplate({template: EditorUtils.buttonTemplate, title: \"Merge cells\"})}));\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo;\n    var caret = kendo.caret;\n    var keys = kendo.keys;\n    var ui = kendo.ui;\n    var Widget = ui.Widget;\n    var ns = \".kendoMaskedTextBox\";\n    var proxy = $.proxy;\n\n    var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? \"propertychange\" : \"input\") + ns;\n    var STATEDISABLED = \"k-state-disabled\";\n    var DISABLED = \"disabled\";\n    var READONLY = \"readonly\";\n    var CHANGE = \"change\";\n\n    var MaskedTextBox = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n            var DOMElement;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._rules = $.extend({}, that.rules, that.options.rules);\n\n            element = that.element;\n            DOMElement = element[0];\n\n            that.wrapper = element;\n            that._tokenize();\n            that._reset();\n\n            that.element\n                .addClass(\"k-textbox\")\n                .attr(\"autocomplete\", \"off\")\n                .on(\"focus\" + ns, function() {\n                    var value = DOMElement.value;\n\n                    if (!value) {\n                        DOMElement.value = that._old = that._emptyMask;\n                    } else {\n                        that._togglePrompt(true);\n                    }\n\n                    that._oldValue = value;\n\n                    that._timeoutId = setTimeout(function() {\n                        caret(element, 0, value ? that._maskLength : 0);\n                    });\n                })\n                .on(\"focusout\" + ns, function() {\n                    var value = element.val();\n\n                    clearTimeout(that._timeoutId);\n                    DOMElement.value = that._old = \"\";\n\n                    if (value !== that._emptyMask) {\n                        DOMElement.value = that._old = value;\n                    }\n\n                    that._change();\n                    that._togglePrompt();\n                });\n\n             var disabled = element.is(\"[disabled]\");\n\n             if (disabled) {\n                 that.enable(false);\n             } else {\n                 that.readonly(element.is(\"[readonly]\"));\n             }\n\n             that.value(that.options.value || element.val());\n\n             kendo.notify(that);\n        },\n\n        options: {\n            name: \"MaskedTextBox\",\n            promptChar: \"_\",\n            clearPromptChar: false,\n            culture: \"\",\n            rules: {},\n            value: \"\",\n            mask: \"\"\n        },\n\n        events: [\n            CHANGE\n        ],\n\n        rules: {\n            \"0\": /\\d/,\n            \"9\": /\\d|\\s/,\n            \"#\": /\\d|\\s|\\+|\\-/,\n            \"L\": /[a-zA-Z]/,\n            \"?\": /[a-zA-Z]|\\s/,\n            \"&\": /\\S/,\n            \"C\": /./,\n            \"A\": /[a-zA-Z0-9]/,\n            \"a\": /[a-zA-Z0-9]|\\s/\n        },\n\n        setOptions: function(options) {\n            var that = this;\n\n            Widget.fn.setOptions.call(that, options);\n\n            that._rules = $.extend({}, that.rules, that.options.rules);\n\n            that._tokenize();\n\n            this._unbindInput();\n            this._bindInput();\n\n            that.value(that.element.val());\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.element.off(ns);\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n\n            Widget.fn.destroy.call(that);\n        },\n\n        value: function(value) {\n            var element = this.element;\n            var emptyMask = this._emptyMask;\n            var options = this.options;\n\n            if (value === undefined) {\n                return this.element.val();\n            }\n\n            if (value === null) {\n                value = \"\";\n            }\n\n            if (!emptyMask) {\n                element.val(value);\n                return;\n            }\n\n            value = this._unmask(value + \"\");\n\n            element.val(value ? emptyMask : \"\");\n\n            this._mask(0, this._maskLength, value);\n\n            value = element.val();\n            this._oldValue = value;\n\n            if (kendo._activeElement() !== element) {\n                if (value === emptyMask) {\n                    element.val(\"\");\n                } else {\n                    this._togglePrompt();\n                }\n            }\n        },\n\n        _togglePrompt: function(show) {\n            var DOMElement = this.element[0];\n            var value = DOMElement.value;\n\n            if (this.options.clearPromptChar) {\n                if (!show) {\n                    value = value.replace(new RegExp(this.options.promptChar, \"g\"), \" \");\n                } else {\n                    value = this._oldValue;\n                }\n\n                DOMElement.value = this._old = value;\n            }\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        _bindInput: function() {\n            var that = this;\n\n            if (that._maskLength) {\n                that.element\n                    .on(\"keydown\" + ns, proxy(that._keydown, that))\n                    .on(\"keypress\" + ns, proxy(that._keypress, that))\n                    .on(\"paste\" + ns, proxy(that._paste, that))\n                    .on(INPUT_EVENT_NAME, proxy(that._propertyChange, that));\n            }\n        },\n\n        _unbindInput: function() {\n            this.element\n                .off(\"keydown\" + ns)\n                .off(\"keypress\" + ns)\n                .off(\"paste\" + ns)\n                .off(INPUT_EVENT_NAME);\n        },\n\n        _editable: function(options) {\n            var that = this;\n            var element = that.element;\n            var disable = options.disable;\n            var readonly = options.readonly;\n\n            that._unbindInput();\n\n            if (!readonly && !disable) {\n                element.removeAttr(DISABLED)\n                       .removeAttr(READONLY)\n                       .removeClass(STATEDISABLED);\n\n                that._bindInput();\n            } else {\n                element.attr(DISABLED, disable)\n                       .attr(READONLY, readonly)\n                       .toggleClass(STATEDISABLED, disable);\n            }\n        },\n\n        _change: function() {\n            var that = this;\n            var value = that.value();\n\n            if (value !== that._oldValue) {\n                that._oldValue = value;\n\n                that.trigger(CHANGE);\n                that.element.trigger(CHANGE);\n            }\n        },\n\n        _propertyChange: function() {\n            var that = this;\n            var element = that.element[0];\n            var value = element.value;\n            var unmasked;\n            var start;\n\n            if (kendo._activeElement() !== element) {\n                return;\n            }\n\n            if (value !== that._old && !that._pasting) {\n                start = caret(element)[0];\n                unmasked = that._unmask(value.substring(start), start);\n\n                element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n\n                that._mask(start, start, unmasked);\n                caret(element, start);\n            }\n        },\n\n        _paste: function(e) {\n            var that = this;\n            var element = e.target;\n            var position = caret(element);\n            var start = position[0];\n            var end = position[1];\n\n            var unmasked = that._unmask(element.value.substring(end), end);\n\n            that._pasting = true;\n\n            setTimeout(function() {\n                var value = element.value;\n                var pasted = value.substring(start, caret(element)[0]);\n\n                element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n\n                that._mask(start, start, pasted);\n\n                start = caret(element)[0];\n\n                that._mask(start, start, unmasked);\n\n                caret(element, start);\n\n                that._pasting = false;\n            });\n        },\n\n        _reset: function() {\n            var that = this;\n            var element = that.element;\n            var formId = element.attr(\"form\");\n            var form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    setTimeout(function() {\n                        that.value(element[0].value);\n                    });\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        },\n\n        _keydown: function(e) {\n            var key = e.keyCode;\n            var element = this.element[0];\n            var selection = caret(element);\n            var start = selection[0];\n            var end = selection[1];\n            var placeholder;\n\n            var backward = key === keys.BACKSPACE;\n\n            if (backward || key === keys.DELETE) {\n                if (start === end) {\n                    if (backward) {\n                        start -= 1;\n                    } else {\n                        end += 1;\n                    }\n\n                    placeholder = this._find(start, backward);\n                }\n\n                if (placeholder !== undefined && placeholder !== start) {\n                    if (backward) {\n                        placeholder += 1;\n                    }\n\n                    caret(element, placeholder);\n                } else if (start > -1) {\n                    this._mask(start, end, \"\", backward);\n                }\n\n                e.preventDefault();\n            } else if (key === keys.ENTER) {\n                this._change();\n            }\n        },\n\n        _keypress: function(e) {\n            if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.ENTER) {\n                return;\n            }\n\n            var character = String.fromCharCode(e.which);\n\n            var selection = caret(this.element);\n\n            this._mask(selection[0], selection[1], character);\n\n            if (e.keyCode === keys.BACKSPACE || character) {\n                e.preventDefault();\n            }\n        },\n\n        _find: function(idx, backward) {\n            var value = this.element.val() || this._emptyMask;\n            var step = 1;\n\n            if (backward === true) {\n                step = -1;\n            }\n\n            while (idx > -1 || idx <= this._maskLength) {\n                if (value.charAt(idx) !== this.tokens[idx]) {\n                    return idx;\n                }\n\n                idx += step;\n            }\n\n            return -1;\n        },\n\n        _mask: function(start, end, value, backward) {\n            var element = this.element[0];\n            var current = element.value || this._emptyMask;\n            var empty = this.options.promptChar;\n            var valueLength;\n            var chrIdx = 0;\n            var unmasked;\n            var chr;\n            var idx;\n\n            start = this._find(start, backward);\n\n            if (start > end) {\n                end = start;\n            }\n\n            unmasked = this._unmask(current.substring(end), end);\n            value = this._unmask(value, start);\n            valueLength = value.length;\n\n            if (value) {\n                unmasked = unmasked.replace(new RegExp(\"^_{0,\" + valueLength + \"}\"), \"\");\n            }\n\n            value += unmasked;\n            current = current.split(\"\");\n            chr = value.charAt(chrIdx);\n\n            while (start < this._maskLength) {\n                current[start] = chr || empty;\n                chr = value.charAt(++chrIdx);\n\n                if (idx === undefined && chrIdx > valueLength) {\n                    idx = start;\n                }\n\n                start = this._find(start + 1);\n            }\n\n            element.value = this._old = current.join(\"\");\n\n            if (kendo._activeElement() === element) {\n                if (idx === undefined) {\n                    idx = this._maskLength;\n                }\n\n                caret(element, idx);\n            }\n        },\n\n        _unmask: function(value, idx) {\n            if (!value) {\n                return \"\";\n            }\n\n            value = (value + \"\").split(\"\");\n\n            var chr;\n            var token;\n            var chrIdx = 0;\n            var tokenIdx = idx || 0;\n\n            var empty = this.options.promptChar;\n\n            var valueLength = value.length;\n            var tokensLength = this.tokens.length;\n\n            var result = \"\";\n\n            while (tokenIdx < tokensLength) {\n                chr = value[chrIdx];\n                token = this.tokens[tokenIdx];\n\n                if (chr === token || chr === empty) {\n                    result += chr === empty ? empty : \"\";\n\n                    chrIdx += 1;\n                    tokenIdx += 1;\n                } else if (typeof token !== \"string\") {\n                    if ((token.test && token.test(chr)) || ($.isFunction(token) && token(chr))) {\n                        result += chr;\n                        tokenIdx += 1;\n                    }\n\n                    chrIdx += 1;\n                } else {\n                    tokenIdx += 1;\n                }\n\n                if (chrIdx >= valueLength) {\n                    break;\n                }\n            }\n\n            return result;\n        },\n\n        _tokenize: function() {\n            var tokens = [];\n            var tokenIdx = 0;\n\n            var mask = this.options.mask || \"\";\n            var maskChars = mask.split(\"\");\n            var length = maskChars.length;\n            var idx = 0;\n            var chr;\n            var rule;\n\n            var emptyMask = \"\";\n            var promptChar = this.options.promptChar;\n            var numberFormat = kendo.getCulture(this.options.culture).numberFormat;\n            var rules = this._rules;\n\n            for (; idx < length; idx++) {\n                chr = maskChars[idx];\n                rule = rules[chr];\n\n                if (rule) {\n                    tokens[tokenIdx] = rule;\n                    emptyMask += promptChar;\n                    tokenIdx += 1;\n                } else {\n                    if (chr === \".\" || chr === \",\") {\n                        chr = numberFormat[chr];\n                    } else if (chr === \"$\") {\n                        chr = numberFormat.currency.symbol;\n                    } else if (chr === \"\\\\\") {\n                        idx += 1;\n                        chr = maskChars[idx];\n                    }\n\n                    chr = chr.split(\"\");\n\n                    for (var i = 0, l = chr.length; i < l; i++) {\n                        tokens[tokenIdx] = chr[i];\n                        emptyMask += chr[i];\n                        tokenIdx += 1;\n                    }\n                }\n            }\n\n            this.tokens = tokens;\n\n            this._emptyMask = emptyMask;\n            this._maskLength = emptyMask.length;\n        }\n    });\n\n    ui.plugin(MaskedTextBox);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true*/\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Class = kendo.Class,\n        Widget = ui.Widget,\n        DataSource = kendo.data.DataSource,\n        toString = {}.toString,\n        identity = function(o) { return o; },\n        map = $.map,\n        extend = $.extend,\n        isFunction = kendo.isFunction,\n        CHANGE = \"change\",\n        ERROR = \"error\",\n        PROGRESS = \"progress\",\n        STATERESET = \"stateReset\",\n        AUTO = \"auto\",\n        DIV = \"<div/>\",\n        NS = \".kendoPivotGrid\",\n        ROW_TOTAL_KEY = \"__row_total__\",\n        DATABINDING = \"dataBinding\",\n        DATABOUND = \"dataBound\",\n        EXPANDMEMBER = \"expandMember\",\n        COLLAPSEMEMBER = \"collapseMember\",\n        STATE_EXPANDED = \"k-i-arrow-s\",\n        STATE_COLLAPSED = \"k-i-arrow-e\",\n        HEADER_TEMPLATE = \"#: data.member.caption || data.member.name #\",\n        KPISTATUS_TEMPLATE = '<span class=\"k-icon k-i-kpi-#=data.dataItem.value > 0 ? \\\"open\\\" : data.dataItem.value < 0 ? \\\"denied\\\" : \\\"hold\\\"#\">#:data.dataItem.value#</span>',\n        KPITREND_TEMPLATE = '<span class=\"k-icon k-i-kpi-#=data.dataItem.value > 0 ? \\\"increase\\\" : data.dataItem.value < 0 ? \\\"decrease\\\" : \\\"equal\\\"#\">#:data.dataItem.value#</span>',\n        DATACELL_TEMPLATE = '#= data.dataItem ? kendo.htmlEncode(data.dataItem.fmtValue || data.dataItem.value) || \"&nbsp;\" : \"&nbsp;\" #',\n        LAYOUT_TABLE = '<table class=\"k-pivot-layout\">' +\n                            '<tr>' +\n                                '<td>' +\n                                    '<div class=\"k-pivot-rowheaders\"></div>' +\n                                '</td>' +\n                                '<td>' +\n                                    '<div class=\"k-pivot-table k-state-default\"></div>' +\n                                '</td>' +\n                            '</tr>' +\n                        '</table>';\n\n    function normalizeMeasures(measure) {\n        var descriptor = typeof measure === \"string\" ? [{ name: measure }] : measure;\n        var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n        return map(descriptors, function(d) {\n            if (typeof d === \"string\") {\n                return { name: d };\n            }\n            return { name: d.name, type: d.type };\n        });\n    }\n\n    function normalizeMembers(member) {\n        var descriptor = typeof member === \"string\" ? [{ name: [member], expand: false }] : member;\n        var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n        return map(descriptors, function(d) {\n            if (typeof d === \"string\") {\n                return { name: [d], expand: false };\n            }\n            return { name: (toString.call(d.name) === \"[object Array]\" ? d.name.slice() : [d.name]), expand: d.expand };\n        });\n    }\n\n    function parentName(tuple, level) {\n        var member = tuple.members[level];\n        var parentNameValue = buildPath(tuple, level - 1);\n\n        if (member.parentName) {\n            parentNameValue.push(member.parentName);\n        }\n\n        if (!parentNameValue.length) {\n            parentNameValue = \"\";\n        }\n\n        return kendo.stringify(parentNameValue);\n    }\n\n    function accumulateMembers(accumulator, rootTuple, tuple, level) {\n        var idx, length;\n        var children;\n        var member;\n\n        if (!tuple) {\n            tuple = rootTuple;\n        }\n\n        if (!level) {\n            level = 0;\n        }\n\n        member = tuple.members[level];\n\n        if (!member || member.measure) { //return if no member or measure\n            return;\n        }\n\n        children = member.children;\n        length = children.length;\n\n        if (tuple === rootTuple) {\n            accumulator[kendo.stringify([member.name])] = !!length;\n        } else if (length) {\n            accumulator[kendo.stringify(buildPath(tuple, level))] = true;\n        }\n\n        if (length) {\n            for (idx = 0; idx < length; idx++) {\n                accumulateMembers(accumulator, rootTuple, children[idx], level);\n            }\n        }\n\n        accumulateMembers(accumulator, rootTuple, tuple, level + 1);\n    }\n\n    function descriptorsForAxes(tuples) {\n        var result = {};\n\n        if (tuples.length) {\n            accumulateMembers(result, tuples[0]);\n        }\n\n        var descriptors = [];\n        for (var k in result) {\n            descriptors.push({ name: $.parseJSON(k), expand: result[k] });\n        }\n\n        return descriptors;\n    }\n\n    function addMissingPathMembers(members, axis) {\n        var tuples = axis.tuples || [];\n        var firstTuple = tuples[0];\n\n        if (firstTuple && members.length < firstTuple.members.length) {\n            var tupleMembers = firstTuple.members;\n\n            for (var idx = 0; idx < tupleMembers.length; idx++) {\n                if (tupleMembers[idx].measure) {\n                    continue;\n                }\n\n                var found = false;\n                for (var j = 0; j < members.length; j++) {\n                    if (getName(members[j]).indexOf(tupleMembers[idx].hierarchy) === 0) {\n                        found = true;\n                        break;\n                    }\n                }\n\n                if (!found) {\n                    members.push({ name: [tupleMembers[idx].name], expand: false }); //calling normalize here to make name from string to array\n                }\n            }\n        }\n    }\n\n    function tupleToDescriptors(tuple) {\n        var result = [];\n        var members = tuple.members;\n\n        for (var idx = 0; idx < members.length; idx++) {\n            if (members[idx].measure) {\n                continue;\n            }\n\n            //make tuple name an array\n            result.push({ name: [members[idx].name], expand: members[idx].children.length > 0});\n        }\n\n        return result;\n    }\n\n    function descriptorsForMembers(axis, members, measures) {\n        axis = axis || {};\n\n        addMissingPathMembers(members, axis);\n\n        if (measures.length > 1) {\n            members.push({\n                name: \"Measures\",\n                measure: true,\n                children: normalizeMembers(measures)\n            });\n        }\n\n        var tupletoSearch = {\n            members: members\n        };\n\n        if (axis.tuples) {\n            var result = findExistingTuple(axis.tuples, tupletoSearch);\n            if (result.tuple) {\n                members = tupleToDescriptors(result.tuple);\n            }\n        }\n\n        return members;\n    }\n\n    function addDataCellVertical(result, rowIndex, map, key, resultFuncs, formats, offset) {\n        var value, aggregate, columnKey, resultFunc, format, measuresCount = 0;\n\n        var start = rowIndex;\n\n        for (aggregate in map[key].aggregates) {\n            value = map[key].aggregates[aggregate];\n            resultFunc = resultFuncs[aggregate];\n            format = formats[aggregate];\n\n            value = resultFunc ? resultFunc(value) : value.accumulator;\n\n            result[start] = {\n                ordinal: start,\n                value: value,\n                fmtValue: format ? kendo.format(format, value) : value\n            };\n            ++measuresCount;\n            start += offset;\n        }\n\n        var items = map[key].items;\n\n        for (columnKey in items) {\n            var index = items[columnKey].index * measuresCount;\n\n            index = start + index*offset;\n\n            for (aggregate in items[columnKey].aggregates) {\n                value = items[columnKey].aggregates[aggregate];\n                resultFunc = resultFuncs[aggregate];\n                format = formats[aggregate];\n\n                value = resultFunc ? resultFunc(value) : value.accumulator;\n\n                result[index] = {\n                    ordinal: index,\n                    value: value,\n                    fmtValue: format ? kendo.format(format, value) : value\n                };\n                index += offset;\n            }\n        }\n    }\n\n    function addDataCell(result, rowIndex, map, key, resultFuncs, formats) {\n        var value, aggregate, columnKey, resultFunc, format, measuresCount = 0;\n\n        for (aggregate in map[key].aggregates) {\n            value = map[key].aggregates[aggregate];\n            resultFunc = resultFuncs[aggregate];\n            format = formats[aggregate];\n\n            value = resultFunc ? resultFunc(value) : value.accumulator;\n\n            result[result.length] = {\n                ordinal: rowIndex++,\n                value: value,\n                fmtValue: format ? kendo.format(format, value) : value\n            };\n            ++measuresCount;\n        }\n\n        var items = map[key].items;\n\n        for (columnKey in items) {\n            var index = items[columnKey].index * measuresCount;\n\n            for (aggregate in items[columnKey].aggregates) {\n                value = items[columnKey].aggregates[aggregate];\n                resultFunc = resultFuncs[aggregate];\n                format = formats[aggregate];\n\n                value = resultFunc ? resultFunc(value) : value.accumulator;\n\n                result[result.length] = {\n                    ordinal: rowIndex + index++,\n                    value: value,\n                    fmtValue: format ? kendo.format(format, value) : value\n                };\n            }\n        }\n    }\n\n    function createAggregateGetter(m) {\n        var measureGetter = kendo.getter(m.field, true);\n        return function(aggregatorContext, state) {\n            return m.aggregate(measureGetter(aggregatorContext.dataItem), state, aggregatorContext);\n        };\n    }\n\n    function isNumber(val) {\n        return typeof val === \"number\" && !isNaN(val);\n    }\n\n    function isDate(val) {\n        return val && val.getTime;\n    }\n\n    var functions = {\n        sum: function(value, state) {\n            var accumulator = state.accumulator;\n\n            if (!isNumber(accumulator)) {\n                accumulator = value;\n            } else if (isNumber(value)) {\n                accumulator += value;\n            }\n\n            return accumulator;\n        },\n        count: function(value, state) {\n            return (state.accumulator || 0) + 1;\n        },\n        average: {\n            aggregate: function(value, state) {\n                var accumulator = state.accumulator;\n\n                if (state.count === undefined) {\n                    state.count = 0;\n                }\n\n                if (!isNumber(accumulator)) {\n                    accumulator = value;\n                } else if (isNumber(value)) {\n                    accumulator += value;\n                }\n\n                if (isNumber(value)) {\n                    state.count++;\n                }\n\n                return accumulator;\n            },\n            result: function(state) {\n                var accumulator = state.accumulator;\n\n                if (isNumber(accumulator)) {\n                    accumulator = accumulator / state.count;\n                }\n\n                return accumulator;\n            }\n        },\n        max: function(value, state) {\n            var accumulator = state.accumulator;\n\n            if (!isNumber(accumulator) && !isDate(accumulator)) {\n                accumulator = value;\n            }\n\n            if(accumulator < value && (isNumber(value) || isDate(value))) {\n                accumulator = value;\n            }\n            return accumulator;\n        },\n        min: function(value, state) {\n            var accumulator = state.accumulator;\n\n            if (!isNumber(accumulator) && !isDate(accumulator)) {\n                accumulator = value;\n            }\n\n            if(accumulator > value && (isNumber(value) || isDate(value))) {\n                accumulator = value;\n            }\n            return accumulator;\n        }\n    };\n\n    var PivotCubeBuilder = Class.extend({\n        init: function(options) {\n            this.options = extend({}, this.options, options);\n            this.dimensions = this._normalizeDescriptors(\"field\", this.options.dimensions);\n            this.measures = this._normalizeDescriptors(\"name\", this.options.measures);\n        },\n\n        _normalizeDescriptors: function(keyField, descriptors) {\n            descriptors = descriptors || {};\n            var fields = {};\n            var field;\n\n            if (toString.call(descriptors) === \"[object Array]\") {\n                for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n                    field = descriptors[idx];\n                    if (typeof field === \"string\") {\n                        fields[field] = {};\n                    } else if (field[keyField]) {\n                        fields[field[keyField]] = field;\n                    }\n                }\n                descriptors = fields;\n            }\n\n            return descriptors;\n        },\n\n        _asTuples: function(map, descriptors, measureAggregators) {\n            measureAggregators = measureAggregators || [];\n\n            var dimensionsSchema = this.dimensions || [];\n            var result = [];\n            var root;\n            var idx;\n            var length;\n            var measureIdx;\n            var tuple;\n            var name;\n            var aggregatorsLength = measureAggregators.length || 1;\n\n            if (descriptors.length || measureAggregators.length) {\n                for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n\n                    root = { members: [] };\n\n                    for (idx = 0, length = descriptors.length; idx < length; idx++) {\n                        name = getName(descriptors[idx].name);\n\n                        root.members[root.members.length] = {\n                            children: [],\n                            caption: (dimensionsSchema[name] || {}).caption || \"All\",\n                            name: name,\n                            levelName: name,\n                            levelNum: \"0\",\n                            hasChildren: true,\n                            parentName: undefined,\n                            hierarchy: name\n                        };\n                    }\n\n                    if (aggregatorsLength > 1) {\n                        root.members[root.members.length] = {\n                            children: [],\n                            caption: (measureAggregators[measureIdx]).caption,\n                            name: measureAggregators[measureIdx].descriptor.name,\n                            levelName: \"MEASURES\",\n                            levelNum: \"0\",\n                            hasChildren: false,\n                            parentName: undefined,\n                            hierarchy: \"MEASURES\"\n                        };\n                    }\n                    result[result.length] = root;\n                }\n            }\n\n            for (var key in map) {\n                for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n                    tuple = { members: [] };\n                    for (idx = 0, length = descriptors.length; idx < length; idx++) {\n                        name = getName(descriptors[idx].name);\n\n                        if (map[key].parentName.indexOf(name) === 0) {\n                            tuple.members[tuple.members.length] = {\n                                children: [],\n                                caption: map[key].value,\n                                name: map[key].name,\n                                levelName: map[key].name,\n                                levelNum: 1,\n                                hasChildren: false,\n                                parentName: name,\n                                hierarchy: name\n                            };\n                        } else {\n                            tuple.members[tuple.members.length] = {\n                                children: [],\n                                caption: (dimensionsSchema[name] || {}).caption || \"All\",\n                                name: name,\n                                levelName: name,\n                                levelNum: \"0\",\n                                hasChildren: true,\n                                parentName: undefined,\n                                hierarchy: name\n                            };\n                        }\n                    }\n\n                    if (aggregatorsLength > 1) {\n                        tuple.members[tuple.members.length] = {\n                            children: [],\n                            caption: measureAggregators[measureIdx].caption,\n                            name: measureAggregators[measureIdx].descriptor.name,\n                            levelName: \"MEASURES\",\n                            levelNum: \"0\",\n                            hasChildren: true,\n                            parentName: undefined,\n                            hierarchy: \"MEASURES\"\n                        };\n                    }\n\n                    result[result.length] = tuple;\n                }\n            }\n\n            return result;\n        },\n\n        _toDataArray: function(map, rowStartOffset, measures, offset, addFunc) {\n            var formats = {};\n            var resultFuncs = {};\n            var descriptors, measure, name;\n\n            var idx = 0;\n            var length = measures && measures.length;\n\n            if (length) {\n                descriptors = (this.measures || {});\n                for (; idx < length; idx++) {\n                    name = measures[idx].name;\n                    measure = descriptors[name];\n\n                    if (measure.result) {\n                        resultFuncs[name] = measure.result;\n                    }\n\n                    if (measure.format) {\n                        formats[name] = measure.format;\n                    }\n                }\n            }\n\n            var result = [];\n            var items;\n            var rowIndex = 0;\n\n            addFunc(result, rowIndex, map, ROW_TOTAL_KEY, resultFuncs, formats, rowStartOffset);\n\n            for (var key in map) {\n                if (key === ROW_TOTAL_KEY) {\n                    continue;\n                }\n\n                rowIndex += offset;\n                addFunc(result, rowIndex, map, key, resultFuncs, formats, rowStartOffset);\n            }\n\n            return result;\n        },\n\n        _matchDescriptors: function(dataItem, descriptors, getters, idx) {\n            var descriptor;\n            var parts;\n            var parentField;\n            var expectedValue;\n            var parentGetter;\n\n            while (idx > 0) {\n                descriptor = descriptors[--idx];\n                parts = getName(descriptor).split(\"&\");\n                if (parts.length > 1) {\n                    parentField = parts[0];\n                    expectedValue = parts[1];\n                    parentGetter = getters[parentField];\n\n                    if (parentGetter(dataItem) != expectedValue) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        },\n\n        _isExpanded: function(descriptors) {\n            for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n                if (descriptors[idx].expand) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _calculateAggregate: function(measureAggregators, aggregatorContext, totalItem) {\n            var result = {};\n            var state;\n            var name;\n\n            for (var measureIdx = 0; measureIdx < measureAggregators.length; measureIdx++) {\n                name = measureAggregators[measureIdx].descriptor.name;\n                state = totalItem.aggregates[name] || { };\n                state.accumulator = measureAggregators[measureIdx].aggregator(aggregatorContext, state);\n                result[name] = state;\n            }\n\n            return result;\n        },\n\n        _processColumns: function(measureAggregators, descriptors, getters, columns, aggregatorContext, rowTotal, state, updateColumn) {\n            var value;\n            var descriptor;\n            var name;\n            var column;\n            var totalItem;\n            var dataItem = aggregatorContext.dataItem;\n\n            for (var idx = 0; idx < descriptors.length; idx++) {\n                descriptor = descriptors[idx];\n\n                if (descriptor.expand) {\n                    if (!this._matchDescriptors(dataItem, descriptors, getters, idx)) {\n                        continue;\n                    }\n\n                    name = getName(descriptor);\n\n                    value = getters[name](dataItem);\n                    value = value !== undefined ? value.toString() : value;\n\n                    name = name + \"&\" + value;\n\n                    column = columns[name] || {\n                        index: state.columnIndex,\n                        name: name,\n                        parentName: name,\n                        value: value\n                    };\n\n                    totalItem = rowTotal.items[name] || {\n                        aggregates: {}\n                    };\n\n                    rowTotal.items[name] = {\n                        index: column.index,\n                        aggregates: this._calculateAggregate(measureAggregators, aggregatorContext, totalItem)\n                    };\n\n                    if (updateColumn) {\n                        if (!columns[name]) {\n                            state.columnIndex++;\n                        }\n                        columns[name] = column;\n                    }\n                }\n            }\n        },\n\n        _measureAggregators: function(options) {\n            var measureDescriptors = options.measures || [];\n            var measures = this.measures || {};\n            var aggregators = [];\n            var descriptor, measure, idx, length;\n            var defaultAggregate, aggregate;\n\n            if (measureDescriptors.length) {\n                for (idx = 0, length = measureDescriptors.length; idx < length; idx++) {\n                    descriptor = measureDescriptors[idx];\n                    measure = measures[descriptor.name];\n                    defaultAggregate = null;\n\n                    if (measure) {\n                        aggregate = measure.aggregate;\n                        if (typeof aggregate === \"string\") {\n                            defaultAggregate = functions[aggregate.toLowerCase()];\n\n                            if (!defaultAggregate) {\n                                throw new Error(\"There is no such aggregate function\");\n                            }\n\n                            measure.aggregate = defaultAggregate.aggregate || defaultAggregate;\n                            measure.result = defaultAggregate.result;\n                        }\n\n\n                        aggregators.push({\n                            descriptor: descriptor,\n                            caption: measure.caption,\n                            result: measure.result,\n                            aggregator: createAggregateGetter(measure)\n                        });\n                    }\n                }\n            } else {\n                aggregators.push({\n                    descriptor: { name: \"default\"},\n                    caption: \"default\",\n                    aggregator: function() { return 1; }\n                });\n            }\n\n            return aggregators;\n        },\n\n        _buildGetters: function(descriptors) {\n            var result = {};\n            var descriptor;\n            var parts;\n            var name;\n\n            for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n                descriptor = descriptors[idx];\n\n                name = getName(descriptor);\n\n                parts = name.split(\"&\");\n\n                if (parts.length > 1) {\n                    result[parts[0]] = kendo.getter(parts[0], true);\n                } else {\n                    result[name] = kendo.getter(name, true);\n                }\n            }\n\n            return result;\n        },\n\n        process: function(data, options) {\n            data = data || [];\n            options = options || {};\n\n            var measures = options.measures || [];\n\n            var measuresRowAxis = options.measuresAxis === \"rows\";\n\n            var columnDescriptors = (measuresRowAxis ? options.rows : options.columns) || [];\n            var rowDescriptors = (!measuresRowAxis ? options.rows : options.columns) || [];\n\n            if (!columnDescriptors.length && rowDescriptors.length && (!measures.length || (measures.length && measuresRowAxis))) {\n                columnDescriptors = rowDescriptors;\n                rowDescriptors = [];\n                measuresRowAxis = false;\n            }\n\n            if (!columnDescriptors.length && !rowDescriptors.length) {\n                measuresRowAxis = false;\n            }\n\n            if (!columnDescriptors.length && measures.length) {\n                columnDescriptors = normalizeMembers(options.measures);\n            }\n\n            var aggregatedData = {};\n            var columns = {};\n            var rows = {};\n\n            var rowValue;\n            var state = { columnIndex: 0 };\n\n            var measureAggregators = this._measureAggregators(options);\n            var columnGetters = this._buildGetters(columnDescriptors);\n            var rowGetters = this._buildGetters(rowDescriptors);\n\n            var processed = false;\n\n            if (columnDescriptors.length || rowDescriptors.length) {\n                var dataItem;\n                var aggregatorContext;\n                var hasExpandedRows = this._isExpanded(rowDescriptors);\n\n                processed = true;\n\n                for (var idx = 0, length = data.length; idx < length; idx++) {\n                    dataItem = data[idx];\n\n                    aggregatorContext = {\n                        dataItem: dataItem,\n                        index: idx\n                    };\n\n                    var rowTotal = aggregatedData[ROW_TOTAL_KEY] || {\n                        items: {},\n                        aggregates: {}\n                    };\n\n                    this._processColumns(measureAggregators, columnDescriptors, columnGetters, columns, aggregatorContext, rowTotal, state, !hasExpandedRows);\n\n                    rowTotal.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, rowTotal);\n                    aggregatedData[ROW_TOTAL_KEY] = rowTotal;\n\n                    for (var rowIdx = 0, rowLength = rowDescriptors.length; rowIdx < rowLength; rowIdx++) {\n                        var rowDescriptor = rowDescriptors[rowIdx];\n\n                        if (rowDescriptor.expand) {\n                            if (!this._matchDescriptors(dataItem, rowDescriptors, rowGetters, rowIdx)) {\n                                continue;\n                            }\n\n                            var rowName = getName(rowDescriptor);\n\n                            rowValue = rowGetters[rowName](dataItem);\n                            rowValue = rowValue !== undefined ? rowValue.toString() : rowValue;\n                            rows[rowValue] = {\n                                name: rowName + \"&\" + rowValue,\n                                parentName: rowName,\n                                value: rowValue\n                            };\n\n                            var value = aggregatedData[rowValue] || {\n                                items: {},\n                                aggregates: {}\n                            };\n\n                            this._processColumns(measureAggregators, columnDescriptors, columnGetters, columns, aggregatorContext, value, state, true);\n\n                            value.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, value);\n                            aggregatedData[rowValue] = value;\n                        }\n                    }\n                }\n            }\n\n            if (processed && data.length) {\n                if (measureAggregators.length > 1 && (!options.columns || !options.columns.length)) {\n                    columnDescriptors = [];\n                }\n\n                columns = this._asTuples(columns, columnDescriptors, measureAggregators);\n                rows = this._asTuples(rows, rowDescriptors, []);\n\n                var offset = columns.length;\n\n                if (measuresRowAxis) {\n                    offset = 1;\n\n                    var tmp = columns;\n                    columns = rows;\n                    rows = tmp;\n                }\n\n                aggregatedData = this._toDataArray(aggregatedData, columns.length, options.measures, offset, measuresRowAxis ? addDataCellVertical : addDataCell);\n                aggregatedData = this._normalizeData(aggregatedData, columns.length, rows.length);\n            } else {\n                aggregatedData = columns = rows = [];\n            }\n\n            return {\n                axes: {\n                    columns: { tuples: columns },\n                    rows: { tuples: rows }\n                },\n                data: aggregatedData\n            };\n        },\n\n        _normalizeData: function(data, columns, rows) {\n            var axesLength = (columns || 1) * (rows || 1);\n            var result = new Array(axesLength);\n            var length = data.length;\n            var cell, idx;\n\n            if (length === axesLength) {\n                return data;\n            }\n\n            for (idx = 0; idx < axesLength; idx++) {\n                result[idx] = { value: \"\", fmtValue: \"\", ordinal: idx };\n            }\n\n            for (idx = 0; idx < length; idx++) {\n               cell = data[idx];\n               if (cell) {\n                   result[cell.ordinal] = cell;\n               }\n            }\n\n            return result;\n        }\n    });\n\n    var PivotTransport = Class.extend({\n        init: function(options, transport) {\n            this.transport = transport;\n            this.options = transport.options || {};\n\n            if (!this.transport.discover) {\n                if (isFunction(options.discover)) {\n                    this.discover = options.discover;\n                }\n            }\n        },\n        read: function(options) {\n            return this.transport.read(options);\n        },\n        update: function(options) {\n            return this.transport.update(options);\n        },\n        create: function(options) {\n            return this.transport.create(options);\n        },\n        destroy: function(options) {\n            return this.transport.destroy(options);\n        },\n        discover: function(options) {\n            if (this.transport.discover) {\n                return this.transport.discover(options);\n            }\n            options.success({});\n        },\n        catalog: function(val) {\n            var options = this.options || {};\n\n            if (val === undefined) {\n                return (options.connection || {}).catalog;\n\n            }\n\n            var connection = options.connection || {};\n            connection.catalog = val;\n\n            this.options.connection = connection;\n            $.extend(this.transport.options, { connection: connection });\n        },\n        cube: function(val) {\n            var options = this.options || {};\n\n            if (val === undefined) {\n                return (options.connection || {}).cube;\n            }\n\n            var connection = options.connection || {};\n            connection.cube = val;\n\n            this.options.connection = connection;\n            extend(true, this.transport.options, { connection: connection });\n        }\n    });\n\n    var PivotDataSource = DataSource.extend({\n        init: function(options) {\n            var cube = ((options || {}).schema || {}).cube;\n            var measuresAxis = \"columns\";\n            var measures;\n\n            var schema = {\n                axes: identity,\n                cubes: identity,\n                catalogs: identity,\n                measures: identity,\n                dimensions: identity,\n                hierarchies: identity,\n                levels: identity,\n                members: identity\n            };\n\n            if (cube) {\n                schema = $.extend(schema, this._cubeSchema(cube));\n                this.cubeBuilder = new PivotCubeBuilder(cube);\n            }\n\n            DataSource.fn.init.call(this, extend(true, {}, {\n                schema: schema\n            }, options));\n\n            this.transport = new PivotTransport(this.options.transport || {}, this.transport);\n\n            this._columns = normalizeMembers(this.options.columns);\n            this._rows = normalizeMembers(this.options.rows);\n\n            measures = this.options.measures || [];\n\n            if (toString.call(measures) === \"[object Object]\") {\n                measuresAxis = measures.axis || \"columns\";\n                measures = measures.values || [];\n            }\n\n            this._measures = normalizeMeasures(measures);\n            this._measuresAxis = measuresAxis;\n\n            this._axes = {};\n        },\n\n        _cubeSchema: function(cube) {\n            return {\n                dimensions: function() {\n                    var result = [];\n                    var dimensions = cube.dimensions;\n\n                    for (var key in dimensions) {\n                        result.push({\n                            name: key,\n                            caption: dimensions[key].caption || key,\n                            uniqueName: key,\n                            defaultHierarchy: key,\n                            type: 1\n                        });\n                    }\n\n                    if (cube.measures) {\n                        result.push({\n                            name: \"Measures\",\n                            caption: \"Measures\",\n                            uniqueName: \"Measures\",\n                            type: 2\n                        });\n                    }\n\n                    return result;\n                },\n                hierarchies: function(){\n                    return [];\n                },\n                measures: function() {\n                    var result = [];\n                    var measures = cube.measures;\n\n                    for (var key in measures) {\n                        result.push({\n                            name: key,\n                            caption: key,\n                            uniqueName: key,\n                            aggregator: key\n                        });\n                    }\n\n                    return result;\n                }\n            };\n        },\n\n        options: {\n            serverSorting: true,\n            serverPaging: true,\n            serverFiltering: true,\n            serverGrouping: true,\n            serverAggregates: true\n        },\n\n        catalog: function(val) {\n            if (val === undefined) {\n                return this.transport.catalog();\n            }\n\n            this.transport.catalog(val);\n            this._mergeState({});// clears current state\n            this._axes = {};\n            this.data([]);\n        },\n\n        cube: function(val) {\n            if (val === undefined) {\n                return this.transport.cube();\n            }\n\n            this.transport.cube(val);\n            this._axes = {};\n            this._mergeState({});// clears current state\n            this.data([]);\n        },\n\n        axes: function() {\n            return this._axes;\n        },\n\n        columns: function(val) {\n            if (val === undefined) {\n                return this._columns;\n            }\n\n            this._clearAxesData = true;\n            this._columns = normalizeMembers(val);\n            this.query({\n                columns: val,\n                rows: this.rowsAxisDescriptors(),\n                measures: this.measures()\n            });\n        },\n\n        rows: function(val) {\n            if (val === undefined) {\n                return this._rows;\n            }\n\n            this._clearAxesData = true;\n            this._rows = normalizeMembers(val);\n\n            this.query({\n                columns: this.columnsAxisDescriptors(),\n                rows: val,\n                measures: this.measures()\n            });\n        },\n\n        measures: function(val) {\n            if (val === undefined) {\n                return this._measures;\n            }\n\n            this._clearAxesData = true;\n            this.query({\n                columns: this.columnsAxisDescriptors(),\n                rows: this.rowsAxisDescriptors(),\n                measures: normalizeMeasures(val)\n            });\n        },\n\n        measuresAxis: function() {\n            return this._measuresAxis || \"columns\";\n        },\n\n        _expandPath: function(path, axis) {\n            var origin = axis === \"columns\" ? \"columns\" : \"rows\";\n            var other = axis === \"columns\" ? \"rows\" : \"columns\";\n\n            var members = normalizeMembers(path);\n            var memberToExpand = getName(members[members.length - 1]);\n\n            this._lastExpanded = origin;\n\n            members = descriptorsForMembers(this.axes()[origin], members, this.measures());\n\n            for (var idx = 0; idx < members.length; idx++) {\n                var memberName = getName(members[idx]);\n\n                if (memberName === memberToExpand) {\n                    if (members[idx].expand) {\n                        return;\n                    }\n                    members[idx].expand = true;\n                } else {\n                    members[idx].expand = false;\n                }\n            }\n\n            var descriptors = {};\n            descriptors[origin] = members;\n            descriptors[other] = this._descriptorsForAxis(other);\n\n            this._query(descriptors);\n        },\n\n        _descriptorsForAxis: function(axis) {\n            var axes = this.axes();\n            var descriptors = this[axis]() || [];\n\n            if (axes && axes[axis] && axes[axis].tuples && axes[axis].tuples[0]) {\n                descriptors = descriptorsForAxes(axes[axis].tuples || []);\n            }\n            return descriptors;\n        },\n\n        columnsAxisDescriptors: function() {\n            return this._descriptorsForAxis(\"columns\");\n        },\n\n        rowsAxisDescriptors: function() {\n            return this._descriptorsForAxis(\"rows\");\n        },\n\n        _process: function (data, e) {\n            this._view = data;\n\n            e = e || {};\n            e.items = e.items || this._view;\n\n            this.trigger(CHANGE, e);\n        },\n\n        _query: function(options) {\n            var that = this;\n\n            if (!options) {\n                this._clearAxesData = true;\n            }\n\n            return that.query(extend({}, {\n                page: that.page(),\n                pageSize: that.pageSize(),\n                sort: that.sort(),\n                filter: that.filter(),\n                group: that.group(),\n                aggregate: that.aggregate(),\n                columns: this.columnsAxisDescriptors(),\n                rows: this.rowsAxisDescriptors(),\n                measures: this.measures()\n            }, options));\n        },\n\n        query: function(options) {\n            var state = this._mergeState(options);\n\n            if (this._data.length && this.cubeBuilder) {\n                this._params(state);\n                this._updateLocalData(this._pristineData);\n\n                return $.Deferred().resolve().promise();\n            }\n\n            return this.read(state);\n        },\n\n        _mergeState: function(options) {\n            options = DataSource.fn._mergeState.call(this, options);\n\n            if (options !== undefined) {\n                this._measures = normalizeMeasures(options.measures);\n\n                if (options.columns) {\n                    options.columns = normalizeMembers(options.columns);\n                } else if (!options.columns) {\n                    this._columns = [];\n                }\n\n                if (options.rows) {\n                    options.rows = normalizeMembers(options.rows);\n                } else if (!options.rows) {\n                    this._rows = [];\n                }\n            }\n            return options;\n        },\n\n        filter: function(val) {\n            if (val === undefined) {\n                return this._filter;\n            }\n\n            this._clearAxesData = true;\n            this._query({ filter: val, page: 1 });\n        },\n\n        expandColumn: function(path) {\n            this._expandPath(path, \"columns\");\n        },\n\n        expandRow: function(path) {\n            this._expandPath(path, \"rows\");\n        },\n\n        success: function(data) {\n            var originalData;\n            if (this.cubeBuilder) {\n                originalData = (this.reader.data(data) || []).slice(0);\n            }\n            DataSource.fn.success.call(this, data);\n            if (originalData) {\n                this._pristineData = originalData;\n            }\n        },\n\n        _processResult: function(data, axes) {\n            if (this.cubeBuilder) {\n                var processedData = this.cubeBuilder.process(data, this._requestData);\n\n                data = processedData.data;\n                axes = processedData.axes;\n            }\n\n            var columnIndexes, rowIndexes;\n            var tuples, resultAxis, measures, axisToSkip;\n            var columnDescriptors = this.columns();\n            var rowDescriptors = this.rows();\n            var hasColumnTuples = axes.columns && axes.columns.tuples;\n\n            if (!columnDescriptors.length && rowDescriptors.length && hasColumnTuples && (this._rowMeasures().length || !this.measures().length)) {\n                axes = {\n                    columns: {},\n                    rows: axes.columns\n                };\n            }\n\n            if (!columnDescriptors.length && !rowDescriptors.length && this.measuresAxis() === \"rows\" && hasColumnTuples) {\n                axes = {\n                    columns: {},\n                    rows: axes.columns\n                };\n            }\n\n            this._axes = {\n                columns: normalizeAxis(this._axes.columns),\n                rows: normalizeAxis(this._axes.rows)\n            };\n\n            axes = {\n                columns: normalizeAxis(axes.columns),\n                rows: normalizeAxis(axes.rows)\n            };\n\n            columnIndexes = this._normalizeTuples(axes.columns.tuples, this._axes.columns.tuples, columnDescriptors, this._columnMeasures());\n            rowIndexes = this._normalizeTuples(axes.rows.tuples, this._axes.rows.tuples, rowDescriptors, this._rowMeasures());\n\n            if (!this.cubeBuilder) {\n                data = this._normalizeData({\n                    columnsLength: axes.columns.tuples.length,\n                    rowsLength: axes.rows.tuples.length,\n                    columnIndexes: columnIndexes,\n                    rowIndexes: rowIndexes,\n                    data: data\n                });\n            }\n\n            if (this._lastExpanded == \"rows\") {\n                tuples = axes.columns.tuples;\n                measures = this._columnMeasures();\n                resultAxis = validateAxis(axes.columns, this._axes.columns, measures);\n\n                if (resultAxis) {\n                    axisToSkip = \"columns\";\n                    axes.columns = resultAxis;\n                    adjustDataByColumn(tuples, resultAxis.tuples, axes.rows.tuples.length, measures, data);\n                    data = this._normalizeData({\n                        columnsLength: membersCount(axes.columns.tuples, measures),\n                        rowsLength: axes.rows.tuples.length,\n                        data: data\n                    });\n                }\n            } else if (this._lastExpanded == \"columns\") {\n                tuples = axes.rows.tuples;\n                measures = this._rowMeasures();\n                resultAxis = validateAxis(axes.rows, this._axes.rows, measures);\n\n                if (resultAxis) {\n                    axisToSkip = \"rows\";\n                    axes.rows = resultAxis;\n                    adjustDataByRow(tuples, resultAxis.tuples, axes.columns.tuples.length, measures, data);\n\n                    data = this._normalizeData({\n                        columnsLength: membersCount(axes.rows.tuples, measures),\n                        rowsLength: axes.columns.tuples.length,\n                        data: data\n                    });\n                }\n            }\n\n            this._lastExpanded = null;\n\n            var result = this._mergeAxes(axes, data, axisToSkip);\n            this._axes = result.axes;\n\n            return result.data;\n        },\n\n        _readData: function(data) {\n            var axes = this.reader.axes(data);\n            var newData = this.reader.data(data);\n\n            return this._processResult(newData, axes);\n        },\n\n        _createTuple: function(tuple, measure, buildRoot) {\n            var name;\n            var member;\n            var parentName;\n            var members = tuple.members;\n            var length = members.length;\n            var root = { members: [] };\n            var levelNum;\n            var caption;\n            var idx = 0;\n\n            if (measure) {\n                length -= 1;\n            }\n\n            for (; idx < length; idx++) {\n                member = members[idx];\n                levelNum = Number(member.levelNum);\n\n                name = member.name;\n                parentName = member.parentName;\n                caption = member.caption || name;\n\n                if (buildRoot) {\n                    caption = \"All\";\n                    if (levelNum === 0) {\n                        parentName = member.name;\n                    } else {\n                        levelNum -= 1;\n                    }\n\n                    name = parentName;\n                }\n\n                root.members.push({\n                    name: name,\n                    children: [],\n                    caption: caption,\n                    levelName: parentName,\n                    levelNum: levelNum.toString(),\n                    hasChildren: buildRoot,\n                    hierarchy: parentName,\n                    parentName: !buildRoot ? parentName: \"\"\n                });\n            }\n\n            if (measure) {\n                root.members.push({\n                    name: measure.name,\n                    children: []\n                });\n            }\n\n            return root;\n        },\n\n        _hasRoot: function(target, source, descriptors) {\n            if (source.length) {\n                return findExistingTuple(source, target).tuple;\n            }\n\n            var members = target.members;\n            var member;\n            var descriptor;\n\n            var isRoot = true;\n            var levelNum;\n\n            for (var idx = 0, length = members.length; idx < length; idx++) {\n                member = members[idx];\n                levelNum = Number(member.levelNum) || 0;\n                descriptor = descriptors[idx];\n\n                if (!(levelNum === 0 || (descriptor && member.name === getName(descriptor)))) {\n                    isRoot = false;\n                    break;\n                }\n            }\n\n            return isRoot;\n        },\n\n        _mergeAxes: function(sourceAxes, data, axisToSkip) {\n            var columnMeasures = this._columnMeasures();\n            var rowMeasures = this._rowMeasures();\n            var axes = this.axes();\n            var startIndex, tuples;\n\n            var newRowsLength = sourceAxes.rows.tuples.length;\n            var oldColumnsLength = membersCount(axes.columns.tuples, columnMeasures);\n            var newColumnsLength = sourceAxes.columns.tuples.length;\n\n            if (axisToSkip == \"columns\") {\n                newColumnsLength = oldColumnsLength;\n                tuples = sourceAxes.columns.tuples;\n            } else {\n                tuples = parseSource(sourceAxes.columns.tuples, columnMeasures);\n                data = prepareDataOnColumns(tuples, data);\n            }\n\n            var mergedColumns = mergeTuples(axes.columns.tuples, tuples, columnMeasures);\n\n            if (axisToSkip == \"rows\") {\n                newRowsLength = membersCount(sourceAxes.rows.tuples, rowMeasures);\n                tuples = sourceAxes.rows.tuples;\n            } else {\n                tuples = parseSource(sourceAxes.rows.tuples, rowMeasures);\n                data = prepareDataOnRows(tuples, data);\n            }\n            var mergedRows = mergeTuples(axes.rows.tuples, tuples, rowMeasures);\n\n            axes.columns.tuples = mergedColumns.tuples;\n            axes.rows.tuples = mergedRows.tuples;\n\n            if (oldColumnsLength !== membersCount(axes.columns.tuples, columnMeasures)) {\n                //columns are expanded\n                startIndex = mergedColumns.index + findDataIndex(mergedColumns.parsedRoot, mergedColumns.memberIndex, columnMeasures);\n                var offset = oldColumnsLength + newColumnsLength;\n                data = this._mergeColumnData(data, startIndex, newRowsLength, newColumnsLength, offset);\n            } else {\n                //rows are expanded\n                startIndex = mergedRows.index + findDataIndex(mergedRows.parsedRoot, mergedRows.memberIndex, rowMeasures);\n                data = this._mergeRowData(data, startIndex, newRowsLength, newColumnsLength);\n            }\n\n            return {\n                axes: axes,\n                data: data\n            };\n        },\n\n        _mergeColumnData: function(newData, columnIndex, rowsLength, columnsLength, offset) {\n            var data = this.data().toJSON();\n            var rowIndex, index, drop = 0, toAdd;\n            var columnMeasures = Math.max(this._columnMeasures().length, 1);\n\n            rowsLength = Math.max(rowsLength, 1);\n\n            if (data.length > 0) {\n                //if there is already data, drop the first new data item\n                drop = columnMeasures;\n                offset -= columnMeasures;\n            }\n\n            for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n                index = columnIndex + (rowIndex * offset);\n                toAdd = newData.splice(0, columnsLength);\n                toAdd.splice(0, drop);\n                [].splice.apply(data, [index, 0].concat(toAdd));\n            }\n\n            return data;\n        },\n\n        _mergeRowData: function(newData, rowIndex, rowsLength, columnsLength) {\n            var data = this.data().toJSON();\n            var idx, dataIndex, toAdd;\n            var rowMeasures = Math.max(this._rowMeasures().length, 1);\n\n            columnsLength = Math.max(columnsLength, 1);\n            if (data.length > 0) {\n                //if there is already data, drop the first new data item\n                rowsLength -= rowMeasures;\n                newData.splice(0, columnsLength * rowMeasures);\n            }\n\n            for (idx = 0; idx < rowsLength; idx++) {\n                toAdd = newData.splice(0, columnsLength);\n                dataIndex = (rowIndex * columnsLength) + (idx * columnsLength);\n                [].splice.apply(data, [dataIndex, 0].concat(toAdd));\n            }\n\n            return data;\n        },\n\n        _columnMeasures: function() {\n            var measures = this.measures();\n            var columnMeasures = [];\n\n            if (this.measuresAxis() === \"columns\") {\n                if (this.columns().length === 0) {\n                    columnMeasures = measures;\n                } else if (measures.length > 1) {\n                    columnMeasures = measures;\n                }\n            }\n\n            return columnMeasures;\n        },\n\n        _rowMeasures: function() {\n            var measures = this.measures();\n            var rowMeasures = [];\n\n            if (this.measuresAxis() === \"rows\") {\n                if (this.rows().length === 0) {\n                    rowMeasures = measures;\n                } else if (measures.length > 1) {\n                    rowMeasures = measures;\n                }\n            }\n\n            return rowMeasures;\n        },\n\n        _updateLocalData: function(data, state) {\n            if (this.cubeBuilder) {\n                if (state) {\n                    this._requestData = state;\n                }\n                data = this._processResult(data);\n            }\n\n            this._data = this._observe(data);\n\n            this._ranges = [];\n            this._addRange(this._data);\n\n            this._total = this._data.length;\n            this._pristineTotal = this._total;\n            this._process(this._data);\n        },\n\n        data: function(value) {\n            var that = this;\n            if (value !== undefined) {\n                this._pristineData = value.slice(0);\n                this._updateLocalData(value, {\n                        columns: this.columns(),\n                        rows: this.rows(),\n                        measures: this.measures()\n                    });\n            } else {\n                return that._data;\n            }\n        },\n\n        _normalizeTuples: function(tuples, source, descriptors, measures) {\n            var length = measures.length || 1;\n            var idx = 0;\n\n            var roots = [];\n            var indexes = {};\n            var measureIdx = 0;\n            var tuple, memberIdx, last;\n\n            if (!tuples.length) {\n                return;\n            }\n\n            if (!this._hasRoot(tuples[0], source, descriptors)) {\n                for (; idx < length; idx++) {\n                    roots.push(this._createTuple(tuples[0], measures[idx], true));\n                    indexes[idx] = idx;\n                }\n\n                tuples.splice.apply(tuples, [0, tuples.length].concat(roots).concat(tuples));\n                idx = length;\n            }\n\n            if (measures.length) {\n                last = tuple = tuples[idx];\n                memberIdx = tuple.members.length - 1;\n\n                while (tuple) {\n                    if (measureIdx >= length) {\n                        measureIdx = 0;\n                    }\n\n                    if (tuple.members[memberIdx].name !== measures[measureIdx].name) {\n                        tuples.splice(idx, 0, this._createTuple(tuple, measures[measureIdx]));\n                        indexes[idx] = idx;\n                    }\n\n                    idx += 1;\n                    measureIdx += 1;\n                    tuple = tuples[idx];\n\n                    if (length > measureIdx && (!tuple || tupleName(last, memberIdx - 1) !== tupleName(tuple, memberIdx - 1))) {\n                        for (; measureIdx < length; measureIdx++) {\n                            tuples.splice(idx, 0, this._createTuple(last, measures[measureIdx]));\n                            indexes[idx] = idx;\n                            idx += 1;\n                        }\n                        tuple = tuples[idx];\n                    }\n                    last = tuple;\n                }\n            }\n\n            return indexes;\n        },\n\n        _normalizeData: function(options) {\n            var data = options.data;\n\n            var columnIndexes = options.columnIndexes || {};\n            var rowIndexes = options.rowIndexes || {};\n\n            var columnsLength = options.columnsLength || 1;\n            var length = columnsLength * (options.rowsLength || 1);\n\n            var idx = 0;\n            var dataIdx = 0;\n            var lastOrdinal = 0;\n            var dataItem, i;\n            var result = new Array(length);\n\n            if (data.length === length) {\n                return data;\n            }\n\n            for (; idx < length; idx++) {\n                while (rowIndexes[parseInt(idx / columnsLength, 10)] !== undefined) {\n                    for (i = 0; i < columnsLength; i++) {\n                        result[idx] = { value: \"\", fmtValue: \"\", ordinal: idx };\n                        idx += 1;\n                    }\n                }\n\n                if (columnIndexes[idx % columnsLength] !== undefined) {\n                    result[idx] = { value: \"\", fmtValue: \"\", ordinal: idx };\n                    idx += 1;\n                }\n\n                dataItem = data[dataIdx];\n\n                if (dataItem) {\n                    if (dataItem.ordinal - lastOrdinal > 1) {\n                        lastOrdinal += 1;\n                        for (; lastOrdinal < dataItem.ordinal; lastOrdinal++) {\n                            result[idx] = { value: \"\", fmtValue: \"\", ordinal: idx };\n                            idx += 1;\n                        }\n                    }\n\n                    lastOrdinal = dataItem.ordinal;\n                    dataItem.ordinal = idx;\n                    result[idx] = dataItem;\n                    dataIdx += 1;\n                } else {\n                    result[idx] = { value: \"\", fmtValue: \"\", ordinal: idx };\n                }\n            }\n\n            return result;\n        },\n\n        discover: function(options, converter) {\n            var that = this,\n                transport = that.transport;\n\n            return $.Deferred(function(deferred) {\n                transport.discover(extend({\n                    success: function(response) {\n                       response = that.reader.parse(response);\n\n                        if (that._handleCustomErrors(response)) {\n                            return;\n                        }\n\n                        if (converter) {\n                            response = converter(response);\n                        }\n                        deferred.resolve(response);\n                    },\n                    error: function(response, status, error) {\n                        deferred.reject(response);\n                        that.error(response, status, error);\n                    }\n                }, options));\n            }).promise().done(function() {\n                that.trigger(\"schemaChange\");\n            });\n        },\n\n        schemaMeasures: function() {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaMeasures\",\n                    restrictions: {\n                        catalogName: that.transport.catalog(),\n                        cubeName: that.transport.cube()\n                    }\n                }\n            }, function(response) {\n                return that.reader.measures(response);\n            });\n        },\n\n        schemaKPIs: function() {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaKPIs\",\n                    restrictions: {\n                        catalogName: that.transport.catalog(),\n                        cubeName: that.transport.cube()\n                    }\n                }\n            }, function(response) {\n                return that.reader.kpis(response);\n            });\n        },\n\n        schemaDimensions: function() {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaDimensions\",\n                    restrictions: {\n                        catalogName: that.transport.catalog(),\n                        cubeName: that.transport.cube()\n                    }\n                }\n            }, function(response) {\n                return that.reader.dimensions(response);\n            });\n        },\n\n        schemaHierarchies: function(dimensionName) {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaHierarchies\",\n                    restrictions: {\n                        catalogName: that.transport.catalog(),\n                        cubeName: that.transport.cube(),\n                        dimensionUniqueName: dimensionName\n                    }\n                }\n            }, function(response) {\n                return that.reader.hierarchies(response);\n            });\n        },\n\n        schemaLevels: function(hierarchyName) {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaLevels\",\n                    restrictions: {\n                        catalogName: that.transport.catalog(),\n                        cubeName: that.transport.cube(),\n                        hierarchyUniqueName: hierarchyName\n                    }\n                }\n            }, function(response) {\n                return that.reader.levels(response);\n            });\n        },\n\n        schemaCubes: function() {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaCubes\",\n                    restrictions: {\n                        catalogName: that.transport.catalog()\n                    }\n                }\n            }, function(response) {\n                return that.reader.cubes(response);\n            });\n        },\n\n        schemaCatalogs: function() {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaCatalogs\"\n                }\n            }, function(response) {\n                return that.reader.catalogs(response);\n            });\n        },\n\n        schemaMembers: function(restrictions) {\n            var that = this;\n\n            return that.discover({\n                data: {\n                    command: \"schemaMembers\",\n                    restrictions: extend({\n                       catalogName: that.transport.catalog(),\n                       cubeName: that.transport.cube()\n                   }, restrictions)\n                }\n            }, function(response) {\n                return that.reader.members(response);\n            });\n        },\n\n        _params: function(data) {\n            if (this._clearAxesData) {\n                this._axes = {};\n                this._data = this._observe([]);\n                this._clearAxesData = false;\n                this.trigger(STATERESET);\n            }\n\n            var options = DataSource.fn._params.call(this, data);\n\n            options = extend({\n                measures: this.measures(),\n                measuresAxis: this.measuresAxis(),\n                columns: this.columns(),\n                rows: this.rows()\n            }, options);\n\n            if (this.cubeBuilder) {\n                this._requestData = options;\n            }\n\n            return options;\n        }\n    });\n\n    function validateAxis(newAxis, axis, measures) {\n        if (newAxis.tuples.length < membersCount(axis.tuples, measures)) {\n\n            return axis;\n        }\n\n        return;\n    }\n\n    function adjustDataByColumn(sourceTuples, targetTuples, rowsLength, measures, data) {\n        var columnIdx, rowIdx, dataIdx;\n        var columnsLength = sourceTuples.length;\n        var targetColumnsLength = membersCount(targetTuples, measures);\n        var measuresLength = measures.length || 1;\n\n        for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n            for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n                dataIdx = tupleIndex(sourceTuples[columnIdx], targetTuples) * measuresLength;\n                dataIdx += columnIdx % measuresLength;\n\n                data[rowIdx * columnsLength + columnIdx].ordinal = rowIdx * targetColumnsLength + dataIdx;\n            }\n        }\n    }\n\n    function adjustDataByRow(sourceTuples, targetTuples, columnsLength, measures, data) {\n        var columnIdx, rowIdx, dataIdx;\n        var rowsLength = sourceTuples.length;\n        var targetRowsLength = membersCount(targetTuples, measures);\n        var measuresLength = measures.length || 1;\n\n        for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n            dataIdx = tupleIndex(sourceTuples[rowIdx], targetTuples);\n            dataIdx *= measuresLength;\n            dataIdx += rowIdx % measuresLength;\n\n            for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n                data[rowIdx * columnsLength + columnIdx].ordinal = dataIdx * columnsLength + columnIdx;\n            }\n        }\n    }\n\n    function tupleIndex(tuple, collection) {\n        return findExistingTuple(collection, tuple).index;\n    }\n\n    function membersCount(tuples, measures) {\n        if (!tuples.length) {\n            return 0;\n        }\n\n        var queue = tuples.slice();\n        var current = queue.shift();\n        var idx, length, result = 1;\n\n        while (current) {\n            if (current.members) {\n                [].push.apply(queue, current.members);\n            } else if (current.children) {\n                if (!current.measure) {\n                    result += current.children.length;\n                }\n                [].push.apply(queue, current.children);\n            }\n\n            current = queue.shift();\n        }\n\n        if (measures.length) {\n            result = result * measures.length;\n        }\n\n        return result;\n    }\n\n    function normalizeAxis(axis) {\n        if (!axis) {\n            axis = {\n                tuples: []\n            };\n        }\n\n        if (!axis.tuples) {\n            axis.tuples = [];\n        }\n\n        return axis;\n    }\n\n    function findDataIndex(tuple, memberIndex, measures) {\n        if (!tuple) {\n            return 0;\n        }\n\n        var counter = Math.max(measures.length, 1);\n        var tuples = tuple.members.slice(0, memberIndex);\n        var current = tuples.shift();\n\n        while (current) {\n            if (current.children) {\n                //is member\n                [].push.apply(tuples, current.children);\n            } else {\n                //is tuple\n                counter ++;\n                [].push.apply(tuples, current.members);\n            }\n\n            current = tuples.shift();\n        }\n\n        return counter;\n    }\n\n    function mergeTuples(target, source, measures) {\n        if (!source[0]) {\n            return {\n                parsedRoot: null,\n                tuples: target,\n                memberIndex: 0,\n                index: 0\n            };\n        }\n\n        var result = findExistingTuple(target, source[0]);\n\n        if (!result.tuple) {\n            return {\n                parsedRoot: null,\n                tuples: source,\n                memberIndex: 0,\n                index: 0\n            };\n        }\n\n        var targetMembers = result.tuple.members;\n        var sourceMembers = source[0].members;\n        var memberIndex = -1;\n\n        if (targetMembers.length !== sourceMembers.length) {\n            return {\n                parsedRoot: null,\n                tuples: source,\n                memberIndex: 0,\n                index: 0\n            };\n        }\n\n        for (var idx = 0, length = targetMembers.length; idx < length; idx++) {\n            if (!targetMembers[idx].measure && sourceMembers[idx].children[0]) {\n                if (memberIndex == -1 && sourceMembers[idx].children.length) {\n                    memberIndex = idx;\n                }\n\n                targetMembers[idx].children = sourceMembers[idx].children;\n            }\n        }\n\n        measures = Math.max(measures.length, 1);\n\n        return {\n            parsedRoot: result.tuple,\n            index: result.index * measures,\n            memberIndex: memberIndex,\n            tuples: target\n        };\n    }\n\n    function equalTuples(first, second) {\n        var equal = true;\n        var idx, length;\n        var name;\n\n        first = first.members;\n        second = second.members;\n\n        for (idx = 0, length = first.length; idx < length; idx++) {\n            if (first[idx].measure || second[idx].measure) {\n                continue;\n            }\n\n            equal = equal && (getName(first[idx]) === getName(second[idx]));\n        }\n\n        return equal;\n    }\n\n    function findExistingTuple(tuples, toFind) {\n        var idx, length, tuple, found, counter = 0;\n        var memberIndex, membersLength, member;\n\n        for (idx = 0, length = tuples.length; idx < length; idx++) {\n            tuple = tuples[idx];\n            if (equalTuples(tuple, toFind)) {\n                return {\n                    tuple: tuple,\n                    index: counter\n                };\n            }\n\n            counter ++;\n\n            for (memberIndex = 0, membersLength = tuple.members.length; memberIndex < membersLength; memberIndex++) {\n                member = tuple.members[memberIndex];\n                if (member.measure) {\n                    //counter += member.children.length;\n                    continue;\n                }\n                found = findExistingTuple(member.children, toFind);\n                counter += found.index;\n                if (found.tuple) {\n                    return {\n                        tuple: found.tuple,\n                        index: counter\n                    };\n                }\n            }\n        }\n\n        return {\n            index: counter\n        };\n    }\n\n    function addMembers(members, map) {\n        var member, i, len, path = \"\";\n        for (i = 0, len = members.length; i < len; i++) {\n            member = members[i];\n            path += member.name;\n            if (!map[path]) {\n                map[path] = member;\n            }\n        }\n    }\n\n    function findParentMember(tuple, map) {\n        var members = tuple.members;\n        var i, len, member, path = \"\";\n        var parentPath = \"\";\n        var parentMember;\n\n        for (i = 0, len = members.length; i < len; i++) {\n            member = members[i];\n            if (parentMember) {\n                if (map[path + member.name]) {\n                    path += member.name;\n                    parentMember = map[path];\n                    continue;\n                } else if (map[path + member.parentName]) {\n                    return map[path + member.parentName];\n                } else {\n                    if (member.parentName) {\n                        parentPath += member.parentName;\n                    }\n                    return map[parentPath];\n                }\n            }\n\n            path += member.name;\n            parentMember = map[member.parentName];\n\n            if (!parentMember) {\n                parentMember = map[path];\n                if (!parentMember) {\n                    return null;\n                }\n            }\n\n            if (parentMember) {\n                parentPath += parentMember.name;\n            }\n        }\n\n        return parentMember;\n    }\n\n    function measurePosition(tuple, measures) {\n        if (measures.length === 0) {\n            return -1;\n        }\n\n        var measure = measures[0];\n        var members = tuple.members;\n        for (var idx = 0, len = members.length; idx < len; idx ++) {\n            if (members[idx].name == measure.name) {\n                return idx;\n            }\n        }\n    }\n\n    function normalizeTupleMeasures(tuple, index) {\n        if (index < 0) {\n            return;\n        }\n        var member = {\n            name: \"Measures\",\n            measure: true,\n            children: [\n                $.extend({ members: [], dataIndex: tuple.dataIndex }, tuple.members[index])\n            ]\n        };\n        tuple.members.splice(index, 1, member);\n        tuple.dataIndex = undefined;\n    }\n\n    function parseSource(tuples, measures) {\n        if (tuples.length < 1) {\n            return [];\n        }\n        var result = [];\n        var map = { };\n        var measureIndex = measurePosition(tuples[0], measures);\n\n        for (var i = 0; i < tuples.length; i++) {\n            var tuple = tuples[i];\n\n            //keep the old data index of the tuple\n            tuple.dataIndex = i;\n\n            normalizeTupleMeasures(tuple, measureIndex);\n            var parentMember = findParentMember(tuple, map);\n\n            if (parentMember) {\n                if (measureIndex < 0 || !parentMember.measure) {\n                    parentMember.children.push(tuple);\n                } else {\n                    parentMember.children.push(tuple.members[measureIndex].children[0]);\n                }\n            } else {\n                result.push(tuple);\n            }\n\n            addMembers(tuple.members, map);\n        }\n\n        return result;\n    }\n\n    function prepareDataOnRows(tuples, data) {\n        if (!tuples || !tuples.length) {\n            return data;\n        }\n\n        var result = [];\n        var indices = buildDataIndices(tuples);\n        var rowsLength = indices.length;\n        var columnsLength = Math.max(data.length / rowsLength, 1);\n        var rowIndex, columnIndex, targetIndex, sourceIndex;\n        var calcIndex;\n\n        for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n            targetIndex = columnsLength * rowIndex;\n            sourceIndex = columnsLength * indices[rowIndex];\n            for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n                calcIndex = parseInt(sourceIndex + columnIndex, 10);\n                result[parseInt(targetIndex + columnIndex, 10)] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n            }\n        }\n\n        return result;\n    }\n\n    function prepareDataOnColumns(tuples, data, rootAdded) {\n        if (!tuples || !tuples.length) {\n            return data;\n        }\n\n        var result = [];\n        var indices = buildDataIndices(tuples);\n        var columnsLength = indices.length;\n        var rowsLength = Math.max(data.length / columnsLength, 1);\n        var columnIndex, rowIndex, dataIndex, calcIndex;\n\n        for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n            dataIndex = columnsLength * rowIndex;\n            for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n                calcIndex = indices[columnIndex] + dataIndex;\n                result[dataIndex + columnIndex] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n            }\n        }\n\n        return result;\n    }\n\n    function buildDataIndices(tuples) {\n        tuples = tuples.slice();\n        var result = [];\n        var tuple = tuples.shift();\n        var idx, length, spliceIndex, children, member;\n\n        while (tuple) {\n            //required for multiple measures\n            if (tuple.dataIndex !== undefined) {\n                result.push(tuple.dataIndex);\n            }\n\n            spliceIndex = 0;\n            for (idx = 0, length = tuple.members.length; idx < length; idx++) {\n                member = tuple.members[idx];\n                children = member.children;\n                if (member.measure) {\n                    [].splice.apply(tuples, [0, 0].concat(children));\n                } else {\n                    [].splice.apply(tuples, [spliceIndex, 0].concat(children));\n                }\n                spliceIndex += children.length;\n            }\n\n            tuple = tuples.shift();\n        }\n\n        return result;\n    }\n\n    PivotDataSource.create = function(options) {\n        options = options && options.push ? { data: options } : options;\n\n        var dataSource = options || {},\n            data = dataSource.data;\n\n        dataSource.data = data;\n\n        if (!(dataSource instanceof PivotDataSource) && dataSource instanceof kendo.data.DataSource) {\n            throw new Error(\"Incorrect DataSource type. Only PivotDataSource instances are supported\");\n        }\n\n        return dataSource instanceof PivotDataSource ? dataSource : new PivotDataSource(dataSource);\n    };\n\n    function baseHierarchyPath(memberName) {\n        var parts = memberName.split(\".\");\n        if (parts.length > 2) {\n            return parts[0] + \".\" + parts[1];\n        }\n        return memberName;\n    }\n\n    function expandMemberDescriptor(names, sort) {\n        var idx = names.length - 1;\n        var name = names[idx];\n        var sortDescriptor;\n\n        sortDescriptor = sortDescriptorForMember(sort, name);\n\n        if (sortDescriptor && sortDescriptor.dir) {\n            name = \"ORDER(\" + name + \".Children,\" + sortDescriptor.field + \".CurrentMember.MEMBER_CAPTION,\" + sortDescriptor.dir + \")\";\n        } else {\n            name += \".Children\";\n        }\n\n        names[idx] = name;\n\n        return names;\n    }\n\n    function sortDescriptorForMember(sort, member) {\n        for (var idx = 0, length = sort.length; idx < length; idx++) {\n            if (member.indexOf(sort[idx].field) === 0) {\n                return sort[idx];\n            }\n        }\n        return null;\n    }\n\n    function crossJoin(names) {\n        var result = \"CROSSJOIN({\";\n        var r;\n\n        if (names.length > 2) {\n            r = names.pop();\n            result += crossJoin(names);\n        } else {\n            result += names.shift();\n            r = names.pop();\n        }\n\n        result += \"},{\";\n        result += r;\n        result += \"})\";\n        return result;\n    }\n\n    function crossJoinCommand(members, measures) {\n        var tmp = members.slice(0);\n        var names;\n\n        if (measures.length > 1) {\n            tmp.push(\"{\" + measureNames(measures).join(\",\") + \"}\");\n        }\n        return crossJoin(tmp);\n    }\n\n    function expandedMembers(members) {\n        var result = [];\n\n        for (var idx = 0; idx < members.length; idx++) {\n            if (members[idx].expand) {\n                result.push(members[idx]);\n            }\n        }\n\n        return result;\n    }\n\n    function measureNames(measures) {\n        var idx = 0;\n        var length = measures.length;\n        var result = [];\n        var measure;\n\n        for (; idx < length; idx++) {\n            measure = measures[idx];\n            result.push(measure.name !== undefined ? measure.name :  measure);\n        }\n\n        return result;\n    }\n\n    function getName(name) {\n        name = name.name || name;\n\n        if (toString.call(name) === \"[object Array]\") {\n            name = name[name.length - 1];\n        }\n\n        return name;\n    }\n\n    function getRootNames(members) {\n        var length = members.length;\n        var names = [];\n        var idx = 0;\n\n        for (; idx < length; idx++) {\n            names.push(members[idx].name[0]);\n        }\n\n        return names;\n    }\n\n    function mapNames(names, rootNames) {\n        var name;\n        var rootName;\n\n        var j;\n        var idx = 0;\n        var length = names.length;\n        var rootLength = rootNames.length;\n\n        rootNames = rootNames.slice(0);\n\n        for (; idx < length; idx++) {\n            name = names[idx];\n\n            for (j = 0; j < rootLength; j++) {\n                rootName = baseHierarchyPath(rootNames[j]);\n\n                if (name.indexOf(rootName) !== -1) {\n                    rootNames[j] = name;\n                    break;\n                }\n            }\n        }\n\n        return rootNames;\n    }\n\n    function parseDescriptors(members) {\n        var expanded = [];\n        var child = [];\n        var root = [];\n        var member;\n\n        var j, l;\n        var idx = 0;\n        var length = members.length;\n\n        var name;\n        var hierarchyName;\n\n        var found;\n\n        for (; idx < length; idx++) {\n            member = members[idx];\n            name = member.name;\n            found = false;\n\n            if (toString.call(name) !== \"[object Array]\") {\n                member.name = name = [name];\n            }\n\n            if (name.length > 1) {\n                child.push(member);\n            } else {\n                hierarchyName = baseHierarchyPath(name[0]);\n\n                for (j = 0, l = root.length; j < l; j++) {\n                    if (root[j].name[0].indexOf(hierarchyName) === 0) {\n                        found = true;\n                        break;\n                    }\n                }\n\n                if (!found) {\n                    root.push(member);\n                }\n\n                if (member.expand) {\n                    expanded.push(member);\n                }\n            }\n        }\n\n        expanded = expanded.concat(child);\n\n        return {\n            root: root,\n            expanded: expanded\n        };\n    }\n\n    function serializeMembers(members, measures, sort) {\n        var command = \"\";\n\n        members = members || [];\n\n        var expanded = parseDescriptors(members);\n        var root = expanded.root;\n\n        var rootNames = getRootNames(root);\n        var crossJoinCommands = [];\n\n        expanded = expanded.expanded;\n\n        var length = expanded.length;\n        var idx = 0;\n\n        var memberName;\n        var names = [];\n\n        if (rootNames.length > 1 || measures.length > 1) {\n            crossJoinCommands.push(crossJoinCommand(rootNames, measures));\n\n            for (; idx < length; idx++) {\n                memberName = expandMemberDescriptor(expanded[idx].name, sort);\n                names = mapNames(memberName, rootNames);\n\n                crossJoinCommands.push(crossJoinCommand(names, measures));\n            }\n\n            command += crossJoinCommands.join(\",\");\n        } else {\n            for (; idx < length; idx++) {\n                memberName = expandMemberDescriptor(expanded[idx].name, sort);\n                names.push(memberName[0]); //check if this is ok\n            }\n\n            command += rootNames.concat(names).join(\",\");\n        }\n\n        return command;\n    }\n\n    var filterFunctionFormats = {\n        contains: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\") > 0\",\n        doesnotcontain: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\") = 0\",\n        startswith: \", Left({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n        endswith: \", Right({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n        eq: \", {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\",\n        neq: \", NOT {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\"\n    };\n\n    function serializeExpression(expression) {\n        var command = \"\";\n        var value = expression.value;\n        var field = expression.field;\n        var operator = expression.operator;\n\n        if (operator == \"in\") {\n            command += \"{\";\n            command += value;\n            command += \"}\";\n        } else {\n            command += \"Filter(\";\n            command += field + \".MEMBERS\";\n            command += kendo.format(filterFunctionFormats[operator], field, value);\n            command += \")\";\n        }\n\n        return command;\n    }\n\n    function serializeFilters(filter, cube) {\n        var command = \"\", current;\n        var filters = filter.filters;\n        var length = filters.length;\n        var idx;\n\n        for (idx = length - 1; idx >= 0; idx--) {\n\n            current = \"SELECT (\";\n            current += serializeExpression(filters[idx]);\n            current += \") ON 0\";\n\n            if (idx == length - 1) {\n                current += \" FROM [\" + cube + \"]\";\n                command = current;\n            } else {\n                command = current + \" FROM ( \" + command + \" )\";\n            }\n        }\n\n        return command;\n    }\n\n    function serializeOptions(parentTagName, options, capitalize) {\n        var result = \"\";\n\n        if (options) {\n            result += \"<\" + parentTagName + \">\";\n            var value;\n            for (var key in options) {\n                value = options[key] ;\n                if (capitalize) {\n                    key = key.replace(/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g, \"$1_\").toUpperCase().replace(/_$/, \"\");\n                }\n                result += \"<\" + key + \">\" + value + \"</\" + key + \">\";\n            }\n            result += \"</\" + parentTagName + \">\";\n        } else {\n            result += \"<\" + parentTagName + \"/>\";\n        }\n        return result;\n    }\n\n    var xmlaDiscoverCommands = {\n        schemaCubes: \"MDSCHEMA_CUBES\",\n        schemaCatalogs: \"DBSCHEMA_CATALOGS\",\n        schemaMeasures: \"MDSCHEMA_MEASURES\",\n        schemaDimensions: \"MDSCHEMA_DIMENSIONS\",\n        schemaHierarchies: \"MDSCHEMA_HIERARCHIES\",\n        schemaLevels: \"MDSCHEMA_LEVELS\",\n        schemaMembers: \"MDSCHEMA_MEMBERS\",\n        schemaKPIs: \"MDSCHEMA_KPIS\"\n    };\n\n    var convertersMap = {\n        read: function(options, type) {\n            var command = '<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"><Header/><Body><Execute xmlns=\"urn:schemas-microsoft-com:xml-analysis\"><Command><Statement>';\n\n            command += \"SELECT NON EMPTY {\";\n\n            var columns = options.columns || [];\n            var rows = options.rows || [];\n\n            var measures = options.measures || [];\n            var measuresRowAxis = options.measuresAxis === \"rows\";\n            var sort = options.sort || [];\n\n            if (!columns.length && rows.length && (!measures.length || (measures.length && measuresRowAxis))) {\n                columns = rows;\n                rows = [];\n                measuresRowAxis = false;\n            }\n\n            if (!columns.length && !rows.length) {\n                measuresRowAxis = false;\n            }\n\n            if (columns.length) {\n                command += serializeMembers(columns, !measuresRowAxis ? measures : [], sort);\n            } else if (measures.length && !measuresRowAxis) {\n                command += measureNames(measures).join(\",\");\n            }\n\n            command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON COLUMNS\";\n\n            if (rows.length || (measuresRowAxis && measures.length > 1)) {\n                command += \", NON EMPTY {\";\n\n                if (rows.length) {\n                    command += serializeMembers(rows, measuresRowAxis ? measures : [], sort);\n                } else {\n                    command += measureNames(measures).join(\",\");\n                }\n\n                command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON ROWS\";\n            }\n\n            if (options.filter) {\n                command += \" FROM \";\n                command += \"(\";\n                command += serializeFilters(options.filter, options.connection.cube);\n                command += \")\";\n            } else {\n                command += \" FROM [\" + options.connection.cube + \"]\";\n            }\n\n            if (measures.length == 1 && columns.length) {\n                command += \" WHERE (\" + measureNames(measures).join(\",\") + \")\";\n            }\n\n            command += '</Statement></Command><Properties><PropertyList><Catalog>' + options.connection.catalog + '</Catalog><Format>Multidimensional</Format></PropertyList></Properties></Execute></Body></Envelope>';\n            return command.replace(/\\&/g, \"&amp;\");\n        },\n        discover: function(options, type) {\n            options = options || {};\n\n            var command = '<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"><Header/><Body><Discover xmlns=\"urn:schemas-microsoft-com:xml-analysis\">';\n            command += \"<RequestType>\" + (xmlaDiscoverCommands[options.command] || options.command) + \"</RequestType>\";\n\n            command += \"<Restrictions>\" + serializeOptions(\"RestrictionList\", options.restrictions, true) + \"</Restrictions>\";\n\n            if (options.connection && options.connection.catalog) {\n                options.properties = $.extend({}, {\n                    Catalog: options.connection.catalog\n                }, options.properties);\n            }\n\n            command += \"<Properties>\" + serializeOptions(\"PropertyList\", options.properties) + \"</Properties>\";\n\n            command += '</Discover></Body></Envelope>';\n            return command;\n        }\n    };\n\n    var XmlaTransport = kendo.data.RemoteTransport.extend({\n        init: function(options) {\n            var originalOptions = options;\n\n            options = this.options = extend(true, {}, this.options, options);\n\n            kendo.data.RemoteTransport.call(this, options);\n\n            if (isFunction(originalOptions.discover)) {\n                this.discover = originalOptions.discover;\n            } else if (typeof originalOptions.discover === \"string\") {\n                this.options.discover = {\n                    url: originalOptions.discover\n                };\n            } else if (!originalOptions.discover) {\n                this.options.discover = this.options.read;\n            }\n        },\n        setup: function(options, type) {\n            options.data = options.data || {};\n            $.extend(true, options.data, { connection: this.options.connection });\n\n            return kendo.data.RemoteTransport.fn.setup.call(this, options, type);\n        },\n        options: {\n            read: {\n                dataType: \"text\",\n                contentType: \"text/xml\",\n                type: \"POST\"\n            },\n            discover: {\n                dataType: \"text\",\n                contentType: \"text/xml\",\n                type: \"POST\"\n            },\n            parameterMap: function(options, type) {\n                return convertersMap[type](options,type);\n            }\n        },\n\n        discover: function(options) {\n            return $.ajax(this.setup(options, \"discover\"));\n        }\n    });\n\n    function asArray(object) {\n        if (object == null) {\n            return [];\n        }\n\n        var type = toString.call(object);\n        if (type !== \"[object Array]\") {\n            return [object];\n        }\n\n        return object;\n    }\n\n    function translateAxis(axis) {\n        var result = { tuples: [] };\n        var tuples = asArray(kendo.getter(\"Tuples.Tuple\", true)(axis));\n        var captionGetter = kendo.getter(\"Caption['#text']\");\n        var unameGetter = kendo.getter(\"UName['#text']\");\n        var levelNameGetter = kendo.getter(\"LName['#text']\");\n        var levelNumGetter = kendo.getter(\"LNum['#text']\");\n        var childrenGetter = kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true);\n        var hierarchyGetter = kendo.getter(\"['@Hierarchy']\");\n        var parentNameGetter = kendo.getter(\"PARENT_UNIQUE_NAME['#text']\", true);\n\n        for (var idx = 0; idx < tuples.length; idx++) {\n            var members = [];\n            var member = asArray(tuples[idx].Member);\n            for (var memberIdx = 0; memberIdx < member.length; memberIdx++) {\n                members.push({\n                    children: [],\n                    caption: captionGetter(member[memberIdx]),\n                    name: unameGetter(member[memberIdx]),\n                    levelName: levelNameGetter(member[memberIdx]),\n                    levelNum: levelNumGetter(member[memberIdx]),\n                    hasChildren: parseInt(childrenGetter(member[memberIdx]), 10) > 0,\n                    parentName: parentNameGetter(member[memberIdx]),\n                    hierarchy: hierarchyGetter(member[memberIdx])\n                });\n            }\n\n            result.tuples.push({ members: members });\n        }\n        return result;\n    }\n\n    var schemaDataReaderMap = {\n        cubes: {\n            name: kendo.getter(\"CUBE_NAME['#text']\", true),\n            caption: kendo.getter(\"CUBE_CAPTION['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true),\n            type: kendo.getter(\"CUBE_TYPE['#text']\", true)\n        },\n        catalogs: {\n            name: kendo.getter(\"CATALOG_NAME['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true)\n        },\n        measures: {\n            name: kendo.getter(\"MEASURE_NAME['#text']\", true),\n            caption: kendo.getter(\"MEASURE_CAPTION['#text']\", true),\n            uniqueName: kendo.getter(\"MEASURE_UNIQUE_NAME['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true),\n            aggregator: kendo.getter(\"MEASURE_AGGREGATOR['#text']\", true),\n            groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true),\n            displayFolder: kendo.getter(\"MEASURE_DISPLAY_FOLDER['#text']\", true),\n            defaultFormat: kendo.getter(\"DEFAULT_FORMAT_STRING['#text']\", true)\n        },\n        kpis: {\n            name: kendo.getter(\"KPI_NAME['#text']\", true),\n            caption: kendo.getter(\"KPI_CAPTION['#text']\", true),\n            value: kendo.getter(\"KPI_VALUE['#text']\", true),\n            goal: kendo.getter(\"KPI_GOAL['#text']\", true),\n            status: kendo.getter(\"KPI_STATUS['#text']\", true),\n            trend: kendo.getter(\"KPI_TREND['#text']\", true),\n            statusGraphic: kendo.getter(\"KPI_STATUS_GRAPHIC['#text']\", true),\n            trendGraphic: kendo.getter(\"KPI_TREND_GRAPHIC['#text']\", true),\n            description: kendo.getter(\"KPI_DESCRIPTION['#text']\", true),\n            groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true)\n        },\n        dimensions: {\n            name: kendo.getter(\"DIMENSION_NAME['#text']\", true),\n            caption: kendo.getter(\"DIMENSION_CAPTION['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true),\n            uniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n            defaultHierarchy: kendo.getter(\"DEFAULT_HIERARCHY['#text']\", true),\n            type: kendo.getter(\"DIMENSION_TYPE['#text']\", true)\n//unknown = 0; time = 1; measure = 2; other = 3; quantitative = 5; accounts = 6; customers = 7; products = 8; scenario = 9; utility = 10; currency = 11; rates = 12; channel = 13; promotion = 14; organization = 15; billOfMaterials = 16; geography = 17;\n\n        },\n        hierarchies: {\n            name: kendo.getter(\"HIERARCHY_NAME['#text']\", true),\n            caption: kendo.getter(\"HIERARCHY_CAPTION['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true),\n            uniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n            dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n            displayFolder: kendo.getter(\"HIERARCHY_DISPLAY_FOLDER['#text']\", true),\n            origin: kendo.getter(\"HIERARCHY_ORIGIN['#text']\", true),\n            defaultMember: kendo.getter(\"DEFAULT_MEMBER['#text']\", true)\n        },\n        levels: {\n            name: kendo.getter(\"LEVEL_NAME['#text']\", true),\n            caption: kendo.getter(\"LEVEL_CAPTION['#text']\", true),\n            description: kendo.getter(\"DESCRIPTION['#text']\", true),\n            uniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n            dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n            displayFolder: kendo.getter(\"LEVEL_DISPLAY_FOLDER['#text']\", true),\n            orderingProperty: kendo.getter(\"LEVEL_ORDERING_PROPERTY['#text']\", true),\n            origin: kendo.getter(\"LEVEL_ORIGIN['#text']\", true),\n            hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true)\n        },\n        members: {\n            name: kendo.getter(\"MEMBER_NAME['#text']\", true),\n            caption: kendo.getter(\"MEMBER_CAPTION['#text']\", true),\n            uniqueName: kendo.getter(\"MEMBER_UNIQUE_NAME['#text']\", true),\n            dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n            hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n            levelUniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n            childrenCardinality: kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true)\n        }\n    };\n\n    var xmlaReaderMethods = [\"axes\", \"catalogs\", \"cubes\", \"dimensions\", \"hierarchies\", \"levels\", \"measures\"];\n\n    var XmlaDataReader = kendo.data.XmlDataReader.extend({\n        init: function(options) {\n            kendo.data.XmlDataReader.call(this, options);\n\n            this._extend(options);\n        },\n        _extend: function(options) {\n            var idx = 0;\n            var length = xmlaReaderMethods.length;\n            var methodName;\n            var option;\n\n            for (; idx < length; idx++) {\n                methodName = xmlaReaderMethods[idx];\n                option = options[methodName];\n\n                if (option && option !== identity) {\n                    this[methodName] = option;\n                }\n            }\n        },\n        parse: function(xml) {\n            var result = kendo.data.XmlDataReader.fn.parse(xml.replace(/<(\\/?)(\\w|-)+:/g, \"<$1\"));\n            return kendo.getter(\"['Envelope']['Body']\", true)(result);\n        },\n        errors: function(root) {\n            var fault = kendo.getter(\"['Fault']\", true)(root);\n            if (fault) {\n                return [{\n                    faultstring: kendo.getter(\"faultstring['#text']\", true)(fault),\n                    faultcode: kendo.getter(\"faultcode['#text']\", true)(fault)\n                }];\n            }\n            return null;\n        },\n        axes: function(root) {\n            root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n            var axes = asArray(kendo.getter(\"Axes.Axis\", true)(root));\n            var columns = translateAxis(axes[0]);\n            var rows = {};\n\n            if (axes.length > 2) {\n                rows = translateAxis(axes[1]);\n            }\n\n            return {\n                columns: columns,\n                rows: rows\n            };\n        },\n        data: function(root) {\n            root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n            var cells = asArray(kendo.getter(\"CellData.Cell\", true)(root));\n\n            var result = [];\n            var ordinalGetter = kendo.getter(\"['@CellOrdinal']\");\n            var valueGetter = kendo.getter(\"Value['#text']\");\n            var fmtValueGetter = kendo.getter(\"FmtValue['#text']\");\n\n            for (var idx = 0; idx < cells.length; idx++) {\n                result.push({\n                    value: valueGetter(cells[idx]),\n                    fmtValue: fmtValueGetter(cells[idx]),\n                    ordinal: parseInt(ordinalGetter(cells[idx]), 10)\n                });\n            }\n\n            return result;\n        },\n        _mapSchema: function(root, getters) {\n            root = kendo.getter(\"DiscoverResponse[\\\"return\\\"].root\", true)(root);\n            var rows = asArray(kendo.getter(\"row\", true)(root));\n\n            var result = [];\n\n            for (var idx = 0; idx < rows.length; idx++) {\n                var obj = {};\n                for (var key in getters) {\n                    obj[key] = getters[key](rows[idx]);\n                }\n                result.push(obj);\n            }\n\n            return result;\n        },\n        measures: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.measures);\n        },\n        kpis: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.kpis);\n        },\n        hierarchies: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.hierarchies);\n        },\n        levels: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.levels);\n        },\n        dimensions: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.dimensions);\n        },\n        cubes: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.cubes);\n        },\n        catalogs: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.catalogs);\n        },\n        members: function(root) {\n            return this._mapSchema(root, schemaDataReaderMap.members);\n        }\n    });\n\n    extend(true, kendo.data, {\n       PivotDataSource: PivotDataSource,\n       XmlaTransport: XmlaTransport,\n       XmlaDataReader: XmlaDataReader,\n       PivotCubeBuilder: PivotCubeBuilder,\n       transports: {\n           xmla: XmlaTransport\n       },\n       readers: {\n           xmla: XmlaDataReader\n       }\n    });\n\n    var sortExpr = function(expressions, name) {\n        if (!expressions) {\n            return null;\n        }\n\n        for (var idx = 0, length = expressions.length; idx < length; idx++) {\n            if (expressions[idx].field === name) {\n                return expressions[idx];\n            }\n        }\n\n        return null;\n    };\n\n    var removeExpr = function(expressions, name) {\n        var result = [];\n\n        for (var idx = 0, length = expressions.length; idx < length; idx++) {\n            if (expressions[idx].field !== name) {\n                result.push(expressions[idx]);\n            }\n        }\n\n        return result;\n    };\n\n    kendo.ui.PivotSettingTarget = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.element.addClass(\"k-pivot-setting\");\n\n            that.dataSource = kendo.data.PivotDataSource.create(options.dataSource);\n\n            that._refreshHandler = $.proxy(that.refresh, that);\n            that.dataSource.first(CHANGE, that._refreshHandler);\n\n            if (!options.template) {\n                that.options.template = \"<div data-\" + kendo.ns + 'name=\"${data.name || data}\">${data.name || data}' +\n                    (that.options.enabled ?\n                    '<a class=\"k-button k-button-icon k-button-bare\"><span class=\"k-icon k-setting-delete\"></span></a>' : \"\") + '</div>';\n            }\n\n            that.template = kendo.template(that.options.template);\n            that.emptyTemplate = kendo.template(that.options.emptyTemplate);\n\n            that._sortable();\n\n            that.element.on(\"click\" + NS, \".k-button,.k-item\", function(e) {\n                var target = $(e.target);\n                var name = target.closest(\"[\" + kendo.attr(\"name\") + \"]\")\n                                 .attr(kendo.attr(\"name\"));\n\n                if (!name) {\n                    return;\n                }\n\n                if (target.hasClass(\"k-setting-delete\")) {\n                    that.remove(name);\n                } else if (that.options.sortable && target[0] === e.currentTarget) {\n                    that.sort({\n                        field: name,\n                        dir: target.find(\".k-i-sort-asc\")[0] ? \"desc\" : \"asc\"\n                    });\n                }\n            });\n\n            if (options.filterable || options.sortable) {\n                that.fieldMenu = new ui.PivotFieldMenu(that.element, {\n                    messages: that.options.messages.fieldMenu,\n                    filter: \".k-setting-fieldmenu\",\n                    filterable: options.filterable,\n                    sortable: options.sortable,\n                    dataSource: that.dataSource\n                });\n            }\n\n            that.refresh();\n        },\n\n        options: {\n            name: \"PivotSettingTarget\",\n            template: null,\n            filterable: false,\n            sortable: false,\n            emptyTemplate: \"<div class='k-empty'>${data}</div>\",\n            setting: \"columns\",\n            enabled: true,\n            messages: {\n                empty: \"Drop Fields Here\"\n            }\n        },\n        setDataSource: function(dataSource) {\n            this.dataSource.unbind(CHANGE, this._refreshHandler);\n            this.dataSource = this.options.dataSource = dataSource;\n\n            if (this.fieldMenu) {\n                this.fieldMenu.setDataSource(dataSource);\n            }\n            dataSource.first(CHANGE, this._refreshHandler);\n\n            this.refresh();\n        },\n\n        _sortable: function() {\n            var that = this;\n\n            if (that.options.enabled) {\n                this.sortable = this.element.kendoSortable({\n                    connectWith: this.options.connectWith,\n                    filter: \">:not(.k-empty)\",\n                    hint: that.options.hint,\n                    cursor: \"move\",\n                    start: function(e) {\n                        e.item.focus().blur();\n                    },\n                    change: function(e) {\n                        var name = e.item.attr(kendo.attr(\"name\"));\n\n                        if (e.action == \"receive\") {\n                            that.add(name);\n                        } else if (e.action == \"remove\") {\n                            that.remove(name);\n                        } else if (e.action == \"sort\") {\n                            that.move(name, e.newIndex);\n                        }\n                    }\n                }).data(\"kendoSortable\");\n            }\n        },\n\n        _indexOf: function(name, items) {\n            var idx, length, index = -1;\n\n            for (idx = 0, length = items.length; idx < length; idx++) {\n                if (getName(items[idx]) === name) {\n                    index = idx;\n                    break;\n                }\n            }\n            return index;\n        },\n\n        _isKPI: function(data) {\n            return data.type === \"kpi\" || data.measure;\n        },\n\n        validate: function(data) {\n            var isMeasure = (data.type == 2 || \"aggregator\" in data || this._isKPI(data));\n\n            if (isMeasure) {\n                return this.options.setting === \"measures\";\n            }\n\n            if (this.options.setting === \"measures\") {\n                return isMeasure;\n            }\n\n            var items = this.dataSource[this.options.setting]();\n            var name = data.defaultHierarchy || data.uniqueName;\n            if (this._indexOf(name, items) > -1) {\n                return false;\n            }\n\n            items = this.dataSource[this.options.setting === \"columns\" ? \"rows\" : \"columns\"]();\n            if (this._indexOf(name, items) > -1) {\n                return false;\n            }\n\n            return true;\n        },\n\n        add: function(name) {\n            var items = this.dataSource[this.options.setting]();\n            var i, l;\n            var idx;\n\n            name = $.isArray(name) ? name.slice(0) : [name];\n\n            for (i = 0, l = name.length; i < l; i++) {\n                if (this._indexOf(name[i], items) !== -1) {\n                    name.splice(i, 1);\n                    i -= 1;\n                    l -= 1;\n                }\n            }\n\n            if (name.length) {\n                items = items.concat(name);\n                this.dataSource[this.options.setting](items);\n            }\n        },\n\n        move: function(name, index) {\n            var items = this.dataSource[this.options.setting]();\n            var idx = this._indexOf(name, items);\n\n            if (idx > -1) {\n                name = items.splice(idx, 1)[0];\n\n                items.splice(index, 0, name);\n\n                this.dataSource[this.options.setting](items);\n            }\n        },\n\n        remove: function(name) {\n            var items = this.dataSource[this.options.setting]();\n\n            var idx = this._indexOf(name, items);\n            if (idx > -1) {\n                items.splice(idx, 1);\n                this.dataSource[this.options.setting](items);\n            }\n        },\n\n        sort: function(expr) {\n            var sortable = this.options.sortable;\n            var allowUnsort = sortable === true || sortable.allowUnsort;\n            var skipExpr = allowUnsort && expr.dir === \"asc\";\n\n            var expressions = (this.dataSource.sort() || []);\n            var result = removeExpr(expressions, expr.field);\n\n            if (skipExpr && expressions.length !== result.length) {\n                expr = null;\n            }\n\n            if (expr) {\n                result.push(expr);\n            }\n\n            this.dataSource.sort(result);\n        },\n\n        refresh: function() {\n            var html = \"\";\n            var items = this.dataSource[this.options.setting]();\n            var length = items.length;\n            var idx = 0;\n            var item;\n\n            if (length) {\n                for (; idx < length; idx++) {\n                    item = items[idx];\n                    item = item.name === undefined ? { name: item } : item;\n\n                    html += this.template(extend({ sortIcon: this._sortIcon(item.name) }, item));\n                }\n            } else {\n                html = this.emptyTemplate(this.options.messages.empty);\n            }\n\n            this.element.html(html);\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this.dataSource.unbind(CHANGE, this._refreshHandler);\n            this.element.off(NS);\n\n            if (this.sortable) {\n                this.sortable.destroy();\n            }\n\n            if (this.fieldMenu) {\n                this.fieldMenu.destroy();\n            }\n\n            this.element = null;\n            this._refreshHandler = null;\n        },\n\n        _sortIcon: function(name) {\n            var expressions = this.dataSource.sort();\n            var expr = sortExpr(expressions, getName(name));\n            var icon = \"\";\n\n            if (expr) {\n                icon = \"k-i-sort-\" + expr.dir;\n            }\n\n            return icon;\n        }\n    });\n\n    var PivotGrid = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n            var columnBuilder;\n            var rowBuilder;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._dataSource();\n\n            that._bindConfigurator();\n\n            that._wrapper();\n            that._createLayout();\n\n            that._columnBuilder = columnBuilder = new ColumnBuilder();\n            that._rowBuilder = rowBuilder = new RowBuilder();\n            that._contentBuilder = new ContentBuilder();\n\n            that._templates();\n\n            that.columnsHeader\n                .add(that.rowsHeader)\n                .on(\"click\", \"span.k-icon\", function() {\n                    var button = $(this);\n                    var builder = columnBuilder;\n                    var action = \"expandColumn\";\n                    var eventName;\n                    var path = button.attr(kendo.attr(\"path\"));\n                    var eventArgs = {\n                        axis: \"columns\",\n                        path: $.parseJSON(path)\n                    };\n\n                    if (button.parent().is(\"td\")) {\n                        builder = rowBuilder;\n                        action = \"expandRow\";\n                        eventArgs.axis = \"rows\";\n                    }\n\n                    var expanded = button.hasClass(STATE_EXPANDED);\n                    var metadata = builder.metadata[path];\n                    var request = metadata.expanded === undefined;\n\n                    eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n                    if (that.trigger(eventName, eventArgs)) {\n                        return;\n                    }\n\n                    builder.metadata[path].expanded = !expanded;\n\n                    button.toggleClass(STATE_EXPANDED, !expanded)\n                          .toggleClass(STATE_COLLAPSED, expanded);\n\n                    if (!expanded && request) {\n                        that.dataSource[action](eventArgs.path);\n                    } else {\n                        that.refresh();\n                    }\n                });\n\n            that._scrollable();\n\n            if (that.options.autoBind) {\n                that.dataSource.fetch();\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n            DATABINDING,\n            DATABOUND,\n            EXPANDMEMBER,\n            COLLAPSEMEMBER\n        ],\n\n        options: {\n            name: \"PivotGrid\",\n            autoBind: true,\n            reorderable: true,\n            filterable: false,\n            sortable: false,\n            height: null,\n            columnWidth: 100,\n            configurator: \"\",\n            columnHeaderTemplate: null,\n            rowHeaderTemplate: null,\n            dataCellTemplate: null,\n            kpiStatusTemplate: null,\n            kpiTrendTemplate: null,\n            messages: {\n                measureFields: \"Drop Data Fields Here\",\n                columnFields: \"Drop Column Fields Here\",\n                rowFields: \"Drop Rows Fields Here\"\n            }\n        },\n\n        _templates: function() {\n            var columnTemplate = this.options.columnHeaderTemplate;\n            var rowTemplate = this.options.rowHeaderTemplate;\n            var dataTemplate = this.options.dataCellTemplate;\n            var kpiStatusTemplate = this.options.kpiStatusTemplate;\n            var kpiTrendTemplate = this.options.kpiTrendTemplate;\n\n            this._columnBuilder.template = kendo.template(columnTemplate || HEADER_TEMPLATE, { useWithBlock: !!columnTemplate });\n            this._contentBuilder.dataTemplate = kendo.template(dataTemplate || DATACELL_TEMPLATE, { useWithBlock: !!dataTemplate });\n            this._contentBuilder.kpiStatusTemplate = kendo.template(kpiStatusTemplate || KPISTATUS_TEMPLATE, { useWithBlock: !!kpiStatusTemplate });\n            this._contentBuilder.kpiTrendTemplate = kendo.template(kpiTrendTemplate || KPITREND_TEMPLATE, { useWithBlock: !!kpiTrendTemplate });\n            this._rowBuilder.template = kendo.template(rowTemplate || HEADER_TEMPLATE, { useWithBlock: !!rowTemplate });\n        },\n\n        _bindConfigurator: function() {\n            var configurator = this.options.configurator;\n            if (configurator) {\n                $(configurator).kendoPivotConfigurator(\"setDataSource\", this.dataSource);\n            }\n        },\n\n        cellInfoByElement: function(element) {\n            element = $(element);\n\n            return this.cellInfo(element.index(), element.parent(\"tr\").index());\n        },\n\n        cellInfo: function(columnIndex, rowIndex) {\n            var contentBuilder = this._contentBuilder;\n            var columnInfo = contentBuilder.columnIndexes[columnIndex || 0];\n            var rowInfo = contentBuilder.rowIndexes[rowIndex || 0];\n            var dataIndex;\n\n            if (!columnInfo || !rowInfo) {\n                return null;\n            }\n\n            dataIndex = (rowInfo.index * contentBuilder.rowLength) + columnInfo.index;\n\n            return {\n                columnTuple: columnInfo.tuple,\n                rowTuple: rowInfo.tuple,\n                measure: columnInfo.measure || rowInfo.measure,\n                dataItem: this.dataSource.view()[dataIndex]\n            };\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n\n            if (this.measuresTarget) {\n                this.measuresTarget.setDataSource(dataSource);\n            }\n\n            if (this.rowsTarget) {\n                this.rowsTarget.setDataSource(dataSource);\n            }\n\n            if (this.columnsTarget) {\n                this.columnsTarget.setDataSource(dataSource);\n            }\n\n            this._bindConfigurator();\n\n            if (this.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n\n            this._templates();\n        },\n\n        _dataSource: function() {\n            var that = this;\n            var dataSource = that.options.dataSource;\n\n            dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n\n            if (that.dataSource && this._refreshHandler) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler)\n                               .unbind(STATERESET, that._stateResetHandler)\n                               .unbind(PROGRESS, that._progressHandler)\n                               .unbind(ERROR, that._errorHandler);\n            } else {\n                that._refreshHandler = $.proxy(that.refresh, that);\n                that._progressHandler = $.proxy(that._requestStart, that);\n                that._stateResetHandler = $.proxy(that._stateReset, that);\n                that._errorHandler = $.proxy(that._error, that);\n            }\n\n            that.dataSource = kendo.data.PivotDataSource.create(dataSource)\n                                   .bind(CHANGE, that._refreshHandler)\n                                   .bind(PROGRESS, that._progressHandler)\n                                   .bind(STATERESET, that._stateResetHandler)\n                                   .bind(ERROR, that._errorHandler);\n        },\n\n        _error: function() {\n            this._progress(false);\n        },\n\n        _requestStart: function() {\n            this._progress(true);\n        },\n\n        _stateReset: function() {\n            this._columnBuilder.reset();\n            this._rowBuilder.reset();\n        },\n\n        _wrapper: function() {\n            var height = this.options.height;\n\n            this.wrapper = this.element.addClass(\"k-widget k-pivot\");\n\n            if (height) {\n                this.wrapper.css(\"height\", height);\n            }\n        },\n\n        _measureFields: function() {\n            this.measureFields = $(DIV).addClass(\"k-pivot-toolbar k-header k-settings-measures\");\n\n            this.measuresTarget = this._createSettingTarget(this.measureFields, {\n                setting: \"measures\",\n                messages: {\n                    empty: this.options.messages.measureFields\n                }\n            });\n        },\n\n        _createSettingTarget: function(element, options) {\n            var template = '<span tabindex=\"0\" class=\"k-button\" data-' + kendo.ns + 'name=\"${data.name}\">${data.name}';\n            var sortable = options.sortable;\n            var icons = \"\";\n\n            if (sortable) {\n                icons += '#if (data.sortIcon) {#';\n                icons += '<span class=\"k-icon ${data.sortIcon} k-setting-sort\"></span>';\n                icons += '#}#';\n            }\n\n            if (options.filterable || sortable) {\n                icons += '<span class=\"k-icon k-i-arrowhead-s k-setting-fieldmenu\"></span>';\n            }\n            if (this.options.reorderable) {\n                icons += '<span class=\"k-icon k-si-close k-setting-delete\"></span>';\n            }\n\n            if (icons) {\n                template += '<span class=\"k-field-actions\">' + icons + '</span>';\n            }\n\n            template += '</span>';\n\n            return new kendo.ui.PivotSettingTarget(element, $.extend({\n                template: template,\n                emptyTemplate: '<span class=\"k-empty\">${data}</span>',\n                enabled: this.options.reorderable,\n                dataSource: this.dataSource\n            }, options));\n        },\n\n        _initSettingTargets: function() {\n            this.columnsTarget = this._createSettingTarget(this.columnFields, {\n                connectWith: this.rowFields,\n                setting: \"columns\",\n                filterable: this.options.filterable,\n                sortable: this.options.sortable,\n                messages: {\n                    empty: this.options.messages.columnFields,\n                    fieldMenu: this.options.messages.fieldMenu\n                }\n            });\n\n            this.rowsTarget = this._createSettingTarget(this.rowFields, {\n                connectWith: this.columnFields,\n                setting: \"rows\",\n                filterable: this.options.filterable,\n                sortable: this.options.sortable,\n                messages: {\n                    empty: this.options.messages.rowFields,\n                    fieldMenu: this.options.messages.fieldMenu\n                }\n            });\n        },\n\n        _createLayout: function() {\n            var that = this;\n            var layoutTable = $(LAYOUT_TABLE);\n            var leftContainer = layoutTable.find(\".k-pivot-rowheaders\");\n            var rightContainer = layoutTable.find(\".k-pivot-table\");\n            var gridWrapper = $(DIV).addClass(\"k-grid k-widget\");\n\n            that._measureFields();\n            that.columnFields = $(DIV).addClass(\"k-pivot-toolbar k-header k-settings-columns\");\n\n            that.rowFields = $(DIV).addClass(\"k-pivot-toolbar k-header k-settings-rows\");\n            that.columnsHeader = $('<div class=\"k-grid-header-wrap\" />')\n                                    .wrap('<div class=\"k-grid-header\" />');\n\n            that.columnsHeader.parent().css(\"padding-right\", kendo.support.scrollbar());\n\n            that.rowsHeader = $('<div class=\"k-grid k-widget k-alt\"/>');\n            that.content = $('<div class=\"k-grid-content\" />');\n\n            leftContainer.append(that.measureFields);\n            leftContainer.append(that.rowFields);\n            leftContainer.append(that.rowsHeader);\n\n            gridWrapper.append(that.columnsHeader.parent());\n            gridWrapper.append(that.content);\n\n            rightContainer.append(that.columnFields);\n            rightContainer.append(gridWrapper);\n\n            that.wrapper.append(layoutTable);\n\n            that.columnsHeaderTree = new kendo.dom.Tree(that.columnsHeader[0]);\n            that.rowsHeaderTree = new kendo.dom.Tree(that.rowsHeader[0]);\n            that.contentTree = new kendo.dom.Tree(that.content[0]);\n\n            that._initSettingTargets();\n        },\n\n        _progress: function(toggle) {\n            kendo.ui.progress(this.wrapper, toggle);\n        },\n\n        _resize: function() {\n            var columnTable = this.columnsHeader.children(\"table\");\n            var contentTable = this.content.children(\"table\");\n\n            if (this.content[0].firstChild) {\n                this._setSectionsWidth();\n                this._setSectionsHeight();\n                this._setContentWidth();\n                this._setContentHeight();\n\n                columnTable.css(\"table-layout\", AUTO);\n                contentTable.css(\"table-layout\", AUTO);\n\n                clearTimeout(this._layoutTimeout);\n                this._layoutTimeout = setTimeout(function() {\n                    columnTable.css(\"table-layout\", \"fixed\");\n                    contentTable.css(\"table-layout\", \"fixed\");\n                });\n            }\n        },\n\n        _setSectionsWidth: function() {\n            var rowsHeader = this.rowsHeader;\n            var leftColumn = rowsHeader.parent(\".k-pivot-rowheaders\").width(AUTO);\n            var width;\n\n            width = Math.max(this.measureFields.outerWidth(), this.rowFields.outerWidth());\n            width = Math.max(rowsHeader.children(\"table\").width(), width);\n\n            leftColumn.width(width);\n        },\n\n        _setSectionsHeight: function() {\n            var measureFieldsHeight = this.measureFields.height(AUTO).height();\n            var columnFieldsHeight = this.columnFields.height(AUTO).height();\n            var rowFieldsHeight = this.rowFields.height(AUTO).innerHeight();\n            var columnsHeight = this.columnsHeader.height(AUTO).innerHeight();\n\n            var padding = rowFieldsHeight - this.rowFields.height();\n\n            var firstRowHeight = columnFieldsHeight > measureFieldsHeight ? columnFieldsHeight : measureFieldsHeight;\n            var secondRowHeight = columnsHeight > rowFieldsHeight ? columnsHeight : rowFieldsHeight;\n\n            this.measureFields.height(firstRowHeight);\n            this.columnFields.height(firstRowHeight);\n            this.rowFields.height(secondRowHeight - padding);\n            this.columnsHeader.height(secondRowHeight);\n        },\n\n        _setContentWidth: function() {\n            var contentTable = this.content.find(\"table\");\n            var contentWidth = this.content.width();\n\n            var rowLength = contentTable.children(\"colgroup\").children().length;\n\n            var minWidth = 100;\n            var calculatedWidth = rowLength * this.options.columnWidth;\n\n            if (contentWidth < calculatedWidth) {\n                minWidth = Math.ceil((calculatedWidth / contentWidth) * 100);\n            }\n\n            contentTable.add(this.columnsHeader.children(\"table\"))\n                        .css(\"width\", minWidth + \"%\");\n        },\n\n        _setContentHeight: function() {\n            var that = this;\n            var content = that.content;\n            var rowsHeader = that.rowsHeader;\n            var height = that.wrapper.innerHeight();\n            var scrollbar = kendo.support.scrollbar();\n            var skipScrollbar = content[0].offsetHeight === content[0].clientHeight;\n\n            if (that.wrapper.is(\":visible\")) {\n                if (!height) {\n                    if (skipScrollbar) {\n                        scrollbar = 0;\n                    }\n\n                    rowsHeader.height(content.height() - scrollbar);\n                    return;\n                }\n\n                height -= that.columnFields.outerHeight();\n                height -= that.columnsHeader.outerHeight();\n\n                if (height <= scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n                    height = scrollbar * 2 + 1;\n                    if (!skipScrollbar) {\n                        height += scrollbar;\n                    }\n                }\n\n                content.height(height);\n\n                if (skipScrollbar) {\n                    scrollbar = 0;\n                }\n\n                rowsHeader.height(height - scrollbar);\n            }\n        },\n\n        _axisMeasures: function(axis) {\n            var result = [];\n            var dataSource = this.dataSource;\n            var measures = dataSource.measures();\n            var hasMeasure = measures.length > 1 || (measures[0] && measures[0].type);\n\n            if (dataSource.measuresAxis() === axis) {\n                if (dataSource[axis]().length === 0 || hasMeasure) {\n                    result = measures;\n                }\n            }\n\n            return result;\n        },\n\n        refresh: function() {\n            var that = this;\n            var dataSource = that.dataSource;\n\n            var axes = dataSource.axes();\n            var columns = (axes.columns || {}).tuples || [];\n            var rows = (axes.rows || {}).tuples || [];\n\n            var columnBuilder = that._columnBuilder;\n            var rowBuilder = that._rowBuilder;\n\n            var columnAxis = {};\n            var rowAxis = {};\n\n            if (that.trigger(DATABINDING, { action: \"rebind\" } )) {\n                return;\n            }\n\n            columnBuilder.measures = this._axisMeasures(\"columns\");\n\n            that.columnsHeaderTree.render(columnBuilder.build(columns));\n            that.rowsHeaderTree.render(rowBuilder.build(rows));\n\n            columnAxis = {\n                indexes: columnBuilder._indexes,\n                measures: columnBuilder.measures,\n                metadata: columnBuilder.metadata\n            };\n\n            rowAxis = {\n                indexes: rowBuilder._indexes,\n                measures: this._axisMeasures(\"rows\"),\n                metadata: rowBuilder.metadata\n            };\n\n            that.contentTree.render(that._contentBuilder.build(dataSource.view(), columnAxis, rowAxis));\n\n            that._resize();\n\n            if (that.touchScroller) {\n                that.touchScroller.contentResized();\n            } else {\n                var touchScroller = kendo.touchScroller(that.content);\n\n                if (touchScroller && touchScroller.movable) {\n                    that.touchScroller = touchScroller;\n\n                    touchScroller.movable.bind(\"change\", function(e) {\n                        that.columnsHeader.scrollLeft(-e.sender.x);\n                        that.rowsHeader.scrollTop(-e.sender.y);\n                    });\n                }\n            }\n\n            that._progress(false);\n\n            that.trigger(DATABOUND);\n        },\n\n        _scrollable: function() {\n            var that = this;\n            var columnsHeader = that.columnsHeader;\n            var rowsHeader = that.rowsHeader;\n\n            that.content.scroll(function() {\n                columnsHeader.scrollLeft(this.scrollLeft);\n                rowsHeader.scrollTop(this.scrollTop);\n            });\n\n            rowsHeader.bind(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, $.proxy(that._wheelScroll, that));\n        },\n\n        _wheelScroll: function (e) {\n            if (e.ctrlKey) {\n                return;\n            }\n\n            var delta = kendo.wheelDeltaY(e);\n            var scrollTop = this.content.scrollTop();\n\n            if (delta) {\n                e.preventDefault();\n                //In Firefox DOMMouseScroll event cannot be canceled\n                $(e.currentTarget).one(\"wheel\" + NS, false);\n\n                this.rowsHeader.scrollTop(scrollTop + (-delta));\n                this.content.scrollTop(scrollTop + (-delta));\n            }\n        }\n    });\n\n    var element = kendo.dom.element;\n    var htmlNode = kendo.dom.html;\n    var text = kendo.dom.text;\n\n    var createMetadata = function(levelNum, memberIdx) {\n       return {\n            maxChildren: 0,\n            children: 0,\n            maxMembers: 0,\n            members: 0,\n            measures: 1,\n            levelNum: levelNum,\n            parentMember: memberIdx !== 0\n        };\n    };\n\n    var buildPath = function(tuple, index) {\n        var path = [];\n        var idx = 0;\n\n        for(; idx <= index; idx++) {\n            path.push(tuple.members[idx].name);\n        }\n\n        return path;\n    };\n\n    var tupleName = function(tuple, index) {\n        var name = \"\";\n        var idx = 0;\n\n        for(; idx <= index; idx++) {\n            name += tuple.members[idx].name;\n        }\n\n        return name;\n    };\n\n    var ColumnBuilder = Class.extend({\n        init: function(options) {\n            this.measures = 1;\n            this.metadata = {};\n        },\n\n        build: function(tuples) {\n            var tbody = this._tbody(tuples);\n            var colgroup = this._colGroup();\n\n            return [\n                element(\"table\", null, [colgroup, tbody])\n            ];\n        },\n\n        reset: function() {\n            this.metadata = {};\n        },\n\n        _colGroup: function() {\n            var length = this._rowLength();\n            var children = [];\n            var idx = 0;\n\n            for (; idx < length; idx++) {\n                children.push(element(\"col\", null));\n            }\n\n            return element(\"colgroup\", null, children);\n        },\n\n        _tbody: function(tuples) {\n            var root = tuples[0];\n\n            this.map = {};\n            this.rows = [];\n            this.rootTuple = root;\n\n            this._indexes = [];\n\n            if (root) {\n                this._buildRows(root, 0);\n                this._normalize();\n            } else {\n                this.rows.push(element(\"tr\", null, [ element(\"th\", null, [ htmlNode(\"&nbsp;\") ]) ]));\n            }\n\n            return element(\"tbody\", null, this.rows);\n        },\n\n        _normalize: function() {\n            var rows = this.rows;\n            var rowsLength = rows.length;\n            var rowIdx = 0;\n            var row;\n\n            var cellsLength;\n            var cellIdx;\n            var cells;\n            var cell;\n\n            for (; rowIdx < rowsLength; rowIdx++) {\n                row = rows[rowIdx];\n\n                if (row.rowSpan === 1) {\n                    continue;\n                }\n\n                cells = row.children;\n\n                cellIdx = 0;\n                cellsLength = cells.length;\n\n                for (; cellIdx < cellsLength; cellIdx++) {\n                    cell = cells[cellIdx];\n\n                    if (cell.tupleAll) {\n                        cell.attr.rowSpan = row.rowSpan;\n                    }\n                }\n            }\n        },\n\n        _rowIndex: function(row) {\n            var rows = this.rows;\n            var length = rows.length;\n            var idx = 0;\n\n            for(; idx < length; idx++) {\n                if (rows[idx] === row) {\n                    break;\n                }\n            }\n\n            return idx;\n        },\n\n        _rowLength: function() {\n            var cells = this.rows[0] ? this.rows[0].children : [];\n            var length = cells.length;\n            var rowLength = 0;\n            var idx = 0;\n\n            if (length) {\n                for (; idx < length; idx++) {\n                    rowLength += cells[idx].attr.colSpan || 1;\n                }\n            }\n\n            if (!rowLength) {\n                rowLength = this.measures;\n            }\n\n            return rowLength;\n        },\n\n        _row: function(tuple, memberIdx, parentMember) {\n            var rootName = this.rootTuple.members[memberIdx].name;\n            var levelNum = tuple.members[memberIdx].levelNum;\n            var rowKey = rootName + levelNum;\n            var map = this.map;\n            var parentRow;\n            var children;\n\n            var row = map[rowKey];\n\n            if (!row) {\n                row = element(\"tr\", null, []);\n\n                row.parentMember = parentMember;\n                row.colSpan = 0;\n                row.rowSpan = 1;\n\n                map[rowKey] = row;\n                parentRow = map[rootName + (Number(levelNum) - 1)];\n\n                if (parentRow) {\n                    children = parentRow.children;\n\n                    if (children[1] && children[1].attr.className.indexOf(\"k-alt\") === -1) {\n                        row.notFirst = true;\n                    } else {\n                        row.notFirst = parentRow.notFirst;\n                    }\n                }\n\n                this.rows.splice(this._rowIndex(parentRow) + 1, 0, row);\n            } else {\n                row.notFirst = false;\n\n                if (!row.parentMember || row.parentMember !== parentMember) {\n                    row.parentMember = parentMember;\n                    row.colSpan = 0;\n                }\n            }\n\n            return row;\n        },\n\n        _measures: function(measures, tuple, className) {\n            var map = this.map;\n            var row = map.measureRow;\n            var measure;\n\n            if (!row) {\n                row = element(\"tr\", null, []);\n                map.measureRow = row;\n                this.rows.push(row);\n            }\n\n            for (var idx = 0, length = measures.length; idx < length; idx++) {\n                measure = measures[idx];\n                row.children.push(element(\"th\", { className: \"k-header\" + (className || \"\") }, [this._content(measure, tuple)]));\n            }\n\n            return length;\n        },\n\n        _content: function(member, tuple) {\n            return htmlNode(this.template({\n                member: member,\n                tuple: tuple\n            }));\n        },\n\n        _cell: function(className, children) {\n            return element(\"th\", { className: \"k-header\" + className }, children);\n        },\n\n        _buildRows: function(tuple, memberIdx, parentMember) {\n            var members = tuple.members;\n            var member = members[memberIdx];\n            var nextMember = members[memberIdx + 1];\n\n            var row, childRow, children, childrenLength;\n            var cell, allCell, cellAttr;\n            var cellChildren = [];\n            var path;\n\n            var idx = 0;\n            var colSpan;\n            var metadata;\n\n            if (member.measure) {\n                this._measures(member.children, tuple);\n                return;\n            }\n\n            path = kendo.stringify(buildPath(tuple, memberIdx));\n            row = this._row(tuple, memberIdx, parentMember);\n\n            children = member.children;\n            childrenLength = children.length;\n\n            metadata = this.metadata[path];\n            if (!metadata) {\n                this.metadata[path] = metadata = createMetadata(Number(member.levelNum), memberIdx);\n            }\n\n            this._indexes.push({\n                path: path,\n                tuple: tuple\n            });\n\n            if (member.hasChildren) {\n                if (metadata.expanded === false) {\n                    childrenLength = 0;\n                    metadata.children = 0;\n                }\n\n                cellAttr = { className: \"k-icon \" + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n                cellAttr[kendo.attr(\"path\")] = path;\n\n                cellChildren.push(element(\"span\", cellAttr));\n            }\n\n            cellChildren.push(this._content(member, tuple));\n            cell = this._cell((row.notFirst ? \" k-first\" : \"\"), cellChildren);\n\n            row.children.push(cell);\n            row.colSpan += 1;\n\n            if (childrenLength) {\n                allCell = this._cell(\" k-alt\", [this._content(member, tuple)]);\n                row.children.push(allCell);\n\n                for (; idx < childrenLength; idx++) {\n                    childRow = this._buildRows(children[idx], memberIdx, member);\n                }\n\n                colSpan = childRow.colSpan;\n                cell.attr.colSpan = colSpan;\n\n                metadata.children = colSpan;\n                metadata.members = 1;\n\n                row.colSpan += colSpan;\n                row.rowSpan = childRow.rowSpan + 1;\n\n                if (nextMember) {\n                    if (nextMember.measure) {\n                        colSpan = this._measures(nextMember.children, tuple, \" k-alt\");\n                    } else {\n                        colSpan = this._buildRows(tuple, memberIdx + 1).colSpan;\n                    }\n\n                    allCell.attr.colSpan = colSpan;\n                    colSpan -= 1;\n\n                    metadata.members += colSpan;\n                    row.colSpan += colSpan;\n                }\n            } else if (nextMember) {\n                if (nextMember.measure) {\n                    colSpan = this._measures(nextMember.children, tuple);\n                } else {\n                    colSpan = this._buildRows(tuple, memberIdx + 1).colSpan;\n                }\n\n                metadata.members = colSpan;\n\n                if (colSpan > 1) {\n                    cell.attr.colSpan = colSpan;\n                    row.colSpan += colSpan - 1;\n                }\n            }\n\n            if (metadata.maxChildren < metadata.children) {\n                metadata.maxChildren = metadata.children;\n            }\n\n            if (metadata.maxMembers < metadata.members) {\n                metadata.maxMembers = metadata.members;\n            }\n\n            (allCell || cell).tupleAll = true;\n\n            return row;\n        }\n    });\n\n    var RowBuilder = Class.extend({\n        init: function(options) {\n            this.metadata = {};\n        },\n\n        build: function(tuples) {\n            var tbody = this._tbody(tuples);\n            var colgroup = this._colGroup();\n\n            return [\n                element(\"table\", null, [colgroup, tbody])\n            ];\n        },\n\n        reset: function() {\n            this.metadata = {};\n        },\n\n        _colGroup: function() {\n            var length = this.rows[0].children.length;\n            var children = [];\n            var idx = 0;\n\n            for (; idx < length; idx++) {\n                children.push(element(\"col\", null));\n            }\n\n            return element(\"colgroup\", null, children);\n        },\n\n        _tbody: function(tuples) {\n            var root = tuples[0];\n\n            this.rootTuple = root;\n            this.rows = [];\n            this.map = {};\n\n            this._indexes = [];\n\n            if (root) {\n                this._buildRows(root, 0);\n                this._normalize();\n            } else {\n                this.rows.push(element(\"tr\", null, [ element(\"td\", null, [ htmlNode(\"&nbsp;\") ]) ]));\n            }\n\n            return element(\"tbody\", null, this.rows);\n        },\n\n        _normalize: function() {\n            var rows = this.rows;\n            var rowsLength = rows.length;\n            var rowIdx = 0;\n\n            var members = this.rootTuple.members;\n            var firstMemberName = members[0].name;\n            var membersLength = members.length;\n            var memberIdx = 0;\n\n            var row;\n            var cell;\n            var maxcolSpan;\n            var map = this.map;\n            var allRow;\n\n            for (; rowIdx < rowsLength; rowIdx++) {\n                row = rows[rowIdx];\n\n                for (memberIdx = 0; memberIdx < membersLength; memberIdx++) {\n                    maxcolSpan = this[members[memberIdx].name];\n                    cell = row.colSpan[\"dim\" + memberIdx];\n\n                    if (cell && cell.levelNum < maxcolSpan) {\n                        cell.attr.colSpan = (maxcolSpan - cell.levelNum) + 1;\n                    }\n                }\n            }\n\n            row = map[firstMemberName];\n            allRow = map[firstMemberName + \"all\"];\n\n            if (row) {\n                row.children[0].attr.className = \"k-first\";\n            }\n\n            if (allRow) {\n                allRow.children[0].attr.className += \" k-first\";\n            }\n        },\n\n        _row: function(children) {\n            var row = element(\"tr\", null, children);\n            row.rowSpan = 1;\n            row.colSpan = {};\n\n            this.rows.push(row);\n\n            return row;\n        },\n\n        _content: function(member, tuple) {\n            return htmlNode(this.template({\n                member: member,\n                tuple: tuple\n            }));\n        },\n\n        _buildRows: function(tuple, memberIdx) {\n            var map = this.map;\n            var path;\n\n            var members = tuple.members;\n            var member = members[memberIdx];\n            var nextMember = members[memberIdx + 1];\n\n            var children = member.children;\n            var childrenLength = children.length;\n\n            var levelNum = Number(member.levelNum) + 1;\n            var rootName = this.rootTuple.members[memberIdx].name;\n            var tuplePath = buildPath(tuple, memberIdx - 1).join(\"\");\n\n            var parentName = tuplePath + (member.parentName || \"\");\n            var row = map[parentName + \"all\"] || map[parentName];\n            var childRow;\n            var allRow;\n\n            var metadata;\n            var expandIconAttr;\n            var cellChildren = [];\n            var allCell;\n            var cell;\n            var attr;\n            var idx;\n\n            if (!row || row.hasChild) {\n                row = this._row();\n            } else {\n                row.hasChild = true;\n            }\n\n            if (member.measure) {\n                attr = { className: row.allCell ? \"k-grid-footer\" : \"\" };\n                row.children.push(element(\"td\", attr, [ this._content(children[0], tuple) ]));\n\n                row.rowSpan = childrenLength;\n\n                for (idx = 1; idx < childrenLength; idx++) {\n                    this._row([ element(\"td\", attr, [ this._content(children[idx], tuple) ]) ]);\n                }\n\n                return row;\n            }\n\n            map[tuplePath + member.name] = row;\n\n            path = kendo.stringify(buildPath(tuple, memberIdx));\n\n            metadata = this.metadata[path];\n            if (!metadata) {\n                this.metadata[path] = metadata = createMetadata(levelNum - 1, memberIdx);\n            }\n\n            this._indexes.push({\n                path: path,\n                tuple: tuple\n            });\n\n            if (member.hasChildren) {\n                if (metadata.expanded === false) {\n                    childrenLength = 0;\n                    metadata.children = 0;\n                }\n\n                expandIconAttr = { className: \"k-icon \" + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n                expandIconAttr[kendo.attr(\"path\")] = path;\n\n                cellChildren.push(element(\"span\", expandIconAttr));\n            }\n\n            cellChildren.push(this._content(member, tuple));\n            cell = element(\"td\", { className: row.allCell && !childrenLength ? \"k-grid-footer\" : \"\" }, cellChildren);\n            cell.levelNum = levelNum;\n\n            row.children.push(cell);\n            row.colSpan[\"dim\" + memberIdx] = cell;\n\n            if (!this[rootName] || this[rootName] < levelNum) {\n                this[rootName] = levelNum;\n            }\n\n            if (childrenLength) {\n                row.allCell = false;\n                row.hasChild = false;\n\n                for (idx = 0; idx < childrenLength; idx++) {\n                    childRow = this._buildRows(children[idx], memberIdx);\n\n                    if (row !== childRow) {\n                        row.rowSpan += childRow.rowSpan;\n                    }\n                }\n\n                if (row.rowSpan > 1) {\n                    cell.attr.rowSpan = row.rowSpan;\n                }\n\n                metadata.children = row.rowSpan;\n\n                allCell = element(\"td\", { className: \"k-grid-footer\" }, [this._content(member, tuple)]);\n                allCell.levelNum = levelNum;\n\n                allRow = this._row([ allCell ]);\n                allRow.colSpan[\"dim\" + memberIdx] = allCell;\n                allRow.allCell = true;\n\n                map[tuplePath + member.name + \"all\"] = allRow;\n\n                if (nextMember) {\n                    childRow = this._buildRows(tuple, memberIdx + 1);\n                    allCell.attr.rowSpan = childRow.rowSpan;\n                }\n\n                row.rowSpan += allRow.rowSpan;\n\n                metadata.members = allRow.rowSpan;\n\n            } else if (nextMember) {\n                row.hasChild = false;\n                this._buildRows(tuple, memberIdx + 1);\n\n                (allCell || cell).attr.rowSpan = row.rowSpan;\n\n                metadata.members = row.rowSpan;\n            }\n\n            if (metadata.maxChildren < metadata.children) {\n                metadata.maxChildren = metadata.children;\n            }\n\n            if (metadata.maxMembers < metadata.members) {\n                metadata.maxMembers = metadata.members;\n            }\n\n            return row;\n        }\n    });\n\n    var ContentBuilder = Class.extend({\n        init: function() {\n            this.columnAxis = {};\n            this.rowAxis = {};\n        },\n\n        build: function(data, columnAxis, rowAxis) {\n            var index = columnAxis.indexes[0];\n            var metadata = columnAxis.metadata[index ? index.path : undefined];\n\n            this.columnAxis = columnAxis;\n            this.rowAxis = rowAxis;\n\n            this.data = data;\n\n            this.rowLength = metadata ? metadata.maxChildren + metadata.maxMembers : columnAxis.measures.length || 1;\n\n            if (!this.rowLength) {\n                this.rowLength = 1;\n            }\n\n            var tbody = this._tbody();\n            var colgroup = this._colGroup();\n\n            return [\n                element(\"table\", null, [colgroup, tbody])\n            ];\n        },\n\n        _colGroup: function() {\n            var length = this.columnAxis.measures.length || 1;\n            var children = [];\n            var idx = 0;\n\n            if (this.rows[0]) {\n                length = this.rows[0].children.length;\n            }\n\n            for (; idx < length; idx++) {\n                children.push(element(\"col\", null));\n            }\n\n            return element(\"colgroup\", null, children);\n        },\n\n        _tbody: function() {\n            this.rows = [];\n\n            if (this.data[0]) {\n                this.columnIndexes = this._indexes(this.columnAxis);\n                this.rowIndexes = this._indexes(this.rowAxis);\n\n                this._buildRows();\n            } else {\n                this.rows.push(element(\"tr\", null, [ element(\"td\", null, [ htmlNode(\"&nbsp;\") ]) ]));\n            }\n\n            return element(\"tbody\", null, this.rows);\n        },\n\n        _indexes: function(axisInfo) {\n            var result = [];\n            var axisInfoMember;\n            var indexes = axisInfo.indexes;\n            var metadata = axisInfo.metadata;\n            var measures = axisInfo.measures;\n            var measuresLength = measures.length || 1;\n\n            var current;\n            var dataIdx = 0;\n            var firstEmpty = 0;\n\n            var idx = 0;\n            var length = indexes.length;\n            var measureIdx;\n\n            var children;\n            var skipChildren;\n\n            if (!length) {\n                for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n                    result[measureIdx] = {\n                        index: measureIdx,\n                        measure: measures[measureIdx],\n                        tuple: null\n                    };\n                }\n\n                return result;\n            }\n\n            for (; idx < length; idx++) {\n                axisInfoMember = indexes[idx];\n                current = metadata[axisInfoMember.path];\n                children = current.children + current.members;\n                skipChildren = 0;\n\n                if (children) {\n                    children -= measuresLength;\n                }\n\n                if (current.expanded === false && current.children !== current.maxChildren) {\n                    skipChildren = current.maxChildren;\n                }\n\n                if (current.parentMember && current.levelNum === 0) {\n                    children = -1;\n                }\n\n                if (children > -1) {\n                    for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n                        result[children + firstEmpty + measureIdx] = {\n                            children: children,\n                            index: dataIdx,\n                            measure: measures[measureIdx],\n                            tuple: axisInfoMember.tuple\n                        };\n                        dataIdx += 1;\n                    }\n\n                    while(result[firstEmpty] !== undefined) {\n                        firstEmpty += 1;\n                    }\n                }\n\n                dataIdx += skipChildren;\n            }\n\n            return result;\n        },\n\n        _buildRows: function() {\n            var rowIndexes = this.rowIndexes;\n            var length = rowIndexes.length;\n            var idx = 0;\n\n            for (; idx < length; idx++) {\n                this.rows.push(this._buildRow(rowIndexes[idx]));\n            }\n        },\n\n        _buildRow: function(rowInfo) {\n            var startIdx = rowInfo.index * this.rowLength;\n            var columnIndexes = this.columnIndexes;\n            var length = columnIndexes.length;\n            var columnInfo;\n            var cells = [];\n            var idx = 0;\n\n            var templateInfo;\n            var cellContent;\n            var attr, dataItem, measure;\n\n            for (; idx < length; idx++) {\n                columnInfo = columnIndexes[idx];\n\n                attr = {};\n                if (columnInfo.children) {\n                    attr.className = \"k-alt\";\n                }\n\n                cellContent = \"\";\n                dataItem = this.data[startIdx + columnInfo.index];\n                measure = columnInfo.measure || rowInfo.measure;\n\n                templateInfo = {\n                    columnTuple: columnInfo.tuple,\n                    rowTuple: rowInfo.tuple,\n                    measure: measure,\n                    dataItem: dataItem\n                };\n\n                if (dataItem.value !== \"\" && measure && measure.type) {\n                    if (measure.type === \"status\") {\n                        cellContent = this.kpiStatusTemplate(templateInfo);\n                    } else if (measure.type === \"trend\") {\n                        cellContent = this.kpiTrendTemplate(templateInfo);\n                    }\n                }\n\n                if (!cellContent) {\n                    cellContent = this.dataTemplate(templateInfo);\n                }\n\n                cells.push(element(\"td\", attr, [ htmlNode(cellContent) ]));\n            }\n\n            attr = {};\n            if (rowInfo.children) {\n                attr.className = \"k-grid-footer\";\n            }\n\n            return element(\"tr\", attr, cells);\n        }\n    });\n\n    ui.plugin(PivotGrid);\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true */\n(function($, undefined){\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        data = kendo.data,\n        extend = $.extend,\n        template = kendo.template,\n        isArray = $.isArray,\n        Widget = ui.Widget,\n        HierarchicalDataSource = data.HierarchicalDataSource,\n        proxy = $.proxy,\n        keys = kendo.keys,\n        NS = \".kendoTreeView\",\n        SELECT = \"select\",\n        CHECK = \"check\",\n        NAVIGATE = \"navigate\",\n        EXPAND = \"expand\",\n        CHANGE = \"change\",\n        ERROR = \"error\",\n        CHECKED = \"checked\",\n        INDETERMINATE = \"indeterminate\",\n        COLLAPSE = \"collapse\",\n        DRAGSTART = \"dragstart\",\n        DRAG = \"drag\",\n        DROP = \"drop\",\n        DRAGEND = \"dragend\",\n        DATABOUND = \"dataBound\",\n        CLICK = \"click\",\n        VISIBILITY = \"visibility\",\n        UNDEFINED = \"undefined\",\n        KSTATEHOVER = \"k-state-hover\",\n        KTREEVIEW = \"k-treeview\",\n        VISIBLE = \":visible\",\n        NODE = \".k-item\",\n        STRING = \"string\",\n        ARIASELECTED = \"aria-selected\",\n        ARIADISABLED = \"aria-disabled\",\n        TreeView,\n        subGroup, nodeContents, nodeIcon,\n        spriteRe,\n        bindings = {\n            text: \"dataTextField\",\n            url: \"dataUrlField\",\n            spriteCssClass: \"dataSpriteCssClassField\",\n            imageUrl: \"dataImageUrlField\"\n        },\n        isDomElement = function (o){\n            return (\n                typeof HTMLElement === \"object\" ? o instanceof HTMLElement : //DOM2\n                o && typeof o === \"object\" && o.nodeType === 1 && typeof o.nodeName === STRING\n            );\n        };\n\n    function contentChild(filter) {\n        return function(node) {\n            var result = node.children(\".k-animation-container\");\n\n            if (!result.length) {\n                result = node;\n            }\n\n            return result.children(filter);\n        };\n    }\n\n    function templateNoWith(code) {\n        return kendo.template(code, { useWithBlock: false });\n    }\n\n    subGroup = contentChild(\".k-group\");\n    nodeContents = contentChild(\".k-group,.k-content\");\n    nodeIcon = function(node) {\n        return node.children(\"div\").children(\".k-icon\");\n    };\n\n    function checkboxes(node) {\n        return node.find(\"> div .k-checkbox [type=checkbox]\");\n    }\n\n    function insertAction(indexOffset) {\n        return function (nodeData, referenceNode) {\n            referenceNode = referenceNode.closest(NODE);\n\n            var group = referenceNode.parent(),\n                parentNode;\n\n            if (group.parent().is(\"li\")) {\n                parentNode = group.parent();\n            }\n\n            return this._dataSourceMove(nodeData, group, parentNode, function (dataSource, model) {\n                return this._insert(dataSource.data(), model, referenceNode.index() + indexOffset);\n            });\n        };\n    }\n\n    spriteRe = /k-sprite/;\n\n    function moveContents(node, container) {\n        var tmp;\n\n        while (node && node.nodeName.toLowerCase() != \"ul\") {\n            tmp = node;\n            node = node.nextSibling;\n\n            if (tmp.nodeType == 3) {\n                tmp.nodeValue = $.trim(tmp.nodeValue);\n            }\n\n            if (spriteRe.test(tmp.className)) {\n                container.insertBefore(tmp, container.firstChild);\n            } else {\n                container.appendChild(tmp);\n            }\n        }\n    }\n\n    function updateNodeHtml(node) {\n        var wrapper = node.children(\"div\"),\n            group = node.children(\"ul\"),\n            toggleButton = wrapper.children(\".k-icon\"),\n            checkbox = node.children(\":checkbox\"),\n            innerWrapper = wrapper.children(\".k-in\");\n\n        if (node.hasClass(\"k-treeview\")) {\n            return;\n        }\n\n        if (!wrapper.length) {\n            wrapper = $(\"<div />\").prependTo(node);\n        }\n\n        if (!toggleButton.length && group.length) {\n            toggleButton = $(\"<span class='k-icon' />\").prependTo(wrapper);\n        } else if (!group.length || !group.children().length) {\n            toggleButton.remove();\n            group.remove();\n        }\n\n        if (checkbox.length) {\n            $(\"<span class='k-checkbox' />\").appendTo(wrapper).append(checkbox);\n        }\n\n        if (!innerWrapper.length) {\n            innerWrapper = node.children(\"a\").eq(0).addClass(\"k-in\");\n\n            if (!innerWrapper.length) {\n                innerWrapper = $(\"<span class='k-in' />\");\n            }\n\n            innerWrapper.appendTo(wrapper);\n\n            if (wrapper.length) {\n                moveContents(wrapper[0].nextSibling, innerWrapper[0]);\n            }\n        }\n    }\n\n    TreeView = kendo.ui.DataBoundWidget.extend({\n        init: function (element, options) {\n            var that = this,\n                dataInit,\n                inferred = false,\n                hasDataSource = options && !!options.dataSource,\n                list;\n\n            if (isArray(options)) {\n                dataInit = true;\n                options = { dataSource: options };\n            }\n\n            if (options && typeof options.loadOnDemand == UNDEFINED && isArray(options.dataSource)) {\n                options.loadOnDemand = false;\n            }\n\n            Widget.prototype.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            list = (element.is(\"ul\") && element) ||\n                   (element.hasClass(KTREEVIEW) && element.children(\"ul\"));\n\n            inferred = !hasDataSource && list.length;\n\n            if (inferred) {\n                options.dataSource.list = list;\n            }\n\n            that._animation();\n\n            that._accessors();\n\n            that._templates();\n\n            // render treeview if it's not already rendered\n            if (!element.hasClass(KTREEVIEW)) {\n                that._wrapper();\n\n                if (list) {\n                    that.root = element;\n                    that._group(that.wrapper);\n                }\n            } else {\n                // otherwise just initialize properties\n                that.wrapper = element;\n                that.root = element.children(\"ul\").eq(0);\n            }\n\n            that._tabindex();\n\n            that.root.attr(\"role\", \"tree\");\n\n            that._dataSource(inferred);\n\n            that._attachEvents();\n\n            that._dragging();\n\n            if (!inferred) {\n                if (options.autoBind) {\n                    that._progress(true);\n                    that.dataSource.fetch();\n                }\n            } else {\n                that._syncHtmlAndDataSource();\n            }\n\n            if (options.checkboxes && options.checkboxes.checkChildren) {\n                that.updateIndeterminate();\n            }\n\n            if (that.element[0].id) {\n                that._ariaId = kendo.format(\"{0}_tv_active\", that.element[0].id);\n            }\n\n            kendo.notify(that);\n        },\n\n        _attachEvents: function() {\n            var that = this,\n                clickableItems = \".k-in:not(.k-state-selected,.k-state-disabled)\",\n                MOUSEENTER = \"mouseenter\";\n\n            that.wrapper\n                .on(MOUSEENTER + NS, \".k-in.k-state-selected\", function(e) { e.preventDefault(); })\n                .on(MOUSEENTER + NS, clickableItems, function () { $(this).addClass(KSTATEHOVER); })\n                .on(\"mouseleave\" + NS, clickableItems, function () { $(this).removeClass(KSTATEHOVER); })\n                .on(CLICK + NS, clickableItems, proxy(that._click, that))\n                .on(\"dblclick\" + NS, \".k-in:not(.k-state-disabled)\", proxy(that._toggleButtonClick, that))\n                .on(CLICK + NS, \".k-plus,.k-minus\", proxy(that._toggleButtonClick, that))\n                .on(\"keydown\" + NS, proxy(that._keydown, that))\n                .on(\"focus\" + NS, proxy(that._focus, that))\n                .on(\"blur\" + NS, proxy(that._blur, that))\n                .on(\"mousedown\" + NS, \".k-in,.k-checkbox :checkbox,.k-plus,.k-minus\", proxy(that._mousedown, that))\n                .on(\"change\" + NS, \".k-checkbox :checkbox\", proxy(that._checkboxChange, that))\n                .on(\"click\" + NS, \".k-checkbox :checkbox\", proxy(that._checkboxClick, that))\n                .on(\"click\" + NS, \".k-request-retry\", proxy(that._retryRequest, that))\n                .on(\"click\" + NS, function(e) {\n                    if (!$(e.target).is(\":kendoFocusable\")) {\n                        that.focus();\n                    }\n                });\n        },\n\n        _checkboxClick: function(e) {\n            var checkbox = $(e.target);\n\n            if (checkbox.data(INDETERMINATE)) {\n                checkbox\n                    .data(INDETERMINATE, false)\n                    .prop(INDETERMINATE, false)\n                    .prop(CHECKED, true);\n\n                this._checkboxChange(e);\n            }\n        },\n\n        _syncHtmlAndDataSource: function(root, dataSource) {\n            root = root || this.root;\n            dataSource = dataSource || this.dataSource;\n\n            var data = dataSource.view();\n            var uidAttr = kendo.attr(\"uid\");\n            var expandedAttr = kendo.attr(\"expanded\");\n            var inferCheckedState = this.options.checkboxes;\n            var items = root.children(\"li\");\n            var i, item, dataItem;\n\n            for (i = 0; i < items.length; i++) {\n                dataItem = data[i];\n\n                item = items.eq(i);\n\n                item.attr(\"role\", \"treeitem\").attr(uidAttr, dataItem.uid);\n\n                dataItem.expanded = item.attr(expandedAttr) === \"true\";\n                if (inferCheckedState) {\n                    dataItem.checked = checkboxes(item).prop(CHECKED);\n                }\n\n                this._syncHtmlAndDataSource(item.children(\"ul\"), dataItem.children);\n            }\n        },\n\n        _animation: function() {\n            var options = this.options,\n                animationOptions = options.animation;\n\n            if (animationOptions === false) {\n                animationOptions = {\n                    expand: { effects: {} },\n                    collapse: { hide: true, effects: {} }\n                };\n            } else if (!animationOptions.collapse || !(\"effects\" in animationOptions.collapse)) {\n                animationOptions.collapse = extend({ reverse: true }, animationOptions.expand);\n            }\n\n            extend(animationOptions.collapse, { hide: true });\n\n            options.animation = animationOptions;\n        },\n\n        _dragging: function() {\n            var enabled = this.options.dragAndDrop;\n            var dragging = this.dragging;\n\n            if (enabled && !dragging) {\n                this.dragging = new TreeViewDragAndDrop(this);\n            } else if (!enabled && dragging) {\n                dragging.destroy();\n                this.dragging = null;\n            }\n        },\n\n        _templates: function() {\n            var that = this,\n                options = that.options,\n                fieldAccessor = proxy(that._fieldAccessor, that);\n\n            if (options.template && typeof options.template == STRING) {\n                options.template = template(options.template);\n            } else if (!options.template) {\n                options.template = templateNoWith(\n                    \"# var text = \" + fieldAccessor(\"text\") + \"(data.item); #\" +\n                    \"# if (typeof data.item.encoded != 'undefined' && data.item.encoded === false) {#\" +\n                        \"#= text #\" +\n                    \"# } else { #\" +\n                        \"#: text #\" +\n                    \"# } #\"\n                );\n            }\n\n            that._checkboxes();\n\n            that.templates = {\n                wrapperCssClass: function (group, item) {\n                    var result = \"k-item\",\n                        index = item.index;\n\n                    if (group.firstLevel && index === 0) {\n                        result += \" k-first\";\n                    }\n\n                    if (index == group.length-1) {\n                        result += \" k-last\";\n                    }\n\n                    return result;\n                },\n                cssClass: function(group, item) {\n                    var result = \"\",\n                        index = item.index,\n                        groupLength = group.length - 1;\n\n                    if (group.firstLevel && index === 0) {\n                        result += \"k-top \";\n                    }\n\n                    if (index === 0 && index != groupLength) {\n                        result += \"k-top\";\n                    } else if (index == groupLength) {\n                        result += \"k-bot\";\n                    } else {\n                        result += \"k-mid\";\n                    }\n\n                    return result;\n                },\n                textClass: function(item) {\n                    var result = \"k-in\";\n\n                    if (item.enabled === false) {\n                        result += \" k-state-disabled\";\n                    }\n\n                    if (item.selected === true) {\n                        result += \" k-state-selected\";\n                    }\n\n                    return result;\n                },\n                toggleButtonClass: function(item) {\n                    var result = \"k-icon\";\n\n                    if (item.expanded !== true) {\n                        result += \" k-plus\";\n                    } else {\n                        result += \" k-minus\";\n                    }\n\n                    if (item.enabled === false) {\n                        result += \"-disabled\";\n                    }\n\n                    return result;\n                },\n                groupAttributes: function(group) {\n                    var attributes = \"\";\n\n                    if (!group.firstLevel) {\n                        attributes = \"role='group'\";\n                    }\n\n                    return attributes + (group.expanded !== true ? \" style='display:none'\" : \"\");\n                },\n                groupCssClass: function(group) {\n                    var cssClass = \"k-group\";\n\n                    if (group.firstLevel) {\n                        cssClass += \" k-treeview-lines\";\n                    }\n\n                    return cssClass;\n                },\n                dragClue: templateNoWith(\n                    \"<div class='k-header k-drag-clue'>\" +\n                        \"<span class='k-icon k-drag-status' />\" +\n                        \"#= data.treeview.template(data) #\" +\n                    \"</div>\"\n                ),\n                group: templateNoWith(\n                    \"<ul class='#= data.r.groupCssClass(data.group) #'#= data.r.groupAttributes(data.group) #>\" +\n                        \"#= data.renderItems(data) #\" +\n                    \"</ul>\"\n                ),\n                itemContent: templateNoWith(\n                    \"# var imageUrl = \" + fieldAccessor(\"imageUrl\") + \"(data.item); #\" +\n                    \"# var spriteCssClass = \" + fieldAccessor(\"spriteCssClass\") + \"(data.item); #\" +\n                    \"# if (imageUrl) { #\" +\n                        \"<img class='k-image' alt='' src='#= imageUrl #'>\" +\n                    \"# } #\" +\n\n                    \"# if (spriteCssClass) { #\" +\n                        \"<span class='k-sprite #= spriteCssClass #' />\" +\n                    \"# } #\" +\n\n                    \"#= data.treeview.template(data) #\"\n                ),\n                itemElement: templateNoWith(\n                    \"# var item = data.item, r = data.r; #\" +\n                    \"# var url = \" + fieldAccessor(\"url\") + \"(item); #\" +\n                    \"<div class='#= r.cssClass(data.group, item) #'>\" +\n                        \"# if (item.hasChildren) { #\" +\n                            \"<span class='#= r.toggleButtonClass(item) #' role='presentation' />\" +\n                        \"# } #\" +\n\n                        \"# if (data.treeview.checkboxes) { #\" +\n                            \"<span class='k-checkbox' role='presentation'>\" +\n                                \"#= data.treeview.checkboxes.template(data) #\" +\n                            \"</span>\" +\n                        \"# } #\" +\n\n                        \"# var tag = url ? 'a' : 'span'; #\" +\n                        \"# var textAttr = url ? ' href=\\\\'' + url + '\\\\'' : ''; #\" +\n\n                        \"<#=tag#  class='#= r.textClass(item) #'#= textAttr #>\" +\n                            \"#= r.itemContent(data) #\" +\n                        \"</#=tag#>\" +\n                    \"</div>\"\n                ),\n                item: templateNoWith(\n                    \"# var item = data.item, r = data.r; #\" +\n                    \"<li role='treeitem' class='#= r.wrapperCssClass(data.group, item) #' \" +\n                        kendo.attr(\"uid\") + \"='#= item.uid #' \" +\n                        \"aria-selected='#= item.selected ? \\\"true\\\" : \\\"false \\\" #' \" +\n                        \"#=item.enabled === false ? \\\"aria-disabled='true'\\\" : ''#\" +\n                        \"# if (item.expanded) { #\" +\n                        \"data-expanded='true' aria-expanded='true'\" +\n                        \"# } #\" +\n                    \">\" +\n                        \"#= r.itemElement(data) #\" +\n                    \"</li>\"\n                ),\n                loading: templateNoWith(\n                    \"<div class='k-icon k-loading' /> #: data.messages.loading #\"\n                ),\n                retry: templateNoWith(\n                    \"#: data.messages.requestFailed # \" +\n                    \"<button class='k-button k-request-retry'>#: data.messages.retry #</button>\"\n                )\n            };\n        },\n\n        items: function() {\n            return this.element.find(\".k-item > div:first-child\");\n        },\n\n        setDataSource: function(dataSource) {\n            var options = this.options;\n\n            options.dataSource = dataSource;\n\n            this._dataSource();\n\n            this.dataSource.fetch();\n\n            if (options.checkboxes && options.checkboxes.checkChildren) {\n                this.updateIndeterminate();\n            }\n        },\n\n        _bindDataSource: function() {\n            this._refreshHandler = proxy(this.refresh, this);\n            this._errorHandler = proxy(this._error, this);\n\n            this.dataSource.bind(CHANGE, this._refreshHandler);\n            this.dataSource.bind(ERROR, this._errorHandler);\n        },\n\n        _unbindDataSource: function() {\n            var dataSource = this.dataSource;\n\n            if (dataSource) {\n                dataSource.unbind(CHANGE, this._refreshHandler);\n                dataSource.unbind(ERROR, this._errorHandler);\n            }\n        },\n\n        _dataSource: function(silentRead) {\n            var that = this,\n                options = that.options,\n                dataSource = options.dataSource;\n\n            function recursiveRead(data) {\n                for (var i = 0; i < data.length; i++) {\n                    data[i]._initChildren();\n\n                    data[i].children.fetch();\n\n                    recursiveRead(data[i].children.view());\n                }\n            }\n\n            dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n            that._unbindDataSource();\n\n            if (!dataSource.fields) {\n                dataSource.fields = [\n                    { field: \"text\" },\n                    { field: \"url\" },\n                    { field: \"spriteCssClass\" },\n                    { field: \"imageUrl\" }\n                ];\n            }\n\n            that.dataSource = dataSource = HierarchicalDataSource.create(dataSource);\n\n            if (silentRead) {\n                dataSource.fetch();\n\n                recursiveRead(dataSource.view());\n            }\n\n            that._bindDataSource();\n        },\n\n        events: [\n            DRAGSTART,\n            DRAG,\n            DROP,\n            DRAGEND,\n\n            DATABOUND,\n\n            EXPAND,\n            COLLAPSE,\n            SELECT,\n            CHANGE,\n            NAVIGATE,\n            CHECK\n        ],\n\n        options: {\n            name: \"TreeView\",\n            dataSource: {},\n            animation: {\n                expand: {\n                    effects: \"expand:vertical\",\n                    duration: 200\n                }, collapse: {\n                    duration: 100\n                }\n            },\n            messages: {\n                loading: \"Loading...\",\n                requestFailed: \"Request failed.\",\n                retry: \"Retry\"\n            },\n            dragAndDrop: false,\n            checkboxes: false,\n            autoBind: true,\n            loadOnDemand: true,\n            template: \"\",\n            dataTextField: null\n        },\n\n        _accessors: function() {\n            var that = this,\n                options = that.options,\n                i, field, textField,\n                element = that.element;\n\n            for (i in bindings) {\n                field = options[bindings[i]];\n                textField = element.attr(kendo.attr(i + \"-field\"));\n\n                if (!field && textField) {\n                    field = textField;\n                }\n\n                if (!field) {\n                    field = i;\n                }\n\n                if (!isArray(field)) {\n                    field = [field];\n                }\n\n                options[bindings[i]] = field;\n            }\n        },\n\n        // generates accessor function for a given field name, honoring the data*Field arrays\n        _fieldAccessor: function(fieldName) {\n            var fieldBindings = this.options[bindings[fieldName]],\n                count = fieldBindings.length,\n                result = \"(function(item) {\";\n\n            if (count === 0) {\n                result += \"return item['\" + fieldName + \"'];\";\n            } else {\n                result += \"var levels = [\" +\n                            $.map(fieldBindings, function(x) {\n                                return \"function(d){ return \" + kendo.expr(x) + \"}\";\n                            }).join(\",\") + \"];\";\n\n                result += \"return levels[Math.min(item.level(), \" + count + \"-1)](item)\";\n            }\n\n            result += \"})\";\n\n            return result;\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n\n            this._animation();\n\n            this._dragging();\n\n            this._templates();\n        },\n\n        _trigger: function (eventName, node) {\n            return this.trigger(eventName, {\n                node: node.closest(NODE)[0]\n            });\n        },\n\n        _setChecked: function(datasource, value) {\n            if (!datasource || !$.isFunction(datasource.view)) {\n                return;\n            }\n\n            for (var i = 0, nodes = datasource.view(); i < nodes.length; i++) {\n                nodes[i][CHECKED] = value;\n\n                if (nodes[i].children) {\n                    this._setChecked(nodes[i].children, value);\n                }\n            }\n        },\n\n        _setIndeterminate: function(node) {\n            var group = subGroup(node),\n                siblings, length,\n                all = true,\n                i;\n\n            if (!group.length) {\n                return;\n            }\n\n            siblings = checkboxes(group.children());\n            length = siblings.length;\n\n            if (!length) {\n                return;\n            } else if (length > 1) {\n                for (i = 1; i < length; i++) {\n                    if (siblings[i].checked != siblings[i-1].checked ||\n                        siblings[i].indeterminate || siblings[i-1].indeterminate) {\n                        all = false;\n                        break;\n                    }\n                }\n            } else {\n                all = !siblings[0].indeterminate;\n            }\n\n            return checkboxes(node)\n                .data(INDETERMINATE, !all)\n                .prop(INDETERMINATE, !all)\n                .prop(CHECKED, all && siblings[0].checked);\n        },\n\n        updateIndeterminate: function(node) {\n            // top-down update of inital indeterminate state for all nodes\n            node = node || this.wrapper;\n\n            var subnodes = subGroup(node).children();\n            var i;\n            var checkbox;\n\n            if (subnodes.length) {\n                for (i = 0; i < subnodes.length; i++) {\n                    this.updateIndeterminate(subnodes.eq(i));\n                }\n\n                checkbox = this._setIndeterminate(node);\n\n                if (checkbox && checkbox.prop(CHECKED)) {\n                    this.dataItem(node).checked = true;\n                }\n            }\n        },\n\n        _bubbleIndeterminate: function(node) {\n            // bottom-up setting of indeterminate state of parent nodes\n            if (!node.length) {\n                return;\n            }\n\n            var parentNode = this.parent(node),\n                checkbox;\n\n            if (parentNode.length) {\n                this._setIndeterminate(parentNode);\n                checkbox = parentNode.children(\"div\").find(\".k-checkbox :checkbox\");\n\n                if (checkbox.prop(INDETERMINATE) === false) {\n                    this.dataItem(parentNode).set(CHECKED, checkbox.prop(CHECKED));\n                } else {\n                    this.dataItem(parentNode).checked = false;\n                }\n\n                this._bubbleIndeterminate(parentNode);\n            }\n        },\n\n        _checkboxChange: function(e) {\n            var checkbox = $(e.target);\n            var isChecked = checkbox.prop(CHECKED);\n            var node = checkbox.closest(NODE);\n\n            this.dataItem(node).set(CHECKED, isChecked);\n\n            this._trigger(CHECK, node);\n        },\n\n        _toggleButtonClick: function (e) {\n            this.toggle($(e.target).closest(NODE));\n        },\n\n        _mousedown: function(e) {\n            var node = $(e.currentTarget).closest(NODE);\n\n            this._clickTarget = node;\n            this.current(node);\n        },\n\n        _focusable: function (node) {\n            return node && node.length && node.is(\":visible\") && !node.find(\".k-in:first\").hasClass(\"k-state-disabled\");\n        },\n\n        _focus: function() {\n            var current = this.select(),\n                clickTarget = this._clickTarget;\n\n            // suppress initial focus state on touch devices (until keyboard is used)\n            if (kendo.support.touch) {\n                return;\n            }\n\n            if (clickTarget && clickTarget.length) {\n                current = clickTarget;\n            }\n\n            if (!this._focusable(current)) {\n                current = this.current();\n            }\n\n            if (!this._focusable(current)) {\n                current = this._nextVisible($());\n            }\n\n            this.current(current);\n        },\n\n        focus: function() {\n            var wrapper = this.wrapper,\n                scrollContainer = wrapper[0],\n                containers = [],\n                offsets = [],\n                documentElement = document.documentElement,\n                i;\n\n            do {\n                scrollContainer = scrollContainer.parentNode;\n\n                if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n                    containers.push(scrollContainer);\n                    offsets.push(scrollContainer.scrollTop);\n                }\n            } while (scrollContainer != documentElement);\n\n            wrapper.focus();\n\n            for (i = 0; i < containers.length; i++) {\n                containers[i].scrollTop = offsets[i];\n            }\n        },\n\n        _blur: function() {\n            this.current().find(\".k-in:first\").removeClass(\"k-state-focused\");\n        },\n\n        _enabled: function(node) {\n            return !node.children(\"div\").children(\".k-in\").hasClass(\"k-state-disabled\");\n        },\n\n        parent: function(node) {\n            var wrapperRe = /\\bk-treeview\\b/,\n                itemRe = /\\bk-item\\b/,\n                result,\n                skipSelf;\n\n            if (typeof node == STRING) {\n                node = this.element.find(node);\n            }\n\n            if (!isDomElement(node)) {\n                node = node[0];\n            }\n\n            skipSelf = itemRe.test(node.className);\n\n            do {\n                node = node.parentNode;\n\n                if (itemRe.test(node.className)) {\n                    if (skipSelf) {\n                        result = node;\n                    } else {\n                        skipSelf = true;\n                    }\n                }\n            } while (!wrapperRe.test(node.className) && !result);\n\n            return $(result);\n        },\n\n        _nextVisible: function(node) {\n            var that = this,\n                expanded = that._expanded(node),\n                result;\n\n            function nextParent(node) {\n                while (node.length && !node.next().length) {\n                    node = that.parent(node);\n                }\n\n                if (node.next().length) {\n                    return node.next();\n                } else {\n                    return node;\n                }\n            }\n\n            if (!node.length || !node.is(\":visible\")) {\n                result = that.root.children().eq(0);\n            } else if (expanded) {\n                result = subGroup(node).children().first();\n\n                // expanded node with no children\n                if (!result.length) {\n                    result = nextParent(node);\n                }\n            } else {\n                result = nextParent(node);\n            }\n\n            if (!that._enabled(result)) {\n                result = that._nextVisible(result);\n            }\n\n            return result;\n        },\n\n        _previousVisible: function(node) {\n            var that = this,\n                lastChild,\n                result;\n\n            if (!node.length || node.prev().length) {\n                if (node.length) {\n                    result = node.prev();\n                } else {\n                    result = that.root.children().last();\n                }\n\n                while (that._expanded(result)) {\n                    lastChild = subGroup(result).children().last();\n\n                    if (!lastChild.length) {\n                        break;\n                    }\n\n                    result = lastChild;\n                }\n            } else {\n                result = that.parent(node) || node;\n            }\n\n            if (!that._enabled(result)) {\n                result = that._previousVisible(result);\n            }\n\n            return result;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                target,\n                focused = that.current(),\n                expanded = that._expanded(focused),\n                checkbox = focused.find(\".k-checkbox:first :checkbox\"),\n                rtl = kendo.support.isRtl(that.element);\n\n            if (e.target != e.currentTarget) {\n                return;\n            }\n\n            if ((!rtl && key == keys.RIGHT) || (rtl && key == keys.LEFT)) {\n                if (expanded) {\n                    target = that._nextVisible(focused);\n                } else {\n                    that.expand(focused);\n                }\n            } else if ((!rtl && key == keys.LEFT) || (rtl && key == keys.RIGHT)) {\n                if (expanded) {\n                    that.collapse(focused);\n                } else {\n                    target = that.parent(focused);\n\n                    if (!that._enabled(target)) {\n                        target = undefined;\n                    }\n                }\n            } else if (key == keys.DOWN) {\n                target = that._nextVisible(focused);\n            } else if (key == keys.UP) {\n                target = that._previousVisible(focused);\n            } else if (key == keys.HOME) {\n                target = that._nextVisible($());\n            } else if (key == keys.END) {\n                target = that._previousVisible($());\n            } else if (key == keys.ENTER) {\n                if (!focused.find(\".k-in:first\").hasClass(\"k-state-selected\")) {\n                    if (!that._trigger(SELECT, focused)) {\n                        that.select(focused);\n                    }\n                }\n            } else if (key == keys.SPACEBAR && checkbox.length) {\n                checkbox.prop(CHECKED, !checkbox.prop(CHECKED))\n                    .data(INDETERMINATE, false)\n                    .prop(INDETERMINATE, false);\n\n                that._checkboxChange({ target: checkbox });\n\n                target = focused;\n            }\n\n            if (target) {\n                e.preventDefault();\n\n                if (focused[0] != target[0]) {\n                    that._trigger(NAVIGATE, target);\n                    that.current(target);\n                }\n            }\n        },\n\n        _click: function (e) {\n            var that = this,\n                node = $(e.currentTarget),\n                contents = nodeContents(node.closest(NODE)),\n                href = node.attr(\"href\"),\n                shouldNavigate;\n\n            if (href) {\n                shouldNavigate = href == \"#\" || href.indexOf(\"#\" + this.element.id + \"-\") >= 0;\n            } else {\n                shouldNavigate = contents.length && !contents.children().length;\n            }\n\n            if (shouldNavigate) {\n                e.preventDefault();\n            }\n\n            if (!node.hasClass(\".k-state-selected\") && !that._trigger(SELECT, node)) {\n                that.select(node);\n            }\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                wrapper, root,\n                wrapperClasses = \"k-widget k-treeview\";\n\n            if (element.is(\"ul\")) {\n                wrapper = element.wrap('<div />').parent();\n                root = element;\n            } else {\n                wrapper = element;\n                root = wrapper.children(\"ul\").eq(0);\n            }\n\n            that.wrapper = wrapper.addClass(wrapperClasses);\n            that.root = root;\n        },\n\n        _group: function(item) {\n            var that = this,\n                firstLevel = item.hasClass(KTREEVIEW),\n                group = {\n                    firstLevel: firstLevel,\n                    expanded: firstLevel || that._expanded(item)\n                },\n                groupElement = item.children(\"ul\");\n\n            groupElement\n                .addClass(that.templates.groupCssClass(group))\n                .css(\"display\", group.expanded ? \"\" : \"none\");\n\n            that._nodes(groupElement, group);\n        },\n\n        _nodes: function(groupElement, groupData) {\n            var that = this,\n                nodes = groupElement.children(\"li\"),\n                nodeData;\n\n            groupData = extend({ length: nodes.length }, groupData);\n\n            nodes.each(function(i, node) {\n                node = $(node);\n\n                nodeData = { index: i, expanded: that._expanded(node) };\n\n                updateNodeHtml(node);\n\n                that._updateNodeClasses(node, groupData, nodeData);\n\n                // iterate over child nodes\n                that._group(node);\n            });\n        },\n\n        _checkboxes: function() {\n            var options = this.options;\n            var checkboxes = options.checkboxes;\n            var defaultTemplate;\n\n            if (checkboxes) {\n                defaultTemplate = \"<input type='checkbox' #= (item.enabled === false) ? 'disabled' : '' # #= item.checked ? 'checked' : '' #\";\n\n                if (checkboxes.name) {\n                    defaultTemplate += \" name='\" + checkboxes.name + \"'\";\n                }\n\n                defaultTemplate += \" />\";\n\n                checkboxes = extend({\n                    template: defaultTemplate\n                }, options.checkboxes);\n\n                if (typeof checkboxes.template == STRING) {\n                    checkboxes.template = template(checkboxes.template);\n                }\n\n                options.checkboxes = checkboxes;\n            }\n        },\n\n        _updateNodeClasses: function (node, groupData, nodeData) {\n            var wrapper = node.children(\"div\"),\n                group = node.children(\"ul\"),\n                templates = this.templates;\n\n            if (node.hasClass(\"k-treeview\")) {\n                return;\n            }\n\n            nodeData = nodeData || {};\n            nodeData.expanded = typeof nodeData.expanded != UNDEFINED ? nodeData.expanded : this._expanded(node);\n            nodeData.index = typeof nodeData.index != UNDEFINED ? nodeData.index : node.index();\n            nodeData.enabled = typeof nodeData.enabled != UNDEFINED ? nodeData.enabled : !wrapper.children(\".k-in\").hasClass(\"k-state-disabled\");\n\n            groupData = groupData || {};\n            groupData.firstLevel = typeof groupData.firstLevel != UNDEFINED ? groupData.firstLevel : node.parent().parent().hasClass(KTREEVIEW);\n            groupData.length = typeof groupData.length != UNDEFINED ? groupData.length : node.parent().children().length;\n\n            // li\n            node.removeClass(\"k-first k-last\")\n                .addClass(templates.wrapperCssClass(groupData, nodeData));\n\n            // div\n            wrapper.removeClass(\"k-top k-mid k-bot\")\n                   .addClass(templates.cssClass(groupData, nodeData));\n\n            // span\n            wrapper.children(\".k-in\").removeClass(\"k-in k-state-default k-state-disabled\")\n                .addClass(templates.textClass(nodeData));\n\n            // toggle button\n            if (group.length || node.attr(\"data-hasChildren\") == \"true\") {\n                wrapper.children(\".k-icon\").removeClass(\"k-plus k-minus k-plus-disabled k-minus-disabled\")\n                    .addClass(templates.toggleButtonClass(nodeData));\n\n                group.addClass(\"k-group\");\n            }\n        },\n\n\n        _processNodes: function(nodes, callback) {\n            var that = this;\n            that.element.find(nodes).each(function(index, item) {\n                callback.call(that, index, $(item).closest(NODE));\n            });\n        },\n\n        dataItem: function(node) {\n            var uid = $(node).closest(NODE).attr(kendo.attr(\"uid\")),\n                dataSource = this.dataSource;\n\n            return dataSource && dataSource.getByUid(uid);\n        },\n\n        _insertNode: function(nodeData, index, parentNode, insertCallback, collapsed) {\n            var that = this,\n                group = subGroup(parentNode),\n                updatedGroupLength = group.children().length + 1,\n                childrenData,\n                groupData = {\n                    firstLevel: parentNode.hasClass(KTREEVIEW),\n                    expanded: !collapsed,\n                    length: updatedGroupLength\n                }, node, i, item, nodeHtml = \"\",\n                append = function(item, group) {\n                    item.appendTo(group);\n                };\n\n            for (i = 0; i < nodeData.length; i++) {\n                item = nodeData[i];\n\n                item.index = index + i;\n\n                nodeHtml += that._renderItem({\n                    group: groupData,\n                    item: item\n                });\n            }\n\n            node = $(nodeHtml);\n\n            if (!node.length) {\n                return;\n            }\n\n            that.angular(\"compile\", function(){\n                return {\n                    elements: node.get(),\n                    data: nodeData.map(function(item){\n                        return { dataItem: item };\n                    })\n                };\n            });\n\n            if (!group.length) {\n                group = $(that._renderGroup({\n                    group: groupData\n                })).appendTo(parentNode);\n            }\n\n            insertCallback(node, group);\n\n            if (parentNode.hasClass(\"k-item\")) {\n                updateNodeHtml(parentNode);\n                that._updateNodeClasses(parentNode);\n            }\n\n            that._updateNodeClasses(node.prev().first());\n            that._updateNodeClasses(node.next().last());\n\n            // render sub-nodes\n            for (i = 0; i < nodeData.length; i++) {\n                item = nodeData[i];\n\n                if (item.hasChildren) {\n                    childrenData = item.children.data();\n\n                    if (childrenData.length) {\n                        that._insertNode(childrenData, item.index, node.eq(i), append, !that._expanded(node.eq(i)));\n                    }\n                }\n            }\n\n            return node;\n        },\n\n        _updateNodes: function(items, field) {\n            var that = this;\n            var i, node, item, isChecked, isCollapsed;\n            var context = { treeview: that.options, item: item };\n\n            function setCheckedState(root, state) {\n                root.find(\".k-checkbox :checkbox\")\n                    .prop(CHECKED, state)\n                    .data(INDETERMINATE, false)\n                    .prop(INDETERMINATE, false);\n            }\n\n            if (field == \"selected\") {\n                item = items[0];\n\n                node = that.findByUid(item.uid).find(\".k-in:first\")\n                        .removeClass(\"k-state-hover\")\n                        .toggleClass(\"k-state-selected\", item[field])\n                        .end();\n\n                if (item[field]) {\n                    that.current(node);\n                }\n\n                node.attr(ARIASELECTED, !!item[field]);\n            } else {\n                var elements = $.map(items, function(item) {\n                    return that.findByUid(item.uid).children(\"div\");\n                });\n\n                that.angular(\"cleanup\", function() { return { elements: elements }; });\n\n                for (i = 0; i < items.length; i++) {\n                    context.item = item = items[i];\n                    node = elements[i].parent();\n\n                    node.find(\">div>.k-in\").html(that.templates.itemContent(context));\n\n                    if (field == CHECKED) {\n                        isChecked = item[field];\n\n                        setCheckedState(node.children(\"div\"), isChecked);\n\n                        if (that.options.checkboxes.checkChildren) {\n                            setCheckedState(node.children(\".k-group\"), isChecked);\n\n                            that._setChecked(item.children, isChecked);\n\n                            that._bubbleIndeterminate(node);\n                        }\n                    } else if (field == \"expanded\") {\n                        that._toggle(node, item, item[field]);\n                    } else if (field == \"enabled\") {\n                        node.find(\".k-checkbox :checkbox\").prop(\"disabled\", !item[field]);\n\n                        isCollapsed = !nodeContents(node).is(VISIBLE);\n\n                        node.removeAttr(ARIADISABLED);\n\n                        if (!item[field]) {\n                            if (item.selected) {\n                                item.set(\"selected\", false);\n                            }\n\n                            if (item.expanded) {\n                                item.set(\"expanded\", false);\n                            }\n\n                            isCollapsed = true;\n                            node.attr(ARIASELECTED, false)\n                                .attr(ARIADISABLED, true);\n                        }\n\n                        that._updateNodeClasses(node, {}, { enabled: item[field], expanded: !isCollapsed });\n                    }\n                }\n\n                that.angular(\"compile\", function(){\n                    return {\n                        elements: elements,\n                        data: $.map(items, function(item) {\n                            return [{ dataItem: item }];\n                        })\n                    };\n                });\n            }\n        },\n\n        _appendItems: function(index, items, parentNode) {\n            var group = subGroup(parentNode);\n            var children = group.children();\n            var collapsed = !this._expanded(parentNode);\n\n            if (typeof index == UNDEFINED) {\n                index = children.length;\n            }\n\n            this._insertNode(items, index, parentNode, function(item, group) {\n                // insert node into DOM\n                if (index >= children.length) {\n                    item.appendTo(group);\n                } else {\n                    item.insertBefore(children.eq(index));\n                }\n            }, collapsed);\n\n            if (this._expanded(parentNode)) {\n                this._updateNodeClasses(parentNode);\n                subGroup(parentNode).css(\"display\", \"block\");\n            }\n        },\n\n        refresh: function(e) {\n            var parentNode = this.wrapper,\n                node = e.node,\n                action = e.action,\n                items = e.items,\n                options = this.options,\n                loadOnDemand = options.loadOnDemand,\n                checkChildren = options.checkboxes && options.checkboxes.checkChildren,\n                i;\n\n            if (e.field) {\n                if (!items[0] || !items[0].level) {\n                    return;\n                }\n\n                return this._updateNodes(items, e.field);\n            }\n\n            if (node) {\n                parentNode = this.findByUid(node.uid);\n                this._progress(parentNode, false);\n            }\n\n            if (checkChildren && action != \"remove\") {\n                var bubble = false;\n\n                for (i = 0; i < items.length; i++) {\n                    if (\"checked\" in items[i]) {\n                        bubble = true;\n                        break;\n                    }\n                }\n\n                if (!bubble && node && node.checked) {\n                    for (i = 0; i < items.length; i++) {\n                        items[i].checked = true;\n                    }\n                }\n            }\n\n            if (action == \"add\") {\n                this._appendItems(e.index, items, parentNode);\n            } else if (action == \"remove\") {\n                this._remove(this.findByUid(items[0].uid), false);\n            } else if (action == \"itemchange\") {\n                this._updateNodes(items);\n            } else {\n                if (node) {\n                    subGroup(parentNode).empty();\n\n                    if (!items.length) {\n                        updateNodeHtml(parentNode);\n\n                        this.trigger(\"itemChange\", { item: parentNode, data: node, ns: ui });\n                    } else {\n                        this._appendItems(e.index, items, parentNode);\n\n                        var children = subGroup(parentNode).children();\n\n                        if (loadOnDemand && checkChildren) {\n                            this._bubbleIndeterminate(children.last());\n                        }\n\n                        for (i = 0; i < children.length; i++) {\n                            var child = children.eq(i);\n                            this.trigger(\"itemChange\", { item: child, data: this.dataItem(child), ns: ui });\n                        }\n                    }\n                } else {\n\n                    var groupHtml = this._renderGroup({\n                            items: items,\n                            group: {\n                                firstLevel: true,\n                                expanded: true\n                            }\n                        });\n\n                    if (this.root.length) {\n\n                        this._angularItems(\"cleanup\");\n\n                        var group = $(groupHtml);\n\n                        this.root\n                            .attr(\"class\", group.attr(\"class\"))\n                            .html(group.html());\n                    } else {\n                        this.root = this.wrapper.html(groupHtml).children(\"ul\");\n                    }\n\n                    this.root.attr(\"role\", \"tree\");\n\n                    this._angularItems(\"compile\");\n                }\n            }\n\n            if (action != \"remove\") {\n                for (i = 0; i < items.length; i++) {\n                    if (!loadOnDemand || items[i].expanded) {\n                        items[i].load();\n                    }\n                }\n            }\n\n            this.trigger(DATABOUND, {\n                node: node ? parentNode : undefined\n            });\n        },\n\n        _error: function(e) {\n            var node = e.node && this.findByUid(e.node.uid);\n            var retryHtml = this.templates.retry({ messages: this.options.messages });\n\n            if (node) {\n                this._progress(node, false);\n                this._expanded(node, false);\n                nodeIcon(node).addClass(\"k-i-refresh\");\n                e.node.loaded(false);\n            } else {\n                this._progress(false);\n                this.element.html(retryHtml);\n            }\n        },\n\n        _retryRequest: function(e) {\n            e.preventDefault();\n\n            this.dataSource.fetch();\n        },\n\n        expand: function (nodes) {\n            this._processNodes(nodes, function (index, item) {\n                this.toggle(item, true);\n            });\n        },\n\n        collapse: function (nodes) {\n            this._processNodes(nodes, function (index, item) {\n                this.toggle(item, false);\n            });\n        },\n\n        enable: function (nodes, enable) {\n            enable = arguments.length == 2 ? !!enable : true;\n\n            this._processNodes(nodes, function (index, item) {\n                this.dataItem(item).set(\"enabled\", enable);\n            });\n        },\n\n        current: function(node) {\n            var that = this,\n                current = that._current,\n                element = that.element,\n                id = that._ariaId;\n\n            if (arguments.length > 0 && node && node.length) {\n                if (current) {\n                    if (current[0].id === id) {\n                        current.removeAttr(\"id\");\n                    }\n\n                    current.find(\".k-in:first\").removeClass(\"k-state-focused\");\n                }\n\n                current = that._current = $(node, element).closest(NODE);\n\n                current.find(\".k-in:first\").addClass(\"k-state-focused\");\n\n                id = current[0].id || id;\n\n                if (id) {\n                    that.wrapper.removeAttr(\"aria-activedescendant\");\n                    current.attr(\"id\", id);\n                    that.wrapper.attr(\"aria-activedescendant\", id);\n                }\n\n                return;\n            }\n\n            if (!current) {\n                current = that._nextVisible($());\n            }\n\n            return current;\n        },\n\n        select: function (node) {\n            var that = this,\n                element = that.element;\n\n            if (!arguments.length) {\n                return element.find(\".k-state-selected\").closest(NODE);\n            }\n\n            node = $(node, element).closest(NODE);\n\n            element.find(\".k-state-selected\").each(function() {\n                var dataItem = that.dataItem(this);\n                dataItem.set(\"selected\", false);\n                delete dataItem.selected;\n            });\n\n            if (node.length) {\n                that.dataItem(node).set(\"selected\", true);\n            }\n\n            that.trigger(CHANGE);\n        },\n\n        _toggle: function(node, dataItem, expand) {\n            var options = this.options;\n            var contents = nodeContents(node);\n            var direction = expand ? \"expand\" : \"collapse\";\n            var loaded, empty;\n\n            if (contents.data(\"animating\")) {\n                return;\n            }\n\n            if (!this._trigger(direction, node)) {\n                this._expanded(node, expand);\n\n                loaded = dataItem && dataItem.loaded();\n                empty = !contents.children().length;\n\n                if (expand && (!loaded || empty)) {\n                    if (options.loadOnDemand) {\n                        this._progress(node, true);\n                    }\n\n                    contents.remove();\n                    dataItem.load();\n                } else {\n                    this._updateNodeClasses(node, {}, { expanded: expand });\n\n                    if (contents.css(\"display\") == (expand ? \"block\" : \"none\")) {\n                        return;\n                    }\n\n                    if (!expand) {\n                        contents.css(\"height\", contents.height()).css(\"height\");\n                    }\n\n                    contents\n                        .kendoStop(true, true)\n                        .kendoAnimate(extend(\n                            { reset: true },\n                            options.animation[direction],\n                            { complete: function() {\n                                if (expand) {\n                                    contents.css(\"height\", \"\");\n                                }\n                            } }\n                        ));\n                }\n            }\n        },\n\n        toggle: function (node, expand) {\n            node = $(node);\n\n            if (!nodeIcon(node).is(\".k-minus,.k-plus,.k-minus-disabled,.k-plus-disabled\")) {\n                return;\n            }\n\n            if (arguments.length == 1) {\n                expand = !this._expanded(node);\n            }\n\n            this._expanded(node, expand);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.wrapper.off(NS);\n\n            that._unbindDataSource();\n\n            if (that.dragging) {\n                that.dragging.destroy();\n            }\n\n            kendo.destroy(that.element);\n\n            that.root = that.wrapper = that.element = null;\n        },\n\n        _expanded: function(node, value) {\n            var expandedAttr = kendo.attr(\"expanded\"),\n                dataItem = this.dataItem(node);\n\n            if (arguments.length == 1) {\n                return node.attr(expandedAttr) === \"true\" || (dataItem && dataItem.expanded);\n            }\n\n            if (nodeContents(node).data(\"animating\")) {\n                return;\n            }\n\n            if (dataItem) {\n                dataItem.set(\"expanded\", value);\n                // necessary when expanding an item yields an error and the item is not expanded as a result\n                value = dataItem.expanded;\n            }\n\n            if (value) {\n                node.attr(expandedAttr, \"true\");\n                node.attr(\"aria-expanded\", \"true\");\n            } else {\n                node.removeAttr(expandedAttr);\n                node.attr(\"aria-expanded\", \"false\");\n            }\n        },\n\n        _progress: function(node, showProgress) {\n            var element = this.element;\n            var loadingText = this.templates.loading({ messages: this.options.messages });\n\n            if (arguments.length == 1) {\n                showProgress = node;\n\n                if (showProgress) {\n                    element.html(loadingText);\n                } else {\n                    element.empty();\n                }\n            } else {\n                nodeIcon(node).toggleClass(\"k-loading\", showProgress).removeClass(\"k-i-refresh\");\n            }\n        },\n\n        text: function (node, text) {\n            var dataItem = this.dataItem(node),\n                fieldBindings = this.options[bindings.text],\n                level = dataItem.level(),\n                length = fieldBindings.length,\n                field = fieldBindings[Math.min(level, length-1)];\n\n            if (text) {\n                dataItem.set(field, text);\n            } else {\n                return dataItem[field];\n            }\n        },\n\n        _objectOrSelf: function (node) {\n            return $(node).closest(\"[data-role=treeview]\").data(\"kendoTreeView\") || this;\n        },\n\n        _dataSourceMove: function(nodeData, group, parentNode, callback) {\n            var referenceDataItem,\n                destTreeview = this._objectOrSelf(parentNode || group),\n                destDataSource = destTreeview.dataSource;\n            var loadPromise = $.Deferred().resolve().promise();\n\n            if (parentNode && parentNode[0] != destTreeview.element[0]) {\n                referenceDataItem = destTreeview.dataItem(parentNode);\n\n                if (!referenceDataItem.loaded()) {\n                    destTreeview._progress(parentNode, true);\n                    loadPromise = referenceDataItem.load();\n                }\n\n                if (parentNode != this.root) {\n                    destDataSource = referenceDataItem.children;\n\n                    if (!destDataSource || !(destDataSource instanceof HierarchicalDataSource)) {\n                        referenceDataItem._initChildren();\n                        referenceDataItem.loaded(true);\n                        destDataSource = referenceDataItem.children;\n                    }\n                }\n            }\n\n            nodeData = this._toObservableData(nodeData);\n\n            return callback.call(this, destDataSource, nodeData, loadPromise);\n        },\n\n        _toObservableData: function(node) {\n            var dataItem = node, dataSource, uid;\n\n            if (node instanceof window.jQuery || isDomElement(node)) {\n                dataSource = this._objectOrSelf(node).dataSource;\n                uid = $(node).attr(kendo.attr(\"uid\"));\n                dataItem = dataSource.getByUid(uid);\n\n                if (dataItem) {\n                    dataItem = dataSource.remove(dataItem);\n                }\n            }\n\n            return dataItem;\n        },\n\n        _insert: function(data, model, index) {\n            if (!(model instanceof kendo.data.ObservableArray)) {\n                if (!isArray(model)) {\n                    model = [model];\n                }\n            } else {\n                // items will be converted to new Node instances\n                model = model.toJSON();\n            }\n\n            var parentNode = data.parent();\n\n            if (parentNode && parentNode._initChildren) {\n                parentNode.hasChildren = true;\n                parentNode._initChildren();\n            }\n\n            data.splice.apply(data, [ index, 0 ].concat(model));\n\n            return this.findByUid(data[index].uid);\n        },\n\n        insertAfter: insertAction(1),\n\n        insertBefore: insertAction(0),\n\n        append: function (nodeData, parentNode, success) {\n            var that = this,\n                group = that.root;\n\n            if (parentNode) {\n                group = subGroup(parentNode);\n            }\n\n            return that._dataSourceMove(nodeData, group, parentNode, function (dataSource, model, loadModel) {\n                var inserted;\n\n                function add() {\n                    if (parentNode) {\n                        that._expanded(parentNode, true);\n                    }\n\n                    var data = dataSource.data(),\n                        index = Math.max(data.length, 0);\n\n                    return that._insert(data, model, index);\n                }\n\n                loadModel.then(function() {\n                    inserted = add();\n                    success = success || $.noop;\n                    success(inserted);\n                });\n\n                return inserted || null;\n            });\n        },\n\n        _remove: function (node, keepData) {\n            var that = this,\n                parentNode,\n                prevSibling, nextSibling;\n\n            node = $(node, that.element);\n\n            this.angular(\"cleanup\", function(){\n                return { elements: node.get() };\n            });\n\n            parentNode = node.parent().parent();\n            prevSibling = node.prev();\n            nextSibling = node.next();\n\n            node[keepData ? \"detach\" : \"remove\"]();\n\n            if (parentNode.hasClass(\"k-item\")) {\n                updateNodeHtml(parentNode);\n                that._updateNodeClasses(parentNode);\n            }\n\n            that._updateNodeClasses(prevSibling);\n            that._updateNodeClasses(nextSibling);\n\n            return node;\n        },\n\n        remove: function (node) {\n            var dataItem = this.dataItem(node);\n            if (dataItem) {\n                this.dataSource.remove(dataItem);\n            }\n        },\n\n        detach: function (node) {\n            return this._remove(node, true);\n        },\n\n        findByText: function(text) {\n            return $(this.element).find(\".k-in\").filter(function(i, element) {\n                return $(element).text() == text;\n            }).closest(NODE);\n        },\n\n        findByUid: function(uid) {\n            return this.element.find(\".k-item[\" + kendo.attr(\"uid\") + \"=\" + uid + \"]\");\n        },\n\n        expandPath: function(path, complete) {\n            path = path.slice(0);\n            var treeview = this;\n            var dataSource = this.dataSource;\n            var node = dataSource.get(path[0]);\n            complete = complete || $.noop;\n\n            // expand loaded nodes\n            while (path.length > 0 && (node.expanded || node.loaded())) {\n                node.set(\"expanded\", true);\n                path.shift();\n                node = dataSource.get(path[0]);\n            }\n\n            if (!path.length) {\n                return complete.call(treeview);\n            }\n\n            // expand async nodes\n            dataSource.bind(\"change\", function expandLevel(e) {\n                // listen to the change event to know when the node has been loaded\n                var id = e.node && e.node.id;\n                var node;\n\n                // proceed if the change is caused by the last fetching\n                if (id && id === path[0]) {\n                    path.shift();\n\n                    if (path.length) {\n                        node = dataSource.get(path[0]);\n\n                        if (node && !node.loaded()) {\n                            node.set(\"expanded\", true);\n                        } else {\n                            complete.call(treeview);\n                        }\n                    } else {\n                        complete.call(treeview);\n                    }\n                }\n            });\n\n            node.set(\"expanded\", true);\n        },\n\n        _parents: function(node) {\n            var parent = node && node.parentNode();\n            var parents = [];\n            while (parent) {\n                parents.push(parent);\n                parent = parent.parentNode();\n            }\n\n            return parents;\n        },\n\n        expandTo: function(node) {\n            if (!(node instanceof kendo.data.Node)) {\n                node = this.dataSource.get(node);\n            }\n\n            var parents = this._parents(node);\n\n            for (var i = 0; i < parents.length; i++) {\n                parents[i].set(\"expanded\", true);\n            }\n        },\n\n        _renderItem: function (options) {\n            if (!options.group) {\n                options.group = {};\n            }\n\n            options.treeview = this.options;\n\n            options.r = this.templates;\n\n            return this.templates.item(options);\n        },\n\n        _renderGroup: function (options) {\n            var that = this;\n\n            options.renderItems = function(options) {\n                    var html = \"\",\n                        i = 0,\n                        items = options.items,\n                        len = items ? items.length : 0,\n                        group = options.group;\n\n                    group.length = len;\n\n                    for (; i < len; i++) {\n                        options.group = group;\n                        options.item = items[i];\n                        options.item.index = i;\n                        html += that._renderItem(options);\n                    }\n\n                    return html;\n                };\n\n            options.r = that.templates;\n\n            return that.templates.group(options);\n        }\n    });\n\n    function TreeViewDragAndDrop(treeview) {\n        var that = this;\n\n        that.treeview = treeview;\n        that.hovered = treeview.element;\n\n        that._draggable = new ui.Draggable(treeview.element, {\n           filter: \"div:not(.k-state-disabled) .k-in\",\n           hint: function(node) {\n               return treeview.templates.dragClue({\n                   item: treeview.dataItem(node),\n                   treeview: treeview.options\n               });\n           },\n           cursorOffset: {\n               left: 10,\n               top: kendo.support.mobileOS ? -40 / kendo.support.zoomLevel() : 10\n           },\n           dragstart: proxy(that.dragstart, that),\n           dragcancel: proxy(that.dragcancel, that),\n           drag: proxy(that.drag, that),\n           dragend: proxy(that.dragend, that),\n           $angular: treeview.options.$angular\n        });\n    }\n\n    TreeViewDragAndDrop.prototype = {\n        _removeTouchHover: function() {\n            var that = this;\n\n            if (kendo.support.touch && that.hovered) {\n                that.hovered.find(\".\" + KSTATEHOVER).removeClass(KSTATEHOVER);\n                that.hovered = false;\n            }\n        },\n\n        _hintStatus: function(newStatus) {\n            var statusElement = this._draggable.hint.find(\".k-drag-status\")[0];\n\n            if (newStatus) {\n                statusElement.className = \"k-icon k-drag-status \" + newStatus;\n            } else {\n                return $.trim(statusElement.className.replace(/k-(icon|drag-status)/g, \"\"));\n            }\n        },\n\n        dragstart: function (e) {\n            var that = this,\n                treeview = that.treeview,\n                sourceNode = that.sourceNode = e.currentTarget.closest(NODE);\n\n            if (treeview.trigger(DRAGSTART, { sourceNode: sourceNode[0] })) {\n                e.preventDefault();\n            }\n\n            that.dropHint = $(\"<div class='k-drop-hint' />\")\n                .css(VISIBILITY, \"hidden\")\n                .appendTo(treeview.element);\n        },\n\n        drag: function (e) {\n            var that = this,\n                treeview = that.treeview,\n                sourceNode = that.sourceNode,\n                dropTarget = that.dropTarget = $(kendo.eventTarget(e)),\n                statusClass, closestTree = dropTarget.closest(\".k-treeview\"),\n                hoveredItem, hoveredItemPos, itemHeight, itemTop, itemContent, delta,\n                insertOnTop, insertOnBottom, addChild;\n\n            if (!closestTree.length) {\n                // dragging node outside of treeview\n                statusClass = \"k-denied\";\n                that._removeTouchHover();\n            } else if ($.contains(sourceNode[0], dropTarget[0])) {\n                // dragging node within itself\n                statusClass = \"k-denied\";\n            } else {\n                // moving or reordering node\n                statusClass = \"k-insert-middle\";\n\n                hoveredItem = dropTarget.closest(\".k-top,.k-mid,.k-bot\");\n\n                if (hoveredItem.length) {\n                    itemHeight = hoveredItem.outerHeight();\n                    itemTop = kendo.getOffset(hoveredItem).top;\n                    itemContent = dropTarget.closest(\".k-in\");\n                    delta = itemHeight / (itemContent.length > 0 ? 4 : 2);\n\n                    insertOnTop = e.y.location < (itemTop + delta);\n                    insertOnBottom = (itemTop + itemHeight - delta) < e.y.location;\n                    that._removeTouchHover();\n                    addChild = itemContent.length && !insertOnTop && !insertOnBottom;\n                    that.hovered = addChild ? closestTree : false;\n\n                    that.dropHint.css(VISIBILITY, addChild ? \"hidden\" : \"visible\");\n                    itemContent.toggleClass(KSTATEHOVER, addChild);\n\n                    if (addChild) {\n                        statusClass = \"k-add\";\n                    } else {\n                        hoveredItemPos = hoveredItem.position();\n                        hoveredItemPos.top += insertOnTop ? 0 : itemHeight;\n\n                        that.dropHint\n                            .css(hoveredItemPos)\n                            [insertOnTop ? \"prependTo\" : \"appendTo\"](dropTarget.closest(NODE).children(\"div:first\"));\n\n                        if (insertOnTop && hoveredItem.hasClass(\"k-top\")) {\n                            statusClass = \"k-insert-top\";\n                        }\n\n                        if (insertOnBottom && hoveredItem.hasClass(\"k-bot\")) {\n                            statusClass = \"k-insert-bottom\";\n                        }\n                    }\n                } else if (dropTarget[0] != that.dropHint[0]) {\n                    if (closestTree[0] != treeview.element[0]) {\n                        // moving node to different treeview without children\n                        statusClass = \"k-add\";\n                    } else {\n                        statusClass = \"k-denied\";\n                    }\n                }\n            }\n\n            treeview.trigger(DRAG, {\n                sourceNode: sourceNode[0],\n                dropTarget: dropTarget[0],\n                pageY: e.y.location,\n                pageX: e.x.location,\n                statusClass: statusClass.substring(2),\n                setStatusClass: function (value) {\n                    statusClass = value;\n                }\n            });\n\n            if (statusClass.indexOf(\"k-insert\") !== 0) {\n                that.dropHint.css(VISIBILITY, \"hidden\");\n            }\n\n            that._hintStatus(statusClass);\n        },\n\n        dragcancel: function() {\n            this.dropHint.remove();\n        },\n\n        dragend: function () {\n            var that = this,\n                treeview = that.treeview,\n                dropPosition = \"over\",\n                sourceNode = that.sourceNode,\n                destinationNode,\n                dropHint = that.dropHint,\n                dropTarget = that.dropTarget,\n                e, dropPrevented;\n\n            if (dropHint.css(VISIBILITY) == \"visible\") {\n                dropPosition = dropHint.prevAll(\".k-in\").length > 0 ? \"after\" : \"before\";\n                destinationNode = dropHint.closest(NODE);\n            } else if (dropTarget) {\n                destinationNode = dropTarget.closest(\".k-treeview .k-item\");\n\n                // moving node to root element\n                if (!destinationNode.length) {\n                    destinationNode = dropTarget.closest(\".k-treeview\");\n                }\n            }\n\n            e = {\n                sourceNode: sourceNode[0],\n                destinationNode: destinationNode[0],\n                valid: that._hintStatus() != \"k-denied\",\n                setValid: function(newValid) {\n                    this.valid = newValid;\n                },\n                dropTarget: dropTarget[0],\n                dropPosition: dropPosition\n            };\n\n            dropPrevented = treeview.trigger(DROP, e);\n\n            dropHint.remove();\n            that._removeTouchHover();\n\n            if (!e.valid || dropPrevented) {\n                that._draggable.dropped = e.valid;\n                return;\n            }\n\n            that._draggable.dropped = true;\n\n            function triggerDragEnd(sourceNode) {\n                treeview.updateIndeterminate();\n\n                treeview.trigger(DRAGEND, {\n                    sourceNode: sourceNode && sourceNode[0],\n                    destinationNode: destinationNode[0],\n                    dropPosition: dropPosition\n                });\n            }\n\n            // perform reorder / move\n            // different handling is necessary because append might be async in remote bound tree\n            if (dropPosition == \"over\") {\n                treeview.append(sourceNode, destinationNode, triggerDragEnd);\n            } else {\n                if (dropPosition == \"before\") {\n                    sourceNode = treeview.insertBefore(sourceNode, destinationNode);\n                } else if (dropPosition == \"after\") {\n                    sourceNode = treeview.insertAfter(sourceNode, destinationNode);\n                }\n\n                triggerDragEnd(sourceNode);\n            }\n        },\n\n        destroy: function() {\n            this._draggable.destroy();\n        }\n    };\n\n    ui.plugin(TreeView);\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true*/\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        MENU = \"kendoContextMenu\",\n        proxy = $.proxy,\n        NS = \".kendoPivotFieldMenu\",\n        Widget = ui.Widget;\n\n    var PivotFieldMenu = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this._dataSource();\n\n            this._layout();\n\n            kendo.notify(this);\n        },\n\n        events: [],\n\n        options: {\n            name: \"PivotFieldMenu\",\n            filter: null,\n            filterable: true,\n            sortable: true,\n            messages: {\n                info: \"Show items with value that:\",\n                sortAscending: \"Sort Ascending\",\n                sortDescending: \"Sort Descending\",\n                filterFields: \"Fields Filter\",\n                filter: \"Filter\",\n                include: \"Include Fields...\",\n                title: \"Fields to include\",\n                clear: \"Clear\",\n                ok: \"OK\",\n                cancel: \"Cancel\",\n                operators: {\n                    contains: \"Contains\",\n                    doesnotcontain: \"Does not contain\",\n                    startswith: \"Starts with\",\n                    endswith: \"Ends with\",\n                    eq: \"Is equal to\",\n                    neq: \"Is not equal to\"\n                }\n            }\n        },\n\n        _layout: function() {\n            var options = this.options;\n\n            this.wrapper = $(kendo.template(MENUTEMPLATE)({\n                ns: kendo.ns,\n                filterable: options.filterable,\n                sortable: options.sortable,\n                messages: options.messages\n            }));\n\n            this.menu = this.wrapper[MENU]({\n                filter: options.filter,\n                target: this.element,\n                orientation: \"vertical\",\n                showOn: \"click\",\n                closeOnClick: false,\n                open: proxy(this._menuOpen, this),\n                select: proxy(this._select, this),\n                copyAnchorStyles: false\n            }).data(MENU);\n\n            this._createWindow();\n\n            if (options.filterable) {\n                this._initFilterForm();\n            }\n        },\n\n        _initFilterForm: function() {\n            var filterForm = this.menu.element.find(\".k-filter-item\");\n            var filterProxy = proxy(this._filter, this);\n\n            this._filterOperator = new kendo.ui.DropDownList(filterForm.find(\"select\"));\n            this._filterValue = filterForm.find(\".k-textbox\");\n\n\n            filterForm\n                .on(\"submit\" + NS, filterProxy)\n                .on(\"click\" + NS, \".k-button-filter\", filterProxy)\n                .on(\"click\" + NS, \".k-button-clear\", proxy(this._reset, this));\n        },\n\n        _setFilterForm: function(expression) {\n            var operator = \"\";\n            var value = \"\";\n\n            if (expression) {\n                operator = expression.operator;\n                value = expression.value;\n            }\n\n            this._filterOperator.value(operator);\n            this._filterValue.val(value);\n        },\n\n        _clearFilters: function(member) {\n            var filter = this.dataSource.filter() || {};\n            var expressions;\n            var idx = 0;\n            var length;\n\n            filter.filters = filter.filters || [];\n            expressions = findFilters(filter, member);\n\n            for (length = expressions.length; idx < length; idx++) {\n                filter.filters.splice(filter.filters.indexOf(expressions[idx]), 1);\n            }\n\n            return filter;\n        },\n\n        _filter: function(e) {\n            var that = this;\n            var value = that._filterValue.val();\n\n            e.preventDefault();\n\n            if (!value) {\n                that.menu.close();\n                return;\n            }\n\n            var expression = {\n                field: that.currentMember,\n                operator: that._filterOperator.value(),\n                value: value\n            };\n            var filter = that._clearFilters(that.currentMember);\n\n            filter.filters.push(expression);\n\n            that.dataSource.filter(filter);\n            that.menu.close();\n        },\n\n        _reset: function(e) {\n            var that = this;\n            var filter = that._clearFilters(that.currentMember);\n\n            e.preventDefault();\n\n            if (!filter.filters[0]) {\n                filter = {};\n            }\n\n            that.dataSource.filter(filter);\n            that._setFilterForm(null);\n            that.menu.close();\n        },\n\n        _sort: function(dir) {\n            var field = this.currentMember;\n            var expressions = (this.dataSource.sort() || []);\n\n            expressions = removeExpr(expressions, field);\n            expressions.push({\n                field: field,\n                dir: dir\n            });\n\n            this.dataSource.sort(expressions);\n            this.menu.close();\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n        },\n\n        _dataSource: function() {\n            this.dataSource = kendo.data.PivotDataSource.create(this.options.dataSource);\n        },\n\n        _createWindow: function() {\n            var messages = this.options.messages;\n\n            this.includeWindow = $(kendo.template(WINDOWTEMPLATE)({\n                messages: messages\n            }))\n            .on(\"click\" + NS, \".k-button-ok\", proxy(this._applyIncludes, this))\n            .on(\"click\" + NS, \".k-button-cancel\", proxy(this._closeWindow, this));\n\n            this.includeWindow = new ui.Window(this.includeWindow, {\n                title: messages.title,\n                visible: false,\n                resizable: false,\n                open: proxy(this._windowOpen, this)\n            });\n        },\n\n        _applyIncludes: function(e) {\n            var checkedNodes = [];\n            var resultExpression;\n            var view = this.treeView.dataSource.view();\n            var rootChecked = view[0].checked;\n            var filter = this.dataSource.filter();\n            var existingExpression = findFilters(filter, this.currentMember, \"in\")[0];\n\n            checkedNodeIds(view, checkedNodes);\n\n            if (existingExpression) {\n                if (rootChecked) {\n                    filter.filters.splice(filter.filters.indexOf(existingExpression), 1);\n                    if (!filter.filters.length) {\n                        filter = {};\n                    }\n                } else {\n                    existingExpression.value = checkedNodes.join(\",\");\n                }\n\n                resultExpression = filter;\n            }\n\n            if (checkedNodes.length) {\n                if (!resultExpression && !rootChecked) {\n                    resultExpression = {\n                        field: this.currentMember,\n                        operator: \"in\",\n                        value: checkedNodes.join(\",\")\n                    };\n\n                    if (filter) {\n                        filter.filters.push(resultExpression);\n                        resultExpression = filter;\n                    }\n                }\n            }\n\n            if (resultExpression) {\n                this.dataSource.filter(resultExpression);\n            }\n\n            this._closeWindow(e);\n        },\n\n        _closeWindow: function(e) {\n            e.preventDefault();\n\n            this.includeWindow.close();\n        },\n\n        _treeViewDataSource: function() {\n            var that = this;\n\n            return kendo.data.HierarchicalDataSource.create({\n                schema: {\n                    model: {\n                        id: \"uniqueName\",\n                        hasChildren: function(item) {\n                            return parseInt(item.childrenCardinality, 10) > 0;\n                        }\n                    }\n                },\n                transport: {\n                    read: function(options) {\n                        var restrictions = {};\n                        var node = that.treeView.dataSource.get(options.data.uniqueName);\n                        var name = options.data.uniqueName;\n\n                        if (!name) {\n                            restrictions.levelUniqueName = that.currentMember + \".[(ALL)]\";\n                        } else {\n                            restrictions.memberUniqueName = node.uniqueName.replace(/\\&/g, \"&amp;\");\n                            restrictions.treeOp = 1;\n                        }\n\n                        that.dataSource\n                            .schemaMembers(restrictions)\n                            .done(function (data) {\n                                checkNodes(that.dataSource.filter(), that.currentMember, data);\n\n                                options.success(data);\n                            })\n                            .fail(options.error);\n                    }\n                }\n            });\n        },\n\n        _createTreeView: function(element) {\n            var that = this;\n\n            that.treeView =  new ui.TreeView(element, {\n                autoBind: false,\n                dataSource: that._treeViewDataSource(),\n                dataTextField: \"caption\",\n                template: \"#: data.item.caption || data.item.name #\",\n                checkboxes: {\n                    checkChildren: true\n                },\n                dataBound: function() {\n                    ui.progress(that.includeWindow.element, false);\n                }\n            });\n        },\n\n        _menuOpen: function(e) {\n            if (!e.event) {\n                return;\n            }\n\n            var attr = kendo.attr(\"name\");\n            var expression;\n\n            this.currentMember = $(e.event.target).closest(\"[\" + attr + \"]\").attr(attr);\n\n            if (this.options.filterable) {\n                this._setFilterForm(findFilters(this.dataSource.filter(), this.currentMember)[0]);\n            }\n        },\n\n        _select: function(e) {\n            var item = $(e.item);\n\n            $(\".k-pivot-filter-window\").not(this.includeWindow.element).kendoWindow(\"close\");\n\n            if (item.hasClass(\"k-include-item\")) {\n                this.includeWindow.center().open();\n            } else if (item.hasClass(\"k-sort-asc\")) {\n                this._sort(\"asc\");\n            } else if (item.hasClass(\"k-sort-desc\")) {\n                this._sort(\"desc\");\n            }\n        },\n\n        _windowOpen: function() {\n            if (!this.treeView) {\n                this._createTreeView(this.includeWindow.element.find(\".k-treeview\"));\n            }\n\n            ui.progress(this.includeWindow.element, true);\n            this.treeView.dataSource.read();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            if (this.menu) {\n                this.menu.destroy();\n                this.menu = null;\n            }\n\n            if (this.treeView) {\n                this.treeView.destroy();\n                this.treeView = null;\n            }\n\n            if (this.includeWindow) {\n                this.includeWindow.destroy();\n                this.includeWindow = null;\n            }\n\n            this.wrapper = null;\n            this.element = null;\n        }\n    });\n\n    function removeExpr(expressions, name) {\n        var result = [];\n\n        for (var idx = 0, length = expressions.length; idx < length; idx++) {\n            if (expressions[idx].field !== name) {\n                result.push(expressions[idx]);\n            }\n        }\n\n        return result;\n    }\n\n    function findFilters(filter, member, operator) {\n        if (!filter) {\n            return [];\n        }\n\n        filter = filter.filters;\n\n        var idx = 0;\n        var result = [];\n        var length = filter.length;\n        var filterOperator;\n\n        for ( ; idx < length; idx++) {\n            filterOperator = filter[idx].operator;\n\n            if (((!operator && filterOperator !== \"in\") || (filterOperator === operator)) && filter[idx].field === member) {\n                result.push(filter[idx]);\n            }\n        }\n\n        return result;\n    }\n\n    function checkNodes(filter, member, nodes) {\n        var values, idx = 0, length = nodes.length;\n        filter = findFilters(filter, member, \"in\")[0];\n\n        if (!filter) {\n            for (; idx < length; idx++) {\n                nodes[idx].checked = true;\n            }\n        } else {\n            values = filter.value.split(\",\");\n            for (; idx < length; idx++) {\n                nodes[idx].checked = $.inArray(nodes[idx].uniqueName, values) >= 0;\n            }\n        }\n    }\n\n    function checkedNodeIds(nodes, checkedNodes) {\n        var idx, length = nodes.length;\n\n        for (idx = 0; idx < length; idx++) {\n            if (nodes[idx].checked && nodes[idx].level() !== 0) {\n                checkedNodes.push(nodes[idx].uniqueName);\n            }\n\n            if (nodes[idx].hasChildren) {\n                checkedNodeIds(nodes[idx].children.view(), checkedNodes);\n            }\n        }\n    }\n\n    var LABELMENUTEMPLATE =\n        '<div class=\"k-filterable k-content\" tabindex=\"-1\" data-role=\"fieldmenu\">' +\n            '<form class=\"k-filter-menu\">' +\n                '<div>' +\n                    '<div class=\"k-filter-help-text\">#=messages.info#</div>'+\n                    '<select>'+\n                        '#for(var op in messages.operators){#'+\n                            '<option value=\"#=op#\">#=messages.operators[op]#</option>' +\n                        '#}#'+\n                    '</select>'+\n                    '<input class=\"k-textbox\" type=\"text\" />'+\n                    '<div>'+\n                    '<a class=\"k-button k-primary k-button-filter\" href=\"\\\\#\">#=messages.filter#</a>'+\n                    '<a class=\"k-button k-button-clear\" href=\"\\\\#\">#=messages.clear#</a>'+\n                    '</div>'+\n                '</div>' +\n            '</form>' +\n        '</div>';\n\n    var MENUTEMPLATE = '<ul class=\"k-pivot-fieldmenu\">'+\n                        '# if (sortable) {#'+\n                        '<li class=\"k-item k-sort-asc\">'+\n                            '<span class=\"k-link\">'+\n                                '<span class=\"k-icon k-i-sort-asc\"></span>'+\n                                '${messages.sortAscending}'+\n                            '</span>'+\n                        '</li>'+\n                        '<li class=\"k-item k-sort-desc\">'+\n                            '<span class=\"k-link\">'+\n                                '<span class=\"k-icon k-i-sort-desc\"></span>'+\n                                '${messages.sortDescending}'+\n                            '</span>'+\n                        '</li>'+\n                            '# if (filterable) {#'+\n                            '<li class=\"k-separator\"></li>'+\n                            '# } #'+\n                        '# } #'+\n                        '# if (filterable) {#'+\n                        '<li class=\"k-item k-include-item\">'+\n                            '<span class=\"k-link\">'+\n                                '<span class=\"k-icon k-filter\"></span>'+\n                                '${messages.include}'+\n                            '</span>'+\n                        '</li>'+\n                        '<li class=\"k-separator\"></li>'+\n                        '<li class=\"k-item k-filter-item\">'+\n                            '<span class=\"k-link\">'+\n                                '<span class=\"k-icon k-filter\"></span>'+\n                                '${messages.filterFields}'+\n                            '</span>'+\n                            '<ul>'+\n                                '<li>' + LABELMENUTEMPLATE + '</li>'+\n                            '</ul>'+\n                        '</li>'+\n                        '# } #'+\n                    '</ul>';\n\n    var WINDOWTEMPLATE = '<div class=\"k-popup-edit-form k-pivot-filter-window\"><div class=\"k-edit-form-container\">'+\n                            '<div class=\"k-treeview\"></div>'+\n                            '<div class=\"k-edit-buttons k-state-default\">'+\n                            '<a class=\"k-button k-primary k-button-ok\" href=\"\\\\#\">'+\n                                '${messages.ok}'+\n                            '</a>'+\n                            '<a class=\"k-button k-button-cancel\" href=\"\\\\#\">'+\n                                '${messages.cancel}'+\n                            '</a>'+\n                        '</div></div>';\n\n    ui.plugin(PivotFieldMenu);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        DataSource = kendo.data.DataSource,\n        Widget = ui.Widget,\n        CHANGE = \"change\",\n        BOOL = \"boolean\",\n        ENUM = \"enums\",\n        STRING = \"string\",\n        NS = \".kendoFilterCell\",\n        EQ = \"Is equal to\",\n        NEQ = \"Is not equal to\",\n        proxy = $.proxy;\n\n    function findFilterForField(filter, field) {\n        var filters = [];\n        if ($.isPlainObject(filter)) {\n            if (filter.hasOwnProperty(\"filters\")) {\n                filters = filter.filters;\n            } else if(filter.field == field) {\n                return filter;\n            }\n        }\n        if (($.isArray(filter))) {\n           filters = filter;\n        }\n\n        for (var i = 0; i < filters.length; i++) {\n          var result = findFilterForField(filters[i], field);\n          if (result) {\n             return result;\n          }\n        }\n    }\n\n    function removeFiltersForField(expression, field) {\n        if (expression.filters) {\n            expression.filters = $.grep(expression.filters, function(filter) {\n                removeFiltersForField(filter, field);\n                if (filter.filters) {\n                    return filter.filters.length;\n                } else {\n                    return filter.field != field;\n                }\n            });\n        }\n    }\n\n    function removeDuplicates (dataSelector, dataTextField) {\n        var getter = kendo.getter(dataTextField, true);\n\n        return function(e) {\n            var items = dataSelector(e),\n                result = [],\n                index = 0,\n                seen = {};\n\n            while (index < items.length) {\n                var item = items[index++],\n                    text = getter(item);\n\n                if(!seen.hasOwnProperty(text)){\n                    result.push(item);\n                    seen[text] = true;\n                }\n            }\n\n            return result;\n        };\n    }\n\n    var FilterCell = Widget.extend( {\n        init: function(element, options) {\n            element = $(element).addClass(\"k-filtercell\");\n            var wrapper = this.wrapper = $(\"<span/>\").appendTo(element);\n            var that = this,\n                dataSource,\n                viewModel,\n                passedOptions = options,\n                first,\n                type,\n                operators = that.operators = options.operators || {},\n                input = that.input = $(\"<input/>\")\n                    .attr(kendo.attr(\"bind\"), \"value: value\")\n                    .appendTo(wrapper);\n\n            Widget.fn.init.call(that, element[0], options);\n            options = that.options;\n            dataSource = that.dataSource = options.dataSource;\n\n            //gets the type from the dataSource or sets default to string\n            that.model = dataSource.reader.model;\n            type = options.type = STRING;\n            var fields = kendo.getter(\"reader.model.fields\", true)(dataSource) || {};\n            var target = fields[options.field];\n            if (target && target.type) {\n                type = options.type = target.type;\n            }\n            if (options.values) {\n                options.type = type = ENUM;\n            }\n\n            operators = operators[type] || options.operators[type];\n\n            if (!passedOptions.operator) {\n                for (first in operators) { // get the first operator\n                    options.operator = first;\n                    break;\n                }\n            }\n\n            that._parse = function(value) {\n                 return value + \"\";\n            };\n\n            if (that.model && that.model.fields) {\n                var field = that.model.fields[options.field];\n\n                if (field) {\n                    if (field.parse) {\n                        that._parse = proxy(field.parse, field);\n                    }\n                }\n            }\n\n            that.viewModel = viewModel = kendo.observable({\n                operator: options.operator,\n                value: null,\n                operatorVisible: function() {\n                    var val = this.get(\"value\");\n                    return  val !== null && val !== undefined && val != \"undefined\";\n                }\n            });\n            viewModel.bind(CHANGE, proxy(that.updateDsFilter, that));\n\n            if (type == STRING) {\n                that.initSuggestDataSource(options);\n            }\n\n            if (options.inputWidth !== null) {\n                input.width(options.inputWidth);\n            }\n            that._setInputType(options, type);\n\n            if (type != BOOL && options.showOperators !== false) {\n                that._createOperatorDropDown(operators);\n            } else {\n                wrapper.addClass(\"k-operator-hidden\");\n            }\n\n            that._createClearIcon();\n\n            kendo.bind(this.wrapper, viewModel);\n\n            if (type == STRING) {\n                if (!options.template) {\n                    that.setAutoCompleteSource();\n                }\n            }\n\n            if (type == ENUM) {\n                that.setComboBoxSource(that.options.values);\n            }\n\n            that._refreshUI();\n\n            that._refreshHandler = proxy(that._refreshUI, that);\n\n            that.dataSource.bind(CHANGE, that._refreshHandler);\n\n        },\n\n        _setInputType: function(options, type) {\n            var that = this,\n                input = that.input;\n\n            if (typeof (options.template) == \"function\") {\n                options.template.call(that.viewModel, {\n                    element: that.input,\n                    dataSource: that.suggestDataSource\n                });\n            } else if (type == STRING) {\n                input.attr(kendo.attr(\"role\"), \"autocomplete\")\n                        .attr(kendo.attr(\"text-field\"), options.dataTextField || options.field)\n                        .attr(kendo.attr(\"filter\"), options.suggestionOperator)\n                        .attr(kendo.attr(\"delay\"), options.delay)\n                        .attr(kendo.attr(\"min-length\"), options.minLength)\n                        .attr(kendo.attr(\"value-primitive\"), true);\n            } else if (type == \"date\") {\n                input.attr(kendo.attr(\"role\"), \"datepicker\");\n            } else if (type == BOOL) {\n                input.remove();\n                var radioInput = $(\"<input type='radio'/>\");\n                var wrapper = that.wrapper;\n                var inputName = kendo.guid();\n\n                var labelTrue = $(\"<label/>\").text(options.messages.isTrue).append(radioInput);\n                radioInput.attr(kendo.attr(\"bind\"), \"checked:value\")\n                    .attr(\"name\", inputName)\n                    .val(\"true\");\n\n                var labelFalse = labelTrue.clone().text(options.messages.isFalse);\n                radioInput.clone().val(\"false\").appendTo(labelFalse);\n                wrapper.append([labelTrue, labelFalse]);\n\n            } else if (type == \"number\") {\n                input.attr(kendo.attr(\"role\"), \"numerictextbox\");\n            } else if (type == ENUM) {\n                input.attr(kendo.attr(\"role\"), \"combobox\")\n                        .attr(kendo.attr(\"text-field\"), \"text\")\n                        .attr(kendo.attr(\"suggest\"), true)\n                        .attr(kendo.attr(\"filter\"), \"contains\")\n                        .attr(kendo.attr(\"value-field\"), \"value\")\n                        .attr(kendo.attr(\"value-primitive\"), true);\n            }\n        },\n\n        _createOperatorDropDown: function(operators) {\n            var items = [];\n            for (var prop in operators) {\n                items.push({\n                    text: operators[prop],\n                    value: prop\n                });\n            }\n            var dropdown = $('<input class=\"k-dropdown-operator\" ' + kendo.attr(\"bind\") + '=\"value: operator\"/>').appendTo(this.wrapper);\n            this.operatorDropDown = dropdown.kendoDropDownList({\n                dataSource: items,\n                dataTextField: \"text\",\n                dataValueField: \"value\",\n                open: function() {\n                    //TODO calc this\n                    this.popup.element.width(150);\n                },\n                valuePrimitive: true\n            }).data(\"kendoDropDownList\");\n\n            this.operatorDropDown.wrapper.find(\".k-i-arrow-s\").removeClass(\"k-i-arrow-s\").addClass(\"k-filter\");\n        },\n\n        initSuggestDataSource: function(options) {\n            var suggestDataSource = options.suggestDataSource;\n\n            if (!(suggestDataSource instanceof DataSource)) {\n                if (!options.customDataSource && suggestDataSource) {\n                    suggestDataSource.group = undefined;\n                }\n                suggestDataSource =\n                    this.suggestDataSource =\n                        DataSource.create(suggestDataSource);\n\n\n            }\n\n            if (!options.customDataSource) {\n                suggestDataSource._pageSize = undefined;\n                suggestDataSource.reader.data = removeDuplicates(suggestDataSource.reader.data, this.options.field);\n            }\n\n            this.suggestDataSource = suggestDataSource;\n        },\n\n        setAutoCompleteSource: function() {\n            var autoComplete = this.input.data(\"kendoAutoComplete\");\n            if (autoComplete) {\n                autoComplete.setDataSource(this.suggestDataSource);\n            }\n        },\n\n        setComboBoxSource: function(values) {\n            var dataSource = DataSource.create({\n                data: values\n            });\n            var comboBox = this.input.data(\"kendoComboBox\");\n            if (comboBox) {\n                comboBox.setDataSource(dataSource);\n            }\n        },\n\n        _refreshUI: function(e) {\n            var that = this,\n                filter = findFilterForField(that.dataSource.filter(), this.options.field) || {},\n                viewModel = that.viewModel;\n\n            that.manuallyUpdatingVM = true;\n            filter = $.extend(true, {}, filter);\n            //MVVM check binding does not update the UI when changing the value to null/undefined\n            if (that.options.type == BOOL) {\n                if (viewModel.value !== filter.value) {\n                    that.wrapper.find(\":radio\").prop(\"checked\", false);\n                }\n            }\n\n            if (filter.operator) {\n                viewModel.set(\"operator\", filter.operator);\n            }\n            viewModel.set(\"value\", filter.value);\n            that.manuallyUpdatingVM = false;\n        },\n\n        updateDsFilter: function(e) {\n            var that = this,\n                model = that.viewModel;\n\n            if (that.manuallyUpdatingVM || (e.field == \"operator\" && model.value === undefined)) {\n                return;\n            }\n\n            var currentFilter = $.extend({}, that.viewModel.toJSON(), { field: that.options.field });\n\n            var expression = {\n                logic: \"and\",\n                filters: []\n            };\n\n            if (currentFilter.value !== undefined && currentFilter.value !== null) {\n                expression.filters.push(currentFilter);\n            }\n            var mergeResult = that._merge(expression);\n            if (mergeResult.filters.length) {\n                that.dataSource.filter(mergeResult);\n            } else {\n                that.dataSource.filter({});\n            }\n        },\n\n        _merge: function(expression) {\n            var that = this,\n                logic = expression.logic || \"and\",\n                filters = expression.filters,\n                filter,\n                result = that.dataSource.filter() || { filters:[], logic: \"and\" },\n                idx,\n                length;\n\n            removeFiltersForField(result, that.options.field);\n\n            for (idx = 0, length = filters.length; idx < length; idx++) {\n                filter = filters[idx];\n                filter.value = that._parse(filter.value);\n            }\n\n            filters = $.grep(filters, function(filter) {\n                return filter.value !== \"\" && filter.value !== null;\n            });\n\n            if (filters.length) {\n                if (result.filters.length) {\n                    expression.filters = filters;\n\n                    if (result.logic !== \"and\") {\n                        result.filters = [ { logic: result.logic, filters: result.filters }];\n                        result.logic = \"and\";\n                    }\n\n                    if (filters.length > 1) {\n                        result.filters.push(expression);\n                    } else {\n                        result.filters.push(filters[0]);\n                    }\n                } else {\n                    result.filters = filters;\n                    result.logic = logic;\n                }\n            }\n\n            return result;\n        },\n\n        _createClearIcon: function() {\n            var that = this;\n\n            $(\"<button type='button' class='k-button k-button-icon'/>\")\n                .attr(kendo.attr(\"bind\"), \"visible:operatorVisible\")\n                .html(\"<span class='k-icon k-i-close'/>\")\n                .click(proxy(that.clearFilter, that))\n                .appendTo(that.wrapper);\n        },\n\n        clearFilter: function() {\n            this.viewModel.set(\"value\", null);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.filterModel = null;\n\n            Widget.fn.destroy.call(that);\n\n            kendo.destroy(that.element);\n        },\n\n        events: [\n            CHANGE\n        ],\n\n        options: {\n            name: \"FilterCell\",\n            delay: 200,\n            minLength: 1,\n            inputWidth: null,\n            values: undefined,\n            customDataSource: false,\n            field: \"\",\n            dataTextField: \"\",\n            type: \"string\",\n            suggestDataSource: null,\n            suggestionOperator: \"startswith\",\n            operator: \"eq\",\n            showOperators: true,\n            template: null,\n            messages: {\n                isTrue: \"is true\",\n                isFalse: \"is false\",\n                filter: \"Filter\",\n                clear: \"Clear\",\n                operator: \"Operator\"\n            },\n            operators: {\n                string: {\n                    eq: EQ,\n                    neq: NEQ,\n                    startswith: \"Starts with\",\n                    contains: \"Contains\",\n                    doesnotcontain: \"Does not contain\",\n                    endswith: \"Ends with\"\n                },\n                number: {\n                    eq: EQ,\n                    neq: NEQ,\n                    gte: \"Is greater than or equal to\",\n                    gt: \"Is greater than\",\n                    lte: \"Is less than or equal to\",\n                    lt: \"Is less than\"\n                },\n                date: {\n                    eq: EQ,\n                    neq: NEQ,\n                    gte: \"Is after or equal to\",\n                    gt: \"Is after\",\n                    lte: \"Is before or equal to\",\n                    lt: \"Is before\"\n                },\n                enums: {\n                    eq: EQ,\n                    neq: NEQ\n                }\n            }\n        }\n    });\n\n    ui.plugin(FilterCell);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        keys = kendo.keys,\n        extend = $.extend,\n        each = $.each,\n        template = kendo.template,\n        Widget = ui.Widget,\n        excludedNodesRegExp = /^(ul|a|div)$/i,\n        NS = \".kendoPanelBar\",\n        IMG = \"img\",\n        HREF = \"href\",\n        LAST = \"k-last\",\n        LINK = \"k-link\",\n        LINKSELECTOR = \".\" + LINK,\n        ERROR = \"error\",\n        ITEM = \".k-item\",\n        GROUP = \".k-group\",\n        VISIBLEGROUP = GROUP + \":visible\",\n        IMAGE = \"k-image\",\n        FIRST = \"k-first\",\n        EXPAND = \"expand\",\n        SELECT = \"select\",\n        CONTENT = \"k-content\",\n        ACTIVATE = \"activate\",\n        COLLAPSE = \"collapse\",\n        MOUSEENTER = \"mouseenter\",\n        MOUSELEAVE = \"mouseleave\",\n        CONTENTLOAD = \"contentLoad\",\n        ACTIVECLASS = \"k-state-active\",\n        GROUPS = \"> .k-panel\",\n        CONTENTS = \"> .k-content\",\n        FOCUSEDCLASS = \"k-state-focused\",\n        DISABLEDCLASS = \"k-state-disabled\",\n        SELECTEDCLASS = \"k-state-selected\",\n        SELECTEDSELECTOR = \".\" + SELECTEDCLASS,\n        HIGHLIGHTCLASS = \"k-state-highlight\",\n        ACTIVEITEMSELECTOR = ITEM + \":not(.k-state-disabled)\",\n        clickableItems = \"> \" + ACTIVEITEMSELECTOR + \" > \" + LINKSELECTOR + \", .k-panel > \" + ACTIVEITEMSELECTOR + \" > \" + LINKSELECTOR,\n        disabledItems = ITEM + \".k-state-disabled > .k-link\",\n        selectableItems = \"> li > \" + SELECTEDSELECTOR + \", .k-panel > li > \" + SELECTEDSELECTOR,\n        defaultState = \"k-state-default\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_EXPANDED = \"aria-expanded\",\n        ARIA_HIDDEN = \"aria-hidden\",\n        ARIA_SELECTED = \"aria-selected\",\n        VISIBLE = \":visible\",\n        EMPTY = \":empty\",\n        SINGLE = \"single\",\n\n        templates = {\n            content: template(\n                \"<div role='region' class='k-content'#= contentAttributes(data) #>#= content(item) #</div>\"\n            ),\n            group: template(\n                \"<ul role='group' aria-hidden='true' class='#= groupCssClass(group) #'#= groupAttributes(group) #>\" +\n                    \"#= renderItems(data) #\" +\n                \"</ul>\"\n            ),\n            itemWrapper: template(\n                \"<#= tag(item) # class='#= textClass(item, group) #' #= contentUrl(item) ##= textAttributes(item) #>\" +\n                    \"#= image(item) ##= sprite(item) ##= text(item) #\" +\n                    \"#= arrow(data) #\" +\n                \"</#= tag(item) #>\"\n            ),\n            item: template(\n                \"<li role='menuitem' #=aria(item)#class='#= wrapperCssClass(group, item) #'>\" +\n                    \"#= itemWrapper(data) #\" +\n                    \"# if (item.items) { #\" +\n                    \"#= subGroup({ items: item.items, panelBar: panelBar, group: { expanded: item.expanded } }) #\" +\n                    \"# } else if (item.content || item.contentUrl) { #\" +\n                    \"#= renderContent(data) #\" +\n                    \"# } #\" +\n                \"</li>\"\n            ),\n            image: template(\"<img class='k-image' alt='' src='#= imageUrl #' />\"),\n            arrow: template(\"<span class='#= arrowClass(item) #'></span>\"),\n            sprite: template(\"<span class='k-sprite #= spriteCssClass #'></span>\"),\n            empty: template(\"\")\n        },\n\n        rendering = {\n            aria: function(item) {\n                var attr = \"\";\n\n                if (item.items || item.content || item.contentUrl) {\n                    attr += ARIA_EXPANDED + \"='\" + (item.expanded ? \"true\" : \"false\") + \"' \";\n                }\n\n                if (item.enabled === false) {\n                    attr += ARIA_DISABLED + \"='true'\";\n                }\n\n                return attr;\n            },\n\n            wrapperCssClass: function (group, item) {\n                var result = \"k-item\",\n                    index = item.index;\n\n                if (item.enabled === false) {\n                    result += \" \" + DISABLEDCLASS;\n                } else if (item.expanded === true) {\n                    result += \" \" + ACTIVECLASS;\n                } else {\n                    result += \" k-state-default\";\n                }\n\n                if (index === 0) {\n                    result += \" k-first\";\n                }\n\n                if (index == group.length-1) {\n                    result += \" k-last\";\n                }\n\n                if (item.cssClass) {\n                    result += \" \" + item.cssClass;\n                }\n\n                return result;\n            },\n\n            textClass: function(item, group) {\n                var result = LINK;\n\n                if (group.firstLevel) {\n                    result += \" k-header\";\n                }\n\n                return result;\n            },\n            textAttributes: function(item) {\n                return item.url ? \" href='\" + item.url + \"'\" : \"\";\n            },\n            arrowClass: function(item) {\n                var result = \"k-icon\";\n\n                result += item.expanded ? \" k-i-arrow-n k-panelbar-collapse\" : \" k-i-arrow-s k-panelbar-expand\";\n\n                return result;\n            },\n            text: function(item) {\n                return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n            },\n            tag: function(item) {\n                return item.url || item.contentUrl ? \"a\" : \"span\";\n            },\n            groupAttributes: function(group) {\n                return group.expanded !== true ? \" style='display:none'\" : \"\";\n            },\n            groupCssClass: function() {\n                return \"k-group k-panel\";\n            },\n            contentAttributes: function(content) {\n                return content.item.expanded !== true ? \" style='display:none'\" : \"\";\n            },\n            content: function(item) {\n                return item.content ? item.content : item.contentUrl ? \"\" : \"&nbsp;\";\n            },\n            contentUrl: function(item) {\n                return item.contentUrl ? 'href=\"' + item.contentUrl + '\"' : \"\";\n            }\n        };\n\n    function updateArrow (items) {\n        items = $(items);\n\n        items.children(LINKSELECTOR).children(\".k-icon\").remove();\n\n        items\n            .filter(\":has(.k-panel),:has(.k-content)\")\n            .children(\".k-link:not(:has([class*=k-i-arrow]))\")\n            .each(function () {\n                var item = $(this),\n                    parent = item.parent();\n\n                item.append(\"<span class='k-icon \" + (parent.hasClass(ACTIVECLASS) ? \"k-i-arrow-n k-panelbar-collapse\" : \"k-i-arrow-s k-panelbar-expand\") + \"'/>\");\n            });\n    }\n\n    function updateFirstLast (items) {\n        items = $(items);\n\n        items.filter(\".k-first:not(:first-child)\").removeClass(FIRST);\n        items.filter(\".k-last:not(:last-child)\").removeClass(LAST);\n        items.filter(\":first-child\").addClass(FIRST);\n        items.filter(\":last-child\").addClass(LAST);\n    }\n\n    var PanelBar = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                content;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.wrapper = that.element.addClass(\"k-widget k-reset k-header k-panelbar\");\n            options = that.options;\n\n            if (element[0].id) {\n                that._itemId = element[0].id + \"_pb_active\";\n            }\n\n            that._tabindex();\n\n            that._initData(options);\n\n            that._updateClasses();\n\n            that._animations(options);\n\n            element\n                .on(\"click\" + NS, clickableItems, function(e) {\n                    if (that._click($(e.currentTarget))) {\n                        e.preventDefault();\n                    }\n                })\n                .on(MOUSEENTER  + NS + \" \" + MOUSELEAVE + NS, clickableItems, that._toggleHover)\n                .on(\"click\" + NS, disabledItems, false)\n                .on(\"keydown\" + NS, $.proxy(that._keydown, that))\n                .on(\"focus\" + NS, function() {\n                    var item = that.select();\n                    that._current(item[0] ? item : that._first());\n                })\n                .on(\"blur\" + NS, function() {\n                    that._current(null);\n                })\n                .attr(\"role\", \"menu\");\n\n            content = element.find(\"li.\" + ACTIVECLASS + \" > .\" + CONTENT);\n\n            if (content[0]) {\n                that.expand(content.parent(), false);\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n            EXPAND,\n            COLLAPSE,\n            SELECT,\n            ACTIVATE,\n            ERROR,\n            CONTENTLOAD\n        ],\n        options: {\n            name: \"PanelBar\",\n            animation: {\n                expand: {\n                    effects: \"expand:vertical\",\n                    duration: 200\n                },\n                collapse: { // if collapse animation effects are defined, they will be used instead of expand.reverse\n                    duration: 200\n                }\n            },\n            expandMode: \"multiple\"\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this.element.off(NS);\n\n            kendo.destroy(this.element);\n        },\n\n        _initData: function(options) {\n            var that = this;\n\n            if (options.dataSource) {\n                that.element.empty();\n                that.append(options.dataSource, that.element);\n            }\n        },\n\n        setOptions: function(options) {\n            var animation = this.options.animation;\n\n            this._animations(options);\n\n            options.animation = extend(true, animation, options.animation);\n\n            if (\"dataSource\" in options) {\n                this._initData(options);\n            }\n\n            Widget.fn.setOptions.call(this, options);\n        },\n\n        expand: function (element, useAnimation) {\n            var that = this,\n                animBackup = {};\n            useAnimation = useAnimation !== false;\n            element = this.element.find(element);\n\n            element.each(function (index, item) {\n                item = $(item);\n                var groups = item.find(GROUPS).add(item.find(CONTENTS));\n\n                if (!item.hasClass(DISABLEDCLASS) && groups.length > 0) {\n\n                    if (that.options.expandMode == SINGLE && that._collapseAllExpanded(item)) {\n                        return that;\n                    }\n\n                    element.find(\".\" + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n                    item.addClass(HIGHLIGHTCLASS);\n\n                    if (!useAnimation) {\n                        animBackup = that.options.animation;\n                        that.options.animation = { expand: { effects: {} }, collapse: { hide: true, effects: {} } };\n                    }\n\n                    if (!that._triggerEvent(EXPAND, item)) {\n                        that._toggleItem(item, false);\n                    }\n\n                    if (!useAnimation) {\n                        that.options.animation = animBackup;\n                    }\n                }\n            });\n\n            return that;\n        },\n\n        collapse: function (element, useAnimation) {\n            var that = this,\n                animBackup = {};\n            useAnimation = useAnimation !== false;\n            element = that.element.find(element);\n\n            element.each(function (index, item) {\n                item = $(item);\n                var groups = item.find(GROUPS).add(item.find(CONTENTS));\n\n                if (!item.hasClass(DISABLEDCLASS) && groups.is(VISIBLE)) {\n                    item.removeClass(HIGHLIGHTCLASS);\n\n                    if (!useAnimation) {\n                        animBackup = that.options.animation;\n                        that.options.animation = { expand: { effects: {} }, collapse: { hide: true, effects: {} } };\n                    }\n\n                    if (!that._triggerEvent(COLLAPSE, item)) {\n                        that._toggleItem(item, true);\n                    }\n\n                    if (!useAnimation) {\n                        that.options.animation = animBackup;\n                    }\n                }\n\n            });\n\n            return that;\n        },\n\n        _toggleDisabled: function (element, enable) {\n            element = this.element.find(element);\n            element\n                .toggleClass(defaultState, enable)\n                .toggleClass(DISABLEDCLASS, !enable)\n                .attr(ARIA_DISABLED, !enable);\n        },\n\n        select: function (element) {\n            var that = this;\n\n            if (element === undefined) {\n                return that.element.find(selectableItems).parent();\n            }\n\n            element = that.element.find(element);\n\n            if (!element.length) {\n                this._updateSelected(element);\n            } else {\n                element\n                    .each(function () {\n                        var item = $(this),\n                            link = item.children(LINKSELECTOR);\n\n                        if (item.hasClass(DISABLEDCLASS)) {\n                            return that;\n                        }\n\n                        if (!that._triggerEvent(SELECT, item)) {\n                            that._updateSelected(link);\n                        }\n                    });\n            }\n\n            return that;\n        },\n\n        clearSelection: function() {\n            this.select($());\n        },\n\n        enable: function (element, state) {\n            this._toggleDisabled(element, state !== false);\n\n            return this;\n        },\n\n        disable: function (element) {\n            this._toggleDisabled(element, false);\n\n            return this;\n        },\n\n        append: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.length ? referenceItem.find(GROUPS) : null);\n\n            each(inserted.items, function () {\n                inserted.group.append(this);\n                updateFirstLast(this);\n            });\n\n            updateArrow(referenceItem);\n            updateFirstLast(inserted.group.find(\".k-first, .k-last\"));\n            inserted.group.height(\"auto\");\n\n            return this;\n        },\n\n        insertBefore: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n            each(inserted.items, function () {\n                referenceItem.before(this);\n                updateFirstLast(this);\n            });\n\n            updateFirstLast(referenceItem);\n            inserted.group.height(\"auto\");\n\n            return this;\n        },\n\n        insertAfter: function (item, referenceItem) {\n            referenceItem = this.element.find(referenceItem);\n\n            var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n            each(inserted.items, function () {\n                referenceItem.after(this);\n                updateFirstLast(this);\n            });\n\n            updateFirstLast(referenceItem);\n            inserted.group.height(\"auto\");\n\n            return this;\n        },\n\n        remove: function (element) {\n            element = this.element.find(element);\n\n            var that = this,\n                parent = element.parentsUntil(that.element, ITEM),\n                group = element.parent(\"ul\");\n\n            element.remove();\n\n            if (group && !group.hasClass(\"k-panelbar\") && !group.children(ITEM).length) {\n                group.remove();\n            }\n\n            if (parent.length) {\n                parent = parent.eq(0);\n\n                updateArrow(parent);\n                updateFirstLast(parent);\n            }\n\n            return that;\n        },\n\n        reload: function (element) {\n            var that = this;\n            element = that.element.find(element);\n\n            element.each(function () {\n                var item = $(this);\n\n                that._ajaxRequest(item, item.children(\".\" + CONTENT), !item.is(VISIBLE));\n            });\n        },\n\n        _first: function() {\n            return this.element.children(ACTIVEITEMSELECTOR).first();\n        },\n\n        _last: function() {\n            var item = this.element.children(ACTIVEITEMSELECTOR).last(),\n                group = item.children(VISIBLEGROUP);\n\n            if (group[0]) {\n                return group.children(ACTIVEITEMSELECTOR).last();\n            }\n            return item;\n        },\n\n        _current: function(candidate) {\n            var that = this,\n                focused = that._focused,\n                id = that._itemId;\n\n            if (candidate === undefined) {\n                return focused;\n            }\n\n            that.element.removeAttr(\"aria-activedescendant\");\n\n            if (focused) {\n                if (focused[0].id === id) {\n                    focused.removeAttr(\"id\");\n                }\n\n                focused\n                    .children(LINKSELECTOR)\n                    .removeClass(FOCUSEDCLASS);\n            }\n\n            if (candidate) {\n                id = candidate[0].id || id;\n\n                candidate.attr(\"id\", id)\n                         .children(LINKSELECTOR)\n                         .addClass(FOCUSEDCLASS);\n\n                that.element.attr(\"aria-activedescendant\", id);\n            }\n\n            that._focused = candidate;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                current = that._current();\n\n            if (e.target != e.currentTarget) {\n                return;\n            }\n\n            if (key == keys.DOWN || key == keys.RIGHT) {\n                that._current(that._nextItem(current));\n                e.preventDefault();\n            } else if (key == keys.UP || key == keys.LEFT) {\n                that._current(that._prevItem(current));\n                e.preventDefault();\n            } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n                that._click(current.children(LINKSELECTOR));\n                e.preventDefault();\n            } else if (key == keys.HOME) {\n                that._current(that._first());\n                e.preventDefault();\n            } else if (key == keys.END) {\n                that._current(that._last());\n                e.preventDefault();\n            }\n        },\n\n        _nextItem: function(item) {\n            if (!item) {\n                return this._first();\n            }\n\n            var group = item.children(VISIBLEGROUP),\n                next = item.nextAll(\":visible\").first();\n\n            if (group[0]) {\n                next = group.children(\".\" + FIRST);\n            }\n\n            if (!next[0]) {\n                next = item.parent(VISIBLEGROUP).parent(ITEM).next();\n            }\n\n            if (!next[0]) {\n                next = this._first();\n            }\n\n            if (next.hasClass(DISABLEDCLASS)) {\n                next = this._nextItem(next);\n            }\n\n            return next;\n        },\n\n        _prevItem: function(item) {\n            if (!item) {\n                return this._last();\n            }\n\n            var prev = item.prevAll(\":visible\").first(),\n                result;\n\n            if (!prev[0]) {\n                prev = item.parent(VISIBLEGROUP).parent(ITEM);\n                if (!prev[0]) {\n                    prev = this._last();\n                }\n            } else {\n                result = prev;\n                while (result[0]) {\n                    result = result.children(VISIBLEGROUP).children(\".\" + LAST);\n                    if (result[0]) {\n                        prev = result;\n                    }\n                }\n            }\n\n            if (prev.hasClass(DISABLEDCLASS)) {\n                prev = this._prevItem(prev);\n            }\n\n            return prev;\n        },\n\n        _insert: function (item, referenceItem, parent) {\n            var that = this,\n                items,\n                plain = $.isPlainObject(item),\n                isReferenceItem = referenceItem && referenceItem[0],\n                groupData;\n\n            if (!isReferenceItem) {\n                parent = that.element;\n            }\n\n            groupData = {\n                firstLevel: parent.hasClass(\"k-panelbar\"),\n                expanded: parent.parent().hasClass(ACTIVECLASS),\n                length: parent.children().length\n            };\n\n            if (isReferenceItem && !parent.length) {\n                parent = $(PanelBar.renderGroup({ group: groupData })).appendTo(referenceItem);\n            }\n\n            if (item instanceof kendo.Observable) {\n                item = item.toJSON();\n            }\n\n            if (plain || $.isArray(item)) { // is JSON\n                items = $.map(plain ? [ item ] : item, function (value, idx) {\n                            if (typeof value === \"string\") {\n                                return $(value);\n                            } else {\n                                return $(PanelBar.renderItem({\n                                    group: groupData,\n                                    item: extend(value, { index: idx })\n                                }));\n                            }\n                        });\n\n                if (isReferenceItem) {\n                    referenceItem.attr(ARIA_EXPANDED, false);\n                }\n            } else {\n                if (typeof item == \"string\" && item.charAt(0) != \"<\") {\n                    items = that.element.find(item);\n                } else {\n                    items = $(item);\n                }\n                that._updateItemsClasses(items);\n            }\n\n            return { items: items, group: parent };\n        },\n\n        _toggleHover: function(e) {\n            var target = $(e.currentTarget);\n\n            if (!target.parents(\"li.\" + DISABLEDCLASS).length) {\n                target.toggleClass(\"k-state-hover\", e.type == MOUSEENTER);\n            }\n        },\n\n        _updateClasses: function() {\n            var that = this,\n                panels, items;\n\n            panels = that.element\n                         .find(\"li > ul\")\n                         .not(function () { return $(this).parentsUntil(\".k-panelbar\", \"div\").length; })\n                         .addClass(\"k-group k-panel\")\n                         .attr(\"role\", \"group\");\n\n            panels.parent()\n                  .attr(ARIA_EXPANDED, false)\n                  .not(\".\" + ACTIVECLASS)\n                  .children(\"ul\")\n                  .attr(ARIA_HIDDEN, true)\n                  .hide();\n\n            items = that.element.add(panels).children();\n\n            that._updateItemsClasses(items);\n            updateArrow(items);\n            updateFirstLast(items);\n        },\n\n        _updateItemsClasses: function(items) {\n            var length = items.length,\n                idx = 0;\n\n            for(; idx < length; idx++) {\n                this._updateItemClasses(items[idx], idx);\n            }\n        },\n\n        _updateItemClasses: function(item, index) {\n            var selected = this._selected,\n                contentUrls = this.options.contentUrls,\n                url = contentUrls && contentUrls[index],\n                root = this.element[0],\n                wrapElement, link;\n\n            item = $(item).addClass(\"k-item\").attr(\"role\", \"menuitem\");\n\n            if (kendo.support.browser.msie) {  // IE10 doesn't apply list-style: none on invisible items otherwise.\n                item.css(\"list-style-position\", \"inside\")\n                    .css(\"list-style-position\", \"\");\n            }\n\n            item\n                .children(IMG)\n                .addClass(IMAGE);\n\n            link = item\n                    .children(\"a\")\n                    .addClass(LINK);\n\n            if (link[0]) {\n                link.attr(\"href\", url); //url can be undefined\n\n                link.children(IMG)\n                    .addClass(IMAGE);\n            }\n\n            item\n                .filter(\":not([disabled]):not([class*=k-state])\")\n                .addClass(\"k-state-default\");\n\n            item\n                .filter(\"li[disabled]\")\n                .addClass(\"k-state-disabled\")\n                .attr(ARIA_DISABLED, true)\n                .removeAttr(\"disabled\");\n\n            item\n                .children(\"div\")\n                .addClass(CONTENT)\n                .attr(\"role\", \"region\")\n                .attr(ARIA_HIDDEN, true)\n                .hide()\n                .parent()\n                .attr(ARIA_EXPANDED, false);\n\n            link = item.children(SELECTEDSELECTOR);\n            if (link[0]) {\n                if (selected) {\n                    selected.removeAttr(ARIA_SELECTED)\n                            .children(SELECTEDSELECTOR)\n                            .removeClass(SELECTEDCLASS);\n                }\n\n                link.addClass(SELECTEDCLASS);\n                this._selected = item.attr(ARIA_SELECTED, true);\n            }\n\n            if (!item.children(LINKSELECTOR)[0]) {\n                wrapElement = \"<span class='\" + LINK + \"'/>\";\n                if (contentUrls && contentUrls[index] && item[0].parentNode == root) {\n                    wrapElement = '<a class=\"k-link k-header\" href=\"' + contentUrls[index] + '\"/>';\n                }\n\n                item\n                    .contents()      // exclude groups, real links, templates and empty text nodes\n                    .filter(function() { return (!this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !$.trim(this.nodeValue))); })\n                    .wrapAll(wrapElement);\n            }\n\n            if (item.parent(\".k-panelbar\")[0]) {\n                item\n                    .children(LINKSELECTOR)\n                    .addClass(\"k-header\");\n            }\n        },\n\n        _click: function (target) {\n            var that = this,\n                element = that.element,\n                prevent, contents, href, isAnchor;\n\n            if (target.parents(\"li.\" + DISABLEDCLASS).length) {\n                return;\n            }\n\n            if (target.closest(\".k-widget\")[0] != element[0]) {\n                return;\n            }\n\n            var link = target.closest(LINKSELECTOR),\n                item = link.closest(ITEM);\n\n            that._updateSelected(link);\n\n            contents = item.find(GROUPS).add(item.find(CONTENTS));\n            href = link.attr(HREF);\n            isAnchor = href && (href.charAt(href.length - 1) == \"#\" || href.indexOf(\"#\" + that.element[0].id + \"-\") != -1);\n            prevent = !!(isAnchor || contents.length);\n\n            if (contents.data(\"animating\")) {\n                return prevent;\n            }\n\n            if (that._triggerEvent(SELECT, item)) {\n                prevent = true;\n            }\n\n            if (prevent === false) {\n                return;\n            }\n\n            if (that.options.expandMode == SINGLE) {\n                if (that._collapseAllExpanded(item)) {\n                    return prevent;\n                }\n            }\n\n            if (contents.length) {\n                var visibility = contents.is(VISIBLE);\n\n                if (!that._triggerEvent(!visibility ? EXPAND : COLLAPSE, item)) {\n                    prevent = that._toggleItem(item, visibility);\n                }\n            }\n\n            return prevent;\n        },\n\n        _toggleItem: function (element, isVisible) {\n            var that = this,\n                childGroup = element.find(GROUPS),\n                link = element.find(LINKSELECTOR),\n                url = link.attr(HREF),\n                prevent, content;\n\n            if (childGroup.length) {\n                this._toggleGroup(childGroup, isVisible);\n                prevent = true;\n            } else {\n                content = element.children(\".\"  + CONTENT);\n\n                if (content.length) {\n                    prevent = true;\n\n                    if (!content.is(EMPTY) || url === undefined) {\n                        that._toggleGroup(content, isVisible);\n                    } else {\n                        that._ajaxRequest(element, content, isVisible);\n                    }\n                }\n            }\n            return prevent;\n        },\n\n        _toggleGroup: function (element, visibility) {\n            var that = this,\n                animationSettings = that.options.animation,\n                animation = animationSettings.expand,\n                collapse = extend({}, animationSettings.collapse),\n                hasCollapseAnimation = collapse && \"effects\" in collapse;\n\n            if (element.is(VISIBLE) != visibility) {\n                return;\n            }\n\n            element\n                .parent()\n                .attr(ARIA_EXPANDED, !visibility)\n                .attr(ARIA_HIDDEN, visibility)\n                .toggleClass(ACTIVECLASS, !visibility)\n                .find(\"> .k-link > .k-icon\")\n                    .toggleClass(\"k-i-arrow-n\", !visibility)\n                    .toggleClass(\"k-panelbar-collapse\", !visibility)\n                    .toggleClass(\"k-i-arrow-s\", visibility)\n                    .toggleClass(\"k-panelbar-expand\", visibility);\n\n            if (visibility) {\n                animation = extend( hasCollapseAnimation ? collapse\n                                    : extend({ reverse: true }, animation), { hide: true });\n            } else {\n                animation = extend( { complete: function (element) {\n                    that._triggerEvent(ACTIVATE, element.closest(ITEM));\n                } }, animation );\n            }\n\n            element\n                .kendoStop(true, true)\n                .kendoAnimate( animation );\n        },\n\n        _collapseAllExpanded: function (item) {\n            var that = this, children, stopExpand = false;\n\n            var groups = item.find(GROUPS).add(item.find(CONTENTS));\n\n            if (groups.is(VISIBLE)) {\n                stopExpand = true;\n            }\n\n            if (!(groups.is(VISIBLE) || groups.length === 0)) {\n                children = item.siblings();\n                children.find(GROUPS).add(children.find(CONTENTS))\n                        .filter(function () { return $(this).is(VISIBLE); })\n                        .each(function (index, content) {\n                            content = $(content);\n\n                            stopExpand = that._triggerEvent(COLLAPSE, content.closest(ITEM));\n                            if (!stopExpand) {\n                                that._toggleGroup(content, true);\n                            }\n                        });\n            }\n\n            return stopExpand;\n        },\n\n        _ajaxRequest: function (element, contentElement, isVisible) {\n\n            var that = this,\n                statusIcon = element.find(\".k-panelbar-collapse, .k-panelbar-expand\"),\n                link = element.find(LINKSELECTOR),\n                loadingIconTimeout = setTimeout(function () {\n                    statusIcon.addClass(\"k-loading\");\n                }, 100),\n                data = {},\n                url = link.attr(HREF);\n\n            $.ajax({\n                type: \"GET\",\n                cache: false,\n                url: url,\n                dataType: \"html\",\n                data: data,\n\n                error: function (xhr, status) {\n                    statusIcon.removeClass(\"k-loading\");\n                    if (that.trigger(ERROR, { xhr: xhr, status: status })) {\n                        this.complete();\n                    }\n                },\n\n                complete: function () {\n                    clearTimeout(loadingIconTimeout);\n                    statusIcon.removeClass(\"k-loading\");\n                },\n\n                success: function (data) {\n                    function getElements(){\n                        return { elements: contentElement.get() };\n                    }\n                    try {\n                        that.angular(\"cleanup\", getElements);\n                        contentElement.html(data);\n                        that.angular(\"compile\", getElements);\n                    } catch (e) {\n                        var console = window.console;\n\n                        if (console && console.error) {\n                            console.error(e.name + \": \" + e.message + \" in \" + url);\n                        }\n                        this.error(this.xhr, \"error\");\n                    }\n\n                    that._toggleGroup(contentElement, isVisible);\n\n                    that.trigger(CONTENTLOAD, { item: element[0], contentElement: contentElement[0] });\n                }\n            });\n        },\n\n        _triggerEvent: function (eventName, element) {\n            var that = this;\n\n            return that.trigger(eventName, { item: element[0] });\n        },\n\n        _updateSelected: function(link) {\n            var that = this,\n                element = that.element,\n                item = link.parent(ITEM),\n                selected = that._selected;\n\n            if (selected) {\n                selected.removeAttr(ARIA_SELECTED);\n            }\n\n            that._selected = item.attr(ARIA_SELECTED, true);\n\n            element.find(selectableItems).removeClass(SELECTEDCLASS);\n            element.find(\"> .\" + HIGHLIGHTCLASS + \", .k-panel > .\" + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n\n            link.addClass(SELECTEDCLASS);\n            link.parentsUntil(element, ITEM).filter(\":has(.k-header)\").addClass(HIGHLIGHTCLASS);\n            that._current(item[0] ? item : null);\n        },\n\n        _animations: function(options) {\n            if (options && (\"animation\" in options) && !options.animation) {\n                options.animation = { expand: { effects: {} }, collapse: { hide: true, effects: {} } };\n            }\n        }\n\n    });\n\n    // client-side rendering\n    extend(PanelBar, {\n        renderItem: function (options) {\n            options = extend({ panelBar: {}, group: {} }, options);\n\n            var empty = templates.empty,\n                item = options.item;\n\n            return templates.item(extend(options, {\n                image: item.imageUrl ? templates.image : empty,\n                sprite: item.spriteCssClass ? templates.sprite : empty,\n                itemWrapper: templates.itemWrapper,\n                renderContent: PanelBar.renderContent,\n                arrow: item.items || item.content || item.contentUrl ? templates.arrow : empty,\n                subGroup: PanelBar.renderGroup\n            }, rendering));\n        },\n\n        renderGroup: function (options) {\n            return templates.group(extend({\n                renderItems: function(options) {\n                    var html = \"\",\n                        i = 0,\n                        items = options.items,\n                        len = items ? items.length : 0,\n                        group = extend({ length: len }, options.group);\n\n                    for (; i < len; i++) {\n                        html += PanelBar.renderItem(extend(options, {\n                            group: group,\n                            item: extend({ index: i }, items[i])\n                        }));\n                    }\n\n                    return html;\n                }\n            }, options, rendering));\n        },\n\n        renderContent: function (options) {\n            return templates.content(extend(options, rendering));\n        }\n    });\n\n    kendo.ui.plugin(PanelBar);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        HORIZONTAL = \"horizontal\",\n        VERTICAL = \"vertical\",\n        DEFAULTMIN = 0,\n        DEFAULTMAX = 100,\n        DEFAULTVALUE = 0,\n        DEFAULTCHUNKCOUNT = 5,\n        KPROGRESSBAR = \"k-progressbar\",\n        KPROGRESSBARREVERSE = \"k-progressbar-reverse\",\n        KPROGRESSBARINDETERMINATE = \"k-progressbar-indeterminate\",\n        KPROGRESSBARCOMPLETE = \"k-complete\",\n        KPROGRESSWRAPPER = \"k-state-selected\",\n        KPROGRESSSTATUS = \"k-progress-status\",\n        KCOMPLETEDCHUNK = \"k-state-selected\",\n        KUPCOMINGCHUNK = \"k-state-default\",\n        KSTATEDISABLED = \"k-state-disabled\",\n        PROGRESSTYPE = {\n            VALUE: \"value\",\n            PERCENT: \"percent\",\n            CHUNK: \"chunk\"\n        },\n        CHANGE = \"change\",\n        COMPLETE = \"complete\",\n        BOOLEAN = \"boolean\",\n        math = Math,\n        extend = $.extend,\n        proxy = $.proxy,\n        HUNDREDPERCENT = 100,\n        DEFAULTANIMATIONDURATION = 400,\n        PRECISION = 3,\n        templates = {\n            progressStatus: \"<span class='k-progress-status-wrap'><span class='k-progress-status'></span></span>\"\n        };\n\n    var ProgressBar = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(this, element, options);\n\n            options = that.options;\n\n            that._progressProperty = (options.orientation === HORIZONTAL) ? \"width\" : \"height\";\n\n            that._fields();\n\n            options.value = that._validateValue(options.value);\n\n            that._validateType(options.type);\n\n            that._wrapper();\n\n            that._progressAnimation();\n\n            if ((options.value !== options.min) && (options.value !== false)) {\n               that._updateProgress();\n            }\n        },\n\n        setOptions: function(options) {\n            var that = this;\n            \n            Widget.fn.setOptions.call(that, options);\n\n            if (options.hasOwnProperty(\"reverse\")) {\n                that.wrapper.toggleClass(\"k-progressbar-reverse\", options.reverse);\n            }\n\n            if (options.hasOwnProperty(\"enable\")) {\n                that.enable(options.enable);\n            }\n\n            that._progressAnimation();\n\n            that._validateValue();\n\n            that._updateProgress();\n        },\n\n        events: [\n            CHANGE,\n            COMPLETE\n        ],\n\n        options: {\n            name: \"ProgressBar\",\n            orientation: HORIZONTAL,\n            reverse: false,\n            min: DEFAULTMIN,\n            max: DEFAULTMAX,\n            value: DEFAULTVALUE,\n            enable: true,\n            type: PROGRESSTYPE.VALUE,\n            chunkCount: DEFAULTCHUNKCOUNT,\n            showStatus: true,\n            animation: { }\n        },\n\n        _fields: function() {\n            var that = this;\n\n            that._isStarted = false;\n\n            that.progressWrapper = that.progressStatus = $();\n        },\n\n        _validateType: function(currentType) {\n            var isValid = false;\n\n            $.each(PROGRESSTYPE, function(k, type) {\n                if (type === currentType) {\n                    isValid = true;\n                    return false;\n                }\n            });\n\n            if (!isValid) {\n                throw new Error(kendo.format(\"Invalid ProgressBar type '{0}'\", currentType));\n            }\n        },\n\n        _wrapper: function() {\n            var that = this;\n            var container = that.wrapper = that.element;\n            var options = that.options;\n            var orientation = options.orientation;\n            var initialStatusValue;\n\n            container.addClass(\"k-widget \" + KPROGRESSBAR);\n\n            container.addClass(KPROGRESSBAR + \"-\" + ((orientation === HORIZONTAL) ? HORIZONTAL : VERTICAL));\n\n            if(options.enable === false) {\n                container.addClass(KSTATEDISABLED);\n            }\n\n            if (options.reverse) {\n                container.addClass(KPROGRESSBARREVERSE);\n            }\n\n            if (options.value === false) {\n                container.addClass(KPROGRESSBARINDETERMINATE);\n            }\n\n            if (options.type === PROGRESSTYPE.CHUNK) {\n                that._addChunkProgressWrapper();\n            } else {\n                if (options.showStatus){\n                    that.progressStatus = that.wrapper.prepend(templates.progressStatus)\n                                              .find(\".\" + KPROGRESSSTATUS);\n\n                    initialStatusValue = (options.value !== false) ? options.value : options.min;\n\n                    if (options.type === PROGRESSTYPE.VALUE) {\n                        that.progressStatus.text(initialStatusValue);\n                    } else {\n                        that.progressStatus.text(that._calculatePercentage(initialStatusValue) + \"%\");\n                    }\n                }\n            }\n        },\n\n        value: function(value) {\n            return this._value(value);\n        },\n\n        _value: function(value){\n            var that = this;\n            var options = that.options;\n            var validated;\n\n            if (value === undefined) {\n                return options.value;\n            } else {\n                if (typeof value !== BOOLEAN) {\n                    value = that._roundValue(value);\n\n                    if(!isNaN(value)) {\n                        validated = that._validateValue(value);\n\n                        if (validated !== options.value) {\n                            that.wrapper.removeClass(KPROGRESSBARINDETERMINATE);\n\n                            options.value = validated;\n\n                            that._isStarted = true;\n\n                            that._updateProgress();\n                        }\n                    }\n                } else if (!value) {\n                    that.wrapper.addClass(KPROGRESSBARINDETERMINATE);\n                    options.value = false;\n                }\n            }\n        },\n\n        _roundValue: function(value) {\n            value = parseFloat(value);\n\n            var power = math.pow(10, PRECISION);\n\n            return math.floor(value * power) / power;\n        },\n\n        _validateValue: function(value) {\n            var that = this;\n            var options = that.options;\n\n            if (value !== false) {\n                if (value <= options.min || value === true) {\n                    return options.min;\n                } else if (value >= options.max) {\n                    return options.max;\n                }\n            } else if (value === false) {\n                return false;\n            }\n\n            if(isNaN(that._roundValue(value))) {\n                return options.min;\n            }\n\n            return value;\n        },\n\n        _updateProgress: function() {\n            var that = this;\n            var options = that.options;\n            var percentage = that._calculatePercentage();\n\n            if (options.type === PROGRESSTYPE.CHUNK) {\n                that._updateChunks(percentage);\n                that._onProgressUpdateAlways(options.value);\n            } else {\n                that._updateProgressWrapper(percentage);\n            }\n        },\n\n        _updateChunks: function(percentage) {\n            var that = this;\n            var options = that.options;\n            var chunkCount = options.chunkCount;\n            var percentagesPerChunk =  parseInt((HUNDREDPERCENT / chunkCount) * 100, 10) / 100;\n            var percentageParsed = parseInt(percentage * 100, 10) / 100;\n            var completedChunksCount = math.floor(percentageParsed / percentagesPerChunk);\n            var completedChunks;\n\n            if((options.orientation === HORIZONTAL && !(options.reverse)) ||\n               (options.orientation === VERTICAL && options.reverse)) {\n                completedChunks = that.wrapper.find(\"li.k-item:lt(\" + completedChunksCount + \")\");\n            } else {\n                completedChunks = that.wrapper.find(\"li.k-item:gt(-\" + (completedChunksCount + 1) + \")\");\n            }\n\n            that.wrapper.find(\".\" + KCOMPLETEDCHUNK)\n                        .removeClass(KCOMPLETEDCHUNK)\n                        .addClass(KUPCOMINGCHUNK);\n\n            completedChunks.removeClass(KUPCOMINGCHUNK)\n                           .addClass(KCOMPLETEDCHUNK);\n        },\n\n        _updateProgressWrapper: function(percentage) {\n            var that = this;\n            var options = that.options;\n            var progressWrapper = that.wrapper.find(\".\" + KPROGRESSWRAPPER);\n            var animationDuration = that._isStarted ? that._animation.duration : 0;\n            var animationCssOptions = { };\n\n            if (progressWrapper.length === 0) {\n                that._addRegularProgressWrapper();\n            }\n\n            animationCssOptions[that._progressProperty] = percentage + \"%\";\n            that.progressWrapper.animate(animationCssOptions, {\n                duration: animationDuration,\n                start: proxy(that._onProgressAnimateStart, that),\n                progress: proxy(that._onProgressAnimate, that),\n                complete: proxy(that._onProgressAnimateComplete, that, options.value),\n                always: proxy(that._onProgressUpdateAlways, that, options.value)\n            });\n        },\n\n        _onProgressAnimateStart: function() {\n            this.progressWrapper.show();\n        },\n\n        _onProgressAnimate: function(e) {\n            var that = this;\n            var options = that.options;\n            var progressInPercent = parseFloat(e.elem.style[that._progressProperty], 10);\n            var progressStatusWrapSize;\n\n            if (options.showStatus) {\n                progressStatusWrapSize = 10000 / parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n\n                that.progressWrapper.find(\".k-progress-status-wrap\").css(that._progressProperty, progressStatusWrapSize + \"%\");\n            }\n\n            if (options.type !== PROGRESSTYPE.CHUNK && progressInPercent <= 98) {\n                that.progressWrapper.removeClass(KPROGRESSBARCOMPLETE);\n            }\n        },\n\n        _onProgressAnimateComplete: function(currentValue) {\n            var that = this;\n            var options = that.options;\n            var progressWrapperSize = parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n\n            if (options.type !== PROGRESSTYPE.CHUNK && progressWrapperSize > 98) {\n                that.progressWrapper.addClass(KPROGRESSBARCOMPLETE);\n            }\n\n            if (options.showStatus) {\n                if (options.type === PROGRESSTYPE.VALUE) {\n                    that.progressStatus.text(currentValue);\n                } else {\n                    that.progressStatus.text(math.floor(that._calculatePercentage(currentValue)) + \"%\");\n                }\n            }\n\n            if (currentValue === options.min) {\n                that.progressWrapper.hide();\n            }\n        },\n\n        _onProgressUpdateAlways: function(currentValue) {\n            var that = this;\n            var options = that.options;\n\n            if (that._isStarted) {\n                that.trigger(CHANGE, { value: currentValue });\n            }\n\n            if (currentValue === options.max && that._isStarted) {\n                that.trigger(COMPLETE, { value: options.max });\n            }\n        },\n\n        enable: function(enable) {\n            var that = this;\n            var options = that.options;\n\n            options.enable = typeof(enable) === \"undefined\" ? true : enable;\n            that.wrapper.toggleClass(KSTATEDISABLED, !options.enable);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n        },\n\n        _addChunkProgressWrapper: function () {\n            var that = this;\n            var options = that.options;\n            var container = that.wrapper;\n            var chunkSize = HUNDREDPERCENT / options.chunkCount;\n            var html = \"\";\n\n            if (options.chunkCount <= 1) {\n                options.chunkCount = DEFAULTCHUNKCOUNT;\n            }\n\n            html += \"<ul class='k-reset'>\";\n            for (var i = options.chunkCount - 1; i >= 0; i--) {\n                html += \"<li class='k-item k-state-default'></li>\";\n            }\n            html += \"</ul>\";\n\n            container.append(html).find(\".k-item\").css(that._progressProperty, chunkSize + \"%\")\n                     .first().addClass(\"k-first\")\n                     .end()\n                     .last().addClass(\"k-last\");\n\n            that._normalizeChunkSize();\n        },\n\n        _normalizeChunkSize: function() {\n            var that = this;\n            var options = that.options;\n            var lastChunk = that.wrapper.find(\".k-item:last\");\n            var currentSize = parseFloat(lastChunk[0].style[that._progressProperty]);\n            var difference = HUNDREDPERCENT - (options.chunkCount * currentSize);\n\n            if (difference > 0) {\n                lastChunk.css(that._progressProperty, (currentSize + difference) + \"%\");\n            }\n        },\n\n        _addRegularProgressWrapper: function() {\n            var that = this;\n\n            that.progressWrapper = $(\"<div class='\" + KPROGRESSWRAPPER + \"'></div>\").appendTo(that.wrapper);\n\n            if (that.options.showStatus) {\n                that.progressWrapper.append(templates.progressStatus);\n\n                that.progressStatus = that.wrapper.find(\".\" + KPROGRESSSTATUS);\n            }\n        },\n\n        _calculateChunkSize: function() {\n            var that = this;\n            var chunkCount = that.options.chunkCount;\n            var chunkContainer = that.wrapper.find(\"ul.k-reset\");\n\n            return (parseInt(chunkContainer.css(that._progressProperty), 10) - (chunkCount - 1)) / chunkCount;\n        },\n\n        _calculatePercentage: function(currentValue) {\n            var that = this;\n            var options = that.options;\n            var value = (currentValue !== undefined) ? currentValue : options.value;\n            var min = options.min;\n            var max = options.max;\n            that._onePercent = math.abs((max - min) / 100);\n\n            return math.abs((value - min) / that._onePercent);\n        },\n\n        _progressAnimation: function() {\n            var that = this;\n            var options = that.options;\n            var animation = options.animation;\n\n            if (animation === false) {\n                that._animation = { duration: 0 };\n            } else {\n                that._animation = extend({\n                    duration: DEFAULTANIMATIONDURATION\n                }, options.animation);\n            }\n        }\n    });\n\n    kendo.ui.plugin(ProgressBar);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        keys = kendo.keys,\n        map = $.map,\n        each = $.each,\n        trim = $.trim,\n        extend = $.extend,\n        template = kendo.template,\n        Widget = ui.Widget,\n        excludedNodesRegExp = /^(a|div)$/i,\n        NS = \".kendoTabStrip\",\n        IMG = \"img\",\n        HREF = \"href\",\n        PREV = \"prev\",\n        SHOW = \"show\",\n        LINK = \"k-link\",\n        LAST = \"k-last\",\n        CLICK = \"click\",\n        ERROR = \"error\",\n        EMPTY = \":empty\",\n        IMAGE = \"k-image\",\n        FIRST = \"k-first\",\n        SELECT = \"select\",\n        ACTIVATE = \"activate\",\n        CONTENT = \"k-content\",\n        CONTENTURL = \"contentUrl\",\n        MOUSEENTER = \"mouseenter\",\n        MOUSELEAVE = \"mouseleave\",\n        CONTENTLOAD = \"contentLoad\",\n        DISABLEDSTATE = \"k-state-disabled\",\n        DEFAULTSTATE = \"k-state-default\",\n        ACTIVESTATE = \"k-state-active\",\n        FOCUSEDSTATE = \"k-state-focused\",\n        HOVERSTATE = \"k-state-hover\",\n        TABONTOP = \"k-tab-on-top\",\n        NAVIGATABLEITEMS = \".k-item:not(.\" + DISABLEDSTATE + \")\",\n        HOVERABLEITEMS = \".k-tabstrip-items > \" + NAVIGATABLEITEMS + \":not(.\" + ACTIVESTATE + \")\",\n\n        templates = {\n            content: template(\n                \"<div class='k-content'#= contentAttributes(data) # role='tabpanel'>#= content(item) #</div>\"\n            ),\n            itemWrapper: template(\n                \"<#= tag(item) # class='k-link'#= contentUrl(item) ##= textAttributes(item) #>\" +\n                    \"#= image(item) ##= sprite(item) ##= text(item) #\" +\n                \"</#= tag(item) #>\"\n            ),\n            item: template(\n                \"<li class='#= wrapperCssClass(group, item) #' role='tab' #=item.active ? \\\"aria-selected='true'\\\" : ''#>\" +\n                    \"#= itemWrapper(data) #\" +\n                \"</li>\"\n            ),\n            image: template(\"<img class='k-image' alt='' src='#= imageUrl #' />\"),\n            sprite: template(\"<span class='k-sprite #= spriteCssClass #'></span>\"),\n            empty: template(\"\")\n        },\n\n        rendering = {\n            wrapperCssClass: function (group, item) {\n                var result = \"k-item\",\n                    index = item.index;\n\n                if (item.enabled === false) {\n                    result += \" k-state-disabled\";\n                } else {\n                    result += \" k-state-default\";\n                }\n\n                if (index === 0) {\n                    result += \" k-first\";\n                }\n\n                if (index == group.length-1) {\n                    result += \" k-last\";\n                }\n\n                return result;\n            },\n            textAttributes: function(item) {\n                return item.url ? \" href='\" + item.url + \"'\" : \"\";\n            },\n            text: function(item) {\n                return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n            },\n            tag: function(item) {\n                return item.url ? \"a\" : \"span\";\n            },\n            contentAttributes: function(content) {\n                return content.active !== true ? \" style='display:none' aria-hidden='true' aria-expanded='false'\" : \"\";\n            },\n            content: function(item) {\n                return item.content ? item.content : item.contentUrl ? \"\" : \"&nbsp;\";\n            },\n            contentUrl: function(item) {\n                return item.contentUrl ? kendo.attr(\"content-url\") + '=\"' + item.contentUrl + '\"' : \"\";\n            }\n        };\n\n    function updateTabClasses (tabs) {\n        tabs.children(IMG)\n            .addClass(IMAGE);\n\n        tabs.children(\"a\")\n            .addClass(LINK)\n            .children(IMG)\n            .addClass(IMAGE);\n\n        tabs.filter(\":not([disabled]):not([class*=k-state-disabled])\")\n            .addClass(DEFAULTSTATE);\n\n        tabs.filter(\"li[disabled]\")\n            .addClass(DISABLEDSTATE)\n            .removeAttr(\"disabled\");\n\n        tabs.filter(\":not([class*=k-state])\")\n            .children(\"a\")\n            .filter(\":focus\")\n            .parent()\n            .addClass(ACTIVESTATE + \" \" + TABONTOP);\n\n        tabs.attr(\"role\", \"tab\");\n        tabs.filter(\".\" + ACTIVESTATE)\n            .attr(\"aria-selected\", true);\n\n\n        tabs.each(function() {\n            var item = $(this);\n\n            if (!item.children(\".\" + LINK).length) {\n                item\n                    .contents()      // exclude groups, real links, templates and empty text nodes\n                    .filter(function() { return (!this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !trim(this.nodeValue))); })\n                    .wrapAll(\"<span class='\" + LINK + \"'/>\");\n            }\n        });\n\n    }\n\n    function updateFirstLast (tabGroup) {\n        var tabs = tabGroup.children(\".k-item\");\n\n        tabs.filter(\".k-first:not(:first-child)\").removeClass(FIRST);\n        tabs.filter(\".k-last:not(:last-child)\").removeClass(LAST);\n        tabs.filter(\":first-child\").addClass(FIRST);\n        tabs.filter(\":last-child\").addClass(LAST);\n    }\n\n    var TabStrip = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._animations(that.options);\n\n            options = that.options;\n\n            that._wrapper();\n\n            that._isRtl = kendo.support.isRtl(that.wrapper);\n\n            that._tabindex();\n\n            that._updateClasses();\n\n            that._dataSource();\n\n            if (options.dataSource) {\n                that.dataSource.fetch();\n            }\n\n            if (that.options.contentUrls) {\n                that.wrapper.find(\".k-tabstrip-items > .k-item\")\n                    .each(function(index, item) {\n                        $(item).find(\">.\" + LINK).data(CONTENTURL, that.options.contentUrls[index]);\n                    });\n            }\n\n            that.wrapper\n                .on(MOUSEENTER + NS + \" \" + MOUSELEAVE + NS, HOVERABLEITEMS, that._toggleHover)\n                .on(\"focus\" + NS, $.proxy(that._active, that))\n                .on(\"blur\" + NS, function() { that._current(null); });\n\n            that._keyDownProxy = $.proxy(that._keydown, that);\n\n            if (options.navigatable) {\n                that.wrapper.on(\"keydown\" + NS, that._keyDownProxy);\n            }\n\n            that.wrapper.children(\".k-tabstrip-items\")\n                .on(CLICK + NS, \".k-state-disabled .k-link\", false)\n                .on(CLICK + NS, \" > \" + NAVIGATABLEITEMS, function (e) {\n                    var wr = that.wrapper[0];\n                    if (wr !== document.activeElement) {\n                        var msie = kendo.support.browser.msie;\n                        if (msie) {\n                            try {\n                                // does not scroll to the active element\n                                wr.setActive();\n                            } catch (j) {\n                                wr.focus();\n                            }\n                        } else {\n                            wr.focus();\n                        }\n                    }\n\n                    if (that._click($(e.currentTarget))) {\n                        e.preventDefault();\n                    }\n                });\n\n            var selectedItems = that.tabGroup.children(\"li.\" + ACTIVESTATE),\n                content = that.contentHolder(selectedItems.index());\n\n            if (selectedItems[0] && content.length > 0 && content[0].childNodes.length === 0) {\n                that.activateTab(selectedItems.eq(0));\n            }\n\n            that.element.attr(\"role\", \"tablist\");\n\n            if (that.element[0].id) {\n                that._ariaId = that.element[0].id + \"_ts_active\";\n            }\n\n            kendo.notify(that);\n        },\n\n        _active: function() {\n            var item = this.tabGroup.children().filter(\".\" + ACTIVESTATE);\n\n            item = item[0] ? item : this._endItem(\"first\");\n            if (item[0]) {\n                this._current(item);\n            }\n        },\n\n        _endItem: function(action) {\n            return this.tabGroup.children(NAVIGATABLEITEMS)[action]();\n        },\n\n        _item: function(item, action) {\n            var endItem;\n            if (action === PREV) {\n                endItem = \"last\";\n            } else {\n                endItem = \"first\";\n            }\n\n            if (!item) {\n                return this._endItem(endItem);\n            }\n\n            item = item[action]();\n\n            if (!item[0]) {\n                item = this._endItem(endItem);\n            }\n\n            if (item.hasClass(DISABLEDSTATE)) {\n                item = this._item(item, action);\n            }\n\n            return item;\n        },\n\n        _current: function(candidate) {\n            var that = this,\n                focused = that._focused,\n                id = that._ariaId;\n\n            if (candidate === undefined) {\n                return focused;\n            }\n\n            if (focused) {\n                if (focused[0].id === id) {\n                    focused.removeAttr(\"id\");\n                }\n                focused.removeClass(FOCUSEDSTATE);\n            }\n\n            if (candidate) {\n                if (!candidate.hasClass(ACTIVESTATE)) {\n                    candidate.addClass(FOCUSEDSTATE);\n                }\n\n                that.element.removeAttr(\"aria-activedescendant\");\n\n                id = candidate[0].id || id;\n\n                if (id) {\n                    candidate.attr(\"id\", id);\n                    that.element.attr(\"aria-activedescendant\", id);\n                }\n            }\n\n            that._focused = candidate;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                current = that._current(),\n                rtl = that._isRtl,\n                action;\n\n            if (e.target != e.currentTarget) {\n                return;\n            }\n\n            if (key == keys.DOWN || key == keys.RIGHT) {\n                action = rtl ? PREV : \"next\";\n            } else if (key == keys.UP || key == keys.LEFT) {\n                action = rtl ? \"next\" : PREV;\n            } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n                that._click(current);\n                e.preventDefault();\n            } else if (key == keys.HOME) {\n                that._click(that._endItem(\"first\"));\n                e.preventDefault();\n                return;\n            } else if (key == keys.END) {\n                that._click(that._endItem(\"last\"));\n                e.preventDefault();\n                return;\n            }\n\n            if (action) {\n                that._click(that._item(current, action));\n                e.preventDefault();\n            }\n        },\n\n        _dataSource: function() {\n            var that = this;\n\n            if (that.dataSource && that._refreshHandler) {\n                that.dataSource.unbind(\"change\", that._refreshHandler);\n            } else {\n                that._refreshHandler = $.proxy(that.refresh, that);\n            }\n\n            that.dataSource = kendo.data.DataSource.create(that.options.dataSource)\n                                .bind(\"change\", that._refreshHandler);\n        },\n\n        setDataSource: function(dataSource) {\n            var that = this;\n\n            that.options.dataSource = dataSource;\n            that._dataSource();\n            that.dataSource.fetch();\n        },\n\n        _animations: function(options) {\n            if (options && (\"animation\" in options) && !options.animation) {\n                options.animation = { open: { effects: {} }, close: { effects: {} } }; // No animation\n            }\n        },\n\n        refresh: function(e) {\n            var that = this,\n                options = that.options,\n                text = kendo.getter(options.dataTextField),\n                content = kendo.getter(options.dataContentField),\n                contentUrl = kendo.getter(options.dataContentUrlField),\n                image = kendo.getter(options.dataImageUrlField),\n                url = kendo.getter(options.dataUrlField),\n                sprite = kendo.getter(options.dataSpriteCssClass),\n                idx,\n                tabs = [],\n                tab,\n                action,\n                view = that.dataSource.view(),\n                length;\n\n\n            e = e || {};\n            action = e.action;\n\n            if (action) {\n               view = e.items;\n            }\n\n            for (idx = 0, length = view.length; idx < length; idx ++) {\n                tab = {\n                    text: text(view[idx])\n                };\n\n                if (options.dataContentField) {\n                    tab.content = content(view[idx]);\n                }\n\n                if (options.dataContentUrlField) {\n                    tab.contentUrl = contentUrl(view[idx]);\n                }\n\n                if (options.dataUrlField) {\n                    tab.url = url(view[idx]);\n                }\n\n                if (options.dataImageUrlField) {\n                    tab.imageUrl = image(view[idx]);\n                }\n\n                if (options.dataSpriteCssClass) {\n                    tab.spriteCssClass = sprite(view[idx]);\n                }\n\n                tabs[idx] = tab;\n            }\n\n            if (e.action == \"add\") {\n                if (e.index < that.tabGroup.children().length) {\n                    that.insertBefore(tabs, that.tabGroup.children().eq(e.index));\n                } else {\n                    that.append(tabs);\n                }\n            } else if (e.action == \"remove\") {\n                for (idx = 0; idx < view.length; idx++) {\n                   that.remove(e.index);\n                }\n            } else if (e.action == \"itemchange\") {\n                idx = that.dataSource.view().indexOf(view[0]);\n                if (e.field === options.dataTextField) {\n                    that.tabGroup.children().eq(idx).find(\".k-link\").text(view[0].get(e.field));\n                }\n            } else {\n                that.trigger(\"dataBinding\");\n                that.remove(\"li\");\n                that.append(tabs);\n                that.trigger(\"dataBound\");\n            }\n        },\n\n        value: function(value) {\n            var that = this;\n\n            if (value !== undefined) {\n                if (value != that.value()) {\n                   that.tabGroup.children().each(function() {\n                        if ($.trim($(this).text()) == value) {\n                            that.select(this);\n                        }\n                   });\n                }\n            } else {\n                return that.select().text();\n            }\n        },\n\n        items: function() {\n            return this.tabGroup[0].children;\n        },\n\n        setOptions: function(options) {\n            var that = this,\n                animation = that.options.animation;\n\n            that._animations(options);\n\n            options.animation = extend(true, animation, options.animation);\n\n            if (options.navigatable) {\n                that.wrapper.on(\"keydown\" + NS,  that._keyDownProxy);\n            } else {\n                that.wrapper.off(\"keydown\" + NS,  that._keyDownProxy);\n            }\n\n            Widget.fn.setOptions.call(that, options);\n        },\n\n        events: [\n            SELECT,\n            ACTIVATE,\n            SHOW,\n            ERROR,\n            CONTENTLOAD,\n            \"change\",\n            \"dataBinding\",\n            \"dataBound\"\n        ],\n\n        options: {\n            name: \"TabStrip\",\n            dataTextField: \"\",\n            dataContentField: \"\",\n            dataImageUrlField: \"\",\n            dataUrlField: \"\",\n            dataSpriteCssClass: \"\",\n            dataContentUrlField: \"\",\n            animation: {\n                open: {\n                    effects: \"expand:vertical fadeIn\",\n                    duration: 200\n                },\n                close: { // if close animation effects are defined, they will be used instead of open.reverse\n                    duration: 200\n                }\n            },\n            collapsible: false,\n            navigatable: true,\n            contentUrls: false\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            if (that._refreshHandler) {\n                that.dataSource.unbind(\"change\", that._refreshHandler);\n            }\n\n            that.wrapper.off(NS);\n            that.wrapper.children(\".k-tabstrip-items\").off(NS);\n\n            that.scrollWrap.children(\".k-tabstrip\").unwrap();\n\n            kendo.destroy(that.wrapper);\n        },\n\n        select: function (element) {\n            var that = this;\n\n            if (arguments.length === 0) {\n                return that.tabGroup.children(\"li.\" + ACTIVESTATE);\n            }\n\n            if (!isNaN(element)) {\n                element = that.tabGroup.children().get(element);\n            }\n\n            element = that.tabGroup.find(element);\n            $(element).each(function (index, item) {\n                item = $(item);\n                if (!item.hasClass(ACTIVESTATE) && !that.trigger(SELECT, { item: item[0], contentElement: that.contentHolder(item.index())[0] })) {\n                    that.activateTab(item);\n                }\n            });\n\n            return that;\n        },\n\n        enable: function (element, state) {\n            this._toggleDisabled(element, state !== false);\n\n            return this;\n        },\n\n        disable: function (element) {\n            this._toggleDisabled(element, false);\n\n            return this;\n        },\n\n        reload: function (element) {\n            element = this.tabGroup.find(element);\n            var that = this;\n\n            element.each(function () {\n                var item = $(this),\n                    contentUrl = item.find(\".\" + LINK).data(CONTENTURL),\n                    content = that.contentHolder(item.index());\n\n                if (contentUrl) {\n                    that.ajaxRequest(item, content, null, contentUrl);\n                }\n            });\n\n            return that;\n        },\n\n        append: function (tab) {\n            var that = this,\n                inserted = that._create(tab);\n\n            each(inserted.tabs, function (idx) {\n                var contents = inserted.contents[idx];\n                that.tabGroup.append(this);\n                that.wrapper.append(contents);\n                that.angular(\"compile\", function(){ return { elements: [ contents ] }; });\n            });\n\n            updateFirstLast(that.tabGroup);\n            that._updateContentElements();\n\n            return that;\n        },\n\n        insertBefore: function (tab, referenceTab) {\n            referenceTab = this.tabGroup.find(referenceTab);\n\n            var that = this,\n                inserted = that._create(tab),\n                referenceContent = $(that.contentElement(referenceTab.index()));\n\n            each(inserted.tabs, function (idx) {\n                var contents = inserted.contents[idx];\n                referenceTab.before(this);\n                referenceContent.before(contents);\n                that.angular(\"compile\", function(){ return { elements: [ contents ] }; });\n            });\n\n            updateFirstLast(that.tabGroup);\n            that._updateContentElements();\n\n            return that;\n        },\n\n        insertAfter: function (tab, referenceTab) {\n            referenceTab = this.tabGroup.find(referenceTab);\n\n            var that = this,\n                inserted = that._create(tab),\n                referenceContent = $(that.contentElement(referenceTab.index()));\n\n            each(inserted.tabs, function (idx) {\n                var contents = inserted.contents[idx];\n                referenceTab.after(this);\n                referenceContent.after(contents);\n                that.angular(\"compile\", function(){ return { elements: [ contents ] }; });\n            });\n\n            updateFirstLast(that.tabGroup);\n            that._updateContentElements();\n\n            return that;\n        },\n\n        remove: function (elements) {\n            var that = this;\n            var type = typeof elements;\n            var contents;\n\n            if (type === \"string\") {\n                elements = that.tabGroup.find(elements);\n            } else if (type === \"number\") {\n                elements = that.tabGroup.children().eq(elements);\n            }\n\n            contents = elements.map(function () {\n                var content = that.contentElement($(this).index());\n                kendo.destroy(content);\n                return content;\n            });\n\n            elements.remove();\n            contents.remove();\n\n            that._updateContentElements();\n\n            return that;\n        },\n\n        _create: function (tab) {\n            var plain = $.isPlainObject(tab),\n                that = this, tabs, contents, content;\n\n            if (plain || $.isArray(tab)) {\n                tab = $.isArray(tab) ? tab : [tab];\n\n                tabs = map(tab, function (value, idx) {\n                            return $(TabStrip.renderItem({\n                                group: that.tabGroup,\n                                item: extend(value, { index: idx })\n                            }));\n                        });\n\n                contents = map( tab, function (value, idx) {\n                            if (typeof value.content == \"string\" || value.contentUrl) {\n                                return $(TabStrip.renderContent({\n                                    item: extend(value, { index: idx })\n                                }));\n                            }\n                        });\n            } else {\n                if (typeof tab == \"string\" && tab[0] != \"<\") {\n                    tabs = that.element.find(tab);\n                } else {\n                    tabs = $(tab);\n                }\n                contents = $();\n                tabs.each(function () {\n                    content = $(\"<div class='\" + CONTENT + \"'/>\");\n                    if (/k-tabstrip-items/.test(this.parentNode.className)) {\n                        var index = parseInt(this.getAttribute(\"aria-controls\").replace(/^.*-/, \"\"), 10) - 1;\n                        content = $(that.contentElement(index));\n                    }\n                    contents = contents.add(content);\n                });\n\n                updateTabClasses(tabs);\n            }\n\n            return { tabs: tabs, contents: contents };\n        },\n\n        _toggleDisabled: function(element, enable) {\n            element = this.tabGroup.find(element);\n            element.each(function () {\n                $(this)\n                    .toggleClass(DEFAULTSTATE, enable)\n                    .toggleClass(DISABLEDSTATE, !enable);\n            });\n        },\n\n        _updateClasses: function() {\n            var that = this,\n                tabs, activeItem, activeTab;\n\n            that.wrapper.addClass(\"k-widget k-header k-tabstrip\");\n\n            that.tabGroup = that.wrapper.children(\"ul\").addClass(\"k-tabstrip-items k-reset\");\n\n            if (!that.tabGroup[0]) {\n                that.tabGroup = $(\"<ul class='k-tabstrip-items k-reset'/>\").appendTo(that.wrapper);\n            }\n\n            tabs = that.tabGroup.find(\"li\").addClass(\"k-item\");\n\n            if (tabs.length) {\n                activeItem = tabs.filter(\".\" + ACTIVESTATE).index();\n                activeTab = activeItem >= 0 ? activeItem : undefined;\n\n                that.tabGroup // Remove empty text nodes\n                    .contents()\n                    .filter(function () { return (this.nodeType == 3 && !trim(this.nodeValue)); })\n                    .remove();\n            }\n\n            if (activeItem >= 0) {\n                tabs.eq(activeItem).addClass(TABONTOP);\n            }\n\n            that.contentElements = that.wrapper.children(\"div\");\n\n            that.contentElements\n                .addClass(CONTENT)\n                .eq(activeTab)\n                .addClass(ACTIVESTATE)\n                .css({ display: \"block\" });\n\n            if (tabs.length) {\n                updateTabClasses(tabs);\n\n                updateFirstLast(that.tabGroup);\n                that._updateContentElements();\n            }\n        },\n\n        _updateContentElements: function() {\n            var that = this,\n                contentUrls = that.options.contentUrls || [],\n                items = that.tabGroup.find(\".k-item\"),\n                tabStripID = (that.element.attr(\"id\") || kendo.guid()) + \"-\",\n                contentElements = that.wrapper.children(\"div\");\n\n            if (contentElements.length && (items.length > contentElements.length)) {\n                contentElements.each(function(idx) {\n                    var currentIndex = parseInt(this.id.replace(tabStripID, \"\"), 10),\n                        item = items.filter(\"[aria-controls=\" + tabStripID + currentIndex + \"]\"),\n                        id = tabStripID + (idx+1);\n\n                    item.data(\"aria\", id);\n                    this.setAttribute(\"id\", id);\n                });\n\n                items.each(function() {\n                    var item = $(this);\n\n                    this.setAttribute(\"aria-controls\", item.data(\"aria\"));\n                    item.removeData(\"aria\");\n                });\n            } else {\n                items.each(function(idx) {\n                    var currentContent = contentElements.eq(idx),\n                        id = tabStripID + (idx+1);\n\n                    this.setAttribute(\"aria-controls\", id);\n\n                    if (!currentContent.length && contentUrls[idx]) {\n                        $(\"<div class='\" + CONTENT + \"'/>\").appendTo(that.wrapper).attr(\"id\", id);\n                    } else {\n                        currentContent.attr(\"id\", id);\n\n                        if (!$(this).children(\".k-loading\")[0] && !contentUrls[idx]) {\n                            $(\"<span class='k-loading k-complete'/>\").prependTo(this);\n                        }\n                    }\n                    currentContent.attr(\"role\", \"tabpanel\");\n                    currentContent.filter(\":not(.\" + ACTIVESTATE + \")\").attr(\"aria-hidden\", true).attr(\"aria-expanded\", false);\n                    currentContent.filter(\".\" + ACTIVESTATE).attr(\"aria-expanded\", true);\n                });\n            }\n\n            that.contentElements = that.contentAnimators = that.wrapper.children(\"div\"); // refresh the contents\n\n            that.tabsHeight = that.tabGroup.outerHeight() +\n                              parseInt(that.wrapper.css(\"border-top-width\"), 10) +\n                              parseInt(that.wrapper.css(\"border-bottom-width\"), 10);\n\n            if (kendo.kineticScrollNeeded && kendo.mobile.ui.Scroller) {\n                kendo.touchScroller(that.contentElements);\n                that.contentElements = that.contentElements.children(\".km-scroll-container\");\n            }\n        },\n\n        _wrapper: function() {\n            var that = this;\n\n            if (that.element.is(\"ul\")) {\n                that.wrapper = that.element.wrapAll(\"<div />\").parent();\n            } else {\n                that.wrapper = that.element;\n            }\n\n            that.scrollWrap = that.wrapper.parent(\".k-tabstrip-wrapper\");\n\n            if (!that.scrollWrap[0]) {\n                that.scrollWrap = that.wrapper.wrapAll(\"<div class='k-tabstrip-wrapper' />\").parent();\n            }\n        },\n\n        _sizeScrollWrap: function(element) {\n            this.scrollWrap.css(\"height\", Math.floor(element.outerHeight(true)) + this.tabsHeight).css(\"height\");\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVERSTATE, e.type == MOUSEENTER);\n        },\n\n        _click: function (item) {\n            var that = this,\n                link = item.find(\".\" + LINK),\n                href = link.attr(HREF),\n                collapse = that.options.collapsible,\n                contentHolder = that.contentHolder(item.index()),\n                prevent, isAnchor;\n\n            if (item.closest(\".k-widget\")[0] != that.wrapper[0]) {\n                return;\n            }\n\n            if (item.is(\".\" + DISABLEDSTATE + (!collapse ? \",.\" + ACTIVESTATE : \"\"))) {\n                return true;\n            }\n\n            isAnchor = link.data(CONTENTURL) || (href && (href.charAt(href.length - 1) == \"#\" || href.indexOf(\"#\" + that.element[0].id + \"-\") != -1));\n            prevent = !href || isAnchor;\n\n            if (that.tabGroup.children(\"[data-animating]\").length) {\n                return prevent;\n            }\n\n            if (that.trigger(SELECT, { item: item[0], contentElement: contentHolder[0] })) {\n                return true;\n            }\n\n            if (prevent === false) {\n                return;\n            }\n\n            if (collapse && item.is(\".\" + ACTIVESTATE)) {\n                that.deactivateTab(item);\n                return true;\n            }\n\n            if (that.activateTab(item)) {\n                prevent = true;\n            }\n\n            return prevent;\n        },\n\n        deactivateTab: function (item) {\n            var that = this,\n                animationSettings = that.options.animation,\n                animation = animationSettings.open,\n                close = extend({}, animationSettings.close),\n                hasCloseAnimation = close && \"effects\" in close;\n            item = that.tabGroup.find(item);\n\n            close = extend( hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n\n            if (kendo.size(animation.effects)) {\n                item.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n                item.kendoRemoveClass(ACTIVESTATE, { duration: animation.duration });\n            } else {\n                item.addClass(DEFAULTSTATE);\n                item.removeClass(ACTIVESTATE);\n            }\n\n            item.removeAttr(\"aria-selected\");\n\n            that.contentAnimators\n                    .filter(\".\" + ACTIVESTATE)\n                    .kendoStop(true, true)\n                    .kendoAnimate( close )\n                    .removeClass(ACTIVESTATE)\n                    .attr(\"aria-hidden\", true);\n        },\n\n        activateTab: function (item) {\n            if (this.tabGroup.children(\"[data-animating]\").length) { return; }\n\n            item = this.tabGroup.find(item);\n\n            var that = this,\n                animationSettings = that.options.animation,\n                animation = animationSettings.open,\n                close = extend({}, animationSettings.close),\n                hasCloseAnimation = close && \"effects\" in close,\n                neighbours = item.parent().children(),\n                oldTab = neighbours.filter(\".\" + ACTIVESTATE),\n                itemIndex = neighbours.index(item);\n\n            close = extend( hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n            // deactivate previously active tab\n            if (kendo.size(animation.effects)) {\n                oldTab.kendoRemoveClass(ACTIVESTATE, { duration: close.duration });\n                item.kendoRemoveClass(HOVERSTATE, { duration: close.duration });\n            } else {\n                oldTab.removeClass(ACTIVESTATE);\n                item.removeClass(HOVERSTATE);\n            }\n\n            // handle content elements\n            var contentAnimators = that.contentAnimators;\n\n            if (that.inRequest) {\n                that.xhr.abort();\n                that.inRequest = false;\n            }\n\n            if (contentAnimators.length === 0) {\n                oldTab.removeClass(TABONTOP);\n                item.addClass(TABONTOP) // change these directly to bring the tab on top.\n                    .css(\"z-index\");\n\n                item.addClass(ACTIVESTATE);\n                that._current(item);\n\n                that.trigger(\"change\");\n\n                return false;\n            }\n\n            var visibleContents = contentAnimators.filter(\".\" + ACTIVESTATE),\n                contentHolder = that.contentHolder(itemIndex),\n                contentElement = contentHolder.closest(\".k-content\");\n\n            that.tabsHeight = that.tabGroup.outerHeight() +\n                              parseInt(that.wrapper.css(\"border-top-width\"), 10) +\n                              parseInt(that.wrapper.css(\"border-bottom-width\"), 10);\n\n            that._sizeScrollWrap(visibleContents);\n\n            if (contentHolder.length === 0) {\n                visibleContents\n                    .removeClass( ACTIVESTATE )\n                    .attr(\"aria-hidden\", true)\n                    .kendoStop(true, true)\n                    .kendoAnimate( close );\n                return false;\n            }\n\n            item.attr(\"data-animating\", true);\n\n            var isAjaxContent = (item.children(\".\" + LINK).data(CONTENTURL) || false) && contentHolder.is(EMPTY),\n                showContentElement = function () {\n                    oldTab.removeClass(TABONTOP);\n                    item.addClass(TABONTOP) // change these directly to bring the tab on top.\n                        .css(\"z-index\");\n\n                    if (kendo.size(animation.effects)) {\n                        oldTab.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n                        item.kendoAddClass(ACTIVESTATE, { duration: animation.duration });\n                    } else {\n                        oldTab.addClass(DEFAULTSTATE);\n                        item.addClass(ACTIVESTATE);\n                    }\n                    oldTab.removeAttr(\"aria-selected\");\n                    item.attr(\"aria-selected\", true);\n\n                    that._current(item);\n\n                    that._sizeScrollWrap(contentElement);\n\n                    contentElement\n                        .addClass(ACTIVESTATE)\n                        .removeAttr(\"aria-hidden\")\n                        .kendoStop(true, true)\n                        .attr(\"aria-expanded\", true)\n                        .kendoAnimate( extend({ init: function () {\n                            that.trigger(SHOW, { item: item[0], contentElement: contentHolder[0] });\n                            kendo.resize(contentHolder);\n                        } }, animation, {\n                            complete: function () {\n                                item.removeAttr(\"data-animating\");\n\n                                that.trigger(ACTIVATE, { item: item[0], contentElement: contentHolder[0] });\n                                kendo.resize(contentHolder);\n\n                                that.scrollWrap.css(\"height\", \"\").css(\"height\");\n                            }\n                        } ) );\n                },\n                showContent = function() {\n                    if (!isAjaxContent) {\n                        showContentElement();\n                        that.trigger(\"change\");\n                    } else {\n                        item.removeAttr(\"data-animating\");\n                        that.ajaxRequest(item, contentHolder, function () {\n                            item.attr(\"data-animating\", true);\n                            showContentElement();\n                            that.trigger(\"change\");\n                        });\n                    }\n                };\n\n            visibleContents\n                    .removeClass(ACTIVESTATE);\n\n            visibleContents.attr(\"aria-hidden\", true);\n            visibleContents.attr(\"aria-expanded\", false);\n\n            if (visibleContents.length) {\n                visibleContents\n                    .kendoStop(true, true)\n                    .kendoAnimate(extend( {\n                        complete: showContent\n                   }, close ));\n            } else {\n                showContent();\n            }\n\n            return true;\n        },\n\n        contentElement: function (itemIndex) {\n            if (isNaN(itemIndex - 0)) {\n                return undefined;\n            }\n\n            var contentElements = this.contentElements && this.contentElements[0] && !kendo.kineticScrollNeeded ? this.contentElements : this.contentAnimators;\n\n            itemIndex = contentElements && itemIndex < 0 ? contentElements.length + itemIndex : itemIndex;\n\n            var idTest = new RegExp(\"-\" + (itemIndex + 1) + \"$\");\n\n            if (contentElements) {\n                for (var i = 0, len = contentElements.length; i < len; i++) {\n                    if (idTest.test(contentElements.eq(i).closest(\".k-content\")[0].id)) {\n                        return contentElements[i];\n                    }\n                }\n            }\n\n            return undefined;\n        },\n\n        contentHolder: function (itemIndex) {\n            var contentElement = $(this.contentElement(itemIndex)),\n                scrollContainer = contentElement.children(\".km-scroll-container\");\n\n            return kendo.support.touch && scrollContainer[0] ? scrollContainer : contentElement;\n        },\n\n        ajaxRequest: function (element, content, complete, url) {\n            element = this.tabGroup.find(element);\n\n            var that = this,\n                xhr = $.ajaxSettings.xhr,\n                link = element.find(\".\" + LINK),\n                data = {},\n                halfWidth = element.width() / 2,\n                fakeProgress = false,\n                statusIcon = element.find(\".k-loading\").removeClass(\"k-complete\");\n\n            if (!statusIcon[0]) {\n                statusIcon = $(\"<span class='k-loading'/>\").prependTo(element);\n            }\n\n            var endState = halfWidth * 2 - statusIcon.width();\n\n            var oldProgressAnimation = function() {\n                statusIcon.animate({ marginLeft: (parseInt(statusIcon.css(\"marginLeft\"), 10) || 0) < halfWidth ? endState : 0 }, 500, oldProgressAnimation);\n            };\n\n            if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n                setTimeout(oldProgressAnimation, 40);\n            }\n\n            url = url || link.data(CONTENTURL) || link.attr(HREF);\n            that.inRequest = true;\n\n            that.xhr = $.ajax({\n                type: \"GET\",\n                cache: false,\n                url: url,\n                dataType: \"html\",\n                data: data,\n                xhr: function() {\n                    var current = this,\n                        request = xhr(),\n                        event = current.progressUpload ? \"progressUpload\" : current.progress ? \"progress\" : false;\n\n                    if (request) {\n                        $.each([ request, request.upload ], function () {\n                            if (this.addEventListener) {\n                                this.addEventListener(\"progress\", function(evt) {\n                                    if (event) {\n                                        current[event](evt);\n                                    }\n                                }, false);\n                            }\n                        });\n                    }\n\n                    current.noProgress = !(window.XMLHttpRequest && ('upload' in new XMLHttpRequest()));\n                    return request;\n                },\n\n                progress: function(evt) {\n                    if (evt.lengthComputable) {\n                        var percent = parseInt((evt.loaded / evt.total * 100), 10) + \"%\";\n                        statusIcon\n                            .stop(true)\n                            .addClass(\"k-progress\")\n                            .css({\n                                \"width\": percent,\n                                \"marginLeft\": 0\n                            });\n                    }\n                },\n\n                error: function (xhr, status) {\n                    if (that.trigger(\"error\", { xhr: xhr, status: status })) {\n                        this.complete();\n                    }\n                },\n\n                stopProgress: function () {\n                    clearInterval(fakeProgress);\n                    statusIcon\n                        .stop(true)\n                        .addClass(\"k-progress\")\n                        [0].style.cssText = \"\";\n                },\n\n                complete: function (xhr) {\n                    that.inRequest = false;\n                    if (this.noProgress) {\n                        setTimeout(this.stopProgress, 500);\n                    } else {\n                        this.stopProgress();\n                    }\n\n                    if (xhr.statusText == \"abort\") {\n                        statusIcon.remove();\n                    }\n                },\n\n                success: function (data) {\n                    statusIcon.addClass(\"k-complete\");\n                    try {\n                        var current = this,\n                            loaded = 10;\n\n                        if (current.noProgress) {\n                            statusIcon.width(loaded+\"%\");\n                            fakeProgress = setInterval(function () {\n                                current.progress({ lengthComputable: true, loaded: Math.min(loaded, 100), total: 100 });\n                                loaded += 10;\n                            }, 40);\n                        }\n\n                        that.angular(\"cleanup\", function () { return { elements: content.get() }; });\n                        kendo.destroy(content);\n                        content.html(data);\n                    } catch (e) {\n                        var console = window.console;\n\n                        if (console && console.error) {\n                            console.error(e.name + \": \" + e.message + \" in \" + url);\n                        }\n                        this.error(this.xhr, \"error\");\n                    }\n\n                    if (complete) {\n                        complete.call(that, content);\n                    }\n\n                    that.angular(\"compile\", function(){ return { elements: content.get() }; });\n\n                    that.trigger(CONTENTLOAD, { item: element[0], contentElement: content[0] });\n                }\n            });\n        }\n    });\n\n    // client-side rendering\n    extend(TabStrip, {\n        renderItem: function (options) {\n            options = extend({ tabStrip: {}, group: {} }, options);\n\n            var empty = templates.empty,\n                item = options.item;\n\n            return templates.item(extend(options, {\n                image: item.imageUrl ? templates.image : empty,\n                sprite: item.spriteCssClass ? templates.sprite : empty,\n                itemWrapper: templates.itemWrapper\n            }, rendering));\n        },\n\n        renderContent: function (options) {\n            return templates.content(extend(options, rendering));\n        }\n    });\n\n    kendo.ui.plugin(TabStrip);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        keys = kendo.keys,\n        parse = kendo.parseDate,\n        activeElement = kendo._activeElement,\n        extractFormat = kendo._extractFormat,\n        support = kendo.support,\n        browser = support.browser,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        CHANGE = \"change\",\n        ns = \".kendoTimePicker\",\n        CLICK = \"click\" + ns,\n        DEFAULT = \"k-state-default\",\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        LI = \"li\",\n        SPAN = \"<span/>\",\n        FOCUSED = \"k-state-focused\",\n        HOVER = \"k-state-hover\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        MOUSEDOWN = \"mousedown\" + ns,\n        MS_PER_MINUTE = 60000,\n        MS_PER_DAY = 86400000,\n        SELECTED = \"k-state-selected\",\n        STATEDISABLED = \"k-state-disabled\",\n        ARIA_SELECTED = \"aria-selected\",\n        ARIA_EXPANDED = \"aria-expanded\",\n        ARIA_HIDDEN = \"aria-hidden\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        ARIA_ACTIVEDESCENDANT = \"aria-activedescendant\",\n        ID = \"id\",\n        isArray = $.isArray,\n        extend = $.extend,\n        proxy = $.proxy,\n        DATE = Date,\n        TODAY = new DATE();\n\n    TODAY = new DATE(TODAY.getFullYear(), TODAY.getMonth(), TODAY.getDate(), 0, 0, 0);\n\n    var TimeView = function(options) {\n        var that = this,\n            id = options.id;\n\n        that.options = options;\n\n        that.ul = $('<ul tabindex=\"-1\" role=\"listbox\" aria-hidden=\"true\" unselectable=\"on\" class=\"k-list k-reset\"/>')\n                    .css({ overflow: support.kineticScrollNeeded ? \"\": \"auto\" })\n                    .on(CLICK, LI, proxy(that._click, that))\n                    .on(\"mouseenter\" + ns, LI, function() { $(this).addClass(HOVER); })\n                    .on(\"mouseleave\" + ns, LI, function() { $(this).removeClass(HOVER); });\n\n        that.list = $(\"<div class='k-list-container'/>\")\n                    .append(that.ul)\n                    .on(MOUSEDOWN, preventDefault);\n\n        if (id) {\n            that._timeViewID = id + \"_timeview\";\n            that._optionID = id + \"_option_selected\";\n\n            that.ul.attr(ID, that._timeViewID);\n        }\n\n        that._popup();\n        that._heightHandler = proxy(that._height, that);\n\n        that.template = kendo.template('<li tabindex=\"-1\" role=\"option\" class=\"k-item\" unselectable=\"on\">#=data#</li>', { useWithBlock: false });\n    };\n\n    TimeView.prototype = {\n        current: function(candidate) {\n            var that = this,\n                active = that.options.active;\n\n            if (candidate !== undefined) {\n                if (that._current) {\n                    that._current\n                        .removeClass(SELECTED)\n                        .removeAttr(ARIA_SELECTED)\n                        .removeAttr(ID);\n                }\n\n                if (candidate) {\n                    candidate = $(candidate).addClass(SELECTED)\n                                            .attr(ID, that._optionID)\n                                            .attr(ARIA_SELECTED, true);\n\n                    that.scroll(candidate[0]);\n                }\n\n                that._current = candidate;\n\n                if (active) {\n                    active(candidate);\n                }\n            } else {\n                return that._current;\n            }\n        },\n\n        close: function() {\n            this.popup.close();\n        },\n\n        destroy: function() {\n            var that = this;\n\n            that.ul.off(ns);\n            that.list.off(ns);\n\n            if (that._touchScroller) {\n                that._touchScroller.destroy();\n            }\n\n            that.popup.destroy();\n        },\n\n        open: function() {\n            var that = this;\n\n            if (!that.ul[0].firstChild) {\n                that.bind();\n            }\n\n            that.popup.open();\n            if (that._current) {\n                that.scroll(that._current[0]);\n            }\n        },\n\n        dataBind: function(dates) {\n            var that = this,\n                options = that.options,\n                format = options.format,\n                toString = kendo.toString,\n                template = that.template,\n                length = dates.length,\n                idx = 0,\n                date,\n                html = \"\";\n\n            for (; idx < length; idx++) {\n                date = dates[idx];\n\n                if (isInRange(date, options.min, options.max)) {\n                    html += template(toString(date, format, options.culture));\n                }\n            }\n\n            that._html(html);\n        },\n\n        refresh: function() {\n            var that = this,\n                options = that.options,\n                format = options.format,\n                offset = dst(),\n                ignoreDST = offset < 0,\n                min = options.min,\n                max = options.max,\n                msMin = getMilliseconds(min),\n                msMax = getMilliseconds(max),\n                msInterval = options.interval * MS_PER_MINUTE,\n                toString = kendo.toString,\n                template = that.template,\n                start = new DATE(+min),\n                startDay = start.getDate(),\n                msStart, lastIdx,\n                idx = 0, length,\n                html = \"\";\n\n            if (ignoreDST) {\n                length = (MS_PER_DAY + (offset * MS_PER_MINUTE)) / msInterval;\n            } else {\n                length = MS_PER_DAY / msInterval;\n            }\n\n\n            if (msMin != msMax) {\n                if (msMin > msMax) {\n                    msMax += MS_PER_DAY;\n                }\n\n                length = ((msMax - msMin) / msInterval) + 1;\n            }\n\n            lastIdx = parseInt(length, 10);\n\n            for (; idx < length; idx++) {\n                if (idx) {\n                    setTime(start, msInterval, ignoreDST);\n                }\n\n                if (msMax && lastIdx == idx) {\n                    msStart = getMilliseconds(start);\n                    if (startDay < start.getDate()) {\n                        msStart += MS_PER_DAY;\n                    }\n\n                    if (msStart > msMax) {\n                        start = new DATE(+max);\n                    }\n                }\n\n                html += template(toString(start, format, options.culture));\n            }\n\n            that._html(html);\n        },\n\n        bind: function() {\n            var that = this,\n                dates = that.options.dates;\n\n            if (dates && dates[0]) {\n                that.dataBind(dates);\n            } else {\n                that.refresh();\n            }\n        },\n\n        _html: function(html) {\n            var that = this;\n\n            that.ul[0].innerHTML = html;\n\n            that.popup.unbind(OPEN, that._heightHandler);\n            that.popup.one(OPEN, that._heightHandler);\n\n            that.current(null);\n            that.select(that._value);\n        },\n\n        scroll: function(item) {\n            if (!item) {\n                return;\n            }\n\n            var ul = this.ul[0],\n                itemOffsetTop = item.offsetTop,\n                itemOffsetHeight = item.offsetHeight,\n                ulScrollTop = ul.scrollTop,\n                ulOffsetHeight = ul.clientHeight,\n                bottomDistance = itemOffsetTop + itemOffsetHeight,\n                touchScroller = this._touchScroller,\n                elementHeight;\n\n            if (touchScroller) {\n                elementHeight = this.list.height();\n\n                if (itemOffsetTop > elementHeight) {\n                    itemOffsetTop = itemOffsetTop - elementHeight + itemOffsetHeight;\n                }\n\n                touchScroller.scrollTo(0, -itemOffsetTop);\n            } else {\n                ul.scrollTop = ulScrollTop > itemOffsetTop ?\n                               itemOffsetTop : bottomDistance > (ulScrollTop + ulOffsetHeight) ?\n                               bottomDistance - ulOffsetHeight : ulScrollTop;\n            }\n        },\n\n        select: function(li) {\n            var that = this,\n                options = that.options,\n                current = that._current;\n\n            if (li instanceof Date) {\n                li = kendo.toString(li, options.format, options.culture);\n            }\n\n            if (typeof li === \"string\") {\n                if (!current || current.text() !== li) {\n                    li = $.grep(that.ul[0].childNodes, function(node) {\n                        return (node.textContent || node.innerText) == li;\n                    });\n\n                    li = li[0] ? li : null;\n                } else {\n                    li = current;\n                }\n            }\n\n            that.current(li);\n        },\n\n        setOptions: function(options) {\n            var old = this.options;\n\n            options.min = parse(options.min);\n            options.max = parse(options.max);\n\n            this.options = extend(old, options, {\n                active: old.active,\n                change: old.change,\n                close: old.close,\n                open: old.open\n            });\n\n            this.bind();\n        },\n\n        toggle: function() {\n            var that = this;\n\n            if (that.popup.visible()) {\n                that.close();\n            } else {\n                that.open();\n            }\n        },\n\n        value: function(value) {\n            var that = this;\n\n            that._value = value;\n            if (that.ul[0].firstChild) {\n                that.select(value);\n            }\n        },\n\n        _click: function(e) {\n            var that = this,\n                li = $(e.currentTarget);\n\n            if (!e.isDefaultPrevented()) {\n                that.select(li);\n                that.options.change(li.text(), true);\n                that.close();\n            }\n        },\n\n        _height: function() {\n            var that = this;\n            var list = that.list;\n            var parent = list.parent(\".k-animation-container\");\n            var height = that.options.height;\n\n            if (that.ul[0].children.length) {\n                list.add(parent)\n                    .show()\n                    .height(that.ul[0].scrollHeight > height ? height : \"auto\")\n                    .hide();\n            }\n        },\n\n        _parse: function(value) {\n            var that = this,\n                options = that.options,\n                current = that._value || TODAY;\n\n            if (value instanceof DATE) {\n                return value;\n            }\n\n            value = parse(value, options.parseFormats, options.culture);\n\n            if (value) {\n                value = new DATE(current.getFullYear(),\n                                 current.getMonth(),\n                                 current.getDate(),\n                                 value.getHours(),\n                                 value.getMinutes(),\n                                 value.getSeconds(),\n                                 value.getMilliseconds());\n            }\n\n            return value;\n        },\n\n        _adjustListWidth: function() {\n            var list = this.list,\n                width = list[0].style.width,\n                wrapper = this.options.anchor,\n                computedStyle, computedWidth;\n\n            if (!list.data(\"width\") && width) {\n                return;\n            }\n\n            computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n            computedWidth = computedStyle ? parseFloat(computedStyle.width) : wrapper.outerWidth();\n\n            if (computedStyle && (browser.mozilla || browser.msie)) { // getComputedStyle returns different box in FF and IE.\n                computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n            }\n\n            width = computedWidth - (list.outerWidth() - list.width());\n\n            list.css({\n                fontFamily: wrapper.css(\"font-family\"),\n                width: width\n            })\n            .data(\"width\", width);\n        },\n\n        _popup: function() {\n            var that = this,\n                list = that.list,\n                options = that.options,\n                anchor = options.anchor;\n\n            that.popup = new ui.Popup(list, extend(options.popup, {\n                anchor: anchor,\n                open: options.open,\n                close: options.close,\n                animation: options.animation,\n                isRtl: support.isRtl(options.anchor)\n            }));\n\n            that._touchScroller = kendo.touchScroller(that.popup.element);\n        },\n\n        move: function(e) {\n            var that = this,\n                key = e.keyCode,\n                ul = that.ul[0],\n                current = that._current,\n                down = key === keys.DOWN;\n\n            if (key === keys.UP || down) {\n                if (e.altKey) {\n                    that.toggle(down);\n                    return;\n                } else if (down) {\n                    current = current ? current[0].nextSibling : ul.firstChild;\n                } else {\n                    current = current ? current[0].previousSibling : ul.lastChild;\n                }\n\n                if (current) {\n                    that.select(current);\n                }\n\n                that.options.change(that._current.text());\n                e.preventDefault();\n\n            } else if (key === keys.ENTER || key === keys.TAB || key === keys.ESC) {\n                e.preventDefault();\n                if (current) {\n                    that.options.change(current.text(), true);\n                }\n                that.close();\n            }\n        }\n    };\n\n    function setTime(date, time, ignoreDST) {\n        var offset = date.getTimezoneOffset(),\n            offsetDiff;\n\n        date.setTime(date.getTime() + time);\n\n        if (!ignoreDST) {\n            offsetDiff = date.getTimezoneOffset() - offset;\n            date.setTime(date.getTime() + offsetDiff * MS_PER_MINUTE);\n        }\n    }\n\n    function dst() {\n        var today = new DATE(),\n            midnight = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0),\n            noon = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 12, 0, 0);\n\n        return -1 * (midnight.getTimezoneOffset() - noon.getTimezoneOffset());\n    }\n\n    function getMilliseconds(date) {\n        return date.getHours() * 60 * MS_PER_MINUTE + date.getMinutes() * MS_PER_MINUTE + date.getSeconds() * 1000 + date.getMilliseconds();\n    }\n\n    function isInRange(value, min, max) {\n        var msMin = getMilliseconds(min),\n            msMax = getMilliseconds(max),\n            msValue;\n\n        if (!value || msMin == msMax) {\n            return true;\n        }\n\n        msValue = getMilliseconds(value);\n\n        if (msMin > msValue) {\n            msValue += MS_PER_DAY;\n        }\n\n        if (msMax < msMin) {\n            msMax += MS_PER_DAY;\n        }\n\n        return msValue >= msMin && msValue <= msMax;\n    }\n\n    TimeView.getMilliseconds = getMilliseconds;\n\n    kendo.TimeView = TimeView;\n\n    var TimePicker = Widget.extend({\n        init: function(element, options) {\n            var that = this, ul, timeView, disabled;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            options.min = parse(element.attr(\"min\")) || parse(options.min);\n            options.max = parse(element.attr(\"max\")) || parse(options.max);\n\n            normalize(options);\n\n            that._wrapper();\n\n            that.timeView = timeView = new TimeView(extend({}, options, {\n                id: element.attr(ID),\n                anchor: that.wrapper,\n                format: options.format,\n                change: function(value, trigger) {\n                    if (trigger) {\n                        that._change(value);\n                    } else {\n                        element.val(value);\n                    }\n                },\n                open: function(e) {\n                    that.timeView._adjustListWidth();\n\n                    if (that.trigger(OPEN)) {\n                        e.preventDefault();\n                    } else {\n                        element.attr(ARIA_EXPANDED, true);\n                        ul.attr(ARIA_HIDDEN, false);\n                    }\n                },\n                close: function(e) {\n                    if (that.trigger(CLOSE)) {\n                        e.preventDefault();\n                    } else {\n                        element.attr(ARIA_EXPANDED, false);\n                        ul.attr(ARIA_HIDDEN, true);\n                    }\n                },\n                active: function(current) {\n                    element.removeAttr(ARIA_ACTIVEDESCENDANT);\n                    if (current) {\n                        element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n                    }\n                }\n            }));\n            ul = timeView.ul;\n\n            that._icon();\n            that._reset();\n\n            try {\n                element[0].setAttribute(\"type\", \"text\");\n            } catch(e) {\n                element[0].type = \"text\";\n            }\n\n            element.addClass(\"k-input\")\n                   .attr({\n                        \"role\": \"combobox\",\n                        \"aria-expanded\": false,\n                        \"aria-owns\": timeView._timeViewID\n                   });\n\n            disabled = element.is(\"[disabled]\");\n            if (disabled) {\n                that.enable(false);\n            } else {\n                that.readonly(element.is(\"[readonly]\"));\n            }\n\n            that._old = that._update(options.value || that.element.val());\n            that._oldText = element.val();\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"TimePicker\",\n            min: TODAY,\n            max: TODAY,\n            format: \"\",\n            dates: [],\n            parseFormats: [],\n            value: null,\n            interval: 30,\n            height: 200,\n            animation: {}\n        },\n\n        events: [\n         OPEN,\n         CLOSE,\n         CHANGE\n        ],\n\n        setOptions: function(options) {\n            var that = this;\n            var value = that._value;\n\n            Widget.fn.setOptions.call(that, options);\n            options = that.options;\n\n            normalize(options);\n\n            that.timeView.setOptions(options);\n\n            if (value) {\n                that.element.val(kendo.toString(value, options.format, options.culture));\n            }\n        },\n\n        dataBind: function(dates) {\n            if (isArray(dates)) {\n                this.timeView.dataBind(dates);\n            }\n        },\n\n        _editable: function(options) {\n            var that = this,\n                disable = options.disable,\n                readonly = options.readonly,\n                arrow = that._arrow.off(ns),\n                element = that.element.off(ns),\n                wrapper = that._inputWrapper.off(ns);\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                element.removeAttr(DISABLED)\n                       .removeAttr(READONLY)\n                       .attr(ARIA_DISABLED, false)\n                       .attr(ARIA_READONLY, false)\n                       .on(\"keydown\" + ns, proxy(that._keydown, that))\n                       .on(\"focusout\" + ns, proxy(that._blur, that))\n                       .on(\"focus\" + ns, function() {\n                           that._inputWrapper.addClass(FOCUSED);\n                       });\n\n               arrow.on(CLICK, proxy(that._click, that))\n                   .on(MOUSEDOWN, preventDefault);\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                element.attr(DISABLED, disable)\n                       .attr(READONLY, readonly)\n                       .attr(ARIA_DISABLED, disable)\n                       .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n\n            that.timeView.destroy();\n\n            that.element.off(ns);\n            that._arrow.off(ns);\n            that._inputWrapper.off(ns);\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n        },\n\n        close: function() {\n            this.timeView.close();\n        },\n\n        open: function() {\n            this.timeView.open();\n        },\n\n        min: function (value) {\n            return this._option(\"min\", value);\n        },\n\n        max: function (value) {\n            return this._option(\"max\", value);\n        },\n\n        value: function(value) {\n            var that = this;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            that._old = that._update(value);\n\n            if (that._old === null) {\n                that.element.val(\"\");\n            }\n\n            that._oldText = that.element.val();\n        },\n\n        _blur: function() {\n            var that = this,\n                value = that.element.val();\n\n            that.close();\n            if (value !== that._oldText) {\n                that._change(value);\n            }\n            that._inputWrapper.removeClass(FOCUSED);\n        },\n\n        _click: function() {\n            var that = this,\n                element = that.element;\n\n            that.timeView.toggle();\n\n            if (!support.touch && element[0] !== activeElement()) {\n                element.focus();\n            }\n        },\n\n        _change: function(value) {\n            var that = this;\n\n            value = that._update(value);\n\n            if (+that._old != +value) {\n                that._old = value;\n                that._oldText = that.element.val();\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n\n                that.trigger(CHANGE);\n            }\n        },\n\n        _icon: function() {\n            var that = this,\n                element = that.element,\n                arrow;\n\n            arrow = element.next(\"span.k-select\");\n\n            if (!arrow[0]) {\n                arrow = $('<span unselectable=\"on\" class=\"k-select\"><span unselectable=\"on\" class=\"k-icon k-i-clock\">select</span></span>').insertAfter(element);\n            }\n\n            that._arrow = arrow.attr({\n                \"role\": \"button\",\n                \"aria-controls\": that.timeView._timeViewID\n            });\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                timeView = that.timeView,\n                value = that.element.val();\n\n            if (timeView.popup.visible() || e.altKey) {\n                timeView.move(e);\n            } else if (key === keys.ENTER && value !== that._oldText) {\n                that._change(value);\n            }\n        },\n\n        _option: function(option, value) {\n            var that = this,\n                options = that.options;\n\n            if (value === undefined) {\n                return options[option];\n            }\n\n            value = that.timeView._parse(value);\n\n            if (!value) {\n                return;\n            }\n\n            value = new DATE(+value);\n\n            options[option] = value;\n            that.timeView.options[option] = value;\n            that.timeView.bind();\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _update: function(value) {\n            var that = this,\n                options = that.options,\n                timeView = that.timeView,\n                date = timeView._parse(value);\n\n            if (!isInRange(date, options.min, options.max)) {\n                date = null;\n            }\n\n            that._value = date;\n            that.element.val(date ? kendo.toString(date, options.format, options.culture) : value);\n            timeView.value(date);\n\n            return date;\n        },\n\n        _wrapper: function() {\n            var that = this,\n                element = that.element,\n                wrapper;\n\n            wrapper = element.parents(\".k-timepicker\");\n\n            if (!wrapper[0]) {\n                wrapper = element.wrap(SPAN).parent().addClass(\"k-picker-wrap k-state-default\");\n                wrapper = wrapper.wrap(SPAN).parent();\n            }\n\n            wrapper[0].style.cssText = element[0].style.cssText;\n            that.wrapper = wrapper.addClass(\"k-widget k-timepicker k-header\")\n                                  .addClass(element[0].className);\n\n            element.css({\n                width: \"100%\",\n                height: element[0].style.height\n            });\n\n            that._inputWrapper = $(wrapper[0].firstChild);\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    that.value(element[0].defaultValue);\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        }\n    });\n\n    function normalize(options) {\n        var parseFormats = options.parseFormats;\n\n        options.format = extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.t);\n\n        parseFormats = isArray(parseFormats) ? parseFormats : [parseFormats];\n        parseFormats.splice(0, 0, options.format);\n        options.parseFormats = parseFormats;\n    }\n\n    function preventDefault(e) {\n        e.preventDefault();\n    }\n\n    ui.plugin(TimePicker);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        isFunction = kendo.isFunction,\n\n        TOOLBAR = \"k-toolbar\",\n        BUTTON = \"k-button\",\n        OVERFLOW_BUTTON = \"k-overflow-button\",\n        TOGGLE_BUTTON = \"k-toggle-button\",\n        BUTTON_GROUP = \"k-button-group\",\n        SPLIT_BUTTON = \"k-split-button\",\n        SEPARATOR = \"k-separator\",\n        POPUP = \"k-popup\",\n\n        RESIZABLE_TOOLBAR = \"k-toolbar-resizable\",\n        STATE_ACTIVE = \"k-state-active\",\n        STATE_DISABLED = \"k-state-disabled\",\n        GROUP_START = \"k-group-start\",\n        GROUP_END = \"k-group-end\",\n        PRIMARY = \"k-primary\",\n\n        ICON = \"k-icon\",\n        ICON_PREFIX = \"k-i-\",\n        BUTTON_ICON = \"k-button-icon\",\n        BUTTON_ICON_TEXT = \"k-button-icontext\",\n\n        LIST_CONTAINER = \"k-list-container k-split-container\",\n        SPLIT_BUTTON_ARROW = \"k-split-button-arrow\",\n\n        OVERFLOW_ANCHOR = \"k-overflow-anchor\",\n        OVERFLOW_CONTAINER = \"k-overflow-container\",\n        FIRST_TOOLBAR_VISIBLE = \"k-toolbar-first-visible\",\n        LAST_TOOLBAR_VISIBLE = \"k-toolbar-last-visible\",\n\n        CLICK = \"click\",\n        TOGGLE = \"toggle\",\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        OVERFLOW_OPEN = \"overflowOpen\",\n        OVERFLOW_CLOSE = \"overflowClose\",\n\n        OVERFLOW_NEVER = \"never\",\n        OVERFLOW_AUTO = \"auto\",\n        OVERFLOW_ALWAYS = \"always\",\n        OVERFLOW_HIDDEN = \"k-overflow-hidden\",\n\n        KENDO_UID_ATTR = kendo.attr(\"uid\"),\n\n        template = kendo.template,\n        components = {\n            button: {\n                base: createButton,\n                toolbar: createToolbarButton,\n                overflow: createOverflowButton\n            },\n\n            buttonGroup: {\n                base: function (options, initializer, element) {\n                    var items = options.buttons,\n                        item;\n\n                    if (!items) {\n                        return;\n                    }\n\n                    if (options.attributes) {\n                        element.attr(options.attributes);\n                    }\n\n                    element.data({ type: \"buttonGroup\" });\n                    element.attr(KENDO_UID_ATTR, options.uid);\n\n                    for (var i = 0; i < items.length; i++) {\n                        if (!items[i].uid) {\n                            items[i].uid = kendo.guid();\n                        }\n                        item = initializer($.extend({mobile: options.mobile}, items[i]));\n                        item.appendTo(element);\n                    }\n\n                    element.children().first().addClass(GROUP_START);\n                    element.children().last().addClass(GROUP_END);\n                },\n                toolbar: function (options) {\n                    var element = $('<div></div>');\n\n                    components.buttonGroup.base(options, components.button.toolbar, element);\n\n                    element.addClass(BUTTON_GROUP);\n\n                    if (options.align) {\n                        element.addClass(\"k-align-\" + options.align);\n                    }\n\n                    if (options.id) {\n                        element.attr(\"id\", options.id);\n                    }\n\n                    return element;\n                },\n                overflow: function (options) {\n                    var element = $('<li></li>');\n\n                    components.buttonGroup.base(options, components.button.overflow, element);\n\n                    element.addClass((options.mobile ? \"\" : BUTTON_GROUP) + \" k-overflow-group\");\n\n                    if (options.id) {\n                        element.attr(\"id\", options.id + \"_overflow\");\n                    }\n\n                    return element;\n                }\n            },\n\n            splitButton: {\n                toolbar: function(options) {\n                    var element = $('<div class=\"' + SPLIT_BUTTON + '\"></div>'),\n                        mainButton = components.button.toolbar(options),\n                        arrowButton = $('<a class=\"' + BUTTON + \" \" + SPLIT_BUTTON_ARROW + '\"><span class=\"' +\n                                       (options.mobile ? \"km-icon km-arrowdown\" : \"k-icon k-i-arrow-s\") + '\"></span></a>'),\n                        popupElement = $('<ul class=\"' + LIST_CONTAINER + '\"></ul>'),\n                        popup,\n                        items = options.menuButtons,\n                        item;\n\n                    mainButton.appendTo(element);\n                    arrowButton.appendTo(element);\n                    popupElement.appendTo(element);\n\n                    for (var i = 0; i < items.length; i++) {\n                        item = components.button.toolbar($.extend({mobile: options.mobile, click: options.click}, items[i]));\n                        item.wrap(\"<li></li>\").parent().appendTo(popupElement);\n                    }\n\n                    if (options.align) {\n                        element.addClass(\"k-align-\" + options.align);\n                    }\n\n                    if (!options.id) {\n                        options.id = options.uid;\n                    }\n\n                    element.attr(\"id\", options.id + \"_wrapper\");\n                    popupElement.attr(\"id\", options.id + \"_optionlist\")\n                                .attr(KENDO_UID_ATTR, options.rootUid);\n\n                    if (options.mobile) {\n                        popupElement = actionSheetWrap(popupElement);\n                    }\n\n                    popup = popupElement.kendoPopup({\n                        appendTo: options.mobile ? $(options.mobile).children(\".km-pane\") : null,\n                        anchor: element,\n                        copyAnchorStyles: false,\n                        animation: options.animation,\n                        open: adjustPopupWidth\n                    }).data(\"kendoPopup\");\n\n                    element.data({\n                        type: \"splitButton\",\n                        kendoPopup: popup\n                    });\n                    element.attr(KENDO_UID_ATTR, options.uid);\n\n                    return element;\n                },\n                overflow: function(options) {\n                    var element = $('<li class=\"' + SPLIT_BUTTON + '\"></li>'),\n                        mainButton = components.button.overflow(options),\n                        items = options.menuButtons,\n                        item;\n\n                    mainButton.appendTo(element);\n\n                    for (var i = 0; i < items.length; i++) {\n                        item = components.button.overflow($.extend({mobile: options.mobile}, items[i]));\n                        item.appendTo(element);\n                    }\n\n                    element.data({ type: \"splitButton\" });\n                    element.attr(KENDO_UID_ATTR, options.uid);\n\n                    return element;\n                }\n            },\n\n            separator: {\n                base: function(options, overflow) {\n                    var element = overflow ? $('<li>&nbsp;</li>') : $('<div>&nbsp;</div>');\n                    element.data({ type: \"separator\" });\n                    element.attr(KENDO_UID_ATTR, options.uid);\n\n                    if (options.attributes) {\n                        element.attr(options.attributes);\n                    }\n\n                    element.addClass(SEPARATOR);\n\n                    return element;\n                },\n                toolbar: function(options) {\n                   var element = components.separator.base(options, false);\n\n                   if (options.id) {\n                       element.attr(\"id\", options.id);\n                   }\n\n                   return element;\n                },\n                overflow: function(options) {\n                    var element = components.separator.base(options, true);\n\n                    if (options.id) {\n                        element.attr(\"id\", options.id + \"_overflow\");\n                    }\n\n                    return  element;\n                }\n            },\n\n            overflowAnchor: '<div class=\"k-overflow-anchor\"></div>',\n\n            overflowContainer: '<ul class=\"k-overflow-container k-list-container\"></ul>'\n        };\n\n        function createButton(options) {\n            var element = options.useButtonTag ? $('<button></button>') : $('<a></a>');\n\n            element.data({ type: \"button\" });\n            element.attr(KENDO_UID_ATTR, options.uid);\n\n            if (options.attributes) {\n                element.attr(options.attributes);\n            }\n\n            if (options.togglable) {\n                element.addClass(TOGGLE_BUTTON);\n                if (options.selected) {\n                    element.addClass(STATE_ACTIVE);\n                }\n            }\n\n            if (options.enable === false) {\n                element.addClass(STATE_DISABLED);\n            }\n\n            if (options.url !== undefined && !options.useButtonTag) {\n                element.attr(\"href\", options.url);\n                if (options.mobile) {\n                    element.attr(kendo.attr(\"role\"), \"button\");\n                }\n            }\n\n            if (options.group) {\n                element.attr(kendo.attr(\"group\"), options.group);\n            }\n\n            if (!options.togglable && options.click && isFunction(options.click)) {\n                element.data(\"click\", options.click);\n            }\n\n            if (options.togglable && options.toggle && isFunction(options.toggle)) {\n                element.data(\"toggle\", options.toggle);\n            }\n\n            return element;\n        }\n\n        function createToolbarButton(options) {\n            var element = components.button.base(options),\n                hasIcon;\n\n            element.addClass(BUTTON);\n\n            if (options.primary) {\n                element.addClass(PRIMARY);\n            }\n\n            if (options.align) {\n                element.addClass(\"k-align-\" + options.align);\n            }\n\n            if (options.id) {\n                element.attr(\"id\", options.id);\n            }\n\n            if (options.showText != \"overflow\" && options.text) {\n                if (options.mobile) {\n                    element.html('<span class=\"km-text\">' + options.text + \"</span>\");\n                } else {\n                    element.html(options.text);\n                }\n            }\n\n            hasIcon = (options.showIcon != \"overflow\") && (options.icon || options.spriteCssClass || options.imageUrl);\n\n            if (hasIcon) {\n                addGraphic(options, element);\n            }\n\n            return element;\n        }\n\n        function createOverflowButton(options) {\n            var element = components.button.base(options),\n                hasIcon;\n\n            element.addClass(OVERFLOW_BUTTON + \" \" + BUTTON);\n\n            if (options.primary) {\n                element.addClass(PRIMARY);\n            }\n\n            if (options.id) {\n                element.attr(\"id\", options.id + \"_overflow\");\n            }\n\n            if (options.showText != \"toolbar\" && options.text) {\n                if (options.mobile) {\n                    element.html('<span class=\"km-text\">' + options.text + \"</span>\");\n                } else {\n                    element.html(options.text);\n                }\n            }\n\n            hasIcon = (options.showIcon != \"toolbar\") && (options.icon || options.spriteCssClass || options.imageUrl);\n\n            if (hasIcon) {\n                addGraphic(options, element);\n            }\n\n            return element;\n        }\n\n        function addGraphic(options, element) {\n            var icon = options.icon,\n                spriteCssClass = options.spriteCssClass,\n                imageUrl = options.imageUrl,\n                isEmpty, span, img;\n\n            if (spriteCssClass || imageUrl || icon) {\n                isEmpty = true;\n\n                element.contents().not(\"span.k-sprite,span.\" + ICON + \",img.k-image\").each(function(idx, el){\n                    if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n                        isEmpty = false;\n                    }\n                });\n\n                if (isEmpty) {\n                    element.addClass(BUTTON_ICON);\n                } else {\n                    element.addClass(BUTTON_ICON_TEXT);\n                }\n            }\n\n            if (icon) {\n                span = element.children(\"span.\" + ICON).first();\n                if (!span[0]) {\n                    span = $('<span class=\"' + ICON + '\"></span>').prependTo(element);\n                }\n                span.addClass(ICON_PREFIX + icon);\n            } else if (spriteCssClass) {\n                span = element.children(\"span.k-sprite\").first();\n                if (!span[0]) {\n                    span = $('<span class=\"k-sprite\"></span>').prependTo(element);\n                }\n                span.addClass(spriteCssClass);\n            } else if (imageUrl) {\n                img = element.children(\"img.k-image\").first();\n                if (!img[0]) {\n                    img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n                }\n                img.attr(\"src\", imageUrl);\n            }\n        }\n\n        function adjustPopupWidth(e) {\n            var anchor = this.options.anchor,\n                computedWidth = anchor.outerWidth(),\n                width;\n\n            kendo.wrap(this.element).addClass(\"k-split-wrapper\");\n\n            if (this.element.css(\"box-sizing\") !== \"border-box\") {\n                width = computedWidth - (this.element.outerWidth() - this.element.width());\n            } else {\n                width = computedWidth;\n            }\n\n            this.element.css({\n                fontFamily: anchor.css(\"font-family\"),\n                \"min-width\": width\n            });\n        }\n\n        function toggleActive(e) {\n            if (!e.target.is(\".k-toggle-button\")) {\n                e.target.toggleClass(STATE_ACTIVE, e.type == \"press\");\n            }\n        }\n\n        function actionSheetWrap(element) {\n            element = $(element);\n\n            return element.hasClass(\"km-actionsheet\") ? element.closest(\".km-popup-wrapper\") : element.addClass(\"km-widget km-actionsheet\")\n                             .wrap('<div class=\"km-actionsheet-wrapper km-actionsheet-tablet km-widget km-popup\"></div>').parent()\n                             .wrap('<div class=\"km-popup-wrapper k-popup\"></div>').parent();\n        }\n\n        var ToolBar = Widget.extend({\n            init: function(element, options) {\n                var that = this;\n\n                Widget.fn.init.call(that, element, options);\n\n                options = that.options;\n                element = that.wrapper = that.element;\n\n                element.addClass(TOOLBAR + \" k-widget\");\n\n                this.uid = kendo.guid();\n                element.attr(KENDO_UID_ATTR, this.uid);\n\n                that.isMobile = (typeof options.mobile === \"boolean\") ? options.mobile : that.element.closest(\".km-root\")[0];\n                that.animation = that.isMobile ? { open: { effects: \"fade\" } } : {};\n\n                if (that.isMobile) {\n                    element.addClass(\"km-widget\");\n                    ICON = \"km-icon\";\n                    ICON_PREFIX = \"km-\";\n                    BUTTON = \"km-button\";\n                    BUTTON_GROUP = \"km-buttongroup km-widget\";\n                    STATE_ACTIVE = \"km-state-active\";\n                    STATE_DISABLED = \"km-state-disabled\";\n                }\n\n                if(options.resizable) {\n                    that._renderOverflow();\n                    element.addClass(RESIZABLE_TOOLBAR);\n\n                    that.overflowUserEvents = new kendo.UserEvents(that.element, {\n                        threshold: 5,\n                        allowSelection: true,\n                        filter: \".\" + OVERFLOW_ANCHOR,\n                        tap: proxy(that._toggleOverflow, that)\n                    });\n\n                    kendo.onResize(function() {\n                        that.resize();\n                    });\n                } else {\n                    that.popup = { element: $([]) };\n                }\n\n                if(options.items && options.items.length) {\n                    for (var i = 0; i < options.items.length; i++) {\n                        that.add(options.items[i]);\n                    }\n                }\n\n                that.userEvents = new kendo.UserEvents(document, {\n                    threshold: 5,\n                    allowSelection: true,\n                    filter:\n                        \"[\" + KENDO_UID_ATTR + \"=\" + this.uid + \"] .\" + BUTTON + \", \" +\n                        \"[\" + KENDO_UID_ATTR + \"=\" + this.uid + \"] .\" + OVERFLOW_BUTTON,\n                    tap: proxy(that._buttonClick, that),\n                    press: toggleActive,\n                    release: toggleActive\n                });\n\n                if (options.resizable) {\n                    this._toggleOverflowAnchor();\n                }\n\n                kendo.notify(that);\n            },\n\n            events: [\n                CLICK,\n                TOGGLE,\n                OPEN,\n                CLOSE,\n                OVERFLOW_OPEN,\n                OVERFLOW_CLOSE\n            ],\n\n            options: {\n                name: \"ToolBar\",\n                items: [],\n                resizable: true,\n                mobile: null\n            },\n\n            destroy: function() {\n                var that = this;\n\n                that.element.find(\".\" + SPLIT_BUTTON).each(function(idx, element) {\n                    $(element).data(\"kendoPopup\").destroy();\n                });\n\n                that.userEvents.destroy();\n\n                if (that.options.resizable) {\n                    that.overflowUserEvents.destroy();\n                    that.popup.destroy();\n                }\n\n                Widget.fn.destroy.call(that);\n            },\n\n            add: function(options) {\n                var component = components[options.type],\n                    template = options.template,\n                    element, that = this,\n                    itemClasses = that.isMobile ? \"\" : \"k-item k-state-default\",\n                    overflowTemplate = options.overflowTemplate,\n                    overflowElement;\n\n                $.extend(options, {\n                    uid: kendo.guid(),\n                    animation: that.animation,\n                    mobile: that.isMobile,\n                    rootUid: that.uid\n                });\n\n                if (template && !overflowTemplate) {\n                    options.overflow = OVERFLOW_NEVER;\n                }\n\n                //add the command in the overflow popup\n                if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n                    if (overflowTemplate) { //template command\n                        overflowElement = isFunction(overflowTemplate) ? $(overflowTemplate(options)) : $(overflowTemplate);\n\n                        if (options.id) {\n                            overflowElement.attr(\"id\", options.id + \"_overflow\");\n                        }\n                    } else if (component) { //build-in command\n                        overflowElement = (component.overflow || $.noop)(options);\n                    }\n\n                    if (overflowElement && overflowElement.length) {\n                        if(overflowElement.prop(\"tagName\") !== \"LI\") {\n                            overflowElement.removeAttr(KENDO_UID_ATTR);\n                            overflowElement = overflowElement.wrap(\"<li></li>\").parent();\n                            overflowElement.attr(KENDO_UID_ATTR, options.uid);\n                        }\n                        that._attributes(overflowElement, options);\n                        overflowElement.addClass(itemClasses).appendTo(that.popup.container);\n\n                        if (overflowElement.data(\"overflow\") === OVERFLOW_AUTO) {\n                            overflowElement.addClass(OVERFLOW_HIDDEN);\n                        }\n\n                        that.angular(\"compile\", function(){\n                            return { elements: overflowElement.get() };\n                        });\n                    }\n                }\n\n                //add the command in the toolbar container\n                if (options.overflow !== OVERFLOW_ALWAYS) {\n                    if (template) { //template command\n                        element = isFunction(template) ? template(options) : template;\n\n                        if (!(element instanceof jQuery)) {\n                            element = $(element.replace(/^\\s+|\\s+$/g, ''));\n                        }\n\n                        element = element.wrap(\"<div></div>\").parent();\n                        if (options.id) {\n                           element.attr(\"id\", options.id);\n                        }\n                        if (options.attributes) {\n                            element.attr(options.attributes);\n                        }\n                        element.attr(KENDO_UID_ATTR, options.uid);\n                    } else if (component) { //build-in command\n                        element = (component.toolbar || $.noop)(options);\n                    }\n\n                    if (element && element.length) {\n                        that._attributes(element, options);\n\n                        if (that.options.resizable) {\n                            element.appendTo(that.element).css(\"visibility\", \"hidden\");\n                            that._shrink(that.element.innerWidth());\n                            element.css(\"visibility\", \"visible\");\n                        } else {\n                            element.appendTo(that.element);\n                        }\n\n                        that.angular(\"compile\", function(){\n                            return { elements: element.get() };\n                        });\n                    }\n                }\n            },\n\n            remove: function(element) {\n                var toolbarElement,\n                    overflowElement,\n                    isResizable = this.options.resizable,\n                    type, uid;\n\n                toolbarElement = this.element.find(element);\n\n                if (isResizable) {\n                    overflowElement = this.popup.element.find(element);\n                }\n\n                if (toolbarElement.length) {\n                    type = toolbarElement.data(\"type\");\n                    uid = toolbarElement.attr(KENDO_UID_ATTR);\n\n                    if (toolbarElement.parent(\".\" + SPLIT_BUTTON).data(\"type\") === \"splitButton\") {\n                        type = \"splitButton\";\n                        toolbarElement = toolbarElement.parent();\n                    }\n\n                    overflowElement = isResizable ? this.popup.element.find(\"li[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\") : $([]);\n                } else if (overflowElement.length) {\n                    type = overflowElement.data(\"type\");\n                    overflowElement = overflowElement.parent();\n\n                    if (overflowElement.data(\"type\") === \"splitButton\") {\n                        type = \"splitButton\";\n                    }\n\n                    uid = overflowElement.attr(KENDO_UID_ATTR);\n                    toolbarElement = this.element.find(\"div.\" + SPLIT_BUTTON + \"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\");\n                }\n\n                if (type === \"splitButton\" && toolbarElement.data(\"kendoPopup\")) {\n                    toolbarElement.data(\"kendoPopup\").destroy();\n                }\n\n                toolbarElement.remove();\n                overflowElement.remove();\n            },\n\n            enable: function(element, enable) {\n                var uid = this.element.find(element).attr(KENDO_UID_ATTR);\n\n                if (!uid && this.popup) {\n                    uid = this.popup.element.find(element).parent(\"li\").attr(KENDO_UID_ATTR);\n                }\n\n                if (typeof enable == \"undefined\") {\n                    enable = true;\n                }\n\n                if (enable) {\n                    $(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\").removeClass(STATE_DISABLED);\n                } else {\n                    $(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\").addClass(STATE_DISABLED);\n                }\n            },\n\n            getSelectedFromGroup: function(groupName) {\n                return this.element.find(\".\" + TOGGLE_BUTTON + \"[data-group='\" + groupName + \"']\").filter(\".\" + STATE_ACTIVE);\n            },\n\n            toggle: function(button, checked) {\n                var element = $(button),\n                    uid = element.data(\"uid\"),\n                    group = element.data(\"group\"),\n                    twinElement;\n\n                if (element.hasClass(TOGGLE_BUTTON)) {\n\n                    if (group) { //find all buttons from the same group\n                        this.element\n                            .add(this.popup.element)\n                            .find(\".\" + TOGGLE_BUTTON + \"[data-group='\" + group + \"']\")\n                            .filter(\".\" + STATE_ACTIVE)\n                            .removeClass(STATE_ACTIVE);\n                    }\n\n                    if ($.contains(this.element[0], element[0])) {\n                        twinElement = this.popup.element.find(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\");\n                        if (twinElement.prop(\"tagName\") === \"LI\") {\n                            twinElement = twinElement.find(\".\" + TOGGLE_BUTTON + \":first\");\n                        }\n                    } else {\n                        uid = uid ? uid : element.parent().data(\"uid\");\n                        twinElement = this.element.find(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\");\n                    }\n\n                    element.add(twinElement).toggleClass(STATE_ACTIVE, checked);\n                }\n            },\n\n            _attributes: function(element, options) {\n                element.attr(kendo.attr(\"overflow\"), options.overflow || OVERFLOW_AUTO);\n            },\n\n            _renderOverflow: function() {\n                var that = this,\n                    overflowContainer = components.overflowContainer;\n\n                that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n\n                that.element.append(that.overflowAnchor);\n\n                if (that.isMobile) {\n                    that.overflowAnchor.append('<span class=\"km-icon km-more\"></span>');\n                    overflowContainer = actionSheetWrap(overflowContainer);\n                } else {\n                    that.overflowAnchor.append('<span class=\"k-icon k-i-more\"></span>');\n                }\n\n                that.popup = new kendo.ui.Popup(overflowContainer, {\n                    origin: \"bottom right\",\n                    position: \"top right\",\n                    anchor: that.overflowAnchor,\n                    animation: that.animation,\n                    appendTo: that.isMobile ? $(that.isMobile).children(\".km-pane\") : null,\n                    copyAnchorStyles: false,\n                    open: function (e) {\n                        var wrapper = kendo.wrap(that.popup.element)\n                            .addClass(\"k-overflow-wrapper\");\n\n                        if (!that.isMobile) {\n                            wrapper.css(\"margin-left\", (wrapper.outerWidth() - wrapper.width()) / 2 + 1);\n                        } else {\n                            that.popup.container.css(\"max-height\", (parseFloat($(\".km-content:visible\").innerHeight()) - 15) + \"px\");\n                        }\n\n                        if (that.trigger(OVERFLOW_OPEN)) {\n                            e.preventDefault();\n                        }\n                    },\n                    close: function (e) {\n                        if (that.trigger(OVERFLOW_CLOSE)) {\n                            e.preventDefault();\n                        }\n                    }\n                });\n\n                if (that.isMobile) {\n                    that.popup.container = that.popup.element.find(\".\" + OVERFLOW_CONTAINER);\n                } else {\n                    that.popup.container = that.popup.element;\n                }\n\n                that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n            },\n\n            _toggleOverflowAnchor: function() {\n                if (this.popup.element.children(\":not(.\" + OVERFLOW_HIDDEN + \", .\" + POPUP + \")\").length > 0) {\n                    this.overflowAnchor.css({\n                        visibility: \"visible\",\n                        width: \"\"\n                    });\n                } else {\n                    this.overflowAnchor.css({\n                        visibility: \"hidden\",\n                        width: \"1px\"\n                    });\n                }\n            },\n\n            _buttonClick: function(e) {\n                var that = this, popup,\n                    target, splitContainer,\n                    isDisabled, isChecked,\n                    group, handler, eventData, id;\n\n                e.preventDefault();\n\n                target = $(e.target).closest(\".\" + BUTTON, that.element);\n\n                if (target.hasClass(OVERFLOW_ANCHOR)) {\n                    return;\n                }\n\n                if (!target.length && that.popup) {\n                    target = $(e.target).closest(\".\" + OVERFLOW_BUTTON, that.popup.container);\n                }\n\n                isDisabled = target.hasClass(OVERFLOW_BUTTON) ? target.parent(\"li\").hasClass(STATE_DISABLED) : target.hasClass(STATE_DISABLED);\n\n                if (isDisabled) {\n                    return;\n                }\n\n                if (e.target.closest(\".\" + SPLIT_BUTTON_ARROW).length) {\n                    that._toggle(e);\n                    return;\n                }\n\n                id = target.attr(\"id\") ? target.attr(\"id\").replace(/(_overflow$)/, \"\") : undefined;\n\n                if (target.hasClass(TOGGLE_BUTTON)) {\n                    group = target.data(\"group\");\n                    handler = isFunction(target.data(\"toggle\")) ? target.data(\"toggle\") : null;\n\n                    that.toggle(target);\n                    isChecked = target.hasClass(STATE_ACTIVE);\n                    eventData = { target: target, group: group, checked: isChecked, id: id };\n\n                    if (handler) { handler.call(that, eventData); }\n                    that.trigger(TOGGLE, eventData);\n                } else {\n                    handler = isFunction(target.data(\"click\")) ? target.data(\"click\") : null;\n                    eventData = { target: target, id: id };\n\n                    if (handler) { handler.call(that, eventData); }\n                    that.trigger(CLICK, eventData);\n                }\n\n                if (target.hasClass(OVERFLOW_BUTTON)) {\n                    that.popup.close();\n                }\n\n                splitContainer = target.closest(\".k-split-container\");\n                if (splitContainer[0]) {\n                    popup = splitContainer.data(\"kendoPopup\");\n                    (popup ? popup : splitContainer.parents(\".km-popup-wrapper\").data(\"kendoPopup\")).close();\n                }\n            },\n\n            _toggle: function(e) {\n                var splitButton = $(e.target).closest(\".\" + SPLIT_BUTTON),\n                    popup = splitButton.data(\"kendoPopup\"),\n                    isDefaultPrevented;\n\n                e.preventDefault();\n\n                if (splitButton.hasClass(STATE_DISABLED)) {\n                    return;\n                }\n\n                if (popup.element.is(\":visible\")) {\n                    isDefaultPrevented = this.trigger(CLOSE, { target: splitButton });\n                } else {\n                    isDefaultPrevented = this.trigger(OPEN, { target: splitButton });\n                }\n\n                if (!isDefaultPrevented) {\n                    popup.toggle();\n                }\n            },\n\n            _toggleOverflow: function() {\n                this.popup.toggle();\n            },\n\n            _resize: function(e) {\n                var containerWidth = e.width;\n\n                if (!this.options.resizable) {\n                    return;\n                }\n\n                this.popup.close();\n\n                this._shrink(containerWidth);\n                this._stretch(containerWidth);\n\n                this._markVisibles();\n\n                this._toggleOverflowAnchor();\n            },\n\n            _childrenWidth: function() {\n                var childrenWidth = 0;\n\n                this.element.children(\":visible\").each(function() {\n                    childrenWidth += $(this).outerWidth(true);\n                });\n\n                return Math.ceil(childrenWidth);\n            },\n\n            _shrink: function(containerWidth) {\n                var commandElement,\n                    visibleCommands;\n\n                if (containerWidth < this._childrenWidth()) {\n                    visibleCommands = this.element.children(\":visible:not([data-overflow='never'], .\" + OVERFLOW_ANCHOR + \")\");\n\n                    for (var i = visibleCommands.length - 1; i >= 0; i--) {\n                        commandElement = visibleCommands.eq(i);\n                        if (containerWidth > this._childrenWidth()) {\n                            break;\n                        } else {\n                            this._hideItem(commandElement);\n                        }\n                    }\n                }\n            },\n\n            _stretch: function(containerWidth) {\n                var commandElement,\n                    hiddenCommands;\n\n                if (containerWidth > this._childrenWidth()) {\n                    hiddenCommands = this.element.children(\":hidden\");\n\n                    for (var i = 0; i < hiddenCommands.length ; i++) {\n                        commandElement = hiddenCommands.eq(i);\n                        if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n                            break;\n                        }\n                    }\n                }\n            },\n\n            _hideItem: function(item) {\n                item.hide();\n                if (this.popup) {\n                    this.popup.container\n                        .find(\">li[data-uid='\" + item.data(\"uid\") + \"']\")\n                        .removeClass(OVERFLOW_HIDDEN);\n                }\n            },\n\n            _showItem: function(item, containerWidth) {\n                if (item.length && containerWidth > this._childrenWidth() + item.outerWidth(true)) {\n                    item.show();\n                    if (this.popup) {\n                        this.popup.container\n                            .find(\">li[data-uid='\" + item.data(\"uid\") + \"']\")\n                            .addClass(OVERFLOW_HIDDEN);\n                    }\n\n                    return true;\n                }\n\n                return false;\n            },\n\n            _markVisibles: function() {\n                var overflowItems = this.popup.container.children(),\n                    toolbarItems = this.element.children(\":not(.k-overflow-anchor)\"),\n                    visibleOverflowItems = overflowItems.filter(\":not(.k-overflow-hidden)\"),\n                    visibleToolbarItems = toolbarItems.filter(\":visible\");\n\n                overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + \" \" + LAST_TOOLBAR_VISIBLE);\n                visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n                visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n            }\n\n        });\n\n    kendo.ui.plugin(ToolBar);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n\n    var kendo = window.kendo,\n        TimeView = kendo.TimeView,\n        parse = kendo.parseDate,\n        activeElement = kendo._activeElement,\n        extractFormat = kendo._extractFormat,\n        calendar = kendo.calendar,\n        isInRange = calendar.isInRange,\n        restrictValue = calendar.restrictValue,\n        isEqualDatePart = calendar.isEqualDatePart,\n        getMilliseconds = TimeView.getMilliseconds,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        CHANGE = \"change\",\n        ns = \".kendoDateTimePicker\",\n        CLICK = \"click\" + ns,\n        DISABLED = \"disabled\",\n        READONLY = \"readonly\",\n        DEFAULT = \"k-state-default\",\n        FOCUSED = \"k-state-focused\",\n        HOVER = \"k-state-hover\",\n        STATEDISABLED = \"k-state-disabled\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        MOUSEDOWN = \"mousedown\" + ns,\n        MONTH = \"month\",\n        SPAN = \"<span/>\",\n        ARIA_ACTIVEDESCENDANT = \"aria-activedescendant\",\n        ARIA_EXPANDED = \"aria-expanded\",\n        ARIA_HIDDEN = \"aria-hidden\",\n        ARIA_OWNS = \"aria-owns\",\n        ARIA_DISABLED = \"aria-disabled\",\n        ARIA_READONLY = \"aria-readonly\",\n        DATE = Date,\n        MIN = new DATE(1800, 0, 1),\n        MAX = new DATE(2099, 11, 31),\n        dateViewParams = { view: \"date\" },\n        timeViewParams = { view: \"time\" },\n        extend = $.extend;\n\n    var DateTimePicker = Widget.extend({\n        init: function(element, options) {\n            var that = this, disabled;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n            options = that.options;\n\n            options.min = parse(element.attr(\"min\")) || parse(options.min);\n            options.max = parse(element.attr(\"max\")) || parse(options.max);\n\n            normalize(options);\n\n            that._wrapper();\n\n            that._views();\n\n            that._icons();\n\n            that._reset();\n            that._template();\n\n            try {\n                element[0].setAttribute(\"type\", \"text\");\n            } catch(e) {\n                element[0].type = \"text\";\n            }\n\n            element.addClass(\"k-input\")\n                   .attr({\n                       \"role\": \"combobox\",\n                       \"aria-expanded\": false\n                   });\n\n\n            that._midnight = getMilliseconds(options.min) + getMilliseconds(options.max) === 0;\n\n            disabled = element.is(\"[disabled]\");\n            if (disabled) {\n                that.enable(false);\n            } else {\n                that.readonly(element.is(\"[readonly]\"));\n            }\n\n            that._old = that._update(options.value || that.element.val());\n            that._oldText = element.val();\n\n            kendo.notify(that);\n        },\n\n        options: {\n            name: \"DateTimePicker\",\n            value: null,\n            format: \"\",\n            timeFormat: \"\",\n            culture: \"\",\n            parseFormats: [],\n            dates: [],\n            min: new DATE(MIN),\n            max: new DATE(MAX),\n            interval: 30,\n            height: 200,\n            footer: \"\",\n            start: MONTH,\n            depth: MONTH,\n            animation: {},\n            month : {},\n            ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"d\")#'\n    },\n\n    events: [\n        OPEN,\n        CLOSE,\n        CHANGE\n    ],\n\n        setOptions: function(options) {\n            var that = this,\n                value = that._value,\n                dateViewOptions = that.dateView.options,\n                timeViewOptions = that.timeView.options,\n                min, max, currentValue;\n\n            Widget.fn.setOptions.call(that, options);\n\n            options = that.options;\n\n            options.min = min = parse(options.min);\n            options.max = max = parse(options.max);\n\n            normalize(options);\n\n            currentValue = options.value || that._value || that.dateView._current;\n\n            if (min && !isEqualDatePart(min, currentValue)) {\n                min = new DATE(MIN);\n            }\n\n            if (max && !isEqualDatePart(max, currentValue)) {\n                max = new DATE(MAX);\n            }\n\n            that.dateView.setOptions(options);\n\n            that.timeView.setOptions(extend({}, options, {\n                format: options.timeFormat,\n                min: min,\n                max: max\n            }));\n\n            if (value) {\n                that.element.val(kendo.toString(value, options.format, options.culture));\n                that._updateARIA(value);\n            }\n        },\n\n        _editable: function(options) {\n            var that = this,\n                element = that.element.off(ns),\n                dateIcon = that._dateIcon.off(ns),\n                timeIcon = that._timeIcon.off(ns),\n                wrapper = that._inputWrapper.off(ns),\n                readonly = options.readonly,\n                disable = options.disable;\n\n            if (!readonly && !disable) {\n                wrapper\n                    .addClass(DEFAULT)\n                    .removeClass(STATEDISABLED)\n                    .on(HOVEREVENTS, that._toggleHover);\n\n                element.removeAttr(DISABLED)\n                       .removeAttr(READONLY)\n                       .attr(ARIA_DISABLED, false)\n                       .attr(ARIA_READONLY, false)\n                       .on(\"keydown\" + ns, $.proxy(that._keydown, that))\n                       .on(\"focus\" + ns, function() {\n                           that._inputWrapper.addClass(FOCUSED);\n                       })\n                       .on(\"focusout\" + ns, function() {\n                           that._inputWrapper.removeClass(FOCUSED);\n                           if (element.val() !== that._oldText) {\n                               that._change(element.val());\n                           }\n                           that.close(\"date\");\n                           that.close(\"time\");\n                       });\n\n               dateIcon.on(MOUSEDOWN, preventDefault)\n                        .on(CLICK, function() {\n                            that.toggle(\"date\");\n\n                            if (!kendo.support.touch && element[0] !== activeElement()) {\n                                element.focus();\n                            }\n                        });\n\n\n               timeIcon.on(MOUSEDOWN, preventDefault)\n                        .on(CLICK, function() {\n                            that.toggle(\"time\");\n\n                            if (!kendo.support.touch && element[0] !== activeElement()) {\n                                element.focus();\n                            }\n                        });\n\n            } else {\n                wrapper\n                    .addClass(disable ? STATEDISABLED : DEFAULT)\n                    .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n                element.attr(DISABLED, disable)\n                       .attr(READONLY, readonly)\n                       .attr(ARIA_DISABLED, disable)\n                       .attr(ARIA_READONLY, readonly);\n            }\n        },\n\n        readonly: function(readonly) {\n            this._editable({\n                readonly: readonly === undefined ? true : readonly,\n                disable: false\n            });\n        },\n\n        enable: function(enable) {\n            this._editable({\n                readonly: false,\n                disable: !(enable = enable === undefined ? true : enable)\n            });\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(that);\n            that.dateView.destroy();\n            that.timeView.destroy();\n\n            that.element.off(ns);\n            that._dateIcon.off(ns);\n            that._timeIcon.off(ns);\n            that._inputWrapper.off(ns);\n\n            if (that._form) {\n                that._form.off(\"reset\", that._resetHandler);\n            }\n        },\n\n        close: function(view) {\n            if (view !== \"time\") {\n                view = \"date\";\n            }\n\n            this[view + \"View\"].close();\n        },\n\n        open: function(view) {\n            if (view !== \"time\") {\n                view = \"date\";\n            }\n\n            this[view + \"View\"].open();\n        },\n\n        min: function(value) {\n            return this._option(\"min\", value);\n        },\n\n        max: function(value) {\n            return this._option(\"max\", value);\n        },\n\n        toggle: function(view) {\n            var secondView = \"timeView\";\n\n            if (view !== \"time\") {\n                view = \"date\";\n            } else {\n                secondView = \"dateView\";\n            }\n\n            this[view + \"View\"].toggle();\n            this[secondView].close();\n        },\n\n        value: function(value) {\n            var that = this;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            that._old = that._update(value);\n            if (that._old === null) {\n                that.element.val(\"\");\n            }\n\n            that._oldText = that.element.val();\n        },\n\n        _change: function(value) {\n            var that = this;\n\n            value = that._update(value);\n\n            if (+that._old != +value) {\n                that._old = value;\n                that._oldText = that.element.val();\n\n                that.trigger(CHANGE);\n\n                // trigger the DOM change event so any subscriber gets notified\n                that.element.trigger(CHANGE);\n            }\n        },\n\n        _option: function(option, value) {\n            var that = this;\n            var options = that.options;\n            var timeView = that.timeView;\n            var timeViewOptions = timeView.options;\n            var current = that._value || that._old;\n            var minDateEqual;\n            var maxDateEqual;\n\n            if (value === undefined) {\n                return options[option];\n            }\n\n            value = parse(value, options.parseFormats, options.culture);\n\n            if (!value) {\n                return;\n            }\n\n            if (options.min.getTime() === options.max.getTime()) {\n                timeViewOptions.dates = [];\n            }\n\n            options[option] = new DATE(value.getTime());\n            that.dateView[option](value);\n\n            that._midnight = getMilliseconds(options.min) + getMilliseconds(options.max) === 0;\n\n            if (current) {\n                minDateEqual = isEqualDatePart(options.min, current);\n                maxDateEqual = isEqualDatePart(options.max, current);\n            }\n\n            if (minDateEqual || maxDateEqual) {\n                timeViewOptions[option] = value;\n\n                if (minDateEqual && !maxDateEqual) {\n                    timeViewOptions.max = lastTimeOption(options.interval);\n                }\n\n                if (maxDateEqual) {\n                    if (that._midnight) {\n                        timeView.dataBind([MAX]);\n                        return;\n                    } else if (!minDateEqual) {\n                        timeViewOptions.min = MIN;\n                    }\n                }\n            } else {\n                timeViewOptions.max = MAX;\n                timeViewOptions.min = MIN;\n            }\n\n            timeView.bind();\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n        },\n\n        _update: function(value) {\n            var that = this,\n                options = that.options,\n                min = options.min,\n                max = options.max,\n                dates = options.dates,\n                timeView = that.timeView,\n                current = that._value,\n                date = parse(value, options.parseFormats, options.culture),\n                isSameType = (date === null && current === null) || (date instanceof Date && current instanceof Date),\n                rebind, timeViewOptions, old, skip, formattedValue;\n\n            if (+date === +current && isSameType) {\n                formattedValue = kendo.toString(date, options.format, options.culture);\n\n                if (formattedValue !== value) {\n                    that.element.val(date === null ? value : formattedValue);\n                }\n\n                return date;\n            }\n\n            if (date !== null && isEqualDatePart(date, min)) {\n                date = restrictValue(date, min, max);\n            } else if (!isInRange(date, min, max)) {\n                date = null;\n            }\n\n            that._value = date;\n            timeView.value(date);\n            that.dateView.value(date);\n\n            if (date) {\n                old = that._old;\n                timeViewOptions = timeView.options;\n\n                if (dates[0]) {\n                    dates = $.grep(dates, function(d) { return isEqualDatePart(date, d); });\n\n                    if (dates[0]) {\n                        timeView.dataBind(dates);\n                        skip = true;\n                    }\n                }\n\n                if (!skip) {\n                    if (isEqualDatePart(date, min)) {\n                        timeViewOptions.min = min;\n                        timeViewOptions.max = lastTimeOption(options.interval);\n                        rebind = true;\n                    }\n\n                    if (isEqualDatePart(date, max)) {\n                        if (that._midnight) {\n                            timeView.dataBind([MAX]);\n                            skip = true;\n                        } else {\n                            timeViewOptions.max = max;\n                            if (!rebind) {\n                                timeViewOptions.min = MIN;\n                            }\n                            rebind = true;\n                        }\n                    }\n                }\n\n                if (!skip && ((!old && rebind) || (old && !isEqualDatePart(old, date)))) {\n                    if (!rebind) {\n                        timeViewOptions.max = MAX;\n                        timeViewOptions.min = MIN;\n                    }\n\n                    timeView.bind();\n                }\n            }\n\n            that.element.val(date ? kendo.toString(date, options.format, options.culture) : value);\n            that._updateARIA(date);\n\n            return date;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                dateView = that.dateView,\n                timeView = that.timeView,\n                value = that.element.val(),\n                isDateViewVisible = dateView.popup.visible();\n\n            if (e.altKey && e.keyCode === kendo.keys.DOWN) {\n                that.toggle(isDateViewVisible ? \"time\" : \"date\");\n            } else if (isDateViewVisible) {\n                dateView.move(e);\n                that._updateARIA(dateView._current);\n            } else if (timeView.popup.visible()) {\n                timeView.move(e);\n            } else if (e.keyCode === kendo.keys.ENTER && value !== that._oldText) {\n                that._change(value);\n            }\n        },\n\n        _views: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                id = element.attr(\"id\"),\n                dateView, timeView,\n                div, ul, msMin,\n                date;\n\n            that.dateView = dateView = new kendo.DateView(extend({}, options, {\n                id: id,\n                anchor: that.wrapper,\n                change: function() {\n                    var value = dateView.calendar.value(),\n                        msValue = +value,\n                        msMin = +options.min,\n                        msMax = +options.max,\n                        current;\n\n                    if (msValue === msMin || msValue === msMax) {\n                        current = new DATE(+that._value);\n                        current.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n\n                        if (isInRange(current, msMin, msMax)) {\n                            value = current;\n                        }\n                    }\n\n                    that._change(value);\n                    that.close(\"date\");\n                },\n                close: function(e) {\n                    if (that.trigger(CLOSE, dateViewParams)) {\n                        e.preventDefault();\n                    } else {\n                        element.attr(ARIA_EXPANDED, false);\n                        div.attr(ARIA_HIDDEN, true);\n\n                        if (!timeView.popup.visible()) {\n                            element.removeAttr(ARIA_OWNS);\n                        }\n                    }\n                },\n                open:  function(e) {\n                    if (that.trigger(OPEN, dateViewParams)) {\n                        e.preventDefault();\n                    } else {\n\n                        if (element.val() !== that._oldText) {\n                            date = parse(element.val(), options.parseFormats, options.culture);\n\n                            that.dateView[date ? \"current\" : \"value\"](date);\n                        }\n\n                        div.attr(ARIA_HIDDEN, false);\n                        element.attr(ARIA_EXPANDED, true)\n                               .attr(ARIA_OWNS, dateView._dateViewID);\n\n                        that._updateARIA(date);\n                    }\n                }\n            }));\n            div = dateView.div;\n\n            msMin = options.min.getTime();\n            that.timeView = timeView = new TimeView({\n                id: id,\n                value: options.value,\n                anchor: that.wrapper,\n                animation: options.animation,\n                format: options.timeFormat,\n                culture: options.culture,\n                height: options.height,\n                interval: options.interval,\n                min: new DATE(MIN),\n                max: new DATE(MAX),\n                dates: msMin === options.max.getTime() ? [new Date(msMin)] : [],\n                parseFormats: options.parseFormats,\n                change: function(value, trigger) {\n                    value = timeView._parse(value);\n\n                    if (value < options.min) {\n                        value = new DATE(+options.min);\n                        timeView.options.min = value;\n                    } else if (value > options.max) {\n                        value = new DATE(+options.max);\n                        timeView.options.max = value;\n                    }\n\n                    if (trigger) {\n                        that._timeSelected = true;\n                        that._change(value);\n                    } else {\n                        element.val(kendo.toString(value, options.format, options.culture));\n                        dateView.value(value);\n                        that._updateARIA(value);\n                    }\n                },\n                close: function(e) {\n                    if (that.trigger(CLOSE, timeViewParams)) {\n                        e.preventDefault();\n                    } else {\n                        ul.attr(ARIA_HIDDEN, true);\n                        element.attr(ARIA_EXPANDED, false);\n\n                        if (!dateView.popup.visible()) {\n                            element.removeAttr(ARIA_OWNS);\n                        }\n                    }\n                },\n                open:  function(e) {\n                    timeView._adjustListWidth();\n                    if (that.trigger(OPEN, timeViewParams)) {\n                        e.preventDefault();\n                    } else {\n                        if (element.val() !== that._oldText) {\n                            date = parse(element.val(), options.parseFormats, options.culture);\n\n                            that.timeView.value(date);\n                        }\n\n                        ul.attr(ARIA_HIDDEN, false);\n                        element.attr(ARIA_EXPANDED, true)\n                               .attr(ARIA_OWNS, timeView._timeViewID);\n\n                        timeView.options.active(timeView.current());\n                    }\n                },\n                active: function(current) {\n                    element.removeAttr(ARIA_ACTIVEDESCENDANT);\n                    if (current) {\n                        element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n                    }\n                }\n            });\n            ul = timeView.ul;\n        },\n\n        _icons: function() {\n            var that = this,\n                element = that.element,\n                icons;\n\n            icons = element.next(\"span.k-select\");\n\n            if (!icons[0]) {\n                icons = $('<span unselectable=\"on\" class=\"k-select\"><span unselectable=\"on\" class=\"k-icon k-i-calendar\">select</span><span unselectable=\"on\" class=\"k-icon k-i-clock\">select</span></span>').insertAfter(element);\n            }\n\n            icons = icons.children();\n            that._dateIcon = icons.eq(0).attr({\n                \"role\": \"button\",\n                \"aria-controls\": that.dateView._dateViewID\n            });\n\n            that._timeIcon = icons.eq(1).attr({\n                \"role\": \"button\",\n                \"aria-controls\": that.timeView._timeViewID\n            });\n        },\n\n        _wrapper: function() {\n            var that = this,\n            element = that.element,\n            wrapper;\n\n            wrapper = element.parents(\".k-datetimepicker\");\n\n            if (!wrapper[0]) {\n                wrapper = element.wrap(SPAN).parent().addClass(\"k-picker-wrap k-state-default\");\n                wrapper = wrapper.wrap(SPAN).parent();\n            }\n\n            wrapper[0].style.cssText = element[0].style.cssText;\n            element.css({\n                width: \"100%\",\n                height: element[0].style.height\n            });\n\n            that.wrapper = wrapper.addClass(\"k-widget k-datetimepicker k-header\")\n                                  .addClass(element[0].className);\n\n            that._inputWrapper = $(wrapper[0].firstChild);\n        },\n\n        _reset: function() {\n            var that = this,\n                element = that.element,\n                formId = element.attr(\"form\"),\n                form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n            if (form[0]) {\n                that._resetHandler = function() {\n                    that.value(element[0].defaultValue);\n                };\n\n                that._form = form.on(\"reset\", that._resetHandler);\n            }\n        },\n\n        _template: function() {\n            this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n        },\n\n        _updateARIA: function(date) {\n            var cell;\n            var that = this;\n            var calendar = that.dateView.calendar;\n\n            that.element.removeAttr(ARIA_ACTIVEDESCENDANT);\n\n            if (calendar) {\n                cell = calendar._cell;\n                cell.attr(\"aria-label\", that._ariaTemplate({ current: date || calendar.current() }));\n\n                that.element.attr(ARIA_ACTIVEDESCENDANT, cell.attr(\"id\"));\n            }\n        }\n    });\n\n    function lastTimeOption(interval) {\n        var date = new Date(2100, 0, 1);\n        date.setMinutes(-interval);\n        return date;\n    }\n\n    function preventDefault(e) {\n        e.preventDefault();\n    }\n\n    function normalize(options) {\n        var patterns = kendo.getCulture(options.culture).calendars.standard.patterns,\n            timeFormat;\n\n        options.format = extractFormat(options.format || patterns.g);\n        options.timeFormat = timeFormat = extractFormat(options.timeFormat || patterns.t);\n        kendo.DateView.normalize(options);\n        if ($.inArray(timeFormat, options.parseFormats) === -1) {\n            options.parseFormats.splice(1, 0, timeFormat);\n        }\n    }\n\n    ui.plugin(DateTimePicker);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        keys = kendo.keys,\n        extend = $.extend,\n        proxy = $.proxy,\n        Widget = ui.Widget,\n        pxUnitsRegex = /^\\d+(\\.\\d+)?px$/i,\n        percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i,\n        NS = \".kendoSplitter\",\n        EXPAND = \"expand\",\n        COLLAPSE = \"collapse\",\n        CONTENTLOAD = \"contentLoad\",\n        ERROR = \"error\",\n        RESIZE = \"resize\",\n        LAYOUTCHANGE = \"layoutChange\",\n        HORIZONTAL = \"horizontal\",\n        VERTICAL = \"vertical\",\n        MOUSEENTER = \"mouseenter\",\n        CLICK = \"click\",\n        PANE = \"pane\",\n        MOUSELEAVE = \"mouseleave\",\n        FOCUSED = \"k-state-focused\",\n        KPANE = \"k-\" + PANE,\n        PANECLASS = \".\" + KPANE;\n\n    function isPercentageSize(size) {\n        return percentageUnitsRegex.test(size);\n    }\n\n    function isPixelSize(size) {\n        return pxUnitsRegex.test(size) || /^\\d+$/.test(size);\n    }\n\n    function isFluid(size) {\n        return !isPercentageSize(size) && !isPixelSize(size);\n    }\n\n    function calculateSize(size, total) {\n        var output = parseInt(size, 10);\n\n        if (isPercentageSize(size)) {\n            output = Math.floor(output * total / 100);\n        }\n\n        return output;\n    }\n\n    function panePropertyAccessor(propertyName, triggersResize) {\n        return function(pane, value) {\n            var paneConfig = this.element.find(pane).data(PANE);\n\n            if (arguments.length == 1) {\n                return paneConfig[propertyName];\n            }\n\n            paneConfig[propertyName] = value;\n\n            if (triggersResize) {\n                var splitter = this.element.data(\"kendo\" + this.options.name);\n                splitter.resize(true);\n            }\n        };\n    }\n\n    var Splitter = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                isHorizontal;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.wrapper = that.element;\n\n            isHorizontal = that.options.orientation.toLowerCase() != VERTICAL;\n            that.orientation = isHorizontal ? HORIZONTAL : VERTICAL;\n            that._dimension = isHorizontal ? \"width\" : \"height\";\n            that._keys = {\n                decrease: isHorizontal ? keys.LEFT : keys.UP,\n                increase: isHorizontal ? keys.RIGHT : keys.DOWN\n            };\n\n            that._resizeStep = 10;\n\n            that._marker = kendo.guid().substring(0, 8);\n\n            that._initPanes();\n\n            that.resizing = new PaneResizing(that);\n\n            that.element.triggerHandler(\"init\" + NS);\n        },\n        events: [\n            EXPAND,\n            COLLAPSE,\n            CONTENTLOAD,\n            ERROR,\n            RESIZE,\n            LAYOUTCHANGE\n        ],\n\n        _addOverlays: function() {\n            this._panes().append(\"<div class='k-splitter-overlay k-overlay' />\");\n        },\n\n        _removeOverlays: function() {\n            this._panes().children(\".k-splitter-overlay\").remove();\n        },\n\n        _attachEvents: function() {\n            var that = this,\n                orientation = that.options.orientation;\n\n            // do not use delegated events to increase performance of nested elements\n            that.element\n                .children(\".k-splitbar-draggable-\" + orientation)\n                    .on(\"keydown\" + NS, proxy(that._keydown, that))\n                    .on(\"mousedown\" + NS, function(e) { e.currentTarget.focus(); })\n                    .on(\"focus\" + NS, function(e) { $(e.currentTarget).addClass(FOCUSED);  })\n                    .on(\"blur\" + NS, function(e) { $(e.currentTarget).removeClass(FOCUSED);\n                        if (that.resizing) {\n                            that.resizing.end();\n                        }\n                    })\n                    .on(MOUSEENTER + NS, function() { $(this).addClass(\"k-splitbar-\" + that.orientation + \"-hover\"); })\n                    .on(MOUSELEAVE + NS, function() { $(this).removeClass(\"k-splitbar-\" + that.orientation + \"-hover\"); })\n                    .on(\"mousedown\" + NS, proxy(that._addOverlays, that))\n                .end()\n                .children(\".k-splitbar\")\n                    .on(\"dblclick\" + NS, proxy(that._togglePane, that))\n                    .children(\".k-collapse-next, .k-collapse-prev\").on(CLICK + NS, that._arrowClick(COLLAPSE)).end()\n                    .children(\".k-expand-next, .k-expand-prev\").on(CLICK + NS, that._arrowClick(EXPAND)).end()\n                .end();\n\n            $(window)\n                .on(\"resize\" + NS + that._marker, proxy(that.resize, that))\n                .on(\"mouseup\" + NS + that._marker, proxy(that._removeOverlays, that));\n        },\n\n        _detachEvents: function() {\n            var that = this;\n\n            that.element\n                .children(\".k-splitbar-draggable-\" + that.orientation).off(NS).end()\n                .children(\".k-splitbar\").off(\"dblclick\" + NS)\n                    .children(\".k-collapse-next, .k-collapse-prev, .k-expand-next, .k-expand-prev\").off(NS);\n\n            $(window).off(\"resize\" + NS + that._marker);\n        },\n\n        options: {\n            name: \"Splitter\",\n            orientation: HORIZONTAL,\n            panes: []\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this._detachEvents();\n\n            if (this.resizing) {\n                this.resizing.destroy();\n            }\n\n            kendo.destroy(this.element);\n\n            this.wrapper = this.element = null;\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                resizing = that.resizing,\n                target = $(e.currentTarget),\n                navigationKeys = that._keys,\n                increase = key === navigationKeys.increase,\n                decrease = key === navigationKeys.decrease,\n                pane;\n\n            if (increase || decrease) {\n                if (e.ctrlKey) {\n                    pane = target[decrease ? \"next\" : \"prev\"]();\n\n                    if (resizing && resizing.isResizing()) {\n                        resizing.end();\n                    }\n\n                    if (!pane[that._dimension]()) {\n                        that._triggerAction(EXPAND, pane);\n                    } else {\n                        that._triggerAction(COLLAPSE, target[decrease ? \"prev\" : \"next\"]());\n                    }\n                } else if (resizing) {\n                    resizing.move((decrease ? -1 : 1) * that._resizeStep, target);\n                }\n                e.preventDefault();\n            } else if (key === keys.ENTER && resizing) {\n                resizing.end();\n                e.preventDefault();\n            }\n        },\n\n        _initPanes: function() {\n            var panesConfig = this.options.panes || [];\n            var that = this;\n\n            this.element\n                .addClass(\"k-widget\").addClass(\"k-splitter\")\n                .children()\n                    .each(function(i, pane) {\n                        if (pane.nodeName.toLowerCase() != \"script\") {\n                            that._initPane(pane, panesConfig[i]);\n                        }\n                    });\n\n            this.resize();\n        },\n\n        _initPane: function(pane, config) {\n            pane = $(pane)\n                .attr(\"role\", \"group\")\n                .addClass(KPANE);\n\n            pane.data(PANE, config ? config : {})\n                .toggleClass(\"k-scrollable\", config ? config.scrollable !== false : true);\n\n            this.ajaxRequest(pane);\n        },\n\n        ajaxRequest: function(pane, url, data) {\n            var that = this,\n                paneConfig;\n\n            pane = that.element.find(pane);\n            paneConfig = pane.data(PANE);\n\n            url = url || paneConfig.contentUrl;\n\n            if (url) {\n                pane.append(\"<span class='k-icon k-loading k-pane-loading' />\");\n\n                if (kendo.isLocalUrl(url)) {\n                    jQuery.ajax({\n                        url: url,\n                        data: data || {},\n                        type: \"GET\",\n                        dataType: \"html\",\n                        success: function (data) {\n                            that.angular(\"cleanup\", function(){ return { elements: pane.get() }; });\n                            pane.html(data);\n                            that.angular(\"compile\", function(){ return { elements: pane.get() }; });\n\n                            that.trigger(CONTENTLOAD, { pane: pane[0] });\n                        },\n                        error: function (xhr, status) {\n                            that.trigger(ERROR, {\n                                pane: pane[0],\n                                status: status,\n                                xhr: xhr\n                            });\n                        }\n                    });\n                } else {\n                    pane.removeClass(\"k-scrollable\")\n                        .html(\"<iframe src='\" + url + \"' frameborder='0' class='k-content-frame'>\" +\n                                \"This page requires frames in order to show content\" +\n                              \"</iframe>\");\n                }\n            }\n        },\n\n        _triggerAction: function(type, pane) {\n            if (!this.trigger(type, { pane: pane[0] })) {\n                this[type](pane[0]);\n            }\n        },\n\n        _togglePane: function(e) {\n            var that = this,\n                target = $(e.target),\n                arrow;\n\n            if (target.closest(\".k-splitter\")[0] != that.element[0]) {\n                return;\n            }\n\n            arrow = target.children(\".k-icon:not(.k-resize-handle)\");\n\n            if (arrow.length !== 1) {\n                return;\n            }\n\n            if (arrow.is(\".k-collapse-prev\")) {\n                that._triggerAction(COLLAPSE, target.prev());\n            } else if (arrow.is(\".k-collapse-next\")) {\n                that._triggerAction(COLLAPSE, target.next());\n            } else if (arrow.is(\".k-expand-prev\")) {\n                that._triggerAction(EXPAND, target.prev());\n            } else if (arrow.is(\".k-expand-next\")) {\n                that._triggerAction(EXPAND, target.next());\n            }\n        },\n        _arrowClick: function (arrowType) {\n            var that = this;\n\n            return function(e) {\n                var target = $(e.target),\n                    pane;\n\n                if (target.closest(\".k-splitter\")[0] != that.element[0]) {\n                    return;\n                }\n\n                if (target.is(\".k-\" + arrowType + \"-prev\")) {\n                    pane = target.parent().prev();\n                } else {\n                    pane = target.parent().next();\n                }\n                that._triggerAction(arrowType, pane);\n            };\n        },\n        _updateSplitBar: function(splitbar, previousPane, nextPane) {\n            var catIconIf = function(iconType, condition) {\n                   return condition ? \"<div class='k-icon \" + iconType + \"' />\" : \"\";\n                },\n                orientation = this.orientation,\n                draggable = (previousPane.resizable !== false) && (nextPane.resizable !== false),\n                prevCollapsible = previousPane.collapsible,\n                prevCollapsed = previousPane.collapsed,\n                nextCollapsible = nextPane.collapsible,\n                nextCollapsed = nextPane.collapsed;\n\n            splitbar.addClass(\"k-splitbar k-state-default k-splitbar-\" + orientation)\n                    .attr(\"role\", \"separator\")\n                    .attr(\"aria-expanded\", !(prevCollapsed || nextCollapsed))\n                    .removeClass(\"k-splitbar-\" + orientation + \"-hover\")\n                    .toggleClass(\"k-splitbar-draggable-\" + orientation,\n                        draggable && !prevCollapsed && !nextCollapsed)\n                    .toggleClass(\"k-splitbar-static-\" + orientation,\n                        !draggable && !prevCollapsible && !nextCollapsible)\n                    .html(\n                        catIconIf(\"k-collapse-prev\", prevCollapsible && !prevCollapsed && !nextCollapsed) +\n                        catIconIf(\"k-expand-prev\", prevCollapsible && prevCollapsed && !nextCollapsed) +\n                        catIconIf(\"k-resize-handle\", draggable) +\n                        catIconIf(\"k-collapse-next\", nextCollapsible && !nextCollapsed && !prevCollapsed) +\n                        catIconIf(\"k-expand-next\", nextCollapsible && nextCollapsed && !prevCollapsed)\n                    );\n\n            if (!draggable && !prevCollapsible && !nextCollapsible) {\n                splitbar.removeAttr(\"tabindex\");\n            }\n        },\n        _updateSplitBars: function() {\n            var that = this;\n\n            this.element.children(\".k-splitbar\").each(function() {\n                var splitbar = $(this),\n                    previousPane = splitbar.prevAll(PANECLASS).first().data(PANE),\n                    nextPane = splitbar.nextAll(PANECLASS).first().data(PANE);\n\n                if (!nextPane) {\n                    return;\n                }\n\n                that._updateSplitBar(splitbar, previousPane, nextPane);\n            });\n        },\n        _removeSplitBars: function() {\n            this.element.children(\".k-splitbar\").remove();\n        },\n        _panes: function() {\n            if (!this.element) {\n                return $();\n            }\n            return this.element.children(PANECLASS);\n        },\n\n        _resize: function() {\n            var that = this,\n                element = that.element,\n                panes = element.children(PANECLASS),\n                isHorizontal = that.orientation == HORIZONTAL,\n                splitBars = element.children(\".k-splitbar\"),\n                splitBarsCount = splitBars.length,\n                sizingProperty = isHorizontal ? \"width\" : \"height\",\n                totalSize = element[sizingProperty]();\n\n            if (splitBarsCount === 0) {\n                splitBarsCount = panes.length - 1;\n                panes.slice(0, splitBarsCount)\n                     .after(\"<div tabindex='0' class='k-splitbar' data-marker='\" + that._marker + \"' />\");\n\n                that._updateSplitBars();\n                splitBars = element.children(\".k-splitbar\");\n            } else {\n                that._updateSplitBars();\n            }\n\n            // discard splitbar sizes from total size\n            splitBars.each(function() {\n                totalSize -= this[isHorizontal ? \"offsetWidth\" : \"offsetHeight\"];\n            });\n\n            var sizedPanesWidth = 0,\n                sizedPanesCount = 0,\n                freeSizedPanes = $();\n\n            panes.css({ position: \"absolute\", top: 0 })\n                [sizingProperty](function() {\n                    var element = $(this),\n                        config = element.data(PANE) || {}, size;\n\n                    element.removeClass(\"k-state-collapsed\");\n                    if (config.collapsed) {\n                        size = config.collapsedSize ? calculateSize(config.collapsedSize, totalSize) : 0;\n                        element.css(\"overflow\", \"hidden\").addClass(\"k-state-collapsed\");\n                    } else if (isFluid(config.size)) {\n                        freeSizedPanes = freeSizedPanes.add(this);\n                        return;\n                    } else { // sized in px/%, not collapsed\n                        size = calculateSize(config.size, totalSize);\n                    }\n\n                    sizedPanesCount++;\n                    sizedPanesWidth += size;\n\n                    return size;\n                });\n\n            totalSize -= sizedPanesWidth;\n\n            var freeSizePanesCount = freeSizedPanes.length,\n                freeSizePaneWidth = Math.floor(totalSize / freeSizePanesCount);\n\n            freeSizedPanes\n                .slice(0, freeSizePanesCount - 1)\n                    .css(sizingProperty, freeSizePaneWidth)\n                .end()\n                .eq(freeSizePanesCount - 1)\n                    .css(sizingProperty, totalSize - (freeSizePanesCount - 1) * freeSizePaneWidth);\n\n            // arrange panes\n            var sum = 0,\n                alternateSizingProperty = isHorizontal ? \"height\" : \"width\",\n                positioningProperty = isHorizontal ? \"left\" : \"top\",\n                sizingDomProperty = isHorizontal ? \"offsetWidth\" : \"offsetHeight\";\n\n            if (freeSizePanesCount === 0) {\n                var lastNonCollapsedPane = panes.filter(function() {\n                    return !(($(this).data(PANE) || {}).collapsed);\n                }).last();\n\n                lastNonCollapsedPane[sizingProperty](totalSize + lastNonCollapsedPane[0][sizingDomProperty]);\n            }\n\n            element.children()\n                .css(alternateSizingProperty, element[alternateSizingProperty]())\n                .each(function (i, child) {\n                    if (child.tagName.toLowerCase() != \"script\") {\n                        child.style[positioningProperty] = Math.floor(sum) + \"px\";\n                        sum += child[sizingDomProperty];\n                    }\n                });\n\n            that._detachEvents();\n            that._attachEvents();\n\n            kendo.resize(panes);\n            that.trigger(LAYOUTCHANGE);\n        },\n\n        toggle: function(pane, expand) {\n            var that = this,\n                paneConfig;\n\n            pane = that.element.find(pane);\n            paneConfig = pane.data(PANE);\n\n            if (!expand && !paneConfig.collapsible) {\n                return;\n            }\n\n            if (arguments.length == 1) {\n                expand = paneConfig.collapsed === undefined ? false : paneConfig.collapsed;\n            }\n\n            paneConfig.collapsed = !expand;\n\n            if (paneConfig.collapsed) {\n                pane.css(\"overflow\", \"hidden\");\n            } else {\n                pane.css(\"overflow\", \"\");\n            }\n\n            that.resize(true);\n        },\n\n        collapse: function(pane) {\n            this.toggle(pane, false);\n        },\n\n        expand: function(pane) {\n            this.toggle(pane, true);\n        },\n\n        _addPane: function(config, idx, paneElement) {\n            var that = this;\n\n            if (paneElement.length) {\n                that.options.panes.splice(idx, 0, config);\n                that._initPane(paneElement, config);\n\n                that._removeSplitBars();\n\n                that.resize(true);\n            }\n\n            return paneElement;\n        },\n\n        append: function(config) {\n            config = config || {};\n\n            var that = this,\n                paneElement = $(\"<div />\").appendTo(that.element);\n\n            return that._addPane(config, that.options.panes.length, paneElement);\n        },\n\n        insertBefore: function(config, referencePane) {\n            referencePane = $(referencePane);\n            config = config || {};\n\n            var that = this,\n                idx = that.wrapper.children(\".k-pane\").index(referencePane),\n                paneElement = $(\"<div />\").insertBefore($(referencePane));\n\n            return that._addPane(config, idx, paneElement);\n        },\n\n        insertAfter: function(config, referencePane) {\n            referencePane = $(referencePane);\n            config = config || {};\n\n            var that = this,\n                idx = that.wrapper.children(\".k-pane\").index(referencePane),\n                paneElement = $(\"<div />\").insertAfter($(referencePane));\n\n            return that._addPane(config, idx + 1, paneElement);\n        },\n\n        remove: function(pane) {\n            pane = $(pane);\n\n            var that = this;\n\n            if (pane.length) {\n                kendo.destroy(pane);\n                pane.each(function(idx, element){\n                    that.options.panes.splice(that.wrapper.children(\".k-pane\").index(element), 1);\n                    $(element).remove();\n                });\n\n                that._removeSplitBars();\n\n                if (that.options.panes.length) {\n                    that.resize(true);\n                }\n            }\n\n            return that;\n        },\n\n        size: panePropertyAccessor(\"size\", true),\n\n        min: panePropertyAccessor(\"min\"),\n\n        max: panePropertyAccessor(\"max\")\n    });\n\n    ui.plugin(Splitter);\n\n    var verticalDefaults = {\n            sizingProperty: \"height\",\n            sizingDomProperty: \"offsetHeight\",\n            alternateSizingProperty: \"width\",\n            positioningProperty: \"top\",\n            mousePositioningProperty: \"pageY\"\n        };\n\n    var horizontalDefaults = {\n            sizingProperty: \"width\",\n            sizingDomProperty: \"offsetWidth\",\n            alternateSizingProperty: \"height\",\n            positioningProperty: \"left\",\n            mousePositioningProperty: \"pageX\"\n        };\n\n    function PaneResizing(splitter) {\n        var that = this,\n            orientation = splitter.orientation;\n\n        that.owner = splitter;\n        that._element = splitter.element;\n        that.orientation = orientation;\n\n        extend(that, orientation === HORIZONTAL ? horizontalDefaults : verticalDefaults);\n\n        that._resizable = new kendo.ui.Resizable(splitter.element, {\n            orientation: orientation,\n            handle: \".k-splitbar-draggable-\" + orientation + \"[data-marker=\" + splitter._marker + \"]\",\n            hint: proxy(that._createHint, that),\n            start: proxy(that._start, that),\n            max: proxy(that._max, that),\n            min: proxy(that._min, that),\n            invalidClass:\"k-restricted-size-\" + orientation,\n            resizeend: proxy(that._stop, that)\n        });\n    }\n\n    PaneResizing.prototype = {\n        press: function(target) {\n            this._resizable.press(target);\n        },\n\n        move: function(delta, target) {\n            if (!this.pressed) {\n                this.press(target);\n                this.pressed = true;\n            }\n\n            if (!this._resizable.target) {\n                this._resizable.press(target);\n            }\n\n            this._resizable.move(delta);\n        },\n\n        end: function() {\n            this._resizable.end();\n            this.pressed = false;\n        },\n\n        destroy: function() {\n            this._resizable.destroy();\n            this._resizable = this._element = this.owner = null;\n        },\n\n        isResizing: function() {\n            return this._resizable.resizing;\n        },\n\n        _createHint: function(handle) {\n            var that = this;\n            return $(\"<div class='k-ghost-splitbar k-ghost-splitbar-\" + that.orientation + \" k-state-default' />\")\n                        .css(that.alternateSizingProperty, handle[that.alternateSizingProperty]());\n        },\n\n        _start: function(e) {\n            var that = this,\n                splitbar = $(e.currentTarget),\n                previousPane = splitbar.prev(),\n                nextPane = splitbar.next(),\n                previousPaneConfig = previousPane.data(PANE),\n                nextPaneConfig = nextPane.data(PANE),\n                prevBoundary = parseInt(previousPane[0].style[that.positioningProperty], 10),\n                nextBoundary = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - splitbar[0][that.sizingDomProperty],\n                totalSize = parseInt(that._element.css(that.sizingProperty), 10),\n                toPx = function (value) {\n                    var val = parseInt(value, 10);\n                    return (isPixelSize(value) ? val : (totalSize * val) / 100) || 0;\n                },\n                prevMinSize = toPx(previousPaneConfig.min),\n                prevMaxSize = toPx(previousPaneConfig.max) || nextBoundary - prevBoundary,\n                nextMinSize = toPx(nextPaneConfig.min),\n                nextMaxSize = toPx(nextPaneConfig.max) || nextBoundary - prevBoundary;\n\n            that.previousPane = previousPane;\n            that.nextPane = nextPane;\n            that._maxPosition = Math.min(nextBoundary - nextMinSize, prevBoundary + prevMaxSize);\n            that._minPosition = Math.max(prevBoundary + prevMinSize, nextBoundary - nextMaxSize);\n        },\n        _max: function() {\n              return this._maxPosition;\n        },\n        _min: function() {\n            return this._minPosition;\n        },\n        _stop: function(e) {\n            var that = this,\n                splitbar = $(e.currentTarget),\n                owner = that.owner;\n\n            owner._panes().children(\".k-splitter-overlay\").remove();\n\n            if (e.keyCode !== kendo.keys.ESC) {\n                var ghostPosition = e.position,\n                    previousPane = splitbar.prev(),\n                    nextPane = splitbar.next(),\n                    previousPaneConfig = previousPane.data(PANE),\n                    nextPaneConfig = nextPane.data(PANE),\n                    previousPaneNewSize = ghostPosition - parseInt(previousPane[0].style[that.positioningProperty], 10),\n                    nextPaneNewSize = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - ghostPosition - splitbar[0][that.sizingDomProperty],\n                    fluidPanesCount = that._element.children(PANECLASS).filter(function() { return isFluid($(this).data(PANE).size); }).length;\n\n                if (!isFluid(previousPaneConfig.size) || fluidPanesCount > 1) {\n                    if (isFluid(previousPaneConfig.size)) {\n                        fluidPanesCount--;\n                    }\n\n                    previousPaneConfig.size = previousPaneNewSize + \"px\";\n                }\n\n                if (!isFluid(nextPaneConfig.size) || fluidPanesCount > 1) {\n                    nextPaneConfig.size = nextPaneNewSize + \"px\";\n                }\n\n                owner.resize(true);\n            }\n\n            return false;\n        }\n    };\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        keys = kendo.keys,\n        NS = \".kendoSchedulerView\",\n        math = Math;\n\n    function levels(values, key) {\n        var result = [];\n\n        function collect(depth, values) {\n            values = values[key];\n\n            if (values) {\n                var level = result[depth] = result[depth] || [];\n\n                for (var idx = 0; idx < values.length; idx++) {\n                    level.push(values[idx]);\n                    collect(depth + 1, values[idx]);\n                }\n            }\n        }\n\n        collect(0, values);\n\n        return result;\n    }\n\n    function cellspacing() {\n        if (kendo.support.cssBorderSpacing) {\n            return \"\";\n        }\n\n        return 'cellspacing=\"0\"';\n    }\n\n    function table(tableRows, className) {\n        if (!tableRows.length) {\n            return \"\";\n        }\n\n        return '<table ' + cellspacing() + ' class=\"' + $.trim('k-scheduler-table ' + (className || \"\")) + '\">' +\n               '<tr>' +\n                    tableRows.join(\"</tr><tr>\") +\n               '</tr>' +\n               '</table>';\n    }\n\n    function allDayTable(tableRows, className) {\n        if (!tableRows.length) {\n            return \"\";\n        }\n\n        return \"<div style='position:relative'>\" + table(tableRows, className) + \"</div>\";\n    }\n\n    function timesHeader(columnLevelCount, allDaySlot, rowCount) {\n        var tableRows = [];\n\n        if (rowCount > 0) {\n            for (var idx = 0; idx < columnLevelCount; idx++) {\n                tableRows.push(\"<th>&nbsp;</th>\");\n            }\n        }\n\n        if (allDaySlot) {\n            tableRows.push('<th class=\"k-scheduler-times-all-day\">' + allDaySlot.text + '</th>');\n        }\n\n        if (rowCount < 1) {\n           return $();\n        }\n\n        return $('<div class=\"k-scheduler-times\">' + table(tableRows) + '</div>');\n    }\n\n    function datesHeader(columnLevels, columnCount, allDaySlot) {\n        var dateTableRows = [];\n        var columnIndex;\n\n        for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n            var level = columnLevels[columnLevelIndex];\n            var th = [];\n            var colspan = columnCount / level.length;\n\n            for (columnIndex = 0; columnIndex < level.length; columnIndex ++) {\n                var column = level[columnIndex];\n\n                th.push('<th colspan=\"' + (column.colspan || colspan) + '\" class=\"' + (column.className || \"\")  + '\">' + column.text + \"</th>\");\n            }\n\n            dateTableRows.push(th.join(\"\"));\n        }\n\n        var allDayTableRows = [];\n\n        if (allDaySlot) {\n            var lastLevel = columnLevels[columnLevels.length - 1];\n            var td = [];\n            var cellContent = allDaySlot.cellContent;\n\n            for (columnIndex = 0; columnIndex < lastLevel.length; columnIndex++) {\n                td.push('<td class=\"' + (lastLevel[columnIndex].className || \"\")  + '\">' + (cellContent ? cellContent(columnIndex) : '&nbsp;') + '</th>');\n            }\n\n            allDayTableRows.push(td.join(\"\"));\n        }\n\n        return $(\n            '<div class=\"k-scheduler-header k-state-default\">' +\n                '<div class=\"k-scheduler-header-wrap\">' +\n                    table(dateTableRows) +\n                    allDayTable(allDayTableRows, \"k-scheduler-header-all-day\") +\n                '</div>' +\n            '</div>'\n        );\n    }\n\n    function times(rowLevels, rowCount) {\n        var rows = new Array(rowCount).join().split(\",\");\n        var rowHeaderRows = [];\n        var rowIndex;\n\n        for (var rowLevelIndex = 0; rowLevelIndex < rowLevels.length; rowLevelIndex++) {\n            var level = rowLevels[rowLevelIndex];\n            var rowspan = rowCount / level.length;\n            var className;\n\n            for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n                className = level[rowIndex].className || \"\";\n\n                if (level[rowIndex].allDay) {\n                    className = \"k-scheduler-times-all-day\";\n                }\n\n                rows[rowspan * rowIndex] += '<th class=\"' + className + '\" rowspan=\"' + rowspan + '\">' + level[rowIndex].text + \"</th>\";\n            }\n        }\n\n        for (rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n            rowHeaderRows.push(rows[rowIndex]);\n        }\n\n        if (rowCount < 1) {\n            return $();\n        }\n\n        return $('<div class=\"k-scheduler-times\">' + table(rowHeaderRows) + '</div>');\n    }\n\n    function content() {\n        return $(\n            '<div class=\"k-scheduler-content\">' +\n                '<table ' + cellspacing() + ' class=\"k-scheduler-table\"/>' +\n            '</div>'\n        );\n    }\n    var HINT = '<div class=\"k-marquee k-scheduler-marquee\">' +\n                    '<div class=\"k-marquee-color\"></div>' +\n                    '<div class=\"k-marquee-text\">' +\n                        '<div class=\"k-label-top\"></div>' +\n                        '<div class=\"k-label-bottom\"></div>' +\n                    '</div>' +\n                '</div>';\n\n    kendo.ui.scheduler = {};\n\n    var ResourceView = kendo.Class.extend({\n        init: function(index) {\n            this._index = index;\n            this._timeSlotCollections = [];\n            this._daySlotCollections = [];\n        },\n\n        addTimeSlotCollection: function(startDate, endDate) {\n            return this._addCollection(startDate, endDate, this._timeSlotCollections);\n        },\n\n        addDaySlotCollection: function(startDate, endDate) {\n            return this._addCollection(startDate, endDate, this._daySlotCollections);\n        },\n\n        _addCollection: function(startDate, endDate, collections) {\n            var collection = new SlotCollection(startDate, endDate, this._index, collections.length);\n\n            collections.push(collection);\n\n            return collection;\n        },\n\n        timeSlotCollectionCount: function() {\n            return this._timeSlotCollections.length;\n        },\n\n        daySlotCollectionCount: function() {\n            return this._daySlotCollections.length;\n        },\n\n        daySlotByPosition: function(x, y) {\n            return this._slotByPosition(x, y, this._daySlotCollections);\n        },\n\n        timeSlotByPosition: function(x, y) {\n            return this._slotByPosition(x, y, this._timeSlotCollections);\n        },\n\n        _slotByPosition: function(x, y, collections) {\n           for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n               var collection = collections[collectionIndex];\n\n               for (var slotIndex = 0; slotIndex < collection.count(); slotIndex++) {\n                   var slot = collection.at(slotIndex);\n\n                   if (x >= slot.offsetLeft && x < slot.offsetLeft + slot.clientWidth &&\n                       y >= slot.offsetTop && y <= slot.offsetTop + slot.clientHeight) {\n                       return slot;\n                   }\n               }\n           }\n        },\n\n        refresh: function() {\n            var collectionIndex;\n\n            for (collectionIndex = 0; collectionIndex < this._daySlotCollections.length; collectionIndex++) {\n                this._daySlotCollections[collectionIndex].refresh();\n            }\n\n            for (collectionIndex = 0; collectionIndex < this._timeSlotCollections.length; collectionIndex++) {\n                this._timeSlotCollections[collectionIndex].refresh();\n            }\n        },\n\n        timeSlotRanges: function(startTime, endTime) {\n            var collections = this._timeSlotCollections;\n\n            var start = this._startSlot(startTime, collections);\n\n            if (!start.inRange && startTime >= start.slot.end) {\n                start = null;\n            }\n\n            var end = start;\n\n            if (startTime < endTime) {\n                end = this._endSlot(endTime, collections);\n            }\n\n            if (end && !end.inRange && endTime <= end.slot.start) {\n                end = null;\n            }\n\n            if (start === null && end === null) {\n                return [];\n            }\n\n            if (start === null) {\n                start = {\n                    inRange: true,\n                    slot: collections[end.slot.collectionIndex].first()\n                };\n            }\n\n            if (end === null) {\n                end = {\n                    inRange: true,\n                    slot: collections[start.slot.collectionIndex].last()\n                };\n            }\n\n            return this._continuousRange(TimeSlotRange, collections, start, end);\n        },\n\n        daySlotRanges: function(startTime, endTime, isAllDay) {\n            var collections = this._daySlotCollections;\n\n            var start = this._startSlot(startTime, collections, isAllDay);\n\n            if (!start.inRange && startTime >= start.slot.end) {\n                start = null;\n            }\n\n            var end = start;\n\n            if (startTime < endTime) {\n                end = this._endSlot(endTime, collections, isAllDay);\n            }\n\n            if (end && !end.inRange && endTime <= end.slot.start) {\n                end = null;\n            }\n\n            if (start === null && end === null) {\n                return [];\n            }\n\n            if (start === null) {\n                do {\n                    startTime += kendo.date.MS_PER_DAY;\n                    start = this._startSlot(startTime, collections, isAllDay);\n                } while (!start.inRange && startTime >= start.slot.end);\n            }\n\n            if (end === null) {\n                do {\n                    endTime -= kendo.date.MS_PER_DAY;\n                    end = this._endSlot(endTime, collections, isAllDay);\n                } while (!end.inRange && endTime <= end.slot.start);\n            }\n\n            return this._continuousRange(DaySlotRange, collections, start, end);\n        },\n\n        _continuousRange: function(range, collections, start, end) {\n            var startSlot = start.slot;\n            var endSlot = end.slot;\n\n            var startIndex = startSlot.collectionIndex;\n            var endIndex = endSlot.collectionIndex;\n\n            var ranges = [];\n\n            for (var collectionIndex = startIndex; collectionIndex <= endIndex; collectionIndex++) {\n                var collection = collections[collectionIndex];\n\n                var first = collection.first();\n                var last = collection.last();\n                var head = false;\n                var tail = false;\n\n                if (collectionIndex == startIndex) {\n                    tail = !start.inRange;\n                }\n\n                if (collectionIndex == endIndex) {\n                    head = !end.inRange;\n                }\n\n                if (first.start < startSlot.start) {\n                    first = startSlot;\n                }\n\n                if (last.start > endSlot.start) {\n                    last = endSlot;\n                }\n\n                if (startIndex < endIndex) {\n                    if (collectionIndex == startIndex) {\n                        head = true;\n                    } else if (collectionIndex == endIndex) {\n                        tail = true;\n                    } else {\n                        head = tail = true;\n                    }\n                }\n\n                ranges.push(new range({\n                    start: first,\n                    end: last,\n                    collection: collection,\n                    head: head,\n                    tail: tail\n                }));\n            }\n\n            return ranges;\n        },\n\n        slotRanges: function(event, isDay) {\n            var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n            var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n\n            if (isDay === undefined) {\n                isDay = event.isMultiDay();\n            }\n\n            if (isDay) {\n                return this.daySlotRanges(startTime, endTime, event.isAllDay);\n            }\n\n            return this.timeSlotRanges(startTime, endTime);\n        },\n\n        ranges: function(startTime, endTime, isDay, isAllDay) {\n            if (typeof startTime != \"number\") {\n                startTime = kendo.date.toUtcTime(startTime);\n            }\n\n            if (typeof endTime != \"number\") {\n                endTime = kendo.date.toUtcTime(endTime);\n            }\n\n            if (isDay) {\n                return this.daySlotRanges(startTime, endTime, isAllDay);\n            }\n\n            return this.timeSlotRanges(startTime, endTime);\n        },\n\n        _startCollection: function(date, collections) {\n            for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n                var collection = collections[collectionIndex];\n\n                if (collection.startInRange(date)) {\n                    return collection;\n                }\n            }\n\n            return null;\n        },\n\n        _endCollection: function(date, collections, isAllDay) {\n            for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n                var collection = collections[collectionIndex];\n\n                if (collection.endInRange(date, isAllDay)) {\n                    return collection;\n                }\n            }\n\n            return null;\n        },\n\n        _getCollections: function(isDay) {\n            return isDay ? this._daySlotCollections : this._timeSlotCollections;\n        },\n\n        continuousSlot: function(slot, reverse) {\n            var pad = reverse ? -1 : 1;\n            var collections = this._getCollections(slot.isDaySlot);\n            var collection = collections[slot.collectionIndex + pad];\n\n            return collection ? collection[reverse ? \"last\" : \"first\"]() : undefined;\n        },\n\n        firstSlot: function() {\n            var collections = this._getCollections(this.daySlotCollectionCount());\n\n            return collections[0].first();\n        },\n\n        lastSlot: function() {\n            var collections = this._getCollections(this.daySlotCollectionCount());\n\n            return collections[collections.length - 1].last();\n        },\n\n        upSlot: function(slot, keepCollection) {\n            var that = this;\n            var moveToDaySlot = function(isDaySlot, collectionIndex, index) {\n                var isFirstCell = index === 0;\n\n                if (!keepCollection && !isDaySlot && isFirstCell && that.daySlotCollectionCount()) {\n                    return that._daySlotCollections[0].at(collectionIndex);\n                }\n            };\n\n            if (!this.timeSlotCollectionCount()) {\n                keepCollection = true;\n            }\n\n            return this._verticalSlot(slot, -1, moveToDaySlot);\n        },\n\n        downSlot: function(slot, keepCollection) {\n            var that = this;\n            var moveToTimeSlot = function(isDaySlot, collectionIndex, index) {\n                if (!keepCollection && isDaySlot && that.timeSlotCollectionCount()) {\n                    return that._timeSlotCollections[index].at(0);\n                }\n            };\n\n            if (!this.timeSlotCollectionCount()) {\n                keepCollection = true;\n            }\n\n            return this._verticalSlot(slot, 1, moveToTimeSlot);\n        },\n\n        leftSlot: function(slot) {\n            return this._horizontalSlot(slot, -1);\n        },\n\n        rightSlot: function(slot) {\n            return this._horizontalSlot(slot, 1);\n        },\n\n        _horizontalSlot: function(slot, step) {\n            var index = slot.index;\n            var isDaySlot = slot.isDaySlot;\n            var collectionIndex = slot.collectionIndex;\n            var collections = this._getCollections(isDaySlot);\n\n            if (isDaySlot) {\n                index += step;\n            } else {\n                collectionIndex += step;\n            }\n\n            var collection = collections[collectionIndex];\n\n            return collection ? collection.at(index) : undefined;\n        },\n\n        _verticalSlot: function(slot, step, swapCollection) {\n            var index = slot.index;\n            var isDaySlot = slot.isDaySlot;\n            var collectionIndex = slot.collectionIndex;\n            var collections = this._getCollections(isDaySlot);\n\n            slot = swapCollection(isDaySlot, collectionIndex, index);\n            if (slot) {\n                return slot;\n            }\n\n            if (isDaySlot) {\n                collectionIndex += step;\n            } else {\n                index += step;\n            }\n\n            var collection = collections[collectionIndex];\n\n            return collection ? collection.at(index) : undefined;\n        },\n\n        _collection: function(index, multiday) {\n            var collections = multiday? this._daySlotCollections : this._timeSlotCollections;\n\n            return collections[index];\n        },\n\n        _startSlot: function(time, collections, isAllDay) {\n            var collection = this._startCollection(time, collections);\n\n            var inRange = true;\n\n            if (!collection) {\n                collection = collections[0];\n                inRange = false;\n            }\n\n            var slot = collection.slotByStartDate(time, isAllDay);\n\n            if (!slot) {\n                slot = collection.first();\n                inRange = false;\n            }\n\n            return {\n                slot: slot,\n                inRange: inRange\n            };\n        },\n\n        _endSlot: function(time, collections, isAllDay) {\n            var collection = this._endCollection(time, collections, isAllDay);\n\n            var inRange = true;\n\n            if (!collection) {\n                collection = collections[collections.length - 1];\n                inRange = false;\n            }\n\n            var slot = collection.slotByEndDate(time, isAllDay);\n\n            if (!slot) {\n                slot = collection.last();\n                inRange = false;\n            }\n\n            return {\n                slot: slot,\n                inRange: inRange\n            };\n        },\n\n        getSlotCollection: function(index, isDay) {\n            return this[isDay ? \"getDaySlotCollection\" : \"getTimeSlotCollection\"](index);\n        },\n\n        getTimeSlotCollection: function(index) {\n            return this._timeSlotCollections[index];\n        },\n\n        getDaySlotCollection: function(index) {\n            return this._daySlotCollections[index];\n        }\n    });\n\n    var SlotRange = kendo.Class.extend({\n        init: function(options) {\n            $.extend(this, options);\n        },\n\n        innerHeight: function() {\n            var collection = this.collection;\n\n            var startIndex = this.start.index;\n\n            var endIndex = this.end.index;\n\n            var result = 0;\n\n            for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n               result += collection.at(slotIndex).offsetHeight;\n            }\n\n            return result;\n        },\n\n        events: function () {\n            return this.collection.events();\n        },\n\n        addEvent: function(event) {\n            this.events().push(event);\n        },\n\n        startSlot: function() {\n            if (this.start.offsetLeft > this.end.offsetLeft) {\n                return this.end;\n            }\n            return this.start;\n        },\n\n        endSlot: function() {\n            if (this.start.offsetLeft > this.end.offsetLeft) {\n                return this.start;\n            }\n            return this.end;\n        }\n    });\n\n    var TimeSlotRange = SlotRange.extend({\n        innerHeight: function() {\n            var collection = this.collection;\n\n            var startIndex = this.start.index;\n\n            var endIndex = this.end.index;\n\n            var result = 0;\n\n            for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n               result += collection.at(slotIndex).offsetHeight;\n            }\n\n            return result;\n        },\n\n        outerRect: function(start, end, snap) {\n            return this._rect(\"offset\", start, end, snap);\n        },\n\n        _rect: function(property, start, end, snap) {\n            var top;\n            var bottom;\n            var left;\n            var right;\n            var startSlot = this.start;\n            var endSlot = this.end;\n            var isRtl = kendo.support.isRtl(startSlot.element);\n\n            if (typeof start != \"number\") {\n                start = kendo.date.toUtcTime(start);\n            }\n\n            if (typeof end != \"number\") {\n                end = kendo.date.toUtcTime(end);\n            }\n\n            if (snap) {\n                top = startSlot.offsetTop;\n                bottom = endSlot.offsetTop + endSlot[property + \"Height\"];\n                if(isRtl) {\n                    left = endSlot.offsetLeft;\n                    right = startSlot.offsetLeft + startSlot[property + \"Width\"];\n                } else {\n                    left = startSlot.offsetLeft;\n                    right = endSlot.offsetLeft + endSlot[property + \"Width\"];\n                }\n            } else {\n                var startOffset = start - startSlot.start;\n\n                if (startOffset < 0) {\n                    startOffset = 0;\n                }\n\n                var startSlotDuration = startSlot.end - startSlot.start;\n\n                top = startSlot.offsetTop + startSlot[property + \"Height\"] * startOffset / startSlotDuration;\n\n                var endOffset = endSlot.end - end;\n\n                if (endOffset < 0) {\n                    endOffset = 0;\n                }\n\n                var endSlotDuration = endSlot.end - endSlot.start;\n\n                bottom = endSlot.offsetTop + endSlot[property + \"Height\"] - endSlot[property + \"Height\"] * endOffset / endSlotDuration;\n\n                if(isRtl) {\n                    left = Math.round(endSlot.offsetLeft + endSlot[property + \"Width\"]* endOffset / endSlotDuration);\n                    right = Math.round(startSlot.offsetLeft + startSlot[property + \"Width\"] - startSlot[property + \"Width\"] * startOffset / startSlotDuration);\n                } else {\n                    left = Math.round(startSlot.offsetLeft + startSlot[property + \"Width\"] * startOffset / startSlotDuration);\n                    right = Math.round(endSlot.offsetLeft + endSlot[property + \"Width\"] - endSlot[property + \"Width\"] * endOffset / endSlotDuration);\n                }\n            }\n\n            return {\n                top: top,\n                bottom: bottom,\n                //first column has no left border\n                left: left === 0 ? left : left + 1,\n                right: right\n            };\n        },\n\n        innerRect: function(start, end, snap) {\n            return this._rect(\"client\", start, end, snap);\n        }\n    });\n\n    var DaySlotRange = SlotRange.extend({\n        innerWidth: function() {\n            var collection = this.collection;\n\n            var startIndex = this.start.index;\n\n            var endIndex = this.end.index;\n\n            var result = 0;\n\n            var width = startIndex !== endIndex ? \"offsetWidth\" : \"clientWidth\";\n\n            for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n               result += collection.at(slotIndex)[width];\n            }\n\n            return result;\n        }\n    });\n\n    var SlotCollection = kendo.Class.extend({\n        init: function(startDate, endDate, groupIndex, collectionIndex) {\n            this._slots = [];\n\n            this._events = [];\n\n            this._start = kendo.date.toUtcTime(startDate);\n\n            this._end = kendo.date.toUtcTime(endDate);\n\n            this._groupIndex = groupIndex;\n\n            this._collectionIndex = collectionIndex;\n        },\n        refresh: function() {\n            for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n                this._slots[slotIndex].refresh();\n            }\n        },\n\n        startInRange: function(date) {\n            return this._start <= date && date < this._end;\n        },\n\n        endInRange: function(date, isAllDay) {\n            var end = isAllDay ? date < this._end : date <= this._end;\n            return this._start <= date && end;\n        },\n\n        slotByStartDate: function(date) {\n            var time = date;\n\n            if (typeof time != \"number\") {\n                time = kendo.date.toUtcTime(date);\n            }\n\n            for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n                var slot = this._slots[slotIndex];\n\n                if (slot.startInRange(time)) {\n                    return slot;\n                }\n            }\n\n            return null;\n        },\n\n        slotByEndDate: function(date, allday) {\n            var time = date;\n\n            if (typeof time != \"number\") {\n                time = kendo.date.toUtcTime(date);\n            }\n\n            if (allday) {\n                return this.slotByStartDate(date, false);\n            }\n\n            for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n                var slot = this._slots[slotIndex];\n\n                if (slot.endInRange(time)) {\n                    return slot;\n                }\n            }\n\n            return null;\n        },\n\n        count: function() {\n            return this._slots.length;\n        },\n        events: function() {\n            return this._events;\n        },\n        addTimeSlot: function(element, start, end, isHorizontal) {\n            var slot = new TimeSlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, isHorizontal);\n\n            this._slots.push(slot);\n        },\n        addDaySlot: function(element, start, end, eventCount) {\n            var slot = new DaySlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, eventCount);\n\n            this._slots.push(slot);\n        },\n        first: function() {\n            return this._slots[0];\n        },\n        last: function() {\n            return this._slots[this._slots.length - 1];\n        },\n        at: function(index) {\n            return this._slots[index];\n        }\n    });\n\n    var Slot = kendo.Class.extend({\n        init: function(element, start, end, groupIndex, collectionIndex, index) {\n            this.element = element;\n            this.clientWidth = element.clientWidth;\n            this.clientHeight = element.clientHeight;\n            this.offsetWidth = element.offsetWidth;\n            this.offsetHeight = element.offsetHeight;\n            this.offsetTop = element.offsetTop;\n            this.offsetLeft = element.offsetLeft;\n            this.start = start;\n            this.end = end;\n            this.element = element;\n            this.groupIndex = groupIndex;\n            this.collectionIndex = collectionIndex;\n            this.index = index;\n            this.isDaySlot = false;\n        },\n\n        startDate: function() {\n            return kendo.timezone.toLocalDate(this.start);\n        },\n\n        endDate: function() {\n            return kendo.timezone.toLocalDate(this.end);\n        },\n\n        startInRange: function(date) {\n            return this.start <= date && date < this.end;\n        },\n\n        endInRange: function(date) {\n            return this.start < date && date <= this.end;\n        },\n\n        startOffset: function() {\n           return this.start;\n        },\n\n        endOffset: function() {\n            return this.end;\n        }\n    });\n\n    var TimeSlot = Slot.extend({\n        init: function(element, start, end, groupIndex, collectionIndex, index, isHorizontal) {\n            Slot.fn.init.apply(this, arguments);\n\n            this.isHorizontal = isHorizontal ? true : false;\n        },\n\n        refresh: function() {\n            var element = this.element;\n\n            this.clientWidth = element.clientWidth;\n            this.clientHeight = element.clientHeight;\n            this.offsetWidth = element.offsetWidth;\n            this.offsetHeight = element.offsetHeight;\n            this.offsetTop = element.offsetTop;\n            this.offsetLeft = element.offsetLeft;\n        },\n\n        offsetX: function(rtl, offset) {\n            if (rtl) {\n                return this.offsetLeft + offset;\n            } else {\n                return this.offsetLeft + offset;\n            }\n        },\n\n        startInRange: function(date) {\n            return this.start <= date && date < this.end;\n        },\n\n        endInRange: function(date) {\n            return this.start < date && date <= this.end;\n        },\n\n        startOffset: function(x, y, snap) {\n            if (snap) {\n                return this.start;\n            }\n\n            var offset = $(this.element).offset();\n\n            var duration = this.end - this.start;\n            var difference;\n            var time;\n\n            if (this.isHorizontal) {\n                //need update\n                var isRtl = kendo.support.isRtl(this.element);\n                difference =  x - offset.left;\n                time = Math.floor(duration * ( difference / this.offsetWidth));\n\n                if (isRtl) {\n                    return this.start + duration - time;\n                }\n            } else {\n                difference = y - offset.top;\n                time = Math.floor(duration * ( difference / this.offsetHeight));\n            }\n\n            return this.start + time;\n        },\n\n        endOffset: function(x, y, snap) {\n            if (snap) {\n                return this.end;\n            }\n\n            var offset = $(this.element).offset();\n\n            var duration = this.end - this.start;\n            var difference;\n            var time;\n\n            if (this.isHorizontal) {\n                //need update\n                var isRtl = kendo.support.isRtl(this.element);\n                difference = x - offset.left;\n                time = Math.floor(duration * ( difference / this.offsetWidth));\n\n                if (isRtl) {\n                    return this.start + duration - time;\n                }\n            } else {\n                difference = y - offset.top;\n                time = Math.floor(duration * ( difference / this.offsetHeight));\n            }\n\n            return this.start + time;\n        }\n    });\n\n    var DaySlot = Slot.extend({\n        init: function(element, start, end, groupIndex, collectionIndex, index, eventCount) {\n            Slot.fn.init.apply(this, arguments);\n\n            this.eventCount = eventCount;\n            this.isDaySlot = true;\n\n            if (this.element.children.length) {\n                this.firstChildHeight = this.element.children[0].offsetHeight + 3;\n                this.firstChildTop = this.element.children[0].offsetTop;\n            } else {\n                this.firstChildHeight = 3;\n                this.firstChildTop = 0;\n            }\n        },\n\n        refresh: function() {\n            this.clientHeight = this.element.clientHeight;\n            this.offsetTop = this.element.offsetTop;\n        },\n\n        startDate: function() {\n            var date = new Date(this.start);\n\n            return kendo.timezone.apply(date, \"Etc/UTC\");\n        },\n\n        endDate: function() {\n            var date = new Date(this.end);\n\n            return kendo.timezone.apply(date, \"Etc/UTC\");\n        },\n\n        startInRange: function(date) {\n            return this.start <= date && date < this.end;\n        },\n\n        endInRange: function(date) {\n            return this.start < date && date <= this.end;\n        }\n    });\n\n    var scrollbarWidth;\n    function scrollbar() {\n        scrollbarWidth = scrollbarWidth ? scrollbarWidth : kendo.support.scrollbar();\n        return scrollbarWidth;\n    }\n\n    kendo.ui.SchedulerView = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this._scrollbar = scrollbar();\n            this._isRtl = kendo.support.isRtl(element);\n            this._resizeHint = $();\n            this._moveHint = $();\n            this._cellId = kendo.guid();\n            this._resourcesForGroups();\n            this._selectedSlots = [];\n        },\n\n        _isMobile: function() {\n            var options = this.options;\n            return (options.mobile === true && kendo.support.mobileOS) || options.mobile === \"phone\" || options.mobile === \"tablet\";\n        },\n\n        _isMobilePhoneView: function() {\n            var options = this.options;\n            return (options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet) || options.mobile === \"phone\";\n        },\n\n        _addResourceView: function() {\n            var resourceView = new ResourceView(this.groups.length);\n\n            this.groups.push(resourceView);\n\n            return resourceView;\n        },\n\n        dateForTitle: function() {\n            return kendo.format(this.options.selectedDateFormat, this.startDate(), this.endDate());\n        },\n\n        _changeGroup: function(selection, previous) {\n            var method = previous ? \"prevGroupSlot\" : \"nextGroupSlot\";\n            var slot = this[method](selection.start, selection.groupIndex, selection.isAllDay);\n\n            if (slot) {\n                selection.groupIndex += previous ? -1 : 1;\n            }\n\n            return slot;\n        },\n\n        _changeGroupContinuously: function() {\n            return null;\n        },\n\n        _changeViewPeriod: function() {\n            return false;\n        },\n\n        _horizontalSlots: function(selection, ranges, multiple, reverse) {\n            var method = reverse ? \"leftSlot\" : \"rightSlot\";\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n            var group = this.groups[selection.groupIndex];\n\n            if (!multiple) {\n                var slot = this._normalizeHorizontalSelection(selection, ranges, reverse);\n                if (slot) {\n                    startSlot = endSlot = slot;\n                }\n            }\n\n            startSlot = group[method](startSlot);\n            endSlot = group[method](endSlot);\n\n            if (!multiple && !this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n                startSlot = endSlot = this._changeGroup(selection, reverse);\n            }\n\n            var continuousSlot;\n\n            if (!startSlot || !endSlot) {\n                continuousSlot = this._continuousSlot(selection, ranges, reverse);\n                continuousSlot = this._changeGroupContinuously(selection, continuousSlot, multiple, reverse);\n\n                if (continuousSlot) {\n                    startSlot = endSlot = continuousSlot;\n                }\n            }\n\n            return {\n                startSlot: startSlot,\n                endSlot: endSlot\n            };\n        },\n\n        _verticalSlots: function(selection, ranges, multiple, reverse) {\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n            var group = this.groups[selection.groupIndex];\n\n            if (!multiple) {\n                var slot = this._normalizeVerticalSelection(selection, ranges, reverse);\n                if (slot) {\n                    startSlot = endSlot = slot;\n                }\n            }\n\n            var method = reverse ? \"upSlot\" : \"downSlot\";\n\n            startSlot = group[method](startSlot, multiple);\n            endSlot = group[method](endSlot, multiple);\n\n            if (!multiple && this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n                startSlot = endSlot = this._changeGroup(selection, reverse);\n            }\n\n            return {\n                startSlot: startSlot,\n                endSlot: endSlot\n            };\n        },\n\n        _normalizeHorizontalSelection: function() {\n            return null;\n        },\n\n        _normalizeVerticalSelection: function(selection, ranges, reverse) {\n            var slot;\n\n            if (reverse) {\n                slot = ranges[0].start;\n            } else {\n                slot = ranges[ranges.length - 1].end;\n            }\n\n            return slot;\n        },\n\n        _continuousSlot: function() {\n            return null;\n        },\n\n        constrainSelection: function(selection) {\n            var group = this.groups[0];\n            var slot;\n\n            if (!this.inRange(selection)) {\n                slot = group.firstSlot();\n\n                selection.isAllDay = slot.isDaySlot;\n                selection.start = slot.startDate();\n                selection.end = slot.endDate();\n            } else {\n                if (!group.daySlotCollectionCount()) {\n                    selection.isAllDay = false;\n                }\n            }\n\n            if (!this.groups[selection.groupIndex]) {\n                selection.groupIndex = 0;\n            }\n        },\n\n        move: function(selection, key, shift) {\n            var handled = false;\n            var group = this.groups[selection.groupIndex];\n\n            if (!group.timeSlotCollectionCount()) {\n                selection.isAllDay = true;\n            }\n\n            var ranges = group.ranges(selection.start, selection.end, selection.isAllDay, false);\n            var startSlot, endSlot, reverse, slots;\n\n            if (key === keys.DOWN || key === keys.UP) {\n                handled = true;\n                reverse = key === keys.UP;\n\n                this._updateDirection(selection, ranges, shift, reverse, true);\n\n                slots = this._verticalSlots(selection, ranges, shift, reverse);\n\n                if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, true)) {\n                    return handled;\n                }\n\n            } else if (key === keys.LEFT || key === keys.RIGHT) {\n                handled = true;\n                reverse = key === keys.LEFT;\n\n                this._updateDirection(selection, ranges, shift, reverse, false);\n\n                slots = this._horizontalSlots(selection, ranges, shift, reverse);\n\n                if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, false)) {\n                    return handled;\n                }\n            }\n\n            if (handled) {\n                startSlot = slots.startSlot;\n                endSlot = slots.endSlot;\n\n                if (shift) {\n                    var backward = selection.backward;\n                    if (backward && startSlot) {\n                        selection.start = startSlot.startDate();\n                    } else if (!backward && endSlot) {\n                        selection.end = endSlot.endDate();\n                    }\n                } else if (startSlot && endSlot) {\n                    selection.isAllDay = startSlot.isDaySlot;\n                    selection.start = startSlot.startDate();\n                    selection.end = endSlot.endDate();\n                }\n\n                selection.events = [];\n            }\n\n            return handled;\n        },\n\n        moveToEventInGroup: function(group, slot, selectedEvents, prev) {\n            var events = group._continuousEvents || [];\n\n            var found, event;\n\n            var pad = prev ? -1 : 1;\n\n            var length = events.length;\n            var idx = prev ? length - 1 : 0;\n\n            while (idx < length && idx > -1) {\n                event = events[idx];\n\n                if ( (!prev && event.start.startDate() >= slot.startDate()) ||\n                    (prev && event.start.startDate() <= slot.startDate()) ) {\n\n                    if (selectedEvents.length) {\n                        event = events[idx + pad];\n                    }\n\n                    if (event && $.inArray(event.uid, selectedEvents) === -1) {\n                        found = !!event;\n                        break;\n                    }\n                }\n\n                idx += pad;\n            }\n\n            return event;\n        },\n\n        moveToEvent: function(selection, prev) {\n            var groupIndex = selection.groupIndex;\n\n            var group = this.groups[groupIndex];\n            var slot = group.ranges(selection.start, selection.end, selection.isAllDay, false)[0].start;\n\n            var length = this.groups.length;\n            var pad = prev ? -1 : 1;\n            var events = selection.events;\n            var event;\n\n            while (groupIndex < length && groupIndex > -1) {\n                event = this.moveToEventInGroup(group, slot, events, prev);\n\n                groupIndex += pad;\n                group = this.groups[groupIndex];\n\n                if (!group || event) {\n                    break;\n                }\n\n                events = [];\n                if (prev) {\n                    slot = group.lastSlot();\n                } else {\n                    slot = group.firstSlot(true);\n                }\n            }\n\n            if (event) {\n                selection.events = [ event.uid ];\n                selection.start = event.start.startDate();\n                selection.end = event.end.endDate();\n                selection.isAllDay = event.start.isDaySlot;\n                selection.groupIndex = event.start.groupIndex;\n            }\n\n            return !!event;\n        },\n\n        current: function(candidate) {\n            if (candidate !== undefined) {\n                this._current = candidate;\n                this._scrollTo(candidate, this.content[0]);\n            } else {\n                return this._current;\n            }\n        },\n\n        select: function(selection) {\n            this.clearSelection();\n\n            if (!this._selectEvents(selection)) {\n                this._selectSlots(selection);\n            }\n        },\n\n        _selectSlots: function(selection) {\n            var isAllDay = selection.isAllDay;\n            var group = this.groups[selection.groupIndex];\n\n            if (!group.timeSlotCollectionCount()) {\n                isAllDay = true;\n            }\n\n            this._selectedSlots = [];\n\n            var ranges = group.ranges(selection.start, selection.end, isAllDay, false);\n            var element;\n            var slot;\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n                var collection = range.collection;\n\n                for (var slotIndex = range.start.index; slotIndex <= range.end.index; slotIndex++) {\n                    slot = collection.at(slotIndex);\n\n                    element = slot.element;\n                    element.setAttribute(\"aria-selected\", true);\n                    addSelectedState(element);\n\n                    this._selectedSlots.push({\n                        start: slot.startDate(),\n                        end: slot.endDate(),\n                        element: element\n                    });\n                }\n            }\n\n            if (selection.backward) {\n                element = ranges[0].start.element;\n            }\n\n            this.current(element);\n        },\n\n        _selectEvents: function(selection) {\n            var found = false;\n            var events = selection.events;\n            var groupEvents = this.groups[selection.groupIndex]._continuousEvents || [];\n            var idx, length = groupEvents.length;\n\n            if (!events[0] || !groupEvents[0]) {\n                return found;\n            }\n\n            var result = $();\n            selection.events = [];\n            for (idx = 0; idx < length; idx ++) {\n                if ($.inArray(groupEvents[idx].uid, events) > -1) {\n                    result = result.add(groupEvents[idx].element);\n                    selection.events.push(groupEvents[idx].uid);\n                }\n            }\n\n            if (result[0]) {\n                result.addClass(\"k-state-selected\").attr(\"aria-selected\", true);\n                this.current(result.last()[0]);\n                this._selectedSlots = [];\n                found = true;\n            }\n\n            return found;\n        },\n\n        inRange: function(options) {\n            var startDate = this.startDate();\n            var endDate = kendo.date.addDays(this.endDate(), 1);\n            var start = options.start;\n            var end = options.end;\n\n            return startDate <= start && start < endDate && startDate < end && end <= endDate;\n        },\n\n        _resourceValue: function(resource, item) {\n            if (resource.valuePrimitive) {\n                item = kendo.getter(resource.dataValueField)(item);\n            }\n            return item;\n        },\n\n        _resourceBySlot: function(slot) {\n            var resources = this.groupedResources;\n            var result = {};\n\n            if (resources.length) {\n                var resourceIndex = slot.groupIndex;\n\n                for (var idx = resources.length - 1; idx >=0; idx--) {\n                    var resource = resources[idx];\n\n                    var value = this._resourceValue(resource, resource.dataSource.view()[resourceIndex % resource.dataSource.total()]);\n\n                    if (resource.multiple) {\n                        value = [value];\n                    }\n\n                    var setter = kendo.setter(resource.field);\n                    setter(result, value);\n\n                    resourceIndex = Math.floor(resourceIndex / resource.dataSource.total());\n                }\n            }\n\n            return result;\n        },\n\n        _createResizeHint: function(left, top, width, height) {\n            return $(HINT).css({\n                left: left,\n                top: top,\n                width: width,\n                height: height\n            });\n        },\n\n        _removeResizeHint: function() {\n            this._resizeHint.remove();\n            this._resizeHint = $();\n        },\n\n        _removeMoveHint: function() {\n            this._moveHint.remove();\n            this._moveHint = $();\n        },\n\n        _scrollTo: function(element, container) {\n            var elementOffset = element.offsetTop,\n                elementOffsetDir = element.offsetHeight,\n                containerScroll = container.scrollTop,\n                containerOffsetDir = container.clientHeight,\n                bottomDistance = elementOffset + elementOffsetDir,\n                result = 0;\n\n                if (containerScroll > elementOffset) {\n                    result = elementOffset;\n                } else if (bottomDistance > (containerScroll + containerOffsetDir)) {\n                    if (elementOffsetDir <= containerOffsetDir) {\n                        result = (bottomDistance - containerOffsetDir);\n                    } else {\n                        result = elementOffset;\n                    }\n                } else {\n                    result = containerScroll;\n                }\n                container.scrollTop = result;\n        },\n\n        _shouldInverseResourceColor: function(resource) {\n            var resourceColorIsDark = new Color(resource.color).isDark();\n            var currentColor = this.element.css(\"color\");\n            var currentColorIsDark = new Color(currentColor).isDark();\n\n            return (resourceColorIsDark == currentColorIsDark);\n        },\n\n       _eventTmpl: function(template, wrapper) {\n           var options = this.options,\n               settings = $.extend({}, kendo.Template, options.templateSettings),\n               paramName = settings.paramName,\n               html = \"\",\n               type = typeof template,\n               state = { storage: {}, count: 0 };\n\n            if (type === \"function\") {\n                state.storage[\"tmpl\" + state.count] = template;\n                html += \"#=this.tmpl\" + state.count + \"(\" + paramName + \")#\";\n                state.count ++;\n            } else if (type === \"string\") {\n                html += template;\n            }\n\n            var tmpl = kendo.template(kendo.format(wrapper, html), settings);\n\n            if (state.count > 0) {\n                tmpl = $.proxy(tmpl, state.storage);\n            }\n\n            return tmpl;\n       },\n\n        eventResources: function(event) {\n            var resources = [],\n                options = this.options;\n\n            if (!options.resources) {\n                return resources;\n            }\n\n            for (var idx = 0; idx < options.resources.length; idx++) {\n                var resource = options.resources[idx];\n                var field = resource.field;\n                var eventResources = kendo.getter(field)(event);\n\n                if (!eventResources) {\n                    continue;\n                }\n\n                if (!resource.multiple) {\n                    eventResources = [eventResources];\n                }\n\n                var data = resource.dataSource.view();\n\n                for (var resourceIndex = 0; resourceIndex < eventResources.length; resourceIndex++) {\n                    var eventResource = null;\n\n                    var value = eventResources[resourceIndex];\n\n                    if (!resource.valuePrimitive) {\n                        value = kendo.getter(resource.dataValueField)(value);\n                    }\n\n                    for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n                        if (data[dataIndex].get(resource.dataValueField) == value) {\n                            eventResource = data[dataIndex];\n                            break;\n                        }\n                    }\n\n                    if (eventResource !== null) {\n                        var resourceColor = kendo.getter(resource.dataColorField)(eventResource);\n                        resources.push({\n                            field: resource.field,\n                            title: resource.title,\n                            name: resource.name,\n                            text: kendo.getter(resource.dataTextField)(eventResource),\n                            value: value,\n                            color: resourceColor\n                        });\n                    }\n                }\n            }\n            return resources;\n        },\n\n        createLayout: function(layout) {\n            var allDayIndex = -1;\n\n            if (!layout.rows) {\n                layout.rows = [];\n            }\n\n            for (var idx = 0; idx < layout.rows.length; idx++) {\n                if (layout.rows[idx].allDay) {\n                    allDayIndex = idx;\n                    break;\n                }\n            }\n\n            var allDaySlot = layout.rows[allDayIndex];\n\n            if (allDayIndex >= 0) {\n                layout.rows.splice(allDayIndex, 1);\n            }\n\n            var columnLevels = this.columnLevels = levels(layout, \"columns\");\n\n            var rowLevels = this.rowLevels = levels(layout, \"rows\");\n\n            this.table = $('<table ' + cellspacing() + ' class=\"k-scheduler-layout k-scheduler-' + this.name + 'view\"/>');\n\n            var rowCount = rowLevels[rowLevels.length - 1].length;\n\n            this.table.append(this._topSection(columnLevels, allDaySlot, rowCount));\n\n            this.table.append(this._bottomSection(columnLevels, rowLevels, rowCount));\n\n            this.element.append(this.table);\n\n            this._scroller();\n        },\n\n        refreshLayout: function() {\n            var that = this,\n                toolbar = that.element.find(\">.k-scheduler-toolbar\"),\n                height = that.element.innerHeight(),\n                scrollbar = this._scrollbar,\n                headerHeight = 0,\n                paddingDirection = this._isRtl ? \"left\" : \"right\";\n\n            for (var idx = 0; idx < toolbar.length; idx++) {\n                height -= toolbar.eq(idx).outerHeight();\n            }\n\n            if (that.datesHeader) {\n                headerHeight = that.datesHeader.outerHeight();\n            }\n\n            if (that.timesHeader && that.timesHeader.outerHeight() > headerHeight) {\n                headerHeight = that.timesHeader.outerHeight();\n            }\n\n            if (that.datesHeader && that.timesHeader) {\n                var datesHeaderRows = that.datesHeader.find(\"table:first tr\");\n\n                that.timesHeader.find(\"tr\").height(function(index) {\n                    $(this).height(datesHeaderRows.eq(index).height());\n                });\n            }\n\n            if (headerHeight) {\n                height -= headerHeight;\n            }\n\n            if (that.footer) {\n                height -= that.footer.outerHeight();\n            }\n\n            var isSchedulerHeightSet = function(el) {\n                var initialHeight, newHeight;\n                if (el[0].style.height) {\n                    return true;\n                } else {\n                    initialHeight = el.height();\n                }\n\n                el.height(\"auto\");\n                newHeight = el.height();\n\n                if (initialHeight != newHeight) {\n                    el.height(\"\");\n                    return true;\n                }\n                el.height(\"\");\n                return false;\n            };\n\n            var contentDiv = that.content[0],\n                scrollbarWidth = !kendo.support.kineticScrollNeeded ? scrollbar : 0;\n\n            if (isSchedulerHeightSet(that.element)) { // set content height only if needed\n                if (height > scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n                    that.content.height(height);\n                } else {\n                    that.content.height(scrollbar * 2 + 1);\n                }\n                that.times.height(contentDiv.clientHeight);\n\n                var timesTable = that.times.find(\"table\");\n                if (timesTable.length) {\n                    timesTable.height(that.content.find(\"table\")[0].clientHeight);\n                }\n            }\n\n\n            if (contentDiv.offsetWidth - contentDiv.clientWidth > 0) {\n                that.table.addClass(\"k-scrollbar-v\");\n                that.datesHeader.css(\"padding-\" + paddingDirection, scrollbarWidth - parseInt(that.datesHeader.children().css(\"border-\" + paddingDirection + \"-width\"), 10));\n            } else {\n                that.datesHeader.css(\"padding-\" + paddingDirection, \"\");\n            }\n            if (contentDiv.offsetHeight - contentDiv.clientHeight > 0 || contentDiv.clientHeight > that.content.children(\".k-scheduler-table\").height()) {\n                that.table.addClass(\"k-scrollbar-h\");\n            } else {\n                that.table.removeClass(\"k-scrollbar-h\");\n            }\n        },\n\n        _topSection: function(columnLevels, allDaySlot, rowCount) {\n            this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n\n            var columnCount = columnLevels[columnLevels.length - 1].length;\n\n            this.datesHeader = datesHeader(columnLevels, columnCount, allDaySlot);\n\n            return $(\"<tr>\").append(this.timesHeader.add(this.datesHeader).wrap(\"<td>\").parent());\n        },\n\n        _bottomSection: function(columnLevels, rowLevels, rowCount) {\n            this.times = times(rowLevels, rowCount);\n\n            this.content = content(columnLevels[columnLevels.length - 1], rowLevels[rowLevels.length - 1]);\n\n            return $(\"<tr>\").append(this.times.add(this.content).wrap(\"<td>\").parent());\n        },\n\n        _scroller: function() {\n            var that = this;\n\n            this.content.bind(\"scroll\" + NS, function () {\n                that.datesHeader.find(\">.k-scheduler-header-wrap\").scrollLeft(this.scrollLeft);\n                that.times.scrollTop(this.scrollTop);\n            });\n\n            var touchScroller = kendo.touchScroller(this.content, {\n                avoidScrolling: function(e) {\n                    return $(e.event.target).closest(\".k-event.k-event-active\").length > 0;\n                }\n            });\n\n            if (touchScroller && touchScroller.movable) {\n\n                this._touchScroller = touchScroller;\n\n                this.content = touchScroller.scrollElement;\n\n                touchScroller.movable.bind(\"change\", function(e) {\n                    that.datesHeader.find(\">.k-scheduler-header-wrap\").scrollLeft(-e.sender.x);\n                    that.times.scrollTop(-e.sender.y);\n                });\n            }\n        },\n\n        _resourcesForGroups: function() {\n            var result = [];\n            var groups = this.options.group;\n            var resources = this.options.resources;\n\n            groups = groups && groups.resources ? groups.resources : [];\n\n            if (resources && groups.length) {\n                for (var idx = 0, length = resources.length; idx < length; idx++) {\n                    for (var groupIdx = 0, groupLength = groups.length; groupIdx < groupLength; groupIdx++) {\n                        if (resources[idx].name === groups[groupIdx]) {\n                            result.push(resources[idx]);\n                        }\n                    }\n                }\n            }\n\n            this.groupedResources = result;\n        },\n\n        _createColumnsLayout: function(resources, inner, template) {\n            return createLayoutConfiguration(\"columns\", resources, inner, template);\n        },\n\n        _groupOrientation: function() {\n            var groups = this.options.group;\n            return groups && groups.resources ? groups.orientation : \"horizontal\";\n        },\n\n        _isVerticallyGrouped: function() {\n            return this.groupedResources.length && this._groupOrientation() === \"vertical\";\n        },\n\n        _createRowsLayout: function(resources, inner, template) {\n            return createLayoutConfiguration(\"rows\", resources, inner, template);\n        },\n\n        selectionByElement: function() {\n            return null;\n        },\n\n        clearSelection: function() {\n            this.content\n                .find(\".k-state-selected\")\n                .removeAttr(\"id\")\n                .attr(\"aria-selected\", false)\n                .removeClass(\"k-state-selected\");\n        },\n\n        destroy: function() {\n            var that = this;\n\n            Widget.fn.destroy.call(this);\n\n            if (that.table) {\n                kendo.destroy(that.table);\n                that.table.remove();\n            }\n\n            that.groups = null;\n            that.table = null;\n            that.content = null;\n            that.times = null;\n            that.datesHeader = null;\n            that.timesHeader = null;\n            that.footer = null;\n            that._resizeHint = null;\n            that._moveHint = null;\n        },\n\n        calendarInfo: function() {\n            return kendo.getCulture().calendars.standard;\n        },\n\n        prevGroupSlot: function(date, groupIndex, isDay) {\n            var collection;\n            var group = this.groups[groupIndex];\n            var slot = group.ranges(date, date, isDay, false)[0].start;\n\n            if (groupIndex <= 0) {\n                return;\n            }\n\n            if (this._isVerticallyGrouped()) {\n                if (!group.timeSlotCollectionCount()) {\n                    collection = group._collection(group.daySlotCollectionCount() - 1, true);\n                    return collection.at(slot.index);\n                } else {\n                    collection = group._collection(isDay ? slot.index : slot.collectionIndex, false);\n                    return collection.last();\n                }\n            } else {\n                if (!group.timeSlotCollectionCount()) {\n                    collection = group._collection(slot.collectionIndex, true);\n                    return collection.last();\n                } else {\n                    collection = group._collection(isDay ? 0 : group.timeSlotCollectionCount() - 1, isDay);\n                    return isDay ? collection.last() : collection.at(slot.index);\n                }\n            }\n        },\n\n        nextGroupSlot: function(date, groupIndex, isDay) {\n            var collection;\n            var group = this.groups[groupIndex];\n            var slot = group.ranges(date, date, isDay, false)[0].start;\n            var daySlotCollectionCount;\n\n            if (groupIndex >= this.groups.length - 1) {\n                return;\n            }\n\n            if (this._isVerticallyGrouped()) {\n                if (!group.timeSlotCollectionCount()) {\n                    collection = group._collection(0, true);\n                    return collection.at(slot.index);\n                } else {\n                    daySlotCollectionCount = group.daySlotCollectionCount();\n                    collection = group._collection(daySlotCollectionCount ? 0 : slot.collectionIndex, daySlotCollectionCount);\n\n                    return isDay ? collection.first() : collection.at(slot.collectionIndex);\n                }\n            } else {\n                if (!group.timeSlotCollectionCount()) {\n                    collection = group._collection(slot.collectionIndex, true);\n                    return collection.first();\n                } else {\n                    collection = group._collection(0, isDay);\n                    return isDay ? collection.first() : collection.at(slot.index);\n                }\n            }\n        },\n\n        _updateEventForMove: function (event) {\n            return;\n        },\n\n        _updateEventForResize: function (event) {\n            return;\n        },\n\n        _updateEventForSelection: function (event) {\n            return event;\n        }\n    });\n\n    function collidingEvents(elements, start, end) {\n        var idx,\n            index,\n            startIndex,\n            overlaps,\n            endIndex;\n\n        for (idx = elements.length-1; idx >= 0; idx--) {\n            index = rangeIndex(elements[idx]);\n            startIndex = index.start;\n            endIndex = index.end;\n\n            overlaps = startIndex <= start && endIndex >= start;\n\n            if (overlaps || (startIndex >= start && endIndex <= end) || (start <= startIndex && end >= startIndex)) {\n                if (startIndex < start) {\n                    start = startIndex;\n                }\n\n                if (endIndex > end) {\n                    end = endIndex;\n                }\n            }\n        }\n\n        return eventsForSlot(elements, start, end);\n    }\n\n    function rangeIndex(eventElement) {\n        return {\n            start: eventElement.start,\n            end: eventElement.end\n        };\n    }\n\n    function eventsForSlot(elements, slotStart, slotEnd) {\n        var events = [];\n\n        for (var idx = 0; idx < elements.length; idx++) {\n            var event = rangeIndex(elements[idx]);\n\n            if ((event.start < slotStart && event.end > slotStart) || (event.start >= slotStart && event.end <= slotEnd)) {\n                events.push(elements[idx]);\n            }\n        }\n\n        return events;\n    }\n\n    function createColumns(eventElements) {\n        return _createColumns(eventElements);\n    }\n\n    function createRows(eventElements) {\n        return _createColumns(eventElements);\n    }\n\n    var Color = function(value) {\n        var color = this,\n            formats = Color.formats,\n            re,\n            processor,\n            parts,\n            i,\n            channels;\n\n        if (arguments.length === 1) {\n            value = color.resolveColor(value);\n\n            for (i = 0; i < formats.length; i++) {\n                re = formats[i].re;\n                processor = formats[i].process;\n                parts = re.exec(value);\n\n                if (parts) {\n                    channels = processor(parts);\n                    color.r = channels[0];\n                    color.g = channels[1];\n                    color.b = channels[2];\n                }\n            }\n        } else {\n            color.r = arguments[0];\n            color.g = arguments[1];\n            color.b = arguments[2];\n        }\n\n        color.r = color.normalizeByte(color.r);\n        color.g = color.normalizeByte(color.g);\n        color.b = color.normalizeByte(color.b);\n    };\n\n    Color.prototype = {\n        resolveColor: function(value) {\n            value = value || \"#000\";\n\n            if (value.charAt(0) == \"#\") {\n                value = value.substr(1, 6);\n            }\n\n            value = value.replace(/ /g, \"\");\n            value = value.toLowerCase();\n            value = Color.namedColors[value] || value;\n\n            return value;\n        },\n\n        normalizeByte: function(value) {\n            return (value < 0 || isNaN(value)) ? 0 : ((value > 255) ? 255 : value);\n        },\n\n        percBrightness: function() {\n            var color = this;\n            return math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n        },\n\n        isDark: function() {\n            var color = this;\n            var brightnessValue = color.percBrightness();\n            return brightnessValue < 180;\n        }\n    };\n\n    Color.formats = [{\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\n                ];\n            }\n        }, {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\n                ];\n            }\n        }, {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            process: function(parts) {\n                return [\n                    parseInt(parts[1] + parts[1], 16),\n                    parseInt(parts[2] + parts[2], 16),\n                    parseInt(parts[3] + parts[3], 16)\n                ];\n            }\n        }\n    ];\n\n    Color.namedColors = {\n        aqua: \"00ffff\", azure: \"f0ffff\", beige: \"f5f5dc\",\n        black: \"000000\", blue: \"0000ff\", brown: \"a52a2a\",\n        coral: \"ff7f50\", cyan: \"00ffff\", darkblue: \"00008b\",\n        darkcyan: \"008b8b\", darkgray: \"a9a9a9\", darkgreen: \"006400\",\n        darkorange: \"ff8c00\", darkred: \"8b0000\", dimgray: \"696969\",\n        fuchsia: \"ff00ff\", gold: \"ffd700\", goldenrod: \"daa520\",\n        gray: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n        indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n        lightblue: \"add8e6\", lightgrey: \"d3d3d3\", lightgreen: \"90ee90\",\n        lightpink: \"ffb6c1\", lightyellow: \"ffffe0\", lime: \"00ff00\",\n        limegreen: \"32cd32\", linen: \"faf0e6\", magenta: \"ff00ff\",\n        maroon: \"800000\", mediumblue: \"0000cd\", navy: \"000080\",\n        olive: \"808000\", orange: \"ffa500\", orangered: \"ff4500\",\n        orchid: \"da70d6\", pink: \"ffc0cb\", plum: \"dda0dd\",\n        purple: \"800080\", red: \"ff0000\", royalblue: \"4169e1\",\n        salmon: \"fa8072\", silver: \"c0c0c0\", skyblue: \"87ceeb\",\n        slateblue: \"6a5acd\", slategray: \"708090\", snow: \"fffafa\",\n        steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n        tomato: \"ff6347\", turquoise: \"40e0d0\", violet: \"ee82ee\",\n        wheat: \"f5deb3\", white: \"ffffff\", whitesmoke: \"f5f5f5\",\n        yellow: \"ffff00\", yellowgreen: \"9acd32\"\n    };\n\n    function _createColumns(eventElements) {\n        var columns = [];\n\n        for (var idx = 0; idx < eventElements.length; idx++) {\n            var event = eventElements[idx];\n            var eventRange = rangeIndex(event);\n            var column = null;\n\n            for (var j = 0, columnLength = columns.length; j < columnLength; j++) {\n                var endOverlaps = eventRange.start > columns[j].end;\n\n                if (eventRange.start < columns[j].start || endOverlaps) {\n\n                    column = columns[j];\n\n                    if (column.end < eventRange.end) {\n                        column.end = eventRange.end;\n                    }\n\n                    break;\n                }\n            }\n\n            if (!column) {\n                column = { start: eventRange.start, end: eventRange.end, events: [] };\n                columns.push(column);\n            }\n\n            column.events.push(event);\n        }\n\n        return columns;\n    }\n\n    function createLayoutConfiguration(name, resources, inner, template) {\n        var resource = resources[0];\n        if (resource) {\n            var configuration = [];\n\n            var data = resource.dataSource.view();\n\n            for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n                var obj = {\n                    text: template({\n                        text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex])),\n                        color: kendo.getter(resource.dataColorField)(data[dataIndex]),\n                        field: resource.field,\n                        title: resource.title,\n                        name: resource.name,\n                        value:kendo.getter(resource.dataValueField)(data[dataIndex])\n                    }),\n                    className: \"k-slot-cell\"\n                };\n                obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template);\n\n                configuration.push(obj);\n            }\n            return configuration;\n        }\n        return inner;\n    }\n\n    function groupEqFilter(value) {\n        return function(item) {\n            if ($.isArray(item) || item instanceof kendo.data.ObservableArray) {\n                for (var idx = 0; idx < item.length; idx++) {\n                    if (item[idx] == value) {\n                        return true;\n                    }\n                }\n                return false;\n            }\n            return item == value;\n        };\n    }\n\n    var selectedStateRegExp = /\\s*k-state-selected/;\n    function addSelectedState(cell) {\n        cell.className = cell.className.replace(selectedStateRegExp, \"\") + \" k-state-selected\";\n    }\n\n    $.extend(ui.SchedulerView, {\n        createColumns: createColumns,\n        createRows: createRows,\n        rangeIndex: rangeIndex,\n        collidingEvents: collidingEvents,\n        groupEqFilter: groupEqFilter\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        setTime = kendo.date.setTime,\n        SchedulerView = ui.SchedulerView,\n        extend = $.extend,\n        proxy = $.proxy,\n        getDate = kendo.date.getDate,\n        MS_PER_MINUTE = kendo.date.MS_PER_MINUTE,\n        MS_PER_DAY = kendo.date.MS_PER_DAY,\n        getMilliseconds = kendo.date.getMilliseconds,\n        NS = \".kendoMultiDayView\";\n\n    var DAY_VIEW_EVENT_TEMPLATE = kendo.template('<div title=\"(#=kendo.format(\"{0:t} - {1:t}\", start, end)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\">' +\n                    '<div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div>' +\n                    '<div class=\"k-event-template\">${title}</div>' +\n                '</div>'),\n        DAY_VIEW_ALL_DAY_EVENT_TEMPLATE = kendo.template('<div title=\"(#=kendo.format(\"{0:t}\", start)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\">' +\n                    '<div class=\"k-event-template\">${title}</div>' +\n                '</div>'),\n        DATA_HEADER_TEMPLATE = kendo.template(\"<span class='k-link k-nav-day'>#=kendo.toString(date, 'ddd M/dd')#</span>\"),\n        ALLDAY_EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' +\n                'data-#=ns#uid=\"#=uid#\"' +\n                '#if (resources[0]) { #' +\n                    'style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"' +\n                    'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" ' +\n                '#} else {#' +\n                    'class=\"k-event\"' +\n                '#}#' +\n                '>' +\n                '<span class=\"k-event-actions\">' +\n                    '# if(data.tail || data.middle) {#' +\n                        '<span class=\"k-icon k-i-arrow-w\"></span>' +\n                    '#}#' +\n                    '# if(data.isException()) {#' +\n                        '<span class=\"k-icon k-i-exception\"></span>' +\n                    '# } else if(data.isRecurring()) {#' +\n                        '<span class=\"k-icon k-i-refresh\"></span>' +\n                    '# } #' +\n                '</span>' +\n                '{0}' +\n                '<span class=\"k-event-actions\">' +\n                    '#if (showDelete) {#' +\n                        '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>' +\n                    '#}#' +\n                    '# if(data.head || data.middle) {#' +\n                        '<span class=\"k-icon k-i-arrow-e\"></span>' +\n                    '#}#' +\n                '</span>' +\n                '#if(resizable && !singleDay && !data.tail && !data.middle){#' +\n                '<span class=\"k-resize-handle k-resize-w\"></span>' +\n                '#}#' +\n                '#if(resizable && !singleDay && !data.head && !data.middle){#' +\n                '<span class=\"k-resize-handle k-resize-e\"></span>' +\n                '#}#' +\n                '</div>',\n        EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' +\n                'data-#=ns#uid=\"#=uid#\" ' +\n                '#if (resources[0]) { #' +\n                    'style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"' +\n                    'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"' +\n                '#} else {#' +\n                    'class=\"k-event\"' +\n                '#}#' +\n                '>' +\n                 '<span class=\"k-event-actions\">' +\n                    '# if(data.isException()) {#' +\n                        '<span class=\"k-icon k-i-exception\"></span>' +\n                    '# } else if(data.isRecurring()) {#' +\n                        '<span class=\"k-icon k-i-refresh\"></span>' +\n                    '# } #' +\n                '</span>' +\n                '{0}' +\n                '<span class=\"k-event-actions\">' +\n                    '#if (showDelete) {#' +\n                        '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>' +\n                    '#}#' +\n                '</span>' +\n                '<span class=\"k-event-top-actions\">' +\n                    '# if(data.tail || data.middle) {#' +\n                    '<span class=\"k-icon k-i-arrow-n\"></span>' +\n                    '# } #' +\n                '</span>' +\n                '<span class=\"k-event-bottom-actions\">' +\n                    '# if(data.head || data.middle) {#' +\n                        '<span class=\"k-icon k-i-arrow-s\"></span>' +\n                    '# } #' +\n                '</span>' +\n                '# if(resizable && !data.tail && !data.middle) {#' +\n                '<span class=\"k-resize-handle k-resize-n\"></span>' +\n                '# } #' +\n                '# if(resizable && !data.head && !data.middle) {#' +\n                    '<span class=\"k-resize-handle k-resize-s\"></span>' +\n                '# } #' +\n                '</div>';\n\n    function toInvariantTime(date) {\n        var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n        setTime(staticDate, getMilliseconds(date));\n        return staticDate;\n    }\n\n    function isInDateRange(value, min, max) {\n        return value >= min && value <= max;\n    }\n\n    function isInTimeRange(value, min, max, overlaps) {\n        overlaps = overlaps ? value <= max : value < max;\n        return value > min && overlaps;\n    }\n\n    function addContinuousEvent(group, range, element, isAllDay) {\n        var events = group._continuousEvents;\n        var lastEvent = events[events.length - 1];\n        var startDate = getDate(range.start.startDate()).getTime();\n\n        //this handles all day event which is over multiple slots but starts\n        //after one of the time events\n        if (isAllDay && lastEvent &&\n            getDate(lastEvent.start.startDate()).getTime() == startDate) {\n\n                var idx = events.length - 1;\n                for ( ; idx > -1; idx --) {\n                    if (events[idx].isAllDay ||\n                        getDate(events[idx].start.startDate()).getTime() < startDate) {\n                            break;\n                        }\n                }\n\n                events.splice(idx + 1, 0, {\n                    element: element,\n                    isAllDay: true,\n                    uid: element.attr(kendo.attr(\"uid\")),\n                    start: range.start,\n                    end: range.end\n                });\n            } else {\n                events.push({\n                    element: element,\n                    isAllDay: isAllDay,\n                    uid: element.attr(kendo.attr(\"uid\")),\n                    start: range.start,\n                    end: range.end\n                });\n            }\n    }\n\n    function getWorkDays(options) {\n        var workDays = [];\n        var dayIndex = options.workWeekStart;\n\n        workDays.push(dayIndex);\n\n        while(options.workWeekEnd != dayIndex) {\n            if(dayIndex > 6 ) {\n                dayIndex -= 7;\n            } else {\n                dayIndex++;\n            }\n            workDays.push(dayIndex);\n        }\n        return workDays;\n    }\n\n    var MultiDayView = SchedulerView.extend({\n        init: function(element, options) {\n            var that = this;\n\n            SchedulerView.fn.init.call(that, element, options);\n\n            that.title = that.options.title || that.options.name;\n\n            that._workDays = getWorkDays(that.options);\n\n            that._templates();\n\n            that._editable();\n\n            that.calculateDateRange();\n\n            that._groups();\n\n            that._currentTime();\n        },\n\n        _currentTimeMarkerUpdater: function() {\n            var currentTime = new Date();\n            var options = this.options;\n\n            if(options.currentTimeMarker.useLocalTimezone === false) {\n                var timezone = options.dataSource.options.schema.timezone;\n\n                if(options.dataSource && timezone) {\n                   var timezoneOffset = kendo.timezone.offset(currentTime, timezone);\n                   currentTime = kendo.timezone.convert(currentTime, currentTime.getTimezoneOffset(), timezoneOffset);\n                }\n            }\n\n            this.times.find(\".k-current-time\").remove();\n\n            var groupsCount = !options.group || options.group.orientation == \"horizontal\" ? 1 : this.groups.length;\n\n            for(var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n                var currentGroup = this.groups[groupIndex];\n                var utcCurrentTime = kendo.date.toUtcTime(currentTime);\n                var ranges = currentGroup.timeSlotRanges(utcCurrentTime, utcCurrentTime + 1);\n                if(ranges.length === 0) {\n                    return;\n                }\n                var collection = ranges[0].collection;\n                var slotElement = collection.slotByStartDate(currentTime);\n\n                if(slotElement) {\n                    var element = $(\"<div class='k-current-time'></div>\");\n                    element.appendTo(this.times).css({\n                        top: Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).top),\n                        height: \"1px\",\n                        right: \"1px\",\n                        left: 0\n                    });\n                }\n            }\n        },\n\n        _currentTime: function() {\n            var that = this;\n            var markerOptions = that.options.currentTimeMarker;\n\n            if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n                var updateInterval = markerOptions.updateInterval;\n\n                that._currentTimeMarkerUpdater();\n                that._currentTimeUpdateTimer = setInterval(proxy(this._currentTimeMarkerUpdater, that), updateInterval);\n            }\n        },\n\n        _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n            var multiday = event.isMultiDay();\n\n            var group = this.groups[groupIndex];\n\n            var ranges = group.ranges(startTime, endTime, multiday, event.isAllDay);\n\n            this._removeResizeHint();\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n                var start = range.startSlot();\n\n                var width = start.offsetWidth;\n                var height = start.clientHeight;\n                var top = start.offsetTop;\n\n                if (multiday) {\n                    width = range.innerWidth();\n                } else {\n                    var rect = range.outerRect(startTime, endTime, this.options.snap);\n                    top = rect.top;\n                    height = rect.bottom - rect.top;\n                }\n\n                var hint = SchedulerView.fn._createResizeHint.call(this,\n                    start.offsetLeft,\n                    top,\n                    width,\n                    height\n                );\n\n                this._resizeHint = this._resizeHint.add(hint);\n            }\n\n            var format = \"t\";\n            var container = this.content;\n\n            if (multiday) {\n                format = \"M/dd\";\n                container = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\");\n                if (!container.length) {\n                    container = this.content;\n                }\n            }\n\n            this._resizeHint.appendTo(container);\n\n            this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\");\n\n            this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(kendo.toString(kendo.timezone.toLocalDate(startTime), format));\n\n            this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(kendo.toString(kendo.timezone.toLocalDate(endTime), format));\n        },\n\n        _updateMoveHint: function(event, groupIndex, distance) {\n            var multiday = event.isMultiDay();\n\n            var group = this.groups[groupIndex];\n\n            var start = kendo.date.toUtcTime(event.start) + distance;\n\n            var end = start + event.duration();\n\n            var ranges = group.ranges(start, end, multiday, event.isAllDay);\n\n            start = kendo.timezone.toLocalDate(start);\n\n            end = kendo.timezone.toLocalDate(end);\n\n            this._removeMoveHint();\n\n            if (!multiday && (getMilliseconds(end) === 0 || getMilliseconds(end) < getMilliseconds(this.startTime()))) {\n                if (ranges.length > 1) {\n                    ranges.pop();\n                }\n            }\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n                var startSlot = range.start;\n\n                var hint = this._createEventElement(event.clone({ start: start, end: end }), !multiday);\n\n                hint.addClass(\"k-event-drag-hint\");\n\n                var css = {\n                    left: startSlot.offsetLeft + 2,\n                    top: startSlot.offsetTop\n                };\n\n                if (this._isRtl) {\n                   css.left = startSlot.clientWidth * 0.1 + startSlot.offsetLeft + 2;\n                }\n\n                if (multiday) {\n                    css.width = range.innerWidth() - 4;\n                } else {\n                    var rect = range.outerRect(start, end, this.options.snap);\n                    css.top = rect.top;\n                    css.height = rect.bottom - rect.top;\n                    css.width = startSlot.clientWidth * 0.9 - 4;\n                }\n\n                hint.css(css);\n\n                this._moveHint = this._moveHint.add(hint);\n            }\n\n            var content = this.content;\n\n            if (multiday) {\n                content = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\");\n                if (!content.length) {\n                    content = this.content;\n                }\n            }\n\n            this._moveHint.appendTo(content);\n        },\n\n       _slotByPosition: function(x, y) {\n           var slot;\n\n           var offset;\n\n           if (this._isVerticallyGrouped()) {\n               offset = this.content.offset();\n               y += this.content[0].scrollTop;\n               x += this.content[0].scrollLeft;\n           } else {\n               offset = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day)\").find(\">div\").offset();\n           }\n\n           if (offset) {\n               x -= offset.left;\n               y -= offset.top;\n           }\n\n           x = Math.ceil(x);\n           y = Math.ceil(y);\n\n           var group;\n           var groupIndex;\n\n           for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n                group = this.groups[groupIndex];\n\n                slot = group.daySlotByPosition(x, y);\n\n                if (slot) {\n                    return slot;\n                }\n           }\n\n           if (offset) {\n               x += offset.left;\n               y += offset.top;\n           }\n\n           offset = this.content.offset();\n\n           x -= offset.left;\n           y -= offset.top;\n\n           if (!this._isVerticallyGrouped()) {\n               y += this.content[0].scrollTop;\n               x += this.content[0].scrollLeft;\n           }\n\n           x = Math.ceil(x);\n           y = Math.ceil(y);\n\n           for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n                group = this.groups[groupIndex];\n\n                slot = group.timeSlotByPosition(x, y);\n\n                if (slot) {\n                    return slot;\n                }\n           }\n\n           return null;\n       },\n\n       _groupCount: function() {\n            var resources = this.groupedResources;\n\n            if (resources.length) {\n                if (this._groupOrientation() === \"vertical\") {\n                    return this._rowCountForLevel(resources.length - 1);\n                } else {\n                    return this._columnCountForLevel(resources.length) / this._columnOffsetForResource(resources.length);\n                }\n            }\n            return 1;\n        },\n\n        _columnCountInResourceView: function() {\n            var resources = this.groupedResources;\n\n            if (!resources.length || this._isVerticallyGrouped()) {\n                return this._columnCountForLevel(0);\n            }\n\n            return this._columnOffsetForResource(resources.length);\n        },\n\n        _timeSlotGroups: function(groupCount, columnCount) {\n            var interval = this._timeSlotInterval();\n\n            var tableRows = this.content.find(\"tr:not(.k-scheduler-header-all-day)\");\n\n            tableRows.attr(\"role\", \"row\");\n\n            var rowCount = tableRows.length;\n\n            if (this._isVerticallyGrouped()) {\n                rowCount = Math.floor(rowCount / groupCount);\n            }\n\n            for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n                var rowMultiplier = 0;\n\n                if (this._isVerticallyGrouped()) {\n                    rowMultiplier = groupIndex;\n                }\n\n                var rowIndex = rowMultiplier * rowCount;\n                var time;\n                var cellMultiplier = 0;\n\n                if (!this._isVerticallyGrouped()) {\n                    cellMultiplier = groupIndex;\n                }\n\n                while (rowIndex < (rowMultiplier + 1) * rowCount) {\n                    var cells = tableRows[rowIndex].children;\n                    var group = this.groups[groupIndex];\n\n                    if (rowIndex % rowCount === 0) {\n                        time = getMilliseconds(new Date(+this.startTime()));\n                    }\n\n                    for (var cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n                        var cell = cells[cellIndex];\n\n                        var collectionIndex = cellIndex % columnCount;\n\n                        var collection = group.getTimeSlotCollection(collectionIndex);\n\n                        var currentDate = this._dates[collectionIndex];\n\n                        var currentTime = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n\n                        var start = currentTime + time;\n\n                        var end = start + interval;\n\n                        cell.setAttribute(\"role\", \"gridcell\");\n                        cell.setAttribute(\"aria-selected\", false);\n\n                        collection.addTimeSlot(cell, start, end);\n                    }\n\n                    time += interval;\n                    rowIndex ++;\n                }\n            }\n        },\n\n        _daySlotGroups: function(groupCount, columnCount) {\n            var tableRows;\n\n            if (this._isVerticallyGrouped()) {\n                tableRows = this.element.find(\".k-scheduler-header-all-day\");\n            } else {\n                tableRows = this.element.find(\".k-scheduler-header-all-day tr\");\n            }\n\n            tableRows.attr(\"role\", \"row\");\n\n            for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n                var rowMultiplier = 0;\n\n                if (this._isVerticallyGrouped()) {\n                    rowMultiplier = groupIndex;\n                }\n\n                var group = this.groups[groupIndex];\n\n                var collection = group.getDaySlotCollection(0);\n\n                var cells = tableRows[rowMultiplier].children;\n                var cellMultiplier = 0;\n\n                if (!this._isVerticallyGrouped()) {\n                    cellMultiplier = groupIndex;\n                }\n\n                var cellCount = 0;\n\n                for (var cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n                    var cell = cells[cellIndex];\n\n                    if (cellIndex % columnCount === 0) {\n                        cellCount = 0;\n                    }\n\n                    var start = this._dates[cellCount];\n\n                    var currentTime = Date.UTC(start.getFullYear(), start.getMonth(), start.getDate());\n\n                    cellCount ++;\n\n                    cell.setAttribute(\"role\", \"gridcell\");\n                    cell.setAttribute(\"aria-selected\", false);\n\n                    collection.addDaySlot(cell, currentTime, currentTime + kendo.date.MS_PER_DAY);\n                }\n            }\n        },\n\n        _groups: function() {\n            var groupCount = this._groupCount();\n            var columnCount = this._columnCountInResourceView();\n\n            this.groups = [];\n\n            for (var idx = 0; idx < groupCount; idx++) {\n                var view = this._addResourceView(idx);\n\n                for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n                    view.addTimeSlotCollection(this._dates[columnIndex], kendo.date.addDays(this._dates[columnIndex], 1));\n                }\n\n                if (this.options.allDaySlot) {\n                    view.addDaySlotCollection(this._dates[0], kendo.date.addDays(this._dates[this._dates.length - 1], 1));\n                }\n            }\n\n            this._timeSlotGroups(groupCount, columnCount);\n\n            if (this.options.allDaySlot) {\n                this._daySlotGroups(groupCount, columnCount);\n            }\n        },\n\n        options: {\n            name: \"MultiDayView\",\n            selectedDateFormat: \"{0:D}\",\n            allDaySlot: true,\n            showWorkHours: false,\n            title: \"\",\n            startTime: kendo.date.today(),\n            endTime: kendo.date.today(),\n            minorTickCount: 2,\n            majorTick: 60,\n            majorTimeHeaderTemplate: \"#=kendo.toString(date, 't')#\",\n            minorTimeHeaderTemplate: \"&nbsp;\",\n            groupHeaderTemplate: \"#=text#\",\n            slotTemplate: \"&nbsp;\",\n            allDaySlotTemplate: \"&nbsp;\",\n            eventTemplate: DAY_VIEW_EVENT_TEMPLATE,\n            allDayEventTemplate: DAY_VIEW_ALL_DAY_EVENT_TEMPLATE,\n            dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n            editable: true,\n            workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n            workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n            workWeekStart: 1,\n            workWeekEnd: 5,\n            footer: {\n                command: \"workDay\"\n            },\n            messages: {\n                allDay: \"all day\",\n                showFullDay: \"Show full day\",\n                showWorkDay: \"Show business hours\"\n            },\n            currentTimeMarker: {\n                 updateInterval: 10000,\n                 useLocalTimezone: true\n            }\n        },\n\n        events: [\"remove\", \"add\", \"edit\"],\n\n        _templates: function() {\n            var options = this.options,\n                settings = extend({}, kendo.Template, options.templateSettings);\n\n            this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n            this.allDayEventTemplate = this._eventTmpl(options.allDayEventTemplate, ALLDAY_EVENT_WRAPPER_STRING);\n\n            this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n            this.minorTimeHeaderTemplate = kendo.template(options.minorTimeHeaderTemplate, settings);\n            this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n            this.slotTemplate = kendo.template(options.slotTemplate, settings);\n            this.allDaySlotTemplate = kendo.template(options.allDaySlotTemplate, settings);\n            this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n        },\n\n        _editable: function() {\n            if (this.options.editable) {\n                if (this._isMobile()) {\n                    this._touchEditable();\n                } else {\n                    this._mouseEditable();\n                }\n            }\n        },\n\n        _mouseEditable: function() {\n            var that = this;\n            that.element.on(\"click\" + NS, \".k-event a:has(.k-si-close)\", function(e) {\n                that.trigger(\"remove\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                e.preventDefault();\n            });\n\n            if (that.options.editable.create !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-scheduler-content td\", function(e) {\n                    if (!$(this).parent().hasClass(\"k-scheduler-header-all-day\")) {\n                        var slot = that._slotByPosition(e.pageX, e.pageY);\n\n                        if (slot) {\n                            var resourceInfo = that._resourceBySlot(slot);\n                            that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n                        }\n\n                        e.preventDefault();\n                    }\n                }).on(\"dblclick\" + NS, \".k-scheduler-header-all-day td\", function(e) {\n                    var slot = that._slotByPosition(e.pageX, e.pageY);\n                    if (slot) {\n                        var resourceInfo = that._resourceBySlot(slot);\n                        that.trigger(\"add\", { eventInfo: extend({}, { isAllDay: true, start: kendo.date.getDate(slot.startDate()), end: kendo.date.getDate(slot.startDate()) }, resourceInfo) });\n                    }\n                    e.preventDefault();\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-event\", function(e) {\n                    that.trigger(\"edit\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                    e.preventDefault();\n                });\n            }\n        },\n\n        _touchEditable: function() {\n            var that = this;\n\n            if (that.options.editable.create !== false) {\n                that._addUserEvents = new kendo.UserEvents(that.element, {\n                    filter:  \".k-scheduler-content td\",\n                    tap: function(e) {\n                        if (!$(e.target).parent().hasClass(\"k-scheduler-header-all-day\")) {\n                            var slot = that._slotByPosition(e.x.location, e.y.location);\n\n                            if (slot) {\n                                var resourceInfo = that._resourceBySlot(slot);\n                                that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n                            }\n\n                            e.preventDefault();\n                        }\n                    }\n                });\n\n                that._allDayUserEvents = new kendo.UserEvents(that.element, {\n                    filter: \".k-scheduler-header-all-day td\",\n                    tap: function(e) {\n                        var slot = that._slotByPosition(e.x.location, e.y.location);\n\n                        if (slot) {\n                            var resourceInfo = that._resourceBySlot(slot);\n                            that.trigger(\"add\", { eventInfo: extend({}, { isAllDay: true, start: kendo.date.getDate(slot.startDate()), end: kendo.date.getDate(slot.startDate()) }, resourceInfo) });\n                        }\n\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that._editUserEvents = new kendo.UserEvents(that.element, {\n                    filter: \".k-event\",\n                    tap: function(e) {\n                        var eventElement = $(e.target).closest(\".k-event\");\n\n                        if (!eventElement.hasClass(\"k-event-active\")) {\n                            that.trigger(\"edit\", { uid: eventElement.attr(kendo.attr(\"uid\")) });\n                        }\n\n                        e.preventDefault();\n                    }\n                });\n            }\n        },\n\n        _layout: function(dates) {\n            var columns = [];\n            var rows = [];\n            var options = this.options;\n            var that = this;\n\n            for (var idx = 0; idx < dates.length; idx++) {\n                var column = {};\n\n                column.text = that.dateHeaderTemplate({ date: dates[idx] });\n\n                if (kendo.date.isToday(dates[idx])) {\n                    column.className = \"k-today\";\n                }\n\n                columns.push(column);\n            }\n\n            var resources = this.groupedResources;\n\n            if (options.allDaySlot) {\n                rows.push({\n                    text: options.messages.allDay, allDay: true,\n                    cellContent: function(idx) {\n                        var groupIndex = idx;\n\n                        idx = resources.length && that._groupOrientation() !== \"vertical\" ? idx % dates.length : idx;\n\n                        return that.allDaySlotTemplate({ date: dates[idx], resources: function() {\n                                return that._resourceBySlot({ groupIndex: groupIndex });\n                            }\n                        });\n                    }\n                });\n            }\n\n            this._forTimeRange(this.startTime(), this.endTime(), function(date, majorTick, middleRow, lastSlotRow) {\n                var template = majorTick ? that.majorTimeHeaderTemplate : that.minorTimeHeaderTemplate;\n\n                var row = {\n                    text: template({ date: date }),\n                    className: lastSlotRow ? \"k-slot-cell\" : \"\"\n                };\n\n                rows.push(row);\n            });\n\n\n            if (resources.length) {\n                if (this._groupOrientation() === \"vertical\") {\n                    rows = this._createRowsLayout(resources, rows, this.groupHeaderTemplate);\n                } else {\n                    columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate);\n                }\n            }\n\n            return {\n                columns: columns,\n                rows: rows\n            };\n        },\n\n        _footer: function() {\n            var options = this.options;\n\n            if (options.footer !== false) {\n                var html = '<div class=\"k-header k-scheduler-footer\">';\n\n                var command = options.footer.command;\n\n                if (command && command === \"workDay\") {\n                    html += '<ul class=\"k-reset k-header\">';\n\n                    html += '<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>';\n                    html += (options.showWorkHours ? options.messages.showFullDay : options.messages.showWorkDay) + '</a></li>';\n\n                    html += '</ul>';\n\n                } else {\n                    html += \"&nbsp;\";\n                }\n\n                html += \"</div>\";\n\n                this.footer = $(html).appendTo(this.element);\n\n                var that = this;\n\n                this.footer.on(\"click\" + NS, \".k-scheduler-fullday\", function(e) {\n                    e.preventDefault();\n                    that.trigger(\"navigate\", { view: that.name || options.name, date: that.startDate(), isWorkDay: !options.showWorkHours });\n                });\n            }\n        },\n\n        _forTimeRange: function(min, max, action, after) {\n            min = toInvariantTime(min); //convert the date to 1/2/1980 and sets the time\n            max = toInvariantTime(max);\n\n            var that = this,\n                msMin = getMilliseconds(min),\n                msMax = getMilliseconds(max),\n                minorTickCount = that.options.minorTickCount,\n                msMajorInterval = that.options.majorTick * MS_PER_MINUTE,\n                msInterval = msMajorInterval / minorTickCount || 1,\n                start = new Date(+min),\n                startDay = start.getDate(),\n                msStart,\n                idx = 0, length,\n                html = \"\";\n\n            length = MS_PER_DAY / msInterval;\n\n            if (msMin != msMax) {\n                if (msMin > msMax) {\n                    msMax += MS_PER_DAY;\n                }\n\n                length = ((msMax - msMin) / msInterval);\n            }\n\n            length = Math.round(length);\n\n            for (; idx < length; idx++) {\n                var majorTickDivider = idx % (msMajorInterval/msInterval),\n                    isMajorTickRow = majorTickDivider === 0,\n                    isMiddleRow = majorTickDivider < minorTickCount - 1,\n                    isLastSlotRow = majorTickDivider === minorTickCount - 1;\n\n                html += action(start, isMajorTickRow, isMiddleRow, isLastSlotRow);\n\n                setTime(start, msInterval, false);\n            }\n\n            if (msMax) {\n                msStart = getMilliseconds(start);\n                if (startDay < start.getDate()) {\n                    msStart += MS_PER_DAY;\n                }\n\n                if (msStart > msMax) {\n                    start = new Date(+max);\n                }\n            }\n\n            if (after) {\n                html += after(start);\n            }\n\n            return html;\n        },\n\n        _content: function(dates) {\n            var that = this;\n            var options = that.options;\n            var start = that.startTime();\n            var end = this.endTime();\n            var groupsCount = 1;\n            var rowCount = 1;\n            var columnCount = dates.length;\n            var html = '';\n            var resources = this.groupedResources;\n            var slotTemplate = this.slotTemplate;\n            var allDaySlotTemplate = this.allDaySlotTemplate;\n            var isVerticalGroupped = false;\n            var allDayVerticalGroupRow;\n\n            if (resources.length) {\n                isVerticalGroupped = that._groupOrientation() === \"vertical\";\n\n                if (isVerticalGroupped) {\n                    rowCount = this._rowCountForLevel(this.rowLevels.length - 2);\n                    if (options.allDaySlot) {\n                        allDayVerticalGroupRow = function (groupIndex) {\n                            var result = '<tr class=\"k-scheduler-header-all-day\">';\n                            var resources = function() {\n                                return that._resourceBySlot({ groupIndex: groupIndex });\n                            };\n\n                            for (var idx = 0, length = dates.length; idx < length; idx++) {\n                                result += \"<td>\" + allDaySlotTemplate({ date: dates[idx], resources: resources }) + \"</td>\";\n                            }\n\n                            return result + \"</tr>\";\n                        };\n                    }\n                } else {\n                    groupsCount = this._columnCountForLevel(this.columnLevels.length - 2);\n                }\n            }\n\n            html += '<tbody>';\n\n            var appendRow = function(date, majorTick) {\n                var content = \"\";\n                var idx;\n                var length;\n                var classes = \"\";\n                var tmplDate;\n                var groupIdx = 0;\n\n                content = '<tr' + (majorTick ? ' class=\"k-middle-row\"' : \"\") + '>';\n\n                var resources = function(groupIndex) {\n                    return function() {\n                        return that._resourceBySlot({ groupIndex: groupIndex });\n                    };\n                };\n\n                for (; groupIdx < groupsCount; groupIdx++) {\n                    for (idx = 0, length = columnCount; idx < length; idx++) {\n                        classes = \"\";\n\n                        if (kendo.date.isToday(dates[idx])) {\n                            classes += \"k-today\";\n                        }\n\n                        if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(that.options.workDayStart) ||\n                            kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(that.options.workDayEnd) ||\n                            !that._isWorkDay(dates[idx])) {\n                            classes += \" k-nonwork-hour\";\n                        }\n\n                        content += '<td' + (classes !== \"\" ? ' class=\"' + classes + '\"' : \"\") + \">\";\n                        tmplDate = kendo.date.getDate(dates[idx]);\n                        kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n\n                        content += slotTemplate({ date: tmplDate, resources: resources(isVerticalGroupped ? rowIdx : groupIdx) });\n                        content += \"</td>\";\n                    }\n                }\n\n                content += \"</tr>\";\n\n                return content;\n            };\n\n            for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n                html += allDayVerticalGroupRow ? allDayVerticalGroupRow(rowIdx) : \"\";\n\n                html += this._forTimeRange(start, end, appendRow);\n            }\n\n            html += '</tbody>';\n\n            this.content.find(\"table\").append(html);\n        },\n\n        _isWorkDay: function(date) {\n            var day = date.getDay();\n            var workDays =  this._workDays;\n\n            for (var i = 0; i < workDays.length; i++) {\n                if (workDays[i] === day) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _render: function(dates) {\n            var that = this;\n\n            dates = dates || [];\n\n            this._dates = dates;\n\n            this._startDate = dates[0];\n\n            this._endDate = dates[(dates.length - 1) || 0];\n\n            this.createLayout(this._layout(dates));\n\n            this._content(dates);\n\n            this._footer();\n\n            this.refreshLayout();\n\n            var allDayHeader = this.element.find(\".k-scheduler-header-all-day td\");\n\n            if (allDayHeader.length) {\n                this._allDayHeaderHeight = allDayHeader.first()[0].clientHeight;\n            }\n\n            that.datesHeader.on(\"click\" + NS, \".k-nav-day\", function(e) {\n                var th = $(e.currentTarget).closest(\"th\");\n\n                var offset = th.offset();\n\n                var slot = that._slotByPosition(offset.left, offset.top + th.outerHeight());\n\n                that.trigger(\"navigate\", { view: \"day\", date: slot.startDate() });\n            });\n        },\n\n        startTime: function() {\n            var options = this.options;\n            return options.showWorkHours ? options.workDayStart : options.startTime;\n        },\n\n        endTime: function() {\n            var options = this.options;\n            return options.showWorkHours ? options.workDayEnd : options.endTime;\n        },\n\n        startDate: function() {\n            return this._startDate;\n        },\n\n        endDate: function() {\n            return this._endDate;\n        },\n\n        _end: function(isAllDay) {\n            var time = getMilliseconds(this.endTime()) || MS_PER_DAY;\n\n            if (isAllDay) {\n                time = 0;\n            }\n\n            return new Date(this._endDate.getTime() + time);\n        },\n\n        nextDate: function() {\n            return kendo.date.nextDay(this.endDate());\n        },\n\n        previousDate: function() {\n            return kendo.date.previousDay(this.startDate());\n        },\n\n        calculateDateRange: function() {\n            this._render([this.options.date]);\n        },\n\n        destroy: function() {\n            var that = this;\n\n            if (that._currentTimeUpdateTimer) {\n                clearInterval(that._currentTimeUpdateTimer);\n            }\n\n            if (that.datesHeader) {\n                that.datesHeader.off(NS);\n            }\n\n            if (that.element) {\n                that.element.off(NS);\n            }\n\n            if (that.footer) {\n                that.footer.remove();\n            }\n\n            SchedulerView.fn.destroy.call(this);\n\n            if (this._isMobile() && that.options.editable) {\n                if (that.options.editable.create !== false) {\n                    that._addUserEvents.destroy();\n                    that._allDayUserEvents.destroy();\n                }\n\n                if (that.options.editable.update !== false) {\n                    that._editUserEvents.destroy();\n                }\n            }\n        },\n\n        inRange: function(options) {\n            var inRange = SchedulerView.fn.inRange.call(this, options);\n\n            var startTime = getMilliseconds(this.startTime());\n            var endTime = getMilliseconds(this.endTime()) || kendo.date.MS_PER_DAY;\n\n            var start = getMilliseconds(options.start);\n            var end = getMilliseconds(options.end) || kendo.date.MS_PER_DAY;\n\n            return inRange && startTime <= start && end <= endTime;\n        },\n\n        selectionByElement: function(cell) {\n            var offset = cell.offset();\n            return this._slotByPosition(offset.left, offset.top);\n        },\n\n        _timeSlotInterval: function() {\n            var options = this.options;\n            return (options.majorTick/options.minorTickCount) * MS_PER_MINUTE;\n        },\n\n        _timeSlotIndex: function(date) {\n            var options = this.options;\n            var eventStartTime = getMilliseconds(date);\n            var startTime = getMilliseconds(this.startTime());\n            var timeSlotInterval = ((options.majorTick/options.minorTickCount) * MS_PER_MINUTE);\n\n            return (eventStartTime - startTime) / (timeSlotInterval);\n        },\n\n        _slotIndex: function(date, multiday) {\n            if (multiday) {\n                return this._dateSlotIndex(date);\n            }\n\n            return this._timeSlotIndex(date);\n        },\n\n        _dateSlotIndex: function(date, overlaps) {\n            var idx;\n            var length;\n            var slots = this._dates || [];\n            var slotStart;\n            var slotEnd;\n            var offset = 1;\n\n            for (idx = 0, length = slots.length; idx < length; idx++) {\n                slotStart = kendo.date.getDate(slots[idx]);\n                slotEnd = new Date(kendo.date.getDate(slots[idx]).getTime() + MS_PER_DAY - (overlaps ? 0 : 1));\n\n                if (isInDateRange(date, slotStart, slotEnd)) {\n                    return idx * offset;\n                }\n            }\n            return -1;\n        },\n\n        _positionAllDayEvent: function(element, slotRange) {\n            var slotWidth = slotRange.innerWidth();\n            var startIndex = slotRange.start.index;\n            var endIndex = slotRange.end.index;\n\n            var allDayEvents = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n\n            var currentColumnCount = this._headerColumnCount || 0;\n\n            var leftOffset = 2;\n\n            var rightOffset = startIndex !== endIndex ? 5 : 4;\n\n            var eventHeight = this._allDayHeaderHeight;\n\n            var start = slotRange.startSlot();\n\n            element\n                .css({\n                    left: start.offsetLeft + leftOffset,\n                    width: slotWidth - rightOffset\n                });\n\n            slotRange.addEvent({ slotIndex: startIndex, start: startIndex, end: endIndex, element: element });\n\n            allDayEvents.push({ slotIndex: startIndex, start: startIndex, end: endIndex, element: element });\n\n            var rows = SchedulerView.createRows(allDayEvents);\n\n            if (rows.length && rows.length > currentColumnCount) {\n                this._headerColumnCount = rows.length;\n            }\n\n            var top = slotRange.start.offsetTop;\n\n            for (var idx = 0, length = rows.length; idx < length; idx++) {\n                var rowEvents = rows[idx].events;\n\n                for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n                    $(rowEvents[j].element).css({\n                        top: top + idx * eventHeight\n                    });\n                }\n            }\n        },\n\n        _arrangeColumns: function(element, top, height, slotRange) {\n            var startSlot = slotRange.start;\n\n            element = { element: element, slotIndex: startSlot.index, start: top, end: top + height };\n\n            var columns,\n                slotWidth = startSlot.clientWidth,\n                eventRightOffset = slotWidth * 0.10,\n                columnEvents,\n                eventElements =  slotRange.events(),\n                slotEvents = SchedulerView.collidingEvents(eventElements, element.start, element.end);\n\n            slotRange.addEvent(element);\n\n            slotEvents.push(element);\n\n            columns = SchedulerView.createColumns(slotEvents);\n\n            var columnWidth = (slotWidth - eventRightOffset) / columns.length;\n\n            for (var idx = 0, length = columns.length; idx < length; idx++) {\n                columnEvents = columns[idx].events;\n\n                for (var j = 0, eventLength = columnEvents.length; j < eventLength; j++) {\n                    columnEvents[j].element[0].style.width = columnWidth - 4 + \"px\";\n                    columnEvents[j].element[0].style.left = (this._isRtl ? eventRightOffset : 0) + startSlot.offsetLeft + idx * columnWidth + 2 + \"px\";\n                }\n            }\n        },\n\n        _positionEvent: function(event, element, slotRange) {\n            var start = event._startTime || event.start;\n            var end = event._endTime || event.end;\n\n            var rect = slotRange.innerRect(start, end, false);\n\n            var height = rect.bottom - rect.top - 2; /* two times border width */\n\n            if (height < 0) {\n                height = 0;\n            }\n\n            element.css( {\n                top: rect.top,\n                height: height\n            } );\n\n            this._arrangeColumns(element, rect.top, element[0].clientHeight, slotRange);\n       },\n\n       _createEventElement: function(event, isOneDayEvent, head, tail) {\n            var template = isOneDayEvent ? this.eventTemplate : this.allDayEventTemplate;\n            var options = this.options;\n            var editable = options.editable;\n            var isMobile = this._isMobile();\n            var showDelete = editable && editable.destroy !== false && !isMobile;\n            var resizable = editable && editable.resize !== false;\n            var startDate = getDate(this.startDate());\n            var endDate = getDate(this.endDate());\n            var startTime = getMilliseconds(this.startTime());\n            var endTime = getMilliseconds(this.endTime());\n            var eventStartTime = event._time(\"start\");\n            var eventEndTime = event._time(\"end\");\n            var middle;\n\n            if (startTime >= endTime) {\n                endTime = getMilliseconds(new Date(this.endTime().getTime() + MS_PER_DAY - 1));\n            }\n\n            if (!isOneDayEvent && !event.isAllDay) {\n                endDate = new Date(endDate.getTime() + MS_PER_DAY);\n            }\n\n            var eventStartDate = event.start;\n            var eventEndDate = event.end;\n\n            if (event.isAllDay) {\n                eventEndDate = getDate(event.end);\n            }\n\n            if ((!isInDateRange(getDate(eventStartDate), startDate, endDate) &&\n                !isInDateRange(eventEndDate, startDate, endDate)) ||\n                (isOneDayEvent && eventStartTime < startTime && eventEndTime > endTime)) {\n\n                middle = true;\n            } else if (getDate(eventStartDate) < startDate || (isOneDayEvent && eventStartTime < startTime)) {\n                tail = true;\n            } else if ((eventEndDate > endDate && !isOneDayEvent) || (isOneDayEvent && eventEndTime > endTime)) {\n                head = true;\n            }\n\n            var resources = this.eventResources(event);\n\n            if (event._startTime) {\n                eventStartDate = new Date(eventStartTime);\n                eventStartDate = kendo.timezone.apply(eventStartDate, \"Etc/UTC\");\n            }\n\n            if (event.endTime) {\n                eventEndDate = new Date(eventEndTime);\n                eventEndDate = kendo.timezone.apply(eventEndDate, \"Etc/UTC\");\n            }\n\n            var data = extend({}, {\n                ns: kendo.ns,\n                resizable: resizable,\n                showDelete: showDelete,\n                middle: middle,\n                head: head,\n                tail: tail,\n                singleDay: this._dates.length == 1,\n                resources: resources,\n                inverseColor: resources && resources[0] ? this._shouldInverseResourceColor(resources[0]) : false\n            }, event, {\n                start: eventStartDate,\n                end: eventEndDate\n            });\n\n            var element = $(template(data));\n\n            this.angular(\"compile\", function(){\n                return {\n                    elements: element,\n                    data: [ { dataItem: data } ]\n                };\n            });\n\n            return element;\n        },\n\n        _isInTimeSlot: function(event) {\n            var slotStartTime = this.startTime(),\n                slotEndTime = this.endTime(),\n                startTime = event._startTime || event.start,\n                endTime = event._endTime || event.end;\n\n            if (getMilliseconds(slotEndTime) === getMilliseconds(kendo.date.getDate(slotEndTime))) {\n                slotEndTime = kendo.date.getDate(slotEndTime);\n                setTime(slotEndTime, MS_PER_DAY - 1);\n            }\n\n            if (event._date(\"end\") > event._date(\"start\")) {\n               endTime = +event._date(\"end\") + (MS_PER_DAY - 1);\n            }\n\n            endTime = endTime - event._date(\"end\");\n            startTime = startTime - event._date(\"start\");\n            slotEndTime = getMilliseconds(slotEndTime);\n            slotStartTime = getMilliseconds(slotStartTime);\n\n            if(slotStartTime === startTime && startTime === endTime) {\n                return true;\n            }\n\n            var overlaps = startTime !== slotEndTime;\n\n            return isInTimeRange(startTime, slotStartTime, slotEndTime, overlaps) ||\n                isInTimeRange(endTime, slotStartTime, slotEndTime, overlaps) ||\n                isInTimeRange(slotStartTime, startTime, endTime) ||\n                isInTimeRange(slotEndTime, startTime, endTime);\n        },\n\n        _isInDateSlot: function(event) {\n            var groups = this.groups[0];\n            var slotStart = groups.firstSlot().start;\n            var slotEnd = groups.lastSlot().end - 1;\n\n            var startTime = kendo.date.toUtcTime(event.start);\n            var endTime = kendo.date.toUtcTime(event.end);\n\n            return (isInDateRange(startTime, slotStart, slotEnd) ||\n                isInDateRange(endTime, slotStart, slotEnd) ||\n                isInDateRange(slotStart, startTime, endTime) ||\n                isInDateRange(slotEnd, startTime, endTime)) &&\n                (!isInDateRange(endTime, slotStart, slotStart) || isInDateRange(endTime, startTime, startTime) || event.isAllDay );\n        },\n\n        _updateAllDayHeaderHeight: function(height) {\n            if (this._height !== height) {\n                this._height = height;\n\n                var allDaySlots = this.element.find(\".k-scheduler-header-all-day td\");\n\n                if (allDaySlots.length) {\n                    allDaySlots.parent()\n                        .add(this.element.find(\".k-scheduler-times-all-day\").parent())\n                        .height(height);\n\n                    for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n                        this.groups[groupIndex].refresh();\n                    }\n                }\n            }\n        },\n\n        _renderEvents: function(events, groupIndex) {\n            var allDayEventContainer = this.datesHeader.find(\".k-scheduler-header-wrap > div\");\n            var event;\n\n            var idx;\n            var length;\n\n            for (idx = 0, length = events.length; idx < length; idx++) {\n                event = events[idx];\n\n                if (this._isInDateSlot(event)) {\n\n                    var isMultiDayEvent = event.isAllDay || event.end.getTime() - event.start.getTime() >= MS_PER_DAY;\n                    var container = isMultiDayEvent && !this._isVerticallyGrouped() ? allDayEventContainer : this.content;\n                    var element;\n                    var ranges;\n                    var group;\n\n                    if (!isMultiDayEvent) {\n\n                        if (this._isInTimeSlot(event)) {\n                            group = this.groups[groupIndex];\n\n                            if (!group._continuousEvents) {\n                                group._continuousEvents = [];\n                            }\n\n                            ranges = group.slotRanges(event);\n\n                            var rangeCount = ranges.length;\n\n                            for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n                                var range = ranges[rangeIndex];\n                                var start = event.start;\n                                var end = event.end;\n\n                                if (rangeCount > 1) {\n                                    if (rangeIndex === 0) {\n                                        end = range.end.endDate();\n                                    } else if (rangeIndex == rangeCount - 1) {\n                                        start = range.start.startDate();\n                                    } else {\n                                        start = range.start.startDate();\n                                        end = range.end.endDate();\n                                    }\n                                }\n\n                                var occurrence = event.clone({ start: start, end: end, _startTime: event._startTime, _endTime: event.endTime });\n\n                                if (this._isInTimeSlot(occurrence)) {\n                                    var head = range.head;\n\n                                    element = this._createEventElement(event, !isMultiDayEvent, head, range.tail);\n\n                                    element.appendTo(container);\n\n                                    this._positionEvent(occurrence, element, range);\n\n                                    addContinuousEvent(group, range, element, false);\n                                }\n                            }\n                        }\n\n                   } else if (this.options.allDaySlot) {\n                       group = this.groups[groupIndex];\n\n                       if (!group._continuousEvents) {\n                           group._continuousEvents = [];\n                       }\n\n                       ranges = group.slotRanges(event);\n\n                       if (ranges.length) {\n                           element = this._createEventElement(event, !isMultiDayEvent);\n\n                           this._positionAllDayEvent(element, ranges[0]);\n\n                           addContinuousEvent(group, ranges[0], element, true);\n\n                           element.appendTo(container);\n                       }\n                    }\n                }\n            }\n        },\n\n        render: function(events) {\n            this._headerColumnCount = 0;\n\n            this._groups();\n\n            this.element.find(\".k-event\").remove();\n\n            events = new kendo.data.Query(events)\n                .sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"desc\" }])\n                .toArray();\n\n            var eventsByResource = [];\n\n            this._eventsByResource(events, this.groupedResources, eventsByResource);\n\n            var that = this;\n\n            var eventsPerDate = $.map(this._dates, function(date) {\n                return Math.max.apply(null,\n                    $.map(eventsByResource, function(events) {\n                        return $.grep(events, function(event) {\n                            return event.isMultiDay() && isInDateRange(date, getDate(event.start), getDate(event.end));\n                        }).length;\n                    })\n                );\n            });\n\n            var height = Math.max.apply(null, eventsPerDate);\n\n            this._updateAllDayHeaderHeight((height + 1) * this._allDayHeaderHeight);\n\n            for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n                this._renderEvents(eventsByResource[groupIndex], groupIndex);\n            }\n\n            this.refreshLayout();\n            this.trigger(\"activate\");\n        },\n\n        _eventsByResource: function(events, resources, result) {\n            var resource = resources[0];\n\n            if (resource) {\n                var view = resource.dataSource.view();\n\n                for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n                    var value = this._resourceValue(resource, view[itemIdx]);\n\n                    var eventsFilteredByResource = new kendo.data.Query(events).filter({ field: resource.field, operator: SchedulerView.groupEqFilter(value) }).toArray();\n\n                    if (resources.length > 1) {\n                        this._eventsByResource(eventsFilteredByResource, resources.slice(1), result);\n                    } else {\n                        result.push(eventsFilteredByResource);\n                    }\n                }\n            } else {\n                result.push(events);\n            }\n        },\n\n        _columnOffsetForResource: function(index) {\n            return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n        },\n\n        _columnCountForLevel: function(level) {\n            var columnLevel = this.columnLevels[level];\n            return columnLevel ? columnLevel.length : 0;\n        },\n\n        _rowCountForLevel: function(level) {\n            var rowLevel = this.rowLevels[level];\n            return rowLevel ? rowLevel.length : 0;\n        },\n\n        clearSelection: function() {\n\n            this.content.add(this.datesHeader)\n                .find(\".k-state-selected\")\n                .removeAttr(\"id\")\n                .attr(\"aria-selected\", false)\n                .removeClass(\"k-state-selected\");\n        },\n\n        _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n            var isDaySlot = selection.isAllDay;\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n\n            if (multiple) {\n                if (vertical) {\n                    if (!isDaySlot &&\n                        startSlot.index === endSlot.index &&\n                        startSlot.collectionIndex === endSlot.collectionIndex) {\n                            selection.backward = reverse;\n                    }\n                } else {\n                    if ((isDaySlot && startSlot.index === endSlot.index) ||\n                        (!isDaySlot && startSlot.collectionIndex === endSlot.collectionIndex)) {\n                            selection.backward = reverse;\n                    }\n                }\n            }\n        },\n\n        _changeViewPeriod: function(selection, reverse, vertical) {\n            if (!vertical) {\n                var date = reverse ? this.previousDate() : this.nextDate();\n                var start = selection.start;\n                var end = selection.end;\n\n                selection.start = new Date(date);\n                selection.end = new Date(date);\n\n                var endMilliseconds = selection.isAllDay ? MS_PER_DAY : getMilliseconds(end);\n\n                setTime(selection.start, getMilliseconds(start));\n                setTime(selection.end, endMilliseconds);\n\n                if (!this._isVerticallyGrouped()) {\n                    selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n                }\n\n                selection.events = [];\n\n                return true;\n            }\n        }\n    });\n\n    extend(true, ui, {\n        MultiDayView: MultiDayView,\n        DayView: MultiDayView.extend({\n            options: {\n                name: \"DayView\",\n                title: \"Day\"\n            },\n            name: \"day\"\n        }),\n        WeekView: MultiDayView.extend({\n            options: {\n                name: \"WeekView\",\n                title: \"Week\",\n                selectedDateFormat: \"{0:D} - {1:D}\"\n            },\n            name: \"week\",\n            calculateDateRange: function() {\n                var selectedDate = this.options.date,\n                    start = kendo.date.dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1),\n                    idx, length,\n                    dates = [];\n\n                for (idx = 0, length = 7; idx < length; idx++) {\n                    dates.push(start);\n                    start = kendo.date.nextDay(start);\n                }\n                this._render(dates);\n            }\n        }),\n        WorkWeekView: MultiDayView.extend({\n            options: {\n                name: \"WorkWeekView\",\n                title: \"Work Week\",\n                selectedDateFormat: \"{0:D} - {1:D}\"\n            },\n            name: \"workWeek\",\n            nextDate: function() {\n                return kendo.date.dayOfWeek(kendo.date.nextDay(this.endDate()), this.options.workWeekStart, 1);\n            },\n            previousDate: function() {\n                return kendo.date.previousDay(this.startDate());\n            },\n            calculateDateRange: function() {\n                var selectedDate = this.options.date,\n                    start = kendo.date.dayOfWeek(selectedDate, this.options.workWeekStart, -1),\n                    end = kendo.date.dayOfWeek(start, this.options.workWeekEnd, 1),\n                    dates = [];\n\n                while (start <= end) {\n                    dates.push(start);\n                    start = kendo.date.nextDay(start);\n                }\n                this._render(dates);\n            }\n        })\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($){\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        NS = \".kendoAgendaView\";\n\n    var EVENT_WRAPPER_FORMAT = '<div class=\"k-task\" title=\"#:title.replace(/\"/g,\"\\'\")#\" data-#=kendo.ns#uid=\"#=uid#\">' +\n                               '# if (resources[0]) {#' +\n                               '<span class=\"k-scheduler-mark\" style=\"background-color:#=resources[0].color#\"></span>' +\n                               \"# } #\" +\n                               \"# if (data.isException()) { #\" +\n                               '<span class=\"k-icon k-i-exception\"></span>' +\n                               '# } else if (data.isRecurring()) {#' +\n                               '<span class=\"k-icon k-i-refresh\"></span>' +\n                               \"# } #\" +\n                               '{0}' +\n                               '#if (showDelete) {#' +\n                                   '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>' +\n                               '#}#' +\n                           '</div>';\n\n    ui.AgendaView = ui.SchedulerView.extend({\n        init: function(element, options) {\n            ui.SchedulerView.fn.init.call(this, element, options);\n\n            options = this.options;\n\n            if (options.editable) {\n                options.editable = $.extend(\n                    { \"delete\": true },\n                    options.editable,\n                    { create: false, update: false }\n                );\n            }\n\n            this.title = options.title;\n\n            this.name = \"agenda\";\n\n            this._eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_FORMAT);\n            this._dateTemplate = kendo.template(options.eventDateTemplate);\n            this._groupTemplate = kendo.template(options.eventGroupTemplate);\n            this._timeTemplate = kendo.template(options.eventTimeTemplate);\n\n            this.element.on(\"mouseenter\" + NS, \".k-scheduler-agenda .k-scheduler-content tr\", \"_mouseenter\")\n                        .on(\"mouseleave\" + NS, \".k-scheduler-agenda .k-scheduler-content tr\", \"_mouseleave\")\n                        .on(\"click\" + NS, \".k-scheduler-agenda .k-scheduler-content .k-link:has(.k-si-close)\", \"_remove\");\n\n            this._renderLayout(options.date);\n        },\n\n        _mouseenter: function(e) {\n            $(e.currentTarget).addClass(\"k-state-hover\");\n        },\n\n        _mouseleave: function(e) {\n            $(e.currentTarget).removeClass(\"k-state-hover\");\n        },\n\n        _remove: function(e) {\n            e.preventDefault();\n\n            this.trigger(\"remove\", {\n                uid: $(e.currentTarget).closest(\".k-task\").attr(kendo.attr(\"uid\"))\n            });\n        },\n\n        nextDate: function() {\n            return kendo.date.nextDay(this.startDate());\n        },\n\n        startDate: function() {\n            return this._startDate;\n        },\n\n        endDate: function() {\n            return this._endDate;\n        },\n\n        previousDate: function() {\n            return kendo.date.previousDay(this.startDate());\n        },\n\n        _renderLayout: function(date) {\n            this._startDate = date;\n            this._endDate = kendo.date.addDays(date, 7);\n            this.createLayout(this._layout());\n            this.table.addClass(\"k-scheduler-agenda\");\n        },\n\n        _layout: function() {\n            var columns = [\n                    { text: this.options.messages.time, className: \"k-scheduler-timecolumn\" },\n                    { text: this.options.messages.event }\n                ];\n\n            if (!this._isMobilePhoneView()) {\n                columns.splice(0, 0, { text: this.options.messages.date, className: \"k-scheduler-datecolumn\" });\n            }\n\n            var resources = this.groupedResources;\n            if (resources.length) {\n                var groupHeaders = [];\n                for (var idx = 0; idx < resources.length; idx++) {\n                    groupHeaders.push({ text: \"\", className: \"k-scheduler-groupcolumn\"});\n                }\n\n                columns = groupHeaders.concat(columns);\n            }\n\n            return {\n                columns: columns\n            };\n        },\n\n        _tasks: function(events) {\n            var tasks = [];\n\n            for (var idx = 0; idx < events.length; idx++) {\n                var event = events[idx];\n                var start = event.start;\n                var end = event.end;\n\n                var eventDurationInDays =\n                    (kendo.date.getDate(end) - kendo.date.getDate(start)) / kendo.date.MS_PER_DAY + 1;\n\n                var task = event.clone();\n                task.startDate = kendo.date.getDate(start);\n\n                if (task.startDate >= this.startDate()) {\n                    tasks.push(task);\n                }\n\n                if (eventDurationInDays > 1) {\n                    task.end = kendo.date.nextDay(start);\n                    task.head = true;\n                    for (var day = 1; day < eventDurationInDays; day++) {\n                        start = task.end;\n                        task = event.clone();\n                        task.start = start;\n                        task.startDate = kendo.date.getDate(start);\n                        task.end = kendo.date.nextDay(start);\n                        if (day == eventDurationInDays -1) {\n                            task.end = new Date(task.start.getFullYear(), task.start.getMonth(), task.start.getDate(), end.getHours(), end.getMinutes(), end.getSeconds(), end.getMilliseconds());\n                            task.tail = true;\n                        } else {\n                            task.isAllDay = true;\n                            task.middle = true;\n                        }\n\n                        if (task.end <= this.endDate() && task.start >= this.startDate()) {\n                            tasks.push(task);\n                        }\n                    }\n                }\n            }\n\n            return new kendo.data.Query(tasks).sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"asc\" }]).groupBy({field: \"startDate\"}).toArray();\n        },\n\n        _renderTaskGroups: function(tasksGroups, groups) {\n            var tableRows = [];\n            var editable = this.options.editable;\n            var showDelete = editable && editable.destroy !== false && !this._isMobile();\n            var isPhoneView = this._isMobilePhoneView();\n\n            for (var taskGroupIndex = 0; taskGroupIndex < tasksGroups.length; taskGroupIndex++) {\n                var date = tasksGroups[taskGroupIndex].value;\n\n                var tasks = tasksGroups[taskGroupIndex].items;\n\n                var today = kendo.date.isToday(date);\n\n                for (var taskIndex = 0; taskIndex < tasks.length; taskIndex++) {\n                    var task = tasks[taskIndex];\n\n                    var tableRow = [];\n\n                    var headerCells = !isPhoneView ? tableRow : [];\n\n                    if (taskGroupIndex === 0 && taskIndex === 0 && groups.length) {\n                        for (var idx = 0; idx < groups.length; idx++) {\n                            headerCells.push(kendo.format(\n                                '<td class=\"k-scheduler-groupcolumn{2}\" rowspan=\"{0}\">{1}</td>',\n                                groups[idx].rowSpan,\n                                this._groupTemplate({ value: groups[idx].text }),\n                                groups[idx].className\n                            ));\n                        }\n                    }\n\n                    if (taskIndex === 0) {\n                        if (isPhoneView) {\n                            headerCells.push(kendo.format(\n                                '<td class=\"k-scheduler-datecolumn\" colspan=\"2\">{0}</td>',\n                                this._dateTemplate({ date: date })\n                            ));\n\n                            tableRows.push('<tr role=\"row\" aria-selected=\"false\"' + (today ? ' class=\"k-today\">' : \">\") + headerCells.join(\"\")  + \"</tr>\");\n                        } else {\n                            tableRow.push(kendo.format(\n                                '<td class=\"k-scheduler-datecolumn{3}{2}\" rowspan=\"{0}\">{1}</td>',\n                                tasks.length,\n                                this._dateTemplate({ date: date }),\n                                taskGroupIndex == tasksGroups.length - 1 && !groups.length ? \" k-last\" : \"\",\n                                !groups.length ? \" k-first\" : \"\"\n                            ));\n                        }\n                    }\n\n                    if (task.head) {\n                        task.format = \"{0:t}\";\n                    } else if (task.tail) {\n                        task.format = \"{1:t}\";\n                    } else {\n                        task.format = \"{0:t}-{1:t}\";\n                    }\n\n                    task.resources = this.eventResources(task);\n\n                    tableRow.push(kendo.format(\n                        '<td class=\"k-scheduler-timecolumn\"><div>{0}{1}{2}</div></td><td>{3}</td>',\n                        task.tail || task.middle ? '<span class=\"k-icon k-i-arrow-w\"></span>' : \"\",\n                        this._timeTemplate(task.clone({ start: task._startTime || task.start, end: task.endTime || task.end })),\n                        task.head || task.middle ? '<span class=\"k-icon k-i-arrow-e\"></span>' : \"\",\n                        this._eventTemplate(task.clone({ showDelete: showDelete }))\n                    ));\n\n                    tableRows.push('<tr role=\"row\" aria-selected=\"false\"' + (today ? ' class=\"k-today\">' : \">\") + tableRow.join(\"\") + \"</tr>\");\n                }\n            }\n\n            return tableRows.join(\"\");\n        },\n\n        render: function(events) {\n            var table = this.content.find(\"table\").empty();\n            var groups = [];\n\n            if (events.length > 0) {\n                var resources = this.groupedResources;\n\n                if (resources.length) {\n                    groups = this._createGroupConfiguration(events, resources, null);\n                    this._renderGroups(groups, table, []);\n                } else {\n                    groups = this._tasks(events);\n                    table.append(this._renderTaskGroups(groups, []));\n                }\n            }\n\n            var items = this._eventsList = flattenTaskGroups(groups);\n            this._angularItems(table, items);\n\n            this.refreshLayout();\n            this.trigger(\"activate\");\n        },\n\n        _angularItems: function(table, items) {\n            this.angular(\"compile\", function(){\n                var data = [], elements = items.map(function(item){\n                    data.push({ dataItem: item });\n                    return table.find(\".k-task[\" + kendo.attr(\"uid\") + \"=\" + item.uid + \"]\");\n                });\n                return { elements: elements, data: data };\n            });\n        },\n\n        _renderGroups: function(groups, table, parentGroups) {\n            for (var idx = 0, length = groups.length; idx < length; idx++) {\n                var parents = parentGroups.splice(0);\n                parents.push(groups[idx]);\n\n                if (groups[idx].groups) {\n                    this._renderGroups(groups[idx].groups, table, parents);\n                } else {\n                    table.append(this._renderTaskGroups(groups[idx].items, parents));\n                }\n            }\n        },\n\n        _createGroupConfiguration: function(events, resources, parent) {\n            var resource = resources[0];\n            var configuration = [];\n            var data = resource.dataSource.view();\n            var isPhoneView = this._isMobilePhoneView();\n\n            for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n                var value = resourceValue(resource, data[dataIndex]);\n\n                var tmp = new kendo.data.Query(events).filter({ field: resource.field, operator: ui.SchedulerView.groupEqFilter(value) }).toArray();\n\n                if (tmp.length) {\n                    var tasks = this._tasks(tmp);\n                    var className = parent ? \"\" : \" k-first\";\n\n                    if (dataIndex === data.length - 1 && (!parent || parent.className.indexOf(\"k-last\") > -1)) {\n                        className += \" k-last\";\n                    }\n\n                    var obj = {\n                        text: kendo.getter(resource.dataTextField)(data[dataIndex]),\n                        value: value,\n                        rowSpan: 0,\n                        className: className\n                    };\n\n                    if (resources.length > 1) {\n                        obj.groups = this._createGroupConfiguration(tmp, resources.slice(1), obj);\n                        if (parent) {\n                            parent.rowSpan += obj.rowSpan;\n                        }\n                    } else {\n                        obj.items = tasks;\n                        var span = rowSpan(obj.items);\n\n                        if (isPhoneView) {\n                            span += obj.items.length;\n                        }\n\n                        obj.rowSpan = span;\n                        if (parent) {\n                            parent.rowSpan += span;\n                        }\n                    }\n                    configuration.push(obj);\n                }\n            }\n\n            return configuration;\n        },\n\n        selectionByElement: function(cell) {\n            var index, event;\n            cell = $(cell);\n            if (cell.hasClass(\"k-scheduler-datecolumn\")) {\n                return;\n            }\n\n            if (this._isMobile()) {\n                var parent = cell.parent();\n                index = parent.parent().children()\n                    .filter(function() {\n                        return $(this).children(\":not(.k-scheduler-datecolumn)\").length;\n                    })\n                    .index(parent);\n            } else {\n                index = cell.parent().index();\n            }\n\n            event = this._eventsList[index];\n\n            return {\n                index: index,\n                start: event.start,\n                end: event.end,\n                isAllDay: event.isAllDay,\n                uid: event.uid\n            };\n        },\n\n        select: function(selection) {\n            this.clearSelection();\n\n            var row = this.table\n                .find(\".k-task\")\n                .eq(selection.index)\n                .closest(\"tr\")\n                .addClass(\"k-state-selected\")\n                .attr(\"aria-selected\", true)[0];\n\n            this.current(row);\n        },\n\n        move: function(selection, key) {\n            var handled = false;\n            var index = selection.index;\n\n            if (key == kendo.keys.UP) {\n                index --;\n                handled = true;\n            } else  if (key == kendo.keys.DOWN) {\n                index ++;\n                handled = true;\n            }\n\n            if (handled) {\n                var event = this._eventsList[index];\n                if (event) {\n                    selection.start = event.start;\n                    selection.end = event.end;\n                    selection.isAllDay = event.isAllDay;\n                    selection.events = [ event.uid ];\n                    selection.index = index;\n                }\n            }\n\n            return handled;\n        },\n\n        moveToEvent: function() {\n            return false;\n        },\n\n        constrainSelection: function(selection) {\n            var event = this._eventsList[0];\n            if (event) {\n                selection.start = event.start;\n                selection.end = event.end;\n                selection.isAllDay = event.isAllDay;\n                selection.events = [ event.uid ];\n                selection.index = 0;\n            }\n        },\n\n        isInRange: function() {\n            return true;\n        },\n\n        destroy: function(){\n            if (this.element) {\n                this.element.off(NS);\n            }\n\n            ui.SchedulerView.fn.destroy.call(this);\n        },\n\n        options: {\n            title: \"Agenda\",\n            name: \"agenda\",\n            editable: true,\n            selectedDateFormat: \"{0:D}-{1:D}\",\n            eventTemplate: \"#:title#\",\n            eventTimeTemplate: \"#if(data.isAllDay) {#\" +\n                            '#=this.options.messages.allDay#' +\n                          \"#} else { #\" +\n                            '#=kendo.format(format, start, end)#' +\n                          \"# } #\",\n            eventDateTemplate: '<strong class=\"k-scheduler-agendaday\">' +\n                            '#=kendo.toString(date, \"dd\")#' +\n                          '</strong>' +\n                          '<em class=\"k-scheduler-agendaweek\">' +\n                              '#=kendo.toString(date,\"dddd\")#' +\n                          '</em>' +\n                          '<span class=\"k-scheduler-agendadate\">' +\n                              '#=kendo.toString(date, \"y\")#' +\n                              '</span>',\n            eventGroupTemplate: '<strong class=\"k-scheduler-adgendagroup\">' +\n                            '#=value#' +\n                          '</strong>',\n            messages: {\n                event: \"Event\",\n                date: \"Date\",\n                time: \"Time\",\n                allDay: \"all day\"\n            }\n        }\n    });\n\n    function rowSpan(tasks) {\n        var result = 0;\n\n        for (var idx = 0, length = tasks.length; idx < length; idx++) {\n            result += tasks[idx].items.length;\n        }\n\n        return result;\n    }\n\n    function resourceValue(resource, item) {\n        if (resource.valuePrimitive) {\n            item = kendo.getter(resource.dataValueField)(item);\n        }\n        return item;\n    }\n\n    function flattenTaskGroups(groups) {\n        var idx = 0,\n            length = groups.length,\n            item,\n            result = [];\n\n        for ( ; idx < length; idx ++) {\n            item = groups[idx];\n            if (item.groups) {\n                item = flattenGroup(item.groups);\n                result = result.concat(item);\n            } else {\n                result = result.concat(flattenGroup(item.items));\n            }\n        }\n\n        return result;\n    }\n\n    function flattenGroup(groups) {\n        var items = [].concat(groups),\n            item = items.shift(),\n            result = [],\n            push = [].push;\n        while (item) {\n            if (item.groups) {\n                push.apply(items, item.groups);\n            } else if (item.items) {\n                push.apply(items, item.items);\n            } else {\n                push.call(result, item);\n            }\n\n            item = items.shift();\n        }\n\n        return result;\n    }\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($){\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        SchedulerView = ui.SchedulerView,\n        NS = \".kendoMonthView\",\n        extend = $.extend,\n        proxy = $.proxy,\n        getDate = kendo.date.getDate,\n        MS_PER_DAY = kendo.date.MS_PER_DAY,\n        NUMBER_OF_ROWS = 6,\n        NUMBER_OF_COLUMNS = 7,\n        DAY_TEMPLATE = kendo.template('<span class=\"k-link k-nav-day\">#:kendo.toString(date, \"dd\")#</span>'),\n        EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\"' +\n                '#if (resources[0]) { #' +\n                    'style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"' +\n                    'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"' +\n                '#} else {#' +\n                    'class=\"k-event\"' +\n                '#}#' +\n                '>' +\n                '<span class=\"k-event-actions\">' +\n                    '# if(data.tail || data.middle) {#' +\n                        '<span class=\"k-icon k-i-arrow-w\"></span>' +\n                    '#}#' +\n                    '# if(data.isException()) {#' +\n                        '<span class=\"k-icon k-i-exception\"></span>' +\n                    '# } else if(data.isRecurring()) {#' +\n                        '<span class=\"k-icon k-i-refresh\"></span>' +\n                    '#}#' +\n                '</span>' +\n                '{0}' +\n                '<span class=\"k-event-actions\">' +\n                    '#if (showDelete) {#' +\n                        '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>' +\n                    '#}#' +\n                    '# if(data.head || data.middle) {#' +\n                        '<span class=\"k-icon k-i-arrow-e\"></span>' +\n                    '#}#' +\n                '</span>' +\n                '# if(resizable && !data.tail && !data.middle) {#' +\n                '<span class=\"k-resize-handle k-resize-w\"></span>' +\n                '#}#' +\n                '# if(resizable && !data.head && !data.middle) {#' +\n                '<span class=\"k-resize-handle k-resize-e\"></span>' +\n                '#}#' +\n                '</div>',\n        EVENT_TEMPLATE = kendo.template('<div title=\"#=title.replace(/\"/g,\"&\\\\#34;\")#\">' +\n                    '<div class=\"k-event-template\">#:title#</div>' +\n                '</div>');\n\n    var MORE_BUTTON_TEMPLATE = kendo.template(\n        '<div style=\"width:#=width#px;left:#=left#px;top:#=top#px\" class=\"k-more-events k-button\"><span>...</span></div>'\n    );\n\n    ui.MonthView = SchedulerView.extend({\n        init: function(element, options) {\n            var that = this;\n\n            SchedulerView.fn.init.call(that, element, options);\n\n            that.title = that.options.title;\n\n            that.name = \"month\";\n\n            that._templates();\n\n            that._editable();\n\n            that._renderLayout(that.options.date);\n\n            that._groups();\n        },\n\n        _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n            if (multiple) {\n                var startSlot = ranges[0].start;\n                var endSlot = ranges[ranges.length - 1].end;\n                var isSameSlot = startSlot.index === endSlot.index;\n                var isSameCollection = startSlot.collectionIndex === endSlot.collectionIndex;\n                var updateDirection;\n\n                if (vertical) {\n                    updateDirection = (isSameSlot && isSameCollection) || isSameCollection;\n                } else {\n                    updateDirection = isSameSlot && isSameCollection;\n                }\n\n                if (updateDirection) {\n                    selection.backward = reverse;\n                }\n            }\n        },\n\n        _changeViewPeriod: function(selection, reverse, vertical) {\n            var pad = vertical ? 7 : 1;\n\n            if (reverse) {\n                pad *= -1;\n            }\n\n            selection.start = kendo.date.addDays(selection.start, pad);\n            selection.end = kendo.date.addDays(selection.end, pad);\n\n            if (!vertical || (vertical && this._isVerticallyGrouped())) {\n                selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n            }\n\n            selection.events = [];\n\n            return true;\n        },\n\n        _continuousSlot: function(selection, ranges, reverse) {\n            var index = selection.backward ? 0 : ranges.length - 1;\n            var group = this.groups[selection.groupIndex];\n\n            return group.continuousSlot(ranges[index].start, reverse);\n        },\n\n        _changeGroupContinuously: function(selection, continuousSlot, multiple, reverse) {\n            if (!multiple) {\n                var groupIndex = selection.groupIndex;\n                var lastGroupIndex = this.groups.length - 1;\n                var vertical = this._isVerticallyGrouped();\n                var group = this.groups[groupIndex];\n\n                if (!continuousSlot && vertical) {\n\n                    continuousSlot = group[reverse ? \"lastSlot\" : \"firstSlot\"]();\n\n                    groupIndex += (reverse ? -1 : 1);\n\n                } else if (continuousSlot && !vertical) {\n                    groupIndex = reverse ? lastGroupIndex : 0;\n                }\n\n                if (groupIndex < 0 || groupIndex > lastGroupIndex) {\n                    groupIndex = reverse ? lastGroupIndex : 0;\n                    continuousSlot = null;\n                }\n\n                selection.groupIndex = groupIndex;\n            }\n\n            return continuousSlot;\n        },\n\n        _normalizeHorizontalSelection: function(selection, ranges, reverse) {\n            var slot;\n\n            if (reverse) {\n                slot = ranges[0].start;\n            } else {\n                slot = ranges[ranges.length - 1].end;\n            }\n\n            return slot;\n        },\n\n        _normalizeVerticalSelection: function(selection, ranges) {\n            var slot;\n\n            if (selection.backward) {\n                slot = ranges[0].start;\n            } else {\n                slot = ranges[ranges.length - 1].end;\n            }\n\n            return slot;\n        },\n\n        _templates: function() {\n            var options = this.options,\n                settings = extend({}, kendo.Template, options.templateSettings);\n\n            this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n            this.dayTemplate = kendo.template(options.dayTemplate, settings);\n            this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n        },\n\n        dateForTitle: function() {\n            return kendo.format(this.options.selectedDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n        },\n\n        nextDate: function() {\n            return kendo.date.nextDay(this._lastDayOfMonth);\n        },\n\n        previousDate: function() {\n            return kendo.date.previousDay(this._firstDayOfMonth);\n        },\n\n        startDate: function() {\n            return this._startDate;\n        },\n\n        endDate: function() {\n            return this._endDate;\n        },\n\n        _renderLayout: function(date) {\n            var that = this;\n\n            this._firstDayOfMonth = kendo.date.firstDayOfMonth(date);\n\n            this._lastDayOfMonth = kendo.date.lastDayOfMonth(date);\n\n            this._startDate = firstVisibleMonthDay(date, this.calendarInfo());\n\n            this.createLayout(this._layout());\n\n            this._content();\n\n            this.refreshLayout();\n\n            this.content.on(\"click\" + NS, \".k-nav-day,.k-more-events\", function(e) {\n               var offset = $(e.currentTarget).offset();\n               var slot = that._slotByPosition(offset.left, offset.top);\n\n               e.preventDefault();\n               that.trigger(\"navigate\", { view: \"day\", date: slot.startDate() });\n            });\n        },\n\n        _editable: function() {\n            if (this.options.editable && !this._isMobilePhoneView()) {\n                if (this._isMobile()) {\n                    this._touchEditable();\n                } else {\n                    this._mouseEditable();\n                }\n\n            }\n        },\n\n        _mouseEditable: function() {\n            var that = this;\n            that.element.on(\"click\" + NS, \".k-scheduler-monthview .k-event a:has(.k-si-close)\", function(e) {\n                that.trigger(\"remove\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                e.preventDefault();\n            });\n\n            if (that.options.editable.create !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-scheduler-monthview .k-scheduler-content td\", function(e) {\n                    var offset = $(e.currentTarget).offset();\n                    var slot = that._slotByPosition(offset.left, offset.top);\n\n                    if (slot) {\n                        var resourceInfo = that._resourceBySlot(slot);\n                        that.trigger(\"add\", { eventInfo: extend({ isAllDay: true, start: slot.startDate(), end: slot.startDate() }, resourceInfo ) });\n                    }\n\n                    e.preventDefault();\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-scheduler-monthview .k-event\", function(e) {\n                    that.trigger(\"edit\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                    e.preventDefault();\n                });\n            }\n        },\n\n        _touchEditable: function() {\n            var that = this;\n\n            if (that.options.editable.create !== false) {\n                that._addUserEvents = new kendo.UserEvents(that.element, {\n                    filter: \".k-scheduler-monthview .k-scheduler-content td\",\n                    tap: function(e) {\n                        var offset = $(e.target).offset();\n                        var slot = that._slotByPosition(offset.left, offset.top);\n\n                        if (slot) {\n                            var resourceInfo = that._resourceBySlot(slot);\n                            that.trigger(\"add\", { eventInfo: extend({ isAllDay: true, start: slot.startDate(), end: slot.startDate() }, resourceInfo ) });\n                        }\n\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that._editUserEvents = new kendo.UserEvents(that.element, {\n                    filter:  \".k-scheduler-monthview .k-event\",\n                    tap: function(e) {\n                        if ($(e.event.target).closest(\"a:has(.k-si-close)\").length === 0) {\n                            that.trigger(\"edit\", { uid: $(e.target).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                            e.preventDefault();\n                        }\n                    }\n                });\n            }\n        },\n\n        selectionByElement: function(cell) {\n            var offset = $(cell).offset();\n            return this._slotByPosition(offset.left, offset.top);\n        },\n\n        _columnCountForLevel: function(level) {\n            var columnLevel = this.columnLevels[level];\n            return columnLevel ? columnLevel.length : 0;\n        },\n\n        _rowCountForLevel: function(level) {\n            var rowLevel = this.rowLevels[level];\n            return rowLevel ? rowLevel.length : 0;\n        },\n\n        _content: function() {\n            var html = '<tbody>';\n            var verticalGroupCount = 1;\n\n            var resources = this.groupedResources;\n\n            if (resources.length) {\n                if (this._isVerticallyGrouped()) {\n                    verticalGroupCount = this._rowCountForLevel(resources.length - 1);\n                }\n            }\n\n            for (var verticalGroupIdx = 0; verticalGroupIdx < verticalGroupCount; verticalGroupIdx++) {\n                html += this._createCalendar(verticalGroupIdx);\n            }\n\n            html += \"</tbody>\";\n\n            this.content.find(\"table\").html(html);\n        },\n\n        _createCalendar: function(verticalGroupIndex) {\n            var start = this.startDate();\n            var cellCount = NUMBER_OF_COLUMNS*NUMBER_OF_ROWS;\n            var cellsPerRow = NUMBER_OF_COLUMNS;\n            var weekStartDates = [start];\n            var html = '';\n            var horizontalGroupCount = 1;\n            var isVerticallyGrouped = this._isVerticallyGrouped();\n\n            var resources = this.groupedResources;\n\n            if (resources.length) {\n                if (!isVerticallyGrouped) {\n                    horizontalGroupCount = this._columnCountForLevel(resources.length - 1);\n                }\n            }\n\n            this._slotIndices = {};\n\n            for (var rowIdx = 0, length = cellCount / cellsPerRow; rowIdx < length; rowIdx++) {\n                html += \"<tr>\";\n\n                weekStartDates.push(start);\n\n                var startIdx = rowIdx*cellsPerRow;\n\n                for (var groupIdx = 0; groupIdx < horizontalGroupCount; groupIdx++) {\n                    html += this._createRow(start, startIdx, cellsPerRow, isVerticallyGrouped ? verticalGroupIndex : groupIdx);\n                }\n\n                start = kendo.date.addDays(start, cellsPerRow);\n\n                html += \"</tr>\";\n            }\n\n            this._weekStartDates = weekStartDates;\n            this._endDate = kendo.date.previousDay(start);\n\n            return html;\n        },\n\n        _createRow: function(startDate, startIdx, cellsPerRow, groupIndex) {\n            var that = this;\n            var min = that._firstDayOfMonth;\n            var max = that._lastDayOfMonth;\n            var content = that.dayTemplate;\n            var classes = \"\";\n            var html = \"\";\n\n            var resources = function() {\n                return that._resourceBySlot({ groupIndex: groupIndex });\n            };\n\n            for (var cellIdx = 0; cellIdx < cellsPerRow; cellIdx++) {\n                classes = \"\";\n\n                if (kendo.date.isToday(startDate)) {\n                    classes += \"k-today\";\n                }\n\n                if (!kendo.date.isInDateRange(startDate, min, max)) {\n                    classes += \" k-other-month\";\n                }\n\n                html += \"<td \";\n\n                if (classes !== \"\") {\n                    html += 'class=\"' + classes + '\"';\n                }\n\n                html += \">\";\n                html += content({ date: startDate, resources: resources });\n                html += \"</td>\";\n\n                that._slotIndices[getDate(startDate).getTime()] = startIdx + cellIdx;\n\n                startDate = kendo.date.nextDay(startDate);\n            }\n\n            return html;\n        },\n\n        _layout: function() {\n            var calendarInfo = this.calendarInfo();\n            var weekDayNames = this._isMobile() ? calendarInfo.days.namesShort : calendarInfo.days.names;\n            var names = shiftArray(weekDayNames, calendarInfo.firstDay);\n            var columns = $.map(names, function(value) { return { text: value }; });\n            var resources = this.groupedResources;\n            var rows;\n\n            if (resources.length) {\n                if (this._isVerticallyGrouped()) {\n                    var inner = []; //add hidden cells in order to sync the content rows\n                    for (var idx = 0; idx < 6; idx++) {\n                        inner.push({ text: \"<div>&nbsp;</div>\", className: \"k-hidden k-slot-cell\" });\n                    }\n\n                    rows = this._createRowsLayout(resources, inner, this.groupHeaderTemplate);\n                } else {\n                    columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate);\n                }\n            }\n\n            return {\n                columns: columns,\n                rows: rows\n            };\n        },\n\n       _createEventElement: function(event) {\n            var options = this.options;\n            var editable = options.editable;\n\n            var isMobile = this._isMobile();\n\n            event.showDelete = editable && editable.destroy !== false && !isMobile;\n            event.resizable = editable && editable.resize !== false && !isMobile;\n            event.ns = kendo.ns;\n            event.resources = this.eventResources(event);\n            event.inverseColor = event.resources && event.resources[0] ? this._shouldInverseResourceColor(event.resources[0]) : false;\n\n            var element = $(this.eventTemplate(event));\n\n            this.angular(\"compile\", function(){\n                return {\n                    elements: element,\n                    data: [ { dataItem: event } ]\n                };\n            });\n\n            return element;\n        },\n       _isInDateSlot: function(event) {\n            var groups = this.groups[0];\n            var slotStart = groups.firstSlot().start;\n            var slotEnd = groups.lastSlot().end - 1;\n\n            var startTime = kendo.date.toUtcTime(event.start);\n            var endTime = kendo.date.toUtcTime(event.end);\n\n            return (isInDateRange(startTime, slotStart, slotEnd) ||\n                isInDateRange(endTime, slotStart, slotEnd) ||\n                isInDateRange(slotStart, startTime, endTime) ||\n                isInDateRange(slotEnd, startTime, endTime)) &&\n                (!isInDateRange(endTime, slotStart, slotStart) || isInDateRange(endTime, startTime, startTime) || event.isAllDay );\n        },\n\n        _slotIndex: function(date) {\n            return this._slotIndices[getDate(date).getTime()];\n        },\n\n        _positionMobileEvent: function(slotRange, element, group) {\n            var startSlot = slotRange.start;\n\n            if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n               startSlot = slotRange.end;\n            }\n\n            var startIndex = slotRange.start.index;\n            var endIndex = startIndex;\n\n            var eventCount = 3;\n            var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n\n            events.push({element: element, start: startIndex, end: endIndex });\n\n            var rows = SchedulerView.createRows(events);\n\n            var slot = slotRange.collection.at(startIndex);\n\n            var container = slot.container;\n\n            if (!container) {\n\n                 container = $(kendo.format('<div class=\"k-events-container\" style=\"top:{0};left:{1};width:{2}\"/>',\n                    startSlot.offsetTop + startSlot.firstChildTop + startSlot.firstChildHeight - 3 + \"px\",\n                    startSlot.offsetLeft + \"px\",\n                    startSlot.offsetWidth + \"px\"\n                ));\n\n                slot.container = container;\n\n                this.content[0].appendChild(container[0]);\n            }\n\n            if (rows.length <= eventCount) {\n                slotRange.addEvent({element: element, start: startIndex, end: endIndex, groupIndex: startSlot.groupIndex });\n\n                group._continuousEvents.push({\n                    element: element,\n                    uid: element.attr(kendo.attr(\"uid\")),\n                    start: slotRange.start,\n                    end: slotRange.end\n                });\n\n                container[0].appendChild(element[0]);\n            }\n        },\n\n        _positionEvent: function(slotRange, element, group) {\n            var eventHeight = this.options.eventHeight;\n            var startSlot = slotRange.start;\n\n            if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n               startSlot = slotRange.end;\n            }\n\n            var startIndex = slotRange.start.index;\n            var endIndex = slotRange.end.index;\n            var eventCount = startSlot.eventCount;\n            var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n            var rightOffset = startIndex !== endIndex ? 5 : 4;\n\n            events.push({element: element, start: startIndex, end: endIndex });\n\n            var rows = SchedulerView.createRows(events);\n\n            for (var idx = 0, length = Math.min(rows.length, eventCount); idx < length; idx++) {\n                var rowEvents = rows[idx].events;\n                var eventTop = startSlot.offsetTop + startSlot.firstChildHeight + idx * eventHeight + 3 * idx + \"px\";\n\n                for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n                    rowEvents[j].element[0].style.top = eventTop;\n                }\n            }\n\n            if (rows.length > eventCount) {\n                for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n                    var collection = slotRange.collection;\n\n                    var slot = collection.at(slotIndex);\n\n                    if (slot.more) {\n                       return;\n                    }\n\n                    slot.more = $(MORE_BUTTON_TEMPLATE({\n                        ns: kendo.ns,\n                        start: slotIndex,\n                        end: slotIndex,\n                        width: slot.clientWidth - 2,\n                        left: slot.offsetLeft + 2,\n                        top: slot.offsetTop + slot.firstChildHeight + eventCount * eventHeight + 3 * eventCount\n                    }));\n\n                    this.content[0].appendChild(slot.more[0]);\n                }\n            } else {\n                slotRange.addEvent({element: element, start: startIndex, end: endIndex, groupIndex: startSlot.groupIndex });\n\n                element[0].style.width = slotRange.innerWidth() - rightOffset + \"px\";\n                element[0].style.left = startSlot.offsetLeft + 2 + \"px\";\n                element[0].style.height = eventHeight + \"px\";\n\n                group._continuousEvents.push({\n                    element: element,\n                    uid: element.attr(kendo.attr(\"uid\")),\n                    start: slotRange.start,\n                    end: slotRange.end\n                });\n\n                this.content[0].appendChild(element[0]);\n            }\n        },\n\n       _slotByPosition: function(x, y) {\n           var offset = this.content.offset();\n\n           x -= offset.left;\n           y -= offset.top;\n           y += this.content[0].scrollTop;\n           x += this.content[0].scrollLeft;\n\n           x = Math.ceil(x);\n           y = Math.ceil(y);\n\n           for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n               var slot = this.groups[groupIndex].daySlotByPosition(x, y);\n\n               if (slot) {\n                   return slot;\n               }\n           }\n\n           return null;\n       },\n\n       _createResizeHint: function(range) {\n            var left = range.startSlot().offsetLeft;\n\n            var top = range.start.offsetTop;\n\n            var width = range.innerWidth();\n\n            var height = range.start.clientHeight - 2;\n\n            var hint = SchedulerView.fn._createResizeHint.call(this, left, top, width, height);\n\n            hint.appendTo(this.content);\n\n            this._resizeHint = this._resizeHint.add(hint);\n       },\n\n        _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n            this._removeResizeHint();\n\n            var group = this.groups[groupIndex];\n\n            var ranges = group.ranges(startTime, endTime, true, event.isAllDay);\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                this._createResizeHint(ranges[rangeIndex]);\n            }\n\n            this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\");\n\n            this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(kendo.toString(kendo.timezone.toLocalDate(startTime), \"M/dd\"));\n\n            this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(kendo.toString(kendo.timezone.toLocalDate(endTime), \"M/dd\"));\n        },\n\n       _updateMoveHint: function(event, groupIndex, distance) {\n            var start = kendo.date.toUtcTime(event.start) + distance;\n\n            var end = start + event.duration();\n\n            var group = this.groups[groupIndex];\n\n            var ranges = group.ranges(start, end, true, event.isAllDay);\n\n            this._removeMoveHint();\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n\n                var startSlot = range.startSlot();\n\n                var endSlot = range.endSlot();\n\n                var hint = this._createEventElement(event.clone({ head: range.head, tail: range.tail }));\n\n                hint.css({\n                    left: startSlot.offsetLeft + 2,\n                    top: startSlot.offsetTop + startSlot.firstChildHeight,\n                    height: this.options.eventHeight,\n                    width: range.innerWidth() - (startSlot.index !== endSlot.index ? 5 : 4)\n                });\n\n                hint.addClass(\"k-event-drag-hint\");\n\n                hint.appendTo(this.content);\n                this._moveHint = this._moveHint.add(hint);\n            }\n       },\n\n       _groups: function() {\n            var groupCount = this._groupCount();\n            var columnCount =  NUMBER_OF_COLUMNS;\n            var rowCount =  NUMBER_OF_ROWS;\n\n            this.groups = [];\n\n            for (var idx = 0; idx < groupCount; idx++) {\n                this._addResourceView(idx);\n            }\n\n            var tableRows = this.content[0].getElementsByTagName(\"tr\");\n\n            for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n                var cellCount = 0;\n                var rowMultiplier = 0;\n\n                if (this._isVerticallyGrouped()) {\n                    rowMultiplier = groupIndex;\n                }\n\n                for (var rowIndex = rowMultiplier*rowCount; rowIndex < (rowMultiplier+1) *rowCount; rowIndex++) {\n                    var group = this.groups[groupIndex];\n                    var collection = group.addDaySlotCollection(kendo.date.addDays(this.startDate(), cellCount), kendo.date.addDays(this.startDate(), cellCount + columnCount));\n\n                    var tableRow = tableRows[rowIndex];\n                    var cells = tableRow.children;\n                    var cellMultiplier = 0;\n\n                    tableRow.setAttribute(\"role\", \"row\");\n\n                    if (!this._isVerticallyGrouped()) {\n                        cellMultiplier = groupIndex;\n                    }\n\n                    for (var cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n                        var cell = cells[cellIndex];\n\n                        var clientHeight = cell.clientHeight;\n\n                        var firstChildHeight = cell.children.length ? cell.children[0].offsetHeight + 3 : 0;\n\n                        var start = kendo.date.toUtcTime(kendo.date.addDays(this.startDate(), cellCount));\n\n                        cellCount ++;\n\n                        var eventCount = Math.floor((clientHeight - firstChildHeight - this.options.moreButtonHeight) / (this.options.eventHeight + 3)) ;// add space for the more button\n\n                        cell.setAttribute(\"role\", \"gridcell\");\n                        cell.setAttribute(\"aria-selected\", false);\n\n                        collection.addDaySlot(cell, start, start + kendo.date.MS_PER_DAY, eventCount);\n                    }\n                }\n            }\n        },\n\n        render: function(events) {\n            this.content.children(\".k-event,.k-more-events,.k-events-container\").remove();\n\n            this._groups();\n\n            events = new kendo.data.Query(events).sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"desc\" }]).toArray();\n\n            var resources = this.groupedResources;\n            if (resources.length) {\n                this._renderGroups(events, resources, 0, 1);\n            } else {\n                this._renderEvents(events, 0);\n            }\n\n            this.refreshLayout();\n            this.trigger(\"activate\");\n       },\n\n       _renderEvents: function(events, groupIndex) {\n            var event;\n            var idx;\n            var length;\n            var isMobilePhoneView = this._isMobilePhoneView();\n\n            for (idx = 0, length = events.length; idx < length; idx++) {\n                event = events[idx];\n\n                if (this._isInDateSlot(event)) {\n                    var group = this.groups[groupIndex];\n\n                    if (!group._continuousEvents) {\n                        group._continuousEvents = [];\n                    }\n\n                    var ranges = group.slotRanges(event, true);\n\n                    var rangeCount = ranges.length;\n\n                    for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n                        var range = ranges[rangeIndex];\n                        var start = event.start;\n                        var end = event.end;\n\n                        if (rangeCount > 1) {\n                            if (rangeIndex === 0) {\n                                end = range.end.endDate();\n                            } else if (rangeIndex == rangeCount - 1) {\n                                start = range.start.startDate();\n                            } else {\n                                start = range.start.startDate();\n                                end = range.end.endDate();\n                            }\n                        }\n\n                        var occurrence = event.clone({ start: start, end: end, head: range.head, tail: range.tail });\n\n                        if (isMobilePhoneView) {\n                            this._positionMobileEvent(range, this._createEventElement(occurrence), group);\n                        } else {\n                            this._positionEvent(range, this._createEventElement(occurrence), group);\n                        }\n                    }\n                }\n            }\n        },\n\n        _renderGroups: function(events, resources, offset, columnLevel) {\n            var resource = resources[0];\n\n            if (resource) {\n                var view = resource.dataSource.view();\n\n                for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n                    var value = this._resourceValue(resource, view[itemIdx]);\n\n                    var tmp = new kendo.data.Query(events).filter({ field: resource.field, operator: SchedulerView.groupEqFilter(value) }).toArray();\n\n                    if (resources.length > 1) {\n                        offset = this._renderGroups(tmp, resources.slice(1), offset++, columnLevel + 1);\n                    } else {\n                        this._renderEvents(tmp, offset++);\n                    }\n                }\n            }\n            return offset;\n        },\n\n        _groupCount: function() {\n            var resources = this.groupedResources;\n\n            if (resources.length) {\n                if (this._isVerticallyGrouped()) {\n                    return this._rowCountForLevel(resources.length - 1);\n                } else {\n                    return this._columnCountForLevel(resources.length) / this._columnOffsetForResource(resources.length);\n                }\n            }\n            return 1;\n        },\n\n        _columnOffsetForResource: function(index) {\n            return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n        },\n\n        destroy: function(){\n            if (this.table) {\n                this.table.removeClass(\"k-scheduler-monthview\");\n            }\n\n            if (this.content) {\n                this.content.off(NS);\n            }\n\n            if (this.element) {\n                this.element.off(NS);\n            }\n\n            SchedulerView.fn.destroy.call(this);\n\n            if (this._isMobile() && !this._isMobilePhoneView() && this.options.editable) {\n                if (this.options.editable.create !== false) {\n                    this._addUserEvents.destroy();\n                }\n\n                if (this.options.editable.update !== false) {\n                    this._editUserEvents.destroy();\n                }\n            }\n        },\n\n        events: [\"remove\", \"add\", \"edit\", \"navigate\"],\n\n        options: {\n            title: \"Month\",\n            name: \"month\",\n            eventHeight: 25,\n            moreButtonHeight: 13,\n            editable: true,\n            selectedDateFormat: \"{0:y}\",\n            groupHeaderTemplate: \"#=text#\",\n            dayTemplate: DAY_TEMPLATE,\n            eventTemplate: EVENT_TEMPLATE\n        }\n    });\n\n\n    function shiftArray(array, idx) {\n        return array.slice(idx).concat(array.slice(0, idx));\n    }\n\n    function firstVisibleMonthDay(date, calendarInfo) {\n        var firstDay = calendarInfo.firstDay,\n            firstVisibleDay = new Date(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n        while (firstVisibleDay.getDay() != firstDay) {\n            kendo.date.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n        }\n\n        return firstVisibleDay;\n    }\n\n    function isInDateRange(value, min, max) {\n        var msMin = min,\n            msMax = max,\n            msValue;\n\n        msValue = value;\n\n        return msValue >= msMin && msValue <= msMax;\n    }\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        timezone = kendo.timezone,\n        Class = kendo.Class,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        DropDownList = ui.DropDownList,\n        kendoDate = kendo.date,\n        setTime = kendoDate.setTime,\n        setDayOfWeek = kendoDate.setDayOfWeek,\n        adjustDST = kendoDate.adjustDST,\n        firstDayOfMonth = kendoDate.firstDayOfMonth,\n        getMilliseconds = kendoDate.getMilliseconds,\n        DAYS_IN_LEAPYEAR = [0,31,60,91,121,152,182,213,244,274,305,335,366],\n        DAYS_IN_YEAR = [0,31,59,90,120,151,181,212,243,273,304,334,365],\n        MONTHS = [31, 28, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31],\n        WEEK_DAYS = {\n            0: \"SU\",\n            1: \"MO\",\n            2: \"TU\",\n            3: \"WE\",\n            4: \"TH\",\n            5: \"FR\",\n            6: \"SA\"\n        },\n        WEEK_DAYS_IDX = {\n            \"SU\": 0,\n            \"MO\": 1,\n            \"TU\": 2,\n            \"WE\": 3,\n            \"TH\": 4,\n            \"FR\": 5,\n            \"SA\": 6\n        },\n        DATE_FORMATS = [\n            \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n            \"yyyy-MM-ddTHH:mm:sszzz\",\n            \"yyyy-MM-ddTHH:mm:ss\",\n            \"yyyy-MM-ddTHH:mm\",\n            \"yyyy-MM-ddTHH\",\n            \"yyyy-MM-dd\",\n            \"yyyyMMddTHHmmssfffzzz\",\n            \"yyyyMMddTHHmmsszzz\",\n            \"yyyyMMddTHHmmss\",\n            \"yyyyMMddTHHmm\",\n            \"yyyyMMddTHH\",\n            \"yyyyMMdd\"\n        ],\n        RULE_NAMES = [\"months\", \"weeks\", \"yearDays\", \"monthDays\", \"weekDays\", \"hours\", \"minutes\", \"seconds\"],\n        RULE_NAMES_LENGTH = RULE_NAMES.length,\n        RECURRENCE_DATE_FORMAT = \"yyyyMMddTHHmmssZ\",\n        limitation = {\n            months: function(date, end, rule) {\n                var monthRules = rule.months,\n                    months = ruleValues(monthRules, date.getMonth() + 1),\n                    changed = false;\n\n                if (months !== null) {\n                    if (months.length) {\n                        date.setMonth(months[0] - 1, 1);\n                    } else {\n                        date.setFullYear(date.getFullYear() + 1, monthRules[0] - 1, 1);\n                    }\n\n                    changed = true;\n                }\n\n                return changed;\n            },\n\n            monthDays: function(date, end, rule) {\n                var monthLength, month, days,\n                    changed = false,\n                    hours = date.getHours(),\n                    normalize = function(monthDay) {\n                        if (monthDay < 0) {\n                            monthDay = monthLength + monthDay;\n                        }\n                        return monthDay;\n                    };\n\n                while (date <= end) {\n                    month = date.getMonth();\n                    monthLength = getMonthLength(date);\n                    days = ruleValues(rule.monthDays, date.getDate(), normalize);\n\n                    if (days === null) {\n                        return changed;\n                    }\n\n                    changed = true;\n\n                    if (days.length) {\n                        date.setMonth(month, days.sort(numberSortPredicate)[0]);\n                        adjustDST(date, hours);\n\n                        if (month === date.getMonth()) {\n                            break;\n                        }\n                    } else {\n                        date.setMonth(month + 1, 1);\n                    }\n                }\n\n                return changed;\n            },\n\n            yearDays: function(date, end, rule) {\n                var year, yearDays,\n                    changed = false,\n                    hours = date.getHours(),\n                    normalize = function(yearDay) {\n                        if (yearDay < 0) {\n                            yearDay = year + yearDay;\n                        }\n                        return yearDay;\n                    };\n\n                while (date < end) {\n                    year = leapYear(date) ? 366 : 365;\n                    yearDays = ruleValues(rule.yearDays, dayInYear(date), normalize);\n\n                    if (yearDays === null) {\n                        return changed;\n                    }\n\n                    changed = true;\n                    year = date.getFullYear();\n\n                    if (yearDays.length) {\n                        date.setFullYear(year, 0, yearDays.sort(numberSortPredicate)[0]);\n                        adjustDST(date, hours);\n                        break;\n                    } else {\n                        date.setFullYear(year + 1, 0, 1);\n                    }\n                }\n\n                return changed;\n            },\n\n            weeks: function(date, end, rule) {\n                var weekStart = rule.weekStart,\n                    year, weeks, day,\n                    changed = false,\n                    hours = date.getHours(),\n                    normalize = function(week) {\n                        if (week < 0) {\n                            week = 53 + week;\n                        }\n                        return week;\n                    };\n\n                while (date < end) {\n                    weeks = ruleValues(rule.weeks, weekInYear(date, weekStart), normalize);\n\n                    if (weeks === null) {\n                        return changed;\n                    }\n\n                    changed = true;\n                    year = date.getFullYear();\n\n                    if (weeks.length) {\n                        day = (weeks.sort(numberSortPredicate)[0] * 7) - 1;\n\n                        date.setFullYear(year, 0, day);\n                        setDayOfWeek(date, weekStart, -1);\n\n                        adjustDST(date, hours);\n                        break;\n                    } else {\n                        date.setFullYear(year + 1, 0, 1);\n                    }\n                }\n\n                return changed;\n            },\n\n            weekDays: function(date, end, rule) {\n                var weekDays = rule.weekDays;\n                var weekStart = rule.weekStart;\n                var weekDayRules = ruleWeekValues(weekDays, date, weekStart);\n                var hours = date.getHours();\n                var weekDayRule, day;\n\n                if (weekDayRules === null) {\n                    return false;\n                }\n\n                weekDayRule = weekDayRules[0];\n                if (!weekDayRule) {\n                    weekDayRule = weekDays[0];\n                    setDayOfWeek(date, weekStart);\n                }\n\n                day = weekDayRule.day;\n\n                if (weekDayRule.offset) {\n                    while (date <= end && !isInWeek(date, weekDayRule, weekStart)) {\n                        if (weekInMonth(date, weekStart) === numberOfWeeks(date, weekStart)) {\n                            date.setMonth(date.getMonth() + 1, 1);\n                            adjustDST(date, hours);\n                        } else {\n                            date.setDate(date.getDate() + 7);\n                            adjustDST(date, hours);\n\n                            setDayOfWeek(date, weekStart, -1);\n                        }\n                    }\n                }\n\n                if (date.getDay() !== day) {\n                    setDayOfWeek(date, day);\n                }\n\n                return true;\n            },\n\n            hours: function(date, end, rule) {\n                var hourRules = rule.hours,\n                    startTime = rule._startTime,\n                    startHours = startTime.getHours(),\n                    hours = ruleValues(hourRules, startHours),\n                    changed = false;\n\n                if (hours !== null) {\n                    changed = true;\n\n                    date.setHours(startHours);\n                    adjustDST(date, startHours);\n\n                    if (hours.length) {\n                        hours = hours[0];\n                        date.setHours(hours);\n                    } else {\n                        hours = date.getHours();\n                        date.setDate(date.getDate() + 1);\n                        adjustDST(date, hours);\n\n                        hours = hourRules[0];\n                        date.setHours(hours);\n                        adjustDST(date, hours);\n                    }\n\n                    if (rule.minutes) {\n                        date.setMinutes(0);\n                    }\n\n                    startTime.setHours(hours, date.getMinutes());\n                }\n\n                return changed;\n            },\n\n            minutes: function(date, end, rule) {\n                var minuteRules = rule.minutes,\n                    currentMinutes = date.getMinutes(),\n                    minutes = ruleValues(minuteRules, currentMinutes),\n                    hours = rule._startTime.getHours(),\n                    changed = false;\n\n                if (minutes !== null) {\n                    changed = true;\n\n                    if (minutes.length) {\n                        minutes = minutes[0];\n                    } else {\n                        hours += 1;\n                        minutes = minuteRules[0];\n                    }\n\n                    if (rule.seconds) {\n                        date.setSeconds(0);\n                    }\n\n                    date.setHours(hours, minutes);\n\n                    hours = hours % 24;\n                    adjustDST(date, hours);\n                    rule._startTime.setHours(hours, minutes, date.getSeconds());\n                }\n\n                return changed;\n            },\n\n            seconds: function(date, end, rule) {\n                var secondRules = rule.seconds,\n                    hours = rule._startTime.getHours(),\n                    seconds = ruleValues(secondRules, date.getSeconds()),\n                    minutes = date.getMinutes(),\n                    changed = false;\n\n                if (seconds !== null) {\n                    changed = true;\n\n                    if (seconds.length) {\n                        date.setSeconds(seconds[0]);\n                    } else {\n                        minutes += 1;\n                        date.setMinutes(minutes, secondRules[0]);\n\n                        if (minutes > 59) {\n                            minutes = minutes % 60;\n                            hours = (hours + 1) % 24;\n                        }\n                    }\n\n                    rule._startTime.setHours(hours, minutes, date.getSeconds());\n                }\n\n                return changed;\n            }\n        },\n        BaseFrequency = Class.extend({\n            next: function(date, rule) {\n                var startTime = rule._startTime,\n                    day = startTime.getDate(),\n                    minutes, seconds;\n\n                if (rule.seconds) {\n                    seconds = date.getSeconds() + 1;\n\n                    date.setSeconds(seconds);\n                    startTime.setSeconds(seconds);\n                    startTime.setDate(day);\n\n                } else if (rule.minutes) {\n                    minutes = date.getMinutes() + 1;\n\n                    date.setMinutes(minutes);\n                    startTime.setMinutes(minutes);\n                    startTime.setDate(day);\n                } else {\n                    return false;\n                }\n\n                return true;\n            },\n\n            normalize: function(options) {\n                var rule = options.rule;\n\n                if (options.idx === 4 && rule.hours) {\n                    rule._startTime.setHours(0);\n                    this._hour(options.date, rule);\n                }\n            },\n\n            limit: function(date, end, rule) {\n                var interval = rule.interval,\n                    ruleName, firstRule,\n                    modified,\n                    idx, day;\n\n                while (date <= end) {\n                    modified = firstRule = undefined;\n                    day = date.getDate();\n\n                    for (idx = 0; idx < RULE_NAMES_LENGTH; idx++) {\n                        ruleName = RULE_NAMES[idx];\n\n                        if (rule[ruleName]) {\n                            modified = limitation[ruleName](date, end, rule);\n                            if (firstRule !== undefined && modified) {\n                                break;\n                            } else {\n                                firstRule = modified;\n                            }\n                        }\n\n                        if (modified) {\n                            this.normalize({ date: date, rule: rule, day: day, idx: idx });\n                        }\n                    }\n\n                    if ((interval === 1 || !this.interval(rule, date)) && idx === RULE_NAMES_LENGTH) {\n                        break;\n                    }\n                }\n            },\n\n            interval: function (rule, current) {\n                var start = new Date(rule._startPeriod);\n                var date = new Date(current);\n                var hours = current.getHours();\n                var weekStart = rule.weekStart;\n                var interval = rule.interval;\n                var frequency = rule.freq;\n                var modified = false;\n                var excess = 0;\n                var month = 0;\n                var day = 1;\n                var diff;\n\n                var startTimeHours;\n\n                if (frequency === \"hourly\") {\n                    diff = date.getTimezoneOffset() - start.getTimezoneOffset();\n                    startTimeHours = rule._startTime.getHours();\n\n                    date = date.getTime();\n                    if (hours !== startTimeHours) {\n                        date += (startTimeHours - hours) * kendoDate.MS_PER_HOUR;\n                    }\n                    date -= start;\n\n                    if (diff) {\n                        date -= diff * kendoDate.MS_PER_MINUTE;\n                    }\n\n                    diff = Math.floor(date / kendoDate.MS_PER_HOUR);\n                    excess = intervalExcess(diff, interval);\n\n                    if (excess !== 0) {\n                        this._hour(current, rule, excess);\n                        modified = true;\n                    }\n                } else if (frequency === \"daily\") {\n                    kendoDate.setTime(date, -start);\n\n                    diff = Math.floor(date / kendoDate.MS_PER_DAY);\n                    excess = intervalExcess(diff, interval);\n\n                    if (excess !== 0) {\n                        this._date(current, rule, excess);\n                        modified = true;\n                    }\n\n                } else if (frequency === \"weekly\") {\n                    diff = (current.getFullYear() - start.getFullYear()) * 52;\n\n                    excess = weekInYear(current, weekStart) - weekInYear(start, weekStart) + diff;\n                    excess = intervalExcess(excess, interval);\n\n                    if (excess !== 0) {\n                        kendoDate.setDayOfWeek(current, rule.weekStart, -1);\n\n                        current.setDate(current.getDate() + (excess * 7));\n                        adjustDST(current, hours);\n\n                        modified = true;\n                    }\n                } else if (frequency === \"monthly\") {\n                    diff = current.getFullYear() - start.getFullYear();\n                    diff = current.getMonth() - start.getMonth() + (diff * 12);\n\n                    excess = intervalExcess(diff, interval);\n\n                    if (excess !== 0) {\n                        day = rule._hasRuleValue ? 1 : current.getDate();\n\n                        current.setFullYear(current.getFullYear(), current.getMonth() + excess, day);\n                        adjustDST(current, hours);\n\n                        modified = true;\n                    }\n                } else if (frequency === \"yearly\") {\n                    diff = current.getFullYear() - start.getFullYear();\n                    excess = intervalExcess(diff, interval);\n\n                    if (!rule.months) {\n                        month = current.getMonth();\n                    }\n\n                    if (!rule.yearDays && !rule.monthDays && !rule.weekDays) {\n                        day = current.getDate();\n                    }\n\n                    if (excess !== 0) {\n                        current.setFullYear(current.getFullYear() + excess, month, day);\n                        adjustDST(current, hours);\n\n                        modified = true;\n                    }\n                }\n\n                return modified;\n            },\n\n            _hour: function(date, rule, interval) {\n                var startTime = rule._startTime,\n                    hours = startTime.getHours();\n\n                if (interval) {\n                    hours += interval;\n                }\n\n                date.setHours(hours);\n\n                hours = hours % 24;\n                startTime.setHours(hours);\n                adjustDST(date, hours);\n            },\n\n            _date: function(date, rule, interval) {\n                var hours = date.getHours();\n\n                date.setDate(date.getDate() + interval);\n                if (!adjustDST(date, hours)) {\n                    this._hour(date, rule);\n                }\n            }\n        }),\n        HourlyFrequency = BaseFrequency.extend({\n            next: function(date, rule) {\n                if (!BaseFrequency.fn.next(date, rule)) {\n                    this._hour(date, rule, 1);\n                }\n            },\n\n            normalize: function(options) {\n                var rule = options.rule;\n\n                if (options.idx === 4) {\n                    rule._startTime.setHours(0);\n                    this._hour(options.date, rule);\n                }\n            }\n        }),\n        DailyFrequency = BaseFrequency.extend({\n            next: function(date, rule) {\n                if (!BaseFrequency.fn.next(date, rule)) {\n                    this[rule.hours ? \"_hour\" : \"_date\"](date, rule, 1);\n                }\n            }\n        }),\n        WeeklyFrequency = DailyFrequency.extend({\n            setup: function(rule, eventStartDate) {\n                if (!rule.weekDays) {\n                    rule.weekDays = [{\n                        day: eventStartDate.getDay(),\n                        offset: 0\n                    }];\n                }\n            }\n        }),\n        MonthlyFrequency = BaseFrequency.extend({\n            next: function(date, rule) {\n                var day, hours;\n                if (!BaseFrequency.fn.next(date, rule)) {\n                    if (rule.hours) {\n                        this._hour(date, rule, 1);\n                    } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n                        this._date(date, rule, 1);\n                    } else {\n                        day = date.getDate();\n                        hours = date.getHours();\n\n                        date.setMonth(date.getMonth() + 1);\n                        adjustDST(date, hours);\n\n                        while(date.getDate() !== day) {\n                            date.setDate(day);\n                            adjustDST(date, hours);\n                        }\n\n                        this._hour(date, rule);\n                    }\n                }\n            },\n            normalize: function(options) {\n                var rule = options.rule,\n                    date = options.date,\n                    hours = date.getHours();\n\n                if (options.idx === 0 && !rule.monthDays && !rule.weekDays) {\n                    date.setDate(options.day);\n                    adjustDST(date, hours);\n                } else {\n                    BaseFrequency.fn.normalize(options);\n                }\n            },\n            setup: function(rule, eventStartDate, date) {\n                if (!rule.monthDays && !rule.weekDays) {\n                    date.setDate(eventStartDate.getDate());\n                }\n            }\n        }),\n        YearlyFrequency = MonthlyFrequency.extend({\n            next: function(date, rule) {\n                var day,\n                    hours = date.getHours();\n\n                if (!BaseFrequency.fn.next(date, rule)) {\n                    if (rule.hours) {\n                        this._hour(date, rule, 1);\n                    } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n                        this._date(date, rule, 1);\n                    } else if (rule.months) {\n                        day = date.getDate();\n\n                        date.setMonth(date.getMonth() + 1);\n                        adjustDST(date, hours);\n\n                        while(date.getDate() !== day) {\n                            date.setDate(day);\n                            adjustDST(date, hours);\n                        }\n\n                        this._hour(date, rule);\n                    } else {\n                        date.setFullYear(date.getFullYear() + 1);\n                        adjustDST(date, hours);\n\n                        this._hour(date, rule);\n                    }\n                }\n            },\n            setup: function() {}\n        }),\n        frequencies = {\n            \"hourly\" : new HourlyFrequency(),\n            \"daily\" : new DailyFrequency(),\n            \"weekly\" : new WeeklyFrequency(),\n            \"monthly\" : new MonthlyFrequency(),\n            \"yearly\" : new YearlyFrequency()\n        },\n        CLICK = \"click\";\n\n    function intervalExcess(diff, interval) {\n        var excess;\n        if (diff !== 0 && diff < interval) {\n            excess = interval - diff;\n        } else {\n            excess = diff % interval;\n            if (excess) {\n                excess = interval - excess;\n            }\n        }\n\n        return excess;\n    }\n\n    function dayInYear(date) {\n        var month = date.getMonth();\n        var days = leapYear(date) ? DAYS_IN_LEAPYEAR[month] : DAYS_IN_YEAR[month];\n\n        return days + date.getDate();\n    }\n\n    function weekInYear(date, weekStart){\n        var year, days;\n\n        date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n        adjustDST(date, 0);\n\n        year = date.getFullYear();\n\n        if (weekStart !== undefined) {\n            setDayOfWeek(date, weekStart, -1);\n            date.setDate(date.getDate() + 4);\n        } else {\n            date.setDate(date.getDate() + (4 - (date.getDay() || 7)));\n        }\n\n        adjustDST(date, 0);\n        days = Math.floor((date.getTime() - new Date(year, 0, 1, -6)) / 86400000);\n\n        return 1 + Math.floor(days / 7);\n    }\n\n    function weekInMonth(date, weekStart) {\n        var firstWeekDay = firstDayOfMonth(date).getDay();\n        var firstWeekLength = 7 - (firstWeekDay + 7 - (weekStart || 7)) || 7;\n\n        if (firstWeekLength < 0) {\n            firstWeekLength += 7;\n        }\n\n        return Math.ceil((date.getDate() - firstWeekLength) / 7) + 1;\n    }\n\n    function normalizeDayIndex(weekDay, weekStart) {\n        return weekDay + (weekDay < weekStart ? 7 : 0);\n    }\n\n    function normalizeOffset(date, rule, weekStart) {\n        var offset = rule.offset;\n\n        if (!offset) {\n            return weekInMonth(date, weekStart);\n        }\n\n        var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n        var weeksInMonth = weekInMonth(lastDate, weekStart);\n\n        var day = normalizeDayIndex(rule.day, weekStart);\n\n        var skipFirst = day < normalizeDayIndex(new Date(date.getFullYear(), date.getMonth(), 1).getDay(), weekStart);\n        var skipLast = day > normalizeDayIndex(lastDate.getDay(), weekStart);\n\n        if (offset < 0) {\n            offset = weeksInMonth + (offset + 1 - (skipLast ? 1 : 0));\n        } else if (skipFirst) {\n            offset += 1;\n        }\n\n        weeksInMonth -= (skipLast ? 1 : 0);\n\n        if (offset < (skipFirst ? 1 : 0) || offset > weeksInMonth) {\n            return null;\n        }\n\n        return offset;\n    }\n\n    function numberOfWeeks(date, weekStart) {\n        return weekInMonth(new Date(date.getFullYear(), date.getMonth() + 1, 0), weekStart);\n    }\n\n    function isInWeek(date, rule, weekStart) {\n        return weekInMonth(date, weekStart) === normalizeOffset(date, rule, weekStart);\n    }\n\n    function ruleWeekValues(weekDays, date, weekStart) {\n        var currentDay = normalizeDayIndex(date.getDay(), weekStart);\n        var length = weekDays.length;\n        var ruleWeekOffset;\n        var weekDay, day;\n        var weekNumber;\n        var result = [];\n        var idx = 0;\n\n        for (;idx < length; idx++) {\n            weekDay = weekDays[idx];\n\n            weekNumber = weekInMonth(date, weekStart);\n            ruleWeekOffset = normalizeOffset(date, weekDay, weekStart);\n\n            if (ruleWeekOffset === null) {\n                continue;\n            }\n\n            if (weekNumber < ruleWeekOffset) {\n                result.push(weekDay);\n            } else if (weekNumber === ruleWeekOffset) {\n                day = normalizeDayIndex(weekDay.day, weekStart);\n\n                if (currentDay < day) {\n                    result.push(weekDay);\n                } else if (currentDay === day) {\n                    return null;\n                }\n            }\n        }\n\n        return result;\n    }\n\n    function ruleValues(rules, value, normalize) {\n        var idx = 0,\n            length = rules.length,\n            availableRules = [],\n            ruleValue;\n\n        for (; idx < length; idx++) {\n            ruleValue = rules[idx];\n\n            if (normalize) {\n                ruleValue = normalize(ruleValue);\n            }\n\n            if (value === ruleValue) {\n                return null;\n            }  else if (value < ruleValue) {\n                availableRules.push(ruleValue);\n            }\n        }\n\n        return availableRules;\n    }\n\n    function parseArray(list, range) {\n        var idx = 0,\n            length = list.length,\n            value;\n\n        for (; idx < length; idx++) {\n            value = parseInt(list[idx], 10);\n            if (isNaN(value) || value < range.start || value > range.end || (value === 0 && range.start < 0)) {\n                return null;\n            }\n\n            list[idx] = value;\n        }\n\n        return list.sort(numberSortPredicate);\n    }\n\n    function parseWeekDayList(list) {\n        var idx = 0, length = list.length,\n            value, valueLength, day;\n\n        for (; idx < length; idx++) {\n            value = list[idx];\n            valueLength = value.length;\n            day = value.substring(valueLength - 2).toUpperCase();\n\n            day = WEEK_DAYS_IDX[day];\n            if (day === undefined) {\n                return null;\n            }\n\n            list[idx] = {\n                offset: parseInt(value.substring(0, valueLength - 2), 10) || 0,\n                day: day\n            };\n        }\n        return list;\n    }\n\n    function serializeWeekDayList(list) {\n        var idx = 0, length = list.length,\n            value, valueString, result = [];\n\n        for (; idx < length; idx++) {\n            value = list[idx];\n            if (typeof value === \"string\") {\n                valueString = value;\n            } else {\n                valueString = \"\" + WEEK_DAYS[value.day];\n\n                if (value.offset) {\n                    valueString = value.offset + valueString;\n                }\n            }\n\n            result.push(valueString);\n        }\n        return result.toString();\n    }\n\n    function getMonthLength(date) {\n        var month = date.getMonth();\n\n        if (month === 1) {\n            if (new Date(date.getFullYear(), 1, 29).getMonth() === 1) {\n                return 29;\n            }\n            return 28;\n        }\n        return MONTHS[month];\n    }\n\n    function leapYear(year) {\n        year = year.getFullYear();\n        return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n    }\n\n    function numberSortPredicate(a, b) {\n        return a - b;\n    }\n\n    function parseExceptions(exceptions, zone) {\n        var idx = 0, length, date,\n            dates = [];\n\n        if (exceptions) {\n            exceptions = exceptions.split(\";\");\n            length = exceptions.length;\n\n            for (; idx < length; idx++) {\n                date = parseUTCDate(exceptions[idx], zone);\n\n                if (date) {\n                    dates.push(date);\n                }\n            }\n        }\n\n        return dates;\n    }\n\n    function isException(exceptions, date, zone) {\n        var dates = $.isArray(exceptions) ? exceptions : parseExceptions(exceptions, zone),\n            dateTime = date.getTime() - date.getMilliseconds(),\n            idx = 0, length = dates.length;\n\n        for (; idx < length; idx++) {\n            if (dates[idx].getTime() === dateTime) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    function toExceptionString(dates, zone) {\n        var idx = 0;\n        var length;\n        var date;\n        var result = [].concat(dates);\n\n        for (length = result.length; idx < length; idx++) {\n            date = result[idx];\n            date = kendo.timezone.convert(date, zone || date.getTimezoneOffset(), \"Etc/UTC\");\n            result[idx] = kendo.toString(date, RECURRENCE_DATE_FORMAT);\n        }\n\n        return result.join(\";\") + \";\";\n    }\n\n    function startPeriodByFreq(start, rule) {\n        var date = new Date(start);\n\n        switch (rule.freq) {\n            case \"yearly\":\n                date.setFullYear(date.getFullYear(), 0, 1);\n                break;\n\n            case \"monthly\":\n                date.setFullYear(date.getFullYear(), date.getMonth(), 1);\n                break;\n\n            case \"weekly\":\n                setDayOfWeek(date, rule.weekStart, -1);\n                break;\n\n            default:\n                break;\n        }\n\n        if (rule.hours) {\n            date.setHours(0);\n        }\n\n        if (rule.minutes) {\n            date.setMinutes(0);\n        }\n\n        if (rule.seconds) {\n            date.setSeconds(0);\n        }\n\n        return date;\n    }\n\n    function endPeriodByFreq(start, rule) {\n        var date = new Date(start);\n\n        switch (rule.freq) {\n            case \"yearly\":\n                date.setFullYear(date.getFullYear(), 11, 31);\n                break;\n\n            case \"monthly\":\n                date.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);\n                break;\n\n            case \"weekly\":\n                setDayOfWeek(date, rule.weekStart, -1);\n                date.setDate(date.getDate() + 6);\n                break;\n\n            default:\n                break;\n        }\n\n        if (rule.hours) {\n            date.setHours(23);\n        }\n\n        if (rule.minutes) {\n            date.setMinutes(59);\n        }\n\n        if (rule.seconds) {\n            date.setSeconds(59);\n        }\n\n        return date;\n    }\n\n    function normalizeEventsByPosition(events, start, rule) {\n        var periodEvents = events.slice(rule._startIdx);\n        var periodEventsLength = periodEvents.length;\n        var positions = rule.positions;\n        var list = [];\n        var position;\n        var event;\n\n        for (var idx = 0, length = positions.length; idx < length; idx++) {\n            position = positions[idx];\n\n            if (position < 0) {\n                position = periodEventsLength + position;\n            } else {\n                position -= 1; //convert to zero based index\n            }\n\n            event = periodEvents[position];\n\n            if (event && event.start >= start) {\n                list.push(event);\n            }\n        }\n\n        events = events.slice(0, rule._startIdx).concat(list);\n\n        rule._startIdx = events.length;\n\n        return events;\n    }\n\n    function expand(event, start, end, zone) {\n        var rule = parseRule(event.recurrenceRule, zone),\n            startTime, endTime, endDate,\n            hours, minutes, seconds,\n            durationMS, startPeriod, inPeriod,\n            ruleStart, ruleEnd,\n            useEventStart, freqName,\n            exceptionDates,\n            eventStartTime,\n            eventStartMS,\n            eventStart,\n            count, freq,\n            positions,\n            current,\n            events = [];\n\n        if (!rule) {\n            return [event];\n        }\n\n        positions = rule.positions;\n        current = positions ? 0 : 1;\n\n        ruleStart = rule.start;\n        ruleEnd = rule.end;\n\n        if (ruleStart || ruleEnd) {\n            event = event.clone({\n                start: ruleStart ? new Date(ruleStart.value[0]) : undefined,\n                end: ruleEnd ? new Date(ruleEnd.value[0]) : undefined\n            });\n        }\n\n        eventStart = event.start;\n        eventStartMS = eventStart.getTime();\n        eventStartTime = getMilliseconds(eventStart);\n\n        exceptionDates = parseExceptions(event.recurrenceException, zone);\n\n        if (!exceptionDates[0] && rule.exdates) {\n            exceptionDates = rule.exdates.value;\n            event.set(\"recurrenceException\", toExceptionString(exceptionDates, zone));\n        }\n\n        startPeriod = start = new Date(start);\n        end = new Date(end);\n\n        freqName = rule.freq;\n        freq = frequencies[freqName];\n        count = rule.count;\n\n        if (rule.until && rule.until < end) {\n            end = new Date(rule.until);\n        }\n\n        useEventStart = freqName === \"yearly\" || freqName === \"monthly\" || freqName === \"weekly\";\n\n        if (start < eventStartMS || count || rule.interval > 1 || useEventStart) {\n            start = new Date(eventStartMS);\n        } else {\n            hours = start.getHours();\n            minutes = start.getMinutes();\n            seconds = start.getSeconds();\n\n            if (!rule.hours) {\n                hours = eventStart.getHours();\n            }\n\n            if (!rule.minutes) {\n                minutes = eventStart.getMinutes();\n            }\n\n            if (!rule.seconds) {\n                seconds = eventStart.getSeconds();\n            }\n\n            start.setHours(hours, minutes, seconds, eventStart.getMilliseconds());\n        }\n\n        rule._startPeriod = new Date(start);\n\n        if (positions) {\n            start = startPeriodByFreq(start, rule);\n            end = endPeriodByFreq(end, rule);\n\n            var diff = getMilliseconds(end) - getMilliseconds(start);\n            if (diff < 0) {\n                hours = start.getHours();\n                end.setHours(hours, start.getMinutes(), start.getSeconds(), start.getMilliseconds());\n                kendoDate.adjustDST(end, hours);\n            }\n\n            rule._startPeriod = new Date(start);\n            rule._endPeriod = endPeriodByFreq(start, rule);\n            rule._startIdx = 0;\n        }\n\n        durationMS = event.duration();\n        rule._startTime = startTime = kendoDate.toInvariantTime(start);\n\n        if (freq.setup) {\n            freq.setup(rule, eventStart, start);\n        }\n\n        freq.limit(start, end, rule);\n\n        while (start <= end) {\n            endDate = new Date(start);\n            setTime(endDate, durationMS);\n\n            inPeriod = start >= startPeriod || endDate > startPeriod;\n\n            if (inPeriod && !isException(exceptionDates, start, zone) || positions) {\n                startTime = kendoDate.toUtcTime(kendoDate.getDate(start)) + getMilliseconds(rule._startTime);\n                endTime = startTime + durationMS;\n\n                if (eventStartMS !== start.getTime() || eventStartTime !== getMilliseconds(rule._startTime)) {\n                    events.push(event.toOccurrence({\n                        start: new Date(start),\n                        end: endDate,\n                        _startTime: startTime,\n                        _endTime: endTime\n                    }));\n                } else {\n                    event._startTime = startTime;\n                    event._endTime = endTime;\n                    events.push(event);\n                }\n            }\n\n            if (positions) {\n                freq.next(start, rule);\n                freq.limit(start, end, rule);\n\n                if (start > rule._endPeriod) {\n                    events = normalizeEventsByPosition(events, eventStart, rule);\n\n                    rule._endPeriod = endPeriodByFreq(start, rule);\n\n                    current = events.length;\n                }\n\n                if (count && count === current) {\n                    break;\n                }\n\n            } else {\n                if (count && count === current) {\n                    break;\n                }\n\n                current++;\n                freq.next(start, rule);\n                freq.limit(start, end, rule);\n            }\n        }\n\n        return events;\n    }\n\n    function parseUTCDate(value, zone) {\n        value = kendo.parseDate(value, DATE_FORMATS); //Parse UTC to local time\n\n        if (value && zone) {\n            value = timezone.convert(value, value.getTimezoneOffset(), zone);\n        }\n\n        return value;\n    }\n\n    function parseDateRule(dateRule, zone) {\n        var pairs = dateRule.split(\";\");\n        var pair;\n        var property;\n        var value;\n        var tzid;\n        var valueIdx, valueLength;\n\n        for (var idx = 0, length = pairs.length; idx < length; idx++) {\n            pair = pairs[idx].split(\":\");\n            property = pair[0];\n            value = pair[1];\n\n            if (property.indexOf(\"TZID\") !== -1) {\n                tzid = property.substring(property.indexOf(\"TZID\")).split(\"=\")[1];\n            }\n\n            if (value) {\n                value = value.split(\",\");\n\n                for (valueIdx = 0, valueLength = value.length; valueIdx < valueLength; valueIdx++) {\n                    value[valueIdx] = parseUTCDate(value[valueIdx], tzid || zone);\n                }\n            }\n        }\n\n        if (value) {\n            return {\n                value: value,\n                tzid: tzid\n            };\n        }\n    }\n\n    function parseRule(recur, zone) {\n        var instance = {};\n        var splits, value;\n        var idx = 0, length;\n        var ruleValue = false;\n        var rule, part, parts;\n        var property, weekStart, weekDays;\n        var predicate = function(a, b) {\n            var day1 = a.day,\n                day2 = b.day;\n\n            if (day1 < weekStart) {\n               day1 += 7;\n            }\n\n            if (day2 < weekStart) {\n                day2 += 7;\n            }\n\n            return day1 - day2;\n        };\n\n        if (!recur) {\n            return null;\n        }\n\n        parts = recur.split(\"\\n\");\n\n        if (!parts[1] && (recur.indexOf(\"DTSTART\") !== -1 || recur.indexOf(\"DTEND\") !== -1 || recur.indexOf(\"EXDATE\") !== -1)) {\n            parts = recur.split(\" \");\n        }\n\n        for (idx = 0, length = parts.length; idx < length; idx++) {\n            part = $.trim(parts[idx]);\n\n            if (part.indexOf(\"DTSTART\") !== -1) {\n                instance.start = parseDateRule(part, zone);\n            } else if (part.indexOf(\"DTEND\") !== -1) {\n                instance.end = parseDateRule(part, zone);\n            } else if (part.indexOf(\"EXDATE\") !== -1) {\n                instance.exdates = parseDateRule(part, zone);\n            } else if (part.indexOf(\"RRULE\") !== -1) {\n                rule = part.substring(6);\n            } else if ($.trim(part)) {\n                rule = part;\n            }\n        }\n\n        rule = rule.split(\";\");\n\n        for (idx = 0, length = rule.length; idx < length; idx++) {\n            property = rule[idx];\n            splits = property.split(\"=\");\n            value = $.trim(splits[1]).split(\",\");\n\n            switch ($.trim(splits[0]).toUpperCase()) {\n                case \"FREQ\":\n                    instance.freq = value[0].toLowerCase();\n                    break;\n                case \"UNTIL\":\n                    instance.until = parseUTCDate(value[0], zone);\n                    break;\n                case \"COUNT\":\n                    instance.count = parseInt(value[0], 10);\n                    break;\n                case \"INTERVAL\":\n                    instance.interval = parseInt(value[0], 10);\n                    break;\n                case \"BYSECOND\":\n                    instance.seconds = parseArray(value, { start: 0, end: 60 });\n                    ruleValue = true;\n                    break;\n                case \"BYMINUTE\":\n                    instance.minutes = parseArray(value, { start: 0, end: 59 });\n                    ruleValue = true;\n                    break;\n                case \"BYHOUR\":\n                    instance.hours = parseArray(value, { start: 0, end: 23 });\n                    ruleValue = true;\n                    break;\n                case \"BYMONTHDAY\":\n                    instance.monthDays = parseArray(value, { start: -31, end: 31 });\n                    ruleValue = true;\n                    break;\n                case \"BYYEARDAY\":\n                    instance.yearDays = parseArray(value, { start: -366, end: 366 });\n                    ruleValue = true;\n                    break;\n                case \"BYMONTH\":\n                    instance.months = parseArray(value, { start: 1, end: 12 });\n                    ruleValue = true;\n                    break;\n                case \"BYDAY\":\n                    instance.weekDays = weekDays = parseWeekDayList(value);\n                    ruleValue = true;\n                    break;\n                case \"BYWEEKNO\":\n                    instance.weeks = parseArray(value, { start: -53, end: 53 });\n                    ruleValue = true;\n                    break;\n                case \"BYSETPOS\":\n                    instance.positions = parseArray(value, { start: -366, end: 366 });\n                    break;\n                case \"WKST\":\n                    instance.weekStart = weekStart = WEEK_DAYS_IDX[value[0]];\n                    break;\n            }\n        }\n\n        if (instance.freq === undefined || (instance.count !== undefined && instance.until)) {\n            return null;\n        }\n\n        if (!instance.interval) {\n            instance.interval = 1;\n        }\n\n        if (weekStart === undefined) {\n            instance.weekStart = weekStart = kendo.culture().calendar.firstDay;\n        }\n\n        if (weekDays) {\n            instance.weekDays = weekDays.sort(predicate);\n        }\n\n        if (instance.positions && !ruleValue) {\n            instance.positions = null;\n        }\n\n        instance._hasRuleValue = ruleValue;\n\n        return instance;\n    }\n\n    function serializeDateRule(dateRule, zone) {\n        var value = dateRule.value;\n        var tzid = dateRule.tzid || \"\";\n        var length = value.length;\n        var idx = 0;\n        var val;\n\n        for (; idx < length; idx++) {\n            val = value[idx];\n            val = timezone.convert(val, tzid || zone || val.getTimezoneOffset(), \"Etc/UTC\");\n            value[idx] = kendo.toString(val, \"yyyyMMddTHHmmssZ\");\n        }\n\n        if (tzid) {\n            tzid = \";TZID=\" + tzid;\n        }\n\n        return tzid + \":\" + value.join(\",\") + \" \";\n    }\n\n    function serialize(rule, zone) {\n        var weekStart = rule.weekStart;\n        var ruleString = \"FREQ=\" + rule.freq.toUpperCase();\n        var exdates = rule.exdates || \"\";\n        var start = rule.start || \"\";\n        var end = rule.end || \"\";\n        var until = rule.until;\n\n        if (rule.interval > 1) {\n            ruleString += \";INTERVAL=\" + rule.interval;\n        }\n\n        if (rule.count) {\n            ruleString += \";COUNT=\" + rule.count;\n        }\n\n        if (until) {\n            until = timezone.convert(until, zone || until.getTimezoneOffset(), \"Etc/UTC\");\n            ruleString += \";UNTIL=\" + kendo.toString(until, \"yyyyMMddTHHmmssZ\");\n        }\n\n        if (rule.months) {\n            ruleString += \";BYMONTH=\" + rule.months;\n        }\n\n        if (rule.weeks) {\n            ruleString += \";BYWEEKNO=\" + rule.weeks;\n        }\n\n        if (rule.yearDays) {\n            ruleString += \";BYYEARDAY=\" + rule.yearDays;\n        }\n\n        if (rule.monthDays) {\n            ruleString += \";BYMONTHDAY=\" + rule.monthDays;\n        }\n\n        if (rule.weekDays) {\n            ruleString += \";BYDAY=\" + serializeWeekDayList(rule.weekDays);\n        }\n\n        if (rule.hours) {\n            ruleString += \";BYHOUR=\" + rule.hours;\n        }\n\n        if (rule.minutes) {\n            ruleString += \";BYMINUTE=\" + rule.minutes;\n        }\n\n        if (rule.seconds) {\n            ruleString += \";BYSECOND=\" + rule.seconds;\n        }\n\n        if (rule.positions) {\n            ruleString += \";BYSETPOS=\" + rule.positions;\n        }\n\n        if (weekStart !== undefined) {\n            ruleString += \";WKST=\" + WEEK_DAYS[weekStart];\n        }\n\n        if (start) {\n            start = \"DTSTART\" + serializeDateRule(start, zone);\n        }\n\n        if (end) {\n            end = \"DTEND\" + serializeDateRule(end, zone);\n        }\n\n        if (exdates) {\n            exdates = \"EXDATE\" + serializeDateRule(exdates, zone);\n        }\n\n        if (start || end || exdates) {\n            ruleString = start + end + exdates + \"RRULE:\" + ruleString;\n        }\n\n        return ruleString;\n    }\n\n    kendo.recurrence = {\n        rule: {\n            parse: parseRule,\n            serialize: serialize\n        },\n        expand: expand,\n        dayInYear: dayInYear,\n        weekInYear: weekInYear,\n        weekInMonth: weekInMonth,\n        numberOfWeeks: numberOfWeeks,\n        isException: isException,\n        toExceptionString: toExceptionString\n    };\n\n    var weekDayCheckBoxes = function(firstDay) {\n        var shortNames = kendo.culture().calendar.days.namesShort,\n            length = shortNames.length,\n            result = \"\",\n            idx = 0,\n            values = [];\n\n        for (; idx < length; idx++) {\n            values.push(idx);\n        }\n\n        shortNames = shortNames.slice(firstDay).concat(shortNames.slice(0, firstDay));\n        values = values.slice(firstDay).concat(values.slice(0, firstDay));\n\n        for (idx = 0; idx < length; idx++) {\n            result += '<label class=\"k-check\"><input class=\"k-recur-weekday-checkbox\" type=\"checkbox\" value=\"' + values[idx] + '\" /> ' + shortNames[idx] + \"</label>\";\n        }\n\n        return result;\n    };\n\n    var RECURRENCE_VIEW_TEMPLATE = kendo.template(\n       '# if (frequency !== \"never\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div>' +\n           '<div class=\"k-edit-field\"><input class=\"k-recur-interval\"/>#:messages.interval#</div>' +\n       '# } #' +\n       '# if (frequency === \"weekly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' +\n           '<div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div>' +\n       '# } else if (frequency === \"monthly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' +\n           '<div class=\"k-edit-field\">' +\n               '<ul class=\"k-reset\">' +\n                   '<li>' +\n                       '<label><input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"monthday\" />#:messages.day#</label>' +\n                       '<input class=\"k-recur-monthday\" />' +\n                   '</li>' +\n                   '<li>' +\n                        '<input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"weekday\" />' +\n                        '<input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" />' +\n                   '</li>' +\n               '</ul>' +\n           '</div>' +\n       '# } else if (frequency === \"yearly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' +\n           '<div class=\"k-edit-field\">' +\n               '<ul class=\"k-reset\">' +\n                   '<li>' +\n                       '<input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"monthday\" />' +\n                       '<input class=\"k-recur-month\" /><input class=\"k-recur-monthday\" />' +\n                   '</li>' +\n                   '<li>' +\n                       '<input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"weekday\" />' +\n                       '<input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" />#:messages.of#<input class=\"k-recur-month\" />' +\n                   '</li>' +\n               '</ul>' +\n           '</div>' +\n       '# } #' +\n       '# if (frequency !== \"never\") { #' +\n           '<div class=\"k-edit-label\"><label>#:end.label#</label></div>' +\n           '<div class=\"k-edit-field\">' +\n               '<ul class=\"k-reset\">' +\n                   '<li>' +\n                       '<label><input class=\"k-recur-end-never\" type=\"radio\" name=\"end\" value=\"never\" />#:end.never#</label>' +\n                   '</li>' +\n                   '<li>' +\n                       '<label><input class=\"k-recur-end-count\" type=\"radio\" name=\"end\" value=\"count\" />#:end.after#</label>' +\n                       '<input class=\"k-recur-count\" />#:end.occurrence#' +\n                   '</li>' +\n                   '<li>' +\n                       '<label><input class=\"k-recur-end-until\" type=\"radio\" name=\"end\" value=\"until\" />#:end.on#</label>' +\n                       '<input class=\"k-recur-until\" />' +\n                   '</li>' +\n               '</ul>' +\n           '</div>' +\n       '# } #'\n    );\n\n    var DAY_RULE = [\n        { day: 0, offset: 0 },\n        { day: 1, offset: 0 },\n        { day: 2, offset: 0 },\n        { day: 3, offset: 0 },\n        { day: 4, offset: 0 },\n        { day: 5, offset: 0 },\n        { day: 6, offset: 0 }\n    ];\n\n    var WEEKDAY_RULE = [\n        { day: 1, offset: 0 },\n        { day: 2, offset: 0 },\n        { day: 3, offset: 0 },\n        { day: 4, offset: 0 },\n        { day: 5, offset: 0 }\n    ];\n\n    var WEEKEND_RULE = [\n        { day: 0, offset: 0 },\n        { day: 6, offset: 0 }\n    ];\n\n    var BaseRecurrenceEditor = Widget.extend({\n        init: function(element, options) {\n            var start;\n            var that = this;\n            var frequencies = options && options.frequencies;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.wrapper = that.element;\n\n            options = that.options;\n            options.start = start = options.start || kendoDate.today();\n\n            if (frequencies) {\n                options.frequencies = frequencies;\n            }\n\n            if (typeof start === \"string\") {\n                options.start = kendo.parseDate(start, \"yyyyMMddTHHmmss\");\n            }\n\n            if (options.firstWeekDay === null) {\n                options.firstWeekDay = kendo.culture().calendar.firstDay;\n            }\n\n            that._namespace = \".\" + options.name;\n        },\n\n        options: {\n            value: \"\",\n            start: \"\",\n            timezone: \"\",\n            spinners: true,\n            firstWeekDay: null,\n            frequencies: [\n                \"never\",\n                \"daily\",\n                \"weekly\",\n                \"monthly\",\n                \"yearly\"\n            ],\n            mobile: false,\n            messages: {\n                frequencies: {\n                    never: \"Never\",\n                    hourly: \"Hourly\",\n                    daily: \"Daily\",\n                    weekly: \"Weekly\",\n                    monthly: \"Monthly\",\n                    yearly: \"Yearly\"\n                },\n                hourly: {\n                    repeatEvery: \"Repeat every: \",\n                    interval: \" hour(s)\"\n                },\n                daily: {\n                    repeatEvery: \"Repeat every: \",\n                    interval: \" day(s)\"\n                },\n                weekly: {\n                    interval: \" week(s)\",\n                    repeatEvery: \"Repeat every: \",\n                    repeatOn: \"Repeat on: \"\n                },\n                monthly: {\n                    repeatEvery: \"Repeat every: \",\n                    repeatOn: \"Repeat on: \",\n                    interval: \" month(s)\",\n                    day: \"Day \"\n                },\n                yearly: {\n                    repeatEvery: \"Repeat every: \",\n                    repeatOn: \"Repeat on: \",\n                    interval: \" year(s)\",\n                    of: \" of \"\n                },\n                end: {\n                    label: \"End:\",\n                    mobileLabel: \"Ends\",\n                    never: \"Never\",\n                    after: \"After \",\n                    occurrence: \" occurrence(s)\",\n                    on: \"On \"\n                },\n                offsetPositions: {\n                    first: \"first\",\n                    second: \"second\",\n                    third: \"third\",\n                    fourth: \"fourth\",\n                    last: \"last\"\n                },\n                weekdays: {\n                    day: \"day\",\n                    weekday: \"weekday\",\n                    weekend: \"weekend day\"\n                }\n            }\n        },\n\n        events: [\"change\"],\n\n        _initInterval: function() {\n            var that = this;\n            var rule = that._value;\n\n            that._container\n                .find(\".k-recur-interval\")\n                .kendoNumericTextBox({\n                    spinners: that.options.spinners,\n                    value: rule.interval || 1,\n                    decimals: 0,\n                    format: \"#\",\n                    min: 1,\n                    change: function() {\n                        rule.interval = this.value();\n                        that._trigger();\n                    }\n                });\n        },\n\n        _weekDayRule: function(clear) {\n            var that = this;\n            var weekday = (that._weekDay.element || that._weekDay).val();\n            var offset = Number((that._weekDayOffset.element || that._weekDayOffset).val());\n            var weekDays = null;\n            var positions = null;\n\n            if (!clear) {\n                if (weekday === \"day\") {\n                    weekDays = DAY_RULE;\n                    positions = offset;\n                } else if (weekday === \"weekday\") {\n                    weekDays = WEEKDAY_RULE;\n                    positions = offset;\n                } else if (weekday === \"weekend\") {\n                    weekDays = WEEKEND_RULE;\n                    positions = offset;\n                } else {\n                    weekDays = [{\n                        offset: offset,\n                        day: Number(weekday)\n                    }];\n                }\n            }\n\n            that._value.weekDays = weekDays;\n            that._value.positions = positions;\n        },\n\n        _weekDayView: function() {\n            var that = this;\n            var weekDays = that._value.weekDays;\n            var positions = that._value.positions;\n            var weekDayOffsetWidget = that._weekDayOffset;\n            var weekDayOffset;\n            var weekDayValue;\n            var length;\n            var method;\n\n            if (weekDays) {\n                length = weekDays.length;\n\n                if (positions) {\n                    if (length === 7) {\n                        weekDayValue = \"day\";\n                        weekDayOffset = positions;\n                    } else if (length === 5) {\n                        weekDayValue = \"weekday\";\n                        weekDayOffset = positions;\n                    } else if (length === 2) {\n                        weekDayValue = \"weekend\";\n                        weekDayOffset = positions;\n                    }\n                }\n\n                if (!weekDayValue) {\n                    weekDays = weekDays[0];\n                    weekDayValue = weekDays.day;\n                    weekDayOffset = weekDays.offset || \"\";\n                }\n\n                method = weekDayOffsetWidget.value ? \"value\" : \"val\";\n\n                weekDayOffsetWidget[method](weekDayOffset);\n                that._weekDay[method](weekDayValue);\n            }\n        },\n\n        _initWeekDay: function() {\n            var that = this, data;\n\n            var weekdayMessage = that.options.messages.weekdays;\n            var offsetMessage = that.options.messages.offsetPositions;\n\n            var weekDayInput = that._container.find(\".k-recur-weekday\");\n\n            var change = function() {\n                that._weekDayRule();\n                that._trigger();\n            };\n\n            if (weekDayInput[0]) {\n                that._weekDayOffset = new DropDownList(that._container.find(\".k-recur-weekday-offset\"), {\n                    change: change,\n                    dataTextField: \"text\",\n                    dataValueField: \"value\",\n                    dataSource: [\n                        { text: offsetMessage.first, value: \"1\" },\n                        { text: offsetMessage.second, value: \"2\" },\n                        { text: offsetMessage.third, value: \"3\" },\n                        { text: offsetMessage.fourth, value: \"4\" },\n                        { text: offsetMessage.last, value: \"-1\" }\n                    ]\n                });\n\n                data = [\n                    { text: weekdayMessage.day, value: \"day\" },\n                    { text: weekdayMessage.weekday, value: \"weekday\" },\n                    { text: weekdayMessage.weekend, value: \"weekend\" }\n                ];\n\n                that._weekDay = new DropDownList(weekDayInput, {\n                    value: that.options.start.getDay(),\n                    change: change,\n                    dataTextField: \"text\",\n                    dataValueField: \"value\",\n                    dataSource: data.concat($.map(kendo.culture().calendar.days.names, function(dayName, idx) {\n                        return {\n                            text: dayName,\n                            value: idx\n                        };\n                    }))\n                });\n\n                that._weekDayView();\n            }\n        },\n\n        _initWeekDays: function() {\n            var that = this;\n            var rule = that._value;\n            var weekDays = that._container.find(\".k-recur-weekday-checkbox\");\n\n            if (weekDays[0]) {\n                weekDays.on(CLICK + that._namespace, function() {\n                    rule.weekDays = $.map(weekDays.filter(\":checked\"), function(checkbox) {\n                        return {\n                            day: Number(checkbox.value),\n                            offset: 0\n                        };\n                    });\n\n                    if (!that.options.mobile) {\n                        that._trigger();\n                    }\n                });\n\n                if (rule.weekDays) {\n                    var idx, weekDay;\n                    var i = 0, l = weekDays.length;\n                    var length = rule.weekDays.length;\n\n                    for (; i < l; i++) {\n                        weekDay = weekDays[i];\n                        for (idx = 0; idx < length; idx ++) {\n                            if (weekDay.value == rule.weekDays[idx].day) {\n                                weekDay.checked = true;\n                            }\n                        }\n                    }\n                }\n            }\n        },\n\n        _initMonthDay: function() {\n            var that = this;\n            var rule = that._value;\n            var monthDayInput = that._container.find(\".k-recur-monthday\");\n\n            if (monthDayInput[0]) {\n                that._monthDay = new kendo.ui.NumericTextBox(monthDayInput, {\n                    spinners: that.options.spinners,\n                    min: 1,\n                    max: 31,\n                    decimals: 0,\n                    format: \"#\",\n                    value: rule.monthDays ? rule.monthDays[0] : that.options.start.getDate(),\n                    change: function() {\n                        var value = this.value();\n\n                        rule.monthDays = value ? [value] : value;\n                        that._trigger();\n                    }\n                });\n            }\n        },\n\n        _initCount: function() {\n            var that = this,\n                input = that._container.find(\".k-recur-count\"),\n                rule = that._value;\n\n            that._count = input.kendoNumericTextBox({\n                spinners: that.options.spinners,\n                value: rule.count || 1,\n                decimals: 0,\n                format: \"#\",\n                min: 1,\n                change: function() {\n                    rule.count = this.value();\n                    that._trigger();\n                }\n            }).data(\"kendoNumericTextBox\");\n        },\n\n        _initUntil: function() {\n            var that = this,\n                input = that._container.find(\".k-recur-until\"),\n                start = that.options.start,\n                rule = that._value,\n                until = rule.until;\n\n            that._until = input.kendoDatePicker({\n                min: until && until < start ? until : start,\n                value: until || start,\n                change: function() {\n                    rule.until = this.value();\n                    that._trigger();\n                }\n            }).data(\"kendoDatePicker\");\n        },\n\n        _trigger: function() {\n            if (!this.options.mobile) {\n                this.trigger(\"change\");\n            }\n        }\n    });\n\n    var RecurrenceEditor = BaseRecurrenceEditor.extend({\n        init: function(element, options) {\n            var that = this;\n\n            BaseRecurrenceEditor.fn.init.call(that, element, options);\n\n            that._initFrequency();\n\n            that._initContainer();\n\n            that.value(that.options.value);\n        },\n\n        options: {\n            name: \"RecurrenceEditor\"\n        },\n\n        events: [ \"change\" ],\n\n        destroy: function() {\n            var that = this;\n\n            that._frequency.destroy();\n            that._container.find(\"input[type=radio],input[type=checkbox]\").off(CLICK + that._namespace);\n\n            kendo.destroy(that._container);\n\n            BaseRecurrenceEditor.fn.destroy.call(that);\n        },\n\n        value: function(value) {\n            var that = this,\n                timezone = that.options.timezone;\n\n            if (value === undefined) {\n                if (!that._value.freq) {\n                    return \"\";\n                }\n\n                return serialize(that._value, timezone);\n            }\n\n            that._value = parseRule(value, timezone) || {};\n\n            that._frequency.value(that._value.freq || \"\");\n            that._initView(that._frequency.value());\n        },\n\n        _initContainer: function() {\n            var element = this.element,\n                container = $('<div class=\"k-recur-view\" />'),\n                editContainer = element.parent(\".k-edit-field\");\n\n            if (editContainer[0]) {\n                container.insertAfter(editContainer);\n            } else {\n                element.append(container);\n            }\n\n            this._container = container;\n        },\n\n        _initFrequency: function() {\n            var that = this,\n                options = that.options,\n                frequencies = options.frequencies,\n                messages = options.messages.frequencies,\n                ddl = $('<input />'),\n                frequency;\n\n            frequencies = $.map(frequencies, function(frequency) {\n                return {\n                    text: messages[frequency],\n                    value: frequency\n                };\n            });\n\n            frequency = frequencies[0];\n            if (frequency && frequency.value === \"never\") {\n                frequency.value = \"\";\n            }\n\n            that.element.append(ddl);\n            that._frequency = new DropDownList(ddl, {\n                dataTextField: \"text\",\n                dataValueField: \"value\",\n                dataSource: frequencies,\n                change: function() {\n                    that._value = {};\n                    that._initView(that._frequency.value());\n                    that.trigger(\"change\");\n                }\n            });\n        },\n\n        _initView: function(frequency) {\n            var that = this;\n            var rule = that._value;\n            var options = that.options;\n\n            var data = {\n                 frequency: frequency || \"never\",\n                 weekDayCheckBoxes: weekDayCheckBoxes,\n                 firstWeekDay: options.firstWeekDay,\n                 messages: options.messages[frequency],\n                 end: options.messages.end\n            };\n\n            kendo.destroy(that._container);\n            that._container.html(RECURRENCE_VIEW_TEMPLATE(data));\n\n            if (!frequency) {\n                that._value = {};\n                return;\n            }\n\n            rule.freq = frequency;\n\n            if (frequency === \"weekly\" && !rule.weekDays) {\n                rule.weekDays = [{\n                    day: options.start.getDay(),\n                    offset: 0\n                }];\n            }\n\n            that._initInterval();\n            that._initWeekDays();\n            that._initMonthDay();\n            that._initWeekDay();\n            that._initMonth();\n            that._initCount();\n            that._initUntil();\n\n            that._period();\n            that._end();\n        },\n\n        _initMonth: function() {\n            var that = this;\n            var rule = that._value;\n            var month = rule.months || [that.options.start.getMonth() + 1];\n            var monthInputs = that._container.find(\".k-recur-month\");\n            var options;\n\n            if (monthInputs[0]) {\n                options = {\n                    change:  function() {\n                        rule.months = [Number(this.value())];\n                        that.trigger(\"change\");\n                    },\n                    dataTextField: \"text\",\n                    dataValueField: \"value\",\n                    dataSource: $.map(kendo.culture().calendar.months.names, function(monthName, idx) {\n                        return {\n                            text: monthName,\n                            value: idx + 1\n                        };\n                    })\n                };\n\n                that._month1 = new DropDownList(monthInputs[0], options);\n                that._month2 = new DropDownList(monthInputs[1], options);\n\n                if (month) {\n                    month = month[0];\n                    that._month1.value(month);\n                    that._month2.value(month);\n                }\n            }\n\n        },\n\n        _end: function() {\n            var that = this;\n            var rule = that._value;\n            var container = that._container;\n            var namespace = that._namespace;\n            var click = function(e) {\n                that._toggleEnd(e.currentTarget.value);\n                that.trigger(\"change\");\n            };\n            var endRule;\n\n            that._buttonNever = container.find(\".k-recur-end-never\").on(CLICK + namespace, click);\n            that._buttonCount = container.find(\".k-recur-end-count\").on(CLICK + namespace, click);\n            that._buttonUntil = container.find(\".k-recur-end-until\").on(CLICK + namespace, click);\n\n            if (rule.count) {\n                endRule = \"count\";\n            } else if (rule.until) {\n                endRule = \"until\";\n            }\n\n            that._toggleEnd(endRule);\n        },\n\n        _period: function() {\n            var that = this;\n            var rule = that._value;\n            var monthly = rule.freq === \"monthly\";\n\n            var toggleRule = monthly ? that._toggleMonthDay : that._toggleYear;\n\n            var selector = \".k-recur-\" + (monthly ? \"month\" : \"year\") + \"-radio\";\n            var radioButtons = that._container.find(selector);\n\n            if (!monthly && rule.freq !== \"yearly\") {\n                return;\n            }\n\n            radioButtons.on(CLICK + that._namespace, function(e) {\n                toggleRule.call(that, e.currentTarget.value);\n                that.trigger(\"change\");\n            });\n\n            that._buttonMonthDay = radioButtons.eq(0);\n            that._buttonWeekDay = radioButtons.eq(1);\n\n            toggleRule.call(that, rule.weekDays ? \"weekday\" : \"monthday\");\n        },\n\n        _toggleEnd: function(endRule) {\n            var that = this;\n            var count, until;\n            var enableCount, enableUntil;\n\n            if (endRule === \"count\") {\n                that._buttonCount.prop(\"checked\", true);\n\n                enableCount = true;\n                enableUntil = false;\n\n                count = that._count.value();\n                until = null;\n            } else if (endRule === \"until\") {\n                that._buttonUntil.prop(\"checked\", true);\n\n                enableCount = false;\n                enableUntil = true;\n\n                count = null;\n                until = that._until.value();\n            } else {\n                that._buttonNever.prop(\"checked\", true);\n\n                enableCount = enableUntil = false;\n                count = until = null;\n            }\n\n            that._count.enable(enableCount);\n            that._until.enable(enableUntil);\n\n            that._value.count = count;\n            that._value.until = until;\n        },\n\n        _toggleMonthDay: function(monthRule) {\n            var that = this;\n            var enableMonthDay = false;\n            var enableWeekDay = true;\n            var clear = false;\n            var monthDays;\n\n            if (monthRule === \"monthday\") {\n                that._buttonMonthDay.prop(\"checked\", true);\n\n                monthDays = [that._monthDay.value()];\n\n                enableMonthDay = true;\n                enableWeekDay = false;\n                clear = true;\n            } else {\n                that._buttonWeekDay.prop(\"checked\", true);\n                monthDays = null;\n            }\n\n            that._weekDay.enable(enableWeekDay);\n            that._weekDayOffset.enable(enableWeekDay);\n            that._monthDay.enable(enableMonthDay);\n\n            that._value.monthDays = monthDays;\n\n            that._weekDayRule(clear);\n        },\n\n        _toggleYear: function(yearRule) {\n            var that = this;\n            var enableMonth1 = false;\n            var enableMonth2 = true;\n            var month;\n\n            if (yearRule === \"monthday\") {\n                enableMonth1 = true;\n                enableMonth2 = false;\n\n                month = that._month1.value();\n            } else {\n                month = that._month2.value();\n            }\n\n            that._month1.enable(enableMonth1);\n            that._month2.enable(enableMonth2);\n\n            that._value.months = [month];\n            that._toggleMonthDay(yearRule);\n        }\n    });\n\n    ui.plugin(RecurrenceEditor);\n\n\n    var RECURRENCE_HEADER_TEMPLATE = kendo.template('<div class=\"k-edit-label\"><label>#:headerTitle#</label></div>' +\n      '<div class=\"k-edit-field k-recur-pattern k-scheduler-toolbar\"></div>' +\n      '<div class=\"k-recur-view\"></div>'\n    );\n\n    var RECURRENCE_REPEAT_PATTERN_TEMPLATE = kendo.template(\n       '# if (frequency !== \"never\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div>' +\n           '<div class=\"k-edit-field\"><input class=\"k-recur-interval\" pattern=\"\\\\\\\\d*\"/>#:messages.interval#</div>' +\n       '# } #' +\n       '# if (frequency === \"weekly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' +\n           '<div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div>' +\n       '# } else if (frequency === \"monthly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div>' +\n           '<div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div>' +\n           '<div class=\"k-monthday-view\" style=\"display:none\">' +\n               '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' +\n               '<div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div>' +\n           '</div>' +\n           '<div class=\"k-weekday-view\" style=\"display:none\">' +\n               '<div class=\"k-edit-label\"><label>#:messages.every#</label></div>' +\n               '<div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div>' +\n               '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' +\n               '<div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div>' +\n           '</div>' +\n       '# } else if (frequency === \"yearly\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div>' +\n           '<div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div>' +\n           '<div class=\"k-monthday-view\" style=\"display:none\">' +\n               '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' +\n               '<div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div>' +\n           '</div>' +\n           '<div class=\"k-weekday-view\" style=\"display:none\">' +\n               '<div class=\"k-edit-label\"><label>#:messages.every#</label></div>' +\n               '<div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div>' +\n               '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' +\n               '<div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div>' +\n           '</div>' +\n           '<div class=\"k-edit-label\"><label>#:messages.month#</label></div>' +\n           '<div class=\"k-edit-field\"><select class=\"k-recur-month\"></select></div>' +\n       '# } #'\n    );\n\n    var RECURRENCE_END_PATTERN_TEMPLATE = kendo.template(\n        '# if (endPattern === \"count\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.after#</label></div>' +\n           '<div class=\"k-edit-field\"><input class=\"k-recur-count\" pattern=\"\\\\\\\\d*\" /></div>' +\n        '# } else if (endPattern === \"until\") { #' +\n           '<div class=\"k-edit-label\"><label>#:messages.on#</label></div>' +\n           '<div class=\"k-edit-field\"><input type=\"date\" class=\"k-recur-until\" /></div>' +\n        '# } #'\n    );\n\n    var RECURRENCE_GROUP_BUTTON_TEMPLATE = kendo.template(\n        '<ul class=\"k-reset k-header k-scheduler-navigation\">' +\n            '#for (var i = 0, length = dataSource.length; i < length; i++) {#' +\n                '<li class=\"k-state-default #= value === dataSource[i].value ? \\\"k-state-selected\\\" : \\\"\\\" #\">' +\n                    '<a role=\"button\" href=\"\\\\#\" class=\"k-link\" data-#=ns#value=\"#=dataSource[i].value#\">#:dataSource[i].text#</a>' +\n                '</li>' +\n            '#}#'  +\n        '</ul>'\n    );\n\n    var MobileRecurrenceEditor = BaseRecurrenceEditor.extend({\n        init: function(element, options) {\n            var that = this;\n\n            BaseRecurrenceEditor.fn.init.call(that, element, options);\n\n            options = that.options;\n\n            that._optionTemplate = kendo.template('<option value=\"#:value#\">#:text#</option>');\n\n            that.value(options.value);\n\n            that._pane = options.pane;\n\n            that._initRepeatButton();\n\n            that._initRepeatEnd();\n\n            that._defaultValue = that._value;\n        },\n\n        options: {\n            name: \"MobileRecurrenceEditor\",\n            animations: {\n                left: \"slide\",\n                right: \"slide:right\"\n            },\n            mobile: true,\n            messages: {\n                cancel: \"Cancel\",\n                update: \"Save\",\n                endTitle: \"Repeat ends\",\n                repeatTitle: \"Repeat pattern\",\n                headerTitle: \"Repeat event\",\n                end: {\n                    patterns: {\n                        never: \"Never\",\n                        after: \"After...\",\n                        on: \"On...\"\n                    },\n                    never: \"Never\",\n                    after: \"End repeat after\",\n                    on: \"End repeat on\"\n                },\n                daily: {\n                    interval: \"\"\n                },\n                hourly: {\n                    interval: \"\"\n                },\n                weekly: {\n                    interval: \"\"\n                },\n                monthly: {\n                    interval: \"\",\n                    repeatBy: \"Repeat by: \",\n                    dayOfMonth: \"Day of the month\",\n                    dayOfWeek: \"Day of the week\",\n                    repeatEvery: \"Repeat every\",\n                    every: \"Every\",\n                    day: \"Day \"\n                },\n                yearly: {\n                    interval: \"\",\n                    repeatBy: \"Repeat by: \",\n                    dayOfMonth: \"Day of the month\",\n                    dayOfWeek: \"Day of the week\",\n                    repeatEvery: \"Repeat every: \",\n                    every: \"Every\",\n                    month: \"Month\",\n                    day: \"Day\"\n                }\n            }\n        },\n\n        events: [ \"change\" ],\n\n        value: function(value) {\n            var that = this;\n            var timezone = that.options.timezone;\n\n            if (value === undefined) {\n                if (!that._value.freq) {\n                    return \"\";\n                }\n\n                return serialize(that._value, timezone);\n            }\n\n            that._value = parseRule(value, timezone) || {};\n        },\n\n        destroy: function() {\n            this._destroyView();\n\n            kendo.destroy(this._endFields);\n\n            this._repeatButton.off(CLICK + this._namespace);\n\n            BaseRecurrenceEditor.fn.destroy.call(this);\n        },\n\n        _initRepeatButton: function() {\n            var that = this;\n            var freq = that.options.messages.frequencies[this._value.freq || \"never\"];\n\n            that._repeatButton = $('<a href=\"#\" class=\"k-button k-scheduler-recur\">' + freq + '</a>')\n                                    .on(CLICK + that._namespace, function(e) {\n                                        e.preventDefault();\n                                        that._createView(\"repeat\");\n                                        that._pane.navigate(\"recurrence\", that.options.animations.left);\n                                    });\n\n            that.element.append(that._repeatButton);\n        },\n\n        _initRepeatEnd: function() {\n            var that = this;\n\n            var endLabelField = $('<div class=\"k-edit-label\"><label>' + that.options.messages.end.mobileLabel + '</label></div>').insertAfter(that.element.parent(\".k-edit-field\"));\n\n            var endEditField = $('<div class=\"k-edit-field\"><a href=\"#\" class=\"k-button k-scheduler-recur-end\"></a></div>')\n                .on(CLICK + that._namespace, function(e) {\n                    e.preventDefault();\n\n                    if (!that._value.freq) {\n                        return;\n                    }\n\n                    that._createView(\"end\");\n                    that._pane.navigate(\"recurrence\", that.options.animations.left);\n                })\n                .insertAfter(endLabelField);\n\n            that._endFields = endLabelField.add(endEditField).toggleClass(\"k-state-disabled\", !that._value.freq);\n            that._endButton = endEditField.find(\".k-scheduler-recur-end\").text(that._endText());\n        },\n\n        _endText: function() {\n            var rule = this._value;\n            var messages = this.options.messages.end;\n\n            var text = messages.never;\n\n            if (rule.count) {\n                text = kendo.format(\"{0} {1}\", messages.after, rule.count);\n            } else if (rule.until) {\n                text = kendo.format(\"{0} {1:d}\", messages.on, rule.until);\n            }\n\n            return text;\n        },\n\n        _initFrequency: function() {\n            var that = this;\n            var frequencyMessages = that.options.messages.frequencies;\n\n            var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n                dataSource: $.map(this.options.frequencies, function(frequency) {\n                    return {\n                        text: frequencyMessages[frequency],\n                        value: frequency !== \"never\" ? frequency : \"\"\n                    };\n                }),\n                value: that._value.freq || \"\",\n                ns: kendo.ns\n            });\n\n            that._view.element\n                .find(\".k-recur-pattern\")\n                .append(html)\n                .on(CLICK + that._namespace, \".k-scheduler-navigation li\", function(e) {\n                    var li = $(this);\n\n                    e.preventDefault();\n\n                    li.addClass(\"k-state-selected\")\n                      .siblings().removeClass(\"k-state-selected\");\n\n                    that._value = { freq: li.children(\"a\").attr(kendo.attr(\"value\")) };\n\n                    that._initRepeatView();\n                });\n        },\n\n        _initEndNavigation: function() {\n            var that = this;\n            var endMessages = that.options.messages.end.patterns;\n            var rule = that._value;\n            var value = \"\";\n\n            if (rule.count) {\n                value = \"count\";\n            } else if (rule.until) {\n                value = \"until\";\n            }\n\n            var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n                dataSource: [\n                    { text: endMessages.never, value: \"\" },\n                    { text: endMessages.after, value: \"count\" },\n                    { text: endMessages.on, value: \"until\" }\n                ],\n                value: value,\n                ns: kendo.ns\n            });\n\n            that._view.element\n                .find(\".k-recur-pattern\")\n                .append(html)\n                .on(CLICK + that._namespace, \".k-scheduler-navigation li\", function(e) {\n                    var li = $(this);\n                    var count = null;\n                    var until = null;\n\n                    e.preventDefault();\n\n                    li.addClass(\"k-state-selected\")\n                      .siblings().removeClass(\"k-state-selected\");\n\n                    that._initEndView(li.children(\"a\").attr(kendo.attr(\"value\")));\n\n                    if (that._count) {\n                        count = that._count.value();\n                        until = null;\n                    } else if (that._until) {\n                        count = null;\n                        until = that._until.val ? kendo.parseDate(that._until.val(), \"yyyy-MM-dd\") : that._until.value();\n                    }\n\n                    rule.count = count;\n                    rule.until = until;\n                });\n        },\n\n        _createView: function(viewType) {\n            var that = this;\n            var options = that.options;\n            var messages = options.messages;\n            var headerTitle = messages[viewType === \"repeat\" ? \"repeatTitle\" : \"endTitle\"];\n\n            var html = '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"recurrence\">' +\n                       '<div data-role=\"header\" class=\"k-header\">' +\n                           '<a href=\"#\" class=\"k-button k-scheduler-cancel\">' + messages.cancel + '</a>' +\n                               messages.headerTitle +\n                           '<a href=\"#\" class=\"k-button k-scheduler-update\">' + messages.update + '</a>' +\n                       '</div>';\n\n            var returnViewId = that._pane.view().id;\n\n            that._view = that._pane.append(html + RECURRENCE_HEADER_TEMPLATE({ headerTitle: headerTitle }));\n\n            that._view.element.on(CLICK + that._namespace, \"a.k-scheduler-cancel, a.k-scheduler-update\", function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n\n                if ($(this).hasClass(\"k-scheduler-update\")) {\n                    that.trigger(\"change\");\n                    that._defaultValue = $.extend({}, that._value);\n                } else {\n                    that._value = that._defaultValue;\n                }\n\n                var frequency = that._value.freq;\n\n                that._endButton.text(that._endText());\n                that._endFields.toggleClass(\"k-state-disabled\", !frequency);\n                that._repeatButton.text(messages.frequencies[frequency || \"never\"]);\n\n                that._pane.one(\"viewShow\", function() {\n                    that._destroyView();\n                });\n\n                that._pane.navigate(returnViewId, that.options.animations.right);\n            });\n\n            that._container = that._view.element.find(\".k-recur-view\");\n\n            if (viewType === \"repeat\") {\n                that._initFrequency();\n                that._initRepeatView();\n            } else {\n                that._initEndNavigation();\n                that._initEndView();\n            }\n        },\n\n        _destroyView: function() {\n            if (this._view) {\n                this._view.destroy();\n                this._view.element.remove();\n            }\n\n            this._view = null;\n        },\n\n        _initRepeatView: function() {\n            var that = this;\n            var frequency = that._value.freq || \"never\";\n\n            var data = {\n                 frequency: frequency,\n                 weekDayCheckBoxes: weekDayCheckBoxes,\n                 firstWeekDay: that.options.firstWeekDay,\n                 messages: that.options.messages[frequency]\n            };\n\n            var html = RECURRENCE_REPEAT_PATTERN_TEMPLATE(data);\n            var container = that._container;\n            var rule = that._value;\n\n            kendo.destroy(container);\n            container.html(html);\n\n            if (!html) {\n                that._value = {};\n                return;\n            }\n\n            if (frequency === \"weekly\" && !rule.weekDays) {\n                 rule.weekDays = [{\n                    day: that.options.start.getDay(),\n                    offset: 0\n                 }];\n            }\n\n            that._initInterval();\n            that._initMonthDay();\n            that._initWeekDays();\n            that._initWeekDay();\n            that._initMonth();\n\n            that._period();\n        },\n\n        _initEndView: function (endPattern) {\n            var that = this;\n            var rule = that._value;\n\n            if (endPattern === undefined) {\n                if (rule.count) {\n                    endPattern = \"count\";\n                } else if (rule.until) {\n                    endPattern = \"until\";\n                }\n            }\n\n            var data = {\n                 endPattern: endPattern,\n                 messages: that.options.messages.end\n            };\n\n            kendo.destroy(that._container);\n            that._container.html(RECURRENCE_END_PATTERN_TEMPLATE(data));\n\n            that._initCount();\n            that._initUntil();\n        },\n\n        _initWeekDay: function() {\n            var that = this, data;\n\n            var weekdayMessage = that.options.messages.weekdays;\n            var offsetMessage = that.options.messages.offsetPositions;\n\n            var weekDaySelect = that._container.find(\".k-recur-weekday\");\n\n            var change = function() {\n                that._weekDayRule();\n                that.trigger(\"change\");\n            };\n\n            if (weekDaySelect[0]) {\n                that._weekDayOffset = that._container.find(\".k-recur-weekday-offset\")\n                                          .html(that._options([\n                                            { text: offsetMessage.first, value: \"1\" },\n                                            { text: offsetMessage.second, value: \"2\" },\n                                            { text: offsetMessage.third, value: \"3\" },\n                                            { text: offsetMessage.fourth, value: \"4\" },\n                                            { text: offsetMessage.last, value: \"-1\" }\n                                          ]))\n                                          .change(change);\n\n                data = [\n                    { text: weekdayMessage.day, value: \"day\" },\n                    { text: weekdayMessage.weekday, value: \"weekday\" },\n                    { text: weekdayMessage.weekend, value: \"weekend\" }\n                ];\n\n                data = data.concat($.map(kendo.culture().calendar.days.names, function(dayName, idx) {\n                    return {\n                        text: dayName,\n                        value: idx\n                    };\n                }));\n\n                that._weekDay = weekDaySelect.html(that._options(data))\n                                             .change(change)\n                                             .val(that.options.start.getDay());\n\n                that._weekDayView();\n            }\n        },\n\n        _initMonth: function() {\n            var that = this;\n            var rule = that._value;\n            var start = that.options.start;\n            var month = rule.months || [start.getMonth() + 1];\n            var monthSelect = that._container.find(\".k-recur-month\");\n            var monthNames = kendo.culture().calendar.months.names;\n\n            if (monthSelect[0]) {\n                var data = $.map(monthNames, function(monthName, idx) {\n                    return {\n                        text: monthName,\n                        value: idx + 1\n                    };\n                });\n\n                monthSelect.html(that._options(data))\n                           .change(function() {\n                               rule.months = [Number(this.value)];\n                           });\n\n                that._monthSelect = monthSelect;\n\n                if (month) {\n                    monthSelect.val(month[0]);\n                }\n            }\n\n        },\n\n        _period: function() {\n            var that = this;\n            var rule = that._value;\n            var container = that._container;\n            var messages = that.options.messages[rule.freq];\n            var repeatRuleGroupButton = container.find(\".k-repeat-rule\");\n            var weekDayView = container.find(\".k-weekday-view\");\n            var monthDayView = container.find(\".k-monthday-view\");\n\n            if (repeatRuleGroupButton[0]) {\n                var currentValue = rule.weekDays ? \"weekday\" : \"monthday\";\n\n                var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n                    value : currentValue,\n                    dataSource: [\n                        { text: messages.dayOfMonth, value: \"monthday\" },\n                        { text: messages.dayOfWeek, value: \"weekday\" }\n                    ],\n                    ns: kendo.ns\n                });\n\n                var init = function(val) {\n                    var weekDayName = that._weekDay.val();\n                    var weekDayOffset = that._weekDayOffset.val();\n                    var monthDay = that._monthDay.value();\n                    var month = that._monthSelect ? that._monthSelect.val() : null;\n\n                    if (val === \"monthday\") {\n                        rule.weekDays = null;\n                        rule.monthDays = monthDay ? [monthDay] : monthDay;\n                        rule.months = month ? [Number(month)] : month;\n\n                        weekDayView.hide();\n                        monthDayView.show();\n                    } else {\n                        rule.monthDays = null;\n                        rule.months = month ? [Number(month)] : month;\n\n                        rule.weekDays = [{\n                            offset: Number(weekDayOffset),\n                            day: Number(weekDayName)\n                        }];\n\n                        weekDayView.show();\n                        monthDayView.hide();\n                    }\n                };\n\n                repeatRuleGroupButton\n                    .append(html)\n                    .on(CLICK + that._namespace, \".k-scheduler-navigation li\", function(e) {\n                        var li = $(this).addClass(\"k-state-selected\");\n\n                        e.preventDefault();\n\n                        li.siblings().removeClass(\"k-state-selected\");\n\n                        var value = li.children(\"a\").attr(kendo.attr(\"value\"));\n\n                        init(value);\n                    });\n\n                init(currentValue);\n            }\n        },\n\n        _initUntil: function() {\n            var that = this;\n            var input = that._container.find(\".k-recur-until\");\n            var start = that.options.start;\n            var rule = that._value;\n            var until = rule.until;\n            var min = until && until < start ? until : start;\n\n            if (kendo.support.input.date) {\n                that._until = input.attr(\"min\", kendo.toString(min, \"yyyy-MM-dd\"))\n                                   .val(kendo.toString(until || start, \"yyyy-MM-dd\"))\n                                   .on(\"change\", function() {\n                                       rule.until = kendo.parseDate(this.value, \"yyyy-MM-dd\");\n                                   });\n            } else {\n                that._until = input.kendoDatePicker({\n                    min: min,\n                    value: until || start,\n                    change: function() {\n                        rule.until = this.value();\n                    }\n                }).data(\"kendoDatePicker\");\n            }\n        },\n\n        _options: function(data, optionLabel) {\n            var idx = 0;\n            var html = \"\";\n            var length = data.length;\n            var template = this._optionTemplate;\n\n            if (optionLabel) {\n                html += template({ value: \"\", text: optionLabel });\n            }\n\n            for (; idx < length; idx++) {\n                html += template(data[idx]);\n            }\n\n            return html;\n        }\n    });\n\n    ui.plugin(MobileRecurrenceEditor);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        setTime = kendo.date.setTime,\n        SchedulerView = ui.SchedulerView,\n        extend = $.extend,\n        proxy = $.proxy,\n        getDate = kendo.date.getDate,\n        getMilliseconds = kendo.date.getMilliseconds,\n        MS_PER_DAY = kendo.date.MS_PER_DAY,\n        MS_PER_MINUTE = kendo.date.MS_PER_MINUTE,\n        NS = \".kendoTimelineView\";\n\n    var EVENT_TEMPLATE = kendo.template('<div>' +\n        '<div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div>' +\n        '<div class=\"k-event-template\">${title}</div></div>'),\n        DATA_HEADER_TEMPLATE = kendo.template(\"<span class='k-link k-nav-day'>#=kendo.format('{0:m}', date)#</span>\"),\n        EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' +\n                'data-#=ns#uid=\"#=uid#\"' +\n                '#if (resources[0]) { #' +\n                    'style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"' +\n                    'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" ' +\n                '#} else {#' +\n                    'class=\"k-event\"' +\n                '#}#' +\n                '>' +\n                '<span class=\"k-event-actions\">' +\n                    '# if(data.tail) {#' +\n                        '<span class=\"k-icon k-i-arrow-w\"></span>' +\n                    '#}#' +\n                    '# if(data.isException()) {#' +\n                        '<span class=\"k-icon k-i-exception\"></span>' +\n                    '# } else if(data.isRecurring()) {#' +\n                        '<span class=\"k-icon k-i-refresh\"></span>' +\n                    '# } #' +\n                '</span>' +\n                '{0}' +\n                '<span class=\"k-event-actions\">' +\n                    '#if (showDelete) {#' +\n                        '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>' +\n                    '#}#' +\n                    '# if(data.head) {#' +\n                        '<span class=\"k-icon k-i-arrow-e\"></span>' +\n                    '#}#' +\n                '</span>' +\n                '#if(resizable && !data.tail){#' +\n                '<span class=\"k-resize-handle k-resize-w\"></span>' +\n                '#}#' +\n                '#if(resizable && !data.head){#' +\n                '<span class=\"k-resize-handle k-resize-e\"></span>' +\n                '#}#' +\n                '</div>';\n\n    function toInvariantTime(date) {\n        var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n        setTime(staticDate, getMilliseconds(date));\n        return staticDate;\n    }\n\n    function getWorkDays(options) {\n        var workDays = [];\n        var dayIndex = options.workWeekStart;\n\n        workDays.push(dayIndex);\n\n        while(options.workWeekEnd != dayIndex) {\n            if(dayIndex > 6 ) {\n                dayIndex -= 7;\n            } else {\n                dayIndex++;\n            }\n            workDays.push(dayIndex);\n        }\n        return workDays;\n    }\n\n    function setColspan(columnLevel) {\n        var count = 0;\n        if (columnLevel.columns) {\n            for (var i = 0; i < columnLevel.columns.length; i++) {\n                count += setColspan(columnLevel.columns[i]);\n            }\n            columnLevel.colspan = count;\n            return count;\n        } else {\n            columnLevel.colspan = 1;\n            return 1;\n        }\n    }\n\n    function collidingEvents(elements, left, right) {\n        var idx,\n            startPosition,\n            overlaps,\n            endPosition;\n\n        for (idx = elements.length-1; idx >= 0; idx--) {\n            startPosition = elements[idx].rectLeft;\n            endPosition = elements[idx].rectRight;\n\n            overlaps = startPosition <= left && endPosition >= left;\n\n            if (overlaps || (startPosition >= left && endPosition <= right) || (left <= startPosition && right >= startPosition)) {\n                if (startPosition < left) {\n                    left = startPosition;\n                }\n\n                if (endPosition > right) {\n                    right = endPosition;\n                }\n            }\n        }\n\n        return eventsForSlot(elements, left, right);\n    }\n\n    function eventsForSlot(elements, left, right) {\n        var events = [];\n\n        for (var idx = 0; idx < elements.length; idx++) {\n            var event = {\n                rectLeft: elements[idx].rectLeft,\n                rectRight: elements[idx].rectRight\n            };\n\n            if ((event.rectLeft < left && event.rectRight > left) || (event.rectLeft >= left && event.rectRight <= right)) {\n                events.push(elements[idx]);\n            }\n        }\n\n        return events;\n    }\n\n    var TimelineView = SchedulerView.extend({\n        init: function(element, options) {\n            var that = this;\n\n            SchedulerView.fn.init.call(that, element, options);\n\n            that.title = that.options.title || that.options.name;\n\n            that._workDays = getWorkDays(that.options);\n\n            that._templates();\n\n            that._editable();\n\n            that.calculateDateRange();\n\n            that._groups();\n\n            that._currentTime();\n        },\n        name: \"timeline\",\n\n        _currentTimeMarkerUpdater: function() {\n            var currentTime = new Date();\n            var options = this.options;\n\n            this.datesHeader.find(\".k-current-time\").remove();\n\n            if (!this._isInDateSlot({start: currentTime, end:currentTime })) {\n                return;\n            }\n\n            if(options.currentTimeMarker.useLocalTimezone === false) {\n                var timezone = options.dataSource.options.schema.timezone;\n\n                if(options.dataSource && timezone) {\n                    var timezoneOffset = kendo.timezone.offset(currentTime, timezone);\n                    currentTime = kendo.timezone.convert(currentTime, currentTime.getTimezoneOffset(), timezoneOffset);\n                }\n            }\n\n            var groupsCount = !options.group || options.group.orientation == \"vertical\" ? 1 : this.groups.length;\n\n            for(var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n                var currentGroup = this.groups[groupIndex];\n                var utcCurrentTime = kendo.date.toUtcTime(currentTime);\n                var ranges = currentGroup.timeSlotRanges(utcCurrentTime, utcCurrentTime + 1);\n                if(ranges.length === 0) {\n                    return;\n                }\n                var collection = ranges[0].collection;\n                var slotElement = collection.slotByStartDate(currentTime);\n\n                if(slotElement) {\n                    var element = $(\"<div class='k-current-time'></div>\");\n                    var datesHeader = this.datesHeader;\n\n                    element.appendTo(datesHeader.find(\".k-scheduler-header-wrap\")).css({\n                        left: Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).left),\n                        width: \"1px\",\n                        bottom: \"1px\",\n                        top: 0\n                    });\n                }\n            }\n        },\n\n        _currentTime: function() {\n            var that = this;\n            var markerOptions = that.options.currentTimeMarker;\n\n            if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n                var updateInterval = markerOptions.updateInterval;\n\n                that._currentTimeMarkerUpdater();\n                that._currentTimeUpdateTimer = setInterval(proxy(this._currentTimeMarkerUpdater, that), updateInterval);\n            }\n        },\n\n        _editable: function() {\n            if (this.options.editable) {\n                if (this._isMobile()) {\n                    this._touchEditable();\n                } else {\n                    this._mouseEditable();\n                }\n            }\n        },\n\n        _mouseEditable: function() {\n            var that = this;\n            that.element.on(\"click\" + NS, \".k-event a:has(.k-si-close)\", function(e) {\n                that.trigger(\"remove\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                e.preventDefault();\n            });\n\n            if (that.options.editable.create !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-scheduler-content td\", function(e) {\n                    var slot = that._slotByPosition(e.pageX, e.pageY);\n\n                    if (slot) {\n                        var resourceInfo = that._resourceBySlot(slot);\n                        that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n                    }\n\n                    e.preventDefault();\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that.element.on(\"dblclick\" + NS, \".k-event\", function(e) {\n                    that.trigger(\"edit\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n                    e.preventDefault();\n                });\n            }\n        },\n\n        _touchEditable: function() {\n            var that = this;\n\n            if (that.options.editable.create !== false) {\n                that._addUserEvents = new kendo.UserEvents(that.element, {\n                    filter:  \".k-scheduler-content td\",\n                    tap: function(e) {\n                        var slot = that._slotByPosition(e.x.location, e.y.location);\n\n                        if (slot) {\n                            var resourceInfo = that._resourceBySlot(slot);\n                            that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n                        }\n\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            if (that.options.editable.update !== false) {\n                that._editUserEvents = new kendo.UserEvents(that.element, {\n                    filter: \".k-event\",\n                    tap: function(e) {\n                        var eventElement = $(e.target).closest(\".k-event\");\n\n                        if (!eventElement.hasClass(\"k-event-active\")) {\n                            that.trigger(\"edit\", { uid: eventElement.attr(kendo.attr(\"uid\")) });\n                        }\n\n                        e.preventDefault();\n                    }\n                });\n            }\n        },\n\n       _slotByPosition: function(x, y) {\n           var slot;\n           var content = this.content;\n           var offset = content.offset();\n           var group;\n           var groupIndex;\n\n           x -= offset.left;\n           y -= offset.top;\n\n           if (this._isRtl) {\n               var browser = kendo.support.browser;\n\n               if (browser.mozilla) {\n                    x += (content[0].scrollWidth - content[0].offsetWidth);\n                    x += content[0].scrollLeft;\n               } else if (browser.msie) {\n                    x -= content.scrollLeft();\n                    x += content[0].scrollWidth - this.content[0].offsetWidth;\n               } else if (browser.webkit) {\n                    x += content[0].scrollLeft;\n               }\n           } else {\n               x += content[0].scrollLeft;\n           }\n\n           y += content[0].scrollTop;\n\n           x = Math.ceil(x);\n           y = Math.ceil(y);\n\n           for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n                group = this.groups[groupIndex];\n\n                slot = group.timeSlotByPosition(x, y);\n\n                if (slot) {\n                    return slot;\n                }\n           }\n\n           return null;\n       },\n\n        options: {\n            name: \"TimelineView\",\n            title: \"Timeline\",\n            selectedDateFormat: \"{0:D}\",\n            date: kendo.date.today(),\n            startTime: kendo.date.today(),\n            endTime: kendo.date.today(),\n            showWorkHours: false,\n            minorTickCount: 2,\n            editable: true,\n            workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n            workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n            workWeekStart: 1,\n            workWeekEnd: 5,\n            majorTick: 60,\n            eventHeight: 25,\n            columnWidth: 100,\n            groupHeaderTemplate: \"#=text#\",\n            majorTimeHeaderTemplate: \"#=kendo.toString(date, 't')#\",\n            slotTemplate: \"&nbsp;\",\n            eventTemplate: EVENT_TEMPLATE,\n            dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n            footer: {\n                command: \"workDay\"\n            },\n            currentTimeMarker: {\n                updateInterval: 10000,\n                useLocalTimezone: true\n            },\n            messages: {\n                defaultRowText: \"All events\",\n                showFullDay: \"Show full day\",\n                showWorkDay: \"Show business hours\"\n            }\n        },\n\n        events: [\"remove\", \"add\", \"edit\"],\n\n        _templates: function() {\n            var options = this.options,\n                settings = extend({}, kendo.Template, options.templateSettings);\n\n            this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n            this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n            this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n            this.slotTemplate = kendo.template(options.slotTemplate, settings);\n            this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n        },\n\n        _render: function(dates) {\n            var that = this;\n            dates = dates || [];\n\n            that._dates = dates;\n\n            that._startDate = dates[0];\n\n            that._endDate = dates[(dates.length - 1) || 0];\n\n            that._calculateSlotRanges();\n\n            that.createLayout(that._layout(dates));\n\n            that._content(dates);\n\n            that._footer();\n\n            that._setContentWidth();\n\n            that.refreshLayout();\n\n            that.datesHeader.on(\"click\" + NS, \".k-nav-day\", function(e) {\n                var th = $(e.currentTarget).closest(\"th\");\n\n                var slot = that._slotByPosition(th.offset().left, that.content.offset().top);\n\n                that.trigger(\"navigate\", { view: \"timeline\", date: slot.startDate() });\n            });\n\n            that.timesHeader.find(\"table tr:last\").hide(); /*Chrome fix, use CSS selector*/\n            that.datesHeader.find(\"table tr:last\").hide();\n        },\n\n        _setContentWidth: function() {\n            var content = this.content;\n            var contentWidth = content.width();\n            var contentTable = this.content.find(\"table\");\n            var columnCount = contentTable.find(\"tr:first\").children().length;\n\n            var minWidth = 100;\n            var calculatedWidth = columnCount * this.options.columnWidth;\n\n            if (contentWidth < calculatedWidth) {\n                minWidth = Math.ceil((calculatedWidth / contentWidth) * 100);\n            }\n\n            contentTable.add(this.datesHeader.find(\"table\"))\n                .css(\"width\", minWidth + \"%\");\n        },\n\n        _calculateSlotRanges: function () {\n            var dates = this._dates;\n            var slotStartTime = this.startTime();\n            var slotEndTime = this.endTime();\n\n            if (getMilliseconds(slotEndTime) === getMilliseconds(kendo.date.getDate(slotEndTime))) {\n                slotEndTime = kendo.date.getDate(slotEndTime);\n                setTime(slotEndTime, MS_PER_DAY - 1);\n            }\n\n            slotEndTime = getMilliseconds(slotEndTime);\n            slotStartTime = getMilliseconds(slotStartTime);\n\n            var slotRanges = [];\n            for (var i = 0; i < dates.length; i++) {\n                var rangeStart = getDate(dates[i]);\n                setTime(rangeStart, slotStartTime);\n\n                var rangeEnd = getDate(dates[i]);\n                setTime(rangeEnd, slotEndTime);\n\n                slotRanges.push({\n                    start: kendo.date.toUtcTime(rangeStart),\n                    end: kendo.date.toUtcTime(rangeEnd)\n                });\n            }\n\n            this._slotRanges = slotRanges;\n        },\n\n        _forTimeRange: function(min, max, action, after) {\n            min = toInvariantTime(min); //convert the date to 1/2/1980 and sets the time\n            max = toInvariantTime(max);\n\n            var that = this,\n                msMin = getMilliseconds(min),\n                msMax = getMilliseconds(max),\n                minorTickCount = that.options.minorTickCount,\n                msMajorInterval = that.options.majorTick * MS_PER_MINUTE,\n                msInterval = msMajorInterval / minorTickCount || 1,\n                start = new Date(+min),\n                startDay = start.getDate(),\n                msStart,\n                idx = 0, length,\n                html = \"\";\n\n            length = MS_PER_DAY / msInterval;\n\n            if (msMin != msMax) {\n                if (msMin > msMax) {\n                    msMax += MS_PER_DAY;\n                }\n\n                length = ((msMax - msMin) / msInterval);\n            }\n\n            length = Math.round(length);\n\n            for (; idx < length; idx++) {\n                var majorTickDivider = idx % (msMajorInterval/msInterval);\n                var isMajorTickColumn = majorTickDivider === 0;\n                var isMiddleColumn = majorTickDivider < minorTickCount - 1;\n                var isLastSlotColumn = majorTickDivider === minorTickCount - 1;\n                var minorTickColumns = minorTickCount;\n\n                if (length % minorTickCount !== 0) {\n                    var isLastMajorSlot = (length - (idx + 1)) < minorTickCount;\n                    if (isMajorTickColumn && isLastMajorSlot) {\n                        minorTickColumns = length % minorTickCount;\n                    }\n                }\n\n                html += action(start, isMajorTickColumn, isMiddleColumn, isLastSlotColumn, minorTickColumns);\n\n                setTime(start, msInterval, false);\n            }\n\n            if (msMax) {\n                msStart = getMilliseconds(start);\n                if (startDay < start.getDate()) {\n                    msStart += MS_PER_DAY;\n                }\n\n                if (msStart > msMax) {\n                    start = new Date(+max);\n                }\n            }\n\n            if (after) {\n                html += after(start);\n            }\n\n            return html;\n        },\n\n        _layout: function(dates) {\n            var timeColumns = [];\n            var columns = [];\n            var that = this;\n            var rows = [{ text: that.options.messages.defaultRowText }];\n\n            var minorTickSlots = [];\n            for (var minorTickIndex = 0; minorTickIndex < that.options.minorTickCount; minorTickIndex++) {\n                minorTickSlots.push({\n                    text: \"\",\n                    className: \"\"\n                });\n            }\n\n            this._forTimeRange(that.startTime(), that.endTime(), function(date, majorTick, middleColumn, lastSlotColumn, minorSlotsCount) {\n                var template = that.majorTimeHeaderTemplate;\n\n                if (majorTick) {\n                    var timeColumn = {\n                        text: template({ date: date }),\n                        className: lastSlotColumn ? \"k-slot-cell\" : \"\",\n                        columns: minorTickSlots.slice(0, minorSlotsCount)\n                    };\n                    setColspan(timeColumn);\n                    timeColumns.push(timeColumn);\n                }\n            });\n\n            for (var idx = 0; idx < dates.length; idx++) {\n                columns.push({\n                    text: that.dateHeaderTemplate({ date: dates[idx] }),\n                    className:  \"k-slot-cell\",\n                    columns: timeColumns.slice(0)\n                });\n            }\n\n            var resources = this.groupedResources;\n            if (resources.length) {\n                if (this._groupOrientation() === \"vertical\") {\n                    rows = that._createRowsLayout(resources, null, this.groupHeaderTemplate);\n                } else {\n                    columns = that._createColumnsLayout(resources, columns, this.groupHeaderTemplate);\n                }\n            }\n\n            return {\n                columns: columns,\n                rows: rows\n            };\n        },\n\n        _footer: function() {\n            var options = this.options;\n\n            if (options.footer !== false) {\n                var html = '<div class=\"k-header k-scheduler-footer\">';\n\n                var command = options.footer.command;\n\n                if (command && command === \"workDay\") {\n                    html += '<ul class=\"k-reset k-header\">';\n\n                    html += '<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>';\n                    html += (options.showWorkHours ? options.messages.showFullDay : options.messages.showWorkDay) + '</a></li>';\n\n                    html += '</ul>';\n\n                } else {\n                    html += \"&nbsp;\";\n                }\n\n                html += \"</div>\";\n\n                this.footer = $(html).appendTo(this.element);\n\n                var that = this;\n\n                this.footer.on(\"click\" + NS, \".k-scheduler-fullday\", function(e) {\n                    e.preventDefault();\n                    that.trigger(\"navigate\", { view: that.name || options.name, date: that.startDate(), isWorkDay: !options.showWorkHours });\n                });\n            }\n        },\n\n        _columnCountForLevel: function(level) {\n            var columnLevel = this.columnLevels[level];\n            return columnLevel ? columnLevel.length : 0;\n        },\n\n        _rowCountForLevel: function(level) {\n            var rowLevel = this.rowLevels[level];\n            return rowLevel ? rowLevel.length : 0;\n        },\n\n        _isWorkDay: function(date) {\n            var day = date.getDay();\n            var workDays =  this._workDays;\n\n            for (var i = 0; i < workDays.length; i++) {\n                if (workDays[i] === day) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _content: function(dates) {\n            var that = this;\n            var options = that.options;\n            var start = that.startTime();\n            var end = this.endTime();\n            var groupsCount = 1;\n            var rowCount = 1;\n            var columnCount = dates.length;\n            var html = '';\n            var resources = this.groupedResources;\n            var slotTemplate = this.slotTemplate;\n            var isVerticalGrouped = false;\n\n            if (resources.length) {\n                isVerticalGrouped = that._groupOrientation() === \"vertical\";\n\n                if (isVerticalGrouped) {\n                    rowCount = that._groupCount();\n                } else {\n                    groupsCount = that._groupCount();\n                }\n            }\n\n            html += '<tbody>';\n\n            var appendRow = function(date, majorTick) {\n                var content = \"\";\n                var classes = \"\";\n                var tmplDate;\n\n                var resources = function(groupIndex) {\n                    return function() {\n                        return that._resourceBySlot({ groupIndex: groupIndex });\n                    };\n                };\n\n                if (kendo.date.isToday(dates[idx])) {\n                    classes += \"k-today\";\n                }\n\n                if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(options.workDayStart) ||\n                    kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(options.workDayEnd) ||\n                    !that._isWorkDay(dates[idx])) {\n                    classes += \" k-nonwork-hour\";\n                }\n\n                content += '<td' + (classes !== \"\" ? ' class=\"' + classes + '\"' : \"\") + \">\";\n                tmplDate = kendo.date.getDate(dates[idx]);\n                kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n\n                content += slotTemplate({ date: tmplDate, resources: resources(isVerticalGrouped ? rowIdx : groupIdx) });\n                content += \"</td>\";\n\n                return content;\n            };\n\n\n            for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n                html += '<tr>';\n\n                for (var groupIdx = 0 ; groupIdx < groupsCount; groupIdx++) {\n                    for (var idx = 0, length = columnCount; idx < length; idx++) {\n                        html += this._forTimeRange(start, end, appendRow);\n                    }\n                }\n\n                html += \"</tr>\";\n            }\n\n            html += '</tbody>';\n\n            this.content.find(\"table\").append(html);\n        },\n\n        _groups: function() {\n            var groupCount = this._groupCount();\n            var dates = this._dates;\n            var columnCount = dates.length;\n\n            this.groups = [];\n\n            for (var idx = 0; idx < groupCount; idx++) {\n                var view = this._addResourceView(idx);\n\n                var start = dates[0];\n                var end = dates[(dates.length - 1) || 0];\n                view.addTimeSlotCollection(start, kendo.date.addDays(end, 1));\n            }\n\n            this._timeSlotGroups(groupCount, columnCount);\n        },\n\n        _isVerticallyGrouped: function() {\n            return this.groupedResources.length && this._groupOrientation() === \"vertical\";\n        },\n\n        _isHorizontallyGrouped: function() {\n            return this.groupedResources.length && this._groupOrientation() === \"horizontal\";\n        },\n\n        _timeSlotGroups: function (groupCount, datesCount) {\n            var interval = this._timeSlotInterval();\n            var isVerticallyGrouped = this._isVerticallyGrouped();\n            var tableRows = this.content.find(\"tr\");\n            var rowCount = tableRows.length;\n\n            tableRows.attr(\"role\", \"row\");\n\n            if (isVerticallyGrouped) {\n                rowCount = Math.floor(rowCount / groupCount);\n            }\n\n            for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n                var rowMultiplier = 0;\n                var group = this.groups[groupIndex];\n                var time;\n\n                if (isVerticallyGrouped) {\n                    rowMultiplier = groupIndex;\n                }\n\n                var rowIndex = rowMultiplier * rowCount;\n                var cellMultiplier = 0;\n\n                if (!isVerticallyGrouped) {\n                    cellMultiplier = groupIndex;\n                }\n\n                var cells = tableRows[rowIndex].children;\n                var cellsPerGroup = cells.length / (!isVerticallyGrouped ? groupCount : 1);\n                var cellsPerDay = cellsPerGroup / datesCount;\n\n                for (var dateIndex = 0; dateIndex < datesCount; dateIndex++) {\n                    var cellOffset = dateIndex * cellsPerDay + (cellsPerGroup * cellMultiplier);\n                    time = getMilliseconds(new Date(+this.startTime()));\n\n                    for (var cellIndex = 0; cellIndex < cellsPerDay ; cellIndex++) {\n                        var cell = cells[cellIndex+cellOffset];\n                        var collection = group.getTimeSlotCollection(0);\n                        var currentDate = this._dates[dateIndex];\n                        var currentTime = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n                        var start = currentTime + time;\n                        var end = start + interval;\n                        cell.setAttribute(\"role\", \"gridcell\");\n                        cell.setAttribute(\"aria-selected\", false);\n\n                        collection.addTimeSlot(cell, start, end, true);\n                        time += interval;\n                    }\n                }\n            }\n        },\n\n        startDate: function() {\n            return this._startDate;\n        },\n\n        endDate: function() {\n            return this._endDate;\n        },\n\n        startTime: function() {\n            var options = this.options;\n            return options.showWorkHours ? options.workDayStart : options.startTime;\n        },\n\n        endTime: function() {\n            var options = this.options;\n            return options.showWorkHours ? options.workDayEnd : options.endTime;\n        },\n\n        _timeSlotInterval: function() {\n            var options = this.options;\n            return (options.majorTick/options.minorTickCount) * MS_PER_MINUTE;\n        },\n\n        nextDate: function () {\n            return kendo.date.nextDay(this.endDate());\n        },\n        previousDate: function () {\n            return kendo.date.previousDay(this.startDate());\n        },\n\n        calculateDateRange: function() {\n            this._render([this.options.date]);\n        },\n\n        render: function(events) {\n            this._headerColumnCount = 0;\n\n            this._groups();\n\n            this.element.find(\".k-event\").remove();\n\n            events = new kendo.data.Query(events)\n                .sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"desc\" }])\n                .toArray();\n\n            var eventsByResource = [];\n\n            this._eventsByResource(events, this.groupedResources, eventsByResource);\n\n            var eventGroups = [];\n            var maxRowCount = 0;\n\n            for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n                var eventGroup = {\n                    groupIndex: groupIndex,\n                    maxRowCount: 0,\n                    events: {}\n                };\n\n                eventGroups.push(eventGroup);\n\n                this._renderEvents(eventsByResource[groupIndex], groupIndex, eventGroup);\n\n                if (maxRowCount < eventGroup.maxRowCount) {\n                    maxRowCount = eventGroup.maxRowCount;\n                }\n            }\n\n            this._setRowsHeight(eventGroups, eventsByResource.length, maxRowCount);\n\n            this._positionEvents(eventGroups, eventsByResource.length);\n\n            this.trigger(\"activate\");\n        },\n\n        _positionEvents: function(eventGroups, groupsCount) {\n            for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n                var eventsForGroup = eventGroups[groupIndex].events;\n                for (var eventUid in eventsForGroup) {\n                    var eventObject = eventsForGroup[eventUid];\n                    this._positionEvent(eventObject);\n                }\n            }\n        },\n\n        _setRowsHeight: function(eventGroups, groupsCount, maxRowCount) {\n            var eventHeight = this.options.eventHeight + 2;/* two times border width */\n            var eventBottomOffset = this._getBottomRowOffset();\n\n            groupsCount = this._isVerticallyGrouped() ? groupsCount : 1;\n\n            for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n                var rowsCount = this._isVerticallyGrouped() ? eventGroups[groupIndex].maxRowCount : maxRowCount;\n\n                rowsCount = rowsCount ? rowsCount : 1;\n\n                var rowHeight = ((eventHeight + 2) * rowsCount) + eventBottomOffset;\n                var timesRow = $(this.times.find(\"tr\")[groupIndex]);\n                var row = $(this.content.find(\"tr\")[groupIndex]);\n\n                timesRow.height(rowHeight);\n                row.height(rowHeight);\n            }\n\n            this._setContentWidth();\n            this.refreshLayout();\n            this._refreshSlots();\n        },\n\n        _getBottomRowOffset: function() {\n            var eventBottomOffset = this.options.eventHeight * 0.50;\n            var isMobile = this._isMobile();\n            var minOffset;\n            var maxOffset;\n\n            if (isMobile) {\n                minOffset = 30;\n                maxOffset = 60;\n            } else {\n                minOffset = 15;\n                maxOffset = 30;\n            }\n\n            if (eventBottomOffset > maxOffset) {\n                eventBottomOffset = maxOffset;\n            } else if (eventBottomOffset < minOffset) {\n                eventBottomOffset = minOffset;\n            }\n\n            return eventBottomOffset;\n        },\n\n        _positionEvent: function(eventObject) {\n            var eventHeight = this.options.eventHeight + 2;\n\n            var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n\n            var width = rect.right - rect.left - 2;\n\n            if (width < 0) {\n                width = 0;\n            }\n\n            var left = rect.left;\n            if (this._isRtl) {\n                left -= (this.content[0].scrollWidth - this.content[0].offsetWidth);\n            }\n\n            eventObject.element.css({\n                top:  eventObject.slotRange.start.offsetTop + eventObject.rowIndex * (eventHeight + 2) + \"px\",\n                left: left,\n                width: width\n            });\n        },\n\n        _refreshSlots: function() {\n            for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n                this.groups[groupIndex].refresh();\n            }\n        },\n\n        _eventsByResource: function(events, resources, result) {\n            var resource = resources[0];\n\n            if (resource) {\n                var view = resource.dataSource.view();\n\n                for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n                    var value = this._resourceValue(resource, view[itemIdx]);\n\n                    var eventsFilteredByResource = new kendo.data.Query(events).filter({ field: resource.field, operator: SchedulerView.groupEqFilter(value) }).toArray();\n\n                    if (resources.length > 1) {\n                        this._eventsByResource(eventsFilteredByResource, resources.slice(1), result);\n                    } else {\n                        result.push(eventsFilteredByResource);\n                    }\n                }\n            } else {\n                result.push(events);\n            }\n        },\n\n        _isInDateSlot: function(event) {\n            var startTime = event.start;\n            var endTime = event.end;\n            var rangeStart = getDate(this._startDate);\n            var rangeEnd = kendo.date.addDays(getDate(this._endDate),1);\n\n            if (startTime < rangeEnd && rangeStart <= endTime) {\n                return true;\n            }\n            return false;\n        },\n\n        _isInTimeSlot: function(event) {\n            var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n            var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n\n            var slotRanges = this._slotRanges;\n\n            if (startTime === endTime) {\n                endTime = endTime+1;\n            }\n\n            for (var slotIndex = 0; slotIndex < slotRanges.length; slotIndex++) {\n                if (startTime < slotRanges[slotIndex].end && slotRanges[slotIndex].start < endTime) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _adjustEvent: function(event) {\n            var start = event.start;\n            var end = event.end;\n            var eventStartTime = event._time(\"start\");\n            var eventEndTime = event._time(\"end\");\n            var startTime = getMilliseconds(this.startTime());\n            var endTime = getMilliseconds(this.endTime());\n            var adjustedStartDate = null;\n            var adjustedEndDate = null;\n            var occurrence;\n            var head = false;\n            var tail = false;\n\n            if (event.isAllDay) {\n                adjustedStartDate = getDate(start);\n                if (startTime > eventStartTime) {\n                    setTime(adjustedStartDate, startTime);\n                    tail = true;\n                }\n\n                adjustedEndDate = getDate(end);\n                if (endTime === getMilliseconds(getDate(this.endTime()))) {\n                    adjustedEndDate = kendo.date.addDays(adjustedEndDate, 1);\n                } else {\n                    setTime(adjustedEndDate, endTime);\n                    head = true;\n                }\n            } else {\n                endTime = endTime === 0 ? MS_PER_DAY : endTime;\n\n                if (startTime > eventStartTime) {\n                    adjustedStartDate = getDate(start);\n                    setTime(adjustedStartDate, startTime);\n                    tail = true;\n                } else if (endTime < eventStartTime) {\n                    adjustedStartDate = getDate(start);\n                    adjustedStartDate = kendo.date.addDays(adjustedStartDate, 1);\n                    setTime(adjustedStartDate, startTime);\n                    tail = true;\n                }\n\n                if (endTime < eventEndTime) {\n                    adjustedEndDate = getDate(end);\n                    setTime(adjustedEndDate, endTime);\n                    head = true;\n                } else if (startTime > eventEndTime) {\n                    adjustedEndDate = getDate(end);\n                    adjustedEndDate = kendo.date.addDays(adjustedEndDate,-1);\n                    setTime(adjustedEndDate, endTime);\n                    head = true;\n                }\n            }\n\n            occurrence = event.clone({\n                start: adjustedStartDate ? adjustedStartDate : start,\n                end: adjustedEndDate ? adjustedEndDate : end,\n                _startTime: adjustedStartDate ? kendo.date.toUtcTime(adjustedStartDate) : event._startTime,\n                _endTime:  adjustedEndDate ? kendo.date.toUtcTime(adjustedEndDate) : event._endTime,\n                isAllDay: false\n            });\n\n            return {\n                occurrence: occurrence,\n                head: head,\n                tail: tail\n            };\n        },\n\n        _renderEvents: function(events, groupIndex, eventGroup) {\n            var event;\n            var idx;\n            var length;\n\n            for (idx = 0, length = events.length; idx < length; idx++) {\n                event = events[idx];\n\n                if (this._isInDateSlot(event)) {\n                    var isMultiDayEvent = event.isAllDay || event.end.getTime() - event.start.getTime() >= MS_PER_DAY;\n                    var container = this.content;\n\n                    if (isMultiDayEvent || this._isInTimeSlot(event)) {\n                        var adjustedEvent = this._adjustEvent(event);\n                        var group = this.groups[groupIndex];\n\n                        if (!group._continuousEvents) {\n                            group._continuousEvents = [];\n                        }\n\n                        var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n                        var range = ranges[0];\n                        var element;\n\n                        if (this._isInTimeSlot(adjustedEvent.occurrence)) {\n\n                            element = this._createEventElement(adjustedEvent.occurrence, event, range.head || adjustedEvent.head, range.tail || adjustedEvent.tail);\n                            element.appendTo(container).css({top: 0, height: this.options.eventHeight});\n\n                            var eventObject = {\n                                start: adjustedEvent.occurrence._startTime || adjustedEvent.occurrence.start,\n                                end: adjustedEvent.occurrence._endTime || adjustedEvent.occurrence.end,\n                                element: element,\n                                uid: event.uid,\n                                slotRange: range,\n                                rowIndex: 0,\n                                offsetTop: 0\n                            };\n\n                            eventGroup.events[event.uid] = eventObject;\n\n                            this.addContinuousEvent(group, range, element, event.isAllDay);\n                            this._arrangeRows(eventObject, range, eventGroup);\n                        }\n                    }\n                }\n            }\n        },\n\n        addContinuousEvent: function(group, range, element, isAllDay) {\n            var events = group._continuousEvents;\n\n            events.push({\n                element: element,\n                isAllDay: isAllDay,\n                uid: element.attr(kendo.attr(\"uid\")),\n                start: range.start,\n                end: range.end\n            });\n        },\n\n        _createEventElement: function(occurrence, event, head, tail) {\n            var template = this.eventTemplate;\n            var editable = this.options.editable;\n            var isMobile = this._isMobile();\n            var showDelete = editable && editable.destroy !== false && !isMobile;\n            var resizable = editable && editable.resize !== false;\n            var eventStartTime = event._time(\"start\");\n            var eventEndTime = event._time(\"end\");\n            var eventStartDate = event.start;\n            var eventEndDate = event.end;\n\n            var resources = this.eventResources(event);\n\n            if (event._startTime) {\n                eventStartDate = new Date(eventStartTime);\n                eventStartDate = kendo.timezone.apply(eventStartDate, \"Etc/UTC\");\n            }\n\n            if (event.endTime) {\n                eventEndDate = new Date(eventEndTime);\n                eventEndDate = kendo.timezone.apply(eventEndDate, \"Etc/UTC\");\n            }\n\n            var data = extend({}, {\n                ns: kendo.ns,\n                resizable: resizable,\n                showDelete: showDelete,\n                head: head,\n                tail: tail,\n                singleDay: this._dates.length == 1,\n                resources: resources,\n                inverseColor: resources && resources[0] ? this._shouldInverseResourceColor(resources[0]) : false\n            }, event, {\n                start: eventStartDate,\n                end: eventEndDate\n            });\n\n            var element = $(template(data));\n\n            this.angular(\"compile\", function(){\n                return {\n                    elements: element,\n                    data: [ { dataItem: data } ]\n                };\n            });\n\n            return element;\n        },\n\n        _arrangeRows: function (eventObject, slotRange, eventGroup) {\n            var startIndex = slotRange.start.index;\n            var endIndex = slotRange.end.index;\n\n            var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n\n            var events = collidingEvents(slotRange.events(), rect.left, rect.right);\n\n            slotRange.addEvent({\n                slotIndex: startIndex,\n                start: startIndex,\n                end: endIndex,\n                rectLeft: rect.left,\n                rectRight: rect.right,\n                element: eventObject.element,\n                uid: eventObject.uid\n            });\n\n            events.push({\n                start: startIndex,\n                end: endIndex,\n                uid: eventObject.uid\n            });\n\n            var rows = SchedulerView.createRows(events);\n\n            if (eventGroup.maxRowCount < rows.length) {\n                eventGroup.maxRowCount = rows.length;\n            }\n\n            for (var idx = 0, length = rows.length; idx < length; idx++) {\n                var rowEvents = rows[idx].events;\n                for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n                    eventGroup.events[rowEvents[j].uid].rowIndex = idx;\n                }\n            }\n        },\n\n        _groupCount: function() {\n            var resources = this.groupedResources;\n\n            if (resources.length) {\n                if (this._groupOrientation() === \"vertical\") {\n                    return this._rowCountForLevel(resources.length - 1);\n                } else {\n                    return this._columnCountForLevel(resources.length - 1);\n                }\n            }\n            return 1;\n        },\n\n        _updateEventForSelection: function(event) {\n            var adjustedEvent = this._adjustEvent(event.clone());\n            return adjustedEvent.occurrence;\n        },\n\n        _updateEventForMove: function(event) {\n           if (event.isAllDay) {\n               event.set(\"isAllDay\", false);\n           }\n        },\n\n        _updateEventForResize: function(event) {\n            if (event.isAllDay) {\n                event.set(\"isAllDay\", false);\n            }\n        },\n\n        _updateMoveHint: function(event, groupIndex, distance) {\n            var group = this.groups[groupIndex];\n\n            var clonedEvent = event.clone({ start: event.start, end: event.end});\n\n            var eventDuraton =  clonedEvent.duration();\n            clonedEvent.start = new Date(clonedEvent.start.getTime() + distance);\n            clonedEvent.end = new Date(+clonedEvent.start + eventDuraton);\n\n            var adjustedEvent = this._adjustEvent(clonedEvent);\n\n            var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n\n            this._removeMoveHint();\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n                var startSlot = range.start;\n\n                var hint = this._createEventElement(adjustedEvent.occurrence ,adjustedEvent.occurrence, false, false);\n\n                hint.addClass(\"k-event-drag-hint\");\n\n                var rect = range.innerRect(adjustedEvent.occurrence.start, adjustedEvent.occurrence.end, this.options.snap);\n                var width = rect.right - rect.left - 2;\n\n                if (width < 0) {\n                   width = 0;\n                }\n\n                var left = rect.left;\n\n                if (this._isRtl) {\n                   left -= (this.content[0].scrollWidth - this.content[0].offsetWidth);\n                }\n\n                var css = {\n                    left: left,\n                    top: startSlot.offsetTop,\n                    height: startSlot.offsetHeight - 2,\n                    width: width\n                };\n\n                hint.css(css);\n\n                this._moveHint = this._moveHint.add(hint);\n            }\n\n            var content = this.content;\n\n            this._moveHint.appendTo(content);\n        },\n\n        _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n            var group = this.groups[groupIndex];\n            var ranges = group.ranges(startTime, endTime, false, false);\n\n            this._removeResizeHint();\n\n            for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n                var range = ranges[rangeIndex];\n                var start = range.startSlot();\n\n                var startRect = range.innerRect(startTime, endTime, false);\n                startRect.top = start.offsetTop;\n\n                var width = startRect.right - startRect.left;\n                var height = start.offsetHeight;\n\n                var left = startRect.left;\n\n                var content = this.content;\n                if (this._isRtl) {\n                    left -= (content[0].scrollWidth - content[0].offsetWidth);\n                }\n\n                var hint = SchedulerView.fn._createResizeHint.call(this,\n                    left,\n                    startRect.top,\n                    width,\n                    height\n                );\n\n                this._resizeHint = this._resizeHint.add(hint);\n            }\n\n            var format = \"t\";\n            var container = this.content;\n\n            this._resizeHint.appendTo(container);\n\n            this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\");\n\n            this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(kendo.toString(kendo.timezone.toLocalDate(startTime), format));\n\n            this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(kendo.toString(kendo.timezone.toLocalDate(endTime), format));\n\n        },\n\n        selectionByElement: function(cell) {\n            var offset = cell.offset();\n            return this._slotByPosition(offset.left, offset.top);\n        },\n\n        _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n            if (multiple && !vertical) {\n                if (startSlot.index === endSlot.index &&\n                    startSlot.collectionIndex === endSlot.collectionIndex) {\n                    selection.backward = reverse;\n                }\n            }\n        },\n\n        _changeGroup: function(selection, previous) {\n            var method = previous ? \"prevGroupSlot\" : \"nextGroupSlot\";\n\n            var slot = this[method](selection.start, selection.groupIndex, false);\n\n            if (slot) {\n                selection.groupIndex += previous ? -1 : 1;\n            }\n\n            return slot;\n        },\n\n        prevGroupSlot: function(date, groupIndex, isDay) {\n            var group = this.groups[groupIndex];\n            var slot = group.ranges(date, date, isDay, false)[0].start;\n\n            if (groupIndex <= 0) {\n                return;\n            }\n\n            if (this._isVerticallyGrouped()) {\n                return slot;\n            } else {\n                var collection = group._collection(0, isDay);\n                return collection.last();\n            }\n        },\n\n        nextGroupSlot: function(date, groupIndex, isDay) {\n            var group = this.groups[groupIndex];\n            var slot = group.ranges(date, date, isDay, false)[0].start;\n\n            if (groupIndex >= this.groups.length - 1) {\n                return;\n            }\n\n            if (this._isVerticallyGrouped()) {\n                return slot;\n            } else {\n                var collection = group._collection(0, isDay);\n                return collection.first();\n            }\n        },\n\n        _verticalSlots: function (selection, ranges, multiple, reverse) {\n            var method = reverse ? \"leftSlot\" : \"rightSlot\";\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n            var group = this.groups[selection.groupIndex];\n\n            startSlot = group[method](startSlot);\n            endSlot = group[method](endSlot);\n\n            if (!multiple && this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n                startSlot = endSlot = this._changeGroup(selection, reverse);\n            }\n\n            return {\n                startSlot: startSlot,\n                endSlot: endSlot\n            };\n        },\n\n        _horizontalSlots: function (selection, ranges, multiple, reverse) {\n            var method = reverse ? \"upSlot\" : \"downSlot\";\n            var startSlot = ranges[0].start;\n            var endSlot = ranges[ranges.length - 1].end;\n            var group = this.groups[selection.groupIndex];\n\n            startSlot = group[method](startSlot);\n            endSlot = group[method](endSlot);\n\n            if (!multiple && this._isHorizontallyGrouped() && (!startSlot || !endSlot)) {\n                startSlot = endSlot = this._changeGroup(selection, reverse);\n            }\n\n            return {\n                startSlot: startSlot,\n                endSlot: endSlot\n            };\n        },\n\n        _changeViewPeriod: function(selection, reverse, vertical) {\n            var date = reverse ? this.previousDate() : this.nextDate();\n            var start = selection.start;\n            var end = selection.end;\n\n            selection.start = new Date(date);\n            selection.end = new Date(date);\n\n            if (this._isHorizontallyGrouped()) {\n               selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n            }\n\n            var duration = end - start;\n\n            if (reverse) {\n                end = getMilliseconds(this.endTime());\n                end = end === 0 ? MS_PER_DAY : end;\n\n                setTime(selection.start, end-duration);\n                setTime(selection.end,  end);\n            } else {\n                start = getMilliseconds(this.startTime());\n\n                setTime(selection.start, start);\n                setTime(selection.end, start + duration);\n            }\n\n            selection.events = [];\n\n            return true;\n        },\n\n        move: function(selection, key, shift) {\n            var handled = false;\n            var group = this.groups[selection.groupIndex];\n            var keys = kendo.keys;\n\n            var ranges = group.ranges(selection.start, selection.end, false, false);\n            var startSlot, endSlot, reverse, slots;\n\n            if (key === keys.DOWN || key === keys.UP) {\n                handled = true;\n                reverse = key === keys.UP;\n\n                this._updateDirection(selection, ranges, shift, reverse, true);\n\n                slots = this._verticalSlots(selection, ranges, shift, reverse);\n            } else if (key === keys.LEFT || key === keys.RIGHT) {\n                handled = true;\n                reverse = key === keys.LEFT;\n\n                this._updateDirection(selection, ranges, shift, reverse, false);\n\n                slots = this._horizontalSlots(selection, ranges, shift, reverse);\n\n                if ((!slots.startSlot ||!slots.endSlot ) && !shift && this._changeViewPeriod(selection, reverse, false)) {\n                    return handled;\n                }\n            }\n\n           if (handled) {\n               startSlot = slots.startSlot;\n               endSlot = slots.endSlot;\n\n               if (shift) {\n                   var backward = selection.backward;\n\n                   if (backward && startSlot) {\n                       selection.start = startSlot.startDate();\n                   } else if (!backward && endSlot) {\n                       selection.end = endSlot.endDate();\n                   }\n               } else if (startSlot && endSlot) {\n                   selection.start = startSlot.startDate();\n                   selection.end = endSlot.endDate();\n               }\n\n               selection.events = [];\n           }\n\n            return handled;\n        },\n\n        destroy: function() {\n            var that = this;\n\n            if (that.element) {\n                that.element.off(NS);\n            }\n\n            if (that.footer) {\n                that.footer.remove();\n            }\n\n            if (that._currentTimeUpdateTimer) {\n                clearInterval(that._currentTimeUpdateTimer);\n            }\n\n            SchedulerView.fn.destroy.call(this);\n\n            if (this._isMobile() && that.options.editable) {\n                if (that.options.editable.create !== false) {\n                    that._addUserEvents.destroy();\n                }\n\n                if (that.options.editable.update !== false) {\n                    that._editUserEvents.destroy();\n                }\n            }\n        }\n    });\n\n    extend(true, ui, {\n        TimelineView: TimelineView,\n        TimelineWeekView: TimelineView.extend({\n            options: {\n                name: \"TimelineWeekView\",\n                title: \"Timeline Week\",\n                selectedDateFormat: \"{0:D} - {1:D}\",\n                majorTick: 120\n            },\n            name: \"timelineWeek\",\n            calculateDateRange: function() {\n                var selectedDate = this.options.date,\n                    start = kendo.date.dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1),\n                    idx, length,\n                    dates = [];\n\n                for (idx = 0, length = 7; idx < length; idx++) {\n                    dates.push(start);\n                    start = kendo.date.nextDay(start);\n                }\n                this._render(dates);\n            }\n        }),\n        TimelineWorkWeekView: TimelineView.extend({\n            options: {\n                name: \"TimelineWorkWeekView\",\n                title: \"Timeline Work Week\",\n                selectedDateFormat: \"{0:D} - {1:D}\",\n                majorTick: 120\n            },\n            name: \"timelineWorkWeek\",\n            nextDate: function() {\n                return kendo.date.dayOfWeek(kendo.date.nextDay(this.endDate()), this.options.workWeekStart, 1);\n            },\n            previousDate: function() {\n                return kendo.date.previousDay(this.startDate());\n            },\n            calculateDateRange: function() {\n                var selectedDate = this.options.date,\n                    start = kendo.date.dayOfWeek(selectedDate, this.options.workWeekStart, -1),\n                    end = kendo.date.dayOfWeek(start, this.options.workWeekEnd, 1),\n                    dates = [];\n\n                while (start <= end) {\n                    dates.push(start);\n                    start = kendo.date.nextDay(start);\n                }\n                this._render(dates);\n            }\n        }),\n        TimelineMonthView: TimelineView.extend({\n            options: {\n                name: \"TimelineMonthView\",\n                title: \"Timeline Month\",\n                selectedDateFormat: \"{0:D} - {1:D}\",\n                workDayStart: new Date(1980, 1, 1, 0, 0, 0),\n                workDayEnd: new Date(1980, 1, 1, 0, 0, 0),\n                footer: false,\n                majorTick: 1440,\n                minorTickCount: 1\n            },\n            name: \"timelineMonth\",\n            calculateDateRange: function() {\n                var selectedDate = this.options.date,\n                    start = kendo.date.firstDayOfMonth(selectedDate),\n                    end = kendo.date.lastDayOfMonth(selectedDate),\n                    idx, length,\n                    dates = [];\n\n                for (idx = 0, length = end.getDate(); idx < length; idx++) {\n                    dates.push(start);\n                    start = kendo.date.nextDay(start);\n                }\n                this._render(dates);\n            }\n        })\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true */\n(function($, undefined) {\n    var kendo = window.kendo,\n        date = kendo.date,\n        input_support = kendo.support.input,\n        MS_PER_DAY = date.MS_PER_DAY,\n        getDate = date.getDate,\n        getMilliseconds = kendo.date.getMilliseconds,\n        recurrence = kendo.recurrence,\n        keys = kendo.keys,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        DataBoundWidget = ui.DataBoundWidget,\n        STRING = \"string\",\n        Popup = ui.Popup,\n        Calendar = ui.Calendar,\n        DataSource = kendo.data.DataSource,\n        isPlainObject = $.isPlainObject,\n        extend = $.extend,\n        proxy = $.proxy,\n        toString = Object.prototype.toString,\n        isArray = $.isArray,\n        NS = \".kendoScheduler\",\n        CLICK = \"click\",\n        CHANGE = \"change\",\n        CANCEL = \"cancel\",\n        REMOVE = \"remove\",\n        SAVE = \"save\",\n        ADD = \"add\",\n        EDIT = \"edit\",\n        valueStartEndBoundRegex = /(?:value:start|value:end)(?:,|$)/,\n        TODAY = getDate(new Date()),\n        RECURRENCE_EXCEPTION = \"recurrenceException\",\n        DELETECONFIRM = \"Are you sure you want to delete this event?\",\n        DELETERECURRING = \"Do you want to delete only this event occurrence or the whole series?\",\n        EDITRECURRING = \"Do you want to edit only this event occurrence or the whole series?\",\n        COMMANDBUTTONTMPL = '<a class=\"k-button #=className#\" #=attr# href=\"\\\\#\">#=text#</a>',\n        TOOLBARTEMPLATE = kendo.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' +\n           '# if (pdf) { #' +\n           '<ul class=\"k-reset k-scheduler-tools\">' +\n               '<li><a role=\"button\" href=\"\\\\#\" class=\"k-button k-pdf\"><span class=\"k-icon k-i-pdf\"></span>${messages.pdf}</a></li>' +\n           '</ul>' +\n           '# } #' +\n            '<ul class=\"k-reset k-scheduler-navigation\">' +\n               '<li class=\"k-state-default k-header k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li>' +\n               '<li class=\"k-state-default k-header k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-w\"></span></a></li>' +\n               '<li class=\"k-state-default k-header k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-e\"></span></a></li>' +\n               '<li class=\"k-state-default k-nav-current\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-calendar\"></span><span data-#=ns#bind=\"text: formattedDate\"></span></a></li>' +\n            '</ul>' +\n            '<ul class=\"k-reset k-header k-scheduler-views\">' +\n                '#for(var view in views){#' +\n                    '<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>' +\n                '#}#'  +\n            '</ul>' +\n            '</div>'),\n        MOBILETOOLBARTEMPLATE = kendo.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' +\n            '<ul class=\"k-reset k-header k-scheduler-navigation\">' +\n               '<li class=\"k-state-default k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li>' +\n            '</ul>' +\n            '<ul class=\"k-reset k-header k-scheduler-views\">' +\n                '#for(var view in views){#' +\n                    '<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>' +\n                '#}#'  +\n            '</ul>' +\n            '</div>'+\n            '<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' +\n                '<ul class=\"k-reset k-header k-scheduler-navigation\">' +\n                   '<li class=\"k-state-default k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-w\"></span></a></li>' +\n                   '<li class=\"k-state-default k-nav-current\"><span data-#=ns#bind=\"text: formattedDate\"></span></li>' +\n                   '<li class=\"k-state-default k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-e\"></span></a></li>' +\n                '</ul>' +\n            '</div>'),\n        MOBILEDATERANGEEDITOR = function(container, options) {\n            var attr = { name: options.field };\n            var datepicker_role = !input_support.date ? kendo.attr(\"role\") + '=\"datepicker\" ' : \"\";\n            var datetimepicker_role = kendo.attr(\"role\") + '=\"datetimepicker\" ';\n            var isAllDay = options.model.isAllDay;\n            var dateTimeValidate = kendo.attr(\"validate\") + \"='\" + (!isAllDay) + \"'\";\n            var dateValidate = kendo.attr(\"validate\") + \"='\" + isAllDay + \"'\";\n\n            appendTimezoneAttr(attr, options);\n            appendDateCompareValidator(attr, options);\n\n            $('<input type=\"datetime-local\" required ' + kendo.attr(\"type\") + '=\"date\" ' + datetimepicker_role + kendo.attr(\"bind\") + '=\"value:' + options.field +',invisible:isAllDay\" ' +\n                dateTimeValidate + '/>')\n                .attr(attr).appendTo(container);\n\n            $('<input type=\"date\" required ' + kendo.attr(\"type\") + '=\"date\" ' + datepicker_role + kendo.attr(\"bind\") + '=\"value:' + options.field +',visible:isAllDay\" ' +\n                dateValidate + '/>')\n                .attr(attr).appendTo(container);\n\n            $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n        },\n        DATERANGEEDITOR = function(container, options) {\n            var attr = { name: options.field },\n                isAllDay = options.model.isAllDay,\n                dateTimeValidate = kendo.attr(\"validate\") + \"='\" + (!isAllDay) + \"' \",\n                dateValidate = kendo.attr(\"validate\") + \"='\" + isAllDay + \"' \";\n\n            appendTimezoneAttr(attr, options);\n            appendDateCompareValidator(attr, options);\n\n            $('<input type=\"text\" required ' + kendo.attr(\"type\") + '=\"date\"' + ' ' + kendo.attr(\"role\") + '=\"datetimepicker\" ' + kendo.attr(\"bind\") + '=\"value:' + options.field +',invisible:isAllDay\" ' +\n                dateTimeValidate + '/>')\n            .attr(attr).appendTo(container);\n\n            $('<input type=\"text\" required ' + kendo.attr(\"type\") + '=\"date\"' + ' '  + kendo.attr(\"role\") + '=\"datepicker\" ' + kendo.attr(\"bind\") + '=\"value:' + options.field +',visible:isAllDay\" ' +\n                dateValidate + '/>')\n            .attr(attr).appendTo(container);\n\n            $('<span ' + kendo.attr(\"bind\") + '=\"text: ' + options.field + 'Timezone\"></span>').appendTo(container);\n\n            if (options.field === \"end\") {\n                $('<span ' + kendo.attr(\"bind\") + '=\"text: startTimezone, invisible: endTimezone\"></span>').appendTo(container);\n            }\n\n            $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n        },\n        RECURRENCEEDITOR = function(container, options) {\n            $('<div ' + kendo.attr(\"bind\") + '=\"value:' + options.field +'\" />')\n                .attr({\n                    name: options.field\n                })\n                .appendTo(container)\n                .kendoRecurrenceEditor({\n                    start: options.model.start,\n                    timezone: options.timezone,\n                    messages: options.messages\n                });\n        },\n        MOBILERECURRENCEEDITOR = function(container, options) {\n            $('<div ' + kendo.attr(\"bind\") + '=\"value:' + options.field +'\" />')\n                .attr({\n                    name: options.field\n                })\n                .appendTo(container)\n                .kendoMobileRecurrenceEditor({\n                    start: options.model.start,\n                    timezone: options.timezone,\n                    messages: options.messages,\n                    pane: options.pane,\n                    value: options.model[options.field]\n                });\n        },\n        MOBILETIMEZONEPOPUP = function(container, options) {\n            var text = timezoneButtonText(options.model, options.messages.noTimezone);\n\n            $('<a href=\"#\" class=\"k-button k-timezone-button\" data-bind=\"invisible:isAllDay\">' + text + '</a>').click(options.click).appendTo(container);\n        },\n        TIMEZONEPOPUP = function(container, options) {\n            $('<a href=\"#\" class=\"k-button\" data-bind=\"invisible:isAllDay\">' + options.messages.timezoneEditorButton + '</a>').click(options.click).appendTo(container);\n        },\n        MOBILETIMEZONEEDITOR = function(container, options) {\n            $('<div ' + kendo.attr(\"bind\") + '=\"value:' + options.field +'\" />')\n                .attr({\n                    name: options.field\n                })\n                .toggle(options.visible)\n                .appendTo(container)\n                .kendoMobileTimezoneEditor({\n                    optionLabel: options.noTimezone\n                });\n        },\n        TIMEZONEEDITOR = function(container, options) {\n            $('<div ' + kendo.attr(\"bind\") + '=\"value:' + options.field +'\" />')\n                .attr({ name: options.field })\n                .toggle(options.visible)\n                .appendTo(container)\n                .kendoTimezoneEditor({\n                    optionLabel: options.noTimezone\n                });\n        };\n\n    function timezoneButtonText(model, message) {\n        message = message || \"\";\n\n        if (model.startTimezone) {\n            message = model.startTimezone;\n\n            if (model.endTimezone) {\n                message += \" | \" + model.endTimezone;\n            }\n        }\n\n        return message;\n    }\n\n    function appendTimezoneAttr(attrs, options) {\n        var timezone = options.timezone;\n\n        if (timezone) {\n            attrs[kendo.attr(\"timezone\")] = timezone;\n        }\n    }\n\n    function appendDateCompareValidator(attrs, options) {\n        var validationRules = options.model.fields[options.field].validation;\n\n        if (validationRules) {\n            var dateCompareRule = validationRules.dateCompare;\n            if (dateCompareRule && isPlainObject(dateCompareRule) && dateCompareRule.message) {\n                attrs[kendo.attr(\"dateCompare-msg\")] = dateCompareRule.message;\n            }\n        }\n    }\n\n    function wrapDataAccess(originalFunction, timezone) {\n        return function(data) {\n            data = originalFunction(data);\n\n            convertData(data, \"apply\",  timezone);\n\n            return data || [];\n        };\n    }\n\n    function wrapDataSerialization(originalFunction, timezone) {\n        return function(data) {\n\n            if (data) {\n                if (toString.call(data) !== \"[object Array]\" && !(data instanceof kendo.data.ObservableArray)) {\n                    data = [data];\n                }\n            }\n\n            convertData(data, \"remove\",  timezone, true);\n\n            data = originalFunction(data);\n\n            return data || [];\n        };\n    }\n\n    function convertData(data, method, timezone, removeUid) {\n        var event,\n            idx,\n            length;\n\n        data = data || [];\n\n        for (idx = 0, length = data.length; idx < length; idx++) {\n            event = data[idx];\n\n            if (removeUid) {\n                if (event.startTimezone || event.endTimezone) {\n                    if (timezone) {\n                        event.start = kendo.timezone.convert(event.start, event.startTimezone || event.endTimezone, timezone);\n                        event.end = kendo.timezone.convert(event.end, event.endTimezone || event.startTimezone, timezone);\n\n                        event.start = kendo.timezone[method](event.start, timezone);\n                        event.end = kendo.timezone[method](event.end, timezone);\n                    } else {\n                        event.start = kendo.timezone[method](event.start, event.startTimezone || event.endTimezone);\n                        event.end = kendo.timezone[method](event.end, event.endTimezone || event.startTimezone);\n                    }\n\n                } else if (timezone) {\n                    event.start = kendo.timezone[method](event.start, timezone);\n                    event.end = kendo.timezone[method](event.end, timezone);\n                }\n            } else {\n                if (event.startTimezone || event.endTimezone) {\n                    event.start = kendo.timezone[method](event.start, event.startTimezone || event.endTimezone);\n                    event.end = kendo.timezone[method](event.end, event.endTimezone || event.startTimezone);\n\n                    if (timezone) {\n                        event.start = kendo.timezone.convert(event.start, event.startTimezone || event.endTimezone, timezone);\n                        event.end = kendo.timezone.convert(event.end, event.endTimezone || event.startTimezone, timezone);\n                    }\n\n                } else if (timezone) {\n                    event.start = kendo.timezone[method](event.start, timezone);\n                    event.end = kendo.timezone[method](event.end, timezone);\n                }\n            }\n\n            if (removeUid) {\n                delete event.uid;\n            }\n        }\n        return data;\n    }\n\n    function getOccurrenceByUid(data, uid) {\n        var length = data.length,\n            idx = 0,\n            event;\n\n        for (; idx < length; idx++) {\n            event = data[idx];\n\n            if (event.uid === uid) {\n                return event;\n            }\n        }\n    }\n\n    var SchedulerDataReader = kendo.Class.extend({\n        init: function(schema, reader) {\n            var timezone = schema.timezone;\n\n            this.reader = reader;\n\n            if (reader.model) {\n                this.model = reader.model;\n            }\n\n            this.timezone = timezone;\n            this.data = wrapDataAccess($.proxy(this.data, this), timezone);\n            this.serialize = wrapDataSerialization($.proxy(this.serialize, this), timezone);\n        },\n        errors: function(data) {\n            return this.reader.errors(data);\n        },\n        parse: function(data) {\n            return this.reader.parse(data);\n        },\n        data: function(data) {\n            return this.reader.data(data);\n        },\n        total: function(data) {\n            return this.reader.total(data);\n        },\n        groups: function(data) {\n            return this.reader.groups(data);\n        },\n        aggregates: function(data) {\n            return this.reader.aggregates(data);\n        },\n        serialize: function(data) {\n            return this.reader.serialize(data);\n        }\n    });\n\n    function applyZone(date, fromZone, toZone) {\n        if (toZone) {\n            date = kendo.timezone.convert(date, fromZone, toZone);\n        } else {\n            date = kendo.timezone.remove(date, fromZone);\n        }\n\n        return date;\n    }\n\n    function dateCompareValidator(input) {\n        if (input.filter(\"[name=end]\").length) {\n            var container = input.closest(\".k-scheduler-edit-form\");\n            var startInput = container.find(\"[name=start]:visible\");\n            var endInput = container.find(\"[name=end]:visible\");\n\n            if (endInput[0] && startInput[0]) {\n                var start, end;\n                var startPicker = kendo.widgetInstance(startInput, kendo.ui);\n                var endPicker = kendo.widgetInstance(endInput, kendo.ui);\n\n                var editable = container.data(\"kendoEditable\");\n                var model = editable ? editable.options.model : null;\n\n                if (startPicker && endPicker) {\n                    start = startPicker.value();\n                    end = endPicker.value();\n                } else {\n                    start = kendo.parseDate(startInput.val());\n                    end = kendo.parseDate(endInput.val());\n                }\n\n                if (start && end) {\n                    if (model) {\n                        var timezone = startInput.attr(kendo.attr(\"timezone\"));\n                        var startTimezone = model.startTimezone;\n                        var endTimezone = model.endTimezone;\n\n                        startTimezone = startTimezone || endTimezone;\n                        endTimezone = endTimezone || startTimezone;\n\n                        if (startTimezone) {\n                            start = applyZone(start, startTimezone, timezone);\n                            end = applyZone(end, endTimezone, timezone);\n                        }\n                    }\n\n                    return start <= end;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    var SchedulerEvent = kendo.data.Model.define({\n        init: function(value) {\n            var that = this;\n\n            kendo.data.Model.fn.init.call(that, value);\n\n            that._defaultId = that.defaults[that.idField];\n        },\n\n        _time: function(field) {\n            var date = this[field];\n            var fieldTime = \"_\" + field + \"Time\";\n\n            if (this[fieldTime]) {\n                return this[fieldTime] - kendo.date.toUtcTime(kendo.date.getDate(date));\n            }\n\n            return getMilliseconds(date);\n        },\n\n        _date: function(field) {\n            var fieldTime = \"_\" + field + \"Time\";\n\n            if (this[fieldTime]) {\n                return this[fieldTime] - this._time(field);\n            }\n\n            return kendo.date.getDate(this[field]);\n        },\n\n        clone: function(options, updateUid) {\n            var uid = this.uid,\n                event = new this.constructor($.extend({}, this.toJSON(), options));\n\n            if (!updateUid) {\n                event.uid = uid;\n            }\n\n            return event;\n        },\n\n        duration: function() {\n            var end = this.end;\n            var start = this.start;\n            var offset = (end.getTimezoneOffset() - start.getTimezoneOffset()) * kendo.date.MS_PER_MINUTE;\n\n            return end - start - offset;\n        },\n\n        expand: function(start, end, zone) {\n            return recurrence ? recurrence.expand(this, start, end, zone) : [this];\n        },\n\n        update: function(eventInfo) {\n            for (var field in eventInfo) {\n                this.set(field, eventInfo[field]);\n            }\n\n            if (this._startTime) {\n                this.set(\"_startTime\", kendo.date.toUtcTime(this.start));\n            }\n\n            if (this._endTime) {\n                this.set(\"_endTime\", kendo.date.toUtcTime(this.end));\n            }\n        },\n\n        isMultiDay: function() {\n            return this.isAllDay || this.duration() >= kendo.date.MS_PER_DAY;\n        },\n\n        isException: function() {\n            return !this.isNew() && this.recurrenceId;\n        },\n\n        isOccurrence: function() {\n            return this.isNew() && this.recurrenceId;\n        },\n\n        isRecurring: function() {\n            return !!(this.recurrenceRule || this.recurrenceId);\n        },\n\n        isRecurrenceHead: function() {\n            return !!(this.id && this.recurrenceRule);\n        },\n\n        toOccurrence: function(options) {\n            options = $.extend(options, {\n                recurrenceException: null,\n                recurrenceRule: null,\n                recurrenceId: this.id || this.recurrenceId\n            });\n\n            options[this.idField] = this.defaults[this.idField];\n\n            return this.clone(options, true);\n        },\n\n        toJSON: function() {\n            var obj = kendo.data.Model.fn.toJSON.call(this);\n            obj.uid = this.uid;\n\n            delete obj._startTime;\n            delete obj._endTime;\n\n            return obj;\n        },\n\n        shouldSerialize: function(field) {\n            return kendo.data.Model.fn.shouldSerialize.call(this, field) && field !== \"_defaultId\";\n        },\n\n        set: function(key, value) {\n            var isAllDay = this.isAllDay || false;\n\n            kendo.data.Model.fn.set.call(this, key, value);\n\n            if (key == \"isAllDay\" && value != isAllDay) {\n                var start = kendo.date.getDate(this.start);\n                var end = new Date(this.end);\n                var milliseconds = kendo.date.getMilliseconds(end);\n\n                if (milliseconds === 0 && value) {\n                    milliseconds = MS_PER_DAY;\n                }\n\n                this.set(\"start\", start);\n\n                if (value === true) {\n                    kendo.date.setTime(end, -milliseconds);\n\n                    if (end < start) {\n                        end = start;\n                    }\n                } else {\n                    kendo.date.setTime(end, MS_PER_DAY - milliseconds);\n                }\n\n                this.set(\"end\", end);\n            }\n        },\n        id: \"id\",\n        fields: {\n            id: { type: \"number\" },\n            title: { defaultValue: \"\", type: \"string\" },\n            start: { type: \"date\", validation: { required: true } },\n            startTimezone: { type: \"string\" },\n            end: { type: \"date\", validation: { required: true, dateCompare: { value: dateCompareValidator, message: \"End date should be greater than or equal to the start date\"}} },\n            endTimezone: { type: \"string\" },\n            recurrenceRule: { defaultValue: \"\", type: \"string\" },\n            recurrenceException: { defaultValue: \"\", type: \"string\" },\n            isAllDay: { type: \"boolean\", defaultValue: false },\n            description: { type: \"string\" }\n        }\n    });\n\n    var SchedulerDataSource = DataSource.extend({\n        init: function(options) {\n\n            DataSource.fn.init.call(this, extend(true, {}, {\n                schema: {\n                    modelBase: SchedulerEvent,\n                    model: SchedulerEvent\n                }\n            }, options));\n\n            this.reader = new SchedulerDataReader(this.options.schema, this.reader);\n        },\n\n        expand: function(start, end) {\n            var data = this.view(),\n                filter = {};\n\n            if (start && end) {\n                end = new Date(end.getTime() + MS_PER_DAY - 1);\n\n                filter = {\n                    logic: \"or\",\n                    filters: [\n                        {\n                            logic: \"and\",\n                            filters: [\n                                { field: \"start\", operator: \"gte\", value: start },\n                                { field: \"end\", operator: \"gte\", value: start },\n                                { field: \"start\", operator: \"lte\", value: end }\n                            ]\n                        },\n                        {\n                            logic: \"and\",\n                            filters: [\n                                { field: \"start\", operator: \"lte\", value: new Date(start.getTime() + MS_PER_DAY - 1) },\n                                { field: \"end\", operator: \"gte\", value: start }\n                            ]\n                        }\n                    ]\n                };\n\n                data = new kendo.data.Query(expandAll(data, start, end, this.reader.timezone)).filter(filter).toArray();\n            }\n\n            return data;\n        },\n\n        cancelChanges: function(model) {\n            if (model && model.isOccurrence()) {\n                this._removeExceptionDate(model);\n            }\n\n            DataSource.fn.cancelChanges.call(this, model);\n        },\n\n        insert: function(index, model) {\n            if (!model) {\n                return;\n            }\n\n            if (!(model instanceof SchedulerEvent)) {\n                var eventInfo = model;\n\n                model = this._createNewModel();\n                model.accept(eventInfo);\n            }\n\n            if ((!this._pushCreated && model.isRecurrenceHead()) || model.recurrenceId) {\n                model = model.recurrenceId ? model : model.toOccurrence();\n                this._addExceptionDate(model);\n            }\n\n            return DataSource.fn.insert.call(this, index, model);\n        },\n\n        pushCreate: function(items) {\n            this._pushCreated = true;\n            DataSource.fn.pushCreate.call(this, items);\n            this._pushCreated = false;\n        },\n\n        remove: function(model) {\n            if (model.isRecurrenceHead()) {\n                this._removeExceptions(model);\n            } else if (model.isRecurring()) {\n                this._addExceptionDate(model);\n            }\n\n            return DataSource.fn.remove.call(this, model);\n        },\n\n        _removeExceptions: function(model) {\n            var data = this.data().slice(0),\n                item = data.shift(),\n                id = model.id;\n\n            while(item) {\n                if (item.recurrenceId === id) {\n                    DataSource.fn.remove.call(this, item);\n                }\n\n                item = data.shift();\n            }\n\n            model.set(RECURRENCE_EXCEPTION, \"\");\n        },\n\n        _removeExceptionDate: function(model) {\n            if (model.recurrenceId) {\n                var head = this.get(model.recurrenceId);\n\n                if (head) {\n                    var start = model.start;\n\n                    head.set(RECURRENCE_EXCEPTION, head.recurrenceException.replace(recurrence.toExceptionString(start, this.reader.timezone), \"\"));\n                }\n            }\n        },\n\n        _addExceptionDate: function(model) {\n            var start = model.start;\n            var zone = this.reader.timezone;\n            var head = this.get(model.recurrenceId);\n            var recurrenceException = head.recurrenceException || \"\";\n\n            if (!recurrence.isException(recurrenceException, start, zone)) {\n                head.set(RECURRENCE_EXCEPTION, recurrenceException + recurrence.toExceptionString(start, zone));\n            }\n        }\n    });\n\n    function expandAll(events, start, end, zone) {\n        var length = events.length,\n            data = [],\n            idx = 0;\n\n        for (; idx < length; idx++) {\n            data = data.concat(events[idx].expand(start, end, zone));\n        }\n\n        return data;\n    }\n\n    SchedulerDataSource.create = function(options) {\n        options = options && options.push ? { data: options } : options;\n\n        var dataSource = options || {},\n            data = dataSource.data;\n\n        dataSource.data = data;\n\n        if (!(dataSource instanceof SchedulerDataSource) && dataSource instanceof kendo.data.DataSource) {\n            throw new Error(\"Incorrect DataSource type. Only SchedulerDataSource instances are supported\");\n        }\n\n        return dataSource instanceof SchedulerDataSource ? dataSource : new SchedulerDataSource(dataSource);\n    };\n\n    extend(true, kendo.data, {\n       SchedulerDataSource: SchedulerDataSource,\n       SchedulerDataReader: SchedulerDataReader,\n       SchedulerEvent: SchedulerEvent\n    });\n\n    var defaultCommands = {\n        update: {\n            text: \"Save\",\n            className: \"k-primary k-scheduler-update\"\n        },\n        canceledit: {\n            text: \"Cancel\",\n            className: \"k-scheduler-cancel\"\n        },\n        destroy: {\n            text: \"Delete\",\n            imageClass: \"k-delete\",\n            className: \"k-primary k-scheduler-delete\",\n            iconClass: \"k-icon\"\n        }\n    };\n\n    function trimOptions(options) {\n        delete options.name;\n        delete options.prefix;\n\n        delete options.remove;\n        delete options.edit;\n        delete options.add;\n        delete options.navigate;\n\n        return options;\n    }\n\n    function fieldType(field) {\n        field = field != null ? field : \"\";\n        return field.type || $.type(field) || \"string\";\n    }\n\n    function createValidationAttributes(model, field) {\n        var modelField = (model.fields || model)[field];\n        var specialRules = [\"url\", \"email\", \"number\", \"date\", \"boolean\"];\n        var validation = modelField ? modelField.validation : {};\n        var type = fieldType(modelField);\n        var datatype = kendo.attr(\"type\");\n        var inArray = $.inArray;\n        var ruleName;\n        var rule;\n\n        var attr = {};\n\n        for (ruleName in validation) {\n            rule = validation[ruleName];\n\n            if (inArray(ruleName, specialRules) >= 0) {\n                attr[datatype] = ruleName;\n            } else if (!kendo.isFunction(rule)) {\n                attr[ruleName] = isPlainObject(rule) ? (rule.value || ruleName) : rule;\n            }\n\n            attr[kendo.attr(ruleName + \"-msg\")] = rule.message;\n        }\n\n        return attr;\n    }\n\n    function dropDownResourceEditor(resource, model) {\n        var attr = createValidationAttributes(model, resource.field);\n\n        return function(container) {\n           $(kendo.format('<select data-{0}bind=\"value:{1}\">', kendo.ns, resource.field))\n             .appendTo(container)\n             .attr(attr)\n             .kendoDropDownList({\n                 dataTextField: resource.dataTextField,\n                 dataValueField: resource.dataValueField,\n                 dataSource: resource.dataSource,\n                 valuePrimitive: resource.valuePrimitive,\n                 optionLabel: \"None\",\n                 template: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField)\n             });\n       };\n    }\n\n    function dropDownResourceEditorMobile(resource, model) {\n        var attr = createValidationAttributes(model, resource.field);\n\n        return function(container) {\n            var options = '';\n            var view = resource.dataSource.view();\n\n            for (var idx = 0, length = view.length; idx < length; idx++) {\n                options += kendo.format('<option value=\"{0}\">{1}</option>',\n                    kendo.getter(resource.dataValueField)(view[idx]),\n                    kendo.getter(resource.dataTextField)(view[idx])\n                );\n            }\n\n           $(kendo.format('<select data-{0}bind=\"value:{1}\">{2}</select>', kendo.ns, resource.field, options))\n             .appendTo(container)\n             .attr(attr);\n       };\n    }\n\n    function descriptionEditor(options) {\n        var attr = createValidationAttributes(options.model, options.field);\n\n        return function(container) {\n            $('<textarea name=\"description\" class=\"k-textbox\"/>').attr(attr)\n                .appendTo(container);\n        };\n    }\n\n    function multiSelectResourceEditor(resource, model) {\n        var attr = createValidationAttributes(model, resource.field);\n\n        return function(container) {\n           $(kendo.format('<select data-{0}bind=\"value:{1}\">', kendo.ns, resource.field))\n             .appendTo(container)\n             .attr(attr)\n             .kendoMultiSelect({\n                 dataTextField: resource.dataTextField,\n                 dataValueField: resource.dataValueField,\n                 dataSource: resource.dataSource,\n                 valuePrimitive: resource.valuePrimitive,\n                 itemTemplate: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField),\n                 tagTemplate: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField)\n             });\n       };\n    }\n\n    function multiSelectResourceEditorMobile(resource, model) {\n        var attr = createValidationAttributes(model, resource.field);\n\n        return function(container) {\n            var options = \"\";\n            var view = resource.dataSource.view();\n\n            for (var idx = 0, length = view.length; idx < length; idx++) {\n                options += kendo.format('<option value=\"{0}\">{1}</option>',\n                    kendo.getter(resource.dataValueField)(view[idx]),\n                    kendo.getter(resource.dataTextField)(view[idx])\n                );\n            }\n\n            $(kendo.format('<select data-{0}bind=\"value:{1}\" multiple=\"multiple\" data-{0}value-primitive=\"{3}\">{2}</select>',\n                kendo.ns,\n                resource.field,\n                options,\n                resource.valuePrimitive\n             ))\n             .appendTo(container)\n             .attr(attr);\n       };\n    }\n\n    function moveEventRange(event, distance) {\n        var duration = event.end.getTime() - event.start.getTime();\n\n        var start = new Date(event.start.getTime());\n\n        kendo.date.setTime(start, distance);\n\n        var end = new Date(start.getTime());\n\n        kendo.date.setTime(end, duration, true);\n\n        return {\n            start: start,\n            end: end\n        };\n    }\n\n    var editors = {\n        mobile: {\n            dateRange: MOBILEDATERANGEEDITOR,\n            timezonePopUp: MOBILETIMEZONEPOPUP,\n            timezone: MOBILETIMEZONEEDITOR,\n            recurrence: MOBILERECURRENCEEDITOR,\n            description: descriptionEditor,\n            multipleResources: multiSelectResourceEditorMobile,\n            resources: dropDownResourceEditor\n        },\n        desktop: {\n            dateRange: DATERANGEEDITOR,\n            timezonePopUp: TIMEZONEPOPUP,\n            timezone: TIMEZONEEDITOR,\n            recurrence: RECURRENCEEDITOR,\n            description: descriptionEditor,\n            multipleResources: multiSelectResourceEditor,\n            resources: dropDownResourceEditor\n        }\n    };\n\n    var Editor = kendo.Observable.extend({\n        init: function(element, options) {\n\n            kendo.Observable.fn.init.call(this);\n\n            this.element = element;\n            this.options = extend(true, {}, this.options, options);\n            this.createButton = this.options.createButton;\n\n            this.toggleDateValidationHandler = proxy(this._toggleDateValidation, this);\n        },\n\n        _toggleDateValidation: function(e) {\n            if (e.field == \"isAllDay\") {\n                var container = this.container,\n                    isAllDay = this.editable.options.model.isAllDay,\n                    bindAttribute = kendo.attr(\"bind\"),\n                    element, isDateTimeInput, shouldValidate;\n                container.find(\"[\" + bindAttribute+ \"*=end],[\" + bindAttribute + \"*=start]\").each(function() {\n                    element = $(this);\n                    if (valueStartEndBoundRegex.test(element.attr(bindAttribute))) {\n                        isDateTimeInput = element.is(\"[\" + kendo.attr(\"role\") + \"=datetimepicker],[type*=datetime]\");\n                        shouldValidate = isAllDay !== isDateTimeInput;\n                        element.attr(kendo.attr(\"validate\"), shouldValidate);\n                    }\n                });\n            }\n        },\n\n        fields: function(editors, model) {\n            var that = this;\n\n            var messages = that.options.messages;\n            var timezone = that.options.timezone;\n\n            var click = function(e) {\n                e.preventDefault();\n                that._initTimezoneEditor(model, this);\n            };\n\n            var fields = [\n                { field: \"title\", title: messages.editor.title /*, format: field.format, editor: field.editor, values: field.values*/ },\n                { field: \"start\", title: messages.editor.start, editor: editors.dateRange, timezone: timezone },\n                { field: \"end\", title: messages.editor.end, editor: editors.dateRange, timezone: timezone },\n                { field: \"isAllDay\", title: messages.editor.allDayEvent }\n            ];\n\n            if (kendo.timezone.windows_zones) {\n                fields.push({ field: \"timezone\", title: messages.editor.timezone, editor: editors.timezonePopUp, click: click, messages: messages.editor, model: model });\n                fields.push({ field: \"startTimezone\", title: messages.editor.startTimezone, editor: editors.timezone, noTimezone: messages.editor.noTimezone });\n                fields.push({ field: \"endTimezone\", title: messages.editor.endTimezone, editor: editors.timezone, noTimezone: messages.editor.noTimezone });\n            }\n\n            if (!model.recurrenceId) {\n                fields.push({ field: \"recurrenceRule\", title: messages.editor.repeat, editor: editors.recurrence, timezone: timezone, messages: messages.recurrenceEditor, pane: this.pane });\n            }\n\n            if (\"description\" in model) {\n                fields.push({ field: \"description\", title: messages.editor.description, editor: editors.description({model: model, field: \"description\"}) });\n            }\n\n            for (var resourceIndex = 0; resourceIndex < this.options.resources.length; resourceIndex++) {\n                var resource = this.options.resources[resourceIndex];\n                fields.push({\n                    field: resource.field,\n                    title: resource.title,\n                    editor: resource.multiple? editors.multipleResources(resource, model) : editors.resources(resource, model)\n                });\n            }\n\n            return fields;\n        },\n\n        end: function() {\n            return this.editable.end();\n        },\n\n        _buildEditTemplate: function(model, fields, editableFields) {\n            var messages = this.options.messages;\n            var settings = extend({}, kendo.Template, this.options.templateSettings);\n            var paramName = settings.paramName;\n            var template = this.options.editable.template;\n\n            var html = \"\";\n\n            if (template) {\n                if (typeof template === STRING) {\n                    template = window.unescape(template);\n                }\n                html += (kendo.template(template, settings))(model);\n            } else {\n                for (var idx = 0, length = fields.length; idx < length; idx++) {\n                    var field = fields[idx];\n\n                    if (field.field === \"startTimezone\") {\n                        html += '<div class=\"k-popup-edit-form k-scheduler-edit-form k-scheduler-timezones\" style=\"display:none\">';\n                        html += '<div class=\"k-edit-form-container\">';\n                        html += '<div class=\"k-edit-label\"></div>';\n                        html += '<div class=\"k-edit-field\"><label class=\"k-check\"><input class=\"k-timezone-toggle\" type=\"checkbox\" />' + messages.editor.separateTimezones +'</label></div>';\n                    }\n\n                    html += '<div class=\"k-edit-label\"><label for=\"' + field.field + '\">' + (field.title || field.field || \"\") + '</label></div>';\n\n                    if ((!model.editable || model.editable(field.field))) {\n                        editableFields.push(field);\n                        html += '<div ' + kendo.attr(\"container-for\") + '=\"' + field.field + '\" class=\"k-edit-field\"></div>';\n                    } else {\n                        var tmpl = \"#:\";\n\n                        if (field.field) {\n                            field = kendo.expr(field.field, paramName);\n                            tmpl += field + \"==null?'':\" + field;\n                        } else {\n                            tmpl += \"''\";\n                        }\n\n                        tmpl += \"#\";\n\n                        tmpl = kendo.template(tmpl, settings);\n\n                        html += '<div class=\"k-edit-field\">' + tmpl(model) + '</div>';\n                    }\n\n                    if (field.field === \"endTimezone\") {\n                        html += this._createEndTimezoneButton();\n                    }\n                }\n            }\n\n            return html;\n        },\n\n        _createEndTimezoneButton: function() {\n            return '</div></div>';\n        },\n\n        _revertTimezones: function(model) {\n            model.set(\"startTimezone\", this._startTimezone);\n            model.set(\"endTimezone\", this._endTimezone);\n\n            delete this._startTimezone;\n            delete this._endTimezone;\n        }\n    });\n\n    var MobileEditor = Editor.extend({\n        init: function() {\n            Editor.fn.init.apply(this, arguments);\n\n            this.pane = kendo.mobile.ui.Pane.wrap(this.element);\n            this.pane.element.parent().css(\"height\", this.options.height);\n            this.view = this.pane.view();\n            this._actionSheetButtonTemplate = kendo.template('<li><a #=attr# class=\"k-button #=className#\" href=\"\\\\#\">#:text#</a></li>');\n\n            this._actionSheetPopupOptions = $(document.documentElement).hasClass(\"km-root\") ? { modal: false } : {\n                align: \"bottom center\",\n                position: \"bottom center\",\n                effect: \"slideIn:up\"\n            };\n        },\n\n        options: {\n            animations: {\n                left: \"slide\",\n                right: \"slide:right\"\n            }\n        },\n\n        destroy: function() {\n            this.close();\n            this.unbind();\n            this.pane.destroy();\n        },\n\n        _initTimezoneEditor: function(model) {\n            var that = this;\n            var pane = that.pane;\n            var messages = that.options.messages;\n            var timezoneView = that.timezoneView;\n            var container = that.container.find(\".k-scheduler-timezones\");\n            var checkbox = container.find(\".k-timezone-toggle\");\n            var endTimezoneRow = container.find(\".k-edit-label:last\").add(container.find(\".k-edit-field:last\"));\n            var startTimezoneChange = function(e) {\n                if (e.field === \"startTimezone\") {\n                    var value = model.startTimezone;\n\n                    checkbox.prop(\"disabled\", !value);\n\n                    if (!value) {\n                        endTimezoneRow.hide();\n                        model.set(\"endTimezone\", \"\");\n                        checkbox.prop(\"checked\", false);\n                    }\n                }\n            };\n\n            that._startTimezone = model.startTimezone || \"\";\n            that._endTimezone = model.endTimezone || \"\";\n\n            if (!timezoneView) {\n                var html = '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\">' +\n                           '<div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">' + messages.cancel + '</a>' +\n                           messages.editor.timezoneTitle + '<a href=\"#\" class=\"k-button k-scheduler-update\">' + messages.save + '</a></div></div>';\n\n                this.timezoneView = timezoneView = pane.append(html);\n\n                timezoneView.contentElement().append(container.show());\n\n                timezoneView.element.on(CLICK + NS, \".k-scheduler-cancel, .k-scheduler-update\", function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    if ($(this).hasClass(\"k-scheduler-cancel\")) {\n                        that._revertTimezones(model);\n                    }\n\n                    model.unbind(\"change\", startTimezoneChange);\n\n                    var editView = pane.element.find(\"#edit\").data(\"kendoMobileView\");\n\n                    var text = timezoneButtonText(model, messages.editor.noTimezone);\n\n                    editView.contentElement().find(\".k-timezone-button\").text(text);\n\n                    pane.navigate(editView, that.options.animations.right);\n                });\n\n                checkbox.click(function() {\n                    endTimezoneRow.toggle(checkbox.prop(\"checked\"));\n                    model.set(\"endTimezone\", \"\");\n                });\n\n                model.bind(\"change\", startTimezoneChange);\n            }\n\n            checkbox.prop(\"checked\", model.endTimezone).prop(\"disabled\", !model.startTimezone);\n\n            if (model.endTimezone) {\n                endTimezoneRow.show();\n            } else {\n                endTimezoneRow.hide();\n            }\n\n            pane.navigate(timezoneView, that.options.animations.left);\n        },\n\n        _createActionSheetButton: function(options) {\n            options.template = this._actionSheetButtonTemplate;\n            return  this.createButton(options);\n        },\n\n        showDialog: function(options) {\n            var type = \"\";\n            var html = \"<ul><li class=\\\"km-actionsheet-title\\\">\" + options.title + \"</li>\";\n\n            var target = this.element.find(\".k-event[\" + kendo.attr(\"uid\") + \"='\" + options.model.uid + \"']\");\n\n            if (this.container) {\n                target = this.container.find(\".k-scheduler-delete\");\n\n                if (target[0]) {\n                    type = 'phone';\n                }\n            }\n\n            for (var buttonIndex = 0; buttonIndex < options.buttons.length; buttonIndex++) {\n                html+= this._createActionSheetButton(options.buttons[buttonIndex]);\n            }\n\n            html += \"</ul>\";\n\n            var actionSheet = $(html)\n                .appendTo(this.pane.view().element)\n                .kendoMobileActionSheet({\n                    type: type,\n                    cancel: this.options.messages.cancel,\n                    cancelTemplate: '<li class=\"km-actionsheet-cancel\"><a class=\"k-button\" href=\"\\\\#\">#:cancel#</a></li>',\n                    close: function() {\n                        this.destroy();\n                    },\n                    command: function(e) {\n                        var buttonIndex = actionSheet.element.find(\"li:not(.km-actionsheet-cancel) > .k-button\").index($(e.currentTarget));\n                        if (buttonIndex > -1) {\n                            actionSheet.close();\n                            options.buttons[buttonIndex].click();\n                        }\n                    },\n                    popup: this._actionSheetPopupOptions\n                })\n                .data(\"kendoMobileActionSheet\");\n\n            actionSheet.open(target);\n        },\n\n        editEvent: function(model) {\n            var pane = this.pane;\n            var html = \"\";\n\n            var messages = this.options.messages;\n            var updateText = messages.save;\n            var removeText = messages.destroy;\n            var cancelText = messages.cancel;\n            var titleText = messages.editor.editorTitle;\n\n            html += '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"edit\" ' + kendo.attr(\"uid\") + '=\"' + model.uid + '\">' +\n                '<div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">' + cancelText + '</a>' +\n                titleText + '<a href=\"#\" class=\"k-button k-scheduler-update\">' + updateText + '</a></div>';\n\n            var fields = this.fields(editors.mobile, model);\n\n            var that = this;\n\n            var editableFields = [];\n\n            html += this._buildEditTemplate(model, fields, editableFields);\n\n            if (!model.isNew() && this.options.editable && this.options.editable.destroy !== false) {\n                html += '<div class=\"k-edit-buttons\"><a href=\"#\" class=\"k-scheduler-delete k-button\">' + removeText + '</a></div>';\n            }\n\n            html += \"</div>\";\n\n            var view = pane.append(html);\n\n            var container = this.container = view.element;\n\n            this.editable = container.kendoEditable({\n                fields: editableFields,\n                model: model,\n                clearContainer: false,\n                target: that.options.target,\n\n                validateOnBlur: true\n            }).data(\"kendoEditable\");\n\n            // TODO: Replace this code with labels and for=\"ID\"\n            container.find(\"input[type=checkbox],input[type=radio]\")\n                     .parent(\".k-edit-field\")\n                     .addClass(\"k-check\")\n                     .prev(\".k-edit-label\")\n                     .addClass(\"k-check\")\n                     .click(function() {\n                         $(this).next().children(\"input\").click();\n                     });\n\n            if (!this.trigger(\"edit\", { container: container, model: model })) {\n\n                container.on(CLICK + NS, \"a.k-scheduler-edit, a.k-scheduler-cancel, a.k-scheduler-update, a.k-scheduler-delete\", function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    var button = $(this);\n\n                    if (!button.hasClass(\"k-scheduler-edit\")) {\n\n                        var name = \"cancel\";\n\n                        if (button.hasClass(\"k-scheduler-update\")) {\n                            name = \"save\";\n                        } else if (button.hasClass(\"k-scheduler-delete\")) {\n                            name = \"remove\";\n                        }\n\n                        that.trigger(name, { container: container, model: model });\n                    } else {\n                        pane.navigate(\"#edit\", that.options.animations.right);\n                    }\n                });\n\n                pane.navigate(view, that.options.animations.left);\n\n                model.bind(\"change\", that.toggleDateValidationHandler);\n            } else {\n                this.trigger(\"cancel\", { container: container, model: model });\n            }\n\n            return this.editable;\n        },\n\n        _views: function() {\n            return this.pane.element\n                    .find(kendo.roleSelector(\"view\"))\n                    .not(this.view.element);\n        },\n\n        close: function() {\n            if (this.container) {\n                this.pane.navigate(\"\", this.options.animations.right);\n\n                var views = this._views();\n                var view;\n\n                for (var idx = 0, length = views.length; idx < length; idx++) {\n                    view = views.eq(idx).data(\"kendoMobileView\");\n                    if (view) {\n                       view.purge();\n                    }\n                }\n\n                views.remove();\n\n                this.container = null;\n                if (this.editable) {\n                    this.editable.options.model.unbind(\"change\", this.toggleDateValidationHandler);\n                    this.editable.destroy();\n                    this.editable = null;\n                }\n                this.timezoneView = null;\n            }\n        }\n    });\n\n    var PopupEditor = Editor.extend({\n        destroy: function() {\n            this.close();\n            this.unbind();\n        },\n\n        editEvent: function(model) {\n            var that = this;\n            var editable = that.options.editable;\n            var html = '<div ' + kendo.attr(\"uid\") + '=\"' + model.uid + '\" class=\"k-popup-edit-form k-scheduler-edit-form\"><div class=\"k-edit-form-container\">';\n            var messages = that.options.messages;\n            var updateText = messages.save;\n            var cancelText = messages.cancel;\n            var deleteText = messages.destroy;\n\n            var fields = this.fields(editors.desktop, model);\n\n            var editableFields = [];\n\n            html += this._buildEditTemplate(model, fields, editableFields);\n\n            var attr;\n            var options = isPlainObject(editable) ? editable.window : {};\n\n            html += '<div class=\"k-edit-buttons k-state-default\">';\n            html += this.createButton({ name: \"update\", text: updateText, attr: attr }) + this.createButton({ name: \"canceledit\", text: cancelText, attr: attr });\n\n            if (!model.isNew() && editable.destroy !== false) {\n                html += this.createButton({ name: \"delete\", text: deleteText, attr: attr });\n            }\n\n            html += '</div></div></div>';\n\n            var container = this.container = $(html)\n                .appendTo(that.element).eq(0)\n                .kendoWindow(extend({\n                    modal: true,\n                    resizable: false,\n                    draggable: true,\n                    title: messages.editor.editorTitle,\n                    visible: false,\n                    close: function(e) {\n                        if (e.userTriggered) {\n                            if (that.trigger(CANCEL, { container: container, model: model })) {\n                                e.preventDefault();\n                            }\n                        }\n                    }\n                }, options));\n\n            that.editable = container.kendoEditable({\n                fields: editableFields,\n                model: model,\n                clearContainer: false,\n                validateOnBlur: true,\n                target: that.options.target\n            }).data(\"kendoEditable\");\n\n            if (!that.trigger(EDIT, { container: container, model: model })) {\n\n                container.data(\"kendoWindow\").center().open();\n\n                container.on(CLICK + NS, \"a.k-scheduler-cancel\", function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    that.trigger(CANCEL, { container: container, model: model });\n                });\n\n                container.on(CLICK + NS, \"a.k-scheduler-update\", function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    that.trigger(\"save\", { container: container, model: model });\n                });\n\n                container.on(CLICK + NS, \"a.k-scheduler-delete\", function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    that.trigger(REMOVE, { container: container, model: model });\n                });\n\n                model.bind(\"change\", that.toggleDateValidationHandler);\n            } else {\n                that.trigger(CANCEL, { container: container, model: model });\n            }\n\n            return that.editable;\n        },\n\n        close: function() {\n            var that = this;\n\n            var destroy = function() {\n                if (that.editable) {\n                    that.editable.options.model.unbind(\"change\", that.toggleDateValidationHandler);\n                    that.editable.destroy();\n                    that.editable = null;\n                    that.container = null;\n                }\n                if (that.popup) {\n                    that.popup.destroy();\n                    that.popup = null;\n                }\n            };\n\n            if (that.editable) {\n                if (that._timezonePopup && that._timezonePopup.data(\"kendoWindow\")) {\n                    that._timezonePopup.data(\"kendoWindow\").destroy();\n                    that._timezonePopup = null;\n                }\n\n                if (that.container.is(\":visible\")) {\n                    that.container.data(\"kendoWindow\").bind(\"deactivate\", destroy).close();\n                } else {\n                    destroy();\n                }\n            } else {\n                destroy();\n            }\n        },\n\n        _createEndTimezoneButton: function() {\n            var messages = this.options.messages;\n            var html = \"\";\n\n            html += '<div class=\"k-edit-buttons k-state-default\">';\n            html += this.createButton({ name: \"savetimezone\", text: messages.save }) + this.createButton({ name: \"canceltimezone\", text: messages.cancel });\n            html += '</div></div></div>';\n\n            return html;\n        },\n\n        showDialog: function(options) {\n            var html = kendo.format(\"<div class='k-popup-edit-form'><div class='k-edit-form-container'><p class='k-popup-message'>{0}</p>\", options.text);\n\n            html += '<div class=\"k-edit-buttons k-state-default\">';\n\n            for (var buttonIndex = 0; buttonIndex < options.buttons.length; buttonIndex++) {\n                html+= this.createButton(options.buttons[buttonIndex]);\n            }\n\n            html += '</div></div></div>';\n\n            var wrapper = this.element;\n\n            if (this.popup) {\n                this.popup.destroy();\n            }\n\n            var popup = this.popup = $(html).appendTo(wrapper)\n                               .eq(0)\n                               .on(\"click\", \".k-button\", function(e) {\n                                    e.preventDefault();\n\n                                    popup.close();\n\n                                    var buttonIndex = $(e.currentTarget).index();\n\n                                    options.buttons[buttonIndex].click();\n                               })\n                               .kendoWindow({\n                                   modal: true,\n                                   resizable: false,\n                                   draggable: false,\n                                   title: options.title,\n                                   visible: false,\n                                   close: function() {\n                                       this.destroy();\n                                       wrapper.focus();\n                                   }\n                               })\n                               .getKendoWindow();\n\n            popup.center().open();\n        },\n\n        _initTimezoneEditor: function(model, activator) {\n            var that = this;\n            var container = that.container.find(\".k-scheduler-timezones\");\n            var checkbox = container.find(\".k-timezone-toggle\");\n            var endTimezoneRow = container.find(\".k-edit-label:last\").add(container.find(\".k-edit-field:last\"));\n            var saveButton = container.find(\".k-scheduler-savetimezone\");\n            var cancelButton = container.find(\".k-scheduler-canceltimezone\");\n            var timezonePopup = that._timezonePopup;\n            var startTimezoneChange = function(e) {\n                if (e.field === \"startTimezone\") {\n                    var value = model.startTimezone;\n\n                    checkbox.prop(\"disabled\", !value);\n\n                    if (!value) {\n                        endTimezoneRow.hide();\n                        model.set(\"endTimezone\", \"\");\n                        checkbox.prop(\"checked\", false);\n                    }\n                }\n            };\n            var wnd;\n\n            that._startTimezone = model.startTimezone;\n            that._endTimezone = model.endTimezone;\n\n            if (!timezonePopup) {\n                that._timezonePopup = timezonePopup = container.kendoWindow({\n                    modal: true,\n                    resizable: false,\n                    draggable: true,\n                    title: that.options.messages.editor.timezoneEditorTitle,\n                    visible: false,\n                    close: function(e) {\n                        model.unbind(\"change\", startTimezoneChange);\n\n                        if (e.userTriggered) {\n                            that._revertTimezones(model);\n                        }\n\n                        if (activator) {\n                            activator.focus();\n                        }\n                    }\n                });\n\n                checkbox.click(function() {\n                    endTimezoneRow.toggle(checkbox.prop(\"checked\"));\n                    model.set(\"endTimezone\", \"\");\n                });\n\n                saveButton.click(function(e) {\n                    e.preventDefault();\n                    wnd.close();\n                });\n\n                cancelButton.click(function(e) {\n                    e.preventDefault();\n                    that._revertTimezones(model);\n                    wnd.close();\n                });\n\n                model.bind(\"change\", startTimezoneChange);\n            }\n\n            checkbox.prop(\"checked\", model.endTimezone).prop(\"disabled\", !model.startTimezone);\n\n            if (model.endTimezone) {\n                endTimezoneRow.show();\n            } else {\n                endTimezoneRow.hide();\n            }\n\n            wnd = timezonePopup.data(\"kendoWindow\");\n            wnd.center().open();\n        }\n    });\n\n    var Scheduler = DataBoundWidget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            if (!that.options.views || !that.options.views.length) {\n                that.options.views = [\"day\", \"week\"];\n            }\n\n            that.resources = [];\n\n            that._initModel();\n\n            that._wrapper();\n\n            that._views();\n\n            that._toolbar();\n\n            that._dataSource();\n\n            that._resources();\n\n            that._resizeHandler = proxy(that.resize, that);\n\n            that.wrapper.on(\"mousedown\" + NS + \" selectstart\" + NS, function(e) {\n                if (!$(e.target).is(\":kendoFocusable\")) {\n                    e.preventDefault();\n                }\n            });\n\n            if (that.options.editable && that.options.editable.resize !== false) {\n                that._resizable();\n            }\n\n            that._movable();\n\n            $(window).on(\"resize\" + NS, that._resizeHandler);\n\n            if(that.options.messages && that.options.messages.recurrence) {\n                recurrence.options = that.options.messages.recurrence;\n            }\n\n            that._selectable();\n\n            that._ariaId = kendo.guid();\n\n            that._createEditor();\n        },\n\n        dataItems: function() {\n            var that = this;\n            var items = that.items();\n            var events = that._data;\n            var eventsUids = $.map(items, function(item) {\n                return $(item).attr(\"data-uid\");\n            });\n            var i;\n            var key;\n\n            var dict = {};\n            var eventsUidsLength = eventsUids.length;\n            for (i = 0; i < eventsUidsLength; i++) {\n                dict[eventsUids[i]] = null;\n            }\n\n            var eventsCount = events.length;\n            for (i = 0; i < eventsCount; i++) {\n                var event = events[i];\n                if (dict[event.uid] !== undefined) {\n                    dict[event.uid] = event;\n                }\n            }\n\n            var sortedData = [];\n            for (key in dict) {\n                sortedData.push(dict[key]);\n            }\n\n            return sortedData;\n        },\n\n        _isMobile: function() {\n            var options = this.options;\n            return (options.mobile === true && kendo.support.mobileOS) || options.mobile === \"phone\" || options.mobile === \"tablet\";\n        },\n\n        _isMobilePhoneView: function() {\n            var options = this.options;\n            return (options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet) || options.mobile === \"phone\";\n        },\n\n        _selectable: function() {\n            var that = this,\n                wrapper = that.wrapper,\n                selectEvent = kendo.support.mobileOS ? \"touchend\" : \"mousedown\";\n\n            if (!that.options.selectable) {\n                return;\n            }\n\n            that._tabindex();\n\n            wrapper.on(selectEvent + NS, \".k-scheduler-header-all-day td, .k-scheduler-content td, .k-event\", function(e) {\n                var which = e.which;\n                var button = e.button;\n                var browser = kendo.support.browser;\n                var isRight = which && which === 3 || button && button == 2;\n\n                if (kendo.support.mobileOS && e.isDefaultPrevented()) {\n                    return;\n                }\n\n                if (!isRight) {\n                    that._createSelection(e.currentTarget);\n                }\n\n                wrapper.focus();\n\n                if (browser.msie && browser.version < 9) {\n                    setTimeout(function() {\n                        wrapper.focus();\n                    });\n                }\n            });\n\n            var mouseMoveHandler = $.proxy(that._mouseMove, that);\n\n            wrapper.on(\"mousedown\" + NS, \".k-scheduler-header-all-day td, .k-scheduler-content td\", function(e) {\n                var which = e.which;\n                var button = e.button;\n                var isRight = which && which === 3 || button && button == 2;\n\n                if (!isRight) {\n                    wrapper.on(\"mousemove\" + NS, \".k-scheduler-header-all-day td, .k-scheduler-content td\", mouseMoveHandler);\n                }\n            });\n\n            wrapper.on(\"mouseup\" + NS + \" mouseleave\" + NS, function() {\n                wrapper.off(\"mousemove\" + NS, \".k-scheduler-header-all-day td, .k-scheduler-content td\", mouseMoveHandler);\n            });\n\n            wrapper.on(\"focus\" + NS, function() {\n                if (!that._selection) {\n                    that._createSelection($(\".k-scheduler-content\").find(\"td:first\"));\n                }\n\n                that._select();\n            });\n\n            wrapper.on(\"focusout\" + NS, function() {\n                that.view().clearSelection();\n                that._ctrlKey = that._shiftKey = false;\n            });\n\n            wrapper.on(\"keydown\" + NS, proxy(that._keydown, that));\n\n            wrapper.on(\"keyup\" + NS, function(e) {\n                that._ctrlKey = e.ctrlKey;\n                that._shiftKey = e.shiftKey;\n            });\n        },\n\n        _select: function() {\n            var that = this;\n            var view = that.view();\n            var wrapper = that.wrapper;\n            var current = view.current();\n            var selection = that._selection;\n\n            if (current) {\n                current.removeAttribute(\"id\");\n                current.removeAttribute(\"aria-label\");\n                wrapper.removeAttr(\"aria-activedescendant\");\n            }\n\n            view.select(selection);\n\n            current = view.current();\n\n            if (current && that._old !== current) {\n                var labelFormat;\n                var data = selection;\n                var events = that._selectedEvents();\n                var slots = view._selectedSlots;\n\n                if (events[0]) {\n                    data = events[0] || selection;\n                    labelFormat = kendo.format(that.options.messages.ariaEventLabel, data.title, data.start, data.start);\n                } else {\n                    labelFormat = kendo.format(that.options.messages.ariaSlotLabel, data.start, data.end);\n                }\n\n                current.setAttribute(\"id\", that._ariaId);\n                current.setAttribute(\"aria-label\", labelFormat);\n                wrapper.attr(\"aria-activedescendant\", that._ariaId);\n\n                that._old = current;\n\n                that.trigger(\"change\", {\n                    start: selection.start,\n                    end: selection.end,\n                    events: events,\n                    slots: slots,\n                    resources: view._resourceBySlot(selection)\n                });\n            }\n        },\n\n        _selectedEvents: function() {\n            var uids = this._selection.events;\n            var length = uids.length;\n            var idx = 0;\n            var event;\n\n            var events = [];\n\n            for (; idx < length; idx++) {\n                event = this.occurrenceByUid(uids[idx]);\n                if (event) {\n                    events.push(event);\n                }\n            }\n\n            return events;\n        },\n\n        _mouseMove: function(e) {\n            var that = this;\n            clearTimeout(that._moveTimer);\n\n            that._moveTimer = setTimeout(function() {\n                var view = that.view();\n                var selection = that._selection;\n\n                if (selection) {\n                    var slot = view.selectionByElement($(e.currentTarget));\n\n                    if (slot && selection.groupIndex === slot.groupIndex) {\n                        var startDate = slot.startDate();\n                        var endDate = slot.endDate();\n\n                        if (startDate >= selection.end) {\n                            selection.backward = false;\n                        } else if (endDate <= selection.start) {\n                            selection.backward = true;\n                        }\n\n                        if (selection.backward) {\n                            selection.start = startDate;\n                        } else {\n                            selection.end = endDate;\n                        }\n\n                        that._select();\n                    }\n                }\n            }, 5);\n        },\n\n        _viewByIndex: function(index) {\n            var view, views = this.views;\n\n            for (view in views) {\n                if (!index) {\n                    return view;\n                }\n\n                index--;\n            }\n        },\n\n        _keydown: function(e) {\n            var that = this,\n                key = e.keyCode,\n                view = that.view(),\n                editable = view.options.editable,\n                selection = that._selection,\n                shiftKey = e.shiftKey;\n\n            that._ctrlKey = e.ctrlKey;\n            that._shiftKey = e.shiftKey;\n\n            if (key === keys.TAB) {\n                if (view.moveToEvent(selection, shiftKey)) {\n                    that._select();\n\n                    e.preventDefault();\n                }\n            } else if (editable && key === keys.ENTER) {\n                // add/edit event\n                if (selection.events.length) {\n                    if (editable.update !== false) {\n                        that.editEvent(selection.events[0]);\n                    }\n                } else if (editable.create !== false) {\n                    if (selection.isAllDay) {\n                        selection = $.extend({}, selection, {\n                            end: kendo.date.addDays(selection.end, -1)\n                        });\n                    }\n\n                    that.addEvent(extend({}, selection, view._resourceBySlot(selection)));\n                }\n            } else if (key === keys.DELETE && editable !== false && editable.destroy !== false) {\n                that.removeEvent(selection.events[0]);\n            } else if (key >= 49 && key <= 57) {\n                // switch to view 1-9\n                that.view(that._viewByIndex(key - 49));\n            } else if (view.move(selection, key, shiftKey)) {\n                if (view.inRange(selection)) {\n                    that._select();\n                } else {\n                    that.date(selection.start);\n                }\n\n                e.preventDefault();\n            }\n\n            that._adjustSelectedDate();\n        },\n\n        _createSelection: function(item) {\n            var uid, slot, selection;\n\n            if (!this._selection || (!this._ctrlKey && !this._shiftKey)) {\n                this._selection = {\n                    events: [],\n                    groupIndex: 0\n                };\n            }\n\n            item = $(item);\n            selection = this._selection;\n            uid = item.attr(kendo.attr(\"uid\"));\n\n            slot = this.view().selectionByElement(item);\n\n            if (slot) {\n                selection.groupIndex = slot.groupIndex || 0;\n            }\n\n            if (uid) {\n                slot = getOccurrenceByUid(this._data, uid);\n            }\n\n            if (slot && slot.uid) {\n                uid = [slot.uid];\n            }\n\n            this._updateSelection(slot, uid);\n            this._adjustSelectedDate();\n        },\n\n        _updateSelection: function(dataItem, events) {\n            var selection = this._selection;\n\n\n            if (dataItem && selection) {\n                var view =  this.view();\n\n                if (dataItem.uid) {\n                    dataItem = view._updateEventForSelection(dataItem);\n                }\n\n                if (this._shiftKey && selection.start && selection.end) {\n                    var backward = dataItem.end < selection.end;\n\n                    selection.end = dataItem.endDate ? dataItem.endDate() : dataItem.end;\n\n                    if (backward && view._timeSlotInterval) {\n                        kendo.date.setTime(selection.end, -view._timeSlotInterval());\n                    }\n                } else {\n                    selection.start = dataItem.startDate ? dataItem.startDate() : dataItem.start;\n                    selection.end = dataItem.endDate ? dataItem.endDate() : dataItem.end;\n                }\n\n                if (\"isDaySlot\" in dataItem) {\n                    selection.isAllDay = dataItem.isDaySlot;\n                } else {\n                    selection.isAllDay = dataItem.isAllDay;\n                }\n\n                selection.index = dataItem.index;\n                if (this._ctrlKey) {\n                    selection.events = selection.events.concat(events || []);\n                } else {\n                    selection.events = events || [];\n                }\n            }\n        },\n\n        options: {\n            name: \"Scheduler\",\n            date: TODAY,\n            editable: true,\n            autoBind: true,\n            snap: true,\n            mobile: false,\n            timezone: \"\",\n            allDaySlot: true,\n            min: new Date(1900, 0, 1),\n            max: new Date(2099, 11, 31),\n            toolbar: null,\n            messages: {\n                today: \"Today\",\n                pdf: \"Export to PDF\",\n                save: \"Save\",\n                cancel: \"Cancel\",\n                destroy: \"Delete\",\n                deleteWindowTitle: \"Delete event\",\n                ariaSlotLabel: \"Selected from {0:t} to {1:t}\",\n                ariaEventLabel: \"{0} on {1:D} at {2:t}\",\n                views: {\n                    day: \"Day\",\n                    week: \"Week\",\n                    workWeek: \"Work Week\",\n                    agenda: \"Agenda\",\n                    month: \"Month\",\n                    timeline: \"Timeline\",\n                    timelineWeek: \"Timeline Week\",\n                    timelineWorkWeek: \"Timeline Work Week\",\n                    timelineMonth: \"Timeline Month\"\n                },\n                recurrenceMessages: {\n                    deleteWindowTitle: \"Delete Recurring Item\",\n                    deleteWindowOccurrence: \"Delete current occurrence\",\n                    deleteWindowSeries: \"Delete the series\",\n                    editWindowTitle: \"Edit Recurring Item\",\n                    editWindowOccurrence: \"Edit current occurrence\",\n                    editWindowSeries: \"Edit the series\"\n                },\n                editor: {\n                    title: \"Title\",\n                    start: \"Start\",\n                    end: \"End\",\n                    allDayEvent: \"All day event\",\n                    description: \"Description\",\n                    repeat: \"Repeat\",\n                    timezone: \" \",\n                    startTimezone: \"Start timezone\",\n                    endTimezone: \"End timezone\",\n                    separateTimezones: \"Use separate start and end time zones\",\n                    timezoneEditorTitle: \"Timezones\",\n                    timezoneEditorButton: \"Time zone\",\n                    timezoneTitle: \"Time zones\",\n                    noTimezone: \"No timezone\",\n                    editorTitle: \"Event\"\n                }\n            },\n            height: null,\n            width: null,\n            resources: [],\n            group: {\n                resources: [],\n                direction: \"horizontal\"\n            },\n            views: [],\n            selectable: false\n        },\n\n        events: [\n            REMOVE,\n            EDIT,\n            CANCEL,\n            SAVE,\n            \"add\",\n            \"dataBinding\",\n            \"dataBound\",\n            \"moveStart\",\n            \"move\",\n            \"moveEnd\",\n            \"resizeStart\",\n            \"resize\",\n            \"resizeEnd\",\n            \"navigate\",\n            \"change\"\n        ],\n\n        destroy: function() {\n            var that = this,\n                element;\n\n            Widget.fn.destroy.call(that);\n\n            if (that.dataSource) {\n                that.dataSource.unbind(CHANGE, that._refreshHandler);\n                that.dataSource.unbind(\"progress\", that._progressHandler);\n                that.dataSource.unbind(\"error\", that._errorHandler);\n            }\n\n            if (that.calendar) {\n                that.calendar.destroy();\n                that.popup.destroy();\n            }\n\n            if (that.view()) {\n                that.view().destroy();\n            }\n\n            if (that._editor) {\n                that._editor.destroy();\n            }\n\n            if (this._moveDraggable) {\n                this._moveDraggable.destroy();\n            }\n\n            if (this._resizeDraggable) {\n                this._resizeDraggable.destroy();\n            }\n\n            element = that.element\n                .add(that.wrapper)\n                .add(that.toolbar)\n                .add(that.popup);\n\n            element.off(NS);\n\n            clearTimeout(that._moveTimer);\n\n            that._model = null;\n            that.toolbar = null;\n            that.element = null;\n\n            $(window).off(\"resize\" + NS, that._resizeHandler);\n\n            kendo.destroy(that.wrapper);\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n\n            if (this.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        items: function() {\n            return this.wrapper.find(\".k-scheduler-content\").children(\".k-event, .k-task\");\n        },\n\n        _movable: function() {\n            var startSlot;\n            var endSlot;\n            var startTime;\n            var endTime;\n            var event;\n            var clonedEvent;\n            var that = this;\n\n            var isMobile = that._isMobile();\n            var movable = that.options.editable && that.options.editable.move !== false;\n            var resizable = that.options.editable && that.options.editable.resize !== false;\n\n            if (movable || (resizable && isMobile)) {\n\n                that._moveDraggable = new kendo.ui.Draggable(that.element, {\n                    distance: 0,\n                    filter: \".k-event\",\n                    ignore: \".k-resize-handle\",\n                    holdToDrag: isMobile\n                });\n\n                if (movable) {\n                    that._moveDraggable.bind(\"dragstart\", function(e) {\n                        var view = that.view();\n                        var eventElement = e.currentTarget;\n\n                        if (!view.options.editable || view.options.editable.move === false) {\n                            e.preventDefault();\n                            return;\n                        }\n\n                        if (isMobile && !eventElement.hasClass(\"k-event-active\")) {\n                            that.element.find(\".k-event-active\").removeClass(\"k-event-active\");\n                            e.preventDefault();\n                            return;\n                        }\n\n                        event = that.occurrenceByUid(eventElement.attr(kendo.attr(\"uid\")));\n\n                        clonedEvent = event.clone();\n\n                        view._updateEventForMove(clonedEvent);\n\n                        startSlot = view._slotByPosition(e.x.startLocation, e.y.startLocation);\n\n                        startTime = startSlot.startOffset(e.x.startLocation, e.y.startLocation, that.options.snap);\n\n                        endSlot = startSlot;\n\n                        if (!startSlot || that.trigger(\"moveStart\", { event: event })) {\n                            e.preventDefault();\n                        }\n                    })\n                    .bind(\"drag\", function(e) {\n                        var view = that.view();\n\n                        var slot = view._slotByPosition(e.x.location, e.y.location);\n\n                        if (!slot) {\n                            return;\n                        }\n\n                        endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n\n                        var distance = endTime - startTime;\n\n                        view._updateMoveHint(clonedEvent, slot.groupIndex, distance);\n\n                        var range = moveEventRange(clonedEvent, distance);\n\n                        if (!that.trigger(\"move\", {\n                            event: event,\n                            slot: { element: slot.element, start: slot.startDate(), end: slot.endDate() },\n                            resources: view._resourceBySlot(slot),\n                            start: range.start,\n                            end: range.end\n                        })) {\n\n                            endSlot = slot;\n\n                        } else {\n                            view._updateMoveHint(clonedEvent, slot.groupIndex, distance);\n                        }\n                    })\n                    .bind(\"dragend\", function(e) {\n                        that.view()._removeMoveHint();\n\n                        var distance = endTime - startTime;\n                        var range = moveEventRange(clonedEvent, distance);\n\n                        var start = range.start;\n                        var end = range.end;\n\n                        var endResources = that.view()._resourceBySlot(endSlot);\n                        var startResources = that.view()._resourceBySlot(startSlot);\n\n                        var prevented = that.trigger(\"moveEnd\", {\n                            event: event,\n                            slot: { element: endSlot.element, start: endSlot.startDate(), end: endSlot.endDate() },\n                            start: start,\n                            end: end,\n                            resources: endResources\n                        });\n\n                        if (!prevented && (clonedEvent.start.getTime() != start.getTime() ||\n                        clonedEvent.end.getTime() != end.getTime() || kendo.stringify(endResources) != kendo.stringify(startResources)))  {\n                            that.view()._updateEventForMove(event);\n                            that._updateEvent(null, event, $.extend({ start: start, end: end}, endResources));\n                        }\n\n                        e.currentTarget.removeClass(\"k-event-active\");\n                        this.cancelHold();\n                    })\n                    .bind(\"dragcancel\", function() {\n                        that.view()._removeMoveHint();\n                        this.cancelHold();\n                    });\n                }\n\n                if (isMobile) {\n                    that._moveDraggable.bind(\"hold\", function(e) {\n                        if (that.element.find(\".k-scheduler-monthview\").length) {\n                            e.preventDefault();\n                        }\n                        that.element.find(\".k-event-active\").removeClass(\"k-event-active\");\n                        e.currentTarget.addClass(\"k-event-active\");\n                    });\n\n                    that._moveDraggable.userEvents.bind(\"press\", function(e) {\n                        e.preventDefault();\n                    });\n                }\n            }\n        },\n\n        _resizable: function() {\n            var startTime;\n            var endTime;\n            var event;\n            var clonedEvent;\n            var slot;\n            var that = this;\n\n            function direction(handle) {\n                var directions = {\n                    \"k-resize-e\": \"east\",\n                    \"k-resize-w\": \"west\",\n                    \"k-resize-n\": \"north\",\n                    \"k-resize-s\": \"south\"\n                };\n\n                for (var key in directions) {\n                    if (handle.hasClass(key)) {\n                        return directions[key];\n                    }\n                }\n            }\n\n            that._resizeDraggable = new kendo.ui.Draggable(that.element, {\n                distance: 0,\n                filter: \".k-resize-handle\",\n                dragstart: function(e) {\n                    var dragHandle = $(e.currentTarget);\n\n                    var eventElement = dragHandle.closest(\".k-event\");\n\n                    var uid = eventElement.attr(kendo.attr(\"uid\"));\n\n                    var view = that.view();\n\n                    event = that.occurrenceByUid(uid);\n\n                    clonedEvent = event.clone();\n\n                    view._updateEventForResize(clonedEvent);\n\n                    slot = view._slotByPosition(e.x.startLocation, e.y.startLocation);\n\n                    if (that.trigger(\"resizeStart\", { event: event })) {\n                        e.preventDefault();\n                    }\n\n                    startTime = kendo.date.toUtcTime(clonedEvent.start);\n\n                    endTime = kendo.date.toUtcTime(clonedEvent.end);\n                },\n                drag: function(e) {\n                    if (!slot) {\n                        return;\n                    }\n\n                    var dragHandle = $(e.currentTarget);\n\n                    var dir = direction(dragHandle);\n\n                    var view = that.view();\n\n                    var currentSlot = view._slotByPosition(e.x.location, e.y.location);\n\n                    if (!currentSlot || slot.groupIndex != currentSlot.groupIndex) {\n                        return;\n                    }\n\n                    slot = currentSlot;\n\n                    var originalStart = startTime;\n\n                    var originalEnd = endTime;\n\n                    if (dir == \"south\") {\n                        if (!slot.isDaySlot && slot.end - kendo.date.toUtcTime(clonedEvent.start) >= view._timeSlotInterval()) {\n                            if (clonedEvent.isAllDay) {\n                                endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n                            } else {\n                                endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n                            }\n                        }\n                    } else if (dir == \"north\") {\n                        if (!slot.isDaySlot && kendo.date.toUtcTime(clonedEvent.end) - slot.start >= view._timeSlotInterval()) {\n                            startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n                        }\n                    } else if (dir == \"east\") {\n                        if (slot.isDaySlot && kendo.date.toUtcTime(kendo.date.getDate(slot.endDate())) >= kendo.date.toUtcTime(kendo.date.getDate(clonedEvent.start))) {\n                            if (clonedEvent.isAllDay) {\n                                endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n                            } else {\n                                endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n                            }\n                        } else if (!slot.isDaySlot && slot.end - kendo.date.toUtcTime(clonedEvent.start) >= view._timeSlotInterval()) {\n                            endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n                        }\n                    } else if (dir == \"west\") {\n                        if (slot.isDaySlot && kendo.date.toUtcTime(kendo.date.getDate(clonedEvent.end)) >= kendo.date.toUtcTime(kendo.date.getDate(slot.startDate()))) {\n                            startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n                        } else if (!slot.isDaySlot && kendo.date.toUtcTime(clonedEvent.end) - slot.start >= view._timeSlotInterval()) {\n                            startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n                        }\n                    }\n\n                    if (!that.trigger(\"resize\", {\n                        event: event,\n                        slot: { element: slot.element, start: slot.startDate(), end: slot.endDate() },\n                        start: kendo.timezone.toLocalDate(startTime),\n                        end: kendo.timezone.toLocalDate(endTime),\n                        resources: view._resourceBySlot(slot)\n                    })) {\n                        view._updateResizeHint(clonedEvent, slot.groupIndex, startTime, endTime);\n                    } else {\n                        startTime = originalStart;\n                        endTime = originalEnd;\n                    }\n                },\n                dragend: function(e) {\n                    var dragHandle = $(e.currentTarget);\n                    var start = new Date(clonedEvent.start.getTime());\n                    var end = new Date(clonedEvent.end.getTime());\n                    var dir = direction(dragHandle);\n\n                    that.view()._removeResizeHint();\n\n                    if (dir == \"south\") {\n                        end = kendo.timezone.toLocalDate(endTime);\n                    } else if (dir == \"north\") {\n                        start = kendo.timezone.toLocalDate(startTime);\n                    } else if (dir == \"east\") {\n                        if (slot.isDaySlot) {\n                            end = kendo.date.getDate(kendo.timezone.toLocalDate(endTime));\n                        } else {\n                            end = kendo.timezone.toLocalDate(endTime);\n                        }\n                    } else if (dir == \"west\") {\n                        if (slot.isDaySlot) {\n                            start = new Date(kendo.timezone.toLocalDate(startTime));\n                            start.setHours(0);\n                            start.setMinutes(0);\n                        } else {\n                            start = kendo.timezone.toLocalDate(startTime);\n                        }\n                    }\n\n                    var prevented = that.trigger(\"resizeEnd\", {\n                        event: event,\n                        slot: { element: slot.element, start: slot.startDate(), end: slot.endDate() },\n                        start: start,\n                        end: end,\n                        resources: that.view()._resourceBySlot(slot)\n                    });\n\n                    if (!prevented && end.getTime() >= start.getTime()) {\n                        if (clonedEvent.start.getTime() != start.getTime() || clonedEvent.end.getTime() != end.getTime()) {\n                            that.view()._updateEventForResize(event);\n                            that._updateEvent(dir, event, { start: start, end: end });\n                        }\n                    }\n\n                    slot = null;\n                    event = null;\n                },\n                dragcancel: function() {\n                    that.view()._removeResizeHint();\n\n                    slot = null;\n                    event = null;\n                }\n            });\n        },\n\n        _updateEvent: function(dir, event, eventInfo) {\n            var that = this;\n\n            var updateEvent = function(event, callback) {\n                try {\n                    that._preventRefresh = true;\n                    event.update(eventInfo);\n                    that._convertDates(event);\n                } finally {\n                    that._preventRefresh = false;\n                }\n\n                if (!that.trigger(SAVE, { event: event })) {\n                    if (callback) {\n                        callback();\n                    }\n\n                    that._updateSelection(event);\n                    that.dataSource.sync();\n                }\n            };\n\n            var recurrenceHead = function(event) {\n                if (event.recurrenceRule) {\n                    return that.dataSource.getByUid(event.uid);\n                } else {\n                    return that.dataSource.get(event.recurrenceId);\n                }\n            };\n\n            var updateSeries = function() {\n                var head = recurrenceHead(event);\n\n                if (dir == \"south\" || dir == \"north\") {\n                    if (eventInfo.start) {\n                        var start = kendo.date.getDate(head.start);\n                        kendo.date.setTime(start, getMilliseconds(eventInfo.start));\n                        eventInfo.start = start;\n                    }\n                    if (eventInfo.end) {\n                        var end = kendo.date.getDate(head.end);\n                        kendo.date.setTime(end, getMilliseconds(eventInfo.end));\n                        eventInfo.end = end;\n                    }\n                }\n\n                that.dataSource._removeExceptions(head);\n\n                updateEvent(head);\n            };\n\n            var updateOccurrence = function() {\n                var head = recurrenceHead(event);\n\n                var callback = function() {\n                    that._convertDates(head);\n                };\n\n                var exception = head.toOccurrence({ start: event.start, end: event.end });\n                updateEvent(that.dataSource.add(exception), callback);\n            };\n\n            var recurrenceMessages = that.options.messages.recurrenceMessages;\n            if (event.recurrenceRule || event.isOccurrence()) {\n                that.showDialog({\n                    model: event,\n                    title: recurrenceMessages.editWindowTitle,\n                    text: recurrenceMessages.editRecurring ? recurrenceMessages.editRecurring : EDITRECURRING,\n                    buttons: [\n                        { text: recurrenceMessages.editWindowOccurrence, click: updateOccurrence },\n                        { text: recurrenceMessages.editWindowSeries, click: updateSeries }\n                    ]\n                });\n            } else {\n                updateEvent(that.dataSource.getByUid(event.uid));\n            }\n        },\n\n        _modelForContainer: function(container) {\n            container = $(container).closest(\"[\" + kendo.attr(\"uid\") + \"]\");\n\n            return this.dataSource.getByUid(container.attr(kendo.attr(\"uid\")));\n        },\n\n        showDialog: function(options) {\n            this._editor.showDialog(options);\n        },\n\n        focus: function() {\n            this.wrapper.focus();\n        },\n\n        _confirmation: function(callback, model) {\n            var editable = this.options.editable;\n\n            if (editable === true || editable.confirmation !== false) {\n                var messages = this.options.messages;\n\n                var text = typeof editable.confirmation === STRING ? editable.confirmation : DELETECONFIRM;\n                var buttons = [\n                    { name: \"destroy\", text: messages.destroy, click: function() { callback(); } }\n                ];\n\n                if (!(this._isMobile() && kendo.mobile.ui.Pane)) {\n                    buttons.push({ name: \"canceledit\", text: messages.cancel, click: function() { callback(true); } });\n                }\n\n                this.showDialog({\n                    model: model,\n                    text: text,\n                    title: messages.deleteWindowTitle,\n                    buttons: buttons\n                });\n            } else {\n                callback();\n            }\n        },\n\n        addEvent: function(eventInfo) {\n            var editable = this._editor.editable;\n            var dataSource = this.dataSource;\n            var event;\n\n            eventInfo = eventInfo || {};\n\n            var prevented = this.trigger(\"add\", { event:  eventInfo });\n\n            if (!prevented && ((editable && editable.end()) || !editable)) {\n\n                this.cancelEvent();\n\n                if (eventInfo && eventInfo.toJSON) {\n                    eventInfo = eventInfo.toJSON();\n                }\n\n                event = dataSource.add(eventInfo);\n\n                if (event) {\n                    this.cancelEvent();\n                    this._editEvent(event);\n                }\n            }\n       },\n\n       saveEvent: function() {\n            var editor = this._editor;\n\n            if (!editor) {\n                return;\n            }\n\n            var editable = editor.editable;\n            var container = editor.container;\n            var model = this._modelForContainer(container);\n\n            if (container && editable && editable.end() &&\n                !this.trigger(SAVE, { container: container, event: model } )) {\n\n                if (model.isRecurrenceHead()) {\n                    this.dataSource._removeExceptions(model);\n                }\n\n                if (!model.dirty && !model.isOccurrence()) {\n                    this._convertDates(model, \"remove\");\n                }\n\n                this.dataSource.sync();\n            }\n        },\n\n        cancelEvent: function() {\n            var editor = this._editor;\n            var container = editor.container;\n            var model;\n\n            if (container) {\n                model = this._modelForContainer(container);\n\n                if (model && model.isOccurrence()) {\n                    this._convertDates(model, \"remove\");\n                    this._convertDates(this.dataSource.get(model.recurrenceId), \"remove\");\n                }\n\n                this.dataSource.cancelChanges(model);\n\n                //TODO: handle the cancel in UI\n\n                editor.close();\n            }\n        },\n\n        editEvent: function(uid) {\n            var model = typeof uid == \"string\" ? this.occurrenceByUid(uid) : uid;\n\n            if (!model) {\n                return;\n            }\n\n            this.cancelEvent();\n\n            if (model.isRecurring()) {\n                this._editRecurringDialog(model);\n            } else {\n                this._editEvent(model);\n            }\n        },\n\n        _editEvent: function(model) {\n            this._createPopupEditor(model);\n        },\n\n        _editRecurringDialog: function(model) {\n            var that = this;\n\n            var editOccurrence = function() {\n                if (model.isException()) {\n                    that._editEvent(model);\n                } else {\n                    that.addEvent(model);\n                }\n            };\n\n            var editSeries = function() {\n                if (model.recurrenceId) {\n                    model = that.dataSource.get(model.recurrenceId);\n                }\n\n                that._editEvent(model);\n            };\n\n            var recurrenceMessages = that.options.messages.recurrenceMessages;\n            that.showDialog({\n                model: model,\n                title: recurrenceMessages.editWindowTitle,\n                text: recurrenceMessages.editRecurring ? recurrenceMessages.editRecurring : EDITRECURRING,\n                buttons: [\n                    { text: recurrenceMessages.editWindowOccurrence, click: editOccurrence },\n                    { text: recurrenceMessages.editWindowSeries, click: editSeries }\n                ]\n            });\n        },\n\n        _createButton: function(command) {\n            var template = command.template || COMMANDBUTTONTMPL,\n                commandName = typeof command === STRING ? command : command.name || command.text,\n                options = { className: \"k-scheduler-\" + (commandName || \"\").replace(/\\s/g, \"\"), text: commandName, attr: \"\" };\n\n            if (!commandName && !(isPlainObject(command) && command.template))  {\n                throw new Error(\"Custom commands should have name specified\");\n            }\n\n            if (isPlainObject(command)) {\n                if (command.className) {\n                    command.className += \" \" + options.className;\n                }\n\n                if (commandName === \"edit\" && isPlainObject(command.text)) {\n                    command = extend(true, {}, command);\n                    command.text = command.text.edit;\n                }\n\n                options = extend(true, options, defaultCommands[commandName], command);\n            } else {\n                options = extend(true, options, defaultCommands[commandName]);\n            }\n\n            return kendo.template(template)(options);\n        },\n\n        _convertDates: function(model, method) {\n            var timezone = this.dataSource.reader.timezone;\n            var startTimezone = model.startTimezone;\n            var endTimezone = model.endTimezone;\n            var start = model.start;\n            var end = model.start;\n\n            method = method || \"apply\";\n            startTimezone = startTimezone || endTimezone;\n            endTimezone = endTimezone || startTimezone;\n\n            if (startTimezone) {\n                if (timezone) {\n                    if (method === \"apply\") {\n                        start = kendo.timezone.convert(model.start, timezone, startTimezone);\n                        end = kendo.timezone.convert(model.end, timezone, endTimezone);\n                    } else {\n                        start = kendo.timezone.convert(model.start, startTimezone, timezone);\n                        end = kendo.timezone.convert(model.end, endTimezone, timezone);\n                    }\n                } else {\n                    start = kendo.timezone[method](model.start, startTimezone);\n                    end = kendo.timezone[method](model.end, endTimezone);\n                }\n\n                model._set(\"start\", start);\n                model._set(\"end\", end);\n            }\n        },\n\n        _createEditor: function() {\n            var that = this;\n\n            var editor;\n\n            if (this._isMobile() && kendo.mobile.ui.Pane) {\n                editor = that._editor = new MobileEditor(this.wrapper, extend({}, this.options, {\n                    target: this,\n                    timezone: that.dataSource.reader.timezone,\n                    resources: that.resources,\n                    createButton: proxy(this._createButton, this)\n                }));\n            } else {\n                editor = that._editor = new PopupEditor(this.wrapper, extend({}, this.options, {\n                    target: this,\n                    createButton: proxy(this._createButton, this),\n                    timezone: that.dataSource.reader.timezone,\n                    resources: that.resources\n                }));\n            }\n\n            editor.bind(\"cancel\", function(e) {\n                if (that.trigger(\"cancel\", { container: e.container, event: e.model })) {\n                    e.preventDefault();\n                    return;\n                }\n                that.cancelEvent();\n\n                that.focus();\n            });\n\n            editor.bind(\"edit\", function(e) {\n                if (that.trigger(EDIT, { container: e.container, event: e.model })) {\n                    e.preventDefault();\n                }\n            });\n\n            editor.bind(\"save\", function() {\n                that.saveEvent();\n            });\n\n            editor.bind(\"remove\", function(e) {\n                that.removeEvent(e.model);\n            });\n        },\n\n        _createPopupEditor: function(model) {\n            var editor = this._editor;\n\n            if (!model.isNew() || model.isOccurrence()) {\n                if (model.isOccurrence()) {\n                    this._convertDates(model.recurrenceId ? this.dataSource.get(model.recurrenceId) : model);\n                }\n                this._convertDates(model);\n            }\n\n            this.editable = editor.editEvent(model);\n        },\n\n        removeEvent: function(uid) {\n            var that = this,\n                model = typeof uid == \"string\" ? that.occurrenceByUid(uid) : uid;\n\n            if (!model) {\n                return;\n            }\n\n            if (model.isRecurring()) {\n                that._deleteRecurringDialog(model);\n            } else {\n                that._confirmation(function(cancel) {\n                    if (!cancel) {\n                        that._removeEvent(model);\n                    }\n                }, model);\n            }\n        },\n\n        occurrenceByUid: function(uid) {\n            var occurrence = this.dataSource.getByUid(uid);\n            if (!occurrence) {\n                occurrence = getOccurrenceByUid(this._data, uid);\n            }\n\n            return occurrence;\n        },\n\n        occurrencesInRange: function(start, end) {\n            return new kendo.data.Query(this._data).filter({\n                logic: \"or\",\n                filters: [\n                    {\n                        logic: \"and\",\n                        filters: [\n                            { field: \"start\", operator: \"gte\", value: start },\n                            { field: \"end\", operator: \"gte\", value: start },\n                            { field: \"start\", operator: \"lt\", value: end }\n                        ]\n                    },\n                    {\n                        logic: \"and\",\n                        filters: [\n                            { field: \"start\", operator: \"lte\", value: start },\n                            { field: \"end\", operator: \"gt\", value: start }\n                        ]\n                    }\n                ]\n            }).toArray();\n        },\n\n        _removeEvent: function(model) {\n            if (!this.trigger(REMOVE, { event: model })) {\n                if (this.dataSource.remove(model)) {\n                    this.dataSource.sync();\n                }\n            }\n        },\n\n        _deleteRecurringDialog: function(model) {\n            var that = this;\n\n            var currentModel = model;\n\n            var deleteOccurrence = function() {\n                var occurrence = currentModel.recurrenceId ? currentModel : currentModel.toOccurrence();\n                var head = that.dataSource.get(occurrence.recurrenceId);\n\n                that._convertDates(head);\n                that._removeEvent(occurrence);\n            };\n\n            var deleteSeries = function() {\n                if (currentModel.recurrenceId) {\n                    currentModel = that.dataSource.get(currentModel.recurrenceId);\n                }\n\n                that._removeEvent(currentModel);\n            };\n\n            var recurrenceMessages = that.options.messages.recurrenceMessages;\n            that.showDialog({\n                model: model,\n                title: recurrenceMessages.deleteWindowTitle,\n                text: recurrenceMessages.deleteRecurring ? recurrenceMessages.deleteRecurring : DELETERECURRING,\n                buttons: [\n                   { text: recurrenceMessages.deleteWindowOccurrence, click: deleteOccurrence },\n                   { text: recurrenceMessages.deleteWindowSeries, click: deleteSeries }\n                ]\n            });\n        },\n\n        _unbindView: function(view) {\n            var that = this;\n            that.angular(\"cleanup\", function(){\n                return { elements: that.items() };\n            });\n\n            view.destroy();\n        },\n\n        _bindView: function(view) {\n            var that = this;\n\n            if (that.options.editable) {\n                if (that._viewRemoveHandler) {\n                    view.unbind(REMOVE, that._viewRemoveHandler);\n                }\n\n                that._viewRemoveHandler = function(e) {\n                    that.removeEvent(e.uid);\n                };\n\n                view.bind(REMOVE, that._viewRemoveHandler);\n\n                if (that._viewAddHandler) {\n                    view.unbind(ADD, that._viewAddHandler);\n                }\n\n                that._viewAddHandler = function(e) {\n                    that.addEvent(e.eventInfo);\n                };\n\n                view.bind(ADD, this._viewAddHandler);\n\n                if (that._viewEditHandler) {\n                    view.unbind(EDIT, that._viewEditHandler);\n                }\n\n                that._viewEditHandler = function(e) {\n                    that.editEvent(e.uid);\n                };\n\n                view.bind(EDIT, this._viewEditHandler);\n            }\n\n            if (that._viewNavigateHandler) {\n                view.unbind(\"navigate\", that._viewNavigateHandler);\n            }\n\n            that._viewNavigateHandler = function(e) {\n                if (e.view) {\n                    var switchWorkDay = \"isWorkDay\" in e;\n                    var action = switchWorkDay ? \"changeWorkDay\" : \"changeView\";\n\n                    if (!that.trigger(\"navigate\", { view: e.view, isWorkDay: e.isWorkDay, action: action, date: e.date })) {\n                        if (switchWorkDay) {\n                            that._workDayMode = e.isWorkDay;\n                        }\n\n                        that._selectView(e.view);\n                        that.date(e.date);\n                    }\n                }\n            };\n\n            view.bind(\"navigate\", that._viewNavigateHandler);\n\n            if (that._viewActivateHandler) {\n                view.unbind(\"activate\", that._viewActivateHandler);\n            }\n\n            that._viewActivateHandler = function() {\n                var view = this;\n                if (that._selection) {\n                    view.constrainSelection(that._selection);\n                    that._select();\n\n                    that._adjustSelectedDate();\n                }\n            };\n\n            view.bind(\"activate\", that._viewActivateHandler);\n        },\n\n        _selectView: function(name) {\n            var that = this;\n\n            if (name && that.views[name]) {\n\n                if (that._selectedView) {\n                    that._unbindView(that._selectedView);\n                }\n\n                that._selectedView = that._renderView(name);\n                that._selectedViewName = name;\n\n                that.toolbar\n                    .find(\".k-scheduler-views li\")\n                    .removeClass(\"k-state-selected\")\n                    .end()\n                    .find(\".k-view-\" + name.replace(/\\./g, \"\\\\.\").toLowerCase())\n                    .addClass(\"k-state-selected\");\n            }\n        },\n\n        view: function(name) {\n            var that = this;\n\n            if (name) {\n\n                that._selectView(name);\n\n                that.rebind();\n\n                return;\n            }\n\n            return that._selectedView;\n        },\n\n        _renderView: function(name) {\n            var view = this._initializeView(name);\n\n            this._bindView(view);\n\n            this._model.set(\"formattedDate\", view.dateForTitle());\n\n            return view;\n        },\n\n        resize: function(force) {\n            var size = this.getSize();\n            var currentSize = this._size;\n            var view = this.view();\n\n            if (!view || !view.groups) {\n                return;\n            }\n\n            if (force || !currentSize || size.width !== currentSize.width || size.height !== currentSize.height) {\n                this.refresh({ action: \"resize\" });\n                this._size = size;\n            }\n        },\n\n        _adjustSelectedDate: function() {\n            var date = this._model.selectedDate,\n                selection = this._selection,\n                start = selection.start;\n\n            if (start && !kendo.date.isInDateRange(date, getDate(start), getDate(selection.end))) {\n                date.setFullYear(start.getFullYear(), start.getMonth(), start.getDate());\n            }\n        },\n\n        _initializeView: function(name) {\n            var view = this.views[name];\n\n            if (view) {\n                var isSettings = isPlainObject(view),\n                    type = view.type;\n\n                if (typeof type === STRING) {\n                    type = kendo.getter(view.type)(window);\n                }\n\n                if (type) {\n                    view = new type(this.wrapper, trimOptions(extend(true, {}, this.options, isSettings ? view : {}, { resources: this.resources, date: this.date(), showWorkHours: this._workDayMode })));\n                } else {\n                    throw new Error(\"There is no such view\");\n                }\n            }\n\n            return view;\n        },\n\n        _views: function() {\n            var views = this.options.views;\n            var view;\n            var defaultView;\n            var selected;\n            var isSettings;\n            var name;\n            var type;\n            var idx;\n            var length;\n\n            this.views = {};\n\n            for (idx = 0, length = views.length; idx < length; idx++) {\n                var hasType = false;\n\n                view = views[idx];\n\n                isSettings = isPlainObject(view);\n\n                if (isSettings) {\n                    type = name = view.type ? view.type : view;\n                    if (typeof type !== STRING) {\n                        name = view.title;\n                        hasType = true;\n                    }\n                } else {\n                    type = name = view;\n                }\n\n                defaultView = defaultViews[name];\n\n                if (defaultView && !hasType) {\n\n                    view.type = defaultView.type;\n                    defaultView.title = this.options.messages.views[name];\n                    if (defaultView.type === \"day\") {\n                        defaultView.messages = { allDay: this.options.messages.allDay };\n                    } else if (defaultView.type === \"agenda\") {\n                        defaultView.messages = {\n                            event: this.options.messages.event,\n                            date: this.options.messages.date,\n                            time: this.options.messages.time\n                        };\n                    }\n                }\n\n                view = extend({ title: name }, defaultView, isSettings ? view : {});\n\n                if (name) {\n                    this.views[name] = view;\n\n                    if (!selected || view.selected) {\n                        selected = name;\n                    }\n                }\n            }\n\n            if (selected) {\n                this._selectedViewName = selected; // toolbar is not rendered yet\n            }\n        },\n\n        rebind: function() {\n            this.dataSource.fetch();\n        },\n\n        _dataSource: function() {\n            var that = this,\n                options = that.options,\n                dataSource = options.dataSource;\n\n            dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n            if (options.timezone && !(dataSource instanceof SchedulerDataSource)) {\n                dataSource = extend(true, dataSource, { schema: { timezone: options.timezone } });\n            } else if(dataSource instanceof SchedulerDataSource) {\n                options.timezone = dataSource.schema ? dataSource.schema.timezone : \"\";\n            }\n\n            if (that.dataSource && that._refreshHandler) {\n                that.dataSource\n                    .unbind(CHANGE, that._refreshHandler)\n                    .unbind(\"progress\", that._progressHandler)\n                    .unbind(\"error\", that._errorHandler);\n            } else {\n                that._refreshHandler = proxy(that.refresh, that);\n                that._progressHandler = proxy(that._requestStart, that);\n                that._errorHandler = proxy(that._error, that);\n            }\n\n            that.dataSource = kendo.data.SchedulerDataSource.create(dataSource)\n                .bind(CHANGE, that._refreshHandler)\n                .bind(\"progress\", that._progressHandler)\n                .bind(\"error\", that._errorHandler);\n\n            that.options.dataSource = that.dataSource;\n        },\n\n        _error: function() {\n            this._progress(false);\n        },\n\n        _requestStart: function() {\n            this._progress(true);\n        },\n\n        _progress: function(toggle) {\n            var element = this.element.find(\".k-scheduler-content\");\n            kendo.ui.progress(element, toggle);\n        },\n\n        _resources: function() {\n            var that = this;\n            var resources = that.options.resources;\n\n            for (var idx = 0; idx < resources.length; idx++) {\n                var resource = resources[idx];\n                var field = resource.field;\n                var dataSource = resource.dataSource;\n\n                if (!field || !dataSource) {\n                    throw new Error('The \"field\" and \"dataSource\" options of the scheduler resource are mandatory.');\n                }\n\n                that.resources.push({\n                    field: field,\n                    name: resource.name || field,\n                    title: resource.title || field,\n                    dataTextField: resource.dataTextField || \"text\",\n                    dataValueField: resource.dataValueField || \"value\",\n                    dataColorField: resource.dataColorField || \"color\",\n                    valuePrimitive: resource.valuePrimitive != null ? resource.valuePrimitive : true,\n                    multiple: resource.multiple || false,\n                    dataSource: kendo.data.DataSource.create(dataSource)\n                });\n            }\n\n            var promises = $.map(that.resources, function(resource) {\n                return resource.dataSource.fetch();\n            });\n\n            $.when.apply(null, promises)\n                  .then(function() {\n                      if (that.options.autoBind) {\n                          that.view(that._selectedViewName);\n                      } else {\n                          that._selectView(that._selectedViewName);\n                      }\n                  });\n        },\n\n        _initModel: function() {\n            var that = this;\n            that._model = kendo.observable({\n               selectedDate: new Date(this.options.date),\n               formattedDate: \"\"\n           });\n\n           that._model.bind(\"change\", function(e) {\n                if (e.field === \"selectedDate\") {\n                    that.view(that._selectedViewName);\n                }\n           });\n        },\n\n        _wrapper: function() {\n            var that = this;\n            var options = that.options;\n            var height = options.height;\n            var width = options.width;\n\n            that.wrapper = that.element\n                               .addClass(\"k-widget k-scheduler k-floatwrap\")\n                               .attr(\"role\", \"grid\")\n                               .attr(\"aria-multiselectable\", true);\n\n            if (that._isMobile()) {\n               that.wrapper.addClass(\"k-scheduler-mobile\");\n            }\n\n            if (that._isMobilePhoneView()) {\n               that.wrapper.addClass(\"k-scheduler-phone\");\n            }\n\n            if (height) {\n                that.wrapper.height(height);\n            }\n\n            if (width) {\n                that.wrapper.width(width);\n            }\n        },\n\n        date: function(value) {\n            if (value != null && getDate(value) >= getDate(this.options.min) && getDate(value) <= getDate(this.options.max)) {\n                this._model.set(\"selectedDate\", value);\n            }\n            return getDate(this._model.get(\"selectedDate\"));\n        },\n\n        _toolbar: function() {\n            var that = this;\n            var options = that.options;\n            var commands = [];\n\n            if (options.toolbar) {\n                commands = $.isArray(options.toolbar) ? options.toolbar : [options.toolbar];\n            }\n\n            var template = this._isMobilePhoneView() ? MOBILETOOLBARTEMPLATE : TOOLBARTEMPLATE;\n            var toolbar = $(template({\n                    messages: options.messages,\n                    pdf: $.grep(commands, function(item) {\n                            return item == \"pdf\" || item.name == \"pdf\";\n                        }).length > 0,\n                    ns: kendo.ns,\n                    views: that.views\n                }));\n\n            that.wrapper.append(toolbar);\n            that.toolbar = toolbar;\n\n            kendo.bind(that.toolbar, that._model);\n\n            toolbar.on(CLICK + NS, \".k-pdf\", function(e) {\n                e.preventDefault();\n                that.saveAsPDF();\n            });\n\n            toolbar.on(CLICK + NS, \".k-scheduler-navigation li\", function(e) {\n                var li = $(this);\n                var date = new Date(that.date());\n                var action = \"\";\n\n                e.preventDefault();\n\n                if (li.hasClass(\"k-nav-today\")) {\n                    action = \"today\";\n                    date = new Date();\n                } else if (li.hasClass(\"k-nav-next\")) {\n                    action = \"next\";\n                    date = that.view().nextDate();\n                } else if (li.hasClass(\"k-nav-prev\")) {\n                    action = \"previous\";\n                    date = that.view().previousDate();\n                } else if (li.hasClass(\"k-nav-current\") && !that._isMobilePhoneView()) {\n                    that._showCalendar();\n                    return; // TODO: Not good - refactor\n                }\n\n                if (!that.trigger(\"navigate\", { view: that._selectedViewName, action: action, date: date })) {\n                    that.date(date);\n                }\n            });\n\n            toolbar.on(CLICK + NS, \".k-scheduler-views li\", function(e) {\n                e.preventDefault();\n\n                var name = $(this).attr(kendo.attr(\"name\"));\n\n                if (!that.trigger(\"navigate\", { view: name, action: \"changeView\", date: that.date() })) {\n                    that.view(name);\n                }\n            });\n\n            toolbar.find(\"li\").hover(function(){\n                    $(this).addClass(\"k-state-hover\");\n                }, function(){\n                    $(this).removeClass(\"k-state-hover\");\n                });\n        },\n\n        _showCalendar: function() {\n            var that = this,\n                target = that.toolbar.find(\".k-nav-current\"),\n                html = $('<div class=\"k-calendar-container\"><div class=\"k-scheduler-calendar\"/></div>');\n\n            if (!that.popup) {\n                that.popup = new Popup(html, {\n                    anchor: target,\n                    activate: function() {\n                        if (!that.calendar) {\n                            that.calendar = new Calendar(this.element.find(\".k-scheduler-calendar\"),\n                            {\n                                change: function() {\n                                    var date = this.value();\n                                    if (!that.trigger(\"navigate\", { view: that._selectedViewName, action: \"changeDate\", date: date })) {\n                                        that.date(date);\n                                        that.popup.close();\n                                    }\n                                },\n                                min: that.options.min,\n                                max: that.options.max\n                            });\n                        }\n                        that.calendar.value(that.date());\n                    },\n                    copyAnchorStyles: false\n                });\n            }\n\n            that.popup.open();\n        },\n\n        refresh: function(e) {\n            var that = this;\n            var view = this.view();\n\n            this._progress(false);\n\n            this.angular(\"cleanup\", function(){\n                return { elements: that.items() };\n            });\n\n            e = e || {};\n\n            if (!view) {\n                return;\n            }\n\n            if (e && e.action === \"itemchange\" && (this._editor.editable || this._preventRefresh)) { // skip rebinding if editing is in progress\n                return;\n            }\n\n            if (this.trigger(\"dataBinding\", { action: e.action || \"rebind\", index: e.index, items: e.items })) {\n                return;\n            }\n\n            if (!(e && e.action === \"resize\") && this._editor) {\n                this._editor.close();\n            }\n\n            this._data = this.dataSource.expand(view.startDate(), view.endDate());\n\n            view.render(this._data);\n\n            this.trigger(\"dataBound\");\n        },\n\n        slotByPosition: function(x, y) {\n            var view = this.view();\n\n            if(!view._slotByPosition) {\n                return null;\n            }\n\n            var slot = view._slotByPosition(x, y);\n\n            if(!slot) {\n                return null;\n            }\n\n            return {\n                startDate: slot.startDate(),\n                endDate: slot.endDate(),\n                groupIndex: slot.groupIndex,\n                element: slot.element,\n                isDaySlot: slot.isDaySlot\n            };\n        },\n\n        slotByElement: function(element) {\n            var offset = $(element).offset();\n            return this.slotByPosition(offset.left, offset.top);\n        },\n\n        resourcesBySlot: function(slot) {\n            return this.view()._resourceBySlot(slot);\n        }\n    });\n\n    var defaultViews = {\n        day: {\n            type: \"kendo.ui.DayView\"\n        },\n        week: {\n            type: \"kendo.ui.WeekView\"\n        },\n        workWeek: {\n            type: \"kendo.ui.WorkWeekView\"\n        },\n        agenda: {\n            type: \"kendo.ui.AgendaView\"\n        },\n        month: {\n            type: \"kendo.ui.MonthView\"\n        },\n        timeline: {\n            type: \"kendo.ui.TimelineView\"\n        },\n        timelineWeek: {\n            type: \"kendo.ui.TimelineWeekView\"\n        },\n        timelineWorkWeek: {\n            type: \"kendo.ui.TimelineWorkWeekView\"\n        },\n        timelineMonth: {\n            type: \"kendo.ui.TimelineMonthView\"\n        }\n    };\n\n    ui.plugin(Scheduler);\n\n    if (kendo.PDFMixin) {\n        kendo.PDFMixin.extend(Scheduler.prototype);\n    }\n\n    var TimezoneEditor = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                zones = kendo.timezone.windows_zones;\n\n            if (!zones || !kendo.timezone.zones_titles) {\n                throw new Error('kendo.timezones.min.js is not included.');\n            }\n\n            Widget.fn.init.call(that, element, options);\n\n            that.wrapper = that.element;\n\n            that._zonesQuery = new kendo.data.Query(zones);\n            that._zoneTitleId = kendo.guid();\n            that._zoneTitlePicker();\n            that._zonePicker();\n\n            that.value(that.options.value);\n        },\n        options: {\n            name: \"TimezoneEditor\",\n            value: \"\",\n            optionLabel: \"No timezone\"\n        },\n        events: [ \"change\" ],\n\n        _zoneTitlePicker: function() {\n            var that = this,\n                zoneTitle = $('<input id=\"' + that._zoneTitleId + '\"/>').appendTo(that.wrapper);\n\n            that._zoneTitle = new kendo.ui.DropDownList(zoneTitle, {\n                dataSource: kendo.timezone.zones_titles,\n                dataValueField: \"other_zone\",\n                dataTextField: \"name\",\n                optionLabel: that.options.optionLabel,\n                cascade: function() {\n                    if (!this.value()) {\n                        that._zone.wrapper.hide();\n                    }\n                }\n            });\n        },\n\n        _zonePicker: function() {\n            var that = this,\n                zone = $('<input />').appendTo(this.wrapper);\n\n            that._zone = new kendo.ui.DropDownList(zone, {\n                dataValueField: \"zone\",\n                dataTextField: \"territory\",\n                dataSource: that._zonesQuery.data,\n                cascadeFrom: that._zoneTitleId,\n                cascade: function() {\n                    that._value = this.value();\n                    that.trigger(\"change\");\n                },\n                dataBound: function() {\n                    that._value = this.value();\n                    this.wrapper.toggle(this.dataSource.view().length > 1);\n                }\n            });\n\n            that._zone.wrapper.hide();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            kendo.destroy(this.wrapper);\n        },\n\n        value: function(value) {\n            var that = this,\n                zone;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            zone = that._zonesQuery.filter({ field: \"zone\", operator: \"eq\", value: value }).data[0];\n\n            if (zone) {\n                that._zoneTitle.value(zone.other_zone);\n                that._zone.value(zone.zone);\n            } else {\n                that._zoneTitle.value(\"\");\n            }\n\n        }\n    });\n\n    ui.plugin(TimezoneEditor);\n\n    var ZONETITLEOPTIONTEMPLATE = kendo.template('<option value=\"#=other_zone#\">#=name#</option>');\n    var ZONEOPTIONTEMPLATE = kendo.template('<option value=\"#=zone#\">#=territory#</option>');\n\n    var MobileTimezoneEditor = Widget.extend({\n        init: function(element, options) {\n            var that = this,\n                zones = kendo.timezone.windows_zones;\n\n            if (!zones || !kendo.timezone.zones_titles) {\n                throw new Error('kendo.timezones.min.js is not included.');\n            }\n\n            Widget.fn.init.call(that, element, options);\n\n            that.wrapper = that.element;\n\n            that._zonesQuery = new kendo.data.Query(zones);\n            that._zoneTitlePicker();\n            that._zonePicker();\n\n            that.value(that.options.value);\n        },\n\n        options: {\n            name: \"MobileTimezoneEditor\",\n            optionLabel: \"No timezone\",\n            value: \"\"\n        },\n\n        events: [ \"change\" ],\n\n        _bindZones: function(value) {\n            var data = value ? this._filter(value) : [];\n\n            this._zone.html(this._options(data, ZONEOPTIONTEMPLATE));\n        },\n\n        _filter: function(value) {\n            return this._zonesQuery.filter({ field: \"other_zone\", operator: \"eq\", value: value }).data;\n        },\n\n        _options: function(data, template, optionLabel) {\n            var idx = 0;\n            var html = \"\";\n            var length = data.length;\n\n            if (optionLabel) {\n                html += template({ other_zone: \"\", name: optionLabel });\n            }\n\n            for (; idx < length; idx++) {\n                html += template(data[idx]);\n            }\n\n            return html;\n        },\n\n        _zoneTitlePicker: function() {\n            var that = this;\n            var options = that._options(kendo.timezone.zones_titles, ZONETITLEOPTIONTEMPLATE, that.options.optionLabel);\n\n            that._zoneTitle = $('<select>' + options + '</select>')\n                                .appendTo(that.wrapper)\n                                .change(function() {\n                                    var value = this.value;\n                                    var zone = that._zone;\n\n                                    that._bindZones(value);\n\n                                    if (value && zone[0].children.length > 1) {\n                                        zone.show();\n                                    } else {\n                                        zone.hide();\n                                    }\n\n                                    that._value = zone[0].value;\n\n                                    that.trigger(\"change\");\n                                });\n        },\n\n        _zonePicker: function() {\n            var that = this;\n\n            that._zone = $('<select style=\"display:none\"></select>')\n                            .appendTo(this.wrapper)\n                            .change(function() {\n                                that._value = this.value;\n\n                                that.trigger(\"change\");\n                            });\n\n            that._bindZones(that._zoneTitle.val());\n            that._value = that._zone[0].value;\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            kendo.destroy(this.wrapper);\n        },\n\n        value: function(value) {\n            var that = this;\n            var zonePicker = that._zone;\n            var other_zone = \"\";\n            var zone_value = \"\";\n            var zone;\n\n            if (value === undefined) {\n                return that._value;\n            }\n\n            zone = that._zonesQuery.filter({ field: \"zone\", operator: \"eq\", value: value }).data[0];\n\n            if (zone) {\n                zone_value = zone.zone;\n                other_zone = zone.other_zone;\n            }\n\n            that._zoneTitle.val(other_zone);\n            that._bindZones(other_zone);\n\n            zonePicker.val(zone_value);\n            zone_value = zonePicker[0].value;\n\n            if (zone_value && zonePicker[0].children.length > 1) {\n                zonePicker.show();\n            } else {\n                zonePicker.hide();\n            }\n\n            that._value = zone_value;\n        }\n    });\n\n    ui.plugin(MobileTimezoneEditor);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        proxy = $.proxy,\n        abs = Math.abs,\n        MAX_DOUBLE_TAP_DISTANCE = 20;\n\n    var Swipe = kendo.Class.extend({\n        init: function(element, callback, options) {\n            options = $.extend({\n                minXDelta: 30,\n                maxYDelta: 20,\n                maxDuration: 1000\n            }, options);\n\n            new kendo.UserEvents(element, {\n                surface: options.surface,\n                allowSelection: true,\n\n                start: function(e) {\n                    if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n                        e.sender.capture();\n                    }\n                },\n\n                move: function(e) {\n                    var touch = e.touch,\n                    duration = e.event.timeStamp - touch.startTime,\n                    direction = touch.x.initialDelta > 0 ? \"right\" : \"left\";\n\n                    if (\n                        abs(touch.x.initialDelta) >= options.minXDelta &&\n                        abs(touch.y.initialDelta) < options.maxYDelta &&\n                    duration < options.maxDuration)\n                    {\n                        callback({\n                            direction: direction,\n                            touch: touch,\n                            target: touch.target\n                        });\n\n                        touch.cancel();\n                    }\n                }\n            });\n        }\n    });\n\n    var Touch = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n            options = that.options;\n\n            element = that.element;\n            that.wrapper = element;\n\n            function eventProxy(name) {\n                return function(e) {\n                    that._triggerTouch(name, e);\n                };\n            }\n\n            function gestureEventProxy(name) {\n                return function(e) {\n                    that.trigger(name, { touches: e.touches, distance: e.distance, center: e.center, event: e.event });\n                };\n            }\n\n            that.events = new kendo.UserEvents(element, {\n                filter: options.filter,\n                surface: options.surface,\n                minHold: options.minHold,\n                multiTouch: options.multiTouch,\n                allowSelection: true,\n                press: eventProxy(\"touchstart\"),\n                hold: eventProxy(\"hold\"),\n                tap: proxy(that, \"_tap\"),\n                gesturestart: gestureEventProxy(\"gesturestart\"),\n                gesturechange: gestureEventProxy(\"gesturechange\"),\n                gestureend: gestureEventProxy(\"gestureend\")\n            });\n\n            if (options.enableSwipe) {\n                that.events.bind(\"start\", proxy(that, \"_swipestart\"));\n                that.events.bind(\"move\", proxy(that, \"_swipemove\"));\n            } else {\n                that.events.bind(\"start\", proxy(that, \"_dragstart\"));\n                that.events.bind(\"move\", eventProxy(\"drag\"));\n                that.events.bind(\"end\", eventProxy(\"dragend\"));\n            }\n\n            kendo.notify(that);\n        },\n\n        events: [\n            \"touchstart\",\n            \"dragstart\",\n            \"drag\",\n            \"dragend\",\n            \"tap\",\n            \"doubletap\",\n            \"hold\",\n            \"swipe\",\n            \"gesturestart\",\n            \"gesturechange\",\n            \"gestureend\"\n        ],\n\n        options: {\n            name: \"Touch\",\n            surface: null,\n            global: false,\n            multiTouch: false,\n            enableSwipe: false,\n            minXDelta: 30,\n            maxYDelta: 20,\n            maxDuration: 1000,\n            minHold: 800,\n            doubleTapTimeout: 800\n        },\n\n        cancel: function() {\n            this.events.cancel();\n        },\n\n        _triggerTouch: function(type, e) {\n            if (this.trigger(type, { touch: e.touch, event: e.event })) {\n                e.preventDefault();\n            }\n        },\n\n        _tap: function(e) {\n            var that = this,\n                lastTap = that.lastTap,\n                touch = e.touch;\n\n            if (lastTap &&\n                (touch.endTime - lastTap.endTime < that.options.doubleTapTimeout) &&\n                kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE\n                ) {\n\n               that._triggerTouch(\"doubletap\", e);\n               that.lastTap = null;\n            } else {\n                that._triggerTouch(\"tap\", e);\n                that.lastTap = touch;\n            }\n        },\n\n        _dragstart: function(e) {\n            this._triggerTouch(\"dragstart\", e);\n        },\n\n        _swipestart: function(e) {\n            if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n                e.sender.capture();\n            }\n        },\n\n        _swipemove: function(e) {\n            var that = this,\n                options = that.options,\n                touch = e.touch,\n                duration = e.event.timeStamp - touch.startTime,\n                direction = touch.x.initialDelta > 0 ? \"right\" : \"left\";\n\n            if (\n                abs(touch.x.initialDelta) >= options.minXDelta &&\n                abs(touch.y.initialDelta) < options.maxYDelta &&\n                duration < options.maxDuration\n                )\n            {\n                that.trigger(\"swipe\", {\n                    direction: direction,\n                    touch: e.touch\n                });\n\n                touch.cancel();\n            }\n        }\n    });\n\n\n    window.jQuery.fn.kendoMobileSwipe = function(callback, options) {\n        this.each(function() {\n            new Swipe(this, callback, options);\n        });\n    };\n\n    kendo.ui.plugin(Touch);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($) {\n    var kendo = window.kendo;\n    var kendoDom = kendo.dom;\n    var kendoDomElement = kendoDom.element;\n    var kendoTextElement = kendoDom.text;\n    var browser = kendo.support.browser;\n    var mobileOS = kendo.support.mobileOS;\n    var ui = kendo.ui;\n    var Widget = ui.Widget;\n    var extend = $.extend;\n    var map = $.map;\n    var isFunction = $.isFunction;\n    var keys = kendo.keys;\n    var titleFromField = {\n        \"title\": \"Title\",\n        \"start\": \"Start Time\",\n        \"end\": \"End Time\",\n        \"percentComplete\": \"% Done\",\n        \"parentId\": \"Predecessor ID\",\n        \"id\": \"ID\",\n        \"orderId\": \"Order ID\"\n    };\n    var STRING = \"string\";\n    var NS = \".kendoGanttList\";\n    var CLICK = \"click\";\n    var DOT = \".\";\n\n    var listStyles = {\n        wrapper: \"k-treelist k-grid k-widget\",\n        header: \"k-header\",\n        alt: \"k-alt\",\n        editCell: \"k-edit-cell\",\n        group: \"k-treelist-group\",\n        gridHeader: \"k-grid-header\",\n        gridHeaderWrap: \"k-grid-header-wrap\",\n        gridContent: \"k-grid-content\",\n        gridContentWrap: \"k-grid-content\",\n        selected: \"k-state-selected\",\n        icon: \"k-icon\",\n        iconCollapse: \"k-i-collapse\",\n        iconExpand: \"k-i-expand\",\n        iconHidden: \"k-i-none\",\n        iconPlaceHolder: \"k-icon k-i-none\",\n        input: \"k-input\",\n        dropPositions: \"k-insert-top k-insert-bottom k-add k-insert-middle\",\n        dropTop: \"k-insert-top\",\n        dropBottom: \"k-insert-bottom\",\n        dropAdd: \"k-add\",\n        dropMiddle: \"k-insert-middle\",\n        dropDenied: \"k-denied\",\n        dragStatus: \"k-drag-status\",\n        dragClue: \"k-drag-clue\",\n        dragClueText: \"k-clue-text\"\n    };\n\n    function createPlaceholders(options) {\n        var spans = [];\n        var className = options.className;\n\n        for (var i = 0, level = options.level; i < level; i++) {\n            spans.push(kendoDomElement(\"span\", { className: className }));\n        }\n\n        return spans;\n    }\n\n    function blurActiveElement() {\n        var activeElement = kendo._activeElement();\n\n        if (activeElement.nodeName.toLowerCase() !== \"body\") {\n            $(activeElement).blur();\n        }\n    }\n\n    var GanttList = ui.GanttList = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            if (this.options.columns.length === 0) {\n                this.options.columns.push(\"title\");\n            }\n\n            this.dataSource = this.options.dataSource;\n\n            this._columns();\n            this._layout();\n            this._domTrees();\n            this._header();\n            this._sortable();\n            this._editable();\n            this._selectable();\n            this._draggable();\n            this._attachEvents();\n\n            this._adjustHeight();\n        },\n\n        _adjustHeight: function() {\n            this.content.height(this.element.height() - this.header.parent().outerHeight());\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            if (this._reorderDraggable) {\n                this._reorderDraggable.destroy();\n            }\n\n            if (this._tableDropArea) {\n                this._tableDropArea.destroy();\n            }\n\n            if (this._contentDropArea) {\n                this._contentDropArea.destroy();\n            }\n\n            if (this.touch) {\n                this.touch.destroy();\n            }\n\n            this.content.off(NS);\n            this.header = null;\n            this.content = null;\n            this.levels = null;\n\n            kendo.destroy(this.element);\n        },\n\n        options: {\n            name: \"GanttList\",\n            selectable: true,\n            editable: true\n        },\n\n        _attachEvents: function() {\n            var that = this;\n            var listStyles = GanttList.styles;\n\n            that.content\n                .on(CLICK + NS, \"td > span.\" + listStyles.icon + \":not(.\" + listStyles.iconHidden + \")\", function(e) {\n                    var element = $(this);\n                    var model = that._modelFromElement(element);\n\n                    model.set(\"expanded\", !model.get(\"expanded\"));\n\n                    e.stopPropagation();\n                });\n        },\n\n        _domTrees: function() {\n            this.headerTree = new kendoDom.Tree(this.header[0]);\n            this.contentTree = new kendoDom.Tree(this.content[0]);\n        },\n\n        _columns: function() {\n            var columns = this.options.columns;\n            var column;\n            var model = function() {\n                this.field = \"\";\n                this.title = \"\";\n                this.editable = false;\n                this.sortable = false;\n            };\n\n            this.columns = map(columns, function(column) {\n                column = typeof column === \"string\" ? {\n                    field: column, title: titleFromField[column]\n                } : column;\n\n                return extend(new model(), column);\n            });\n        },\n\n        _layout: function () {\n            var element = this.element;\n            var listStyles = GanttList.styles;\n\n            element\n                .addClass(listStyles.wrapper)\n                .append(\"<div class='\" + listStyles.gridHeader + \"'><div class='\" + listStyles.gridHeaderWrap + \"'></div></div>\")\n                .append(\"<div class='\" + listStyles.gridContentWrap + \"'></div>\");\n\n            this.header = element.find(DOT + listStyles.gridHeaderWrap);\n            this.content = element.find(DOT + listStyles.gridContent);\n        },\n\n        _header: function() {\n            var domTree = this.headerTree;\n            var colgroup;\n            var thead;\n            var table;\n\n            colgroup = kendoDomElement(\"colgroup\", null, this._cols());\n            thead = kendoDomElement(\"thead\", { \"role\": \"rowgroup\" }, [kendoDomElement(\"tr\", { \"role\": \"row\" }, this._ths())]);\n            table = kendoDomElement(\"table\", {\n                \"style\": { \"min-width\": this.options.listWidth + \"px\" },\n                \"role\": \"grid\"\n            }, [colgroup, thead]);\n\n            domTree.render([table]);\n        },\n\n        _render: function(tasks) {\n            var colgroup;\n            var tbody;\n            var table;\n\n            this.levels = [{ field: null, value: 0 }];\n\n            colgroup = kendoDomElement(\"colgroup\", null, this._cols());\n            tbody = kendoDomElement(\"tbody\", { \"role\": \"rowgroup\" }, this._trs(tasks));\n            table = kendoDomElement(\"table\", {\n                \"style\": { \"min-width\": this.options.listWidth + \"px\" },\n                \"tabIndex\": 0,\n                \"role\": \"treegrid\"\n            }, [colgroup, tbody]);\n\n            this.contentTree.render([table]);\n            this.trigger(\"render\");\n        },\n\n        _ths: function() {\n            var columns = this.columns;\n            var column;\n            var attr;\n            var ths = [];\n\n            for (var i = 0, length = columns.length; i < length; i++) {\n                column = columns[i];\n                attr = {\n                    \"data-field\": column.field,\n                    \"data-title\": column.title, className: GanttList.styles.header,\n                    \"role\": \"columnheader\"\n                };\n\n                ths.push(kendoDomElement(\"th\", attr, [kendoTextElement(column.title)]));\n            }\n\n            return ths;\n        },\n\n        _cols: function() {\n            var columns = this.columns;\n            var column;\n            var style;\n            var width;\n            var cols = [];\n\n            for (var i = 0, length = columns.length; i < length; i++) {\n                column = columns[i];\n                width = column.width;\n\n                if (width && parseInt(width, 10) !== 0) {\n                    style = { style: { width: typeof width === STRING ? width : width + \"px\" } };\n                } else {\n                    style = null;\n                }\n\n                cols.push(kendoDomElement(\"col\", style, []));\n            }\n\n            return cols;\n        },\n\n        _trs: function(tasks) {\n            var task;\n            var rows = [];\n            var attr;\n            var className = [];\n            var level;\n            var listStyles = GanttList.styles;\n\n            for (var i = 0, length = tasks.length; i < length; i++) {\n                task = tasks[i];\n                level = this._levels({\n                    idx: task.parentId,\n                    id: task.id,\n                    summary: task.summary\n                });\n\n                attr = {\n                    \"data-uid\": task.uid,\n                    \"data-level\": level,\n                    \"role\": \"row\"\n                };\n\n                if (task.summary) {\n                    attr[\"aria-expanded\"] = task.expanded;\n                }\n\n                if (i % 2 !== 0) {\n                    className.push(listStyles.alt);\n                }\n\n                if (task.summary) {\n                    className.push(listStyles.group);\n                }\n\n                if (className.length) {\n                    attr.className = className.join(\" \");\n                }\n\n                rows.push(this._tds({\n                    task: task,\n                    attr: attr,\n                    level: level\n                }));\n\n                className = [];\n            }\n\n            return rows;\n        },\n\n        _tds: function(options) {\n            var children = [];\n            var columns = this.columns;\n            var column;\n\n            for (var i = 0, l = columns.length; i < l; i++) {\n                column = columns[i];\n\n                children.push(this._td({ task: options.task, column: column, level: options.level }));\n            }\n\n            return kendoDomElement(\"tr\", options.attr, children);\n        },\n\n        _td: function(options) {\n            var children = [];\n            var resourcesField = this.options.resourcesField;\n            var listStyles = GanttList.styles;\n            var task = options.task;\n            var column = options.column;\n            var value = task.get(column.field) || [];\n            var formatedValue;\n\n            if (column.field == resourcesField) {\n                formatedValue = [];\n                for (var i = 0; i < value.length; i++) {\n                    formatedValue.push(kendo.format(\"{0} [{1}]\", value[i].get(\"name\"), value[i].get(\"formatedValue\")));\n                }\n                formatedValue = formatedValue.join(\", \");\n            } else {\n                formatedValue = column.format ? kendo.format(column.format, value) : value;\n            }\n\n            if (column.field === \"title\") {\n                children = createPlaceholders({ level: options.level, className: listStyles.iconPlaceHolder });\n                children.push(kendoDomElement(\"span\", {\n                    className: listStyles.icon + \" \" + (task.summary ? (task.expanded ? listStyles.iconCollapse : listStyles.iconExpand)\n                        : listStyles.iconHidden)\n                }));\n            }\n\n            children.push(kendoDomElement(\"span\", null, [kendoTextElement(formatedValue)]));\n\n            return kendoDomElement(\"td\", { \"role\": \"gridcell\" }, children);\n        },\n\n        _levels: function(options) {\n            var levels = this.levels;\n            var level;\n            var summary = options.summary;\n            var idx = options.idx;\n            var id = options.id;\n\n            for (var i = 0, length = levels.length; i < length; i++) {\n                level = levels[i];\n\n                if (level.field == idx) {\n\n                    if (summary) {\n                        levels.push({ field: id, value: level.value + 1 });\n                    }\n\n                    return level.value;\n                }\n            }\n        },\n\n        _sortable: function() {\n            var resourcesField = this.options.resourcesField;\n            var columns = this.columns;\n            var column;\n            var sortableInstance;\n            var cells = this.header.find(\"th\");\n            var cell;\n\n            for (var idx = 0, length = cells.length; idx < length; idx++) {\n                column = columns[idx];\n\n                if (column.sortable && column.field !== resourcesField) {\n                    cell = cells.eq(idx);\n\n                    sortableInstance = cell.data(\"kendoColumnSorter\");\n\n                    if (sortableInstance) {\n                        sortableInstance.destroy();\n                    }\n\n                    cell.attr(\"data-\" + kendo.ns + \"field\", column.field)\n                        .kendoColumnSorter({ dataSource: this.dataSource });\n                }\n            }\n            cells = null;\n        },\n\n        _selectable: function() {\n            var that = this;\n            var selectable = this.options.selectable;\n\n            if (selectable) {\n                this.content\n                   .on(CLICK + NS, \"tr\", function(e) {\n                       var element = $(this);\n\n                       if (!e.ctrlKey) {\n                           that.select(element);\n                       } else {\n                           that.clearSelection();\n                       }\n                   });\n            }\n        },\n\n        select: function(value) {\n            var element = this.content.find(value);\n            var selectedClassName = GanttList.styles.selected;\n\n            if (element.length) {\n                element\n                    .siblings(DOT + selectedClassName)\n                    .removeClass(selectedClassName)\n                    .attr(\"aria-selected\", false)\n                    .end()\n                    .addClass(selectedClassName)\n                    .attr(\"aria-selected\", true);\n\n                this.trigger(\"change\");\n\n                return;\n            }\n\n            return this.content.find(DOT + selectedClassName);\n        },\n\n        clearSelection: function() {\n            var selected = this.select();\n\n            if (selected.length) {\n                selected.removeClass(GanttList.styles.selected);\n\n                this.trigger(\"change\");\n            }\n        },\n\n        _setDataSource: function(dataSource) {\n            this.dataSource = dataSource;\n        },\n\n        _editable: function() {\n            var that = this;\n            var listStyles = GanttList.styles;\n            var iconSelector = \"span.\" + listStyles.icon + \":not(\" + listStyles.iconHidden +\")\";\n            var finishEdit = function() {\n                if (that.editable && that.editable.end()) {\n                    that._closeCell();\n                }\n            };\n            var mousedown = function(e) {\n                var currentTarget = $(e.currentTarget);\n\n                if (!currentTarget.hasClass(listStyles.editCell)) {\n                    blurActiveElement();\n                }\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this._startEditHandler = function(e) {\n                var td = e.currentTarget ? $(e.currentTarget) : e;\n                var column = that._columnFromElement(td);\n\n                if (that.editable) {\n                    return;\n                }\n\n                if (column.editable) {\n                    that._editCell({ cell: td, column: column });\n                }\n            };\n\n            that.content\n                .on(\"focusin\" + NS, function() {\n                    clearTimeout(that.timer);\n                    that.timer = null;\n                })\n                .on(\"focusout\" + NS, function() {\n                    that.timer = setTimeout(finishEdit, 1);\n                })\n                .on(\"keydown\" + NS, function(e) {\n                    var key = e.keyCode;\n                    var cell;\n                    var model;\n\n                    switch (key) {\n                        case keys.ENTER:\n                            blurActiveElement();\n                            finishEdit();\n                            break;\n                        case keys.ESC:\n                            if (that.editable) {\n                                cell = that._editableContainer;\n                                model = that._modelFromElement(cell);\n                                if (!that.trigger(\"cancel\", { model: model, cell: cell })) {\n                                    that._closeCell(true);\n                                }\n                            }\n                            break;\n                    }\n                });\n\n            if (!mobileOS) {\n                that.content\n                    .on(\"mousedown\" + NS, \"td\", function(e) {\n                        mousedown(e);\n                    })\n                    .on(\"dblclick\" + NS, \"td\", function(e) {\n                        if (!$(e.target).is(iconSelector)) {\n                            that._startEditHandler(e);\n                        }\n                    });\n            } else {\n                that.touch = that.content\n                    .kendoTouch({\n                        filter: \"td\",\n                        touchstart: function(e) {\n                            mousedown(e.touch);\n                        },\n                        doubletap: function(e) {\n                            if (!$(e.touch.initialTouch).is(iconSelector)) {\n                                that._startEditHandler(e.touch);\n                            }\n                        }\n                    }).data(\"kendoTouch\");\n            }\n        },\n\n        _editCell: function(options) {\n            var resourcesField = this.options.resourcesField;\n            var listStyles = GanttList.styles;\n            var cell = options.cell;\n            var column = options.column;\n            var model = this._modelFromElement(cell);\n            var modelCopy = this.dataSource._createNewModel(model.toJSON());\n            var field = modelCopy.fields[column.field] || modelCopy[column.field];\n            var validation = field.validation;\n            var DATATYPE = kendo.attr(\"type\");\n            var BINDING = kendo.attr(\"bind\");\n            var attr = {\n                \"name\": column.field,\n                \"required\": field.validation ?\n                    field.validation.required === true : false\n            };\n            var editor;\n\n            if (column.field === resourcesField) {\n                column.editor(cell, modelCopy);\n                return;\n            }\n\n            this._editableContent = cell.children().detach();\n            this._editableContainer = cell;\n\n            cell.data(\"modelCopy\", modelCopy);\n\n            if ((field.type === \"date\" || $.type(field) === \"date\") &&\n                /H|m|s|F|g|u/.test(column.format)) {\n                if (column.field === \"start\") {\n                    delete field.validation.dateCompare;\n                }\n\n                attr[BINDING] = \"value:\" + column.field;\n                attr[DATATYPE] = \"date\";\n                editor = function(container, options) {\n                    $('<input type=\"text\"/>').attr(attr)\n                        .appendTo(container).kendoDateTimePicker({ format: options.format });\n                };\n            }\n\n            this.editable = cell\n                .addClass(listStyles.editCell)\n                .kendoEditable({\n                    fields: {\n                        field: column.field,\n                        format: column.format,\n                        editor: column.editor || editor\n                    },\n                    model: modelCopy,\n                    clearContainer: false\n                }).data(\"kendoEditable\");\n\n            if (validation && validation.dateCompare &&\n                isFunction(validation.dateCompare) && validation.message) {\n                $('<span ' + kendo.attr(\"for\") + '=\"' + column.field + '\" class=\"k-invalid-msg\"/>')\n                    .hide()\n                    .appendTo(cell);\n\n                cell.find('[name=' + column.field + ']')\n                    .attr(kendo.attr(\"dateCompare-msg\"), validation.message);\n            }\n\n            if (this.trigger(\"edit\", { model: model, cell: cell })) {\n                this._closeCell(true);\n            }\n        },\n\n        _closeCell: function(cancelUpdate) {\n            var listStyles = GanttList.styles;\n            var cell = this._editableContainer;\n            var model = this._modelFromElement(cell);\n            var column = this._columnFromElement(cell);\n            var field = column.field;\n            var copy = cell.data(\"modelCopy\");\n            var taskInfo = {};\n\n            taskInfo[field] = copy.get(field);\n\n            cell.empty()\n                .removeData(\"modelCopy\")\n                .removeClass(listStyles.editCell)\n                .append(this._editableContent);\n\n            this.editable.destroy();\n            this.editable = null;\n\n            this._editableContainer = null;\n            this._editableContent = null;\n\n            if (!cancelUpdate) {\n                if (field === \"start\") {\n                    taskInfo.end = new Date(taskInfo.start.getTime() + model.duration());\n                }\n\n                this.trigger(\"update\", { task: model, updateInfo: taskInfo });\n            }\n        },\n\n        _draggable: function() {\n            var that = this;\n            var draggedTask = null;\n            var dropAllowed = true;\n            var dropTarget;\n            var listStyles = GanttList.styles;\n            var selector = 'tr[' + kendo.attr(\"level\") + ' = 0]:last';\n            var action = {};\n            var clear = function() {\n                draggedTask = null;\n                dropTarget = null;\n                dropAllowed = true;\n                action = {};\n            };\n            var allowDrop = function(task) {\n                var parent = task;\n\n                while (parent) {\n                    if (draggedTask.get(\"id\") === parent.get(\"id\")) {\n                        dropAllowed = false;\n                        break;\n                    }\n                    parent = that.dataSource.taskParent(parent);\n                }\n            };\n            var defineLimits = function() {\n                var height = $(dropTarget).height();\n                var offsetTop = kendo.getOffset(dropTarget).top;\n\n                extend(dropTarget, {\n                    beforeLimit: offsetTop + height * 0.25,\n                    afterLimit: offsetTop + height * 0.75\n                });\n            };\n            var defineAction = function(coordinate) {\n                var location = coordinate.location;\n                var className = listStyles.dropAdd;\n                var command = \"add\";\n                var level = parseInt(dropTarget.attr(kendo.attr(\"level\")), 10);\n                var sibling;\n\n                if (location <= dropTarget.beforeLimit) {\n                    sibling = dropTarget.prev();\n                    className = listStyles.dropTop;\n                    command = \"insert-before\";\n                } else if (location >= dropTarget.afterLimit) {\n                    sibling = dropTarget.next();\n                    className = listStyles.dropBottom;\n                    command = \"insert-after\";\n                }\n\n                if (sibling && parseInt(sibling.attr(kendo.attr(\"level\")), 10) === level) {\n                    className = listStyles.dropMiddle;\n                }\n\n                action.className = className;\n                action.command = command;\n            };\n            var status = function() {\n                return that._reorderDraggable\n                            .hint\n                            .children(DOT + listStyles.dragStatus)\n                            .removeClass(listStyles.dropPositions);\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this._reorderDraggable = this.content\n                .kendoDraggable({\n                    distance: 10,\n                    holdToDrag: mobileOS,\n                    group: \"listGroup\",\n                    filter: \"tr[data-uid]\",\n                    ignore: DOT + listStyles.input,\n                    hint: function(target) {\n                        return $('<div class=\"' + listStyles.header + \" \" + listStyles.dragClue + '\"/>')\n                                .css({\n                                    width: 300,\n                                    paddingLeft: target.css(\"paddingLeft\"),\n                                    paddingRight: target.css(\"paddingRight\"),\n                                    lineHeight: target.height() + \"px\",\n                                    paddingTop: target.css(\"paddingTop\"),\n                                    paddingBottom: target.css(\"paddingBottom\")\n                                })\n                                .append('<span class=\"' + listStyles.icon + \" \" + listStyles.dragStatus +'\" /><span class=\"' + listStyles.dragClueText + '\"/>');\n                    },\n                    cursorOffset: { top: -20, left: 0 },\n                    container: this.content,\n                    \"dragstart\": function(e) {\n                        if (that.editable) {\n                            e.preventDefault();\n                        }\n                        draggedTask = that._modelFromElement(e.currentTarget);\n                        this.hint.children(DOT + listStyles.dragClueText)\n                            .text(draggedTask.get(\"title\"));\n                    },\n                    \"drag\": function(e) {\n                        if (dropAllowed) {\n                            defineAction(e.y);\n                            status().addClass(action.className);\n                        }\n                    },\n                    \"dragend\": function(e) {\n                        clear();\n                    },\n                    \"dragcancel\": function(e) {\n                        clear();\n                    }\n                }).data(\"kendoDraggable\");\n\n            this._tableDropArea = this.content\n                .kendoDropTargetArea({\n                    distance: 0,\n                    group: \"listGroup\",\n                    filter: \"tr[data-uid]\",\n                    \"dragenter\": function(e) {\n                        dropTarget = e.dropTarget;\n                        allowDrop(that._modelFromElement(dropTarget));\n                        defineLimits();\n                        status().toggleClass(listStyles.dropDenied, !dropAllowed);\n                    },\n                    \"dragleave\": function(e) {\n                        dropAllowed = true;\n                        status();\n                    },\n                    \"drop\": function(e) {\n                        var target = that._modelFromElement(dropTarget);\n                        var orderId = target.orderId;\n                        var taskInfo = {\n                            parentId: target.parentId\n                        };\n\n                        if (dropAllowed) {\n                            switch (action.command) {\n                                case \"add\":\n                                    taskInfo.parentId = target.id;\n                                    break;\n                                case \"insert-before\":\n                                    if (target.parentId === draggedTask.parentId &&\n                                        target.orderId > draggedTask.orderId) {\n                                            taskInfo.orderId = orderId - 1;\n                                    } else {\n                                        taskInfo.orderId = orderId;\n                                    }\n                                    break;\n                                case \"insert-after\":\n                                    if (target.parentId === draggedTask.parentId &&\n                                        target.orderId > draggedTask.orderId) {\n                                            taskInfo.orderId = orderId;\n                                    } else {\n                                        taskInfo.orderId = orderId + 1;\n                                    }\n                                    break;\n                            }\n                            that.trigger(\"update\", {\n                                task: draggedTask,\n                                updateInfo: taskInfo\n                            });\n                        }\n                    }\n                }).data(\"kendoDropTargetArea\");\n\n            this._contentDropArea = this.element\n               .kendoDropTargetArea({\n                   distance: 0,\n                   group: \"listGroup\",\n                   filter: DOT + listStyles.gridContent,\n                   \"drop\": function(e) {\n                       var target = that._modelFromElement(that.content.find(selector));\n                       var orderId = target.orderId;\n                       var taskInfo = {\n                           parentId: null,\n                           orderId: draggedTask.parentId !== null ?\n                                        orderId + 1 : orderId\n                       };\n\n                        that.trigger(\"update\", {\n                            task: draggedTask,\n                            updateInfo: taskInfo\n                        });\n                   }\n               }).data(\"kendoDropTargetArea\");\n        },\n\n        _modelFromElement: function(element) {\n            var row = element.closest(\"tr\");\n            var model = this.dataSource.getByUid(row.attr(kendo.attr(\"uid\")));\n\n            return model;\n        },\n\n        _columnFromElement: function(element) {\n            var td = element.closest(\"td\");\n            var tr = td.parent();\n            var idx = tr.children().index(td);\n\n            return this.columns[idx];\n        }\n    });\n\n    extend(true, ui.GanttList, { styles: listStyles });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($) {\n\n    var Widget = kendo.ui.Widget;\n    var kendoDomElement = kendo.dom.element;\n    var kendoTextElement = kendo.dom.text;\n    var isPlainObject = $.isPlainObject;\n    var extend = $.extend;\n    var proxy = $.proxy;\n    var browser = kendo.support.browser;\n    var mobileOS = kendo.support.mobileOS;\n    var keys = kendo.keys;\n    var Query = kendo.data.Query;\n    var NS = \".kendoGanttTimeline\";\n    var CLICK = \"click\";\n    var DBLCLICK = \"dblclick\";\n    var MOUSEMOVE = \"mousemove\";\n    var MOUSEENTER = \"mouseenter\";\n    var MOUSELEAVE = \"mouseleave\";\n    var KEYDOWN = \"keydown\";\n    var DOT = \".\";\n    var TIME_HEADER_TEMPLATE = kendo.template(\"#=kendo.toString(start, 't')#\");\n    var DAY_HEADER_TEMPLATE = kendo.template(\"#=kendo.toString(start, 'ddd M/dd')#\");\n    var WEEK_HEADER_TEMPLATE = kendo.template(\"#=kendo.toString(start, 'ddd M/dd')# - #=kendo.toString(kendo.date.addDays(end, -1), 'ddd M/dd')#\");\n    var MONTH_HEADER_TEMPLATE = kendo.template(\"#=kendo.toString(start, 'MMM')#\");\n    var YEAR_HEADER_TEMPLATE = kendo.template(\"#=kendo.toString(start, 'yyyy')#\");\n    var RESIZE_HINT = kendo.template('<div class=\"#=styles.marquee#\">' +\n                           '<div class=\"#=styles.marqueeColor#\"></div>' +\n                       '</div>');\n    var RESIZE_TOOLTIP_TEMPLATE = kendo.template('<div style=\"z-index: 100002;\" class=\"#=styles.tooltipWrapper#\">' +\n                                   '<div class=\"#=styles.tooltipContent#\">' +\n                                        '<div>#=messages.start#: #=kendo.toString(start, format)#</div>' +\n                                        '<div>#=messages.end#: #=kendo.toString(end, format)#</div>' +\n                                   '</div>' +\n                              '</div>');\n    var PERCENT_RESIZE_TOOLTIP_TEMPLATE = kendo.template('<div style=\"z-index: 100002;\" class=\"#=styles.tooltipWrapper#\" >' +\n                                   '<div class=\"#=styles.tooltipContent#\">#=text#%</div>' +\n                                   '<div class=\"#=styles.tooltipCallout#\" style=\"left:13px;\"></div>' +\n                              '</div>');\n    var TASK_TOOLTIP_TEMPLATE = kendo.template('<div class=\"#=styles.taskDetails#\">' +\n                                    '<strong>#=task.title#</strong>' +\n                                    '<div class=\"#=styles.taskDetailsPercent#\">#=kendo.toString(task.percentComplete, \"p0\")#</div>' +\n                                    '<ul class=\"#=styles.reset#\">' +\n                                        '<li>#=messages.start#: #=kendo.toString(task.start, \"h:mm tt ddd, MMM d\")#</li>' +\n                                        '<li>#=messages.end#: #=kendo.toString(task.end, \"h:mm tt ddd, MMM d\")#</li>' +\n                                    '</ul>' +\n                                '</div>');\n\n    var defaultViews = {\n        day: {\n            type: \"kendo.ui.GanttDayView\"\n        },\n        week: {\n            type: \"kendo.ui.GanttWeekView\"\n        },\n        month: {\n            type: \"kendo.ui.GanttMonthView\"\n        },\n        year: {\n            type: \"kendo.ui.GanttYearView\"\n        }\n    };\n\n    function trimOptions(options) {\n        delete options.name;\n        delete options.prefix;\n        delete options.views;\n\n        return options;\n    }\n\n    function getWorkDays(options) {\n        var workDays = [];\n        var dayIndex = options.workWeekStart;\n\n        workDays.push(dayIndex);\n\n        while (options.workWeekEnd != dayIndex) {\n            if (dayIndex > 6) {\n                dayIndex -= 7;\n            } else {\n                dayIndex++;\n            }\n            workDays.push(dayIndex);\n        }\n        return workDays;\n    }\n\n    function blurActiveElement() {\n        var activeElement = kendo._activeElement();\n\n        if (activeElement.nodeName.toLowerCase() !== \"body\") {\n            $(activeElement).blur();\n        }\n    }\n\n    var viewStyles = {\n        alt: \"k-alt\",\n        reset: \"k-reset\",\n        nonWorking: \"k-nonwork-hour\",\n        header: \"k-header\",\n        gridHeader: \"k-grid-header\",\n        gridHeaderWrap: \"k-grid-header-wrap\",\n        gridContent: \"k-grid-content\",\n        rowsTable: \"k-gantt-rows\",\n        columnsTable: \"k-gantt-columns\",\n        tasksTable: \"k-gantt-tasks\",\n        resource: \"k-resource\",\n        resourceAlt: \"k-resource k-alt\",\n        task: \"k-task\",\n        taskSingle: \"k-task-single\",\n        taskMilestone: \"k-task-milestone\",\n        taskSummary: \"k-task-summary\",\n        taskWrap: \"k-task-wrap\",\n        taskMilestoneWrap: \"k-milestone-wrap\",\n        resourcesWrap: \"k-resources-wrap\",\n        taskDot: \"k-task-dot\",\n        taskDotStart: \"k-task-start\",\n        taskDotEnd: \"k-task-end\",\n        taskDragHandle: \"k-task-draghandle\",\n        taskContent: \"k-task-content\",\n        taskTemplate: \"k-task-template\",\n        taskActions: \"k-task-actions\",\n        taskDelete: \"k-task-delete\",\n        taskComplete: \"k-task-complete\",\n        taskDetails: \"k-task-details\",\n        taskDetailsPercent: \"k-task-pct\",\n        link: \"k-link\",\n        icon: \"k-icon\",\n        iconDelete: \"k-si-close\",\n        taskResizeHandle: \"k-resize-handle\",\n        taskResizeHandleWest: \"k-resize-w\",\n        taskResizeHandleEast: \"k-resize-e\",\n        taskSummaryProgress: \"k-task-summary-progress\",\n        taskSummaryComplete: \"k-task-summary-complete\",\n        line: \"k-line\",\n        lineHorizontal: \"k-line-h\",\n        lineVertical: \"k-line-v\",\n        arrowWest: \"k-arrow-w\",\n        arrowEast: \"k-arrow-e\",\n        dragHint: \"k-drag-hint\",\n        dependencyHint: \"k-dependency-hint\",\n        tooltipWrapper: \"k-widget k-tooltip k-popup k-group k-reset\",\n        tooltipContent: \"k-tooltip-content\",\n        tooltipCallout: \"k-callout k-callout-s\",\n        callout: \"k-callout\",\n        marquee: \"k-marquee k-gantt-marquee\",\n        marqueeColor: \"k-marquee-color\"\n    };\n\n    var GanttView = kendo.ui.GanttView = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this.title = this.options.title || this.options.name;\n\n            this.header = this.element.find(DOT + GanttView.styles.gridHeader);\n\n            this.content = this.element.find(DOT + GanttView.styles.gridContent);\n\n            this.contentWidth = this.content.width();\n\n            this._workDays = getWorkDays(this.options);\n\n            this._headerTree = options.headerTree;\n\n            this._taskTree = options.taskTree;\n\n            this._dependencyTree = options.dependencyTree;\n\n            this._taskCoordinates = {};\n\n            this._currentTime();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            clearTimeout(this._tooltipTimeout);\n\n            this.headerRow = null;\n            this.header = null;\n            this.content = null;\n\n            this._dragHint = null;\n            this._resizeHint = null;\n            this._resizeTooltip = null;\n            this._taskTooltip = null;\n            this._percentCompleteResizeTooltip = null;\n\n            this._headerTree = null;\n            this._taskTree = null;\n            this._dependencyTree = null;\n        },\n\n        options: {\n            showWorkHours: false,\n            showWorkDays: false,\n            workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n            workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n            workWeekStart: 1,\n            workWeekEnd: 5,\n            hourSpan: 1,\n            slotSize: 100,\n            currentTimeMarker: {\n                 updateInterval: 10000\n            }\n        },\n\n        renderLayout: function() {\n            this._slots = this._createSlots();\n\n            this._tableWidth = this._calculateTableWidth();\n\n            this.createLayout(this._layout());\n\n            this._slotDimensions();\n\n            this._adjustHeight();\n        },\n\n        _adjustHeight: function() {\n            this.content.height(this.element.height() - this.header.outerHeight());\n        },\n\n        createLayout: function(rows) {\n            var headers = this._headers(rows);\n            var colgroup = this._colgroup();\n            var tree = this._headerTree;\n            var header = kendoDomElement(\"thead\", null, headers);\n            var table = kendoDomElement(\"table\", { style: { width: this._tableWidth + \"px\"} }, [colgroup, header]);\n\n            tree.render([table]);\n\n            this.headerRow = this.header.find(\"table:first tr\").last();\n        },\n\n        _slotDimensions: function() {\n            var headers = this.headerRow[0].children;\n            var slots = this._timeSlots();\n            var slot;\n            var header;\n\n            for (var i = 0, length = headers.length; i < length; i++) {\n                header = headers[i];\n                slot = slots[i];\n\n                slot.offsetLeft = header.offsetLeft;\n                slot.offsetWidth = header.offsetWidth;\n            }\n        },\n\n        render: function(tasks) {\n            var taskCount = tasks.length;\n            var styles = GanttView.styles;\n\n            var contentTable;\n            var rowsTable = this._rowsTable(taskCount);\n            var columnsTable = this._columnsTable(taskCount);\n            var tasksTable = this._tasksTable(tasks);\n            var currentTimeMarker = this.options.currentTimeMarker;\n\n            this._taskTree.render([rowsTable, columnsTable, tasksTable]);\n\n            contentTable = this.content.find(DOT + styles.rowsTable);\n\n            this._contentHeight = contentTable.height();\n            this._rowHeight = this._contentHeight / contentTable.find(\"tr\").length;\n\n            this.content.find(DOT + styles.columnsTable).height(this._contentHeight);\n\n            if (currentTimeMarker !== false && currentTimeMarker.updateInterval !== undefined) {\n                this._renderCurrentTime();\n            }\n        },\n\n        _rowsTable: function(rowCount) {\n            var rows = [];\n            var row;\n            var styles = GanttView.styles;\n            var attributes = [null, { className: styles.alt }];\n\n            for (var i = 0; i < rowCount; i++) {\n                row = kendoDomElement(\"tr\", attributes[i % 2], [\n                    kendoDomElement(\"td\", null, [\n                        kendoTextElement(\"\\u00a0\")\n                    ])\n                ]);\n\n                rows.push(row);\n            }\n\n            return this._createTable(1, rows, { className: styles.rowsTable });\n        },\n\n        _columnsTable: function(rowCount) {\n            var cells = [];\n            var row;\n            var styles = GanttView.styles;\n            var slots = this._timeSlots();\n            var slotsCount = slots.length;\n            var slot;\n            var slotSpan;\n            var totalSpan = 0;\n            var attributes;\n\n            for (var i = 0; i < slotsCount; i++) {\n                slot = slots[i];\n\n                attributes = {};\n\n                slotSpan = slot.span;\n\n                totalSpan += slotSpan;\n\n                if (slotSpan !== 1) {\n                    attributes.colspan = slotSpan;\n                }\n\n                if (slot.isNonWorking) {\n                    attributes.className = styles.nonWorking;\n                }\n\n                cells.push(kendoDomElement(\"td\", attributes, [\n                    kendoTextElement(\"\\u00a0\")\n                ]));\n            }\n\n            row = kendoDomElement(\"tr\", null, cells);\n\n            return this._createTable(totalSpan, [row], { className: styles.columnsTable});\n        },\n\n        _tasksTable: function(tasks) {\n            var rows = [];\n            var row;\n            var cell;\n            var position;\n            var task;\n            var styles = GanttView.styles;\n            var coordinates = this._taskCoordinates = {};\n            var size = this._calculateMilestoneWidth();\n            var milestoneWidth = Math.round(size.width);\n            var resourcesField = this.options.resourcesField;\n            var className = [styles.resource, styles.resourceAlt];\n            var resourcesPosition;\n            var resourcesMargin = this._calculateResourcesMargin();\n\n            var addCoordinates = function(rowIndex) {\n                var taskLeft;\n                var taskRight;\n\n                taskLeft = position.left;\n                taskRight = taskLeft + position.width;\n\n                if (task.isMilestone()) {\n                    taskLeft -= milestoneWidth / 2;\n                    taskRight = taskLeft + milestoneWidth;\n                }\n\n                coordinates[task.id] = {\n                    start: taskLeft,\n                    end: taskRight,\n                    rowIndex: rowIndex\n                };\n            };\n\n            for (var i = 0, l = tasks.length; i < l; i++) {\n                task = tasks[i];\n\n                position = this._taskPosition(task);\n\n                row = kendoDomElement(\"tr\", null);\n\n                cell = kendoDomElement(\"td\", null, [this._renderTask(tasks[i], position)]);\n\n                if (task[resourcesField] && task[resourcesField].length) {\n                    resourcesPosition = Math.max((position.width || size.clientWidth), 0) + position.left;\n\n                    cell.children.push(kendoDomElement(\"div\",\n                        {\n                            className: styles.resourcesWrap,\n                            style: { left: resourcesPosition + \"px\", width: (this._tableWidth - (resourcesPosition + resourcesMargin)) + \"px\" }\n                        },\n                        this._renderResources(task[resourcesField], className[i % 2])));\n                }\n\n                row.children.push(cell);\n\n                rows.push(row);\n\n                addCoordinates(i);\n            }\n\n            return this._createTable(1, rows, { className: GanttView.styles.tasksTable });\n        },\n\n        _createTable: function(colspan, rows, styles) {\n            var cols = [];\n            var colgroup;\n            var tbody;\n\n            for (var i = 0; i < colspan; i++) {\n                cols.push(kendoDomElement(\"col\"));\n            }\n\n            colgroup = kendoDomElement(\"colgroup\", null, cols);\n\n            tbody = kendoDomElement(\"tbody\", null, rows);\n\n            if (!styles.style) {\n                styles.style = {};\n            }\n\n            styles.style.width = this._tableWidth + \"px\";\n\n            return kendoDomElement(\"table\", styles, [colgroup, tbody]);\n        },\n\n        _calculateTableWidth: function() {\n            var slots = this._timeSlots();\n            var maxSpan = 0;\n            var totalSpan = 0;\n            var currentSpan;\n            var tableWidth;\n\n            for (var i = 0, length = slots.length; i < length; i++) {\n                currentSpan = slots[i].span;\n\n                totalSpan += currentSpan;\n\n                if (currentSpan > maxSpan) {\n                    maxSpan = currentSpan;\n                }\n            }\n\n            tableWidth = Math.round((totalSpan * this.options.slotSize) / maxSpan);\n\n            return tableWidth;\n        },\n\n        _calculateMilestoneWidth: function() {\n            var size;\n            var className = GanttView.styles.task + \" \" + GanttView.styles.taskMilestone;\n            var milestone = $(\"<div class='\" + className + \"' style='visibility: hidden; position: absolute'>\");\n\n            this.content.append(milestone);\n\n            size = {\n                \"width\": milestone[0].getBoundingClientRect().width,\n                \"clientWidth\": milestone[0].clientWidth\n            };\n\n            milestone.remove();\n\n            return size;\n        },\n\n        _calculateResourcesMargin: function() {\n            var margin;\n            var wrapper = $(\"<div class='\" + GanttView.styles.resourcesWrap + \"' style='visibility: hidden; position: absolute'>\");\n\n            this.content.append(wrapper);\n\n            margin = parseInt(wrapper.css(\"margin-left\"), 10);\n\n            wrapper.remove();\n\n            return margin;\n        },\n\n        _renderTask: function(task, position) {\n            var taskWrapper;\n            var taskElement;\n            var editable = this.options.editable;\n            var progressHandleLeft;\n            var taskLeft = position.left;\n            var styles = GanttView.styles;\n            var wrapClassName = styles.taskWrap;\n\n            if (task.summary) {\n                taskElement = this._renderSummary(task, position);\n            } else if (task.isMilestone()) {\n                taskElement = this._renderMilestone(task, position);\n                wrapClassName += \" \" + styles.taskMilestoneWrap;\n            } else {\n                taskElement = this._renderSingleTask(task, position);\n            }\n\n            taskWrapper = kendoDomElement(\"div\", { className: wrapClassName, style: { left: taskLeft + \"px\" } }, [\n                taskElement\n            ]);\n\n            if (editable) {\n                taskWrapper.children.push(kendoDomElement(\"div\", { className: styles.taskDot + \" \" + styles.taskDotStart }));\n                taskWrapper.children.push(kendoDomElement(\"div\", { className: styles.taskDot + \" \" + styles.taskDotEnd }));\n            }\n\n            if (!task.summary && !task.isMilestone() && editable) {\n                progressHandleLeft = Math.round(position.width * task.percentComplete);\n\n                taskWrapper.children.push(kendoDomElement(\"div\", { className: styles.taskDragHandle, style: { left: progressHandleLeft + \"px\" } }));\n            }\n\n            return taskWrapper;\n        },\n\n        _renderSingleTask: function(task, position) {\n            var styles = GanttView.styles;\n            var progressWidth = Math.round(position.width * task.percentComplete);\n\n            var content = kendoDomElement(\"div\", { className: styles.taskContent }, [\n                kendoDomElement(\"div\", { className: styles.taskTemplate }, [\n                    kendoTextElement(task.title)\n                ])\n            ]);\n\n            if (this.options.editable) {\n                content.children.push(kendoDomElement(\"span\", { className: styles.taskActions }, [\n                    kendoDomElement(\"a\", { className: styles.link + \" \" + styles.taskDelete, href: \"#\" }, [\n                        kendoDomElement(\"span\", { className: styles.icon + \" \" + styles.iconDelete })\n                    ])\n                ]));\n\n                content.children.push(kendoDomElement(\"span\", { className: styles.taskResizeHandle + \" \" + styles.taskResizeHandleWest }));\n\n                content.children.push(kendoDomElement(\"span\", { className: styles.taskResizeHandle + \" \" + styles.taskResizeHandleEast }));\n            }\n\n            var element = kendoDomElement(\"div\", { className: styles.task + \" \" + styles.taskSingle, \"data-uid\": task.uid, style: { width: Math.max((position.width - 2), 0) + \"px\" } }, [\n                kendoDomElement(\"div\", { className: styles.taskComplete, style: { width: progressWidth + \"px\" } }),\n                content\n            ]);\n\n            return element;\n        },\n\n        _renderMilestone: function(task, position) {\n            var styles = GanttView.styles;\n            var element = kendoDomElement(\"div\", { className: styles.task + \" \" + styles.taskMilestone, \"data-uid\": task.uid });\n\n            return element;\n        },\n\n        _renderSummary: function(task, position) {\n            var styles = GanttView.styles;\n            var progressWidth = Math.round(position.width * task.percentComplete);\n\n            var element = kendoDomElement(\"div\", { className: styles.task + \" \" + styles.taskSummary, \"data-uid\": task.uid, style: { width: position.width + \"px\" } }, [\n                kendoDomElement(\"div\", { className: styles.taskSummaryProgress, style: { width: progressWidth + \"px\" } }, [\n                    kendoDomElement(\"div\", { className: styles.taskSummaryComplete, style: { width: position.width + \"px\" } })\n                ])\n            ]);\n\n            return element;\n        },\n\n        _renderResources: function(resources, className) {\n            var children = [];\n            var resource;\n\n            for (var i = 0, length = resources.length; i < length; i++) {\n                resource = resources[i];\n                children.push(kendoDomElement(\"span\", {\n                    className: className,\n                    style: {\n                        \"color\": resource.get(\"color\")\n                    }\n                }, [kendoTextElement(resource.get(\"name\"))]));\n            }\n\n            return children;\n        },\n\n        _taskPosition: function(task) {\n            var round = Math.round;\n            var startLeft = round(this._offset(task.start));\n            var endLeft = round(this._offset(task.end));\n\n            return { left: startLeft, width: endLeft - startLeft };\n        },\n\n        _offset: function(date) {\n            var slots = this._timeSlots();\n            var slot;\n            var startOffset;\n            var slotDuration;\n            var slotOffset;\n            var startIndex;\n\n            if (!slots.length) {\n                return 0;\n            }\n\n            startIndex = this._slotIndex(\"start\", date);\n\n            slot = slots[startIndex];\n\n            if (slot.end < date) {\n                return slot.offsetLeft + slot.offsetWidth;\n            }\n\n            if (slot.start > date) {\n                return slot.offsetLeft;\n            }\n\n            startOffset = date - slot.start;\n            slotDuration = slot.end - slot.start;\n            slotOffset = (startOffset / slotDuration) * slot.offsetWidth;\n\n            return slot.offsetLeft + slotOffset;\n        },\n\n        _slotIndex: function(field, value) {\n            var slots = this._timeSlots();\n            var startIdx = 0;\n            var endIdx = slots.length - 1;\n            var middle;\n\n            do {\n                middle = Math.ceil((endIdx + startIdx) / 2);\n\n                if (slots[middle][field] < value) {\n                    startIdx = middle;\n                } else {\n                    if (middle === endIdx) {\n                        middle--;\n                    }\n\n                    endIdx = middle;\n                }\n            } while (startIdx !== endIdx);\n\n            return startIdx;\n        },\n\n        _timeByPosition: function(x, snap, snapToEnd) {\n            var slot = this._slotByPosition(x);\n\n            if (snap) {\n                return snapToEnd ? slot.end : slot.start;\n            }\n\n            var offsetLeft = x - (this.content.offset().left - this.content.scrollLeft());\n            var duration = slot.end - slot.start;\n            var slotOffset = duration * ((offsetLeft - slot.offsetLeft) / slot.offsetWidth);\n\n            return new Date(slot.start.getTime() + slotOffset);\n        },\n\n        _slotByPosition: function(x) {\n            var offsetLeft = x - (this.content.offset().left - this.content.scrollLeft());\n            var slotIndex = this._slotIndex(\"offsetLeft\", offsetLeft);\n\n            return this._timeSlots()[slotIndex];\n        },\n\n        _renderDependencies: function(dependencies) {\n            var elements = [];\n            var tree = this._dependencyTree;\n\n            for (var i = 0, l = dependencies.length; i < l; i++) {\n                elements.push.apply(elements, this._renderDependency(dependencies[i]));\n\n            }\n\n            tree.render(elements);\n        },\n\n        _renderDependency: function(dependency) {\n            var predecessor = this._taskCoordinates[dependency.predecessorId];\n            var successor = this._taskCoordinates[dependency.successorId];\n            var elements;\n            var method;\n\n            if (!predecessor || !successor) {\n                return [];\n            }\n\n            method = \"_render\" + [\"FF\", \"FS\", \"SF\", \"SS\"][dependency.type];\n            elements = this[method](predecessor, successor);\n\n            for (var i = 0, length = elements.length; i < length; i++) {\n                elements[i].attr[\"data-uid\"] = dependency.uid;\n            }\n\n            return elements;\n        },\n\n        _renderFF: function(from, to) {\n            var lines = this._dependencyFF(from, to, false);\n\n            lines[lines.length - 1].children[0] = this._arrow(true);\n\n            return lines;\n        },\n\n        _renderSS: function(from, to) {\n            var lines = this._dependencyFF(to, from, true);\n\n            lines[0].children[0] = this._arrow(false);\n\n            return lines.reverse();\n        },\n\n        _renderFS: function(from, to) {\n            var lines = this._dependencyFS(from, to, false);\n\n            lines[lines.length - 1].children[0] = this._arrow(false);\n\n            return lines;\n        },\n\n        _renderSF: function(from, to) {\n            var lines = this._dependencyFS(to, from, true);\n\n            lines[0].children[0] = this._arrow(true);\n\n            return lines.reverse();\n        },\n\n        _dependencyFF: function(from, to, reverse) {\n            var that = this;\n            var lines = [];\n            var left = 0;\n            var top = 0;\n            var width = 0;\n            var height = 0;\n            var dir = reverse ? \"start\" : \"end\";\n            var delta;\n            var overlap = 2;\n            var arrowOverlap = 1;\n            var rowHeight = this._rowHeight;\n            var minLineWidth = 10;\n            var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n            var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n            var styles = GanttView.styles;\n\n            var addHorizontal = function() {\n                lines.push(that._line(styles.line + \" \" + styles.lineHorizontal, { left: left + \"px\", top: top + \"px\", width: width + \"px\" }));\n            };\n            var addVertical = function() {\n                lines.push(that._line(styles.line + \" \" + styles.lineVertical, { left: left + \"px\", top: top + \"px\", height: height + \"px\" }));\n            };\n\n            left = from[dir];\n            top = fromTop;\n            width = minLineWidth;\n\n            delta = to[dir] - from[dir];\n\n            if ((delta) > 0 !== reverse) {\n                width = Math.abs(delta) + minLineWidth;\n            }\n\n            if (reverse) {\n                left -= width;\n                width -= arrowOverlap;\n                addHorizontal();\n            } else {\n                addHorizontal();\n                left += width - overlap;\n            }\n\n            if (toTop < top) {\n                height = top - toTop;\n                height += overlap;\n                top = toTop;\n                addVertical();\n            } else {\n                height = toTop - top;\n                height += overlap;\n                addVertical();\n                top += (height - overlap);\n            }\n\n            width = Math.abs(left - to[dir]);\n\n            if (!reverse) {\n                width -= arrowOverlap;\n                left -= width;\n            }\n\n            addHorizontal();\n\n            return lines;\n        },\n\n        _dependencyFS: function(from, to, reverse) {\n            var that = this;\n            var lines = [];\n            var left = 0;\n            var top = 0;\n            var width = 0;\n            var height = 0;\n            var rowHeight = this._rowHeight;\n            var minLineHeight = Math.floor(rowHeight / 2);\n            var minLineWidth = 10;\n            var minDistance = 2 * minLineWidth;\n            var delta = to.start - from.end;\n            var overlap = 2;\n            var arrowOverlap = 1;\n            var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n            var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n            var styles = GanttView.styles;\n\n            var addHorizontal = function() {\n                lines.push(that._line(styles.line + \" \" + styles.lineHorizontal, { left: left + \"px\", top: top + \"px\", width: width + \"px\" }));\n            };\n            var addVertical = function() {\n                lines.push(that._line(styles.line + \" \" + styles.lineVertical, { left: left + \"px\", top: top + \"px\", height: height + \"px\" }));\n            };\n\n            left = from.end;\n            top = fromTop;\n            width = minLineWidth;\n\n            if (reverse) {\n                left += arrowOverlap;\n\n                if (delta > minDistance) {\n                    width = delta - (minLineWidth - overlap);\n                }\n\n                width -= arrowOverlap;\n            }\n\n            addHorizontal();\n            left += width - overlap;\n\n            if ((delta) <= minDistance) {\n                height = reverse ? Math.abs(toTop - fromTop) - minLineHeight : minLineHeight;\n\n                if (toTop < fromTop) {\n                    top -= height;\n\n                    height += overlap;\n\n                    addVertical();\n                } else {\n                    addVertical();\n                    top += height;\n                }\n\n                width = (from.end - to.start) + minDistance;\n\n                if (width < minLineWidth) {\n                    width = minLineWidth;\n                }\n\n                left -= width - overlap;\n\n                addHorizontal();\n            }\n\n            if (toTop < fromTop) {\n                height = top - toTop;\n                top = toTop;\n\n                height += overlap;\n\n                addVertical();\n            } else {\n                height = toTop - top;\n                addVertical();\n                top += height;\n            }\n\n            width = to.start - left;\n\n            if (!reverse) {\n                width -= arrowOverlap;\n            }\n\n            addHorizontal();\n\n            return lines;\n        },\n\n        _line: function(className, styles) {\n            return kendoDomElement(\"div\", { className: className, style: styles });\n        },\n\n        _arrow: function(direction) {\n            return kendoDomElement(\"span\", { className: direction ? GanttView.styles.arrowWest : GanttView.styles.arrowEast });\n        },\n\n        _colgroup: function() {\n            var slots = this._timeSlots();\n            var count = slots.length;\n            var cols = [];\n\n            for (var i = 0; i < count; i++) {\n                for (var j = 0, length = slots[i].span; j < length; j++) {\n                    cols.push(kendoDomElement(\"col\"));\n                }\n            }\n\n            return kendoDomElement(\"colgroup\", null, cols);\n        },\n\n        _createDragHint: function(element) {\n            this._dragHint = element\n                .clone()\n                .addClass(GanttView.styles.dragHint)\n                .css(\"cursor\", \"move\");\n\n            element\n                .parent()\n                .append(this._dragHint);\n        },\n\n        _updateDragHint: function(start) {\n            var left = this._offset(start);\n\n            this._dragHint\n                .css({\n                    \"left\": left\n                });\n        },\n\n        _removeDragHint: function() {\n            this._dragHint.remove();\n            this._dragHint = null;\n        },\n\n        _createResizeHint: function(task) {\n            var styles = GanttView.styles;\n            var taskTop = this._taskCoordinates[task.id].rowIndex * this._rowHeight;\n            var tooltipHeight;\n            var tooltipTop;\n            var options = this.options;\n            var messages = options.messages;\n\n            this._resizeHint = $(RESIZE_HINT({ styles: styles })).css({\n                \"top\": 0,\n                \"height\": this._contentHeight\n            });\n\n            this.content.append(this._resizeHint);\n\n            this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n                styles: styles,\n                start: task.start,\n                end: task.end,\n                messages: messages.views,\n                format: options.resizeTooltipFormat\n            }))\n            .css({\n                \"top\": 0,\n                \"left\": 0\n            });\n\n            this.content.append(this._resizeTooltip);\n\n            this._resizeTooltipWidth = this._resizeTooltip.outerWidth();\n            tooltipHeight = this._resizeTooltip.outerHeight();\n\n            tooltipTop = taskTop - tooltipHeight;\n\n            if (tooltipTop < 0) {\n                tooltipTop = taskTop + this._rowHeight;\n            }\n\n            this._resizeTooltipTop = tooltipTop;\n        },\n\n        _updateResizeHint: function(start, end, resizeStart) {\n            var left = this._offset(start);\n            var right = this._offset(end);\n            var width = right - left;\n            var tooltipLeft = resizeStart ? left : right;\n            var tablesWidth = this._tableWidth - 17;\n            var tooltipWidth = this._resizeTooltipWidth;\n            var options = this.options;\n            var messages = options.messages;\n\n            this._resizeHint\n                .css({\n                    \"left\": left,\n                    \"width\": width\n                });\n\n            if (this._resizeTooltip) {\n                this._resizeTooltip.remove();\n            }\n\n            tooltipLeft -= Math.round(tooltipWidth / 2);\n\n            if (tooltipLeft < 0) {\n                tooltipLeft = 0;\n            } else if (tooltipLeft + tooltipWidth > tablesWidth) {\n                tooltipLeft = tablesWidth - tooltipWidth;\n            }\n\n            this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n                styles: GanttView.styles,\n                start: start,\n                end: end,\n                messages: messages.views,\n                format: options.resizeTooltipFormat\n            }))\n            .css({\n                \"top\": this._resizeTooltipTop,\n                \"left\": tooltipLeft,\n                \"min-width\": tooltipWidth\n            });\n\n            this.content.append(this._resizeTooltip);\n        },\n\n        _removeResizeHint: function() {\n            this._resizeHint.remove();\n            this._resizeHint = null;\n\n            this._resizeTooltip.remove();\n            this._resizeTooltip = null;\n        },\n\n        _updatePercentCompleteTooltip: function(top, left, text) {\n            this._removePercentCompleteTooltip();\n\n            var tooltip = this._percentCompleteResizeTooltip = $(PERCENT_RESIZE_TOOLTIP_TEMPLATE({ styles: GanttView.styles, text: text }))\n                .appendTo(this.element);\n\n            var tooltipMiddle = Math.round(tooltip.outerWidth() / 2);\n            var arrow = tooltip.find(DOT + GanttView.styles.callout);\n            var arrowHeight = Math.round(arrow.outerWidth() / 2);\n\n            tooltip.css({\n                \"top\": top - (tooltip.outerHeight() + arrowHeight),\n                \"left\": left - tooltipMiddle\n            });\n\n            arrow.css(\"left\", tooltipMiddle - arrowHeight);\n        },\n\n        _removePercentCompleteTooltip: function() {\n            if (this._percentCompleteResizeTooltip) {\n                this._percentCompleteResizeTooltip.remove();\n            }\n\n            this._percentCompleteResizeTooltip = null;\n        },\n\n        _updateDependencyDragHint: function(from, to, useVML) {\n            this._removeDependencyDragHint();\n\n            if (useVML) {\n                this._creteVmlDependencyDragHint(from, to);\n            } else {\n                this._creteDependencyDragHint(from, to);\n            }\n        },\n\n        _creteDependencyDragHint: function(from, to) {\n            var styles = GanttView.styles;\n\n            var deltaX = to.x - from.x;\n            var deltaY = to.y - from.y;\n\n            var width = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n            var angle = Math.atan(deltaY / deltaX);\n\n            if (deltaX < 0) {\n                angle += Math.PI;\n            }\n\n            $(\"<div class='\" + styles.line + \" \" + styles.lineHorizontal + \" \" + styles.dependencyHint + \"'></div>\")\n                .css({\n                    \"top\": from.y,\n                    \"left\": from.x,\n                    \"width\": width,\n                    \"transform-origin\": \"0% 0\",\n                    \"-ms-transform-origin\": \"0% 0\",\n                    \"-webkit-transform-origin\": \"0% 0\",\n                    \"transform\": \"rotate(\" + angle + \"rad)\",\n                    \"-ms-transform\": \"rotate(\" + angle + \"rad)\",\n                    \"-webkit-transform\": \"rotate(\" + angle + \"rad)\"\n                })\n                .appendTo(this.content);\n        },\n\n        _creteVmlDependencyDragHint: function(from, to) {\n            var hint = $(\"<kvml:line class='\" + GanttView.styles.dependencyHint + \"' style='position:absolute; top: 0px;' strokecolor='black' strokeweight='2px' from='\" +\n                from.x + \"px,\" + from.y + \"px' to='\" + to.x + \"px,\" + to.y + \"px'\" + \"></kvml:line>\")\n                .appendTo(this.content);\n\n            // IE8 Bug\n            hint[0].outerHTML = hint[0].outerHTML;\n        },\n\n        _removeDependencyDragHint: function() {\n            this.content.find(DOT + GanttView.styles.dependencyHint).remove();\n        },\n\n        _createTaskTooltip: function(task, element, mouseLeft) {\n            var styles = GanttView.styles;\n            var options = this.options;\n            var content = this.content;\n            var contentOffset = content.offset();\n            var contentWidth = content.width();\n            var contentScrollLeft = content.scrollLeft();\n            var row = $(element).parents(\"tr\").first();\n            var rowOffset = row.offset();\n            var template = (options.tooltip && options.tooltip.template) ? kendo.template(options.tooltip.template) : TASK_TOOLTIP_TEMPLATE;\n            var left = mouseLeft - (contentOffset.left - content.scrollLeft());\n            var top = (rowOffset.top + row.outerHeight() - contentOffset.top) + content.scrollTop();\n            var tooltip = this._taskTooltip = $('<div style=\"z-index: 100002;\" class=\"' +styles.tooltipWrapper + '\" >' +\n                                   '<div class=\"' + styles.taskContent + '\"></div></div>');\n            var tooltipWidth;\n\n            tooltip\n                .css({\n                    \"left\": left,\n                    \"top\": top\n                })\n                .appendTo(content)\n                .find(DOT + styles.taskContent)\n                .append(template({\n                    styles: styles,\n                    task: task,\n                    messages: options.messages.views\n                }));\n\n            if (tooltip.outerHeight() < rowOffset.top - contentOffset.top) {\n                tooltip.css(\"top\", ((rowOffset.top - contentOffset.top) - tooltip.outerHeight()) + content.scrollTop());\n            }\n\n            tooltipWidth = tooltip.outerWidth();\n\n            if ((tooltipWidth + left) - contentScrollLeft > contentWidth) {\n                left -= tooltipWidth;\n\n                if (left < contentScrollLeft) {\n                    left = (contentScrollLeft + contentWidth) - (tooltipWidth + 17);\n                }\n\n                tooltip.css(\"left\", left);\n            }\n\n        },\n\n        _removeTaskTooltip: function() {\n            if (this._taskTooltip) {\n                this._taskTooltip.remove();\n            }\n\n            this._taskTooltip = null;\n        },\n\n        _scrollTo: function(element) {\n            var elementLeft = element.offset().left;\n            var elementWidth = element.width();\n            var elementRight = elementLeft + elementWidth;\n\n            var row = element.closest(\"tr\");\n            var rowTop = row.offset().top;\n            var rowHeight = row.height();\n            var rowBottom = rowTop + rowHeight;\n\n            var content = this.content;\n            var contentOffset = content.offset();\n            var contentTop = contentOffset.top;\n            var contentHeight = content.height();\n            var contentBottom = contentTop + contentHeight;\n            var contentLeft = contentOffset.left;\n            var contentWidth = content.width();\n            var contentRight = contentLeft + contentWidth;\n\n            var scrollbarWidth = kendo.support.scrollbar();\n\n            if (rowTop < contentTop) {\n                content.scrollTop(content.scrollTop() + (rowTop - contentTop));\n            } else if (rowBottom > contentBottom) {\n                content.scrollTop(content.scrollTop() + (rowBottom + scrollbarWidth - contentBottom));\n            }\n\n            if (elementLeft < contentLeft && elementWidth > contentWidth && elementRight < contentRight ||\n                elementRight > contentRight && elementWidth < contentWidth) {\n                content.scrollLeft(content.scrollLeft() + (elementRight + scrollbarWidth - contentRight));\n            } else if (elementRight > contentRight && elementWidth > contentWidth && elementLeft > contentLeft ||\n                elementLeft < contentLeft && elementWidth < contentWidth) {\n                content.scrollLeft(content.scrollLeft() + (elementLeft - contentLeft));\n            }\n        },\n\n        _timeSlots: function() {\n            if (!this._slots || !this._slots.length) {\n                return [];\n            }\n\n            return this._slots[this._slots.length - 1];\n        },\n\n        _headers: function(columnLevels) {\n            var rows = [];\n            var level;\n            var headers;\n            var column;\n            var headerText;\n            var styles = GanttView.styles;\n\n            for (var levelIndex = 0, levelCount = columnLevels.length; levelIndex < levelCount; levelIndex++) {\n                level = columnLevels[levelIndex];\n                headers = [];\n\n                for (var columnIndex = 0, columnCount = level.length; columnIndex < columnCount; columnIndex++) {\n                    column = level[columnIndex];\n\n                    headerText = kendoTextElement(column.text);\n                    headers.push(kendoDomElement(\"th\", { colspan: column.span, className: styles.header + (column.isNonWorking ? (\" \" + styles.nonWorking) : \"\") }, [headerText]));\n                }\n\n                rows.push(kendoDomElement(\"tr\", null, headers));\n            }\n\n            return rows;\n        },\n\n        _hours: function(start, end) {\n            var slotEnd;\n            var slots = [];\n            var options = this.options;\n            var workDayStart = options.workDayStart.getHours();\n            var workDayEnd = options.workDayEnd.getHours();\n            var isWorkHour;\n            var hours;\n            var hourSpan = options.hourSpan;\n\n            start = new Date(start);\n            end = new Date(end);\n\n            while (start < end) {\n                slotEnd = new Date(start);\n                hours = slotEnd.getHours();\n\n                isWorkHour = hours >= workDayStart && hours < workDayEnd;\n\n                slotEnd.setHours(slotEnd.getHours() + hourSpan);\n\n                if (hours == slotEnd.getHours()) {\n                    // Chrome DTS Fix\n                    slotEnd.setHours(slotEnd.getHours() + 2 * hourSpan);\n                }\n\n                if (!options.showWorkHours || isWorkHour) {\n                    slots.push({\n                        start: start,\n                        end: slotEnd,\n                        isNonWorking: !isWorkHour,\n                        span: 1\n                    });\n                }\n\n                start = slotEnd;\n            }\n\n            return slots;\n        },\n\n        _days: function(start, end) {\n            var slotEnd;\n            var slots = [];\n            var isWorkDay;\n\n            start = new Date(start);\n            end = new Date(end);\n\n            while (start < end) {\n                slotEnd = kendo.date.nextDay(start);\n\n                isWorkDay = this._isWorkDay(start);\n\n                if (!this.options.showWorkDays || isWorkDay) {\n                    slots.push({\n                        start: start,\n                        end: slotEnd,\n                        isNonWorking: !isWorkDay,\n                        span: 1\n                    });\n                }\n\n                start = slotEnd;\n            }\n\n            return slots;\n        },\n\n        _weeks: function(start, end) {\n            var slotEnd;\n            var slots = [];\n            var firstDay = this.calendarInfo().firstDay;\n            var daySlots;\n            var span;\n\n            start = new Date(start);\n            end = new Date(end);\n\n            while (start < end) {\n                slotEnd = kendo.date.dayOfWeek(kendo.date.addDays(start, 1), firstDay, 1);\n\n                if (slotEnd > end) {\n                    slotEnd = end;\n                }\n\n                daySlots = this._days(start, slotEnd);\n                span = daySlots.length;\n\n                if (span > 0) {\n                    slots.push({\n                        start: daySlots[0].start,\n                        end: daySlots[span - 1].end,\n                        span: span\n                    });\n                }\n\n                start = slotEnd;\n            }\n\n            return slots;\n        },\n\n        _months: function(start, end) {\n            var slotEnd;\n            var slots = [];\n            var daySlots;\n            var span;\n\n            start = new Date(start);\n            end = new Date(end);\n\n            while (start < end) {\n                slotEnd = new Date(start);\n                slotEnd.setMonth(slotEnd.getMonth() + 1);\n\n                daySlots = this._days(start, slotEnd);\n                span = daySlots.length;\n\n                if (span > 0) {\n                    slots.push({\n                        start: daySlots[0].start,\n                        end: daySlots[span - 1].end,\n                        span: span\n                    });\n                }\n\n                start = slotEnd;\n            }\n\n            return slots;\n        },\n\n        _years: function(start, end) {\n            var slotEnd;\n            var slots = [];\n\n            start = new Date(start);\n            end = new Date(end);\n\n            while (start < end) {\n                slotEnd = new Date(start);\n                slotEnd.setFullYear(slotEnd.getFullYear() + 1);\n\n                slots.push({\n                    start: start,\n                    end: slotEnd,\n                    span: 12\n                });\n\n                start = slotEnd;\n            }\n\n            return slots;\n        },\n\n        _slotHeaders: function(slots, template) {\n            var columns = [];\n            var slot;\n\n            for (var i = 0, l = slots.length; i < l; i++) {\n                slot = slots[i];\n\n                columns.push({\n                    text: template(slot),\n                    isNonWorking: !!slot.isNonWorking,\n                    span: slot.span\n                });\n            }\n\n            return columns;\n        },\n\n        _isWorkDay: function(date) {\n            var day = date.getDay();\n            var workDays = this._workDays;\n\n            for (var i = 0, l = workDays.length; i < l; i++) {\n                if (workDays[i] === day) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        calendarInfo: function() {\n            return kendo.getCulture().calendars.standard;\n        },\n\n        _renderCurrentTime: function() {\n            var currentTime = this._getCurrentTime();\n            var timeOffset = this._offset(currentTime);\n            var element = $(\"<div class='k-current-time'></div>\");\n            var slot;\n\n            if (!this.content || !this._timeSlots().length) {\n                return;\n            }\n\n            this.content.find(\".k-current-time\").remove();\n\n            slot = this._timeSlots()[this._slotIndex(\"start\", currentTime)];\n\n            if (currentTime < slot.start || currentTime > slot.end) {\n                return;\n            }\n\n            element.css({\n                left: timeOffset + \"px\",\n                top: \"0px\",\n                width: \"1px\",\n                height: this._contentHeight + \"px\"\n            });\n\n            this.content.append(element);\n        },\n\n        _getCurrentTime: function() {\n            // Introduced for testing purposes\n            return new Date();\n        },\n\n        _currentTime: function() {\n            var markerOptions = this.options.currentTimeMarker;\n\n            if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n                this._renderCurrentTime();\n                this._currentTimeUpdateTimer = setInterval(proxy(this._renderCurrentTime, this), markerOptions.updateInterval);\n            }\n        }\n    });\n\n    extend(true, GanttView, { styles: viewStyles });\n\n    kendo.ui.GanttDayView = GanttView.extend({\n        name: \"day\",\n\n        options: {\n            timeHeaderTemplate: TIME_HEADER_TEMPLATE,\n            dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n            resizeTooltipFormat: \"h:mm tt ddd, MMM d\"\n        },\n\n        range: function(range) {\n            this.start = kendo.date.getDate(range.start);\n            this.end = kendo.date.getDate(range.end);\n\n            if (kendo.date.getMilliseconds(range.end) > 0 || this.end.getTime() === this.start.getTime()) {\n                this.end = kendo.date.addDays(this.end, 1);\n            }\n        },\n\n        _createSlots: function() {\n            var daySlots;\n            var daySlot;\n            var hourSlots;\n            var hours;\n            var slots = [];\n\n            daySlots = this._days(this.start, this.end);\n            hourSlots = [];\n\n            for (var i = 0, l = daySlots.length; i < l; i++) {\n                daySlot = daySlots[i];\n                hours = this._hours(daySlot.start, daySlot.end);\n\n                daySlot.span = hours.length;\n\n                hourSlots.push.apply(hourSlots, hours);\n            }\n\n            slots.push(daySlots);\n            slots.push(hourSlots);\n\n            return slots;\n        },\n\n        _layout: function() {\n            var rows = [];\n            var options = this.options;\n\n            rows.push(this._slotHeaders(this._slots[0], kendo.template(options.dayHeaderTemplate)));\n            rows.push(this._slotHeaders(this._slots[1], kendo.template(options.timeHeaderTemplate)));\n\n            return rows;\n        }\n    });\n\n    kendo.ui.GanttWeekView = GanttView.extend({\n        name: \"week\",\n\n        options: {\n            dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n            weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n            resizeTooltipFormat: \"h:mm tt ddd, MMM d\"\n        },\n\n        range: function(range) {\n            var calendarInfo = this.calendarInfo();\n            var firstDay = calendarInfo.firstDay;\n            var rangeEnd = range.end;\n\n            if (firstDay === rangeEnd.getDay()) {\n                rangeEnd.setDate(rangeEnd.getDate() + 7);\n            }\n\n            this.start = kendo.date.getDate(kendo.date.dayOfWeek(range.start, firstDay, -1));\n            this.end = kendo.date.getDate(kendo.date.dayOfWeek(rangeEnd, firstDay, 1));\n        },\n\n        _createSlots: function() {\n            var slots = [];\n\n            slots.push(this._weeks(this.start, this.end));\n            slots.push(this._days(this.start, this.end));\n\n            return slots;\n        },\n\n        _layout: function() {\n            var rows = [];\n            var options = this.options;\n\n            rows.push(this._slotHeaders(this._slots[0], kendo.template(options.weekHeaderTemplate)));\n            rows.push(this._slotHeaders(this._slots[1], kendo.template(options.dayHeaderTemplate)));\n\n            return rows;\n        }\n    });\n\n    kendo.ui.GanttMonthView = GanttView.extend({\n        name: \"month\",\n\n        options: {\n            weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n            monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n            resizeTooltipFormat: \"dddd, MMM d, yyyy\"\n        },\n\n        range: function(range) {\n            this.start = kendo.date.firstDayOfMonth(range.start);\n            this.end = kendo.date.addDays(kendo.date.getDate(kendo.date.lastDayOfMonth(range.end)), 1);\n        },\n\n        _createSlots: function() {\n            var slots = [];\n\n            slots.push(this._months(this.start, this.end));\n            slots.push(this._weeks(this.start, this.end));\n\n            return slots;\n        },\n\n        _layout: function() {\n            var rows = [];\n            var options = this.options;\n\n            rows.push(this._slotHeaders(this._slots[0], kendo.template(options.monthHeaderTemplate)));\n            rows.push(this._slotHeaders(this._slots[1], kendo.template(options.weekHeaderTemplate)));\n\n            return rows;\n        }\n    });\n\n    kendo.ui.GanttYearView = GanttView.extend({\n        name: \"year\",\n\n        options: {\n            yearHeaderTemplate: YEAR_HEADER_TEMPLATE,\n            monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n            resizeTooltipFormat: \"dddd, MMM d, yyyy\"\n        },\n\n        range: function(range) {\n            this.start = kendo.date.firstDayOfMonth(new Date(range.start.setMonth(0)));\n            this.end = kendo.date.firstDayOfMonth(new Date(range.end.setMonth(12))); //set month to first month of next year\n        },\n\n        _createSlots: function() {\n            var slots = [];\n            var monthSlots = this._months(this.start, this.end);\n\n            $(monthSlots).each(function(index, slot) {\n                slot.span = 1;\n            });\n\n            slots.push(this._years(this.start, this.end));\n            slots.push(monthSlots);\n\n            return slots;\n        },\n\n        _layout: function() {\n            var rows = [];\n            var options = this.options;\n\n            rows.push(this._slotHeaders(this._slots[0], kendo.template(options.yearHeaderTemplate)));\n            rows.push(this._slotHeaders(this._slots[1], kendo.template(options.monthHeaderTemplate)));\n\n            return rows;\n        }\n    });\n\n    var timelineStyles = {\n        wrapper: \"k-timeline k-grid k-widget\",\n        gridHeader: \"k-grid-header\",\n        gridHeaderWrap: \"k-grid-header-wrap\",\n        gridContent: \"k-grid-content\",\n        gridContentWrap: \"k-grid-content\",\n        tasksWrapper: \"k-gantt-tables\",\n        dependenciesWrapper: \"k-gantt-dependencies\",\n        task: \"k-task\",\n        line: \"k-line\",\n        taskResizeHandle: \"k-resize-handle\",\n        taskResizeHandleWest: \"k-resize-w\",\n        taskDragHandle: \"k-task-draghandle\",\n        taskComplete: \"k-task-complete\",\n        taskDelete: \"k-task-delete\",\n        taskWrapActive: \"k-task-wrap-active\",\n        taskWrap: \"k-task-wrap\",\n        taskDot: \"k-task-dot\",\n        taskDotStart: \"k-task-start\",\n        taskDotEnd: \"k-task-end\",\n        hovered: \"k-state-hover\",\n        selected: \"k-state-selected\",\n        origin: \"k-origin\"\n    };\n\n    var GanttTimeline = kendo.ui.GanttTimeline = Widget.extend({\n        init: function(element, options) {\n\n            Widget.fn.init.call(this, element, options);\n\n            if (!this.options.views || !this.options.views.length) {\n                this.options.views = [\"day\", \"week\", \"month\"];\n            }\n\n            this._wrapper();\n\n            this._domTrees();\n\n            this._views();\n\n            this._selectable();\n\n            this._draggable();\n\n            this._resizable();\n\n            this._percentResizeDraggable();\n\n            this._createDependencyDraggable();\n\n            this._attachEvents();\n\n            this._tooltip();\n        },\n\n        options: {\n            name: \"GanttTimeline\",\n            messages: {\n                views: {\n                    day: \"Day\",\n                    week: \"Week\",\n                    month: \"Month\",\n                    year: \"Year\",\n                    start: \"Start\",\n                    end: \"End\"\n                }\n            },\n            snap: true,\n            selectable: true,\n            editable: true\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            if (this._currentTimeUpdateTimer) {\n                clearInterval(this._currentTimeUpdateTimer);\n            }\n\n            this._unbindView(this._selectedView);\n\n            if (this._moveDraggable) {\n                this._moveDraggable.destroy();\n            }\n\n            if (this._resizeDraggable) {\n                this._resizeDraggable.destroy();\n            }\n\n            if (this._percentDraggable) {\n                this._percentDraggable.destroy();\n            }\n\n            if (this._dependencyDraggable) {\n                this._dependencyDraggable.destroy();\n            }\n\n            if (this.touch) {\n                this.touch.destroy();\n            }\n\n            this._headerTree = null;\n            this._taskTree = null;\n            this._dependencyTree = null;\n\n            this.wrapper.off(NS);\n\n            kendo.destroy(this.wrapper);\n        },\n\n        _wrapper: function() {\n            var styles = GanttTimeline.styles;\n\n            this.wrapper = this.element\n                .addClass(styles.wrapper)\n                .append(\"<div class='\" + styles.gridHeader + \"'><div class='\" + styles.gridHeaderWrap + \"'></div></div>\")\n                .append(\"<div class='\" + styles.gridContentWrap + \"'><div class='\" + styles.tasksWrapper + \"'></div><div class='\" + styles.dependenciesWrapper + \"'></div></div>\");\n        },\n\n        _domTrees: function() {\n            var styles = GanttTimeline.styles;\n            var tree = kendo.dom.Tree;\n            var wrapper = this.wrapper;\n\n            this._headerTree = new tree(wrapper.find(DOT + styles.gridHeaderWrap)[0]);\n\n            this._taskTree = new tree(wrapper.find(DOT + styles.tasksWrapper)[0]);\n\n            this._dependencyTree = new tree(wrapper.find(DOT + styles.dependenciesWrapper)[0]);\n        },\n\n        _views: function() {\n            var views = this.options.views;\n            var view;\n            var isSettings;\n            var name;\n            var defaultView;\n            var selected;\n\n            this.views = {};\n\n            for (var i = 0, l = views.length; i < l; i++) {\n                view = views[i];\n\n                isSettings = isPlainObject(view);\n\n                if (isSettings && view.selectable === false) {\n                    continue;\n                }\n\n                name = isSettings ? ((typeof view.type !== \"string\") ? view.title : view.type) : view;\n\n                defaultView = defaultViews[name];\n\n                if (defaultView) {\n                    if (isSettings) {\n                        view.type = defaultView.type;\n                    }\n\n                    defaultView.title = this.options.messages.views[name];\n                }\n\n                view = extend({ title: name }, defaultView, isSettings ? view : {});\n\n                if (name) {\n                    this.views[name] = view;\n\n                    if (!selected || view.selected) {\n                        selected = name;\n                    }\n                }\n            }\n\n            if (selected) {\n                this._selectedViewName = selected;\n            }\n        },\n\n        view: function(name) {\n            if (name) {\n                this._selectView(name);\n\n                this.trigger(\"navigate\", { view: name, action: \"changeView\" });\n            }\n\n            return this._selectedView;\n        },\n\n        _selectView: function(name) {\n            if (name && this.views[name]) {\n                if (this._selectedView) {\n                    this._unbindView(this._selectedView);\n                }\n\n                this._selectedView = this._initializeView(name);\n                this._selectedViewName = name;\n            }\n        },\n\n        _viewByIndex: function(index) {\n            var view;\n            var views = this.views;\n\n            for (view in views) {\n                if (!index) {\n                    return view;\n                }\n\n                index--;\n            }\n        },\n\n        _initializeView: function(name) {\n            var view = this.views[name];\n\n            if (view) {\n                var type = view.type;\n\n                if (typeof type === \"string\") {\n                    type = kendo.getter(view.type)(window);\n                }\n\n                if (type) {\n                    view = new type(this.wrapper, trimOptions(extend(true, {\n                        headerTree: this._headerTree,\n                        taskTree: this._taskTree,\n                        dependencyTree: this._dependencyTree\n                    }, view, this.options)));\n                } else {\n                    throw new Error(\"There is no such view\");\n                }\n            }\n\n            return view;\n        },\n\n        _unbindView: function(view) {\n            if (view) {\n                view.destroy();\n            }\n        },\n\n        _range: function(tasks) {\n            var startOrder = {\n                field: \"start\",\n                dir: \"asc\"\n            };\n            var endOrder = {\n                field: \"end\",\n                dir: \"desc\"\n            };\n\n            if (!tasks || !tasks.length) {\n                return { start: new Date(), end: new Date() };\n            }\n\n            var start = new Query(tasks).sort(startOrder).toArray()[0].start || new Date();\n            var end = new Query(tasks).sort(endOrder).toArray()[0].end || new Date();\n\n            return {\n                start: new Date(start),\n                end: new Date(end)\n            };\n        },\n\n        _render: function(tasks) {\n            var view = this.view();\n            var range = this._range(tasks);\n\n            this._tasks = tasks;\n\n            view.range(range);\n\n            view.renderLayout();\n\n            view.render(tasks);\n        },\n\n        _renderDependencies: function(dependencies) {\n            this.view()._renderDependencies(dependencies);\n        },\n\n        _taskByUid: function(uid) {\n            var tasks = this._tasks;\n            var length = tasks.length;\n            var task;\n\n            for (var i = 0; i < length; i++) {\n                task = tasks[i];\n\n                if (task.uid === uid) {\n                    return task;\n                }\n            }\n        },\n\n        _draggable: function() {\n            var that = this;\n            var element;\n            var task;\n            var currentStart;\n            var startOffset;\n            var snap = this.options.snap;\n            var styles = GanttTimeline.styles;\n\n            var cleanUp = function() {\n                that.view()._removeDragHint();\n\n                if (element) {\n                    element.css(\"opacity\", 1);\n                }\n\n                element = null;\n                task = null;\n                that.dragInProgress = false;\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this._moveDraggable = new kendo.ui.Draggable(this.wrapper, {\n                distance: 0,\n                filter: DOT + styles.task,\n                holdToDrag: kendo.support.mobileOS,\n                ignore: DOT + styles.taskResizeHandle\n            });\n\n            this._moveDraggable\n                .bind(\"dragstart\", function(e) {\n                    var view = that.view();\n                    element = e.currentTarget.parent();\n                    task = that._taskByUid(e.currentTarget.attr(\"data-uid\"));\n\n                    if (that.trigger(\"moveStart\", { task: task })) {\n                        e.preventDefault();\n                        return;\n                    }\n\n                    currentStart = task.start;\n                    startOffset = view._timeByPosition(e.x.location, snap) - currentStart;\n\n                    view._createDragHint(element);\n\n                    element.css(\"opacity\", 0.5);\n\n                    clearTimeout(that._tooltipTimeout);\n                    that.dragInProgress = true;\n                })\n                .bind(\"drag\", kendo.throttle(function(e) {\n                    if (!that.dragInProgress) {\n                        return;\n                    }\n\n                    var view = that.view();\n                    var date = new Date(view._timeByPosition(e.x.location, snap) - startOffset);\n\n                    if (!that.trigger(\"move\", { task: task, start: date })) {\n                        currentStart = date;\n\n                        view._updateDragHint(currentStart);\n                    }\n                }, 15))\n                .bind(\"dragend\", function(e) {\n                    that.trigger(\"moveEnd\", { task: task, start: currentStart });\n\n                    cleanUp();\n                })\n                .bind(\"dragcancel\", function(e) {\n                    cleanUp();\n                })\n                .userEvents.bind(\"select\", function(e) {\n                    blurActiveElement();\n                });\n        },\n\n        _resizable: function() {\n            var that = this;\n            var element;\n            var task;\n            var currentStart;\n            var currentEnd;\n            var resizeStart;\n            var snap = this.options.snap;\n            var styles = GanttTimeline.styles;\n\n            var cleanUp = function() {\n                that.view()._removeResizeHint();\n                element = null;\n                task = null;\n                that.dragInProgress = false;\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this._resizeDraggable = new kendo.ui.Draggable(this.wrapper, {\n                distance: 0,\n                filter: DOT + styles.taskResizeHandle,\n                holdToDrag: false\n            });\n\n            this._resizeDraggable\n                .bind(\"dragstart\", function(e) {\n                    resizeStart = e.currentTarget.hasClass(styles.taskResizeHandleWest);\n\n                    element = e.currentTarget.closest(DOT + styles.task);\n\n                    task = that._taskByUid(element.attr(\"data-uid\"));\n\n                    if (that.trigger(\"resizeStart\", { task: task })) {\n                        e.preventDefault();\n                        return;\n                    }\n\n                    currentStart = task.start;\n                    currentEnd = task.end;\n\n                    that.view()._createResizeHint(task);\n\n                    clearTimeout(that._tooltipTimeout);\n                    that.dragInProgress = true;\n                })\n                .bind(\"drag\", kendo.throttle(function(e) {\n                    if (!that.dragInProgress) {\n                        return;\n                    }\n\n                    var view = that.view();\n                    var date = view._timeByPosition(e.x.location, snap, !resizeStart);\n\n                    if (resizeStart) {\n                        if (date < currentEnd) {\n                            currentStart = date;\n                        } else {\n                            currentStart = currentEnd;\n                        }\n                    } else {\n                        if (date > currentStart) {\n                            currentEnd = date;\n                        } else {\n                            currentEnd = currentStart;\n                        }\n                    }\n\n                    if (!that.trigger(\"resize\", { task: task, start: currentStart, end: currentEnd })) {\n                        view._updateResizeHint(currentStart, currentEnd, resizeStart);\n                    }\n                }, 15))\n                .bind(\"dragend\", function(e) {\n                    var date = resizeStart ? currentStart : currentEnd;\n\n                    that.trigger(\"resizeEnd\", { task: task, resizeStart: resizeStart, start: currentStart, end: currentEnd });\n\n                    cleanUp();\n                })\n                .bind(\"dragcancel\", function(e) {\n                    cleanUp();\n                })\n                .userEvents.bind(\"select\", function(e) {\n                    blurActiveElement();\n                });\n        },\n\n        _percentResizeDraggable: function() {\n            var that = this;\n            var task;\n            var taskElement;\n            var taskElementOffset;\n            var timelineOffset;\n            var originalPercentWidth;\n            var maxPercentWidth;\n            var currentPercentComplete;\n            var tooltipTop;\n            var tooltipLeft;\n            var styles = GanttTimeline.styles;\n\n            var cleanUp = function() {\n                that.view()._removePercentCompleteTooltip();\n                taskElement = null;\n                task = null;\n                that.dragInProgress = false;\n            };\n\n            var updateElement = function(width) {\n                taskElement\n                    .find(DOT + styles.taskComplete)\n                    .width(width)\n                    .end()\n                    .siblings(DOT + styles.taskDragHandle)\n                    .css(\"left\", width);\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this._percentDraggable = new kendo.ui.Draggable(this.wrapper, {\n                distance: 0,\n                filter: DOT + styles.taskDragHandle,\n                holdToDrag: false\n            });\n\n            this._percentDraggable\n                .bind(\"dragstart\", function(e) {\n                    taskElement = e.currentTarget.siblings(DOT + styles.task);\n\n                    task = that._taskByUid(taskElement.attr(\"data-uid\"));\n\n                    currentPercentComplete = task.percentComplete;\n\n                    taskElementOffset = taskElement.offset();\n                    timelineOffset = this.element.offset();\n\n                    originalPercentWidth = taskElement.find(DOT + styles.taskComplete).width();\n                    maxPercentWidth = taskElement.outerWidth();\n\n                    clearTimeout(that._tooltipTimeout);\n                    that.dragInProgress = true;\n                })\n                .bind(\"drag\", kendo.throttle(function(e) {\n                    if (!that.dragInProgress) {\n                        return;\n                    }\n\n                    var currentWidth = Math.max(0, Math.min(maxPercentWidth, originalPercentWidth + e.x.initialDelta));\n\n                    currentPercentComplete = Math.round((currentWidth / maxPercentWidth) * 100);\n\n                    updateElement(currentWidth);\n\n                    tooltipTop = taskElementOffset.top - timelineOffset.top;\n                    tooltipLeft = taskElementOffset.left + currentWidth - timelineOffset.left;\n\n                    that.view()._updatePercentCompleteTooltip(tooltipTop, tooltipLeft, currentPercentComplete);\n                }, 15))\n                .bind(\"dragend\", function(e) {\n                    that.trigger(\"percentResizeEnd\", { task: task, percentComplete: currentPercentComplete / 100 });\n\n                    cleanUp();\n                })\n                .bind(\"dragcancel\", function(e) {\n                    updateElement(originalPercentWidth);\n\n                    cleanUp();\n                })\n                .userEvents.bind(\"select\", function(e) {\n                    blurActiveElement();\n                });\n        },\n\n        _createDependencyDraggable: function() {\n            var that = this;\n            var originalHandle;\n            var hoveredHandle = $();\n            var hoveredTask = $();\n            var startX;\n            var startY;\n            var content;\n            var contentOffset;\n            var useVML = browser.msie && browser.version < 9;\n            var styles = GanttTimeline.styles;\n\n            var cleanUp = function() {\n                originalHandle\n                    .css(\"display\", \"\")\n                    .removeClass(styles.hovered);\n\n                originalHandle.parent().removeClass(styles.origin);\n                originalHandle = null;\n\n                toggleHandles(false);\n\n                hoveredTask = $();\n                hoveredHandle = $();\n\n                that.view()._removeDependencyDragHint();\n\n                that.dragInProgress = false;\n            };\n\n            var toggleHandles = function(value) {\n                if (!hoveredTask.hasClass(styles.origin)) {\n                    hoveredTask.find(DOT + styles.taskDot).css(\"display\", value ? \"block\" : \"\");\n                    hoveredHandle.toggleClass(styles.hovered, value);\n                }\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            if (useVML && document.namespaces) {\n                document.namespaces.add(\"kvml\", \"urn:schemas-microsoft-com:vml\", \"#default#VML\");\n            }\n\n            this._dependencyDraggable = new kendo.ui.Draggable(this.wrapper, {\n                distance: 0,\n                filter: DOT + styles.taskDot,\n                holdToDrag: false\n            });\n\n            this._dependencyDraggable\n                .bind(\"dragstart\", function(e) {\n                    originalHandle = e.currentTarget\n                        .css(\"display\", \"block\")\n                        .addClass(styles.hovered);\n\n                    originalHandle.parent().addClass(styles.origin);\n\n                    var elementOffset = originalHandle.offset();\n\n                    content = that.view().content;\n                    contentOffset = content.offset();\n\n                    startX = Math.round(elementOffset.left + content.scrollLeft() - contentOffset.left + (originalHandle.outerHeight() / 2));\n                    startY = Math.round(elementOffset.top + content.scrollTop() - contentOffset.top + (originalHandle.outerWidth() / 2));\n\n                    clearTimeout(that._tooltipTimeout);\n                    that.dragInProgress = true;\n                })\n                .bind(\"drag\", kendo.throttle(function(e) {\n                    if (!that.dragInProgress) {\n                        return;\n                    }\n\n                    that.view()._removeDependencyDragHint();\n\n                    var target = $(kendo.elementUnderCursor(e));\n                    var currentX = e.x.location + content.scrollLeft() - contentOffset.left;\n                    var currentY = e.y.location + content.scrollTop() - contentOffset.top;\n\n                    that.view()._updateDependencyDragHint({ x: startX, y: startY }, { x: currentX, y: currentY }, useVML);\n\n                    toggleHandles(false);\n\n                    hoveredHandle = (target.hasClass(styles.taskDot)) ? target : $();\n                    hoveredTask = target.closest(DOT + styles.taskWrap);\n\n                    toggleHandles(true);\n                }, 15))\n                .bind(\"dragend\", function(e) {\n                    if (hoveredHandle.length) {\n                        var fromStart = originalHandle.hasClass(styles.taskDotStart);\n                        var toStart = hoveredHandle.hasClass(styles.taskDotStart);\n\n                        var type = fromStart ? (toStart ? 3 : 2) : (toStart ? 1 : 0);\n\n                        var predecessor = that._taskByUid(originalHandle.siblings(DOT + styles.task).attr(\"data-uid\"));\n                        var successor = that._taskByUid(hoveredHandle.siblings(DOT + styles.task).attr(\"data-uid\"));\n\n                        if (predecessor !== successor) {\n                            that.trigger(\"dependencyDragEnd\", { type: type, predecessor: predecessor, successor: successor });\n                        }\n                    }\n\n                    cleanUp();\n                })\n                .bind(\"dragcancel\", function(e) {\n                    cleanUp();\n                })\n                .userEvents.bind(\"select\", function(e) {\n                    blurActiveElement();\n                });\n        },\n\n        _selectable: function() {\n            var that = this;\n            var styles = GanttTimeline.styles;\n\n            if (this.options.selectable) {\n                this.wrapper\n                    .on(CLICK + NS, DOT + styles.task, function(e) {\n                        e.stopPropagation();\n\n                        if (!e.ctrlKey) {\n                            that.trigger(\"select\", { uid: $(this).attr(\"data-uid\") });\n                        } else {\n                            that.trigger(\"clear\");\n                        }\n                    })\n                    .on(CLICK + NS, DOT + styles.tasksWrapper, function(e) {\n                        if (that.selectDependency().length > 0) {\n                            that.clearSelection();\n                        } else {\n                            that.trigger(\"clear\");\n                        }\n                    })\n                    .on(CLICK + NS, DOT + styles.line, function(e) {\n                        e.stopPropagation();\n\n                        that.selectDependency(this);\n                    });\n            }\n        },\n\n        select: function(value) {\n            var element = this.wrapper.find(value);\n            var styles = GanttTimeline.styles;\n\n            if (element.length) {\n                this.clearSelection();\n\n                element.addClass(styles.selected);\n\n                if (kendo.support.mobileOS) {\n                    element.parent().addClass(styles.taskWrapActive);\n                }\n\n                return;\n            }\n\n            return this.wrapper.find(DOT + styles.task + DOT + styles.selected);\n        },\n\n        selectDependency: function(value) {\n            var element = this.wrapper.find(value);\n            var uid;\n            var styles = GanttTimeline.styles;\n\n            if (element.length) {\n                this.clearSelection();\n                this.trigger(\"clear\");\n\n                uid = $(element).attr(\"data-uid\");\n\n                this.wrapper.find(DOT + styles.line + \"[data-uid='\" + uid + \"']\").addClass(styles.selected);\n\n                return;\n            }\n\n            return this.wrapper.find(DOT + styles.line + DOT + styles.selected);\n        },\n\n        clearSelection: function() {\n            var styles = GanttTimeline.styles;\n\n            this.wrapper\n                .find(DOT + styles.selected)\n                .removeClass(styles.selected);\n\n            if (kendo.support.mobileOS) {\n                this.wrapper\n                    .find(DOT + styles.taskWrapActive)\n                    .removeClass(styles.taskWrapActive);\n            }\n        },\n\n        _attachEvents: function() {\n            var that = this;\n            var styles = GanttTimeline.styles;\n\n            if (this.options.editable) {\n                this._tabindex();\n\n                this.wrapper\n                    .on(CLICK + NS, DOT + styles.taskDelete, function(e) {\n                        that.trigger(\"removeTask\", { uid: $(this).closest(DOT + styles.task).attr(\"data-uid\") });\n                        e.stopPropagation();\n                        e.preventDefault();\n                    })\n                    .on(KEYDOWN + NS, function(e) {\n                        var selectedDependency;\n\n                        if (e.keyCode === keys.DELETE) {\n                            selectedDependency = that.selectDependency();\n\n                            if (selectedDependency.length) {\n                                that.trigger(\"removeDependency\", { uid: selectedDependency.attr(\"data-uid\") });\n                                that.clearSelection();\n                            }\n                        }\n                    });\n\n                if (!mobileOS) {\n                    this.wrapper\n                        .on(DBLCLICK + NS, DOT + styles.task, function(e) {\n                            that.trigger(\"editTask\", { uid: $(this).attr(\"data-uid\") });\n\n                            e.stopPropagation();\n                            e.preventDefault();\n                        });\n                } else {\n                    this.touch = this.wrapper\n                        .kendoTouch({\n                            filter: DOT + styles.task,\n                            doubletap: function(e) {\n                                that.trigger(\"editTask\", { uid: $(e.touch.currentTarget).attr(\"data-uid\") });\n                            }\n                        }).data(\"kendoTouch\");\n                }\n            }\n        },\n\n        _tooltip: function() {\n            var that = this;\n            var tooltipOptions = this.options.tooltip;\n            var styles = GanttTimeline.styles;\n            var currentMousePosition;\n            var mouseMoveHandler = function(e) {\n                currentMousePosition = e.clientX;\n            };\n\n            if (tooltipOptions && tooltipOptions.visible === false) {\n                return;\n            }\n\n            this.wrapper\n                    .on(MOUSEENTER + NS, DOT + styles.task, function(e) {\n                        var element = this;\n                        var task = that._taskByUid($(this).attr(\"data-uid\"));\n\n                        if (that.dragInProgress) {\n                            return;\n                        }\n\n                        that._tooltipTimeout = setTimeout(function() {\n                            that.view()._createTaskTooltip(task, element, currentMousePosition);\n                        }, 800);\n\n                        $(this).on(MOUSEMOVE, mouseMoveHandler);\n                    })\n                    .on(MOUSELEAVE + NS, DOT + styles.task, function(e) {\n                        clearTimeout(that._tooltipTimeout);\n\n                        that.view()._removeTaskTooltip();\n\n                        $(this).off(MOUSEMOVE, mouseMoveHandler);\n                    });\n        }\n\n    });\n\n    extend(true, GanttTimeline, { styles: timelineStyles });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n\n    var kendo = window.kendo;\n    var browser = kendo.support.browser;\n    var Observable = kendo.Observable;\n    var Widget = kendo.ui.Widget;\n    var DataSource = kendo.data.DataSource;\n    var ObservableObject = kendo.data.ObservableObject;\n    var ObservableArray = kendo.data.ObservableArray;\n    var Query = kendo.data.Query;\n    var isArray = $.isArray;\n    var inArray = $.inArray;\n    var isFunction = kendo.isFunction;\n    var proxy = $.proxy;\n    var extend = $.extend;\n    var isPlainObject = $.isPlainObject;\n    var map = $.map;\n    var keys = kendo.keys;\n    var NS = \".kendoGantt\";\n    var PERCENTAGE_FORMAT = \"p0\";\n    var TABINDEX = \"tabIndex\";\n    var CLICK = \"click\";\n    var WIDTH = \"width\";\n    var STRING = \"string\";\n    var DIRECTIONS = {\n        \"down\": {\n            origin: \"bottom center\",\n            position: \"top center\"\n        },\n        \"up\": {\n            origin: \"top center\",\n            position: \"bottom center\"\n        }\n    };\n    var ARIA_DESCENDANT = \"aria-activedescendant\";\n    var ACTIVE_CELL = \"gantt_active_cell\";\n    var ACTIVE_OPTION = \"action-option-focused\";\n    var DOT = \".\";\n    var TASK_DELETE_CONFIRM = \"Are you sure you want to delete this task?\";\n    var DEPENDENCY_DELETE_CONFIRM = \"Are you sure you want to delete this dependency?\";\n    var BUTTON_TEMPLATE = '<button class=\"#=styles.button# #=className#\" '+\n            '#if (action) {#' +\n                'data-action=\"#=action#\"' +\n            '#}#' + \n        '><span class=\"#=iconClass#\"></span>#=text#</button>';\n    var COMMAND_BUTTON_TEMPLATE = '<a class=\"#=className#\" #=attr# href=\"\\\\#\">#=text#</a>';\n    var HEADER_VIEWS_TEMPLATE = kendo.template('<ul class=\"#=styles.viewsWrapper#\">' +\n            '#for(var view in views){#' +\n                '<li class=\"#=styles.viewButtonDefault# #=styles.viewButton#-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a href=\"\\\\#\" class=\"#=styles.link#\">#=views[view].title#</a></li>' +\n            '#}#' +\n        '</ul>');\n    var TASK_DROPDOWN_TEMPLATE = kendo.template('<div class=\"#=styles.popupWrapper#\">' +\n            '<ul class=\"#=styles.popupList#\" role=\"listbox\">' +\n                '#for(var i = 0, l = actions.length; i < l; i++){#' +\n                    '<li class=\"#=styles.item#\" data-action=\"#=actions[i].data#\" role=\"option\">#=actions[i].text#</span>' +\n                '#}#' +\n            '</ul>' +\n        '</div>');\n\n    var DATERANGEEDITOR = function(container, options) {\n        var attr = { name: options.field };\n        var validationRules = options.model.fields[options.field].validation;\n\n        if (validationRules && isPlainObject(validationRules) && validationRules.message) {\n            attr[kendo.attr(\"dateCompare-msg\")] = validationRules.message;\n        }\n\n        $('<input type=\"text\" required ' +\n                kendo.attr(\"type\") + '=\"date\" ' +\n                kendo.attr(\"role\") + '=\"datetimepicker\" ' +\n                kendo.attr(\"bind\") + '=\"value:' +\n                options.field +'\" ' +\n                kendo.attr(\"validate\") + \"='true' />\")\n            .attr(attr)\n            .appendTo(container);\n\n        $('<span ' + kendo.attr(\"for\") + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>')\n            .hide()\n            .appendTo(container);\n    };\n\n    var RESOURCESEDITOR = function(container, options) {\n        $('<a href=\"#\" class=\"' + options.styles.button + '\">' + options.messages.assingButton + '</a>').click(options.click).appendTo(container);\n    };\n\n    var ganttStyles = {\n        wrapper: \"k-widget k-gantt\",\n        listWrapper: \"k-gantt-layout k-gantt-treelist\",\n        list: \"k-gantt-treelist\",\n        timelineWrapper: \"k-gantt-layout k-gantt-timeline\",\n        timeline: \"k-gantt-timeline\",\n        splitBarWrapper: \"k-splitbar k-state-default k-splitbar-horizontal k-splitbar-draggable-horizontal k-gantt-layout\",\n        splitBar: \"k-splitbar\",\n        splitBarHover: \"k-splitbar-horizontal-hover\",\n        popupWrapper: \"k-list-container\",\n        popupList: \"k-list k-reset\",\n        resizeHandle: \"k-resize-handle\",\n        icon: \"k-icon\",\n        item: \"k-item\",\n        line: \"k-line\",\n        buttonDelete: \"k-gantt-delete\",\n        buttonCancel: \"k-gantt-cancel\",\n        buttonSave: \"k-gantt-update\",\n        primary: \"k-primary\",\n        hovered: \"k-state-hover\",\n        selected: \"k-state-selected\",\n        focused: \"k-state-focused\",\n        gridHeader: \"k-grid-header\",\n        gridHeaderWrap: \"k-grid-header-wrap\",\n        gridContent: \"k-grid-content\",\n        popup: {\n            form: \"k-popup-edit-form\",\n            editForm: \"k-gantt-edit-form\",\n            formContainer: \"k-edit-form-container\",\n            resourcesFormContainer: \"k-resources-form-container\",\n            message: \"k-popup-message\",\n            buttonsContainer: \"k-edit-buttons k-state-default\",\n            button: \"k-button\",\n            editField: \"k-edit-field\",\n            editLabel: \"k-edit-label\",\n            resourcesField: \"k-gantt-resources\"\n        },\n        toolbar: {\n            headerWrapper: \"k-floatwrap k-header k-gantt-toolbar\",\n            footerWrapper: \"k-floatwrap k-header k-gantt-toolbar\",\n            toolbar: \"k-gantt-toolbar\",\n            views: \"k-gantt-views\",\n            viewsWrapper: \"k-reset k-header k-gantt-views\",\n            actions: \"k-gantt-actions\",\n            button: \"k-button k-button-icontext\",\n            iconPlus: \"k-icon k-i-plus\",\n            iconPdf: \"k-icon k-i-pdf\",\n            viewButtonDefault: \"k-state-default\",\n            viewButton: \"k-view\",\n            link: \"k-link\",\n            pdfButton: \"k-gantt-pdf\",\n            appendButton: \"k-gantt-create\"\n        }\n    };\n\n    function selector(uid) {\n        return \"[\" + kendo.attr(\"uid\") + (uid ? \"='\" + uid + \"']\" : \"]\");\n    }\n\n    function trimOptions(options) {\n        delete options.name;\n        delete options.prefix;\n\n        delete options.remove;\n        delete options.edit;\n        delete options.add;\n        delete options.navigate;\n\n        return options;\n    }\n\n    function dateCompareValidator(input) {\n        if (input.filter(\"[name=end], [name=start]\").length) {\n            var field = input.attr(\"name\");\n            var picker = kendo.widgetInstance(input, kendo.ui);\n            var dates = {};\n            var container = input;\n            var editable;\n            var model;\n\n            while (container !== window && !editable) {\n                container = container.parent();\n\n                editable = container.data(\"kendoEditable\");\n            }\n\n            model = editable ? editable.options.model : null;\n\n            if (!model) {\n                return true;\n            }\n\n            dates.start = model.start;\n            dates.end = model.end;\n            dates[field] = picker ? picker.value() : kendo.parseDate(input.value());\n\n            return dates.start <= dates.end;\n        }\n\n        return true;\n    }\n\n    function focusTable(table, direct) {\n        var wrapper = table.parents('[' + kendo.attr(\"role\") + '=\"gantt\"]');\n        var scrollPositions = [];\n        var parents = scrollableParents(wrapper);\n\n        table.attr(TABINDEX, 0);\n\n        if (direct) {\n            parents.each(function(index, parent) {\n                scrollPositions[index] = $(parent).scrollTop();\n            });\n        }\n\n        try {\n            //The setActive method does not cause the document to scroll to the active object in the current page\n            table[0].setActive();\n        } catch (e) {\n            table[0].focus();\n        }\n\n        if (direct) {\n            parents.each(function(index, parent) {\n                $(parent).scrollTop(scrollPositions[index]);\n            });\n        }\n    }\n\n    function scrollableParents(element) {\n        return $(element).parentsUntil(\"body\")\n                .filter(function(index, element) {\n                    var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n                    return computedStyle.overflow != \"visible\";\n                })\n                .add(window);\n    }\n\n    var defaultCommands = {\n        append: {\n            text: \"Add Task\",\n            action: \"add\",\n            className: ganttStyles.toolbar.appendButton,\n            iconClass: ganttStyles.toolbar.iconPlus\n        },\n        pdf: {\n            text: \"Export to PDF\",\n            className: ganttStyles.toolbar.pdfButton,\n            iconClass: ganttStyles.toolbar.iconPdf\n        }\n    };\n\n    var TaskDropDown = Observable.extend({\n        init: function(element, options) {\n\n            Observable.fn.init.call(this);\n\n            this.element = element;\n            this.options = extend(true, {}, this.options, options);\n\n            this._popup();\n        },\n\n        options: {\n            direction: \"down\",\n            navigatable: false\n        },\n\n        _current: function(method) {\n            var ganttStyles = Gantt.styles;\n            var current = this.list\n                .find(DOT + ganttStyles.focused);\n            var sibling = current[method]();\n\n            if (sibling.length) {\n                current\n                    .removeClass(ganttStyles.focused)\n                    .removeAttr(\"id\");\n                sibling\n                    .addClass(ganttStyles.focused)\n                    .attr(\"id\", ACTIVE_OPTION);\n\n                this.list.find(\"ul\")\n                    .removeAttr(ARIA_DESCENDANT)\n                    .attr(ARIA_DESCENDANT, ACTIVE_OPTION);\n            }\n        },\n\n        _popup: function() {\n            var that = this;\n            var ganttStyles = Gantt.styles;\n            var itemSelector = \"li\" + DOT + ganttStyles.item;\n            var actions = this.options.messages.actions;\n            var navigatable = this.options.navigatable;\n\n            this.list = $(TASK_DROPDOWN_TEMPLATE({\n                styles: ganttStyles,\n                actions: [\n                    {\n                        data: \"add\",\n                        text: actions.addChild\n                    },\n                    {\n                        data: \"insert-before\",\n                        text: actions.insertBefore\n                    },\n                    {\n                        data: \"insert-after\",\n                        text: actions.insertAfter\n                    }\n                ]\n            }));\n\n            this.element.append(this.list);\n\n            this.popup = new kendo.ui.Popup(this.list,\n                extend({\n                    anchor: this.element,\n                    open: function(e) {\n                        that._adjustListWidth();\n                    },\n                    animation: this.options.animation\n                }, DIRECTIONS[this.options.direction])\n            );\n\n            this.element\n                .on(CLICK + NS, DOT + ganttStyles.toolbar.appendButton, function(e) {\n                    var target = $(this);\n                    var action = target.attr(kendo.attr(\"action\"));\n\n                    e.preventDefault();\n\n                    if (action) {\n                        that.trigger(\"command\", { type: action });\n                    } else {\n                        that.popup.open();\n\n                        if (navigatable) {\n                            that.list\n                                .find(\"li:first\")\n                                .addClass(ganttStyles.focused)\n                                .attr(\"id\", ACTIVE_OPTION)\n                                .end()\n                                .find(\"ul\")\n                                .attr({\n                                    TABINDEX: 0,\n                                    \"aria-activedescendant\": ACTIVE_OPTION\n                                })\n                                .focus();\n                        }\n                    }\n                });\n\n            this.list\n                .find(itemSelector)\n                .hover(function() {\n                    $(this).addClass(ganttStyles.hovered);\n                }, function() {\n                    $(this).removeClass(ganttStyles.hovered);\n                })\n                .end()\n                .on(CLICK + NS, itemSelector, function(e) {\n                    that.trigger(\"command\", { type: $(this).attr(kendo.attr(\"action\")) });\n                    that.popup.close();\n                });\n\n            if (navigatable) {\n                this.popup\n                    .bind(\"close\", function() {\n                        that.list\n                            .find(itemSelector)\n                            .removeClass(ganttStyles.focused)\n                            .end()\n                            .find(\"ul\")\n                            .attr(TABINDEX, 0);\n\n                        that.element\n                            .parents('[' + kendo.attr(\"role\") + '=\"gantt\"]')\n                            .find(DOT + ganttStyles.gridContent + \" > table:first\")\n                            .focus();\n                    });\n\n                this.list\n                    .find(\"ul\")\n                    .on(\"keydown\" + NS, function(e) {\n                        var key = e.keyCode;\n\n                        switch (key) {\n                            case keys.UP:\n                                e.preventDefault();\n                                that._current(\"prev\");\n                                break;\n                            case keys.DOWN:\n                                e.preventDefault();\n                                that._current(\"next\");\n                                break;\n                            case keys.ENTER:\n                                that.list\n                                    .find(DOT + ganttStyles.focused)\n                                    .click();\n                                break;\n                            case keys.ESC:\n                                e.preventDefault();\n                                that.popup.close();\n                                break;\n                        }\n                    });\n            }\n        },\n\n        _adjustListWidth: function() {\n            var list = this.list;\n            var width = list[0].style.width;\n            var wrapper = this.element;\n            var computedStyle;\n            var computedWidth;\n\n            if (!list.data(WIDTH) && width) {\n                return;\n            }\n\n            computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n            computedWidth = computedStyle ? parseFloat(computedStyle.width) : wrapper.outerWidth();\n\n            if (computedStyle && (browser.mozilla || browser.msie)) { // getComputedStyle returns different box in FF and IE.\n                computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n            }\n\n            if (list.css(\"box-sizing\") !== \"border-box\") {\n                width = computedWidth - (list.outerWidth() - list.width());\n            } else {\n                width = computedWidth;\n            }\n\n            list.css({\n                fontFamily: wrapper.css(\"font-family\"),\n                width: width\n            })\n            .data(WIDTH, width);\n        },\n\n        destroy: function() {\n            this.popup.destroy();\n            this.element.off(NS);\n            this.list.off(NS);\n            this.unbind();\n        }\n    });\n\n    var createDataSource = function(type, name) {\n        return function(options) {\n            options = isArray(dataSource) ? { data: options } : options;\n\n            var dataSource = options || {};\n            var data = dataSource.data;\n\n            dataSource.data = data;\n\n            if (!(dataSource instanceof type) && dataSource instanceof DataSource) {\n                throw new Error(\"Incorrect DataSource type. Only \" + name + \" instances are supported\");\n            }\n\n            return dataSource instanceof type ? dataSource : new type(dataSource);\n        };\n    };\n\n    var GanttDependency = kendo.data.Model.define({\n        id: \"id\",\n        fields: {\n            id: { type: \"number\" },\n            predecessorId: { type: \"number\" },\n            successorId: { type: \"number\" },\n            type: { type: \"number\" }\n        }\n    });\n\n    var GanttDependencyDataSource = DataSource.extend({\n        init: function(options) {\n            DataSource.fn.init.call(this, extend(true, {}, {\n                schema: {\n                    modelBase: GanttDependency,\n                    model: GanttDependency\n                }\n            }, options));\n        },\n\n        successors: function(id) {\n            return this._dependencies(\"predecessorId\", id);\n        },\n\n        predecessors: function(id) {\n            return this._dependencies(\"successorId\", id);\n        },\n\n        dependencies: function(id) {\n            var predecessors = this.predecessors(id);\n            var successors = this.successors(id);\n\n            predecessors.push.apply(predecessors, successors);\n\n            return predecessors;\n        },\n\n        _dependencies: function(field, id) {\n            var data = this.view();\n            var filter = {\n                field: field,\n                operator: \"eq\",\n                value: id\n            };\n\n            data = new Query(data).filter(filter).toArray();\n\n            return data;\n        }\n    });\n\n    GanttDependencyDataSource.create = createDataSource(GanttDependencyDataSource, \"GanttDependencyDataSource\");\n\n    var GanttTask = kendo.data.Model.define({\n\n        duration: function() {\n            var end = this.end;\n            var start = this.start;\n\n            return end - start;\n        },\n\n        isMilestone: function() {\n            return this.duration() === 0;\n        },\n\n        _offset: function(value) {\n            var field = [\"start\", \"end\"];\n            var newValue;\n\n            for (var i = 0; i < field.length; i++) {\n                newValue = new Date(this.get(field[i]).getTime() + value);\n                this.set(field[i], newValue);\n            }\n        },\n\n        id: \"id\",\n        fields: {\n            id: { type: \"number\" },\n            parentId: { type: \"number\", defaultValue: null, validation: { required: true } },\n            orderId: { type: \"number\", validation: { required: true } },\n            title: { type: \"string\", defaultValue: \"\" },\n            start: {\n                type: \"date\", validation: {\n                    required: true,\n                    dateCompare: dateCompareValidator,\n                    message: \"Start date should be before or equal to the end date\"\n                }\n            },\n            end: {\n                type: \"date\", validation: {\n                    required: true,\n                    dateCompare: dateCompareValidator,\n                    message: \"End date should be after or equal to the start date\"\n                }\n            },\n            percentComplete: { type: \"number\", validation: { required: true, min:0, max: 1, step: 0.01 } },\n            summary: { type: \"boolean\" },\n            expanded: { type: \"boolean\", defaultValue: true }\n        }\n    });\n\n    var GanttDataSource = DataSource.extend({\n        init: function(options) {\n            DataSource.fn.init.call(this, extend(true, {}, {\n                schema: {\n                    modelBase: GanttTask,\n                    model: GanttTask\n                }\n            }, options));\n        },\n\n        remove: function(task) {\n            var parentId = task.get(\"parentId\");\n            var children = this.taskAllChildren(task);\n\n            this._removeItems(children);\n\n            task = DataSource.fn.remove.call(this, task);\n\n            this._childRemoved(parentId, task.get(\"orderId\"));\n\n            return task;\n        },\n\n        add: function(task) {\n            if (!task) {\n                return;\n            }\n\n            task = this._toGanttTask(task);\n\n            return this.insert(this.taskSiblings(task).length, task);\n        },\n\n        insert: function(index, task) {\n            if (!task) {\n                return;\n            }\n\n            task = this._toGanttTask(task);\n\n            task.set(\"orderId\", index);\n\n            task = DataSource.fn.insert.call(this, index, task);\n\n            this._reorderSiblings(task, this.taskSiblings(task).length - 1);\n            this._resolveSummaryFields(this.taskParent(task));\n\n            return task;\n        },\n\n        taskChildren: function(task) {\n            var data = this.view();\n            var filter = {\n                field: \"parentId\",\n                operator: \"eq\",\n                value: null\n            }; \n            var order = this._sort || {\n                field: \"orderId\",\n                dir: \"asc\"\n            };\n            var taskId;\n\n            if (!!task) {\n                taskId = task.get(\"id\");\n\n                if (taskId === undefined || taskId === null) {\n                    return [];\n                }\n\n                filter.value = taskId;\n            }\n\n            data = new Query(data).filter(filter).sort(order).toArray();\n\n            return data;\n        },\n\n        taskAllChildren: function(task) {\n            var data = [];\n            var that = this;\n            var callback = function(task) {\n                var tasks = that.taskChildren(task);\n\n                data.push.apply(data, tasks);\n                map(tasks, callback);\n            };\n\n            if (!!task) {\n                callback(task);\n            } else {\n                data = this.view();\n            }\n\n            return data;\n        },\n\n        taskSiblings: function(task) {\n            if (!task) {\n                return null;\n            }\n\n            var parent = this.taskParent(task);\n\n            return this.taskChildren(parent);\n        },\n\n        taskParent: function(task) {\n            if (!task || task.get(\"parentId\") === null) {\n                return null;\n            }\n            return this.get(task.parentId);\n        },\n\n        taskLevel: function(task) {\n            var level = 0;\n            var parent = this.taskParent(task);\n\n            while (parent !== null) {\n                level += 1;\n                parent = this.taskParent(parent);\n            }\n\n            return level;\n        },\n\n        taskTree: function(task) {\n            var data = [];\n            var current;\n            var tasks = this.taskChildren(task);\n\n            for (var i = 0, l = tasks.length; i < l; i++) {\n                current = tasks[i];\n                data.push(current);\n\n                if (current.get(\"expanded\")) {\n                    var children = this.taskTree(current);\n\n                    data.push.apply(data, children);\n                }\n            }\n\n            return data;\n        },\n\n        update: function(task, taskInfo) {\n            var that = this;\n            var oldValue;\n\n            var offsetChildren = function(parentTask, offset) {\n                var children = that.taskAllChildren(parentTask);\n\n                for (var i = 0, l = children.length; i < l; i++) {\n                    children[i]._offset(offset);\n                }\n            };\n\n            var modelChangeHandler = function(e) {\n                var field = e.field;\n                var model = e.sender;\n\n                switch (field) {\n                    case \"start\":\n                        that._resolveSummaryStart(that.taskParent(model));\n\n                        offsetChildren(model, model.get(field).getTime() - oldValue.getTime());\n                        break;\n                    case \"end\":\n                        that._resolveSummaryEnd(that.taskParent(model));\n                        break;\n                    case \"percentComplete\":\n                        that._resolveSummaryPercentComplete(that.taskParent(model));\n                        break;\n                    case \"orderId\":\n                        that._reorderSiblings(model, oldValue);\n                        break;\n                }\n            };\n\n            if (taskInfo.parentId !== undefined) {\n\n                oldValue = task.get(\"parentId\");\n\n                if (oldValue !== taskInfo.parentId) {\n                    task.set(\"parentId\", taskInfo.parentId);\n\n                    that._childRemoved(oldValue, task.get(\"orderId\"));\n\n                    task.set(\"orderId\", that.taskSiblings(task).length - 1);\n                    that._resolveSummaryFields(that.taskParent(task));\n                }\n\n                delete taskInfo.parentId;\n            }\n\n            task.bind(\"change\", modelChangeHandler);\n\n            for (var field in taskInfo) {\n                oldValue = task.get(field);\n                task.set(field, taskInfo[field]);\n            }\n\n            task.unbind(\"change\", modelChangeHandler);\n        },\n\n        _resolveSummaryFields: function(summary) {\n            if (!summary) {\n                return;\n            }\n\n            this._updateSummary(summary);\n\n            if (!this.taskChildren(summary).length) {\n                return;\n            }\n\n            this._resolveSummaryStart(summary);\n            this._resolveSummaryEnd(summary);\n            this._resolveSummaryPercentComplete(summary);\n        },\n\n        _resolveSummaryStart: function(summary) {\n            var that = this;\n            var getSummaryStart = function(parentTask) {\n                var children = that.taskChildren(parentTask);\n                var min = children[0].start.getTime();\n                var currentMin;\n\n                for (var i = 1, l = children.length; i < l; i++) {\n                    currentMin = children[i].start.getTime();\n                    if (currentMin < min) {\n                        min = currentMin;\n                    }\n                }\n\n                return new Date(min);\n            };\n\n            this._updateSummaryRecursive(summary, \"start\", getSummaryStart);\n        },\n\n        _resolveSummaryEnd: function(summary) {\n            var that = this;\n            var getSummaryEnd = function(parentTask) {\n                var children = that.taskChildren(parentTask);\n                var max = children[0].end.getTime();\n                var currentMax;\n\n                for (var i = 1, l = children.length; i < l; i++) {\n                    currentMax = children[i].end.getTime();\n                    if (currentMax > max) {\n                        max = currentMax;\n                    }\n                }\n\n                return new Date(max);\n            };\n\n            this._updateSummaryRecursive(summary, \"end\", getSummaryEnd);\n        },\n\n        _resolveSummaryPercentComplete: function(summary) {\n            var that = this;\n            var getSummaryPercentComplete = function(parentTask) {\n                var children = that.taskChildren(parentTask);\n                var percentComplete = new Query(children).aggregate([{\n                    field: \"percentComplete\",\n                    aggregate: \"average\"\n                }]);\n\n                return percentComplete.percentComplete.average;\n            };\n\n            this._updateSummaryRecursive(summary, \"percentComplete\", getSummaryPercentComplete);\n        },\n\n        _updateSummaryRecursive: function(summary, field, callback) {\n            if (!summary) {\n                return;\n            }\n\n            var value = callback(summary);\n\n            summary.set(field, value);\n\n            var parent = this.taskParent(summary);\n\n            if (parent) {\n                this._updateSummaryRecursive(parent, field, callback);\n            }\n        },\n\n        _childRemoved: function(parentId, index) {\n            var parent = parentId === null ? null : this.get(parentId);\n            var children = this.taskChildren(parent);\n\n            for (var i = index, l = children.length; i < l; i++) {\n                children[i].set(\"orderId\", i);\n            }\n\n            this._resolveSummaryFields(parent);\n        },\n\n        _reorderSiblings: function(task, oldOrderId) {\n            var orderId = task.get(\"orderId\");\n            var direction = orderId > oldOrderId;\n            var startIndex = direction ? oldOrderId : orderId;\n            var endIndex = direction ? orderId : oldOrderId;\n            var newIndex = direction ? startIndex : startIndex + 1;\n            var siblings = this.taskSiblings(task);\n\n            endIndex = Math.min(endIndex, siblings.length - 1);\n\n            for (var i = startIndex; i <= endIndex; i++) {\n                if (siblings[i] === task) {\n                    continue;\n                }\n\n                siblings[i].set(\"orderId\", newIndex);\n\n                newIndex += 1;\n            }\n        },\n\n        _updateSummary: function(task) {\n            if (task !== null) {\n                var childCount = this.taskChildren(task).length;\n\n                task.set(\"summary\", childCount > 0);\n            }\n        },\n\n        _toGanttTask: function(task) {\n            if (!(task instanceof GanttTask)) {\n                var taskInfo = task;\n\n                task = this._createNewModel();\n                task.accept(taskInfo);\n            }\n\n            return task;\n        }\n    });\n\n    GanttDataSource.create = createDataSource(GanttDataSource, \"GanttDataSource\");\n\n    extend(true, kendo.data, {\n        GanttDataSource: GanttDataSource,\n        GanttTask: GanttTask,\n        GanttDependencyDataSource: GanttDependencyDataSource,\n        GanttDependency: GanttDependency\n    });\n\n    var editors = {\n        desktop: {\n            dateRange: DATERANGEEDITOR,\n            resources: RESOURCESEDITOR\n        }\n    };\n\n    var Editor = kendo.Observable.extend({\n        init: function(element, options) {\n            kendo.Observable.fn.init.call(this);\n\n            this.element = element;\n            this.options = extend(true, {}, this.options, options);\n            this.createButton = this.options.createButton;\n        },\n\n        fields: function(editors, model) {\n            var that = this;\n            var options = this.options;\n            var messages = options.messages.editor;\n            var resources = options.resources;\n            var fields;\n\n            var click = function(e) {\n                e.preventDefault();\n                resources.editor(that.container.find(DOT + Gantt.styles.popup.resourcesField), model);\n            };\n\n            if (options.editable.template) {\n                fields = $.map(model.fields, function(value, key) {\n                            return { field: key };\n                        });\n            } else {\n                fields = [\n                    { field: \"title\", title: messages.title },\n                    { field: \"start\", title: messages.start, editor: editors.dateRange },\n                    { field: \"end\", title: messages.end, editor: editors.dateRange },\n                    { field: \"percentComplete\", title: messages.percentComplete, format: PERCENTAGE_FORMAT }\n                ];\n\n                if (model.get(resources.field)) {\n                    fields.push({ field: resources.field, title: messages.resources, messages: messages, editor: editors.resources, click: click, styles: Gantt.styles.popup });\n                }\n            }\n\n            return fields;\n        },\n\n        _buildEditTemplate: function(model, fields, editableFields) {\n            var resources = this.options.resources;\n            var template = this.options.editable.template;\n            var settings = extend({}, kendo.Template, this.options.templateSettings);\n            var paramName = settings.paramName;\n            var popupStyles = Gantt.styles.popup;\n            var html = \"\";\n\n            if (template) {\n                if (typeof template === STRING) {\n                    template = window.unescape(template);\n                }\n\n                html += (kendo.template(template, settings))(model);\n            } else {\n                for (var i = 0, length = fields.length; i < length; i++) {\n                    var field = fields[i];\n\n                    html += '<div class=\"' + popupStyles.editLabel + '\"><label for=\"' + field.field + '\">' + (field.title || field.field || \"\") + '</label></div>';\n\n                    if (field.field === resources.field) {\n                        html += '<div class=\"' + popupStyles.resourcesField + '\" style=\"display:none\"></div>';\n                    }\n\n                    if ((!model.editable || model.editable(field.field))) {\n                        editableFields.push(field);\n                        html += '<div ' + kendo.attr(\"container-for\") + '=\"' + field.field + '\" class=\"' + popupStyles.editField + '\"></div>';\n                    } else {\n                        var tmpl = \"#:\";\n\n                        if (field.field) {\n                            field = kendo.expr(field.field, paramName);\n                            tmpl += field + \"==null?'':\" + field;\n                        } else {\n                            tmpl += \"''\";\n                        }\n\n                        tmpl += \"#\";\n\n                        tmpl = kendo.template(tmpl, settings);\n\n                        html += '<div class=\"' + popupStyles.editField + '\">' + tmpl(model) + '</div>';\n                    }\n                }\n            }\n\n            return html;\n        }\n    });\n\n    var PopupEditor = Editor.extend({\n        destroy: function() {\n            this.close();\n            this.unbind();\n        },\n\n        editTask: function(task) {\n            this.editable = this._createPopupEditor(task);\n        },\n\n        close: function() {\n            var that = this;\n\n            var destroy = function() {\n                if (that.editable) {\n                    that.editable.destroy();\n                    that.editable = null;\n                    that.container = null;\n                }\n\n                if (that.popup) {\n                    that.popup.destroy();\n                    that.popup = null;\n                }\n            };\n\n            if (this.editable && this.container.is(\":visible\")) {\n                this.container.data(\"kendoWindow\").bind(\"deactivate\", destroy).close();\n            } else {\n                destroy();\n            }\n        },\n\n        showDialog: function(options) {\n            var buttons = options.buttons;\n            var popupStyles = Gantt.styles.popup;\n\n            var html = kendo.format('<div class=\"{0}\"><div class=\"{1}\"><p class=\"{2}\">{3}</p><div class=\"{4}\">',\n                popupStyles.form, popupStyles.formContainer, popupStyles.message, options.text, popupStyles.buttonsContainer);\n\n            for (var i = 0, length = buttons.length; i < length; i++) {\n                html += this.createButton(buttons[i]);\n            }\n\n            html += '</div></div></div>';\n\n            var wrapper = this.element;\n\n            if (this.popup) {\n                this.popup.destroy();\n            }\n\n            var popup = this.popup = $(html).appendTo(wrapper)\n                .eq(0)\n                .on(\"click\", DOT + popupStyles.button, function(e) {\n                    e.preventDefault();\n\n                    popup.close();\n\n                    var buttonIndex = $(e.currentTarget).index();\n\n                    buttons[buttonIndex].click();\n                })\n                .kendoWindow({\n                    modal: true,\n                    resizable: false,\n                    draggable: false,\n                    title: options.title,\n                    visible: false,\n                    close: function() {\n                        this.destroy();\n                        wrapper.focus();\n                    }\n                })\n                .getKendoWindow();\n\n            popup.center().open();\n        },\n\n        _createPopupEditor: function(task) {\n            var that = this;\n            var options = {};\n            var messages = this.options.messages;\n            var ganttStyles = Gantt.styles;\n            var popupStyles = ganttStyles.popup;\n\n            var html = kendo.format('<div {0}=\"{1}\" class=\"{2} {3}\"><div class=\"{4}\">', \n                kendo.attr(\"uid\"), task.uid, popupStyles.form, popupStyles.editForm, popupStyles.formContainer);\n\n            var fields = this.fields(editors.desktop, task);\n            var editableFields = [];\n\n            html += this._buildEditTemplate(task, fields, editableFields);\n\n            html += '<div class=\"' + popupStyles.buttonsContainer + '\">';\n            html += this.createButton({ name: \"update\", text: messages.save, className: Gantt.styles.primary });\n            html += this.createButton({ name: \"cancel\", text: messages.cancel });\n            html += this.createButton({ name: \"delete\", text: messages.destroy });\n\n            html += '</div></div></div>';\n\n            var container = this.container = $(html).appendTo(this.element)\n                .eq(0)\n                .kendoWindow(extend({\n                    modal: true,\n                    resizable: false,\n                    draggable: true,\n                    title: messages.editor.editorTitle,\n                    visible: false,\n                    close: function(e) {\n                        if (e.userTriggered) {\n                            if (that.trigger(\"cancel\", { container: container, model: task })) {\n                                e.preventDefault();\n                            }\n                        }\n                    }\n                }, options));\n\n            var editableWidget = container\n                .kendoEditable({\n                    fields: editableFields,\n                    model: task,\n                    clearContainer: false,\n                    validateOnBlur: true,\n                    target: that.options.target\n                })\n                .data(\"kendoEditable\");\n\n            if (!this.trigger(\"edit\", { container: container, model: task })) {\n                container.data(\"kendoWindow\").center().open();\n\n                container.on(CLICK + NS, DOT + ganttStyles.buttonCancel, function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    that.trigger(\"cancel\", { container: container, model: task });\n                });\n\n                container.on(CLICK + NS, DOT + ganttStyles.buttonSave, function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    var fields = that.fields(editors.desktop, task);\n                    var updateInfo = {};\n                    var field;\n\n                    for (var i = 0, length = fields.length; i < length; i++) {\n                        field = fields[i].field;\n                        updateInfo[field] = task.get(field);\n                    }\n\n                    that.trigger(\"save\", { container: container, model: task, updateInfo: updateInfo });\n                });\n\n                container.on(CLICK + NS, DOT + ganttStyles.buttonDelete, function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    that.trigger(\"remove\", { container: container, model: task });\n                });\n            } else {\n                that.trigger(\"cancel\", { container: container, model: task });\n            }\n\n            return editableWidget;\n        }\n    });\n\n    var ResourceEditor = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this.wrapper = this.element;\n            this.model = this.options.model;\n            this.resourcesField = this.options.resourcesField;\n            this.createButton = this.options.createButton;\n\n            this._initContainer();\n            this._attachHandlers();\n        },\n\n        events: [\n            \"save\"\n        ],\n\n        open: function() {\n            this.window.center().open();\n            this.grid.resize(true);\n        },\n\n        close: function() {\n            this.window.bind(\"deactivate\", proxy(this.destroy, this)).close();\n        },\n\n        destroy: function() {\n            this._dettachHandlers();\n\n            this.grid.destroy();\n            this.grid = null;\n\n            this.window.destroy();\n            this.window = null;\n\n            Widget.fn.destroy.call(this);\n\n            kendo.destroy(this.wrapper);\n\n            this.element = this.wrapper = null;\n        },\n\n        _attachHandlers: function() {\n            var ganttStyles = Gantt.styles;\n            var grid = this.grid;\n\n            var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n            this.container.on(CLICK + NS, DOT + ganttStyles.buttonCancel, this._cancelProxy);\n\n            this._saveProxy = proxy(this._save, this);\n            this.container.on(CLICK + NS, DOT + ganttStyles.buttonSave, this._saveProxy);\n\n            this.window.bind(\"close\", function(e) {\n                if (e.userTriggered) {\n                    closeHandler(e);\n                }\n            });\n\n            grid.wrapper.on(CLICK + NS, \"input[type='checkbox']\", function(e) {\n                var element = $(this);\n                var row = $(element).closest(\"tr\");\n                var model = grid.dataSource.getByUid(row.attr(kendo.attr(\"uid\")));\n                var value = $(element).is(\":checked\") ? 1 : \"\";\n\n                model.set(\"value\", value);\n            });\n        },\n\n        _dettachHandlers: function() {\n            this._cancelProxy = null;\n            this._saveProxy = null;\n            this.container.off(NS);\n            this.grid.wrapper.off();\n        },\n\n        _cancel: function(e) {\n            e.preventDefault();\n            this.close();\n        },\n\n        _save: function(e) {\n            e.preventDefault();\n\n            this._updateModel();\n\n            if (!this.wrapper.is(DOT + Gantt.styles.popup.resourcesField)) {\n                this.trigger(\"save\", { container: this.wrapper, model: this.model });\n            }\n\n            this.close();\n        },\n\n        _initContainer: function() {\n            var popupStyles = Gantt.styles.popup;\n            var dom = kendo.format('<div class=\"{0} {1}\"><div class=\"{2} {3}\"/></div>\"',\n                popupStyles.form, popupStyles.editForm, popupStyles.formContainer, popupStyles.resourcesFormContainer);\n\n            dom = $(dom);\n\n            this.container = dom.find(DOT + popupStyles.resourcesFormContainer);\n\n            this.window = dom.kendoWindow({\n                modal: true,\n                resizable: false,\n                draggable: true,\n                visible: false,\n                title: this.options.messages.resourcesEditorTitle\n            }).data(\"kendoWindow\");\n\n            this._resourceGrid();\n            this._createButtons();\n        },\n\n        _resourceGrid: function() {\n            var that = this;\n            var messages = this.options.messages;\n            var element = $('<div id=\"resources-grid\"/>').appendTo(this.container);\n\n            this.grid = new kendo.ui.Grid(element, {\n                columns: [\n                    {\n                        field: \"name\",\n                        title: messages.resourcesHeader,\n                        template:\n                            \"<label><input type='checkbox' value='#=name#'\" +\n                                \"# if (value > 0 && value !== null) {#\" +\n                                       \"checked='checked'\" +\n                                \"# } #\" +\n                            \"/>#=name#</labe>\"\n                    },\n                    {\n                        field: \"value\",\n                        title: messages.unitsHeader,\n                        template: function(dataItem) {\n                            var valueFormat = dataItem.format;\n                            var value = dataItem.value !== null ? dataItem.value : \"\";\n\n                            return valueFormat ? kendo.toString(value, valueFormat) : value;\n                        }\n                    }\n                ],\n                height: 280,\n                sortable: true,\n                editable: true,\n                filterable: true,\n                dataSource: {\n                    data: that.options.data,\n                    schema: {\n                        model: {\n                            id: \"id\",\n                            fields: {\n                                id: { from: \"id\", type: \"number\" },\n                                name: { from: \"name\", type: \"string\", editable: false},\n                                value: { from: \"value\", type: \"number\", defaultValue: \"\" },\n                                format: { from: \"format\", type: \"string\" }\n                            }\n                        }\n                    }\n                },\n                save: function(e) {\n                    var value = !!e.values.value;\n                    e.container.parent().find(\"input[type='checkbox']\").prop(\"checked\", value);\n                }\n            });\n        },\n\n        _createButtons: function() {\n            var buttons = this.options.buttons;\n            var html = '<div class=\"' + Gantt.styles.popup.buttonsContainer + '\">';\n\n            for (var i = 0, length = buttons.length; i < length; i++) {\n                html += this.createButton(buttons[i]);\n            }\n\n            html += \"</div>\";\n\n            this.container.append(html);\n        },\n\n        _updateModel: function() {\n            var resources = [];\n            var value;\n            var data = this.grid.dataSource.data();\n\n            for (var i = 0, length = data.length; i < length; i++) {\n                value = data[i].get(\"value\");\n                if (value !== null && value > 0) {\n                    resources.push(data[i]);\n                }\n            }\n\n            this.model[this.resourcesField] = resources;\n        }\n    });\n\n    var Gantt = Widget.extend({\n        init: function(element, options) {\n            if (isArray(options)) {\n                options = { dataSource: options };\n            }\n\n            Widget.fn.init.call(this, element, options);\n\n            this._wrapper();\n\n            this._resources();\n\n            this._timeline();\n\n            this._toolbar();\n\n            this._footer();\n\n            this._adjustDimensions();\n\n            // Prevent extra refresh from setting the view\n            this._preventRefresh = true;\n\n            this.view(this.timeline._selectedViewName);\n\n            this._preventRefresh = false;\n\n            this._dataSource();\n\n            this._assignments();\n\n            this._dropDowns();\n\n            this._list();\n\n            this._dependencies();\n\n            this._resizable();\n\n            this._scrollable();\n\n            this._dataBind();\n\n            this._attachEvents();\n\n            this._createEditor();\n\n            kendo.notify(this);\n        },\n\n        events: [\n            \"dataBinding\",\n            \"dataBound\",\n            \"add\",\n            \"edit\",\n            \"remove\",\n            \"cancel\",\n            \"save\",\n            \"change\",\n            \"navigate\",\n            \"moveStart\",\n            \"move\",\n            \"moveEnd\",\n            \"resizeStart\",\n            \"resize\",\n            \"resizeEnd\"\n        ],\n\n        options: {\n            name: \"Gantt\",\n            autoBind: true,\n            navigatable: false,\n            selectable: true,\n            editable: true,\n            columns: [],\n            views: [],\n            dataSource: {},\n            dependencies: {},\n            resources: {},\n            assignments: {},\n            messages: {\n                save: \"Save\",\n                cancel: \"Cancel\",\n                destroy: \"Delete\",\n                deleteTaskWindowTitle: \"Delete task\",\n                deleteDependencyWindowTitle: \"Delete dependency\",\n                views: {\n                    day: \"Day\",\n                    week: \"Week\",\n                    month: \"Month\",\n                    year: \"Year\",\n                    start: \"Start\",\n                    end: \"End\"\n                },\n                actions: {\n                    append: \"Add Task\",\n                    addChild: \"Add Child\",\n                    insertBefore: \"Add Above\",\n                    insertAfter: \"Add Below\",\n                    pdf: \"Export to PDF\"\n                },\n                editor: {\n                    editorTitle: \"Task\",\n                    resourcesEditorTitle: \"Resources\",\n                    title: \"Title\",\n                    start: \"Start\",\n                    end: \"End\",\n                    percentComplete: \"Complete\",\n                    resources: \"Resources\",\n                    assingButton: \"Assign\",\n                    resourcesHeader: \"Resources\",\n                    unitsHeader: \"Units\"\n                }\n            },\n            showWorkHours: true,\n            showWorkDays: true,\n            workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n            workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n            workWeekStart: 1,\n            workWeekEnd: 5,\n            hourSpan: 1,\n            snap: true,\n            height: 600,\n            listWidth: \"30%\"\n        },\n\n        select: function(value) {\n            var list = this.list;\n\n            if (!value) {\n                return list.select();\n            }\n\n            list.select(value);\n\n            return;\n        },\n\n        clearSelection: function() {\n            this.list.clearSelection();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            \n            if (this.dataSource) {\n                this.dataSource.unbind(\"change\", this._refreshHandler);\n                this.dataSource.unbind(\"progress\", this._progressHandler);\n                this.dataSource.unbind(\"error\", this._errorHandler);\n            }\n\n            if (this.dependencies) {\n                this.dependencies.unbind(\"change\", this._dependencyRefreshHandler);\n                this.dependencies.unbind(\"error\", this._dependencyErrorHandler);\n            }\n\n            if (this.timeline) {\n                this.timeline.unbind();\n                this.timeline.destroy();\n            }\n\n            if (this.list) {\n                this.list.unbind();\n                this.list.destroy();\n            }\n\n            if (this.footerDropDown) {\n                this.footerDropDown.destroy();\n            }\n\n            if (this.headerDropDown) {\n                this.headerDropDown.destroy();\n            }\n\n            if (this._editor) {\n                this._editor.destroy();\n            }\n\n            if (this._resizeDraggable) {\n                this._resizeDraggable.destroy();\n            }\n\n            this.toolbar.off(NS);\n\n            $(window).off(\"resize\" + NS, this._resizeHandler);\n            $(this.wrapper).off(NS);\n\n            this.toolbar = null;\n            this.footer = null;\n        },\n\n        _attachEvents: function() {\n            this._resizeHandler = proxy(this.resize, this);\n            $(window).on(\"resize\" + NS, this._resizeHandler);\n        },\n\n        _wrapper: function() {\n            var ganttStyles = Gantt.styles;\n            var splitBarHandleClassName = [ganttStyles.icon, ganttStyles.resizeHandle].join(\" \");\n            var options = this.options;\n            var height = options.height;\n            var width = options.width;\n\n            this.wrapper = this.element\n                            .addClass(ganttStyles.wrapper)\n                            .append(\"<div class='\" + ganttStyles.listWrapper + \"'><div></div></div>\")\n                            .append(\"<div class='\" + ganttStyles.splitBarWrapper + \"'><div class='\" + splitBarHandleClassName + \"'></div></div>\")\n                            .append(\"<div class='\" + ganttStyles.timelineWrapper + \"'><div></div></div>\");\n\n            this.wrapper.find(DOT + ganttStyles.list).width(options.listWidth);\n\n            if (height) {\n                this.wrapper.height(height);\n            }\n\n            if (width) {\n                this.wrapper.width(width);\n            }\n        },\n\n        _toolbar: function() {\n            var that = this;\n            var ganttStyles = Gantt.styles;\n            var viewsSelector = DOT + ganttStyles.toolbar.views + \" > li\";\n            var pdfSelector = DOT + ganttStyles.toolbar.pdfButton;\n            var hoveredClassName = ganttStyles.hovered;\n            var actions = this.options.toolbar;\n            var actionsWrap = $(\"<div class='\" + ganttStyles.toolbar.actions + \"'>\");\n            var toolbar;\n            var views;\n\n            if (!isFunction(actions)) {\n                actions = (typeof actions === STRING ? actions : this._actions(actions));\n                actions = proxy(kendo.template(actions), this);\n            }\n\n            views = $(HEADER_VIEWS_TEMPLATE({\n                ns: kendo.ns,\n                views: this.timeline.views,\n                styles: ganttStyles.toolbar\n            }));\n\n            actionsWrap.append(actions({}));\n\n            toolbar = $(\"<div class='\" + ganttStyles.toolbar.headerWrapper + \"'>\")\n                .append(actionsWrap)\n                .append(views);\n\n            this.wrapper.prepend(toolbar);\n            this.toolbar = toolbar;\n\n            toolbar\n                .on(CLICK + NS, viewsSelector, function(e) {\n                    e.preventDefault();\n\n                    var name = $(this).attr(kendo.attr(\"name\"));\n\n                    if (!that.trigger(\"navigate\", { view: name })) {\n                        that.view(name);\n                    }\n                })\n                .on(CLICK + NS, pdfSelector, function(e) {\n                    that.saveAsPDF();\n                });\n\n            this.wrapper\n                .find(DOT + ganttStyles.toolbar.toolbar + \" li\")\n                .hover(function() {\n                    $(this).addClass(hoveredClassName);\n                }, function() {\n                    $(this).removeClass(hoveredClassName);\n                });\n        },\n\n        _actions: function() {\n            var options = this.options;\n            var actions = options.toolbar;\n            var html = \"\";\n\n            if (!isArray(actions)) {\n                if (options.editable) {\n                    actions = [\"append\"];\n                } else {\n                    return html;\n                }\n            }\n\n            for (var i = 0, length = actions.length; i < length; i++) {\n                html += this._createButton(actions[i]);\n            }\n\n            return html;\n        },\n\n        _footer: function() {\n            if (!this.options.editable) {\n                return;\n            }\n\n            var ganttStyles = Gantt.styles.toolbar;\n            var messages = this.options.messages.actions;\n            var button = $(kendo.template(BUTTON_TEMPLATE)(extend(true, { styles: ganttStyles }, defaultCommands.append, { text: messages.append })));\n            var actionsWrap = $(\"<div class='\" + ganttStyles.actions + \"'>\").append(button);\n            var footer = $(\"<div class='\" + ganttStyles.footerWrapper + \"'>\").append(actionsWrap);\n\n            this.wrapper.append(footer);\n            this.footer = footer;\n        },\n\n        _createButton: function(command) {\n            var template = command.template || BUTTON_TEMPLATE;\n            var messages = this.options.messages.actions;\n            var commandName = typeof command === STRING ? command : command.name || command.text;\n            var className = defaultCommands[commandName] ? defaultCommands[commandName].className : \"k-gantt-\" + (commandName || \"\").replace(/\\s/g, \"\");\n            var options = { \n                iconClass: \"\",\n                action: \"\",\n                text: commandName,\n                className: className,\n                styles: Gantt.styles.toolbar\n            };\n\n            if (!commandName && !(isPlainObject(command) && command.template))  {\n                throw new Error(\"Custom commands should have name specified\");\n            }\n\n            options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] });\n\n            if (isPlainObject(command)) {\n                if (command.className && inArray(options.className, command.className.split(\" \")) < 0) {\n                    command.className += \" \" + options.className;\n                }\n\n                options = extend(true, options, command);\n            }\n\n            return kendo.template(template)(options);\n        },\n\n        _adjustDimensions: function() {\n            var element = this.element;\n            var ganttStyles = Gantt.styles;\n            var listSelector = DOT + ganttStyles.list;\n            var timelineSelector = DOT + ganttStyles.timeline;\n            var splitBarSelector = DOT + ganttStyles.splitBar;\n            var toolbarHeight = this.toolbar.outerHeight();\n            var footerHeight = this.footer ? this.footer.outerHeight() : 0;\n            var totalHeight = element.height();\n            var totalWidth = element.width();\n            var splitBarWidth = element.find(splitBarSelector).outerWidth();\n            var treeListWidth = element.find(listSelector).outerWidth();\n\n            element\n                .children([listSelector, timelineSelector, splitBarSelector].join(\",\"))\n                .height(totalHeight - (toolbarHeight + footerHeight))\n                .end()\n                .children(timelineSelector)\n                .width(totalWidth - (splitBarWidth + treeListWidth));\n        },\n\n        _scrollTo: function(value) {\n            var view = this.timeline.view();\n            var attr = kendo.attr(\"uid\");\n            var id = typeof value === \"string\" ? value :\n                value.closest(\"tr\" + selector()).attr(attr);\n            var scrollTarget = view.content.find(selector(id));\n\n            if (scrollTarget.length !== 0) {\n                view._scrollTo(scrollTarget);\n            }\n        },\n\n        _dropDowns: function() {\n            var that = this;\n            var actionsSelector = DOT + Gantt.styles.toolbar.actions;\n            var actionMessages = this.options.messages.actions;\n            var dataSource = this.dataSource;\n            var timeline = this.timeline;\n\n            var handler = function(e) {\n                var type = e.type;\n                var orderId;\n                var task = dataSource._createNewModel();\n                var selected = that.dataItem(that.select());\n                var parent = dataSource.taskParent(selected);\n                var firstSlot = timeline.view()._timeSlots()[0];\n                var target = type === \"add\" ? selected : parent;\n\n                task.set(\"title\", \"New task\");\n\n                if (target) {\n                    task.set(\"parentId\", target.get(\"id\"));\n                    task.set(\"start\", target.get(\"start\"));\n                    task.set(\"end\", target.get(\"end\"));\n                } else {\n                    task.set(\"start\", firstSlot.start);\n                    task.set(\"end\", firstSlot.end);\n                }\n\n                if (type !== \"add\") {\n                    orderId = selected.get(\"orderId\");\n                    orderId = type === \"insert-before\" ? orderId : orderId + 1;\n                }\n\n                that._createTask(task, orderId);\n            };\n\n            if (!this.options.editable) {\n                return;\n            }\n\n            this.footerDropDown = new TaskDropDown(this.footer.children(actionsSelector).eq(0), {\n                messages: {\n                    actions: actionMessages\n                },\n                direction: \"up\",\n                animation: {\n                    open: {\n                        effects: \"slideIn:up\"\n                    }\n                },\n                navigatable: that.options.navigatable\n            });\n\n            this.headerDropDown = new TaskDropDown(this.toolbar.children(actionsSelector).eq(0), {\n                messages: {\n                    actions: actionMessages\n                },\n                navigatable: that.options.navigatable\n            });\n\n            this.footerDropDown.bind(\"command\", handler);\n            this.headerDropDown.bind(\"command\", handler);\n        },\n\n        _list: function() {\n            var that = this;\n            var navigatable = that.options.navigatable;\n            var ganttStyles = Gantt.styles;\n            var listWrapper = this.wrapper.find(DOT + ganttStyles.list);\n            var element = listWrapper.find(\"> div\");\n            var toggleButtons = this.wrapper.find(DOT + ganttStyles.toolbar.actions + \" > button\");\n            var options = {\n                columns: this.options.columns || [],\n                dataSource: this.dataSource,\n                selectable: this.options.selectable,\n                editable: this.options.editable,\n                listWidth: listWrapper.outerWidth(),\n                resourcesField: this.resources.field\n            };\n            var columns = options.columns;\n            var column;\n            var restoreFocus = function() {\n                if (navigatable) {\n                    that._current(that._cachedCurrent);\n\n                    focusTable(that.list.content.find(\"table\"), true);\n                }\n\n                delete that._cachedCurrent;\n            };\n\n            for (var i = 0; i < columns.length; i++) {\n                column = columns[i];\n\n                if (column.field === this.resources.field && typeof column.editor !== \"function\") {\n                    column.editor = proxy(this._createResourceEditor, this);\n                }\n            }\n\n            this.list = new kendo.ui.GanttList(element, options);\n\n            this.list\n                .bind(\"render\", function() {\n                    that._navigatable();\n                 }, true)\n                .bind(\"edit\", function(e) {\n                    that._cachedCurrent = e.cell;\n\n                    if (that.trigger(\"edit\", { task: e.model, container: e.cell })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"cancel\", function(e) {\n                    if (that.trigger(\"cancel\", { task: e.model, container: e.cell })) {\n                        e.preventDefault();\n                    }\n                    restoreFocus();\n                })\n                .bind(\"update\", function(e) {\n                    that._updateTask(e.task, e.updateInfo);\n                    restoreFocus();\n                })\n                .bind(\"change\", function() {\n                    that.trigger(\"change\");\n\n                    var selection = that.list.select();\n\n                    if (selection.length) {\n                        toggleButtons.removeAttr(\"data-action\", \"add\");\n                        that.timeline.select(\"[data-uid='\" + selection.attr(\"data-uid\") + \"']\");\n                    } else {\n                        toggleButtons.attr(\"data-action\", \"add\");\n                        that.timeline.clearSelection();\n                    }\n                });\n        },\n\n        _timeline: function() {\n            var that = this;\n            var ganttStyles = Gantt.styles;\n            var options = trimOptions(extend(true, { resourcesField: this.resources.field }, this.options));\n            var element = this.wrapper.find(DOT + ganttStyles.timeline + \" > div\");\n\n            this.timeline = new kendo.ui.GanttTimeline(element, options);\n\n            this.timeline\n                .bind(\"navigate\", function(e) {\n                    that.toolbar\n                        .find(DOT + ganttStyles.toolbar.views +\" > li\")\n                        .removeClass(ganttStyles.selected)\n                        .end()\n                        .find(DOT + ganttStyles.toolbar.viewButton + \"-\" + e.view.replace(/\\./g, \"\\\\.\").toLowerCase())\n                        .addClass(ganttStyles.selected);\n\n                    that.refresh();\n                })\n                .bind(\"moveStart\", function(e) {\n                    if (that.trigger(\"moveStart\", { task: e.task })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"move\", function(e) {\n                    var task = e.task;\n                    var start = e.start;\n                    var end = new Date(start.getTime() + task.duration());\n\n                    if (that.trigger(\"move\", { task: task, start: start, end: end })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"moveEnd\", function(e) {\n                    var task = e.task;\n                    var start = e.start;\n                    var end = new Date(start.getTime() + task.duration());\n                    \n                    if (!that.trigger(\"moveEnd\", { task: task, start: start, end: end })) {\n                        that._updateTask(that.dataSource.getByUid(task.uid), {\n                            start: start,\n                            end: end\n                        });\n                    }\n                })\n                .bind(\"resizeStart\", function(e) {\n                    if (that.trigger(\"resizeStart\", { task: e.task })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"resize\", function(e) {\n                    if (that.trigger(\"resize\", { task: e.task, start: e.start, end: e.end })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"resizeEnd\", function(e) {\n                    var task = e.task;\n                    var updateInfo = {};\n\n                    if (e.resizeStart) {\n                        updateInfo.start = e.start;\n                    } else {\n                        updateInfo.end = e.end;\n                    }\n                    \n                    if (!that.trigger(\"resizeEnd\", { task: task, start: e.start, end: e.end })) {\n                        that._updateTask(that.dataSource.getByUid(task.uid), updateInfo);\n                    }\n                })\n                .bind(\"percentResizeEnd\", function(e) {\n                    that._updateTask(that.dataSource.getByUid(e.task.uid), { percentComplete: e.percentComplete });\n                })\n                .bind(\"dependencyDragEnd\", function(e) {\n                    var dependency = that.dependencies._createNewModel({\n                        type: e.type,\n                        predecessorId: e.predecessor.id,\n                        successorId: e.successor.id\n                    });\n\n                    that._createDependency(dependency);\n                })\n                .bind(\"select\", function(e) {\n                    that.select(\"[data-uid='\" + e.uid + \"']\");\n                })\n                .bind(\"editTask\", function(e) {\n                    that.editTask(e.uid);\n                })\n                .bind(\"clear\", function(e) {\n                    that.clearSelection();\n                })\n                .bind(\"removeTask\", function(e) {\n                    that.removeTask(that.dataSource.getByUid(e.uid));\n                })\n                .bind(\"removeDependency\", function(e) {\n                    that.removeDependency(that.dependencies.getByUid(e.uid));\n                });\n        },\n\n        _dataSource: function() {\n            var options = this.options;\n            var dataSource = options.dataSource;\n\n            dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n            if (this.dataSource && this._refreshHandler) {\n                this.dataSource\n                    .unbind(\"change\", this._refreshHandler)\n                    .unbind(\"progress\", this._progressHandler)\n                    .unbind(\"error\", this._errorHandler);\n            } else {\n                this._refreshHandler = proxy(this.refresh, this);\n                this._progressHandler = proxy(this._requestStart, this);\n                this._errorHandler = proxy(this._error, this);\n            }\n\n            this.dataSource = kendo.data.GanttDataSource.create(dataSource)\n                .bind(\"change\", this._refreshHandler)\n                .bind(\"progress\", this._progressHandler)\n                .bind(\"error\", this._errorHandler);\n        },\n\n        _dependencies: function() {\n            var dependencies = this.options.dependencies || {};\n            var dataSource = isArray(dependencies) ? { data: dependencies } : dependencies;\n\n            if (this.dependencies && this._dependencyRefreshHandler) {\n                this.dependencies\n                    .unbind(\"change\", this._dependencyRefreshHandler)\n                    .unbind(\"error\", this._dependencyErrorHandler);\n            } else {\n                this._dependencyRefreshHandler = proxy(this.refreshDependencies, this);\n                this._dependencyErrorHandler = proxy(this._error, this);\n            }\n\n            this.dependencies = kendo.data.GanttDependencyDataSource.create(dataSource)\n                .bind(\"change\", this._dependencyRefreshHandler)\n                .bind(\"error\", this._dependencyErrorHandler);\n        },\n\n        _resources: function() {\n            var resources = this.options.resources;\n            var dataSource = resources.dataSource || {};\n\n            this.resources = {\n                field: \"resources\",\n                dataTextField: \"name\",\n                dataColorField: \"color\",\n                dataFormatField: \"format\"\n            };\n\n            extend(this.resources, resources);\n\n            this.resources.dataSource = kendo.data.DataSource.create(dataSource);\n        },\n\n        _assignments: function() {\n            var assignments = this.options.assignments;\n            var dataSource = assignments.dataSource || { };\n\n            if (this.assignments) {\n                this.assignments.dataSource\n                    .unbind(\"change\", this._assignmentsRefreshHandler);\n            } else {\n                this._assignmentsRefreshHandler = proxy(this.refresh, this);\n            }\n\n            this.assignments = {\n                dataTaskIdField: \"taskId\",\n                dataResourceIdField: \"resourceId\",\n                dataValueField: \"value\"\n            };\n\n            extend(this.assignments, assignments);\n\n            this.assignments.dataSource = kendo.data.DataSource.create(dataSource);\n\n            this.assignments.dataSource.\n                bind(\"change\", this._assignmentsRefreshHandler);\n        },\n\n        _createEditor: function(command) {\n            var that = this;\n\n            var editor = this._editor = new PopupEditor(this.wrapper, extend({}, this.options, {\n                target: this,\n                resources: {\n                    field: this.resources.field,\n                    editor: proxy(this._createResourceEditor, this)\n                },\n                createButton: proxy(this._createPopupButton, this)\n            }));\n\n            editor\n                .bind(\"cancel\", function(e) {\n                    var task = that.dataSource.getByUid(e.model.uid);\n\n                    if (that.trigger(\"cancel\", { container: e.container, task: task })) {\n                        e.preventDefault();\n                        return;\n                    }\n\n                    that.cancelTask();\n                })\n                .bind(\"edit\", function(e) {\n                    var task = that.dataSource.getByUid(e.model.uid);\n\n                    if (that.trigger(\"edit\", { container: e.container, task: task })) {\n                        e.preventDefault();\n                    }\n                })\n                .bind(\"save\", function(e) {\n                    var task = that.dataSource.getByUid(e.model.uid);\n\n                    that.saveTask(task, e.updateInfo);\n                })\n                .bind(\"remove\", function(e) {\n                    that.removeTask(e.model.uid);\n                });\n\n        },\n\n        _createResourceEditor: function(container, options) {\n            var that = this;\n            var model = options instanceof ObservableObject ? options : options.model;\n            var id = model.get(\"id\");\n            var messages = this.options.messages;\n            var resourcesField = that.resources.field;\n\n            var editor = this._resourceEditor = new ResourceEditor(container, {\n                resourcesField: resourcesField,\n                data: this._wrapResourceData(id),\n                model: model,\n                messages: extend({}, messages.editor),\n                buttons: [\n                    { name: \"update\", text: messages.save, className: Gantt.styles.primary },\n                    { name: \"cancel\", text: messages.cancel }\n                ],\n                createButton: proxy(this._createPopupButton, this),\n                save: function(e) {\n                    that._updateAssignments(e.model.get(\"id\"), e.model.get(resourcesField));\n                }\n            });\n\n            editor.open();\n        },\n\n        _createPopupButton: function(command) {\n            var commandName = command.name || command.text;\n            var options = { \n                className: Gantt.styles.popup.button + \" k-gantt-\" + (commandName || \"\").replace(/\\s/g, \"\"),\n                text: commandName,\n                attr: \"\"\n            };\n\n            if (!commandName && !(isPlainObject(command) && command.template))  {\n                throw new Error(\"Custom commands should have name specified\");\n            }\n\n            if (isPlainObject(command)) {\n                if (command.className) {\n                    command.className += \" \" + options.className;\n                }\n\n                options = extend(true, options, command);\n            }\n\n            return kendo.template(COMMAND_BUTTON_TEMPLATE)(options);\n        },\n\n        view: function(type) {\n            return this.timeline.view(type);\n        },\n\n        dataItem: function(value) {\n            if (!value) {\n                return null;\n            }\n\n            var list = this.list;\n            var element = list.content.find(value);\n\n            return list._modelFromElement(element);\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n\n            this.list._setDataSource(this.dataSource);\n\n            if (this.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        setDependenciesDataSource: function(dependencies) {\n            this.options.dependencies = dependencies;\n\n            this._dependencies();\n\n            if (this.options.autoBind) {\n                dependencies.fetch();\n            }\n        },\n\n        items: function() {\n            return this.wrapper.children(\".k-task\");\n        },\n\n        _updateAssignments: function(id, resources) {\n            var dataSource = this.assignments.dataSource;\n            var taskId = this.assignments.dataTaskIdField;\n            var resourceId = this.assignments.dataResourceIdField;\n            var resourceValue = this.assignments.dataValueField;\n            var hasMatch = false;\n            var assignments = new Query(dataSource.view())\n                .filter({\n                    field: taskId,\n                    operator: \"eq\",\n                    value: id\n                }).toArray();\n            var assignment;\n            var resource;\n            var value;\n\n            while (assignments.length) {\n                assignment = assignments[0];\n\n                for (var i = 0, length = resources.length; i < length; i++) {\n                    resource = resources[i];\n\n                    if (assignment.get(resourceId) === resource.get(\"id\")) {\n                        value = resources[i].get(\"value\");\n                        assignment.set(resourceValue, value);\n                        resources.splice(i, 1);\n                        hasMatch = true;\n                        break;\n                    }\n                }\n\n                if (!hasMatch) {\n                    dataSource.remove(assignment);\n                }\n\n                hasMatch = false;\n\n                assignments.shift();\n            }\n\n            for (var j = 0, newLength = resources.length; j < newLength; j++) {\n                resource = resources[j];\n                assignment = dataSource._createNewModel();\n                assignment[taskId] = id;\n                assignment[resourceId] = resource.get(\"id\");\n                assignment[resourceValue] = resource.get(\"value\");\n                dataSource.add(assignment);\n            }\n\n            dataSource.sync();\n        },\n\n        cancelTask: function() {\n            var editor = this._editor;\n            var container = editor.container;\n\n            if (container) {\n                editor.close();\n            }\n        },\n\n        editTask: function(uid) {\n            var task = typeof uid === \"string\" ? this.dataSource.getByUid(uid) : uid;\n\n            if (!task) {\n                return;\n            }\n\n            var taskCopy = this.dataSource._createNewModel(task.toJSON());\n            taskCopy.uid = task.uid;\n\n            this.cancelTask();\n\n            this._editTask(taskCopy);\n        },\n\n        _editTask: function(task) {\n            this._editor.editTask(task);\n        },\n\n        saveTask: function(task, updateInfo) {\n            var editor = this._editor;\n            var container = editor.container;\n            var editable = editor.editable;\n\n            if (container && editable && editable.end()) {\n                this._updateTask(task, updateInfo);\n            }\n        },\n\n        _updateTask: function(task, updateInfo) {\n            var resourcesField = this.resources.field;\n\n            if (!this.trigger(\"save\", { task: task, values: updateInfo })) {\n                this._preventRefresh = true;\n\n                this.dataSource.update(task, updateInfo);\n\n                if (updateInfo[resourcesField]) {\n                    this._updateAssignments(task.get(\"id\"), updateInfo[resourcesField]);\n                }\n\n                this._syncDataSource();\n            }\n        },\n\n        removeTask: function(uid) {\n            var that = this;\n            var task = typeof uid === \"string\" ? this.dataSource.getByUid(uid) : uid;\n\n            if (!task) {\n                return;\n            }\n\n            this._taskConfirm(function(cancel) {\n                if (!cancel) {\n                    that._removeTask(task);\n                }\n            }, task);\n        },\n\n        _createTask: function(task, index) {\n            if (!this.trigger(\"add\", {\n                task: task,\n                dependency: null\n            })) {\n                var dataSource = this.dataSource;\n\n                this._preventRefresh = true;\n\n                if (index === undefined) {\n                    dataSource.add(task);\n                } else {\n                    dataSource.insert(index, task);\n                }\n\n                this._scrollToUid = task.uid;\n\n                this._syncDataSource();\n            }\n        },\n\n        _createDependency: function(dependency) {\n            if (!this.trigger(\"add\", {\n                task: null,\n                dependency: dependency\n            })) {\n                this._preventDependencyRefresh = true;\n\n                this.dependencies.add(dependency);\n\n                this._preventDependencyRefresh = false;\n\n                this.dependencies.sync();\n            }\n        },\n\n        removeDependency: function(uid) {\n            var that = this;\n            var dependency = typeof uid === \"string\" ? this.dependencies.getByUid(uid) : uid;\n\n            if (!dependency) {\n                return;\n            }\n\n            this._dependencyConfirm(function(cancel) {\n                if (!cancel) {\n                    that._removeDependency(dependency);\n                }\n            }, dependency);\n        },\n\n        _removeTaskDependencies: function(task, dependencies) {\n            this._preventDependencyRefresh = true;\n\n            for (var i = 0, length = dependencies.length; i < length; i++) {\n                this.dependencies.remove(dependencies[i]);\n            }\n\n            this._preventDependencyRefresh = false;\n\n            this.dependencies.sync();\n        },\n\n        _removeResourceAssignments: function(task) {\n            var dataSource = this.assignments.dataSource;\n            var assignments = dataSource.view();\n            var filter = {\n                field: this.assignments.dataTaskIdField,\n                operator: \"eq\",\n                value: task.get(\"id\")\n            };\n\n            assignments = new Query(assignments).filter(filter).toArray();\n\n            this._preventRefresh = true;\n\n            for (var i = 0, length = assignments.length; i < length; i++) {\n                dataSource.remove(assignments[i]);\n            }\n\n            this._preventRefresh = false;\n\n            dataSource.sync();\n        },\n\n        _removeTask: function(task) {\n            var dependencies = this.dependencies.dependencies(task.id);\n\n            if (!this.trigger(\"remove\", {\n                task: task,\n                dependencies: dependencies\n            })) {\n                this._removeTaskDependencies(task, dependencies);\n                this._removeResourceAssignments(task);\n\n                this._preventRefresh = true;\n\n                if (this.dataSource.remove(task)) {\n                    this._syncDataSource();\n                }\n\n                this._preventRefresh = false;\n            }\n        },\n\n        _removeDependency: function(dependency) {\n            if (!this.trigger(\"remove\", {\n                task: null,\n                dependencies: [dependency]\n            })) {\n                if (this.dependencies.remove(dependency)) {\n                    this.dependencies.sync();\n                }\n            }\n        },\n\n        _taskConfirm: function(callback, task) {\n            this._confirm(callback, {\n                model: task,\n                text: TASK_DELETE_CONFIRM,\n                title: this.options.messages.deleteTaskWindowTitle\n            });\n        },\n\n        _dependencyConfirm: function(callback, dependency) {\n            this._confirm(callback, {\n                model: dependency,\n                text: DEPENDENCY_DELETE_CONFIRM,\n                title: this.options.messages.deleteDependencyWindowTitle\n            });\n        },\n\n        _confirm: function(callback, options) {\n            var editable = this.options.editable;\n            var messages;\n            var buttons;\n\n            if (editable === true || editable.confirmation !== false) {\n                messages = this.options.messages;\n                buttons = [\n                    { name: \"delete\", text: messages.destroy, className: Gantt.styles.primary, click: function() { callback(); } },\n                    { name: \"cancel\", text: messages.cancel, click: function() { callback(true); } }\n                ];\n\n                this.showDialog(extend(true, {}, options, { buttons: buttons }));\n            } else {\n                callback();\n            }\n        },\n\n        showDialog: function(options) {\n            this._editor.showDialog(options);\n        },\n\n        refresh: function(e) {\n            if (this._preventRefresh || this.list.editable) {\n                return;\n            }\n\n            this._progress(false);\n\n            var dataSource = this.dataSource;\n            var taskTree = dataSource.taskTree();\n            var scrollToUid = this._scrollToUid;\n            var current;\n            var cachedUid;\n            var cachedIndex = -1;\n\n            if (this.current) {\n                cachedUid = this.current.closest(\"tr\").attr(kendo.attr(\"uid\"));\n                cachedIndex = this.current.index();\n            }\n\n            if (this.trigger(\"dataBinding\")) {\n                return;\n            }\n\n            if (this.resources.dataSource.data().length !== 0) {\n                this._assignResources(taskTree);\n            }\n\n            if (this._editor) {\n                this._editor.close();\n            }\n\n            this.clearSelection();\n            this.list._render(taskTree);\n            this.timeline._render(taskTree);\n            this.timeline._renderDependencies(this.dependencies.view());\n\n            if (scrollToUid) {\n                this._scrollTo(scrollToUid);\n                this.select(selector(scrollToUid));\n            }\n\n            if ((scrollToUid || cachedUid) && cachedIndex >= 0) {\n                current = this.list.content\n                    .find(\"tr\" + selector((scrollToUid || cachedUid)) + \" > td:eq(\" + cachedIndex + \")\");\n\n                this._current(current);\n            }\n\n            this._scrollToUid = null;\n\n            this.trigger(\"dataBound\");\n        },\n\n        refreshDependencies: function(e) {\n            if (this._preventDependencyRefresh) {\n                return;\n            }\n\n            if (this.trigger(\"dataBinding\")) {\n                return;\n            }\n\n            this.timeline._renderDependencies(this.dependencies.view());\n\n            this.trigger(\"dataBound\");\n        },\n\n        _assignResources: function(taskTree) {\n            var that = this;\n            var resources = this.resources;\n            var assignments = this.assignments;\n            var groupAssigments = function() {\n                var data = assignments.dataSource.view();\n                var group = {\n                    field: assignments.dataTaskIdField\n                };\n\n                data = new Query(data).group(group).toArray();\n\n                return data;\n            };\n            var assigments = groupAssigments();\n            var applyTaskResource = function(task, action) {\n                var taskId = task.get(\"id\");\n\n                kendo.setter(resources.field)(task, new ObservableArray([]));\n\n                for (var i = 0, length = assigments.length; i < length; i++) {\n                    if (assigments[i].value === taskId) {\n                        action(task, assigments[i].items);\n                    }\n                }\n            };\n            var wrapTask = function(task, items) {\n                for (var j = 0, length = items.length; j < length; j++) {\n                    var item = items[j];\n                    var resource = resources.dataSource.get(item.get(assignments.dataResourceIdField));\n                    var resourceValue = item.get(assignments.dataValueField);\n                    var resourcedId = item.get(assignments.dataResourceIdField);\n                    var valueFormat = resource.get(resources.dataFormatField) || PERCENTAGE_FORMAT;\n                    var formatedValue = kendo.toString(resourceValue, valueFormat);\n\n                    task[resources.field].push(new ObservableObject({\n                        id: resourcedId,\n                        name: resource.get(resources.dataTextField),\n                        color: resource.get(resources.dataColorField),\n                        value: resourceValue,\n                        formatedValue: formatedValue\n                    }));\n                }\n            };\n\n            for (var i = 0, length = taskTree.length; i < length; i++) {\n                applyTaskResource(taskTree[i], wrapTask);\n            }\n        },\n\n        _wrapResourceData: function(id) {\n            var that = this;\n            var result = [];\n            var resource;\n            var resources = this.resources.dataSource.view();\n            var assignments = this.assignments.dataSource.view();\n            var taskAssignments = new Query(assignments).filter({\n                field: that.assignments.dataTaskIdField,\n                operator: \"eq\",\n                value: id\n            }).toArray();\n            var valuePerResource = function(id) {\n                var resourceValue = null;\n\n                new Query(taskAssignments).filter({\n                    field: that.assignments.dataResourceIdField,\n                    operator: \"eq\",\n                    value: id\n                }).select(function(assignment) {\n                    resourceValue += assignment.get(that.assignments.dataValueField);\n                });\n\n                return resourceValue;\n            };\n\n            for (var i = 0, length = resources.length; i < length; i++) {\n                resource = resources[i];\n                result.push({\n                    id: resource.get(\"id\"),\n                    name: resource.get(that.resources.dataTextField),\n                    format: resource.get(that.resources.dataFormatField) || PERCENTAGE_FORMAT,\n                    value: valuePerResource(resource.id)\n                });\n            }\n\n            return result;\n        },\n\n        _syncDataSource: function() {\n            this._preventRefresh = false;\n            this._requestStart();\n            this.dataSource.sync();\n        },\n\n        _requestStart: function() {\n            this._progress(true);\n        },\n\n        _error: function() {\n            this._progress(false);\n        },\n\n        _progress: function(toggle) {\n            kendo.ui.progress(this.element, toggle);\n        },\n\n        _resizable: function() {\n            var wrapper = this.wrapper;\n            var ganttStyles = Gantt.styles;\n            var contentSelector = DOT + ganttStyles.gridContent;\n            var treeListWrapper = wrapper.find(DOT + ganttStyles.list);\n            var timelineWrapper = wrapper.find(DOT + ganttStyles.timeline);\n            var treeListWidth;\n            var timelineWidth;\n            var timelineScroll;\n\n            this._resizeDraggable = wrapper\n                .find(DOT + ganttStyles.splitBar)\n                .height(treeListWrapper.height())\n                .hover(function (e) {\n                    $(this).addClass(ganttStyles.splitBarHover);\n                }, function (e) {\n                    $(this).removeClass(ganttStyles.splitBarHover);\n                })\n                .end()\n                .kendoResizable({\n                    orientation: \"horizontal\",\n                    handle: DOT + ganttStyles.splitBar,\n                    \"start\": function (e) {\n                        treeListWidth = treeListWrapper.width();\n                        timelineWidth = timelineWrapper.width();\n                        timelineScroll = timelineWrapper.find(contentSelector).scrollLeft();\n                    },\n                    \"resize\": function(e) {\n                        var delta = e.x.initialDelta;\n\n                        if (treeListWidth + delta < 0 || timelineWidth - delta < 0) {\n                            return;\n                        }\n\n                        treeListWrapper.width(treeListWidth + delta);\n                        timelineWrapper.width(timelineWidth - delta);\n                        timelineWrapper.find(contentSelector).scrollLeft(timelineScroll + delta);\n                    }\n                }).data(\"kendoResizable\");\n        },\n\n        _scrollable: function() {\n            var ganttStyles = Gantt.styles;\n            var contentSelector = DOT + ganttStyles.gridContent;\n            var headerSelector = DOT + ganttStyles.gridHeaderWrap;\n            var timelineWrapper = this.timeline.element;\n            var treeListWrapper = this.list.element;\n\n            timelineWrapper.find(contentSelector).on(\"scroll\", function(e) {\n                timelineWrapper.find(headerSelector).scrollLeft(this.scrollLeft);\n                treeListWrapper.find(contentSelector).scrollTop(this.scrollTop);\n            });\n\n            treeListWrapper.find(contentSelector)\n                .on(\"scroll\", function(e) {\n                    treeListWrapper.find(headerSelector).scrollLeft(this.scrollLeft);\n                })\n                .on(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, function(e) {\n                    var content = timelineWrapper.find(contentSelector);\n                    var scrollTop = content.scrollTop();\n                    var delta = kendo.wheelDeltaY(e);\n\n                    if (delta) {\n                        e.preventDefault();\n                        //In Firefox DOMMouseScroll event cannot be canceled\n                        $(e.currentTarget).one(\"wheel\" + NS, false);\n\n                        content.scrollTop(scrollTop + (-delta));\n                    }\n                });\n        },\n\n        _navigatable: function() {\n            var that = this;\n            var navigatable = this.options.navigatable;\n            var editable = this.options.editable;\n            var headerTable = this.list.header.find(\"table\");\n            var contentTable = this.list.content.find(\"table\");\n            var ganttStyles = Gantt.styles;\n            var timelineContent = this.timeline.element.find(DOT + ganttStyles.gridContent);\n            var tables = headerTable.add(contentTable);\n            var attr = selector();\n            var cellIndex;\n            var expandState = {\n                collapse: false,\n                expand: true\n            };\n\n            var scroll = function(reverse) {\n                var width = that.timeline.view()._timeSlots()[0].offsetWidth;\n                timelineContent.scrollLeft(timelineContent.scrollLeft() + (reverse ? -width : width));\n            };\n            var moveVertical = function(method) {\n                var parent = that.current.parent(\"tr\" + selector());\n                var index = that.current.index();\n                var subling = parent[method]();\n\n                if (that.select().length !== 0) {\n                    that.clearSelection();\n                }\n\n                if (subling.length !== 0) {\n                    that._current(subling.children(\"td:eq(\" + index + \")\"));\n                    that._scrollTo(that.current);\n                } else {\n                    if (that.current.is(\"td\") && method == \"prev\") {\n                        focusTable(headerTable);\n                    } else if (that.current.is(\"th\") && method == \"next\") {\n                        focusTable(contentTable);\n                    }\n                }\n            };\n            var moveHorizontal = function(method) {\n                var subling = that.current[method]();\n\n                if (subling.length !== 0) {\n                    that._current(subling);\n                    cellIndex = that.current.index();\n                }\n            };\n            var toggleExpandedState = function(value) {\n                var model = that.dataItem(that.current);\n\n                if (model.summary && model.expanded !== value) {\n                    model.set(\"expanded\", value);\n                }\n            };\n            var deleteAction = function() {\n                if (!that.options.editable || that.list.editable) {\n                    return;\n                }\n\n                var selectedTask = that.select();\n                var uid = kendo.attr(\"uid\");\n\n                if (selectedTask.length) {\n                    that.removeTask(selectedTask.attr(uid));\n                }\n            };\n\n            $(this.wrapper)\n                .on(\"mousedown\" + NS, \"tr\" + attr + \", div\" + attr + \":not(\" + DOT + ganttStyles.line + \")\", function(e) {\n                    var currentTarget = $(e.currentTarget);\n                    var isInput = $(e.target).is(\":button,a,:input,a>.k-icon,textarea,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap\");\n                    var current;\n\n                    if (e.ctrlKey) {\n                        return;\n                    }\n\n                    if (navigatable) {\n                        if (currentTarget.is(\"tr\")) {\n                            current = $(e.target).closest(\"td\");\n                        } else {\n                            current = that.list\n                                .content.find(\"tr\" + selector(currentTarget.attr(kendo.attr(\"uid\"))) + \" > td:first\");\n                        }\n\n                        that._current(current);\n                    }\n\n                    if ((navigatable || editable) && !isInput) {\n                        setTimeout(function() {\n                            focusTable(that.list.content.find(\"table\"), true);\n                        }, 2);\n                    }\n                });\n\n            if (navigatable !== true) {\n                contentTable\n                    .on(\"keydown\" + NS, function(e) {\n                        if (e.keyCode == keys.DELETE) {\n                            deleteAction();\n                        }\n                    });\n\n                return;\n            }\n\n            tables\n                .on(\"focus\" + NS, function(e) {\n                    var selector = this === contentTable.get(0) ? \"td\" : \"th\";\n                    var table = $(this);\n                    var selection = that.select();\n                    var current = that.current || $((selection.length ? selection : this))\n                        .find(selector + \":eq(\" + (cellIndex || 0) + \")\");\n\n                    that._current(current);\n                })\n                .on(\"blur\" + NS, function() {\n                    that._current();\n\n                    if (this == headerTable) {\n                        $(this).attr(TABINDEX, -1);\n                    }\n                })\n                .on(\"keydown\" + NS, function(e) {\n                    var key = e.keyCode;\n                    var isCell;\n\n                    if (!that.current) {\n                        return;\n                    }\n\n                    isCell = that.current.is(\"td\");\n\n                    switch (key) {\n                        case keys.RIGHT:\n                            e.preventDefault();\n                            if (e.altKey) {\n                                scroll();\n                            } else if (e.ctrlKey) {\n                                toggleExpandedState(expandState.expand);\n                            } else {\n                                moveHorizontal(\"next\");\n                            }\n                            break;\n                        case keys.LEFT:\n                            e.preventDefault();\n                            if (e.altKey) {\n                                scroll(true);\n                            } else if (e.ctrlKey) {\n                                toggleExpandedState(expandState.collapse);\n                            } else {\n                                moveHorizontal(\"prev\");\n                            }\n                            break;\n                        case keys.UP:\n                            e.preventDefault();\n                            moveVertical(\"prev\");\n                            break;\n                        case keys.DOWN:\n                            e.preventDefault();\n                            moveVertical(\"next\");\n                            break;\n                        case keys.SPACEBAR:\n                            e.preventDefault();\n                            if (isCell) {\n                                that.select(that.current.closest(\"tr\"));\n                            }\n                            break;\n                        case keys.ENTER:\n                            e.preventDefault();\n                            if (isCell) {\n                                if (that.options.editable) {\n                                    that._cachedCurrent = that.current;\n                                    that.list._startEditHandler(that.current);\n                                    /* Stop the event propagation so that the list widget won't close its editor immediately */\n                                    e.stopPropagation();\n                                }\n                            } else {\n                                /* Sort */\n                                that.current\n                                    .children(\"a.k-link\")\n                                    .click();\n                            }\n                            break;\n                        case keys.ESC:\n                            e.stopPropagation();\n                            break;\n                        case keys.DELETE:\n                            if (isCell) {\n                                deleteAction();\n                            }\n                            break;\n                        default:\n                            if (key >= 49 && key <= 57) {\n                                that.view(that.timeline._viewByIndex(key - 49));\n                            }\n                            break;\n                    }\n                });\n        },\n\n        _current: function(element) {\n            var ganttStyles = Gantt.styles;\n            var activeElement;\n\n            if (this.current && this.current.length) {\n                this.current\n                    .removeClass(ganttStyles.focused)\n                    .removeAttr(\"id\");\n            }\n\n            if (element && element.length) {\n                this.current = element\n                    .addClass(ganttStyles.focused)\n                    .attr(\"id\", ACTIVE_CELL);\n\n                activeElement = $(kendo._activeElement());\n\n                if (activeElement.is(\"table\") && this.wrapper.find(activeElement).length > 0) {\n                    activeElement\n                        .removeAttr(ARIA_DESCENDANT)\n                        .attr(ARIA_DESCENDANT, ACTIVE_CELL);\n                }\n            } else {\n                this.current = null;\n            }\n        },\n\n        _dataBind: function() {\n            var that = this;\n\n            if (that.options.autoBind) {\n                this._preventRefresh = true;\n                this._preventDependencyRefresh = true;\n\n                var promises = $.map([\n                    this.dataSource,\n                    this.dependencies,\n                    this.resources.dataSource,\n                    this.assignments.dataSource\n                ],\n                function(dataSource) {\n                    return dataSource.fetch();\n                });\n\n                $.when.apply(null, promises)\n                    .done(function() {\n                        that._preventRefresh = false;\n                        that._preventDependencyRefresh = false;\n                        that.refresh();\n                    });\n            }\n        },\n\n        _resize: function() {\n            this._adjustDimensions();\n            this.timeline.view()._adjustHeight();\n            this.list._adjustHeight();\n        }\n    });\n    \n    if (kendo.PDFMixin) {\n        kendo.PDFMixin.extend(Gantt.prototype);\n    }\n\n    kendo.ui.plugin(Gantt);\n\n    extend(true, Gantt, { styles: ganttStyles });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var data = kendo.data;\n    var extend = $.extend;\n    var kendoDom = kendo.dom;\n    var kendoDomElement = kendoDom.element;\n    var kendoTextElement = kendoDom.text;\n    var kendoHtmlElement = kendoDom.html;\n    var ui = kendo.ui;\n    var DataBoundWidget = ui.DataBoundWidget;\n    var DataSource = data.DataSource;\n    var ObservableArray = data.ObservableArray;\n    var Query = data.Query;\n    var Model = data.Model;\n    var proxy = $.proxy;\n    var map = $.map;\n    var grep = $.grep;\n    var STRING = \"string\";\n    var CHANGE = \"change\";\n    var ERROR = \"error\";\n    var PROGRESS = \"progress\";\n    var DOT = \".\";\n    var NS = \".kendoTreeList\";\n    var CLICK = \"click\";\n    var MOUSEDOWN = \"mousedown\";\n    var EDIT = \"edit\";\n    var SAVE = \"save\";\n    var EXPAND = \"expand\";\n    var COLLAPSE = \"collapse\";\n    var REMOVE = \"remove\";\n    var DATABINDING = \"dataBinding\";\n    var DATABOUND = \"dataBound\";\n    var CANCEL = \"cancel\";\n    var FILTERMENUINIT = \"filterMenuInit\";\n\n    var classNames = {\n        wrapper: \"k-treelist k-grid k-widget\",\n        header: \"k-header\",\n        button: \"k-button\",\n        alt: \"k-alt\",\n        editCell: \"k-edit-cell\",\n        group: \"k-treelist-group\",\n        gridToolbar: \"k-grid-toolbar\",\n        gridHeader: \"k-grid-header\",\n        gridHeaderWrap: \"k-grid-header-wrap\",\n        gridContent: \"k-grid-content\",\n        gridContentWrap: \"k-grid-content\",\n        gridFilter: \"k-grid-filter\",\n        footerTemplate: \"k-footer-template\",\n        loading: \"k-loading\",\n        refresh: \"k-i-refresh\",\n        retry: \"k-request-retry\",\n        selected: \"k-state-selected\",\n        status: \"k-status\",\n        link: \"k-link\",\n        withIcon: \"k-with-icon\",\n        filterable: \"k-filterable\",\n        icon: \"k-icon\",\n        iconFilter: \"k-filter\",\n        iconCollapse: \"k-i-collapse\",\n        iconExpand: \"k-i-expand\",\n        iconHidden: \"k-i-none\",\n        iconPlaceHolder: \"k-icon k-i-none\",\n        input: \"k-input\",\n        dropPositions: \"k-insert-top k-insert-bottom k-add k-insert-middle\",\n        dropTop: \"k-insert-top\",\n        dropBottom: \"k-insert-bottom\",\n        dropAdd: \"k-add\",\n        dropMiddle: \"k-insert-middle\",\n        dropDenied: \"k-denied\",\n        dragStatus: \"k-drag-status\",\n        dragClue: \"k-drag-clue\",\n        dragClueText: \"k-clue-text\"\n    };\n\n    var defaultCommands = {\n        create: {\n            imageClass: \"k-add\",\n            className: \"k-grid-add\",\n            methodName: \"addRow\"\n        },\n        createchild: {\n            imageClass: \"k-add\",\n            className: \"k-grid-add\",\n            methodName: \"addRow\"\n        },\n        destroy: {\n            imageClass: \"k-delete\",\n            className: \"k-grid-delete\",\n            methodName: \"removeRow\"\n        },\n        edit: {\n            imageClass: \"k-edit\",\n            className: \"k-grid-edit\",\n            methodName: \"editRow\"\n        },\n        update: {\n            imageClass: \"k-update\",\n            className: \"k-primary k-grid-update\",\n            methodName: \"saveRow\"\n        },\n        canceledit: {\n            imageClass: \"k-cancel\",\n            className: \"k-grid-cancel\",\n            methodName: \"_cancelEdit\"\n        },\n        excel: {\n            imageClass: \"k-i-excel\",\n            className: \"k-grid-excel\",\n            methodName: \"saveAsExcel\"\n        },\n        pdf: {\n            imageClass: \"k-i-pdf\",\n            className: \"k-grid-pdf\",\n            methodName: \"saveAsPDF\"\n        }\n    };\n\n    var TreeListModel = Model.define({\n        id: \"id\",\n\n        fields: {\n            id: { type: \"number\" },\n            parentId: { type: \"number\", nullable: true }\n        },\n\n        init: function(value) {\n            Model.fn.init.call(this, value);\n\n            this._loaded = false;\n        },\n\n        loaded: function(value) {\n            if (value !== undefined) {\n                this._loaded = value;\n            } else {\n                return this._loaded;\n            }\n        },\n\n        shouldSerialize: function(field) {\n            return Model.fn.shouldSerialize.call(this, field) && field !== \"_loaded\" && field != \"_error\" && field != \"_edit\";\n        }\n    });\n\n    var TreeListDataSource = DataSource.extend({\n        init: function(options) {\n            DataSource.fn.init.call(this, extend(true, {}, {\n                schema: {\n                    modelBase: TreeListModel,\n                    model: TreeListModel\n                }\n            }, options));\n        },\n\n        _readData: function(newData) {\n            var result = [];\n            var data = this.data();\n            var i, length;\n\n            for (i = 0, length = data.length; i < length; i++) {\n                result.push(data[i]);\n            }\n\n            return result.concat(DataSource.fn._readData.call(this, newData));\n        },\n\n        _readAggregates: function(data) {\n            var result = extend(this._aggregateResult, this.reader.aggregates(data));\n            if (\"\" in result) {\n                result[this._defaultParentId()] = result[\"\"];\n                delete result[\"\"];\n            }\n\n            return result;\n        },\n\n        remove: function(root) {\n            var items = this._subtree(this._childrenMap(this.data()), root.id);\n\n            this._removeItems(items);\n\n            DataSource.fn.remove.call(this, root);\n        },\n\n        _filterCallback: function(query) {\n            var result = [];\n            var data = query.toArray();\n            var map = {};\n            var i, parent, item;\n\n            for (i = 0; i < data.length; i++) {\n                item = data[i];\n\n                while (item) {\n                    map[item.id] = true;\n\n                    if (!map[item.parentId]) {\n                        map[item.parentId] = true;\n                        item = this.parentNode(item);\n\n                        if (item) {\n                            result.push(item);\n                        }\n                    } else {\n                        break;\n                    }\n                }\n            }\n\n            return new Query(data.concat(result));\n        },\n\n        _subtree: function(map, id) {\n            var result = map[id] || [];\n            var defaultParentId = this._defaultParentId();\n\n            for (var i = 0, len = result.length; i < len; i++) {\n                if (result[i].id !== defaultParentId) {\n                    result = result.concat(this._subtree(map, result[i].id));\n                }\n            }\n\n            return result;\n        },\n\n        // builds hash id -> children\n        _childrenMap: function(data) {\n            var map = {};\n            var i, item, id, parentId;\n\n            data = this._observeView(data);\n\n            for (i = 0; i < data.length; i++) {\n                item = data[i];\n                id = item.id;\n                parentId = item.parentId;\n\n                map[id] = map[id] || [];\n                map[parentId] = map[parentId] || [];\n                map[parentId].push(item);\n            }\n\n            return map;\n        },\n\n        _calculateAggregates: function (data, options) {\n            options = options || {};\n\n            var result = {};\n            var item, subtree, i, id, parentId;\n            var filter = options.filter;\n\n            if (filter) {\n                data = Query.process(data, {\n                    filter: filter,\n                    filterCallback: proxy(this._filterCallback, this)\n                }).data;\n            }\n\n            var map = this._childrenMap(data);\n\n            // calculate aggregates for each subtree\n            result[this._defaultParentId()] = new Query(this._subtree(map, this._defaultParentId())).aggregate(options.aggregate);\n\n            for (i = 0; i < data.length; i++) {\n                item = data[i];\n                subtree = this._subtree(map, item.id);\n\n                result[item.id] = new Query(subtree).aggregate(options.aggregate);\n            }\n\n            return result;\n        },\n\n        _queryProcess: function(data, options) {\n            options = options || {};\n\n            options.filterCallback = proxy(this._filterCallback, this);\n\n            var defaultParentId = this._defaultParentId();\n            var result = Query.process(data, options);\n            var map = this._childrenMap(result.data);\n            var hasChildren, i, item, children;\n\n            data = map[defaultParentId] || [];\n\n            for (i = 0; i < data.length; i++) {\n                item = data[i];\n\n                if (item.id === defaultParentId) {\n                    continue;\n                }\n\n                children = map[item.id];\n                hasChildren = !!(children && children.length);\n\n                if (!item.loaded()) {\n                    item.loaded(hasChildren);\n                }\n\n                if (item.loaded() || item.hasChildren !== true) {\n                    item.hasChildren = hasChildren;\n                }\n\n                if (hasChildren) {\n                    data.splice.apply(data, [i+1, 0].concat(children));\n                }\n            }\n\n            result.data = data;\n\n            return result;\n        },\n\n        _queueRequest: function(options, callback) {\n            // allow simultaneous requests (loading multiple items at the same time)\n            callback.call(this);\n        },\n\n        _modelLoaded: function(id) {\n            var model = this.get(id);\n            model.loaded(true);\n            model.hasChildren = this.childNodes(model).length > 0;\n        },\n\n        _modelError: function(id, e) {\n            this.get(id)._error = e;\n        },\n\n        read: function(data) {\n            if (!data || !data.id) {\n                this._data = this._observe([]);\n            }\n\n            return DataSource.fn.read.call(this, data);\n        },\n\n        load: function(model) {\n            var method = \"_query\";\n            var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n\n            if (model.loaded()) {\n                if (remote) {\n                    return $.Deferred().resolve().promise();\n                }\n            } else if (model.hasChildren) {\n                method = \"read\";\n            }\n\n            return this[method]({ id: model.id }).then(\n                proxy(this._modelLoaded, this, model.id),\n                proxy(this._modelError, this, model.id)\n            );\n        },\n\n        _byParentId: function(id, defaultId) {\n            var result = [];\n            var view = this.view();\n            var current;\n\n            if (id === defaultId) {\n                return [];\n            }\n\n            for (var i = 0; i < view.length; i++) {\n                current = view.at(i);\n\n                if (current.parentId == id) {\n                    result.push(current);\n                }\n            }\n\n            return result;\n        },\n\n        _defaultParentId: function() {\n            return this.reader.model.fn.defaults.parentId;\n        },\n\n        childNodes: function(model) {\n            return this._byParentId(model.id, this._defaultParentId());\n        },\n\n        rootNodes: function() {\n            return this._byParentId(this._defaultParentId());\n        },\n\n        parentNode: function(model) {\n            return this.get(model.parentId);\n        },\n\n        level: function(model) {\n            var result = -1;\n\n            if (!(model instanceof TreeListModel)) {\n                model = this.get(model);\n            }\n\n            do {\n                model = this.parentNode(model);\n                result++;\n            } while (model);\n\n            return result;\n        },\n\n        filter: function(value) {\n            var baseFilter = DataSource.fn.filter;\n\n            if (value === undefined) {\n                return baseFilter.call(this, value);\n            }\n\n            baseFilter.call(this, value);\n        }\n    });\n\n    TreeListDataSource.create = function(options) {\n        if ($.isArray(options)) {\n            options = { data: options };\n        } else if (options instanceof ObservableArray) {\n            options = { data: options.toJSON() };\n        }\n\n        return options instanceof TreeListDataSource ? options : new TreeListDataSource(options);\n    };\n\n    function createPlaceholders(options) {\n        var spans = [];\n        var className = options.className;\n\n        for (var i = 0, level = options.level; i < level; i++) {\n            spans.push(kendoDomElement(\"span\", { className: className }));\n        }\n\n        return spans;\n    }\n\n    var Editor = kendo.Observable.extend({\n        init: function(element, options) {\n            kendo.Observable.fn.init.call(this);\n\n            options = this.options = extend(true, {}, this.options, options);\n\n            this.element = element;\n\n            this.bind(this.events, options);\n\n            this.model = this.options.model;\n\n            this.fields = this._fields(this.options.columns);\n\n            this._initContainer();\n\n            this.createEditable();\n        },\n\n        events: [],\n\n        _initContainer: function() {\n            this.wrapper = this.element;\n        },\n\n        createEditable: function() {\n            var options = this.options;\n\n            this.editable = new ui.Editable(this.wrapper, {\n                fields: this.fields,\n                target: options.target,\n                clearContainer: options.clearContainer,\n                model: this.model\n            });\n        },\n\n        _isEditable: function(column) {\n            return column.field && this.model.editable(column.field);\n        },\n\n        _fields: function(columns) {\n            var fields = [];\n            var idx, length, column;\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                column = columns[idx];\n\n                if (this._isEditable(column)) {\n                    fields.push({\n                        field: column.field,\n                        format: column.format,\n                        editor: column.editor\n                    });\n                }\n            }\n\n            return fields;\n        },\n\n        end: function() {\n            return this.editable.end();\n        },\n\n        close: function() {\n            this.destroy();\n        },\n\n        destroy: function() {\n            this.editable.destroy();\n            this.editable.element\n                .find(\"[\" + kendo.attr(\"container-for\") + \"]\")\n                .empty()\n                .end()\n                .removeAttr(kendo.attr(\"role\"));\n\n            this.model = this.wrapper = this.element = this.columns = this.editable = null;\n        }\n    });\n\n    var PopupEditor = Editor.extend({\n        init: function(element, options) {\n            Editor.fn.init.call(this, element, options);\n\n            this._attachHandlers();\n\n            this.open();\n        },\n\n        events: [\n            CANCEL,\n            SAVE\n        ],\n\n        options: {\n            window: {\n                modal: true,\n                resizable: false,\n                draggable: true,\n                title: \"Edit\",\n                visible: false\n            }\n        },\n\n        _initContainer: function() {\n            var options = this.options;\n            var formContent = [];\n\n            this.wrapper = $('<div class=\"k-popup-edit-form\"/>')\n                .attr(kendo.attr(\"uid\"), this.model.uid)\n                .append('<div class=\"k-edit-form-container\"/>');\n\n            if (options.template) {\n                this._appendTemplate(formContent);\n                this.fields = [];\n            } else {\n                this._appendFields(formContent);\n            }\n            this._appendButtons(formContent);\n\n            new kendoDom.Tree(this.wrapper.children()[0]).render(formContent);\n\n            this.wrapper.appendTo(options.appendTo);\n\n            this.window = new ui.Window(this.wrapper, options.window);\n        },\n\n        _appendTemplate: function(form) {\n            var template = this.options.template;\n\n            if (typeof template === STRING) {\n                template = window.unescape(template);\n            }\n\n            template = kendo.template(template)(this.model);\n\n            form.push(kendoHtmlElement(template));\n        },\n\n        _appendFields: function(form) {\n            var idx, length, column;\n            var model = this.model;\n            var columns = this.options.columns;\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                column = columns[idx];\n\n                if (column.command) {\n                    continue;\n                }\n\n                form.push(kendoHtmlElement('<div class=\"k-edit-label\"><label for=\"' + column.field + '\">' + (column.title || column.field || \"\") + '</label></div>'));\n\n                if (this._isEditable(column)) {\n                    form.push(kendoHtmlElement('<div ' + kendo.attr(\"container-for\") + '=\"' + column.field +\n                                '\" class=\"k-edit-field\"></div>'));\n                } else {\n                    form.push(kendoDomElement(\"div\", {\n                            \"class\": \"k-edit-field\"\n                        },\n                        [ this.options.fieldRenderer(column, this.model) ]));\n                }\n            }\n        },\n\n        _appendButtons: function(form) {\n            form.push(kendoDomElement(\"div\", {\n                \"class\": \"k-edit-buttons k-state-default\"\n            }, this.options.commandRenderer()));\n        },\n\n        _attachHandlers: function() {\n            var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n            this.wrapper.on(CLICK + NS, \".k-grid-cancel\", this._cancelProxy);\n\n            this._saveProxy = proxy(this._save, this);\n            this.wrapper.on(CLICK + NS, \".k-grid-update\", this._saveProxy);\n\n            this.window.bind(\"close\", function(e) {\n                if (e.userTriggered) {\n                    closeHandler(e);\n                }\n            });\n        },\n\n        _dettachHandlers: function() {\n            this._cancelProxy = null;\n            this._saveProxy = null;\n            this.wrapper.off(NS);\n        },\n\n        _cancel: function(e) {\n            this.trigger(CANCEL, e);\n        },\n\n        _save: function(e) {\n            this.trigger(SAVE);\n        },\n\n        open: function() {\n            this.window.center().open();\n        },\n\n        close: function() {\n            this.window.bind(\"deactivate\", proxy(this.destroy, this)).close();\n        },\n\n        destroy: function() {\n            this.window.destroy();\n            this.window = null;\n            this._dettachHandlers();\n\n            Editor.fn.destroy.call(this);\n        }\n    });\n\n    var TreeList = DataBoundWidget.extend({\n        init: function(element, options) {\n            DataBoundWidget.fn.init.call(this, element, options);\n\n            this._dataSource(this.options.dataSource);\n\n            this._columns();\n            this._layout();\n            this._sortable();\n            this._filterable();\n            this._selectable();\n            this._attachEvents();\n            this._toolbar();\n            this._scrollable();\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n\n            this._adjustHeight();\n\n            kendo.notify(this);\n        },\n\n        _scrollable: function() {\n            if (this.options.scrollable) {\n                var scrollables = this.header.closest(\".k-grid-header-wrap\");\n                this.content.closest(\".k-grid-content\").bind(\"scroll\" + NS, function() {\n                    scrollables.scrollLeft(this.scrollLeft);\n                });\n\n\n                var touchScroller = kendo.touchScroller(this.content.closest(\"div\"));\n\n                if (touchScroller && touchScroller.movable) {\n                    this._touchScroller = touchScroller;\n                }\n            }\n        },\n\n        _progress: function() {\n            var messages = this.options.messages;\n\n            if (!this.content.find(\"tr\").length) {\n                this._showStatus(\n                    kendo.template(\n                        \"<span class='#= className #' /> #: messages.loading #\"\n                    )({\n                        className: classNames.icon + \" \" + classNames.loading,\n                        messages: messages\n                    })\n                );\n            }\n        },\n\n        _error: function(e) {\n            if (!this.dataSource.rootNodes().length) {\n                this._render({ error: e });\n            }\n        },\n\n        refresh: function(e) {\n            e = e || {};\n\n            if (e.action == \"itemchange\" && this.editor) {\n                return;\n            }\n\n            if (this.trigger(DATABINDING)) {\n                return;\n            }\n\n            this._cancelEditor();\n\n            this._render();\n\n            this._adjustHeight();\n\n            this.trigger(DATABOUND);\n        },\n\n        _angularFooters: function(command) {\n            var i, footer, aggregates;\n            var allAggregates = this.dataSource.aggregates();\n            var footerRows = this.content.find(\"tr\").filter(function() {\n                return $(this).hasClass(classNames.footerTemplate);\n            });\n\n            for (i = 0; i < footerRows.length; i++) {\n                footer = footerRows.eq(i);\n                aggregates = allAggregates[footer.attr(\"data-parentId\")];\n\n                this._angularFooter(command, footer.find(\"td\").get(), aggregates);\n            }\n        },\n\n        _angularFooter: function(command, cells, aggregates) {\n            var columns = this.columns;\n            this.angular(command, function() {\n                return {\n                    elements: cells,\n                    data: map(columns, function(col, i){\n                        return {\n                            column: col,\n                            aggregate: aggregates && aggregates[col.field]\n                        };\n                    })\n                };\n            });\n        },\n\n        items: function() {\n            return this.content.find(\"tr\").filter(function() {\n                return !$(this).hasClass(classNames.footerTemplate);\n            });\n        },\n\n        _showStatus: function(message) {\n            var status = this.element.find(\".k-status\");\n\n            if (!status.length) {\n                status = $(\"<div class='k-status' />\").appendTo(this.element);\n            }\n\n            this._contentTree.render([]);\n\n            this.content.closest(DOT + classNames.gridContent).hide();\n\n            status.html(message);\n        },\n\n        _hideStatus: function() {\n            this.element.find(\".k-status\").remove();\n            this.content.closest(DOT + classNames.gridContent).show();\n        },\n\n        _adjustHeight: function() {\n            var element = this.element;\n            var contentWrap = element.find(DOT + classNames.gridContentWrap);\n            var header = element.find(DOT + classNames.gridHeader);\n            var toolbar = element.find(DOT + classNames.gridToolbar);\n\n            element.height(this.options.height);\n\n            // identical code found in grid & scheduler :(\n            var isHeightSet = function(el) {\n                var initialHeight, newHeight;\n                if (el[0].style.height) {\n                    return true;\n                } else {\n                    initialHeight = el.height();\n                }\n\n                el.height(\"auto\");\n                newHeight = el.height();\n                el.height(\"\");\n\n                return (initialHeight != newHeight);\n            };\n\n            if (isHeightSet(element)) {\n                contentWrap.height(element.height() - header.outerHeight() - toolbar.outerHeight());\n            }\n        },\n\n        destroy: function() {\n            DataBoundWidget.fn.destroy.call(this);\n\n            var dataSource = this.dataSource;\n\n            dataSource.unbind(CHANGE, this._refreshHandler);\n            dataSource.unbind(ERROR, this._errorHandler);\n            dataSource.unbind(PROGRESS, this._progressHandler);\n\n            this._destroyEditor();\n\n            this.element.off(NS);\n\n            if (this._touchScroller) {\n                this._touchScroller.destroy();\n            }\n\n            this._refreshHandler = this._errorHandler = this._progressHandler = null;\n            this.header = this.content = this.element = null;\n            this._statusTree = this._headerTree = this._contentTree = null;\n        },\n\n        options: {\n            name: \"TreeList\",\n            columns: [],\n            autoBind: true,\n            scrollable: true,\n            selectable: false,\n            sortable: false,\n            toolbar: null,\n            height: null,\n            messages: {\n                noRows: \"No records to display\",\n                loading: \"Loading...\",\n                requestFailed: \"Request failed.\",\n                retry: \"Retry\",\n                commands: {\n                    edit: \"Edit\",\n                    update: \"Update\",\n                    canceledit: \"Cancel\",\n                    create: \"Add new record\",\n                    createchild: \"Add child record\",\n                    destroy: \"Delete\",\n                    excel: \"Export to Excel\",\n                    pdf: \"Export to PDF\"\n                }\n            },\n            excel: {\n                hierarchy: true\n            },\n            filterable: false,\n            editable: false\n        },\n\n        events: [\n            CHANGE,\n            EDIT,\n            SAVE,\n            REMOVE,\n            EXPAND,\n            COLLAPSE,\n            DATABINDING,\n            DATABOUND,\n            CANCEL,\n            FILTERMENUINIT\n        ],\n\n        _toggle: function(model, expand) {\n            var loaded = model.loaded();\n\n            // reset error state\n            if (model._error) {\n                model.expanded = false;\n                model._error = undefined;\n            }\n\n            // do not load items that are currently loading\n            if (!loaded && model.expanded) {\n                return;\n            }\n\n            // toggle expanded state\n            if (typeof expand == \"undefined\") {\n                expand = !model.expanded;\n            }\n\n            model.expanded = expand;\n\n            if (!loaded) {\n                this.dataSource.load(model)\n                    .always(proxy(function() {\n                        this._render();\n                    }, this));\n            }\n\n            this._render();\n        },\n\n        expand: function(row) {\n            this._toggle(this.dataItem(row), true);\n        },\n\n        collapse: function(row) {\n            this._toggle(this.dataItem(row), false);\n        },\n\n        _toggleChildren: function(e) {\n            var icon = $(e.currentTarget);\n            var model = this.dataItem(icon);\n            var event = !model.expanded ? EXPAND : COLLAPSE;\n\n            if (!this.trigger(event, { model: model })) {\n                this._toggle(model);\n            }\n\n            e.preventDefault();\n        },\n\n        _attachEvents: function() {\n            var icons = DOT + classNames.iconCollapse +\n                \", .\" + classNames.iconExpand +\n                \", .\" + classNames.refresh;\n            var retryButton = DOT + classNames.retry;\n            var dataSource = this.dataSource;\n\n            this.element\n                .on(MOUSEDOWN+ NS, icons, proxy(this._toggleChildren, this))\n                .on(CLICK + NS, retryButton, proxy(dataSource.fetch, dataSource))\n                .on(CLICK + NS, \".k-button[data-command]\", proxy(this._commandClick, this));\n        },\n\n        _commandByName: function(name) {\n            var columns = this.columns;\n            var i, j, commands;\n\n            name = name.toLowerCase();\n\n            if (defaultCommands[name]) {\n                return defaultCommands[name];\n            }\n\n            // command not found in defaultCommands, must be custom\n            for (i = 0; i < columns.length; i++) {\n                commands = columns[i].command;\n                if (commands) {\n                    for (j = 0; j < commands.length; j++) {\n                        if (commands[j].name.toLowerCase() == name) {\n                            return commands[j];\n                        }\n                    }\n                }\n            }\n        },\n\n        _commandClick: function(e) {\n            var button = $(e.currentTarget);\n            var commandName = button.attr(\"data-command\");\n            var command = this._commandByName(commandName);\n            var row = button.closest(\"tr\");\n\n            row = row.length ? row : undefined;\n\n            if (command) {\n                if (command.methodName) {\n                    this[command.methodName](row);\n                } else if (command.click) {\n                    command.click.call(this, e);\n                }\n            }\n        },\n\n        _columns: function() {\n            var columns = this.options.columns || [];\n\n            this.columns = map(columns, function(column) {\n                column = (typeof column === \"string\") ? { field: column } : column;\n\n                return extend({ encoded: true }, column);\n            });\n\n            var expandableColumns = grep(this.columns, function(c) {\n                return c.expandable;\n            });\n\n            if (this.columns.length && !expandableColumns.length) {\n                this.columns[0].expandable = true;\n            }\n\n            this._columnTemplates();\n            this._columnAttributes();\n        },\n\n        _columnTemplates: function() {\n            var idx, length, column;\n            var columns = this.columns;\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                column = columns[idx];\n                if (column.template) {\n                    column.template = kendo.template(column.template);\n                }\n\n                if (column.headerTemplate) {\n                    column.headerTemplate = kendo.template(column.headerTemplate);\n                }\n\n                if (column.footerTemplate) {\n                    column.footerTemplate = kendo.template(column.footerTemplate);\n                }\n            }\n        },\n\n        _columnAttributes: function() {\n            // column style attribute is string, kendo.dom expects object\n            var idx, length, column;\n            var columns = this.columns;\n\n            function convertStyle(attr) {\n                var properties, i, declaration;\n\n                if (attr && attr.style) {\n                    properties = attr.style.split(\";\");\n                    attr.style = {};\n\n                    for (i = 0; i < properties.length; i++) {\n                        declaration = properties[i].split(\":\");\n                        attr.style[declaration[0]] = declaration[1];\n                    }\n                }\n            }\n\n            for (idx = 0, length = columns.length; idx < length; idx++) {\n                convertStyle(columns[idx].attributes);\n                convertStyle(columns[idx].headerAttributes);\n            }\n        },\n\n        _layout: function () {\n            var element = this.element;\n            var colgroup = this._colgroup();\n            var layout = \"\";\n\n            this.wrapper = element.addClass(classNames.wrapper);\n\n            layout =\n                \"<div class='#= gridHeader #' style=\\\"padding-right: \" + kendo.support.scrollbar() + \"px;\\\">\" +\n                    \"<div class='#= gridHeaderWrap #'>\" +\n                        \"<table role='grid'>\" +\n                            colgroup +\n                            \"<thead role='rowgroup' />\" +\n                        \"</table>\" +\n                    \"</div>\" +\n                \"</div>\" +\n                \"<div class='#= gridContentWrap #'>\" +\n                    \"<table role='treegrid' tabindex='0'>\" +\n                        colgroup +\n                        \"<tbody />\" +\n                    \"</table>\" +\n                \"</div>\";\n\n            if (!this.options.scrollable) {\n                layout =\n                    \"<table role='treegrid' tabindex='0'>\" +\n                        colgroup +\n                        \"<thead class='#= gridHeader #' role='rowgroup' />\" +\n                        \"<tbody />\" +\n                    \"</table>\";\n            }\n\n            if (this.options.toolbar) {\n                layout = \"<div class='#= header # #= gridToolbar #' />\" + layout;\n            }\n\n            element.append(\n                kendo.template(layout)(classNames) +\n                \"<div class='k-status' />\"\n            );\n\n            this.toolbar = element.find(DOT + classNames.gridToolbar);\n\n            var header = this.header = element.find(DOT + classNames.gridHeader).find(\"thead\").addBack().filter(\"thead\");\n            this._headerTree = new kendoDom.Tree(this.header[0]);\n            this._headerTree.render([kendoDomElement(\"tr\", { \"role\": \"row\" }, this._ths())]);\n\n            var columns = this.columns;\n\n            this.angular(\"compile\", function() {\n                return {\n                    elements: header.find(\"th.k-header\").get(),\n                    data: map(columns, function(col) { return { column: col }; })\n                };\n            });\n\n            this.content = element.find(DOT + classNames.gridContentWrap).find(\"tbody\");\n\n            if (!this.content.length) {\n                this.content = element.find(\"tbody\");\n            }\n\n            this._contentTree = new kendoDom.Tree(this.content[0]);\n\n            this._statusTree = new kendoDom.Tree(this.element.children(\".k-status\")[0]);\n        },\n\n        _toolbar: function() {\n            var options = this.options.toolbar;\n            var toolbar = this.toolbar;\n\n            if (!options) {\n                return;\n            }\n\n            if ($.isArray(options)) {\n                var buttons = this._buildCommands(options);\n                new kendoDom.Tree(toolbar[0]).render(buttons);\n            } else {\n                toolbar.append(kendo.template(options)({}));\n            }\n\n            this.angular(\"compile\", function() {\n                return { elements: toolbar.get() };\n            });\n        },\n\n        _render: function(options) {\n            options = options || {};\n\n            var messages = this.options.messages;\n            var data = this.dataSource.rootNodes();\n            var aggregates = this.dataSource.aggregates();\n\n            this._absoluteIndex = 0;\n\n            this._angularItems(\"cleanup\");\n            this._angularFooters(\"cleanup\");\n\n            if (options.error) {\n                // root-level error message\n                this._showStatus(kendo.template(\n                    \"#: messages.requestFailed # \" +\n                    \"<button class='#= buttonClass #'>#: messages.retry #</button>\"\n                )({\n                    buttonClass: [ classNames.button, classNames.retry ].join(\" \"),\n                    messages: messages\n                }));\n            } else if (!data.length) {\n                // no rows message\n                this._showStatus(kendo.htmlEncode(messages.noRows));\n            } else {\n                // render rows\n                this._hideStatus();\n                this._contentTree.render(this._trs({\n                    aggregates: options.aggregates,\n                    data: data,\n                    visible: true,\n                    level: 0\n                }));\n            }\n\n            if (this._touchScroller) {\n                this._touchScroller.contentResized();\n            }\n\n            this._angularItems(\"compile\");\n            this._angularFooters(\"compile\");\n        },\n\n        _ths: function() {\n            var columns = this.columns;\n            var filterable = this.options.filterable;\n            var ths = [];\n            var column, title, children, cellClasses, attr, headerContent;\n\n            for (var i = 0, length = columns.length; i < length; i++) {\n                column = columns[i];\n                children = [];\n                cellClasses = [classNames.header];\n\n                if (column.headerTemplate) {\n                    title = column.headerTemplate({});\n                } else {\n                    title = column.title || column.field || \"\";\n                }\n\n                if (column.headerTemplate) {\n                    headerContent = kendoHtmlElement(title);\n                } else {\n                    headerContent = kendoTextElement(title);\n                }\n\n                if (column.sortable) {\n                    children.push(kendoDomElement(\"a\", { href: \"#\", className: classNames.link }, [\n                        headerContent\n                    ]));\n                } else {\n                    children.push(headerContent);\n                }\n\n                attr = {\n                    \"data-field\": column.field,\n                    \"data-title\": column.title,\n                    className: cellClasses.join(\" \"),\n                    \"role\": \"columnheader\"\n                };\n\n                if (column.headerAttributes) {\n                    extend(attr, column.headerAttributes);\n                }\n\n                ths.push(kendoDomElement(\"th\", attr, children));\n            }\n\n            return ths;\n        },\n\n        _colgroup: function() {\n            var columns = this.columns;\n            var cols = [];\n            var style, width;\n\n            for (var i = 0, length = columns.length; i < length; i++) {\n                cols.push(\"<col \");\n\n                width = columns[i].width;\n\n                if (width && parseInt(width, 10) !== 0) {\n                    cols.push(\"style='width:\");\n                    cols.push(typeof width === \"string\" ? width : width + \"px\");\n                    cols.push(\"'\");\n                }\n\n                cols.push(\"/>\");\n            }\n\n            return \"<colgroup>\" + cols.join(\"\") + \"</colgroup>\";\n        },\n\n        _trs: function(options) {\n            var model, attr, className, hasChildren, childNodes, i, length, parentId;\n            var rows = [];\n            var level = options.level;\n            var data = options.data;\n            var dataSource = this.dataSource;\n            var aggregates = dataSource.aggregates() || {};\n\n            for (i = 0, length = data.length; i < length; i++) {\n                className = [];\n\n                model = data[i];\n\n                childNodes = model.loaded() && dataSource.childNodes(model);\n                hasChildren = childNodes && childNodes.length;\n\n                attr = {\n                    \"data-uid\": model.uid,\n                    \"role\": \"row\"\n                };\n\n                if (hasChildren) {\n                    attr[\"aria-expanded\"] = !!model.expanded;\n                }\n\n                if (options.visible) {\n                    if (this._absoluteIndex % 2 !== 0) {\n                        className.push(classNames.alt);\n                    }\n\n                    this._absoluteIndex++;\n                } else {\n                    attr.style = { display: \"none\" };\n                }\n\n                if (hasChildren) {\n                    className.push(classNames.group);\n                }\n\n                if (model._edit) {\n                    className.push(\"k-grid-edit-row\");\n                }\n\n                attr.className = className.join(\" \");\n\n                rows.push(this._tds({\n                    model: model,\n                    attr: attr,\n                    level: level\n                }, proxy(this._td, this)));\n\n                if (hasChildren) {\n                    rows = rows.concat(this._trs({\n                        parentId: model.id,\n                        aggregates: aggregates,\n                        visible: options.visible && !!model.expanded,\n                        data: childNodes,\n                        level: level + 1\n                    }));\n                }\n            }\n\n            if (this._hasFooterTemplate()) {\n                parentId = options.parentId || null;\n\n                attr = {\n                    className: classNames.footerTemplate,\n                    \"data-parentId\": parentId\n                };\n\n                if (!options.visible) {\n                    attr.style = { display: \"none\" };\n                }\n\n                rows.push(this._tds({\n                    model: aggregates[parentId],\n                    attr: attr,\n                    level: level\n                }, this._footerTd));\n            }\n\n            return rows;\n        },\n\n        _footerTd: function(options) {\n            var content = [];\n            var column = options.column;\n            var template = options.column.footerTemplate || $.noop;\n            var aggregates = options.model[column.field] || {};\n            var attr = { \"role\": \"gridcell\" };\n\n            if (column.expandable) {\n                content = content.concat(createPlaceholders({\n                    level: options.level + 1,\n                    className: classNames.iconPlaceHolder\n                }));\n            }\n\n            if (column.attributes) {\n                extend(attr, column.attributes);\n            }\n\n            content.push(kendoHtmlElement(template(aggregates) || \"\"));\n\n            return kendoDomElement(\"td\", attr, content);\n        },\n\n        _hasFooterTemplate: function() {\n            return !!grep(this.columns, function(c) {\n                return c.footerTemplate;\n            }).length;\n        },\n\n        _tds: function(options, renderer) {\n            var children = [];\n            var columns = this.columns;\n            var column;\n\n            for (var i = 0, l = columns.length; i < l; i++) {\n                column = columns[i];\n\n                children.push(renderer({\n                    model: options.model,\n                    column: column,\n                    level: options.level\n                }));\n            }\n\n            return kendoDomElement(\"tr\", options.attr, children);\n        },\n\n        _td: function(options) {\n            var children = [];\n            var model = options.model;\n            var column = options.column;\n            var iconClass;\n            var attr = { \"role\": \"gridcell\" };\n\n            if (model._edit && column.field && model.editable(column.field)) {\n                attr[kendo.attr(\"container-for\")] = column.field;\n            } else {\n                if (column.expandable) {\n                    children = createPlaceholders({ level: options.level, className: classNames.iconPlaceHolder });\n                    iconClass = [classNames.icon];\n\n                    if (model.hasChildren) {\n                        iconClass.push(model.expanded ? classNames.iconCollapse : classNames.iconExpand);\n                    } else {\n                        iconClass.push(classNames.iconHidden);\n                    }\n\n                    if (model._error) {\n                        iconClass.push(classNames.refresh);\n                    } else if (!model.loaded() && model.expanded) {\n                        iconClass.push(classNames.loading);\n                    }\n\n                    children.push(kendoDomElement(\"span\", { className: iconClass.join(\" \") }));\n                }\n\n                if (column.attributes) {\n                    extend(attr, column.attributes);\n                }\n\n                if (column.command) {\n                    if (model._edit) {\n                        children = this._buildCommands([\"update\", \"canceledit\"]);\n                    } else {\n                        children = this._buildCommands(column.command);\n                    }\n                } else  {\n                    children.push(this._cellContent(column, model));\n                }\n            }\n\n            return kendoDomElement(\"td\", attr, children);\n        },\n\n        _cellContent: function(column, model) {\n            var value;\n\n            if (column.template) {\n                value = column.template(model);\n            } else if (column.field) {\n                value = model.get(column.field);\n                if (column.format) {\n                    value = kendo.format(column.format, value);\n                }\n            }\n\n            if (typeof value == \"undefined\") {\n                value = \"\";\n            }\n\n            if (column.template || !column.encoded) {\n                return kendoHtmlElement(value);\n            } else {\n                return kendoTextElement(value);\n            }\n        },\n\n        _buildCommands: function(commands) {\n            var i, result = [];\n\n            for (i = 0; i < commands.length; i++) {\n                result.push(this._button(commands[i]));\n            }\n\n            return result;\n        },\n\n        _button: function(command) {\n            var name = (command.name || command).toLowerCase();\n            var text = this.options.messages.commands[name];\n            var icon = [];\n\n            command = extend({}, defaultCommands[name], { text: text }, command);\n\n            if (command.imageClass) {\n                icon.push(kendoDomElement(\"span\", {\n                    className: [ \"k-icon\", command.imageClass ].join(\" \")\n                }));\n            }\n\n            return kendoDomElement(\n                \"button\", {\n                    \"data-command\": name,\n                    className: [ \"k-button\", \"k-button-icontext\", command.className ].join(\" \")\n                }, icon.concat([ kendoTextElement(command.text || command.name) ])\n            );\n        },\n\n        _sortable: function() {\n            var columns = this.columns;\n            var column;\n            var sortableInstance;\n            var cells = this.header.find(\"th\");\n            var cell, idx, length;\n            var fieldAttr = kendo.attr(\"field\");\n            var sortable = this.options.sortable;\n\n            if (!sortable) {\n                return;\n            }\n\n            for (idx = 0, length = cells.length; idx < length; idx++) {\n                column = columns[idx];\n\n                if (column.sortable !== false && !column.command && column.field) {\n                    cell = cells.eq(idx);\n\n                    sortableInstance = cell.data(\"kendoColumnSorter\");\n                    if (sortableInstance) {\n                        sortableInstance.destroy();\n                    }\n\n                    cell.attr(fieldAttr, column.field)\n                        .kendoColumnSorter(\n                            extend({}, sortable, column.sortable, {\n                                dataSource: this.dataSource\n                            })\n                        );\n                }\n            }\n        },\n\n        _filterable: function() {\n            var cells = this.header.find(\"th\");\n            var filterable = this.options.filterable;\n            var idx, length, column, cell, filterMenuInstance;\n\n            if (!filterable) {\n                return;\n            }\n\n            var filterInit = proxy(function(e) {\n                this.trigger(FILTERMENUINIT, { field: e.field, container: e.container });\n            }, this);\n\n            for (idx = 0, length = cells.length; idx < length; idx++) {\n                column = this.columns[idx];\n                cell = cells.eq(idx);\n\n                filterMenuInstance = cell.data(\"kendoFilterMenu\");\n                if (filterMenuInstance) {\n                    filterMenuInstance.destroy();\n                }\n\n                if (column.command || column.filterable === false) {\n                    continue;\n                }\n\n                cell.kendoFilterMenu(extend(true, {}, filterable, column.filterable, {\n                    dataSource: this.dataSource,\n                    init: filterInit\n                }));\n            }\n        },\n\n        _change: function() {\n            this.trigger(CHANGE);\n        },\n\n        _selectable: function() {\n            var selectable = this.options.selectable;\n            var filter;\n\n            if (selectable) {\n                selectable = kendo.ui.Selectable.parseOptions(selectable);\n\n                filter = \">tr:not(.k-footer-template)\";\n\n                if (selectable.cell) {\n                    filter = filter + \">td\";\n                }\n\n                this.selectable = new kendo.ui.Selectable(this.content, {\n                    filter: filter,\n                    aria: true,\n                    multiple: selectable.multiple,\n                    change: proxy(this._change, this)\n                });\n            }\n        },\n\n        select: function(value) {\n            var selectable = this.selectable;\n\n            if (typeof value !== \"undefined\" && !selectable.options.multiple) {\n                selectable.clear();\n\n                value = value.first();\n            }\n\n            return selectable.value(value);\n        },\n\n        clearSelection: function() {\n            var selected = this.select();\n\n            if (selected.length) {\n                this.selectable.clear();\n\n                this.trigger(CHANGE);\n            }\n        },\n\n        _dataSource: function(dataSource) {\n            var ds = this.dataSource;\n\n            if (ds) {\n                ds.unbind(CHANGE, this._refreshHandler);\n                ds.unbind(ERROR, this._errorHandler);\n                ds.unbind(PROGRESS, this._progressHandler);\n            }\n\n            this._refreshHandler = proxy(this.refresh, this);\n            this._errorHandler = proxy(this._error, this);\n            this._progressHandler = proxy(this._progress, this);\n\n            ds = this.dataSource = TreeListDataSource.create(dataSource);\n\n            ds.bind(CHANGE, this._refreshHandler);\n            ds.bind(ERROR, this._errorHandler);\n            ds.bind(PROGRESS, this._progressHandler);\n        },\n\n        setDataSource: function(dataSource) {\n            this._dataSource(dataSource);\n            this._sortable();\n            this._filterable();\n\n            this._contentTree.render([]);\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        dataItem: function(element) {\n            var row = $(element).closest(\"tr\");\n            var model = this.dataSource.getByUid(row.attr(kendo.attr(\"uid\")));\n\n            return model;\n        },\n\n        editRow: function(row) {\n            var model;\n\n            if (typeof row === STRING) {\n                row = this.content.find(row);\n            }\n\n            model = this.dataItem(row);\n\n            if (!model) {\n                return;\n            }\n\n            if (this._editMode() != \"popup\") {\n                model._edit = true;\n            }\n\n            this._cancelEditor();\n\n            this._render();\n\n            this._createEditor(model);\n\n            this.trigger(EDIT, {\n                container: this.editor.wrapper,\n                model: model\n            });\n        },\n\n        _cancelEdit: function(e) {\n            e = extend(e, {\n                container: this.editor.wrapper,\n                model: this.editor.model\n            });\n\n            if (this.trigger(CANCEL, e)) {\n                return;\n            }\n\n            this.cancelRow();\n        },\n\n        cancelRow: function() {\n            this._cancelEditor();\n\n            this._render();\n        },\n\n        saveRow: function() {\n            var editor = this.editor;\n            var args;\n\n            if (!editor) {\n                return ;\n            }\n\n            args = {\n                model: editor.model,\n                container: editor.wrapper\n            };\n\n            if (editor.end() && !this.trigger(SAVE, args)) {\n                this.dataSource.sync();\n            }\n        },\n\n        addRow: function(parent) {\n            var editor = this.editor;\n            var index = 0;\n            var model = {};\n\n            if (editor && !editor.end()) {\n                return;\n            }\n\n            if (parent) {\n                if (!(parent instanceof TreeListModel)) {\n                    parent = this.dataItem(parent);\n                }\n\n                model.parentId = parent.id;\n                index = this.dataSource.indexOf(parent) + 1;\n                parent.set(\"expanded\", true);\n\n                this.dataSource.load(parent).then(proxy(this._insertAt, this, model, index));\n\n                return;\n            }\n\n            this._insertAt(model, index);\n        },\n\n        _insertAt: function(model, index) {\n            model = this.dataSource.insert(index, model);\n\n            var row = this.content.find(\"[\" + kendo.attr(\"uid\") + \"=\" + model.uid + \"]\");\n\n            this.editRow(row);\n        },\n\n        removeRow: function(row) {\n            var model = this.dataItem(row);\n            var args = {\n                model: model,\n                row: row\n            };\n\n            if (model && !this.trigger(REMOVE, args)) {\n                this.dataSource.remove(model);\n\n                this.dataSource.sync();\n            }\n        },\n\n        _cancelEditor: function() {\n            var model;\n            var editor = this.editor;\n\n            if (editor) {\n                model = editor.model;\n\n                this._destroyEditor();\n\n                this.dataSource.cancelChanges(model);\n\n                model._edit = false;\n            }\n        },\n\n        _destroyEditor: function() {\n            if (!this.editor) {\n                return;\n            }\n\n            this.editor.close();\n            this.editor = null;\n        },\n\n        _createEditor: function(model) {\n            var row = this.content.find(\"[\" + kendo.attr(\"uid\") + \"=\" + model.uid + \"]\");\n\n            var mode = this._editMode();\n\n            var options = {\n                columns: this.columns,\n                model: model,\n                target: this,\n                clearContainer: false,\n                template: this.options.editable.template\n            };\n\n            if (mode == \"inline\") {\n                this.editor = new Editor(row, options);\n            } else {\n                extend(options, {\n                    window: this.options.editable.window,\n                    commandRenderer: proxy(function () {\n                        return this._buildCommands([\"update\", \"canceledit\"]);\n                    }, this),\n                    fieldRenderer: this._cellContent,\n                    save: proxy(this.saveRow, this),\n                    cancel: proxy(this._cancelEdit, this),\n                    appendTo: this.wrapper\n                });\n\n                this.editor = new PopupEditor(row, options);\n            }\n        },\n\n        _editMode: function() {\n            var mode = \"inline\",\n                editable = this.options.editable;\n\n            if (editable !== true) {\n                if (typeof editable == \"string\") {\n                    mode = editable;\n                } else {\n                    mode = editable.mode || mode;\n                }\n            }\n\n            return mode.toLowerCase();\n        }\n    });\n\n    if (kendo.ExcelMixin) {\n        kendo.ExcelMixin.extend(TreeList.prototype);\n    }\n\n    if (kendo.PDFMixin) {\n        kendo.PDFMixin.extend(TreeList.prototype);\n    }\n\n\n    extend(true, kendo.data, {\n        TreeListDataSource: TreeListDataSource,\n        TreeListModel: TreeListModel\n    });\n\n    extend(true, kendo.ui, {\n        TreeList: TreeList\n    });\n\n    ui.plugin(TreeList);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n/*jshint eqnull: true*/\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        Widget = ui.Widget,\n        ns = \".kendoPivotConfigurator\",\n        HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n        SETTING_CONTAINER_TEMPLATE = kendo.template('<p class=\"k-reset\"><span class=\"k-icon #=icon#\"></span>${name}</p>' +\n                '<div class=\"k-list-container k-reset\"/>');\n\n    function addKPI(data) {\n        var found;\n        var idx = 0;\n        var length = data.length;\n\n        for (; idx < length; idx++) {\n            if (data[idx].type == 2) {\n                found = true;\n                break;\n            }\n        }\n\n        if (found) {\n            data.splice(idx + 1, 0, {\n                caption: \"KPIs\",\n                defaultHierarchy: \"[KPIs]\",\n                name: \"KPIs\",\n                uniqueName: \"[KPIs]\"\n            });\n        }\n    }\n\n    function kpiNode(node) {\n        return {\n            name: node.uniqueName,\n            type: node.type\n        };\n    }\n\n    function normalizeKPIs(data) {\n        for (var idx = 0, length = data.length; idx < length; idx++) {\n            data[idx].uniqueName = data[idx].name;\n            data[idx].type = \"kpi\";\n        }\n\n        return data;\n    }\n\n    function settingTargetFromNode(node) {\n        var target = $(node).closest(\".k-pivot-setting\");\n\n        if (target.length) {\n            return target.data(\"kendoPivotSettingTarget\");\n        }\n        return null;\n    }\n\n    var PivotConfigurator = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n\n            this.element.addClass(\"k-widget k-fieldselector k-alt k-edit-form-container\");\n\n            this._dataSource();\n\n            this._layout();\n\n            this.refresh();\n\n            kendo.notify(this);\n        },\n\n        events: [],\n\n        options: {\n            name: \"PivotConfigurator\",\n            filterable: false,\n            sortable: false,\n            messages: {\n                measures: \"Drop Data Fields Here\",\n                columns: \"Drop Column Fields Here\",\n                rows: \"Drop Rows Fields Here\",\n                measuresLabel: \"Measures\",\n                columnsLabel: \"Columns\",\n                rowsLabel: \"Rows\",\n                fieldsLabel: \"Fields\"\n            }\n        },\n\n        _dataSource: function() {\n            if (this.dataSource && this._refreshHandler) {\n                this.dataSource.unbind(\"change\", this._refreshHandler);\n            } else {\n                this._refreshHandler = $.proxy(this.refresh, this);\n            }\n\n            this.dataSource = kendo.data.PivotDataSource.create(this.options.dataSource);\n            this.dataSource.bind(\"change\", this._refreshHandler);\n        },\n\n        setDataSource: function(dataSource) {\n            this.options.dataSource = dataSource;\n\n            this._dataSource();\n\n            if (this.measures) {\n                this.measures.setDataSource(dataSource);\n            }\n\n            if (this.rows) {\n                this.rows.setDataSource(dataSource);\n            }\n\n            if (this.columns) {\n                this.columns.setDataSource(dataSource);\n            }\n\n            this.refresh();\n        },\n\n        _treeViewDataSource: function() {\n            var that = this;\n\n            return kendo.data.HierarchicalDataSource.create({\n                schema: {\n                    model: {\n                        id: \"uniqueName\",\n                        hasChildren: function(item) {\n                            return !(\"hierarchyUniqueName\" in item) && !(\"aggregator\" in item);\n                        }\n                    }\n                },\n                transport: {\n                    read: function(options) {\n                        var promise;\n                        var node;\n                        var kpi;\n\n                        if ($.isEmptyObject(options.data)) {\n                            promise = that.dataSource.schemaDimensions();\n\n                            promise.done(function(data) {\n                                        if (!that.dataSource.cubeBuilder) {\n                                            addKPI(data);\n                                        }\n                                        options.success(data);\n                                    })\n                                    .fail(options.error);\n                        } else {\n                            //Hack to get the actual node as the HierarchicalDataSource does not support passing it\n                            node = that.treeView.dataSource.get(options.data.uniqueName);\n\n                            if (node.uniqueName === \"[KPIs]\") {\n                                kpi = true;\n                                promise = that.dataSource.schemaKPIs();\n                                promise.done(function (data) {\n                                            options.success(normalizeKPIs(data));\n                                       })\n                                       .fail(options.error);\n                            } else if (node.type == \"kpi\") {\n                                kpi = true;\n                                options.success(buildKPImeasures(node));\n                            }\n\n                            if (!kpi) {\n                                if (node.type == 2) { //measure\n                                    promise = that.dataSource.schemaMeasures();\n                                } else if (node.dimensionUniqueName) { // hierarchy\n                                    promise = that.dataSource.schemaLevels(options.data.uniqueName);\n                                } else { // dimension\n                                    promise = that.dataSource.schemaHierarchies(options.data.uniqueName);\n                                }\n\n                                promise.done(options.success)\n                                        .fail(options.error);\n                            }\n                        }\n                    }\n                }\n            });\n        },\n\n        _layout: function() {\n            this.form = $('<div class=\"k-columns k-state-default k-floatwrap\"/>').appendTo(this.element);\n            this._fields();\n            this._targets();\n        },\n\n        _fields: function() {\n            var container = $('<div class=\"k-state-default\"><p class=\"k-reset\"><span class=\"k-icon k-i-group\"></span>' + this.options.messages.fieldsLabel + '</p></div>').appendTo(this.form);\n\n            var that = this;\n            var template = '# if (item.type == 2 || item.uniqueName == \"[KPIs]\") { #' +\n                           '<span class=\"k-icon k-i-#= (item.type == 2 ? \\\"sum\\\" : \\\"kpi\\\") #\"></span>' +\n                           '# } else if (item.type && item.type !== \"kpi\") { #' +\n                           '<span class=\"k-icon k-i-dimension\"></span>' +\n                           '# } #' +\n                           '#: item.caption || item.name #';\n\n            this.treeView = $(\"<div/>\").appendTo(container)\n                .kendoTreeView({\n                    template: template,\n                    dataTextField: \"caption\",\n                    dragAndDrop: true,\n                    autoBind: false,\n                    dataSource: this._treeViewDataSource(),\n                    dragstart: function(e) {\n                        var dataItem = this.dataItem(e.sourceNode);\n                        if ((!dataItem.hasChildren && !dataItem.aggregator && !dataItem.measure) || (dataItem.type == 2) || dataItem.uniqueName === \"[KPIs]\") {\n                            e.preventDefault();\n                        }\n                    },\n                    drag: function(e) {\n                        var status = \"k-denied\";\n\n                        var setting = settingTargetFromNode(e.dropTarget);\n                        if (setting && setting.validate(this.dataItem(e.sourceNode))) {\n                            status = \"k-add\";\n                        }\n\n                        e.setStatusClass(status);\n                    },\n                    drop: function(e) {\n                        e.preventDefault();\n\n                        var setting = settingTargetFromNode(e.dropTarget);\n                        var node = this.dataItem(e.sourceNode);\n                        var idx, length, measures;\n                        var name;\n\n                        if (setting && setting.validate(node)) {\n                            name = node.defaultHierarchy || node.uniqueName;\n\n                            if (node.type === \"kpi\") {\n                                measures = buildKPImeasures(node);\n                                length = measures.length;\n                                name = [];\n\n                                for (idx = 0; idx < length; idx++) {\n                                    name.push(kpiNode(measures[idx]));\n                                }\n                            } else if (node.kpi) {\n                                name = [kpiNode(node)];\n                            }\n\n                            setting.add(name);\n                        }\n                    }\n                 })\n                .data(\"kendoTreeView\");\n        },\n\n        _createTarget: function(element, options) {\n            var template = '<li class=\"k-item k-header\" data-' + kendo.ns + 'name=\"${data.name}\">${data.name}';\n            var sortable = options.sortable;\n            var icons = \"\";\n\n            if (sortable) {\n                icons += '#if (data.sortIcon) {#';\n                icons += '<span class=\"k-icon ${data.sortIcon} k-setting-sort\"></span>';\n                icons += '#}#';\n            }\n\n            if (options.filterable || sortable) {\n                icons += '<span class=\"k-icon k-i-arrowhead-s k-setting-fieldmenu\"></span>';\n            }\n\n            icons += '<span class=\"k-icon k-si-close k-setting-delete\"></span>';\n            template += '<span class=\"k-field-actions\">' + icons + '</span></li>';\n\n            return new kendo.ui.PivotSettingTarget(element, $.extend({\n                dataSource: this.dataSource,\n                hint: function(element) {\n                    var wrapper = $('<div class=\"k-fieldselector\"><ul class=\"k-list k-reset\"></ul></div>');\n\n                    wrapper.find(\".k-list\").append(element.clone());\n\n                    return wrapper;\n                },\n                template: template,\n                emptyTemplate: '<li class=\"k-item k-empty\">${data}</li>'\n            }, options));\n        },\n\n        _targets: function() {\n            var container = $('<div class=\"k-state-default\"/>').appendTo(this.form);\n\n            var columnsContainer = $(SETTING_CONTAINER_TEMPLATE({ name: this.options.messages.columnsLabel, icon: \"k-i-vbars\" })).appendTo(container);\n            var columns = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(columnsContainer.last());\n\n            var rowsContainer = $(SETTING_CONTAINER_TEMPLATE({ name: this.options.messages.rowsLabel, icon: \"k-i-hbars\" })).appendTo(container);\n            var rows = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(rowsContainer.last());\n\n            var measuresContainer = $(SETTING_CONTAINER_TEMPLATE({ name: this.options.messages.measuresLabel, icon: \"k-i-sum\"})).appendTo(container);\n            var measures = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(measuresContainer.last());\n\n            var options = this.options;\n\n            this.columns = this._createTarget(columns, {\n                filterable: options.filterable,\n                sortable: options.sortable,\n                connectWith: rows,\n                messages: {\n                    empty: options.messages.columns,\n                    fieldMenu: options.messages.fieldMenu\n                }\n            });\n\n            this.rows = this._createTarget(rows, {\n                filterable: options.filterable,\n                setting: \"rows\",\n                connectWith: columns,\n                messages: {\n                    empty: this.options.messages.rows,\n                    fieldMenu: this.options.messages.fieldMenu\n                }\n            });\n\n            this.measures = this._createTarget(measures, {\n                setting: \"measures\",\n                messages: {\n                    empty: options.messages.measures\n                }\n            });\n\n            columns\n                .add(rows)\n                .add(measures)\n                .on(HOVEREVENTS, \".k-item:not(.k-empty)\", this._toggleHover);\n        },\n\n        _toggleHover: function(e) {\n            $(e.currentTarget).toggleClass(\"k-state-hover\", e.type === \"mouseenter\");\n        },\n\n        _resize: function() {\n            var element = this.element;\n            var height = this.options.height;\n            var border, fields;\n\n            if (!height) {\n                return;\n            }\n\n            if (element.is(\":visible\")) {\n                element.height(height);\n\n                fields = element.children(\".k-columns\")\n                                .children(\"div.k-state-default\");\n\n                border = (element.outerHeight() - element.innerHeight()) / 2;\n                height = height - (fields.outerHeight(true) - fields.height()) - border;\n\n                fields.height(height);\n            }\n        },\n\n        refresh: function() {\n            var dataSource = this.dataSource;\n\n            if (dataSource.cubeBuilder || this._cube !== dataSource.cube() || this._catalog !== dataSource.catalog()) {\n                this.treeView.dataSource.fetch();\n            }\n\n            this._catalog = this.dataSource.catalog();\n            this._cube = this.dataSource.cube();\n\n            this._resize();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n\n            this.dataSource.unbind(\"change\", this._refreshHandler);\n\n            this.form.find(\".k-list\").off(ns);\n\n            this.rows.destroy();\n            this.columns.destroy();\n            this.measures.destroy();\n            this.treeView.destroy();\n\n            this.element = null;\n            this._refreshHandler = null;\n        }\n    });\n\n    function kpiMeasure(name, measure, type) {\n        return {\n            hierarchyUniqueName: name,\n            uniqueName: measure,\n            caption: measure,\n            measure: measure,\n            name: measure,\n            type: type,\n            kpi: true\n        };\n    }\n\n    function buildKPImeasures(node) {\n        var name = node.name;\n        return [\n            kpiMeasure(name, node.value, \"value\"),\n            kpiMeasure(name, node.goal, \"goal\"),\n            kpiMeasure(name, node.status, \"status\"),\n            kpiMeasure(name, node.trend, \"trend\")\n        ];\n    }\n\n    ui.plugin(PivotConfigurator);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, angular, undefined) {\n    \"use strict\";\n\n    if (!angular) {\n        return;\n    }\n\n    /*jshint eqnull:true,loopfunc:true,-W052,-W028  */\n\n    var module = angular.module('kendo.directives', []),\n        $injector = angular.injector(['ng']),\n        $parse = $injector.get('$parse'),\n        $timeout = $injector.get('$timeout'),\n        $defaultCompile,\n        $log = $injector.get('$log');\n\n    function withoutTimeout(f) {\n        var save = $timeout;\n        try {\n            $timeout = function(f){ return f(); };\n            return f();\n        } finally {\n            $timeout = save;\n        }\n    }\n\n    var OPTIONS_NOW;\n\n    var createDataSource = (function() {\n        var types = {\n            TreeList    : 'TreeListDataSource',\n            TreeView    : 'HierarchicalDataSource',\n            Scheduler   : 'SchedulerDataSource',\n            PanelBar    : '$PLAIN',\n            Menu        : \"$PLAIN\",\n            ContextMenu : \"$PLAIN\"\n        };\n        var toDataSource = function(dataSource, type) {\n            if (type == '$PLAIN') {\n                return dataSource;\n            }\n            return kendo.data[type].create(dataSource);\n        };\n        return function(scope, element, role, source) {\n            var type = types[role] || 'DataSource';\n            var ds = toDataSource(scope.$eval(source), type);\n\n            // not recursive -- this triggers when the whole data source changed\n            scope.$watch(source, function(mew, old){\n                if (mew !== old) {\n                    var ds = toDataSource(mew, type);\n                    var widget = kendoWidgetInstance(element);\n                    if (widget && typeof widget.setDataSource == \"function\") {\n                        widget.setDataSource(ds);\n                    }\n                }\n            });\n            return ds;\n        };\n    }());\n\n    var ignoredAttributes = {\n        kDataSource : true,\n        kOptions    : true,\n        kRebind     : true,\n        kNgModel    : true,\n        kNgDelay    : true\n    };\n\n    var ignoredOwnProperties = {\n        // XXX: other names to ignore here?\n        name    : true,\n        title   : true,\n        style   : true\n    };\n\n    function addOption(scope, options, name, value) {\n        options[name] = angular.copy(scope.$eval(value));\n        if (options[name] === undefined && value.match(/^\\w*$/)) {\n            $log.warn(name + ' attribute resolved to undefined. Maybe you meant to use a string literal like: \\'' + value + '\\'?');\n        }\n    }\n\n    function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n        var kNgDelay = attrs.kNgDelay,\n            delayValue = scope.$eval(kNgDelay);\n\n        controllers = controllers || [];\n\n        var ngModel = controllers[0],\n            ngForm = controllers[1];\n\n        if (kNgDelay && !delayValue) {\n            var root = scope.$root || scope;\n\n            var register = function() {\n                var unregister = scope.$watch(kNgDelay, function(newValue, oldValue) {\n                        if (newValue !== oldValue) {\n                        unregister();\n                        // remove subsequent delays, to make ng-rebind work\n                        element.removeAttr(attrs.$attr.kNgDelay);\n                        kNgDelay = null;\n                        $timeout(createIt); // XXX: won't work without `timeout` ;-\\\n                    }\n                });\n            };\n\n            // WARNING: the watchers should be registered in the digest cycle.\n            // the fork here is for the timeout/non-timeout initiated widgets.\n            if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n                register();\n            } else {\n                scope.$apply(register);\n            }\n\n            return;\n        } else {\n            return createIt();\n        }\n\n        function createIt() {\n            var originalElement;\n\n            if (attrs.kRebind) {\n                originalElement = $($(element)[0].cloneNode(true));\n            }\n\n\n            var role = widget.replace(/^kendo/, '');\n            var options = angular.extend({}, attrs.defaultOptions, scope.$eval(attrs.kOptions || attrs.options));\n            var ctor = $(element)[widget];\n\n            if (!ctor) {\n                window.console.error(\"Could not find: \" + widget);\n                return null;\n            }\n\n            var widgetOptions = ctor.widget.prototype.options;\n            var widgetEvents = ctor.widget.prototype.events;\n\n            $.each(attrs, function(name, value) {\n                if (name === \"source\" || name === \"kDataSource\") {\n                    return;\n                }\n\n                var dataName = \"data\" + name.charAt(0).toUpperCase() + name.slice(1);\n\n                if (name.indexOf(\"on\") === 0) { // let's search for such event.\n                    var eventKey = name.replace(/^on./, function(prefix) {\n                        return prefix.charAt(2).toLowerCase();\n                    });\n\n                    if (widgetEvents.indexOf(eventKey) > -1) {\n                        options[eventKey] = value;\n                    }\n                } // don't elsif here - there are on* options\n\n                if (widgetOptions.hasOwnProperty(dataName)) {\n                    addOption(scope, options, dataName, value);\n                } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n                    addOption(scope, options, name, value);\n                } else if (!ignoredAttributes[name]) {\n                    var match = name.match(/^k(On)?([A-Z].*)/);\n                    if (match) {\n                        var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n                        if (match[1] && name != \"kOnLabel\" // XXX: k-on-label can be used on MobileSwitch :-\\\n                        ) {\n                            options[optionName] = value;\n                        } else {\n                            if (name == \"kOnLabel\") {\n                                optionName = \"onLabel\"; // XXX: that's awful.\n                            }\n                            addOption(scope, options, optionName, value);\n                        }\n                    }\n                }\n            });\n\n            // parse the datasource attribute\n            var dataSource = attrs.kDataSource || attrs.source;\n\n            if (dataSource) {\n                options.dataSource = createDataSource(scope, element, role, dataSource);\n            }\n\n            // deepExtend in kendo.core (used in Editor) will fail with stack\n            // overflow if we don't put it in an array :-\\\n                options.$angular = [ scope ];\n\n            if (element.is(\"select\")) {\n                (function(options){\n                    if (options.length > 0) {\n                        var first = $(options[0]);\n                        if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n                            first.remove();\n                        }\n                    }\n                }(element[0].options));\n            }\n\n            var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n\n            exposeWidget(object, scope, attrs, widget, origAttr);\n\n            scope.$emit(\"kendoWidgetCreated\", object);\n\n            var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n\n            if (attrs.kRebind) {\n                setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister);\n            }\n\n            // kNgModel is used for the \"logical\" value\n            if (attrs.kNgModel) {\n                bindToKNgModel(object, scope, attrs.kNgModel);\n            }\n\n            // 2 way binding: ngModel <-> widget.value()\n            if (ngModel) {\n                bindToNgModel(object, scope, element, ngModel, ngForm);\n            }\n\n            if (object) {\n                propagateClassToWidgetWrapper(object, element);\n            }\n\n            return object;\n        }\n    }\n\n    function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n        if (attrs[origAttr]) {\n            var set = $parse(attrs[origAttr]).assign;\n            if (set) {\n                // set the value of the expression to the kendo widget object to expose its api\n                set(scope, widget);\n            } else {\n                throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n            }\n        }\n    }\n\n    function formValue(element) {\n        if (/checkbox|radio/i.test(element.attr(\"type\"))) {\n            return element.prop(\"checked\");\n        }\n        return element.val();\n    }\n\n    var formRegExp = /^(input|select|textarea)$/i;\n\n    function isForm(element) {\n        return formRegExp.test(element[0].tagName);\n    }\n\n    function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n        if (!widget.value) {\n            return;\n        }\n\n        var value;\n\n        if (isForm(element)) {\n            value = function() {\n                return formValue(element);\n            };\n        } else {\n            value = function() {\n                return widget.value();\n            };\n        }\n\n        // Angular will invoke $render when the view needs to be updated with the view value.\n        ngModel.$render = function() {\n            // Update the widget with the view value.\n\n            // delaying with setTimout for cases where the datasource is set thereafter.\n            // https://github.com/kendo-labs/angular-kendo/issues/304\n            var val = ngModel.$viewValue;\n            if (val === undefined) {\n                val = ngModel.$modelValue;\n            }\n            setTimeout(function(){\n                if (widget) { // might have been destroyed in between. :-(\n                    widget.value(val);\n                }\n            }, 0);\n        };\n\n        // Some widgets trigger \"change\" on the input field\n        // and this would result in two events sent (#135)\n        var haveChangeOnElement = false;\n\n        if (isForm(element)) {\n            element.on(\"change\", function() {\n                haveChangeOnElement = true;\n            });\n        }\n\n        var onChange = function(pristine) {\n            return function() {\n                var formPristine;\n                if (haveChangeOnElement) {\n                    return;\n                }\n                haveChangeOnElement = false;\n                if (pristine && ngForm) {\n                    formPristine = ngForm.$pristine;\n                }\n                ngModel.$setViewValue(value());\n                if (pristine) {\n                    ngModel.$setPristine();\n                    if (formPristine) {\n                        ngForm.$setPristine();\n                    }\n                }\n                digest(scope);\n            };\n        };\n\n        widget.first(\"change\", onChange(false));\n        widget.first(\"dataBound\", onChange(true));\n\n        var currentVal = value();\n\n        // if the model value is undefined, then we set the widget value to match ( == null/undefined )\n        if (currentVal != ngModel.$viewValue) {\n            if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n                widget.value(ngModel.$viewValue);\n            } else if (currentVal != null && currentVal !== \"\" && currentVal != ngModel.$viewValue) {\n                ngModel.$setViewValue(currentVal);\n            }\n        }\n\n        ngModel.$setPristine();\n    }\n\n    function bindToKNgModel(widget, scope, kNgModel) {\n        if (typeof widget.value != \"function\") {\n            $log.warn(\"k-ng-model specified on a widget that does not have the value() method: \" + (widget.options.name));\n            return;\n        }\n\n        var getter = $parse(kNgModel);\n        var setter = getter.assign;\n        var updating = false;\n\n        widget.$angular_setLogicValue(getter(scope));\n\n        // keep in sync\n        scope.$apply(function() {\n            var watchHandler = function(newValue, oldValue) {\n                if (newValue === undefined) {\n                    // because widget's value() method usually checks if the new value is undefined,\n                    // in which case it returns the current value rather than clearing the field.\n                    // https://github.com/telerik/kendo-ui-core/issues/299\n                    newValue = null;\n                }\n                if (updating) {\n                    return;\n                }\n                if (newValue === oldValue) {\n                    return;\n                }\n                widget.$angular_setLogicValue(newValue);\n            };\n            if (kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect) {\n                scope.$watchCollection(kNgModel, watchHandler);\n            } else {\n                scope.$watch(kNgModel, watchHandler);\n            }\n        });\n\n        widget.first(\"change\", function(){\n            updating = true;\n            scope.$apply(function(){\n                setter(scope, widget.$angular_getLogicValue());\n            });\n            updating = false;\n        });\n    }\n\n    function destroyWidgetOnScopeDestroy(scope, widget) {\n        var deregister = scope.$on(\"$destroy\", function() {\n            deregister();\n            if (widget) {\n                if (widget.element) {\n                    widget = kendoWidgetInstance(widget.element);\n                    if (widget) {\n                        widget.destroy();\n                    }\n                }\n                widget = null;\n            }\n        });\n\n        return deregister;\n    }\n\n    // mutation observers - propagate the original\n    // element's class to the widget wrapper.\n    function propagateClassToWidgetWrapper(widget, element) {\n        if (!(window.MutationObserver && widget.wrapper)) {\n            return;\n        }\n\n        var prevClassList = [].slice.call($(element)[0].classList);\n\n        var mo = new MutationObserver(function(changes){\n            suspend();    // make sure we don't trigger a loop\n            if (!widget) {\n                return;\n            }\n\n            changes.forEach(function(chg){\n                var w = $(widget.wrapper)[0];\n                switch (chg.attributeName) {\n\n                    case \"class\":\n                        // sync classes to the wrapper element\n                        var currClassList = [].slice.call(chg.target.classList);\n                        currClassList.forEach(function(cls){\n                            if (prevClassList.indexOf(cls) < 0) {\n                                w.classList.add(cls);\n                                if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) { // https://github.com/kendo-labs/angular-kendo/issues/356\n                                    widget.input[0].classList.add(cls);\n                                }\n                            }\n                        });\n                        prevClassList.forEach(function(cls){\n                            if (currClassList.indexOf(cls) < 0) {\n                                w.classList.remove(cls);\n                                if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) { // https://github.com/kendo-labs/angular-kendo/issues/356\n                                    widget.input[0].classList.remove(cls);\n                                }\n                            }\n                        });\n                        prevClassList = currClassList;\n                        break;\n\n                    case \"disabled\":\n                        if (typeof widget.enable == \"function\") {\n                            widget.enable(!$(chg.target).attr(\"disabled\"));\n                        }\n                        break;\n\n                    case \"readonly\":\n                        if (typeof widget.readonly == \"function\") {\n                            widget.readonly(!!$(chg.target).attr(\"readonly\"));\n                        }\n                        break;\n                }\n            });\n\n            resume();\n        });\n\n        function suspend() {\n            mo.disconnect();\n        }\n\n        function resume() {\n            mo.observe($(element)[0], { attributes: true });\n        }\n\n        resume();\n        widget.first(\"destroy\", suspend);\n    }\n\n    function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister) {\n        // watch for changes on the expression passed in the k-rebind attribute\n        var unregister = scope.$watch(rebindAttr, function(newValue, oldValue) {\n            if (newValue !== oldValue) {\n                unregister(); // this watcher will be re-added if we compile again!\n\n                /****************************************************************\n                // XXX: this is a gross hack that might not even work with all\n                // widgets.  we need to destroy the current widget and get its\n                // wrapper element out of the DOM, then make the original element\n                // visible so we can initialize a new widget on it.\n                //\n                // kRebind is probably impossible to get right at the moment.\n                ****************************************************************/\n\n                var _wrapper = $(widget.wrapper)[0];\n                var _element = $(widget.element)[0];\n                var compile = element.injector().get(\"$compile\");\n                widget.destroy();\n\n                if (destroyRegister) {\n                    destroyRegister();\n                }\n\n                widget = null;\n\n                if (_wrapper && _element) {\n                    _wrapper.parentNode.replaceChild(_element, _wrapper);\n                    $(element).replaceWith(originalElement);\n                }\n\n                compile(originalElement)(scope);\n            }\n        }, true); // watch for object equality. Use native or simple values.\n        digest(scope);\n    }\n\n    module.factory('directiveFactory', [ '$compile', function(compile) {\n        var KENDO_COUNT = 0;\n        var RENDERED = false;\n\n        // caching $compile for the dirty hack upstairs. This is awful, but we happen to have elements outside of the bootstrapped root :(.\n        $defaultCompile = compile;\n\n        var create = function(role, origAttr) {\n\n            return {\n                // Parse the directive for attributes and classes\n                restrict: \"AC\",\n                require: [ \"?ngModel\", \"^?form\" ],\n                scope: false,\n\n                controller: [ '$scope', '$attrs', '$element', function($scope, $attrs, $element) {\n                    this.template = function(key, value) {\n                        $attrs[key] = kendo.stringify(value);\n                    };\n                }],\n\n                link: function(scope, element, attrs, controllers) {\n                    var $element = $(element);\n\n                    // we must remove data-kendo-widget-name attribute because\n                    // it breaks kendo.widgetInstance; can generate all kinds\n                    // of funny issues like\n                    //\n                    //   https://github.com/kendo-labs/angular-kendo/issues/167\n                    //\n                    // but we still keep the attribute without the\n                    // `data-` prefix, so k-rebind would work.\n                    var roleattr = role.replace(/([A-Z])/g, \"-$1\");\n                    var isVisible = $element.css(\"visibility\") !== \"hidden\";\n\n                    $element.attr(roleattr, $element.attr(\"data-\" + roleattr));\n                    $element[0].removeAttribute(\"data-\" + roleattr);\n\n                    if (isVisible) {\n                        $element.css(\"visibility\", \"hidden\");\n                    }\n\n                    ++KENDO_COUNT;\n\n                    $timeout(function() {\n                        if (isVisible) {\n                            $element.css(\"visibility\", \"\");\n                        }\n                        var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n\n                        if (!widget) {\n                            return;\n                        }\n\n                        --KENDO_COUNT;\n                        if (KENDO_COUNT === 0) {\n                            scope.$emit(\"kendoRendered\");\n                            if (!RENDERED) {\n                                RENDERED = true;\n                                $(\"form\").each(function(){\n                                    var form = $(this).controller(\"form\");\n                                    if (form) {\n                                        form.$setPristine();\n                                    }\n                                });\n                            }\n                        }\n                    });\n                }\n            };\n        };\n\n        return {\n            create: create\n        };\n    }]);\n\n    var TAGNAMES = {\n        Editor         : \"textarea\",\n        NumericTextBox : \"input\",\n        DatePicker     : \"input\",\n        DateTimePicker : \"input\",\n        TimePicker     : \"input\",\n        AutoComplete   : \"input\",\n        ColorPicker    : \"input\",\n        MaskedTextBox  : \"input\",\n        MultiSelect    : \"input\",\n        Upload         : \"input\",\n        Validator      : \"form\",\n        Button         : \"button\",\n        MobileButton        : \"a\",\n        MobileBackButton    : \"a\",\n        MobileDetailButton  : \"a\",\n        ListView       : \"ul\",\n        MobileListView : \"ul\",\n        TreeView       : \"ul\",\n        Menu           : \"ul\",\n        ContextMenu    : \"ul\",\n        ActionSheet    : \"ul\"\n    };\n\n    var SKIP_SHORTCUTS = [\n        'MobileView',\n        'MobileLayout',\n        'MobileSplitView',\n        'MobilePane',\n        'MobileModalView'\n    ];\n\n    var MANUAL_DIRECTIVES = [\n        'MobileApplication',\n        'MobileView',\n        'MobileModalView',\n        'MobileLayout',\n        'MobileActionSheet',\n        'MobileDrawer',\n        'MobileSplitView',\n        'MobilePane',\n        'MobileScrollView',\n        'MobilePopOver'\n    ];\n\n    angular.forEach(['MobileNavBar', 'MobileButton', 'MobileBackButton', 'MobileDetailButton', 'MobileTabStrip', 'MobileScrollView', 'MobileScroller'], function(widget) {\n        MANUAL_DIRECTIVES.push(widget);\n        widget = \"kendo\" + widget;\n        module.directive(widget, function() {\n            return {\n                restrict: \"A\",\n                link: function(scope, element, attrs, controllers) {\n                    createWidget(scope, element, attrs, widget, widget);\n                }\n            };\n        });\n    });\n\n    function createDirectives(klass, isMobile) {\n        function make(directiveName, widgetName) {\n            module.directive(directiveName, [\n                \"directiveFactory\",\n                function(directiveFactory) {\n                    return directiveFactory.create(widgetName, directiveName);\n                }\n            ]);\n        }\n\n        var name = isMobile ? \"Mobile\" : \"\";\n        name += klass.fn.options.name;\n\n        var className = name;\n        var shortcut = \"kendo\" + name.charAt(0) + name.substr(1).toLowerCase();\n        name = \"kendo\" + name;\n\n        // <kendo-numerictextbox>-type directives\n        var dashed = name.replace(/([A-Z])/g, \"-$1\");\n\n        if (SKIP_SHORTCUTS.indexOf(name.replace(\"kendo\", \"\")) == -1) {\n            var names = name === shortcut ? [ name ] : [ name, shortcut ];\n            angular.forEach(names, function(directiveName) {\n                module.directive(directiveName, function(){\n                    return {\n                        restrict : \"E\",\n                        replace  : true,\n                        template : function(element, attributes) {\n                            var tag = TAGNAMES[className] || \"div\";\n                            return \"<\" + tag + \" \" + dashed + \">\" + element.html() + \"</\" + tag + \">\";\n                        }\n                    };\n                });\n            });\n        }\n\n        if (MANUAL_DIRECTIVES.indexOf(name.replace(\"kendo\", \"\")) > -1) {\n            return;\n        }\n\n        // here name should be like kendoMobileListView so kendo-mobile-list-view works,\n        // and shortcut like kendoMobilelistview, for kendo-mobilelistview\n\n        make(name, name);\n        if (shortcut != name) {\n            make(shortcut, name);\n        }\n\n    }\n\n    (function(){\n        function doAll(isMobile) {\n            return function(namespace) {\n                angular.forEach(namespace, function(value) {\n                    if (value.fn && value.fn.options && value.fn.options.name && (/^[A-Z]/).test(value.fn.options.name)) {\n                        createDirectives(value, isMobile);\n                    }\n                });\n            };\n        }\n        angular.forEach([ kendo.ui, kendo.dataviz && kendo.dataviz.ui ], doAll(false));\n        angular.forEach([ kendo.mobile && kendo.mobile.ui ], doAll(true));\n    })();\n\n    /* -----[ utils ]----- */\n\n    function kendoWidgetInstance(el) {\n        el = $(el);\n        return kendo.widgetInstance(el, kendo.ui) ||\n            kendo.widgetInstance(el, kendo.mobile.ui) ||\n            kendo.widgetInstance(el, kendo.dataviz.ui);\n    }\n\n    function digest(scope, func) {\n        var root = scope.$root || scope;\n        var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n        if (func) {\n            if (isDigesting) {\n                func();\n            } else {\n                root.$apply(func);\n            }\n        } else if (!isDigesting) {\n            root.$digest();\n        }\n    }\n\n    function destroyScope(scope, el) {\n        scope.$destroy();\n        if (el) {\n            // prevent leaks. https://github.com/kendo-labs/angular-kendo/issues/237\n            $(el)\n                .removeData(\"$scope\")\n                .removeData(\"$isolateScope\")\n                .removeData(\"$isolateScopeNoTemplate\")\n                .removeClass(\"ng-scope\");\n        }\n    }\n\n    var pendingPatches = [];\n\n    // defadvice will patch a class' method with another function.  That\n    // function will be called in a context containing `next` (to call\n    // the next method) and `object` (a reference to the original\n    // object).\n    function defadvice(klass, methodName, func) {\n        if ($.isArray(klass)) {\n            return angular.forEach(klass, function(klass){\n                defadvice(klass, methodName, func);\n            });\n        }\n        if (typeof klass == \"string\") {\n            var a = klass.split(\".\");\n            var x = kendo;\n            while (x && a.length > 0) {\n                x = x[a.shift()];\n            }\n            if (!x) {\n                pendingPatches.push([ klass, methodName, func ]);\n                return false;\n            }\n            klass = x.prototype;\n        }\n        var origMethod = klass[methodName];\n        klass[methodName] = function() {\n            var self = this, args = arguments;\n            return func.apply({\n                self: self,\n                next: function() {\n                    return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n                }\n            }, args);\n        };\n        return true;\n    }\n\n    defadvice(kendo.ui, \"plugin\", function(klass, register, prefix){\n        this.next();\n        pendingPatches = $.grep(pendingPatches, function(args){\n            return !defadvice.apply(null, args);\n        });\n        createDirectives(klass, prefix == \"Mobile\");\n    });\n\n    /* -----[ Customize widgets for Angular ]----- */\n\n    defadvice([ \"ui.Widget\", \"mobile.ui.Widget\" ], \"angular\", function(cmd, arg){\n        var self = this.self;\n        if (cmd == \"init\") {\n            // `arg` here should be the widget options.\n            // the Chart doesn't send the options to Widget::init in constructor\n            // hence the OPTIONS_NOW hack (initialized in createWidget).\n            if (!arg && OPTIONS_NOW) {\n                arg = OPTIONS_NOW;\n            }\n            OPTIONS_NOW = null;\n            if (arg && arg.$angular) {\n                self.$angular_scope = arg.$angular[0];\n                self.$angular_init(self.element, arg);\n            }\n            return;\n        }\n\n        var scope = self.$angular_scope; //  || angular.element(self.element).scope();\n\n        if (scope) {\n            withoutTimeout(function(){\n                var x = arg(), elements = x.elements, data = x.data;\n                if (elements.length > 0) {\n                    switch (cmd) {\n\n                      case \"cleanup\":\n                        angular.forEach(elements, function(el){\n                            var itemScope = angular.element(el).scope();\n                            if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n                                destroyScope(itemScope, el);\n                            }\n                        });\n                        break;\n\n                      case \"compile\":\n                        var injector = self.element.injector();\n                        // gross gross gross hack :(. Works for popups that may be out of the ng-app directive.\n                        // they don't have injectors. Same thing happens in our tests, too.\n                        var compile = injector ? injector.get(\"$compile\") : $defaultCompile;\n\n                        angular.forEach(elements, function(el, i){\n                            var itemScope;\n                            if (x.scopeFrom) {\n                                itemScope = angular.element(x.scopeFrom).scope();\n                            } else {\n                                var vars = data && data[i];\n                                if (vars !== undefined) {\n                                    itemScope = $.extend(scope.$new(), vars);\n                                    itemScope.$$kendoScope = true;\n                                }\n                            }\n\n                            compile(el)(itemScope || scope);\n                        });\n                        digest(scope);\n                        break;\n                    }\n                }\n            });\n        }\n    });\n\n    defadvice(\"ui.Widget\", \"$angular_getLogicValue\", function(){\n        return this.self.value();\n    });\n\n    defadvice(\"ui.Widget\", \"$angular_setLogicValue\", function(val){\n        this.self.value(val);\n    });\n\n    defadvice(\"ui.Select\", \"$angular_getLogicValue\", function(){\n        var item = this.self.dataItem();\n        if (item) {\n            if (this.self.options.valuePrimitive) {\n                return item[this.self.options.dataValueField];\n            } else {\n                return item.toJSON();\n            }\n        } else {\n            return null;\n        }\n    });\n\n    defadvice(\"ui.Select\", \"$angular_setLogicValue\", function(val){\n        var self = this.self;\n        var options = self.options;\n        var valueField = options.dataValueField;\n\n        if (valueField && !options.valuePrimitive) {\n            val = val != null ? val[options.dataValueField || options.dataTextField] : null;\n        }\n\n        self.value(val);\n    });\n\n    defadvice(\"ui.MultiSelect\", \"$angular_getLogicValue\", function() {\n        var value = this.self.dataItems().slice(0);\n        var valueField = this.self.options.dataValueField;\n\n        if (valueField && this.self.options.valuePrimitive) {\n            value = $.map(value, function(item) {\n                return item[valueField];\n            });\n        }\n\n        return value;\n    });\n\n    defadvice(\"ui.MultiSelect\", \"$angular_setLogicValue\", function(val){\n        if (val == null) {\n            val = [];\n        }\n        var self = this.self,\n            valueField = self.options.dataValueField;\n\n        if (valueField && !self.options.valuePrimitive) {\n            val = $.map(val, function(item) {\n                return item[valueField];\n            });\n        }\n\n        self.value(val);\n    });\n\n    defadvice(\"ui.AutoComplete\", \"$angular_getLogicValue\", function(){\n        var options = this.self.options;\n\n        var values = this.self.value().split(options.separator);\n        var valuePrimitive = options.valuePrimitive;\n        var data = this.self.dataSource.data();\n        var dataItems = [];\n        for (var idx = 0, length = data.length; idx < length; idx++) {\n            var item = data[idx];\n            var dataValue = options.dataTextField ? item[options.dataTextField] : item;\n            for (var j = 0; j < values.length; j++) {\n                if (dataValue === values[j]) {\n                    if (valuePrimitive) {\n                        dataItems.push(dataValue);\n                    } else {\n                        dataItems.push(item.toJSON());\n                    }\n\n                    break;\n                }\n            }\n        }\n\n        return dataItems;\n    });\n\n    defadvice(\"ui.AutoComplete\", \"$angular_setLogicValue\", function(value) {\n        if (value == null) {\n            value = [];\n        }\n\n        var self = this.self,\n            dataTextField = self.options.dataTextField;\n\n        if (dataTextField && !self.options.valuePrimitive) {\n            value = $.map(value, function(item){\n                return item[dataTextField];\n            });\n        }\n\n        self.value(value);\n    });\n\n    // All event handlers that are strings are compiled the Angular way.\n    defadvice(\"ui.Widget\", \"$angular_init\", function(element, options) {\n        var self = this.self;\n        if (options && !$.isArray(options)) {\n            var scope = self.$angular_scope;\n            for (var i = self.events.length; --i >= 0;) {\n                var event = self.events[i];\n                var handler = options[event];\n                if (handler && typeof handler == \"string\") {\n                    options[event] = self.$angular_makeEventHandler(event, scope, handler);\n                }\n            }\n        }\n    });\n\n    // most handers will only contain a kendoEvent in the scope.\n    defadvice(\"ui.Widget\", \"$angular_makeEventHandler\", function(event, scope, handler){\n        handler = $parse(handler);\n        return function(e) {\n            digest(scope, function() {\n                handler(scope, { kendoEvent: e });\n            });\n        };\n    });\n\n    // for the Grid and ListView we add `data` and `selected` too.\n    defadvice([ \"ui.Grid\", \"ui.ListView\", \"ui.TreeView\" ], \"$angular_makeEventHandler\", function(event, scope, handler){\n        if (event != \"change\") {\n            return this.next();\n        }\n        handler = $parse(handler);\n        return function(ev) {\n            var widget = ev.sender;\n            var options = widget.options;\n            var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n\n            if (angular.isString(options.selectable)) {\n                cell = options.selectable.indexOf('cell') !== -1;\n                multiple = options.selectable.indexOf('multiple') !== -1;\n            }\n\n            elems = locals.selected = this.select();\n            items = locals.data = [];\n            columns = locals.columns = [];\n            for (var i = 0; i < elems.length; i++) {\n                var item = cell ? elems[i].parentNode : elems[i];\n                var dataItem = widget.dataItem(item);\n                if (cell) {\n                    if (angular.element.inArray(dataItem, items) < 0) {\n                        items.push(dataItem);\n                    }\n                    colIdx = angular.element(elems[i]).index();\n                    if (angular.element.inArray(colIdx, columns) < 0 ) {\n                        columns.push(colIdx);\n                    }\n                } else {\n                    items.push(dataItem);\n                }\n            }\n\n            if (!multiple) {\n                locals.dataItem = locals.data = items[0];\n                locals.selected = elems[0];\n            }\n\n            digest(scope, function() {\n                handler(scope, locals);\n            });\n        };\n    });\n\n    // If no `template` is supplied for Grid columns, provide an Angular\n    // template.  The reason is that in this way AngularJS will take\n    // care to update the view as the data in scope changes.\n    defadvice(\"ui.Grid\", \"$angular_init\", function(element, options){\n        this.next();\n        if (options.columns) {\n            var settings = $.extend({}, kendo.Template, options.templateSettings);\n            angular.forEach(options.columns, function(col){\n                if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n                    col.template = \"<span ng-bind='\" +\n                        kendo.expr(col.field, \"dataItem\") + \"'>#: \" +\n                        kendo.expr(col.field, settings.paramName) + \"#</span>\";\n                }\n            });\n        }\n    });\n\n    {\n        // mobile/ButtonGroup does not have a \"value\" method, but looks\n        // like it would be useful.  We provide it here.\n\n        defadvice(\"mobile.ui.ButtonGroup\", \"value\", function(mew){\n            var self = this.self;\n            if (mew != null) {\n                self.select(self.element.children(\"li.km-button\").eq(mew));\n                self.trigger(\"change\");\n                self.trigger(\"select\", { index: self.selectedIndex });\n            }\n            return self.selectedIndex;\n        });\n\n        defadvice(\"mobile.ui.ButtonGroup\", \"_select\", function(){\n            this.next();\n            this.self.trigger(\"change\");\n        });\n    }\n\n    // mobile directives\n    module\n    .directive('kendoMobileApplication', function() {\n        return {\n            terminal: true,\n            link: function(scope, element, attrs, controllers) {\n                createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n            }\n        };\n    }).directive('kendoMobileView', function() {\n        return {\n            scope: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n                },\n\n                post: function(scope, element, attrs) {\n                    attrs._instance._layout();\n                    attrs._instance._scroller();\n                }\n            }\n        };\n    }).directive('kendoMobileDrawer', function() {\n        return {\n            scope: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n                },\n\n                post: function(scope, element, attrs) {\n                    attrs._instance._layout();\n                    attrs._instance._scroller();\n                }\n            }\n        };\n    }).directive('kendoMobileModalView', function() {\n        return {\n            scope: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n                },\n\n                post: function(scope, element, attrs) {\n                    attrs._instance._layout();\n                    attrs._instance._scroller();\n                }\n            }\n        };\n    }).directive('kendoMobileSplitView', function() {\n        return {\n            terminal: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n                },\n\n                post: function(scope, element, attrs) {\n                    attrs._instance._layout();\n                }\n            }\n        };\n    }).directive('kendoMobilePane', function() {\n        return {\n            terminal: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n                }\n            }\n        };\n    }).directive('kendoMobileLayout', function() {\n        return {\n            link: {\n                pre: function (scope, element, attrs, controllers) {\n                    createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n                }\n            }\n        };\n    }).directive('kendoMobileActionSheet', function() {\n        return {\n            restrict: \"A\",\n            link: function(scope, element, attrs, controllers) {\n                element.find(\"a[k-action]\").each(function() {\n                    $(this).attr(\"data-\" + kendo.ns + \"action\", $(this).attr(\"k-action\"));\n                });\n\n                createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n            }\n        };\n    }).directive('kendoMobilePopOver', function() {\n        return {\n            terminal: true,\n            link: {\n                pre: function(scope, element, attrs, controllers) {\n                    attrs.defaultOptions = scope.viewOptions;\n                    createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n                }\n            }\n        };\n    }).directive('kendoViewTitle', function(){\n        return {\n            restrict : \"E\",\n            replace  : true,\n            template : function(element, attributes) {\n                return \"<span data-\" + kendo.ns + \"role='view-title'>\" + element.html() + \"</span>\";\n            }\n        };\n    }).directive('kendoMobileHeader', function() {\n            return {\n                restrict: \"E\",\n                link: function(scope, element, attrs, controllers) {\n                    element.addClass(\"km-header\").attr(\"data-role\", \"header\");\n                }\n            };\n    }).directive('kendoMobileFooter', function() {\n            return {\n                restrict: 'E',\n                link: function(scope, element, attrs, controllers) {\n                    element.addClass(\"km-footer\").attr(\"data-role\", \"footer\");\n                }\n            };\n    }).directive('kendoMobileScrollViewPage', function(){\n        return {\n            restrict : \"E\",\n            replace  : true,\n            template : function(element, attributes) {\n                return \"<div data-\" + kendo.ns + \"role='page'>\" + element.html() + \"</div>\";\n            }\n        };\n    });\n\n    angular.forEach(['align', 'icon', 'rel', 'transition', 'actionsheetContext'], function(attr) {\n          var kAttr = \"k\" + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n\n          module.directive(kAttr, function() {\n              return {\n                  restrict: 'A',\n                  priority: 2,\n                  link: function(scope, element, attrs) {\n                      element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n                  }\n              };\n          });\n    });\n\n    var WIDGET_TEMPLATE_OPTIONS = {\n        \"TreeMap\": [ \"Template\" ],\n        \"MobileListView\": [ \"HeaderTemplate\", \"Template\" ],\n        \"MobileScrollView\": [ \"EmptyTemplate\", \"Template\" ],\n        \"Grid\": [ \"AltRowTemplate\", \"DetailTemplate\", \"RowTemplate\" ],\n        \"ListView\": [ \"EditTemplate\", \"Template\", \"AltTemplate\" ],\n        \"Pager\": [ \"SelectTemplate\", \"LinkTemplate\" ],\n        \"PivotGrid\": [ \"ColumnHeaderTemplate\", \"DataCellTemplate\", \"RowHeaderTemplate\" ],\n        \"Scheduler\": [ \"AllDayEventTemplate\", \"DateHeaderTemplate\", \"EventTemplate\", \"MajorTimeHeaderTemplate\", \"MinorTimeHeaderTemplate\" ],\n        \"TreeView\": [ \"Template\" ],\n        \"Validator\": [ \"ErrorTemplate\" ]\n    };\n\n    (function() {\n        var templateDirectives = {};\n        angular.forEach(WIDGET_TEMPLATE_OPTIONS, function(templates, widget) {\n            angular.forEach(templates, function(template) {\n                if (!templateDirectives[template]) {\n                    templateDirectives[template] = [ ];\n                }\n                templateDirectives[template].push(\"?^^kendo\" + widget);\n            });\n        });\n\n        angular.forEach(templateDirectives, function(parents, directive) {\n            var templateName = \"k\" + directive;\n            var attrName = kendo.toHyphens(templateName);\n\n            module.directive(templateName, function() {\n                return {\n                    restrict: \"A\",\n                    require: parents,\n                    terminal: true,\n                    compile: function($element, $attrs) {\n                        if ($attrs[templateName] !== \"\") {\n                            return;\n                        }\n\n                        $element.removeAttr(attrName);\n                        var template = $element[0].outerHTML;\n\n                        return function(scope, element, attrs, controllers) {\n                            var controller;\n\n                            while(!controller && controllers.length) {\n                                controller = controllers.shift();\n                            }\n\n                            if (!controller) {\n                                $log.warn(attrName + \" without a matching parent widget found. It can be one of the following: \" + parents.join(\", \"));\n                            } else {\n                                controller.template(templateName, template);\n                                $element.remove();\n                            }\n                        };\n                    }\n                };\n            });\n        });\n\n    })();\n\n\n})(window.kendo.jQuery, window.angular);\n\n\n\n\n\n\n\n(function ($, undefined) {\n\n    // Imports ================================================================\n    var doc = document,\n        kendo = window.kendo,\n\n        util = kendo.util,\n        append = util.append,\n        defined = util.defined,\n        last = util.last,\n        limitValue = util.limitValue,\n        valueOrDefault = util.valueOrDefault,\n\n        dataviz = kendo.dataviz,\n        geom = dataviz.geometry,\n        draw = dataviz.drawing,\n        measureText = draw.util.measureText,\n        Matrix = geom.Matrix,\n        Class = kendo.Class,\n        template = kendo.template,\n        map = $.map,\n        noop = $.noop,\n        indexOf = $.inArray,\n        trim = $.trim,\n        math = Math,\n        deepExtend = kendo.deepExtend;\n\n    var CSS_PREFIX = \"k-\";\n\n    // Constants ==============================================================\n    var ANIMATION_STEP = 10,\n        AXIS_LABEL_CLICK = \"axisLabelClick\",\n        BASELINE_MARKER_SIZE = 1,\n        BLACK = \"#000\",\n        BOTTOM = \"bottom\",\n        CENTER = \"center\",\n        COORD_PRECISION = 3,\n        CLIP = \"clip\",\n        CIRCLE = \"circle\",\n        CROSS = \"cross\",\n        DEFAULT_FONT = \"12px sans-serif\",\n        DEFAULT_HEIGHT = 400,\n        DEFAULT_PRECISION = 6,\n        DEFAULT_WIDTH = 600,\n        DEG_TO_RAD = math.PI / 180,\n        FADEIN = \"fadeIn\",\n        FORMAT_REGEX = /\\{\\d+:?/,\n        HEIGHT = \"height\",\n        ID_PREFIX = \"k\",\n        ID_POOL_SIZE = 1000,\n        ID_START = 10000,\n        COORDINATE_LIMIT = 100000,\n        INITIAL_ANIMATION_DURATION = 600,\n        INSIDE = \"inside\",\n        LEFT = \"left\",\n        LINEAR = \"linear\",\n        MAX_VALUE = Number.MAX_VALUE,\n        MIN_VALUE = -Number.MAX_VALUE,\n        NONE = \"none\",\n        NOTE_CLICK = \"noteClick\",\n        NOTE_HOVER = \"noteHover\",\n        OUTSIDE = \"outside\",\n        RADIAL = \"radial\",\n        RIGHT = \"right\",\n        SWING = \"swing\",\n        TOP = \"top\",\n        TRIANGLE = \"triangle\",\n        UNDEFINED = \"undefined\",\n        UPPERCASE_REGEX = /([A-Z])/g,\n        WIDTH = \"width\",\n        WHITE = \"#fff\",\n        X = \"x\",\n        Y = \"y\",\n        ZERO_THRESHOLD = 0.2;\n\n    function getSpacing(value, defaultSpacing) {\n        var spacing = { top: 0, right: 0, bottom: 0, left: 0 };\n\n        defaultSpacing = defaultSpacing || 0;\n\n        if (typeof(value) === \"number\") {\n            spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n        } else {\n            spacing[TOP] = value[TOP] || defaultSpacing;\n            spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n            spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n            spacing[LEFT] = value[LEFT] || defaultSpacing;\n        }\n\n        return spacing;\n    }\n\n    // Geometric primitives ===================================================\n    var Point2D = function(x, y) {\n        var point = this;\n        if (!(point instanceof Point2D)) {\n            return new Point2D(x, y);\n        }\n\n        point.x = x || 0;\n        point.y = y || 0;\n    };\n\n    Point2D.fn = Point2D.prototype = {\n        clone: function() {\n            var point = this;\n\n            return new Point2D(point.x, point.y);\n        },\n\n        equals: function(point) {\n            return point && point.x === this.x && point.y === this.y;\n        },\n\n        rotate: function(center, degrees) {\n            var point = this,\n                theta = degrees * DEG_TO_RAD,\n                cosT = math.cos(theta),\n                sinT = math.sin(theta),\n                cx = center.x,\n                cy = center.y,\n                x = point.x,\n                y = point.y;\n\n            point.x = round(\n                cx + (x - cx) * cosT + (y - cy) * sinT,\n                COORD_PRECISION\n            );\n\n            point.y = round(\n                cy + (y - cy) * cosT - (x - cx) * sinT,\n                COORD_PRECISION\n            );\n\n            return point;\n        },\n\n        multiply: function(a) {\n            var point = this;\n\n            point.x *= a;\n            point.y *= a;\n\n            return point;\n        },\n\n        distanceTo: function(point) {\n            var dx = this.x - point.x,\n                dy = this.y - point.y;\n\n            return math.sqrt(dx * dx + dy * dy);\n        }\n    };\n\n    // Clock-wise, 0 points left\n    Point2D.onCircle = function(c, a, r) {\n        a *= DEG_TO_RAD;\n\n        return new Point2D(\n            c.x - r * math.cos(a),\n            c.y - r * math.sin(a)\n        );\n    };\n\n    var Box2D = function(x1, y1, x2, y2) {\n        var box = this;\n\n        if (!(box instanceof Box2D)) {\n            return new Box2D(x1, y1, x2, y2);\n        }\n\n        box.x1 = x1 || 0;\n        box.x2 = x2 || 0;\n        box.y1 = y1 || 0;\n        box.y2 = y2 || 0;\n    };\n\n    Box2D.fn = Box2D.prototype = {\n        width: function() {\n            return this.x2 - this.x1;\n        },\n\n        height: function() {\n            return this.y2 - this.y1;\n        },\n\n        translate: function(dx, dy) {\n            var box = this;\n\n            box.x1 += dx;\n            box.x2 += dx;\n            box.y1 += dy;\n            box.y2 += dy;\n\n            return box;\n        },\n\n        // TODO: Accept point!\n        move: function(x, y) {\n            var box = this,\n                height = box.height(),\n                width = box.width();\n\n            if (defined(x)) {\n                box.x1 = x;\n                box.x2 = box.x1 + width;\n            }\n\n            if (defined(y)) {\n                box.y1 = y;\n                box.y2 = box.y1 + height;\n            }\n\n            return box;\n        },\n\n        wrap: function(targetBox) {\n            var box = this;\n\n            box.x1 = math.min(box.x1, targetBox.x1);\n            box.y1 = math.min(box.y1, targetBox.y1);\n            box.x2 = math.max(box.x2, targetBox.x2);\n            box.y2 = math.max(box.y2, targetBox.y2);\n\n            return box;\n        },\n\n        wrapPoint: function(point) {\n            this.wrap(new Box2D(point.x, point.y, point.x, point.y));\n\n            return this;\n        },\n\n        snapTo: function(targetBox, axis) {\n            var box = this;\n\n            if (axis == X || !axis) {\n                box.x1 = targetBox.x1;\n                box.x2 = targetBox.x2;\n            }\n\n            if (axis == Y || !axis) {\n                box.y1 = targetBox.y1;\n                box.y2 = targetBox.y2;\n            }\n\n            return box;\n        },\n\n        alignTo: function(targetBox, anchor) {\n            var box = this,\n                height = box.height(),\n                width = box.width(),\n                axis = anchor == TOP || anchor == BOTTOM ? Y : X,\n                offset = axis == Y ? height : width;\n\n            if (anchor === CENTER) {\n                var targetCenter = targetBox.center();\n                var center = box.center();\n\n                box.x1 += targetCenter.x - center.x;\n                box.y1 += targetCenter.y - center.y;\n            } else if (anchor === TOP || anchor === LEFT) {\n                box[axis + 1] = targetBox[axis + 1] - offset;\n            } else {\n                box[axis + 1] = targetBox[axis + 2];\n            }\n\n            box.x2 = box.x1 + width;\n            box.y2 = box.y1 + height;\n\n            return box;\n        },\n\n        shrink: function(dw, dh) {\n            var box = this;\n\n            box.x2 -= dw;\n            box.y2 -= dh;\n\n            return box;\n        },\n\n        expand: function(dw, dh) {\n            this.shrink(-dw, -dh);\n            return this;\n        },\n\n        pad: function(padding) {\n            var box = this,\n                spacing = getSpacing(padding);\n\n            box.x1 -= spacing.left;\n            box.x2 += spacing.right;\n            box.y1 -= spacing.top;\n            box.y2 += spacing.bottom;\n\n            return box;\n        },\n\n        unpad: function(padding) {\n            var box = this,\n                spacing = getSpacing(padding);\n\n            spacing.left = -spacing.left;\n            spacing.top = -spacing.top;\n            spacing.right = -spacing.right;\n            spacing.bottom = -spacing.bottom;\n\n            return box.pad(spacing);\n        },\n\n        clone: function() {\n            var box = this;\n\n            return new Box2D(box.x1, box.y1, box.x2, box.y2);\n        },\n\n        center: function() {\n            var box = this;\n\n            return new Point2D(\n                box.x1 + box.width() / 2,\n                box.y1 + box.height() / 2\n            );\n        },\n\n        containsPoint: function(point) {\n            var box = this;\n\n            return point.x >= box.x1 && point.x <= box.x2 &&\n                   point.y >= box.y1 && point.y <= box.y2;\n        },\n\n        points: function() {\n            var box = this;\n\n            return [\n                new Point2D(box.x1, box.y1),\n                new Point2D(box.x2, box.y1),\n                new Point2D(box.x2, box.y2),\n                new Point2D(box.x1, box.y2)\n            ];\n        },\n\n        getHash: function() {\n            var box = this;\n\n            return [box.x1, box.y1, box.x2, box.y2].join(\",\");\n        },\n\n        overlaps: function(box) {\n            return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n        },\n\n        rotate: function(rotation) {\n            var box = this;\n            var width = box.width();\n            var height = box.height();\n            var center = box.center();\n            var cx = center.x;\n            var cy = center.y;\n            var r1 = rotatePoint(0, 0, cx, cy, rotation);\n            var r2 = rotatePoint(width, 0, cx, cy, rotation);\n            var r3 = rotatePoint(width, height, cx, cy, rotation);\n            var r4 = rotatePoint(0, height, cx, cy, rotation);\n            width = math.max(r1.x, r2.x, r3.x, r4.x) - math.min(r1.x, r2.x, r3.x, r4.x);\n            height = math.max(r1.y, r2.y, r3.y, r4.y) - math.min(r1.y, r2.y, r3.y, r4.y);\n            box.x2 =  box.x1 + width;\n            box.y2 = box.y1 + height;\n\n            return box;\n        },\n\n        toRect: function() {\n            return new geom.Rect([this.x1, this.y1], [this.width(), this.height()]);\n        }\n    };\n\n    var Ring = Class.extend({\n        init: function(center, innerRadius, radius, startAngle, angle) {\n            var ring = this;\n\n            ring.c = center;\n            ring.ir = innerRadius;\n            ring.r = radius;\n            ring.startAngle = startAngle;\n            ring.angle = angle;\n        },\n\n        clone: function() {\n            var r = this;\n            return new Ring(r.c, r.ir, r.r, r.startAngle, r.angle);\n        },\n\n        // TODO: Rename to midAngle\n        middle: function() {\n            return this.startAngle + this.angle / 2;\n        },\n\n        // TODO: Sounds like a getter\n        radius: function(newRadius, innerRadius) {\n            var that = this;\n\n            if (innerRadius) {\n                that.ir = newRadius;\n            } else {\n                that.r = newRadius;\n            }\n\n            return that;\n        },\n\n        // TODO: Remove and replace with Point2D.onCircle\n        point: function(angle, innerRadius) {\n            var ring = this,\n                radianAngle = angle * DEG_TO_RAD,\n                ax = math.cos(radianAngle),\n                ay = math.sin(radianAngle),\n                radius = innerRadius ? ring.ir : ring.r,\n                x = round(ring.c.x - (ax * radius), COORD_PRECISION),\n                y = round(ring.c.y - (ay * radius), COORD_PRECISION);\n\n            return new Point2D(x, y);\n        },\n\n        adjacentBox: function(distance, width, height) {\n            var sector = this.clone().expand(distance),\n                midAndle = sector.middle(),\n                midPoint = sector.point(midAndle),\n                hw = width / 2,\n                hh = height / 2,\n                x = midPoint.x - hw,\n                y = midPoint.y - hh,\n                sa = math.sin(midAndle * DEG_TO_RAD),\n                ca = math.cos(midAndle * DEG_TO_RAD);\n\n            if (math.abs(sa) < 0.9) {\n                x += hw * -ca / math.abs(ca);\n            }\n\n            if (math.abs(ca) < 0.9) {\n                y += hh * -sa / math.abs(sa);\n            }\n\n            return new Box2D(x, y, x + width, y + height);\n        },\n\n        containsPoint: function(p) {\n            var ring = this,\n                c = ring.c,\n                ir = ring.ir,\n                r = ring.r,\n                startAngle = ring.startAngle,\n                endAngle = ring.startAngle + ring.angle,\n                dx = p.x - c.x,\n                dy = p.y - c.y,\n                vector = new Point2D(dx, dy),\n                startPoint = ring.point(startAngle),\n                startVector = new Point2D(startPoint.x - c.x, startPoint.y - c.y),\n                endPoint = ring.point(endAngle),\n                endVector = new Point2D(endPoint.x - c.x, endPoint.y - c.y),\n                dist = round(dx * dx + dy *dy, COORD_PRECISION);\n\n            return (startVector.equals(vector) || clockwise(startVector, vector)) &&\n                   !clockwise(endVector, vector) &&\n                   dist >= ir * ir && dist <= r * r;\n        },\n\n        getBBox: function() {\n            var ring = this,\n                box = new Box2D(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE),\n                sa = round(ring.startAngle % 360),\n                ea = round((sa + ring.angle) % 360),\n                innerRadius = ring.ir,\n                allAngles = [0, 90, 180, 270, sa, ea].sort(numericComparer),\n                saIndex = indexOf(sa, allAngles),\n                eaIndex = indexOf(ea, allAngles),\n                angles,\n                i,\n                point;\n\n            if (sa == ea) {\n                angles = allAngles;\n            } else {\n                if (saIndex < eaIndex) {\n                    angles = allAngles.slice(saIndex, eaIndex + 1);\n                } else {\n                    angles = [].concat(\n                        allAngles.slice(0, eaIndex + 1),\n                        allAngles.slice(saIndex, allAngles.length)\n                    );\n                }\n            }\n\n            for (i = 0; i < angles.length; i++) {\n                point = ring.point(angles[i]);\n                box.wrapPoint(point);\n                box.wrapPoint(point, innerRadius);\n            }\n\n            if (!innerRadius) {\n                box.wrapPoint(ring.c);\n            }\n\n            return box;\n        },\n\n        expand: function(value) {\n            this.r += value;\n            return this;\n        }\n    });\n\n    // TODO: Remove, looks like an alias\n    var Sector = Ring.extend({\n        init: function(center, radius, startAngle, angle) {\n            Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n        },\n\n        expand: function(value) {\n            return Ring.fn.expand.call(this, value);\n        },\n\n        clone: function() {\n            var sector = this;\n            return new Sector(sector.c, sector.r, sector.startAngle, sector.angle);\n        },\n\n        radius: function(newRadius) {\n            return Ring.fn.radius.call(this, newRadius);\n        },\n\n        point: function(angle) {\n            return Ring.fn.point.call(this, angle);\n        }\n    });\n\n    var ShapeBuilder = function() {};\n    ShapeBuilder.fn = ShapeBuilder.prototype = {\n        createRing: function (sector, options) {\n            var startAngle = sector.startAngle + 180;\n            var endAngle = sector.angle + startAngle;\n            var center = new geom.Point(sector.c.x, sector.c.y);\n            var radius = math.max(sector.r, 0);\n            var innerRadius = math.max(sector.ir, 0);\n            var arc = new geom.Arc(center, {\n                startAngle: startAngle,\n                endAngle: endAngle,\n                radiusX: radius,\n                radiusY: radius\n            });\n            var path = draw.Path.fromArc(arc, options).close();\n\n            if (innerRadius)  {\n                arc.radiusX = arc.radiusY = innerRadius;\n                var innerEnd = arc.pointAt(endAngle);\n                path.lineTo(innerEnd.x, innerEnd.y);\n                path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n            } else {\n                path.lineTo(center.x, center.y);\n            }\n\n            return path;\n        }\n    };\n\n    ShapeBuilder.current = new ShapeBuilder();\n\n    // View-Model primitives ==================================================\n    var ChartElement = Class.extend({\n        init: function(options) {\n            var element = this;\n            element.children = [];\n\n            element.options = deepExtend({}, element.options, options);\n        },\n\n        reflow: function(targetBox) {\n            var element = this,\n                children = element.children,\n                box,\n                i,\n                currentChild;\n\n            for (i = 0; i < children.length; i++) {\n                currentChild = children[i];\n\n                currentChild.reflow(targetBox);\n                box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n            }\n\n            element.box = box || targetBox;\n        },\n\n        destroy: function() {\n            var element = this,\n                children = element.children,\n                root = element.getRoot(),\n                i;\n\n            if (this.animation) {\n                this.animation.destroy();\n            }\n\n            for (i = 0; i < children.length; i++) {\n                children[i].destroy();\n            }\n        },\n\n        getRoot: function() {\n            var parent = this.parent;\n\n            return parent ? parent.getRoot() : null;\n        },\n\n        translateChildren: function(dx, dy) {\n            var element = this,\n                children = element.children,\n                childrenCount = children.length,\n                i;\n\n            for (i = 0; i < childrenCount; i++) {\n                children[i].box.translate(dx, dy);\n            }\n        },\n\n        append: function() {\n            append(this.children, arguments);\n\n            for (var i = 0; i < arguments.length; i++) {\n                arguments[i].parent = this;\n            }\n        },\n\n        renderVisual: function() {\n            if (this.options.visible === false) {\n                return;\n            }\n\n            this.createVisual();\n\n            if (this.visual) {\n                this.visual.chartElement = this;\n\n                if (this.parent) {\n                    this.parent.appendVisual(this.visual);\n                }\n            }\n\n            var children = this.children;\n            for (var i = 0; i < children.length; i++) {\n                children[i].renderVisual();\n            }\n\n            this.createAnimation();\n            this.renderComplete();\n        },\n\n        createVisual: function() {\n            this.visual = new dataviz.drawing.Group({\n                zIndex: this.options.zIndex,\n                visible: valueOrDefault(this.options.visible, true)\n            });\n        },\n\n        createAnimation: function() {\n            if (this.visual) {\n                this.animation = draw.Animation.create(\n                    this.visual, this.options.animation\n                );\n            }\n        },\n\n        appendVisual: function(childVisual) {\n            if (!childVisual.chartElement) {\n                childVisual.chartElement = this;\n            }\n\n            if (childVisual.options.noclip) {\n                this.clipRoot().visual.append(childVisual);\n            } else if (defined(childVisual.options.zIndex)) {\n                this.stackRoot().stackVisual(childVisual);\n            } else if (this.visual) {\n                this.visual.append(childVisual);\n            } else {\n                // Allow chart elements without visuals to\n                // pass through child visuals\n                this.parent.appendVisual(childVisual);\n            }\n        },\n\n        clipRoot: function() {\n            if (this.parent) {\n                return this.parent.clipRoot();\n            }\n\n            return this;\n        },\n\n        stackRoot: function() {\n            if (this.parent) {\n                return this.parent.stackRoot();\n            }\n\n            return this;\n        },\n\n        stackVisual: function(childVisual) {\n            var zIndex = childVisual.options.zIndex || 0;\n            var visuals = this.visual.children;\n            for (var pos = 0; pos < visuals.length; pos++) {\n                var sibling = visuals[pos];\n                var here = valueOrDefault(sibling.options.zIndex, 0);\n                if (here > zIndex) {\n                    break;\n                }\n            }\n\n            this.visual.insertAt(childVisual, pos);\n        },\n\n        traverse: function(callback) {\n            var children = this.children;\n\n            for (var i = 0; i < children.length; i++) {\n                var child = children[i];\n\n                callback(child);\n                if (child.traverse) {\n                    child.traverse(callback);\n                }\n            }\n        },\n\n        closest: function(match) {\n            var element = this;\n            var matched = false;\n\n            while (element && !matched) {\n                matched = match(element);\n\n                if (!matched) {\n                    element = element.parent;\n                }\n            }\n\n            if (matched) {\n                return element;\n            }\n        },\n\n        renderComplete: $.noop,\n\n        toggleHighlight: function(show) {\n            var highlight = this._highlight;\n            var options = this.options.highlight;\n\n            if (!this.createHighlight || (options && options.visible === false)) {\n                return;\n            }\n\n            if (!highlight) {\n                highlight = this._highlight = this.createHighlight({\n                    fill: {\n                        color: WHITE,\n                        opacity: 0.2\n                    },\n                    stroke : {\n                        color: WHITE,\n                        width: 1,\n                        opacity: 0.2\n                    }\n                });\n\n                highlight.options.zIndex = this.options.zIndex;\n                this.appendVisual(highlight);\n            }\n\n            highlight.visible(show);\n        },\n\n        createGradientOverlay: function(element, options, gradientOptions) {\n            var overlay = new draw.Path(deepExtend({\n                stroke: {\n                    color: NONE\n                },\n                fill: this.createGradient(gradientOptions),\n                closed: element.options.closed\n            }, options));\n            overlay.segments.elements(element.segments.elements());\n\n            return overlay;\n        },\n\n        createGradient: function(options) {\n            if (this.parent) {\n                return this.parent.createGradient(options);\n            }\n        }\n    });\n\n    var RootElement = ChartElement.extend({\n        init: function(options) {\n            var root = this;\n\n            root.gradients = {};\n\n            ChartElement.fn.init.call(root, options);\n        },\n\n        options: {\n            width: DEFAULT_WIDTH,\n            height: DEFAULT_HEIGHT,\n            background: WHITE,\n            border: {\n                color: BLACK,\n                width: 0\n            },\n            margin: getSpacing(5),\n            zIndex: -2\n        },\n\n        reflow: function() {\n            var root = this,\n                options = root.options,\n                children = root.children,\n                currentBox = new Box2D(0, 0, options.width, options.height);\n\n            root.box = currentBox.unpad(options.margin);\n\n            for (var i = 0; i < children.length; i++) {\n                children[i].reflow(currentBox);\n                currentBox = boxDiff(currentBox, children[i].box);\n            }\n        },\n\n        createVisual: function() {\n            this.visual = new draw.Group();\n            this.createBackground();\n        },\n\n        createBackground: function() {\n            var options = this.options;\n            var border = options.border || {};\n            var box = this.box.clone().pad(options.margin).unpad(border.width);\n\n            var background = draw.Path.fromRect(box.toRect(), {\n                stroke: {\n                    color: border.width ? border.color : \"\",\n                    width: border.width,\n                    dashType: border.dashType\n                },\n                fill: {\n                    color: options.background,\n                    opacity: options.opacity\n                },\n                zIndex: -10\n            });\n\n            this.visual.append(background);\n        },\n\n        getRoot: function() {\n            return this;\n        },\n\n        createGradient: function(options) {\n            var gradients = this.gradients;\n            var hashCode = util.objectKey(options);\n            var gradient = dataviz.Gradients[options.gradient];\n            var drawingGradient;\n            if (gradients[hashCode]) {\n                drawingGradient = gradients[hashCode];\n            } else {\n                var gradientOptions = deepExtend({}, gradient, options);\n                if (gradient.type == \"linear\") {\n                    drawingGradient = new draw.LinearGradient(gradientOptions);\n                } else {\n                    if (options.innerRadius) {\n                        gradientOptions.stops = innerRadialStops(gradientOptions);\n                    }\n                    drawingGradient = new draw.RadialGradient(gradientOptions);\n                    drawingGradient.supportVML = gradient.supportVML !== false;\n                }\n                gradients[hashCode] = drawingGradient;\n            }\n            return drawingGradient;\n        }\n    });\n\n    var BoxElement = ChartElement.extend({\n        options: {\n            align: LEFT,\n            vAlign: TOP,\n            margin: {},\n            padding: {},\n            border: {\n                color: BLACK,\n                width: 0\n            },\n            background: \"\",\n            shrinkToFit: false,\n            width: 0,\n            height: 0,\n            visible: true\n        },\n\n        reflow: function(targetBox) {\n            var element = this,\n                box,\n                contentBox,\n                options = element.options,\n                width = options.width,\n                height = options.height,\n                hasSetSize = width && height,\n                shrinkToFit = options.shrinkToFit,\n                margin = getSpacing(options.margin),\n                padding = getSpacing(options.padding),\n                borderWidth = options.border.width,\n                children = element.children,\n                i, item;\n\n            function reflowPaddingBox() {\n                element.align(targetBox, X, options.align);\n                element.align(targetBox, Y, options.vAlign);\n                element.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n            }\n\n            contentBox = targetBox.clone();\n            if (hasSetSize) {\n                contentBox.x2 = contentBox.x1 + width;\n                contentBox.y2 = contentBox.y1 + height;\n            }\n\n            if (shrinkToFit) {\n                contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n            }\n\n            ChartElement.fn.reflow.call(element, contentBox);\n\n            if (hasSetSize) {\n                box = element.box = Box2D(0, 0, width, height);\n            } else {\n                box = element.box;\n            }\n\n            if (shrinkToFit && hasSetSize) {\n                reflowPaddingBox();\n                contentBox = element.contentBox = element.paddingBox.clone().unpad(padding);\n            } else {\n                contentBox = element.contentBox = box.clone();\n                box.pad(padding).pad(borderWidth).pad(margin);\n                reflowPaddingBox();\n            }\n\n            element.translateChildren(\n                box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\n                box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n\n            for (i = 0; i < children.length; i++) {\n                item = children[i];\n                item.reflow(item.box);\n            }\n        },\n\n        align: function(targetBox, axis, alignment) {\n            var element = this,\n                box = element.box,\n                c1 = axis + 1,\n                c2 = axis + 2,\n                sizeFunc = axis === X ? WIDTH : HEIGHT,\n                size = box[sizeFunc]();\n\n            if (inArray(alignment, [LEFT, TOP])) {\n                box[c1] = targetBox[c1];\n                box[c2] = box[c1] + size;\n            } else if (inArray(alignment, [RIGHT, BOTTOM])) {\n                box[c2] = targetBox[c2];\n                box[c1] = box[c2] - size;\n            } else if (alignment == CENTER) {\n                box[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n                box[c2] = box[c1] + size;\n            }\n        },\n\n        hasBox: function() {\n            var options = this.options;\n            return options.border.width || options.background;\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var options = this.options;\n            if (options.visible && this.hasBox()) {\n                this.visual.append(draw.Path.fromRect(\n                    this.paddingBox.toRect(), this.visualStyle()\n                ));\n            }\n        },\n\n        visualStyle: function() {\n            var boxElement = this,\n                options = boxElement.options,\n                border = options.border || {};\n\n            return {\n                stroke: {\n                    width: border.width,\n                    color: border.color,\n                    opacity: valueOrDefault(border.opacity, options.opacity),\n                    dashType: border.dashType\n                },\n                fill: {\n                    color: options.background,\n                    opacity: options.opacity\n                },\n                cursor: options.cursor\n            };\n        }\n    });\n\n    var Text = ChartElement.extend({\n        init: function(content, options) {\n            var text = this;\n\n            ChartElement.fn.init.call(text, options);\n\n            text.content = content;\n\n            // Calculate size\n            text.reflow(Box2D());\n        },\n\n        options: {\n            font: DEFAULT_FONT,\n            color: BLACK,\n            align: LEFT,\n            vAlign: \"\"\n        },\n\n        reflow: function(targetBox) {\n            var text = this,\n                options = text.options,\n                size,\n                margin;\n\n            size = options.size =\n                measureText(text.content, { font: options.font });\n\n            text.baseline = size.baseline;\n\n            text.box = Box2D(targetBox.x1, targetBox.y1,\n                    targetBox.x1 + size.width, targetBox.y1 + size.height);\n        },\n\n        createVisual: function() {\n            var opt = this.options;\n\n            this.visual = new draw.Text(this.content, this.box.toRect().topLeft(), {\n                font: opt.font,\n                fill: { color: opt.color, opacity: opt.opacity },\n                cursor: opt.cursor\n            });\n        }\n    });\n\n    var FloatElement = ChartElement.extend({\n        init: function(options) {\n            ChartElement.fn.init.call(this, options);\n            this._initDirection();\n        },\n\n        _initDirection: function() {\n            var options = this.options;\n            if (options.vertical) {\n                this.groupAxis = X;\n                this.elementAxis = Y;\n                this.groupSizeField = WIDTH;\n                this.elementSizeField = HEIGHT;\n                this.groupSpacing = options.spacing;\n                this.elementSpacing = options.vSpacing;\n            } else {\n                this.groupAxis = Y;\n                this.elementAxis = X;\n                this.groupSizeField = HEIGHT;\n                this.elementSizeField = WIDTH;\n                this.groupSpacing = options.vSpacing;\n                this.elementSpacing = options.spacing;\n            }\n        },\n\n        options: {\n            vertical: true,\n            wrap: true,\n            vSpacing: 0,\n            spacing: 0\n        },\n\n        reflow: function(targetBox) {\n            this.box = targetBox.clone();\n            this.reflowChildren();\n        },\n\n        reflowChildren: function() {\n            var floatElement = this;\n            var box = floatElement.box;\n            var options = floatElement.options;\n            var elementSpacing = floatElement.elementSpacing;\n            var groupSpacing = floatElement.groupSpacing;\n\n            var elementAxis = floatElement.elementAxis;\n            var groupAxis = floatElement.groupAxis;\n            var elementSizeField = floatElement.elementSizeField;\n            var groupSizeField = floatElement.groupSizeField;\n\n            var groupOptions = floatElement.groupOptions();\n            var groups = groupOptions.groups;\n            var groupsCount = groups.length;\n\n            var groupsStart = box[groupAxis + 1] +\n                floatElement.alignStart(groupOptions.groupsSize, box[groupSizeField]());\n\n            var groupStart = groupsStart;\n            var elementStart;\n            var groupElementStart;\n\n            var group;\n            var groupElements;\n            var groupElementsCount;\n\n            var idx;\n            var groupIdx;\n\n            var element;\n            var elementBox;\n            var elementSize;\n\n            if (groupsCount) {\n                for (groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n                    group = groups[groupIdx];\n                    groupElements = group.groupElements;\n                    groupElementsCount = groupElements.length;\n                    elementStart = box[elementAxis + 1];\n                    for (idx = 0; idx < groupElementsCount; idx++) {\n                        element = groupElements[idx];\n                        elementSize = floatElement.elementSize(element);\n                        groupElementStart = groupStart +\n                            floatElement.alignStart(elementSize[groupSizeField], group.groupSize);\n\n                        elementBox = Box2D();\n                        elementBox[groupAxis + 1] = groupElementStart;\n                        elementBox[groupAxis + 2] = groupElementStart + elementSize[groupSizeField];\n                        elementBox[elementAxis + 1] = elementStart;\n                        elementBox[elementAxis + 2] = elementStart + elementSize[elementSizeField];\n\n                        element.reflow(elementBox);\n\n                        elementStart += elementSize[elementSizeField] + floatElement.elementSpacing;\n                    }\n                    groupStart += group.groupSize + floatElement.groupSpacing;\n                }\n                box[groupAxis + 1] = groupsStart;\n                box[groupAxis + 2] = groupsStart + groupOptions.groupsSize;\n                box[elementAxis + 2] = box[elementAxis + 1] + groupOptions.maxGroupElementsSize;\n            }\n        },\n\n        alignStart: function(size, maxSize) {\n            var start = 0;\n            var align = this.options.align;\n            if (align == RIGHT || align == BOTTOM) {\n                start = maxSize - size;\n            } else if (align == CENTER){\n                start = (maxSize - size) / 2;\n            }\n            return start;\n        },\n\n        groupOptions: function() {\n            var floatElement = this;\n            var box = floatElement.box;\n            var children = floatElement.children;\n            var childrenCount = children.length;\n            var elementSizeField = this.elementSizeField;\n            var groupSizeField = this.groupSizeField;\n            var elementSpacing = this.elementSpacing;\n            var groupSpacing = this.groupSpacing;\n            var maxSize = round(box[elementSizeField]());\n            var idx = 0;\n            var groupSize = 0;\n            var elementSize;\n            var element;\n            var groupElementsSize = 0;\n            var groupsSize = 0;\n            var groups = [];\n            var groupElements = [];\n            var maxGroupElementsSize = 0;\n\n            for (idx = 0; idx < childrenCount; idx++) {\n                element = children[idx];\n                if (!element.box) {\n                    element.reflow(box);\n                }\n\n                elementSize = this.elementSize(element);\n                if (floatElement.options.wrap && round(groupElementsSize + elementSpacing + elementSize[elementSizeField]) > maxSize) {\n                    groups.push({\n                        groupElements: groupElements,\n                        groupSize: groupSize,\n                        groupElementsSize: groupElementsSize\n                    });\n                    maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\n                    groupsSize += groupSpacing + groupSize;\n                    groupSize = 0;\n                    groupElementsSize = 0;\n                    groupElements = [];\n                }\n                groupSize = math.max(groupSize, elementSize[groupSizeField]);\n                if (groupElementsSize > 0) {\n                    groupElementsSize += elementSpacing;\n                }\n                groupElementsSize += elementSize[elementSizeField];\n                groupElements.push(element);\n            }\n\n            groups.push({\n                groupElements: groupElements,\n                groupSize: groupSize,\n                groupElementsSize: groupElementsSize\n            });\n            maxGroupElementsSize = math.max(maxGroupElementsSize, groupElementsSize);\n            groupsSize += groupSize;\n\n            return {\n                groups: groups,\n                groupsSize: groupsSize,\n                maxGroupElementsSize: maxGroupElementsSize\n            };\n        },\n\n        elementSize: function(element) {\n            return {\n                width: element.box.width(),\n                height: element.box.height()\n            };\n        },\n\n        createVisual: noop\n    });\n\n    var TextBox = BoxElement.extend({\n        ROWS_SPLIT_REGEX: /\\n|\\\\n/m,\n\n        init: function(content, options) {\n            var textbox = this;\n            textbox.content = content;\n\n            BoxElement.fn.init.call(textbox, options);\n\n            textbox._initContainer();\n\n            textbox.reflow(Box2D());\n        },\n\n        _initContainer: function() {\n            var textbox = this;\n            var options = textbox.options;\n            var rows = (textbox.content + \"\").split(textbox.ROWS_SPLIT_REGEX);\n            var floatElement = new FloatElement({vertical: true, align: options.align, wrap: false});\n            var textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\n            var hasBox = textbox.hasBox();\n            var text;\n            var rowIdx;\n\n            textbox.container = floatElement;\n            textbox.append(floatElement);\n\n            for (rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n                text = new Text(trim(rows[rowIdx]), textOptions);\n                floatElement.append(text);\n            }\n        },\n\n        reflow: function(targetBox) {\n            var textbox = this;\n            var options = textbox.options;\n            var align = options.align;\n            var rotation = options.rotation;\n            textbox.container.options.align = align;\n            BoxElement.fn.reflow.call(textbox, targetBox);\n            if (rotation) {\n                var margin = options.margin;\n                var box = textbox.box.unpad(margin);\n                textbox.normalBox = box.clone();\n                box.rotate(rotation);\n                box.pad(margin);\n                textbox.align(targetBox, X, align);\n                textbox.align(targetBox, Y, options.vAlign);\n            }\n        },\n\n        createVisual: function() {\n            var options = this.options;\n\n            if (!options.visible) {\n                return;\n            }\n\n            this.visual = new dataviz.drawing.Group({\n                transform: this.rotationTransform(),\n                zIndex: options.zIndex,\n                noclip: options.noclip\n            });\n\n            if (this.hasBox()) {\n                var box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n                this.visual.append(box);\n            }\n        },\n\n        rotationTransform: function() {\n            var rotation = this.options.rotation;\n            if (!rotation) {\n                return null;\n            }\n\n            var center = this.normalBox.center();\n            var cx = center.x;\n            var cy = center.y;\n            var boxCenter = this.box.center();\n\n            return geom.transform()\n                       .translate(boxCenter.x - cx, boxCenter.y - cy)\n                       .rotate(rotation, [cx, cy]);\n        },\n\n        rotationMatrix: function() {\n            var textbox = this;\n            var options = textbox.options;\n            var normalBox = textbox.normalBox;\n            var center = normalBox.center();\n            var cx = center.x;\n            var cy = center.y;\n            var boxCenter = textbox.box.center();\n            var offsetX = boxCenter.x - cx;\n            var offsetY = boxCenter.y - cy;\n            var matrix = Matrix.translate(offsetX, offsetY)\n                    .times(Matrix.rotate(options.rotation, cx, cy));\n\n            return matrix;\n        }\n    });\n\n    var Title = ChartElement.extend({\n        init: function(options) {\n            var title = this;\n            ChartElement.fn.init.call(title, options);\n\n            options = title.options;\n            title.append(\n                new TextBox(options.text, deepExtend({}, options, {\n                    vAlign: options.position\n                }))\n            );\n        },\n\n        options: {\n            color: BLACK,\n            position: TOP,\n            align: CENTER,\n            margin: getSpacing(5),\n            padding: getSpacing(5)\n        },\n\n        reflow: function(targetBox) {\n            var title = this;\n\n            ChartElement.fn.reflow.call(title, targetBox);\n            title.box.snapTo(targetBox, X);\n        }\n    });\n\n    Title.buildTitle = function(options, parent, defaultOptions) {\n        var title;\n\n        if (typeof options === \"string\") {\n            options = { text: options };\n        }\n\n        options = deepExtend({ visible: true }, defaultOptions, options);\n\n        if (options && options.visible && options.text) {\n            title = new Title(options);\n            parent.append(title);\n        }\n\n        return title;\n    };\n\n    var AxisLabel = TextBox.extend({\n        init: function(value, text, index, dataItem, options) {\n            var label = this;\n\n            label.text = text;\n            label.value = value;\n            label.index = index;\n            label.dataItem = dataItem;\n\n            TextBox.fn.init.call(label, text, options);\n        },\n\n        click: function(widget, e) {\n            var label = this;\n\n            widget.trigger(AXIS_LABEL_CLICK, {\n                element: $(e.target),\n                value: label.value,\n                text: label.text,\n                index: label.index,\n                dataItem: label.dataItem,\n                axis: label.parent.options\n            });\n        }\n    });\n\n    function createAxisTick(options, tickOptions) {\n        var tickX = options.tickX,\n            tickY = options.tickY,\n            position = options.position;\n\n        var tick = new draw.Path({\n            stroke: {\n                width: tickOptions.width,\n                color: tickOptions.color\n            }\n        });\n\n        if (options.vertical) {\n            tick.moveTo(tickX, position)\n                .lineTo(tickX + tickOptions.size, position);\n        } else {\n            tick.moveTo(position, tickY)\n                .lineTo(position, tickY + tickOptions.size);\n        }\n\n        alignPathToPixel(tick);\n\n        return tick;\n    }\n\n    function createAxisGridLine(options, gridLine) {\n        var lineStart = options.lineStart,\n            lineEnd = options.lineEnd,\n            position = options.position,\n            start, end;\n\n        var line = new draw.Path({\n            stroke: {\n                width: gridLine.width,\n                color: gridLine.color,\n                dashType: gridLine.dashType\n            }\n        });\n\n        if (options.vertical) {\n            line.moveTo(lineStart, position)\n                .lineTo(lineEnd, position);\n        } else {\n            line.moveTo(position, lineStart)\n                .lineTo(position, lineEnd);\n        }\n\n        alignPathToPixel(line);\n\n        return line;\n    }\n\n    var Axis = ChartElement.extend({\n        init: function(options) {\n            var axis = this;\n\n            ChartElement.fn.init.call(axis, options);\n\n            if (!axis.options.visible) {\n                axis.options = deepExtend({}, axis.options, {\n                    labels: {\n                        visible: false\n                    },\n                    line: {\n                        visible: false\n                    },\n                    margin: 0,\n                    majorTickSize: 0,\n                    minorTickSize: 0\n                });\n            }\n\n            axis.options.minorTicks = deepExtend({}, {\n                color: axis.options.line.color,\n                width: axis.options.line.width,\n                visible: axis.options.minorTickType != NONE\n            }, axis.options.minorTicks, {\n                size: axis.options.minorTickSize,\n                align: axis.options.minorTickType\n            });\n\n            axis.options.majorTicks = deepExtend({}, {\n                color: axis.options.line.color,\n                width: axis.options.line.width,\n                visible: axis.options.majorTickType != NONE\n            }, axis.options.majorTicks, {\n                size: axis.options.majorTickSize,\n                align: axis.options.majorTickType\n            });\n\n            axis.createLabels();\n            axis.createTitle();\n            axis.createNotes();\n        },\n\n        options: {\n            labels: {\n                visible: true,\n                rotation: 0,\n                mirror: false,\n                step: 1,\n                skip: 0\n            },\n            line: {\n                width: 1,\n                color: BLACK,\n                visible: true\n            },\n            title: {\n                visible: true,\n                position: CENTER\n            },\n            majorTicks: {\n                align: OUTSIDE,\n                size: 4,\n                skip: 0,\n                step: 1\n            },\n            minorTicks: {\n                align: OUTSIDE,\n                size: 3,\n                skip: 0,\n                step: 1\n            },\n            axisCrossingValue: 0,\n            majorTickType: OUTSIDE,\n            minorTickType: NONE,\n            majorGridLines: {\n                skip: 0,\n                step: 1\n            },\n            minorGridLines: {\n                visible: false,\n                width: 1,\n                color: BLACK,\n                skip: 0,\n                step: 1\n            },\n            // TODO: Move to line or labels options\n            margin: 5,\n            visible: true,\n            reverse: false,\n            justified: true,\n            notes: {\n                label: {\n                    text: \"\"\n                }\n            },\n\n            _alignLines: true\n        },\n\n        // abstract labelsCount(): Number\n        // abstract createAxisLabel(index, options): AxisLabel\n\n        createLabels: function() {\n            var axis = this,\n                options = axis.options,\n                align = options.vertical ? RIGHT : CENTER,\n                labelOptions = deepExtend({ }, options.labels, {\n                    align: align,\n                    zIndex: options.zIndex\n                }),\n                step = labelOptions.step;\n\n            axis.labels = [];\n\n            if (labelOptions.visible) {\n                var labelsCount = axis.labelsCount(),\n                    label,\n                    i;\n\n                for (i = labelOptions.skip; i < labelsCount; i += step) {\n                    label = axis.createAxisLabel(i, labelOptions);\n                    if (label) {\n                        axis.append(label);\n                        axis.labels.push(label);\n                    }\n                }\n            }\n        },\n\n        lineBox: function() {\n            var axis = this,\n                options = axis.options,\n                box = axis.box,\n                vertical = options.vertical,\n                labels = axis.labels,\n                labelSize = vertical ? HEIGHT : WIDTH,\n                justified = options.justified,\n                mirror = options.labels.mirror,\n                axisX = mirror ? box.x1 : box.x2,\n                axisY = mirror ? box.y2 : box.y1,\n                startMargin = 0,\n                endMargin = options.line.width;\n\n            if (justified && labels.length > 1) {\n                startMargin = labels[0].box[labelSize]() / 2;\n                endMargin = last(labels).box[labelSize]() / 2;\n            }\n\n            return vertical ?\n                Box2D(axisX, box.y1 + startMargin, axisX, box.y2 - endMargin) :\n                Box2D(box.x1 + startMargin, axisY, box.x2 - endMargin, axisY);\n        },\n\n        createTitle: function() {\n            var axis = this,\n                options = axis.options,\n                titleOptions = deepExtend({\n                    rotation: options.vertical ? -90 : 0,\n                    text: \"\",\n                    zIndex: 1\n                }, options.title),\n                title;\n\n            if (titleOptions.visible && titleOptions.text) {\n                title = new TextBox(titleOptions.text, titleOptions);\n                axis.append(title);\n                axis.title = title;\n            }\n        },\n\n        createNotes: function() {\n            var axis = this,\n                options = axis.options,\n                notes = options.notes,\n                items = notes.data || [],\n                noteTemplate, i, text, item, note;\n\n            axis.notes = [];\n\n            for (i = 0; i < items.length; i++) {\n                item = deepExtend({}, notes, items[i]);\n                item.value = axis.parseNoteValue(item.value);\n\n                note = new Note(item.value, item.label.text, null, null, null, item);\n\n                if (note.options.visible) {\n                    if (defined(note.options.position)) {\n                        if (options.vertical && !inArray(note.options.position, [LEFT, RIGHT])) {\n                            note.options.position = options.reverse ? LEFT : RIGHT;\n                        } else if (!options.vertical && !inArray(note.options.position, [TOP, BOTTOM])) {\n                            note.options.position = options.reverse ? BOTTOM : TOP;\n                        }\n                    } else {\n                        if (options.vertical) {\n                            note.options.position = options.reverse ? LEFT : RIGHT;\n                        } else {\n                            note.options.position = options.reverse ? BOTTOM : TOP;\n                        }\n                    }\n                    axis.append(note);\n                    axis.notes.push(note);\n                }\n            }\n        },\n\n        parseNoteValue: function(value) {\n            return value;\n        },\n\n        renderVisual: function() {\n            ChartElement.fn.renderVisual.call(this);\n\n            this.createPlotBands();\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            this.createBackground();\n            this.createLine();\n        },\n\n        gridLinesVisual: function() {\n            var gridLines = this._gridLines;\n            if (!gridLines) {\n                gridLines = this._gridLines = new draw.Group({\n                    zIndex: -2\n                });\n                this.appendVisual(this._gridLines);\n            }\n\n            return gridLines;\n        },\n\n        createTicks: function(lineGroup) {\n            var axis = this,\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                mirror = options.labels.mirror,\n                majorUnit = options.majorTicks.visible ? options.majorUnit : 0,\n                tickLineOptions= {\n                    // TODO\n                    // _alignLines: options._alignLines,\n                    vertical: options.vertical\n                },\n                start, end;\n\n            function render(tickPositions, tickOptions, skipUnit) {\n                var i, count = tickPositions.length;\n\n                if (tickOptions.visible) {\n                    for (i = tickOptions.skip; i < count; i += tickOptions.step) {\n                        if (defined(skipUnit) && (i % skipUnit === 0)) {\n                            continue;\n                        }\n\n                        tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n                        tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n                        tickLineOptions.position = tickPositions[i];\n\n                        lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n                    }\n                }\n            }\n\n            render(axis.getMajorTickPositions(), options.majorTicks);\n            render(axis.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n        },\n\n        createLine: function() {\n            var axis = this,\n                options = axis.options,\n                line = options.line,\n                lineBox = axis.lineBox(),\n                lineOptions;\n\n            if (line.width > 0 && line.visible) {\n                var path = new draw.Path({\n                    stroke: {\n                        width: line.width,\n                        color: line.color,\n                        dashType: line.dashType\n                    }\n\n                    /* TODO\n                    zIndex: line.zIndex,\n                    */\n                });\n\n                path.moveTo(lineBox.x1, lineBox.y1)\n                    .lineTo(lineBox.x2, lineBox.y2);\n\n                if (options._alignLines) {\n                    alignPathToPixel(path);\n                }\n\n                var group = this._lineGroup = new draw.Group();\n                group.append(path);\n\n                this.visual.append(group);\n                this.createTicks(group);\n            }\n        },\n\n        getActualTickSize: function () {\n            var axis = this,\n                options = axis.options,\n                tickSize = 0;\n\n            if (options.majorTicks.visible && options.minorTicks.visible) {\n                tickSize = math.max(options.majorTicks.size, options.minorTicks.size);\n            } else if (options.majorTicks.visible) {\n                tickSize = options.majorTicks.size;\n            } else if (options.minorTicks.visible) {\n                tickSize = options.minorTicks.size;\n            }\n\n            return tickSize;\n        },\n\n        createBackground: function() {\n            var axis = this,\n                options = axis.options,\n                background = options.background,\n                box = axis.box;\n\n            if (background) {\n                axis._backgroundPath = draw.Path.fromRect(box.toRect(), {\n                    fill: {\n                        color: background\n                    },\n                    stroke: null\n                });\n\n                this.visual.append(axis._backgroundPath);\n            }\n        },\n\n        createPlotBands: function() {\n            var axis = this,\n                options = axis.options,\n                plotBands = options.plotBands || [],\n                vertical = options.vertical,\n                plotArea = axis.plotArea,\n                slotX, slotY, from, to;\n\n            if (plotBands.length === 0) {\n                return;\n            }\n\n            var group = this._plotbandGroup = new draw.Group({\n                zIndex: -1\n            });\n\n            var range = this.range();\n            $.each(plotBands, function(i, item) {\n                from = valueOrDefault(item.from, MIN_VALUE);\n                to = valueOrDefault(item.to, MAX_VALUE);\n                var element = [];\n\n                if (isInRange(from, range) || isInRange(to, range)) {\n                    if (vertical) {\n                        slotX = plotArea.axisX.lineBox();\n                        slotY = axis.getSlot(item.from, item.to, true);\n                    } else {\n                        slotX = axis.getSlot(item.from, item.to, true);\n                        slotY = plotArea.axisY.lineBox();\n                    }\n\n                    var bandRect = new geom.Rect(\n                        [slotX.x1, slotY.y1],\n                        [slotX.width(), slotY.height()]\n                    );\n\n                    var path = draw.Path.fromRect(bandRect, {\n                        fill: {\n                            color: item.color,\n                            opacity: item.opacity\n                        },\n                        stroke: null\n                    });\n\n                    group.append(path);\n                }\n            });\n\n            axis.appendVisual(group);\n        },\n\n        createGridLines: function(altAxis) {\n            var axis = this,\n                options = axis.options,\n                axisLineVisible = altAxis.options.line.visible,\n                majorGridLines = options.majorGridLines,\n                majorUnit = majorGridLines.visible ? options.majorUnit : 0,\n                vertical = options.vertical,\n                lineBox = altAxis.lineBox(),\n                linePos = lineBox[vertical ? \"y1\" : \"x1\"],\n                lineOptions = {\n                    lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n                    lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n                    vertical: vertical\n                },\n                pos, majorTicks = [];\n\n            var container = this.gridLinesVisual();\n            function render(tickPositions, gridLine, skipUnit) {\n                var count = tickPositions.length,\n                    i;\n\n                if (gridLine.visible) {\n                    for (i = gridLine.skip; i < count; i += gridLine.step) {\n                        pos = round(tickPositions[i]);\n                        if (!inArray(pos, majorTicks)) {\n                            if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n                                lineOptions.position = pos;\n                                container.append(createAxisGridLine(lineOptions, gridLine));\n\n                                majorTicks.push(pos);\n                            }\n                        }\n                    }\n                }\n            }\n\n            render(axis.getMajorTickPositions(), options.majorGridLines);\n            render(axis.getMinorTickPositions(), options.minorGridLines, majorUnit / options.minorUnit);\n\n            return container.children;\n        },\n\n        reflow: function(box) {\n            var axis = this,\n                options = axis.options,\n                vertical = options.vertical,\n                labels = axis.labels,\n                count = labels.length,\n                space = axis.getActualTickSize() + options.margin,\n                maxLabelHeight = 0,\n                maxLabelWidth = 0,\n                title = axis.title,\n                label, i;\n\n            for (i = 0; i < count; i++) {\n                label = labels[i];\n                maxLabelHeight = math.max(maxLabelHeight, label.box.height());\n                maxLabelWidth = math.max(maxLabelWidth, label.box.width());\n            }\n\n            if (title) {\n                if (vertical) {\n                    maxLabelWidth += title.box.width();\n                } else {\n                    maxLabelHeight += title.box.height();\n                }\n            }\n\n            if (vertical) {\n                axis.box = Box2D(\n                    box.x1, box.y1,\n                    box.x1 + maxLabelWidth + space, box.y2\n                );\n            } else {\n                axis.box = Box2D(\n                    box.x1, box.y1,\n                    box.x2, box.y1 + maxLabelHeight + space\n                );\n            }\n\n            axis.arrangeTitle();\n            axis.arrangeLabels();\n            axis.arrangeNotes();\n        },\n\n        arrangeLabels: function() {\n            var axis = this,\n                options = axis.options,\n                labels = axis.labels,\n                labelsBetweenTicks = !options.justified,\n                vertical = options.vertical,\n                lineBox = axis.lineBox(),\n                mirror = options.labels.mirror,\n                tickPositions = axis.getMajorTickPositions(),\n                labelOffset = axis.getActualTickSize()  + options.margin,\n                labelBox, labelY, i;\n\n            for (i = 0; i < labels.length; i++) {\n                var label = labels[i],\n                    tickIx = label.index,\n                    labelSize = vertical ? label.box.height() : label.box.width(),\n                    labelPos = tickPositions[tickIx] - (labelSize / 2),\n                    firstTickPosition, nextTickPosition, middle, labelX;\n\n                if (vertical) {\n                    if (labelsBetweenTicks) {\n                        firstTickPosition = tickPositions[tickIx];\n                        nextTickPosition = tickPositions[tickIx + 1];\n\n                        middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n                        labelPos = middle - (labelSize / 2);\n                    }\n\n                    labelX = lineBox.x2;\n\n                    if (mirror) {\n                        labelX += labelOffset;\n                    } else {\n                        labelX -= labelOffset + label.box.width();\n                    }\n\n                    labelBox = label.box.move(labelX, labelPos);\n                } else {\n                    if (labelsBetweenTicks) {\n                        firstTickPosition = tickPositions[tickIx];\n                        nextTickPosition = tickPositions[tickIx + 1];\n                    } else {\n                        firstTickPosition = labelPos;\n                        nextTickPosition = labelPos + labelSize;\n                    }\n\n                    labelY = lineBox.y1;\n\n                    if (mirror) {\n                        labelY -= labelOffset + label.box.height();\n                    } else {\n                        labelY += labelOffset;\n                    }\n\n                    labelBox = Box2D(firstTickPosition, labelY,\n                                    nextTickPosition, labelY + label.box.height());\n                }\n\n                label.reflow(labelBox);\n            }\n        },\n\n        arrangeTitle: function() {\n            var axis = this,\n                options = axis.options,\n                mirror = options.labels.mirror,\n                vertical = options.vertical,\n                title = axis.title;\n\n            if (title) {\n                if (vertical) {\n                    title.options.align = mirror ? RIGHT : LEFT;\n                    title.options.vAlign = title.options.position;\n                } else {\n                    title.options.align = title.options.position;\n                    title.options.vAlign = mirror ? TOP : BOTTOM;\n                }\n\n                title.reflow(axis.box);\n            }\n        },\n\n        arrangeNotes: function() {\n            var axis = this,\n                i, item, slot, value;\n\n            for (i = 0; i < axis.notes.length; i++) {\n                item = axis.notes[i];\n                value = item.options.value;\n                if (defined(value)) {\n                    if (axis.shouldRenderNote(value)) {\n                        item.show();\n                    } else {\n                        item.hide();\n                    }\n\n                    slot = axis.getSlot(value);\n                } else {\n                    item.hide();\n                }\n\n                item.reflow(slot || axis.lineBox());\n            }\n        },\n\n        alignTo: function(secondAxis) {\n            var axis = this,\n                lineBox = secondAxis.lineBox(),\n                vertical = axis.options.vertical,\n                pos = vertical ? Y : X;\n\n            axis.box.snapTo(lineBox, pos);\n            if (vertical) {\n                axis.box.shrink(0, axis.lineBox().height() - lineBox.height());\n            } else {\n                axis.box.shrink(axis.lineBox().width() - lineBox.width(), 0);\n            }\n            axis.box[pos + 1] -= axis.lineBox()[pos + 1] - lineBox[pos + 1];\n            axis.box[pos + 2] -= axis.lineBox()[pos + 2] - lineBox[pos + 2];\n        },\n\n        axisLabelText: function(value, dataItem, options) {\n            var text = value;\n\n            if (options.template) {\n                var tmpl = template(options.template);\n                text = tmpl({ value: value, dataItem: dataItem, format: options.format, culture: options.culture });\n            } else if (options.format) {\n                if (options.format.match(FORMAT_REGEX)) {\n                    text = kendo.format(options.format, value);\n                } else {\n                    text = kendo.toString(value, options.format, options.culture);\n                }\n            }\n\n            return text;\n        }\n    });\n\n    var Note = BoxElement.extend({\n        init: function(value, text, dataItem, category, series, options) {\n            var note = this;\n\n            BoxElement.fn.init.call(note, options);\n            note.value = value;\n            note.text = text;\n            note.dataItem = dataItem;\n            note.category = category;\n            note.series = series;\n\n            note.render();\n        },\n\n        options: {\n            icon: {\n                visible: true,\n                type: CIRCLE\n            },\n            label: {\n                position: INSIDE,\n                visible: true,\n                align: CENTER,\n                vAlign: CENTER\n            },\n            line: {\n                visible: true\n            },\n            visible: true,\n            position: TOP,\n            zIndex: 2\n        },\n\n        hide: function() {\n            this.options.visible = false;\n        },\n\n        show: function() {\n            this.options.visible = true;\n        },\n\n        render: function() {\n            var note = this,\n                options = note.options,\n                label = options.label,\n                text = note.text,\n                icon = options.icon,\n                size = icon.size,\n                box = Box2D(),\n                marker, width, height, noteTemplate;\n\n            if (options.visible) {\n                if (defined(label) && label.visible) {\n                    if (label.template) {\n                        noteTemplate = template(label.template);\n                        text = noteTemplate({\n                            dataItem: note.dataItem,\n                            category: note.category,\n                            value: note.value,\n                            text: text,\n                            series: note.series\n                        });\n                    } else if (label.format) {\n                        text = autoFormat(label.format, text);\n                    }\n\n                    note.label = new TextBox(text, deepExtend({}, label));\n\n                    if (label.position === INSIDE) {\n                        if (icon.type === CIRCLE) {\n                            size = math.max(note.label.box.width(), note.label.box.height());\n                        } else {\n                            width = note.label.box.width();\n                            height = note.label.box.height();\n                        }\n                        box.wrap(note.label.box);\n                    }\n                }\n\n                icon.width = width || size;\n                icon.height = height || size;\n\n                marker = new ShapeElement(deepExtend({}, icon));\n\n                note.marker = marker;\n                note.append(marker);\n\n                if (note.label) {\n                    note.append(note.label);\n                }\n\n                marker.reflow(Box2D());\n                note.wrapperBox = box.wrap(marker.box);\n            }\n        },\n\n        reflow: function(targetBox) {\n            var note = this,\n                options = note.options,\n                center = targetBox.center(),\n                wrapperBox = note.wrapperBox,\n                length = options.line.length,\n                position = options.position,\n                label = note.label,\n                marker = note.marker,\n                lineStart, box, contentBox;\n\n            // TODO: Review\n            if (options.visible) {\n                if (inArray(position, [LEFT, RIGHT])) {\n                    if (position === LEFT) {\n                        contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n\n                        if (options.line.visible) {\n                            lineStart = [math.floor(targetBox.x1), center.y];\n                            note.linePoints = [\n                                lineStart,\n                                [math.floor(contentBox.x2), center.y]\n                            ];\n                            box = contentBox.clone().wrapPoint(lineStart);\n                        }\n                    } else {\n                        contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n\n                        if (options.line.visible) {\n                            lineStart = [math.floor(targetBox.x2), center.y];\n                            note.linePoints = [\n                                lineStart,\n                                [math.floor(contentBox.x1), center.y]\n                            ];\n                            box = contentBox.clone().wrapPoint(lineStart);\n                        }\n                    }\n                } else {\n                    if (position === BOTTOM) {\n                        contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n\n                        if (options.line.visible) {\n                            lineStart = [math.floor(center.x), math.floor(targetBox.y2)];\n                            note.linePoints = [\n                                lineStart,\n                                [math.floor(center.x), math.floor(contentBox.y1)]\n                            ];\n                            box = contentBox.clone().wrapPoint(lineStart);\n                        }\n                    } else {\n                        contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n\n                        if (options.line.visible) {\n                            lineStart = [math.floor(center.x), math.floor(targetBox.y1)];\n                            note.linePoints = [\n                                lineStart,\n                                [math.floor(center.x), math.floor(contentBox.y2)]\n                            ];\n                            box = contentBox.clone().wrapPoint(lineStart);\n                        }\n                    }\n                }\n\n                if (marker) {\n                    marker.reflow(contentBox);\n                }\n\n                if (label) {\n                    label.reflow(contentBox);\n                    if (marker) {\n                        if (options.label.position === OUTSIDE) {\n                            label.box.alignTo(marker.box, position);\n                        }\n                        label.reflow(label.box);\n                    }\n                }\n                note.contentBox = contentBox;\n                note.box = box || contentBox;\n            }\n        },\n\n        createVisual: function() {\n            BoxElement.fn.createVisual.call(this);\n\n            if (this.options.visible) {\n                this.createLine();\n            }\n        },\n\n        createLine: function() {\n            var options = this.options.line;\n\n            if (this.linePoints) {\n                var path = draw.Path.fromPoints(this.linePoints, {\n                    stroke: {\n                        color: options.color,\n                        width: options.width,\n                        dashType: options.dashType\n                    }\n                });\n\n                this.visual.append(path);\n            }\n        },\n\n        click: function(widget, e) {\n            var args = this.eventArgs(e);\n\n            if (!widget.trigger(NOTE_CLICK, args)) {\n                e.preventDefault();\n            }\n        },\n\n        hover: function(widget, e) {\n            var args = this.eventArgs(e);\n\n            if (!widget.trigger(NOTE_HOVER, args)) {\n                e.preventDefault();\n            }\n        },\n\n        leave: function(widget) {\n            widget._unsetActivePoint();\n        },\n\n        eventArgs: function(e) {\n            var note = this,\n                options = note.options;\n\n            return {\n                element: $(e.target),\n                text: defined(options.label) ? options.label.text : \"\",\n                dataItem: note.dataItem,\n                series: note.series,\n                value: note.value,\n                category: note.category\n            };\n        }\n    });\n\n    var ShapeElement = BoxElement.extend({\n        options: {\n            type: CIRCLE,\n            align: CENTER,\n            vAlign: CENTER\n        },\n\n        getElement: function() {\n            var marker = this,\n                options = marker.options,\n                type = options.type,\n                rotation = options.rotation,\n                box = marker.paddingBox,\n                element,\n                center = box.center(),\n                halfWidth = box.width() / 2,\n                points,\n                i;\n\n            if (!options.visible || !marker.hasBox())  {\n                return;\n            }\n\n            var style = marker.visualStyle();\n\n            if (type === CIRCLE) {\n                element = new draw.Circle(\n                    new geom.Circle([\n                        round(box.x1 + halfWidth, COORD_PRECISION),\n                        round(box.y1 + box.height() / 2, COORD_PRECISION)\n                    ], halfWidth),\n                    style\n                );\n            }  else if (type === TRIANGLE) {\n                element = draw.Path.fromPoints([\n                    [box.x1 + halfWidth, box.y1],\n                    [box.x1, box.y2],\n                    [box.x2, box.y2]\n                ], style).close();\n            } else if (type === CROSS) {\n                element = new draw.MultiPath(style);\n\n                element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n                element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n            } else {\n                element = draw.Path.fromRect(box.toRect(), style);\n            }\n\n            if (rotation) {\n                element.transform(geom.transform()\n                    .rotate(-rotation, [center.x, center.y])\n                );\n            }\n\n            element.options.zIndex = this.options.zIndex;\n            return element;\n        },\n\n        createVisual: function() {\n            this.visual = this.getElement();\n        }\n    });\n\n    var NumericAxis = Axis.extend({\n        init: function(seriesMin, seriesMax, options) {\n            var axis = this,\n                defaultOptions = axis.initDefaults(seriesMin, seriesMax, options);\n\n            Axis.fn.init.call(axis, defaultOptions);\n        },\n\n        startValue: function() {\n            return 0;\n        },\n\n        options: {\n            type: \"numeric\",\n            min: 0,\n            max: 1,\n            vertical: true,\n            majorGridLines: {\n                visible: true,\n                width: 1,\n                color: BLACK\n            },\n            zIndex: 1\n        },\n\n        initDefaults: function(seriesMin, seriesMax, options) {\n            var axis = this,\n                narrowRange = options.narrowRange,\n                autoMin = axis.autoAxisMin(seriesMin, seriesMax, narrowRange),\n                autoMax = axis.autoAxisMax(seriesMin, seriesMax, narrowRange),\n                majorUnit = autoMajorUnit(autoMin, autoMax),\n                autoOptions = {\n                    majorUnit: majorUnit\n                },\n                userSetLimits;\n\n            if (options.roundToMajorUnit !== false) {\n                if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1/3)) {\n                    autoMin -= majorUnit;\n                }\n\n                if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1/3)) {\n                    autoMax += majorUnit;\n                }\n            }\n\n            autoOptions.min = floor(autoMin, majorUnit);\n            autoOptions.max = ceil(autoMax, majorUnit);\n\n            if (options) {\n                userSetLimits = defined(options.min) || defined(options.max);\n                if (userSetLimits) {\n                    if (options.min === options.max) {\n                        if (options.min > 0) {\n                            options.min = 0;\n                        } else {\n                            options.max = 1;\n                        }\n                    }\n                }\n\n                if (options.majorUnit) {\n                    autoOptions.min = floor(autoOptions.min, options.majorUnit);\n                    autoOptions.max = ceil(autoOptions.max, options.majorUnit);\n                } else if (userSetLimits) {\n                    options = deepExtend(autoOptions, options);\n\n                    // Determine an auto major unit after min/max have been set\n                    autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n                }\n            }\n\n            autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n\n            return deepExtend(autoOptions, options);\n        },\n\n        range: function() {\n            var options = this.options;\n            return { min: options.min, max: options.max };\n        },\n\n        autoAxisMax: function(min, max, narrow) {\n            var axisMax,\n                diff;\n\n            if (!min && !max) {\n                return 1;\n            }\n\n            if (min <= 0 && max <= 0) {\n                max = min == max ? 0 : max;\n\n                diff = math.abs((max - min) / max);\n                if(!narrow && diff > ZERO_THRESHOLD) {\n                    return 0;\n                }\n\n                axisMax = math.min(0, max - ((min - max) / 2));\n            } else {\n                min = min == max ? 0 : min;\n                axisMax = max;\n            }\n\n            return axisMax;\n        },\n\n        autoAxisMin: function(min, max, narrow) {\n            var axisMin,\n                diff;\n\n            if (!min && !max) {\n                return 0;\n            }\n\n            if (min >= 0 && max >= 0) {\n                min = min == max ? 0 : min;\n\n                diff = (max - min) / max;\n                if(!narrow && diff > ZERO_THRESHOLD) {\n                    return 0;\n                }\n\n                axisMin = math.max(0, min - ((max - min) / 2));\n            } else {\n                max = min == max ? 0 : max;\n                axisMin = min;\n            }\n\n            return axisMin;\n        },\n\n        getDivisions: function(stepValue) {\n            if (stepValue === 0) {\n                return 1;\n            }\n\n            var options = this.options,\n                range = options.max - options.min;\n\n            return math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n        },\n\n        getTickPositions: function(unit, skipUnit) {\n            var axis = this,\n                options = axis.options,\n                vertical = options.vertical,\n                reverse = options.reverse,\n                lineBox = axis.lineBox(),\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                range = options.max - options.min,\n                scale = lineSize / range,\n                step = unit * scale,\n                skipStep = 0,\n                divisions = axis.getDivisions(unit),\n                dir = (vertical ? -1 : 1) * (reverse ? -1 : 1),\n                startEdge = dir === 1 ? 1 : 2,\n                pos = lineBox[(vertical ? Y : X) + startEdge],\n                positions = [],\n                i;\n\n            if (skipUnit) {\n                skipStep = skipUnit / unit;\n            }\n\n            for (i = 0; i < divisions; i++) {\n                if (i % skipStep !== 0) {\n                    positions.push(round(pos, COORD_PRECISION));\n                }\n\n                pos = pos + step * dir;\n            }\n\n            return positions;\n        },\n\n        getMajorTickPositions: function() {\n            var axis = this;\n\n            return axis.getTickPositions(axis.options.majorUnit);\n        },\n\n        getMinorTickPositions: function() {\n            var axis = this;\n\n            return axis.getTickPositions(axis.options.minorUnit);\n        },\n\n        getSlot: function(a, b, limit) {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                valueAxis = vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                dir = reverse ? -1 : 1,\n                step = dir * (lineSize / (options.max - options.min)),\n                p1,\n                p2,\n                slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n\n            if (!defined(a)) {\n                a = b || 0;\n            }\n\n            if (!defined(b)) {\n                b = a || 0;\n            }\n\n            if (limit) {\n                a = math.max(math.min(a, options.max), options.min);\n                b = math.max(math.min(b, options.max), options.min);\n            }\n\n            if (vertical) {\n                p1 = options.max - math.max(a, b);\n                p2 = options.max - math.min(a, b);\n            } else {\n                p1 = math.min(a, b) - options.min;\n                p2 = math.max(a, b) - options.min;\n            }\n\n            slotBox[valueAxis + 1] = math.max(math.min(lineStart + step * (reverse ? p2 : p1), COORDINATE_LIMIT), -COORDINATE_LIMIT);\n            slotBox[valueAxis + 2] = math.max(math.min(lineStart + step * (reverse ? p1 : p2), COORDINATE_LIMIT), -COORDINATE_LIMIT);\n\n            return slotBox;\n        },\n\n        getValue: function(point) {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                max = options.max * 1,\n                min = options.min * 1,\n                valueAxis = vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                dir = reverse ? -1 : 1,\n                offset = dir * (point[valueAxis] - lineStart),\n                step = (max - min) / lineSize,\n                valueOffset = offset * step,\n                value;\n\n            if (offset < 0 || offset > lineSize) {\n                return null;\n            }\n\n            value = vertical ?\n                    max - valueOffset :\n                    min + valueOffset;\n\n            return round(value, DEFAULT_PRECISION);\n        },\n\n        translateRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                vertical = options.vertical,\n                reverse = options.reverse,\n                size = vertical ? lineBox.height() : lineBox.width(),\n                range = options.max - options.min,\n                scale = size / range,\n                offset = round(delta / scale, DEFAULT_PRECISION);\n\n            if ((vertical || reverse) && !(vertical && reverse )) {\n                offset = -offset;\n            }\n\n            return {\n                min: options.min + offset,\n                max: options.max + offset\n            };\n        },\n\n        scaleRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                offset = -delta * options.majorUnit;\n\n            return {\n                min: options.min - offset,\n                max: options.max + offset\n            };\n        },\n\n        labelsCount: function() {\n            return this.getDivisions(this.options.majorUnit);\n        },\n\n        createAxisLabel: function(index, labelOptions) {\n            var axis = this,\n                options = axis.options,\n                value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION),\n                text = axis.axisLabelText(value, null, labelOptions);\n\n            return new AxisLabel(value, text, index, null, labelOptions);\n        },\n\n        shouldRenderNote: function(value) {\n            var range = this.range();\n            return range.min <= value && value <= range.max;\n        }\n    });\n\n    var LogarithmicAxis = Axis.extend({\n        init: function(seriesMin, seriesMax, options) {\n            this.options = this._initOptions(seriesMin, seriesMax, options);\n            Axis.fn.init.call(this, options);\n        },\n\n        startValue: function() {\n            return this.options.min;\n        },\n\n        options: {\n            type: \"log\",\n            majorUnit: 10,\n            minorUnit: 1,\n            axisCrossingValue: 1,\n            vertical: true,\n            majorGridLines: {\n                visible: true,\n                width: 1,\n                color: BLACK\n            },\n            zIndex: 1\n        },\n\n        getSlot: function(a, b, limit) {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                valueAxis = vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                dir = reverse ? -1 : 1,\n                base = options.majorUnit,\n                logMin = axis.logMin,\n                logMax = axis.logMax,\n                step = dir * (lineSize / (logMax - logMin)),\n                p1, p2,\n                slotBox = new Box2D(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n\n            if (!defined(a)) {\n                a = b || 1;\n            }\n\n            if (!defined(b)) {\n                b = a || 1;\n            }\n\n            if(a <= 0 || b <= 0) {\n                return;\n            }\n\n            if (limit) {\n                a = math.max(math.min(a, options.max), options.min);\n                b = math.max(math.min(b, options.max), options.min);\n            }\n\n            a = log(a, base);\n            b = log(b, base);\n\n            if (vertical) {\n                p1 = logMax - math.max(a, b);\n                p2 = logMax - math.min(a, b);\n            } else {\n                p1 = math.min(a, b) - logMin;\n                p2 = math.max(a, b) - logMin;\n            }\n\n            slotBox[valueAxis + 1] = lineStart + step * (reverse ? p2 : p1);\n            slotBox[valueAxis + 2] = lineStart + step * (reverse ? p1 : p2);\n\n            return slotBox;\n        },\n\n        getValue: function(point) {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                lineBox = axis.lineBox(),\n                base = options.majorUnit,\n                logMin = axis.logMin,\n                logMax = axis.logMax,\n                dir = vertical === reverse ? 1 : -1,\n                startEdge = dir === 1 ? 1 : 2,\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                step = ((logMax - logMin) / lineSize),\n                valueAxis = vertical ? Y : X,\n                lineStart = lineBox[valueAxis + startEdge],\n                offset = dir * (point[valueAxis] - lineStart),\n                valueOffset = offset * step,\n                value;\n\n            if (offset < 0 || offset > lineSize) {\n                return null;\n            }\n\n            value = logMin + valueOffset;\n\n            return round(math.pow(base, value), DEFAULT_PRECISION);\n        },\n\n        range: function() {\n            var options = this.options;\n            return { min: options.min, max: options.max };\n        },\n\n        scaleRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                base = options.majorUnit,\n                offset = -delta;\n\n            return {\n                min: math.pow(base, axis.logMin - offset),\n                max: math.pow(base, axis.logMax + offset)\n            };\n        },\n\n        translateRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                base = options.majorUnit,\n                lineBox = axis.lineBox(),\n                vertical = options.vertical,\n                reverse = options.reverse,\n                size = vertical ? lineBox.height() : lineBox.width(),\n                logMin = axis.logMin,\n                logMax = axis.logMax,\n                scale = size / (axis.logMax - axis.logMin),\n                offset = round(delta / scale, DEFAULT_PRECISION);\n\n            if ((vertical || reverse) && !(vertical && reverse )) {\n                offset = -offset;\n            }\n\n            return {\n                min: math.pow(base, axis.logMin + offset),\n                max: math.pow(base, axis.logMax + offset)\n            };\n        },\n\n        labelsCount: function() {\n            var axis = this,\n                floorMax = math.floor(axis.logMax),\n                count = math.floor(floorMax - axis.logMin) + 1;\n\n            return count;\n        },\n\n        getMajorTickPositions: function() {\n            var axis = this,\n                ticks = [];\n\n            axis.traverseMajorTicksPositions(function(position) {\n                ticks.push(position);\n            }, {step: 1, skip: 0});\n            return ticks;\n        },\n\n        createTicks: function(lineGroup) {\n            var axis = this,\n                ticks = [],\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                mirror = options.labels.mirror,\n                majorTicks = options.majorTicks,\n                minorTicks = options.minorTicks,\n                tickLineOptions= {\n                    // TODO\n                    // _alignLines: options._alignLines,\n                    vertical: options.vertical\n                },\n                start, end;\n\n            function render(tickPosition, tickOptions) {\n                tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n                tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n                tickLineOptions.position = tickPosition;\n\n                lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n            }\n\n            if (majorTicks.visible) {\n                axis.traverseMajorTicksPositions(render, majorTicks);\n            }\n\n            if (minorTicks.visible) {\n                axis.traverseMinorTicksPositions(render, minorTicks);\n            }\n\n            return ticks;\n        },\n\n        createGridLines: function(altAxis) {\n            var axis = this,\n                options = axis.options,\n                axisLineVisible = altAxis.options.line.visible,\n                majorGridLines = options.majorGridLines,\n                minorGridLines = options.minorGridLines,\n                vertical = options.vertical,\n                lineBox = altAxis.lineBox(),\n                lineOptions = {\n                    lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n                    lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n                    vertical: vertical\n                },\n                pos, majorTicks = [];\n\n            var container = this.gridLinesVisual();\n            function render(tickPosition, gridLine) {\n                if (!inArray(tickPosition, majorTicks)) {\n                    lineOptions.position = tickPosition;\n                    container.append(createAxisGridLine(lineOptions, gridLine));\n\n                    majorTicks.push(tickPosition);\n                }\n            }\n\n            if (majorGridLines.visible) {\n                axis.traverseMajorTicksPositions(render, majorGridLines);\n            }\n\n            if (minorGridLines.visible) {\n                axis.traverseMinorTicksPositions(render, minorGridLines);\n            }\n\n            return container.children;\n        },\n\n        traverseMajorTicksPositions: function(callback, tickOptions) {\n            var axis = this,\n                lineOptions = axis._lineOptions(),\n                lineStart = lineOptions.lineStart,\n                step = lineOptions.step,\n                logMin = axis.logMin,\n                logMax = axis.logMax,\n                power,\n                position;\n\n            for (power = math.ceil(logMin) + tickOptions.skip; power <= logMax; power+= tickOptions.step) {\n                position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n                callback(position, tickOptions);\n            }\n        },\n\n        traverseMinorTicksPositions: function(callback, tickOptions) {\n            var axis = this,\n                options = axis.options,\n                lineOptions = axis._lineOptions(),\n                lineStart = lineOptions.lineStart,\n                lineStep = lineOptions.step,\n                base = options.majorUnit,\n                logMin = axis.logMin,\n                logMax = axis.logMax,\n                start = math.floor(logMin),\n                max = options.max,\n                min = options.min,\n                minorUnit = options.minorUnit,\n                power,\n                value,\n                position,\n                minorOptions;\n\n            for (power = start; power < logMax; power++) {\n                minorOptions = axis._minorIntervalOptions(power);\n                for(var idx = tickOptions.skip; idx < minorUnit; idx+= tickOptions.step) {\n                    value = minorOptions.value + idx * minorOptions.minorStep;\n                    if (value > max) {\n                        break;\n                    }\n                    if (value >= min) {\n                        position = round(lineStart + lineStep * (log(value, base) - logMin), DEFAULT_PRECISION);\n                        callback(position, tickOptions);\n                    }\n                }\n            }\n        },\n\n        createAxisLabel: function(index, labelOptions) {\n            var axis = this,\n                options = axis.options,\n                power = math.ceil(axis.logMin + index),\n                value = Math.pow(options.majorUnit, power),\n                text = axis.axisLabelText(value, null, labelOptions);\n\n            return new AxisLabel(value, text, index, null, labelOptions);\n        },\n\n        shouldRenderNote: function(value) {\n            var range = this.range();\n            return range.min <= value && value <= range.max;\n        },\n\n        _throwNegativeValuesError: function() {\n            throw new Error(\"Non positive values cannot be used for a logarithmic axis\");\n        },\n\n        _initOptions: function(seriesMin, seriesMax, options) {\n            var axis = this,\n                axisOptions = deepExtend({}, axis.options, {min: seriesMin, max: seriesMax}, options),\n                min = axisOptions.min,\n                max = axisOptions.max,\n                base = axisOptions.majorUnit,\n                logMaxRemainder;\n\n            if (axisOptions.axisCrossingValue <= 0) {\n                axis._throwNegativeValuesError();\n            }\n\n            if (!defined(options.max)) {\n               logMaxRemainder =  round(log(max, base), DEFAULT_PRECISION) % 1;\n               if (max <= 0) {\n                   max = base;\n               } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n                   max = math.pow(base, log(max, base) + 0.2);\n               } else {\n                   max = math.pow(base, math.ceil(log(max, base)));\n               }\n            } else if (options.max <= 0) {\n                axis._throwNegativeValuesError();\n            }\n\n            if (!defined(options.min)) {\n               if (min <= 0) {\n                   min = max <= 1 ? math.pow(base, -2) : 1;\n               } else if (!options.narrowRange) {\n                   min = math.pow(base, math.floor(log(min, base)));\n               }\n            } else if (options.min <= 0) {\n                axis._throwNegativeValuesError();\n            }\n\n            axis.logMin = round(log(min, base), DEFAULT_PRECISION);\n            axis.logMax = round(log(max, base), DEFAULT_PRECISION);\n            axisOptions.max = max;\n            axisOptions.min = min;\n            axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n\n            return axisOptions;\n        },\n\n        _minorIntervalOptions: function(power) {\n            var base = this.options.majorUnit,\n                value = math.pow(base, power),\n                nextValue = math.pow(base, power + 1),\n                difference = nextValue - value,\n                minorStep = difference / this.options.minorUnit;\n            return {\n                value: value,\n                minorStep: minorStep\n            };\n        },\n\n        _lineOptions: function() {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                valueAxis = vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                dir = vertical === reverse ? 1 : -1,\n                startEdge = dir === 1 ? 1 : 2,\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                step = dir * (lineSize / (axis.logMax - axis.logMin)),\n                lineStart = lineBox[valueAxis + startEdge];\n\n            return {\n                step: step,\n                lineStart: lineStart,\n                lineBox: lineBox\n            };\n        }\n    });\n\n    dataviz.Gradients = {\n        glass: {\n            type: LINEAR,\n            rotation: 0,\n            stops: [{\n                offset: 0,\n                color: WHITE,\n                opacity: 0\n            }, {\n                offset: 0.25,\n                color: WHITE,\n                opacity: 0.3\n            }, {\n                offset: 1,\n                color: WHITE,\n                opacity: 0\n            }]\n        },\n        sharpBevel: {\n            type: RADIAL,\n            stops: [{\n                offset: 0,\n                color: WHITE,\n                opacity: 0.55\n            }, {\n                offset: 0.65,\n                color: WHITE,\n                opacity: 0\n            }, {\n                offset: 0.95,\n                color: WHITE,\n                opacity: 0.25\n            }]\n        },\n        roundedBevel: {\n            type: RADIAL,\n            stops: [{\n                offset: 0.33,\n                color: WHITE,\n                opacity: 0.06\n            }, {\n                offset: 0.83,\n                color: WHITE,\n                opacity: 0.2\n            }, {\n                offset: 0.95,\n                color: WHITE,\n                opacity: 0\n            }]\n        },\n        roundedGlass: {\n            type: RADIAL,\n            supportVML: false,\n            stops: [{\n                offset: 0,\n                color: WHITE,\n                opacity: 0\n            }, {\n                offset: 0.5,\n                color: WHITE,\n                opacity: 0.3\n            }, {\n                offset: 0.99,\n                color: WHITE,\n                opacity: 0\n            }]\n        },\n        sharpGlass: {\n            type: RADIAL,\n            supportVML: false,\n            stops: [{\n                offset: 0,\n                color: WHITE,\n                opacity: 0.2\n            }, {\n                offset: 0.15,\n                color: WHITE,\n                opacity: 0.15\n            }, {\n                offset: 0.17,\n                color: WHITE,\n                opacity: 0.35\n            }, {\n                offset: 0.85,\n                color: WHITE,\n                opacity: 0.05\n            }, {\n                offset: 0.87,\n                color: WHITE,\n                opacity: 0.15\n            }, {\n                offset: 0.99,\n                color: WHITE,\n                opacity: 0\n            }]\n        }\n    };\n\n    // Helper functions========================================================\n    var ExportMixin = {\n        extend: function(proto, skipLegacy) {\n            if (!proto.exportVisual) {\n                throw new Error(\"Mixin target has no exportVisual method defined.\");\n            }\n\n            proto.exportSVG = this.exportSVG;\n            proto.exportImage = this.exportImage;\n            proto.exportPDF = this.exportPDF;\n\n            if (!skipLegacy) {\n                proto.svg = this.svg;\n                proto.imageDataURL = this.imageDataURL;\n            }\n        },\n\n        exportSVG: function(options) {\n            return draw.exportSVG(this.exportVisual(), options);\n        },\n\n        exportImage: function(options) {\n            return draw.exportImage(this.exportVisual(), options);\n        },\n\n        exportPDF: function(options) {\n            return draw.exportPDF(this.exportVisual(), options);\n        },\n\n        svg: function() {\n            if (draw.svg.Surface) {\n                return draw.svg._exportGroup(this.exportVisual());\n            } else {\n                throw new Error(\"SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface\");\n            }\n        },\n\n        imageDataURL: function() {\n            if (!kendo.support.canvas) {\n                return null;\n            }\n\n            if (draw.canvas.Surface) {\n                var container = $(\"<div />\").css({\n                    display: \"none\",\n                    width: this.element.width(),\n                    height: this.element.height()\n                }).appendTo(document.body);\n\n                var surface = new draw.canvas.Surface(container);\n                surface.draw(this.exportVisual());\n                var image = surface._rootElement.toDataURL();\n\n                surface.destroy();\n                container.remove();\n\n                return image;\n            } else {\n                throw new Error(\"Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface\");\n            }\n        }\n    };\n\n    function autoMajorUnit(min, max) {\n        var diff = round(max - min, DEFAULT_PRECISION - 1);\n\n        if (diff === 0) {\n            if (max === 0) {\n                return 0.1;\n            }\n\n            diff = math.abs(max);\n        }\n\n        var scale = math.pow(10, math.floor(math.log(diff) / math.log(10))),\n            relativeValue = round((diff / scale), DEFAULT_PRECISION),\n            scaleMultiplier = 1;\n\n        if (relativeValue < 1.904762) {\n            scaleMultiplier = 0.2;\n        } else if (relativeValue < 4.761904) {\n            scaleMultiplier = 0.5;\n        } else if (relativeValue < 9.523809) {\n            scaleMultiplier = 1;\n        } else {\n            scaleMultiplier = 2;\n        }\n\n        return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n    }\n\n    function getHash(object) {\n        var hash = [];\n        for (var key in object) {\n            hash.push(key + object[key]);\n        }\n\n        return hash.sort().join(\" \");\n    }\n\n    // TODO: Replace with Point2D.rotate\n    function rotatePoint(x, y, cx, cy, angle) {\n        var theta = angle * DEG_TO_RAD;\n\n        return new Point2D(\n            cx + (x - cx) * math.cos(theta) + (y - cy) * math.sin(theta),\n            cy - (x - cx) * math.sin(theta) + (y - cy) * math.cos(theta)\n        );\n    }\n\n    function boxDiff(r, s) {\n        if (r.x1 == s.x1 && r.y1 == s.y1 && r.x2 == s.x2 && r.y2 == s.y2) {\n            return s;\n        }\n\n        var a = math.min(r.x1, s.x1),\n            b = math.max(r.x1, s.x1),\n            c = math.min(r.x2, s.x2),\n            d = math.max(r.x2, s.x2),\n            e = math.min(r.y1, s.y1),\n            f = math.max(r.y1, s.y1),\n            g = math.min(r.y2, s.y2),\n            h = math.max(r.y2, s.y2),\n            result = [];\n\n        // X = intersection, 0-7 = possible difference areas\n        // h +-+-+-+\n        // . |5|6|7|\n        // g +-+-+-+\n        // . |3|X|4|\n        // f +-+-+-+\n        // . |0|1|2|\n        // e +-+-+-+\n        // . a b c d\n\n        // we'll always have rectangles 1, 3, 4 and 6\n        result[0] = Box2D(b, e, c, f);\n        result[1] = Box2D(a, f, b, g);\n        result[2] = Box2D(c, f, d, g);\n        result[3] = Box2D(b, g, c, h);\n\n        // decide which corners\n        if ( r.x1 == a && r.y1 == e || s.x1 == a && s.y1 == e )\n        { // corners 0 and 7\n            result[4] = Box2D(a, e, b, f);\n            result[5] = Box2D(c, g, d, h);\n        }\n        else\n        { // corners 2 and 5\n            result[4] = Box2D(c, e, d, f);\n            result[5] = Box2D(a, g, b, h);\n        }\n\n        return $.grep(result, function(box) {\n            return box.height() > 0 && box.width() > 0;\n        })[0];\n    }\n\n    function inArray(value, array) {\n        return indexOf(value, array) != -1;\n    }\n\n    function ceil(value, step) {\n        return round(math.ceil(value / step) * step, DEFAULT_PRECISION);\n    }\n\n    function floor(value, step) {\n        return round(math.floor(value / step) * step, DEFAULT_PRECISION);\n    }\n\n    function round(value, precision) {\n        var power = math.pow(10, precision || 0);\n        return math.round(value * power) / power;\n    }\n\n    function log(y, x) {\n        return math.log(y) / math.log(x);\n    }\n\n    function remainderClose(value, divisor, ratio) {\n        var remainder = round(math.abs(value % divisor), DEFAULT_PRECISION),\n            threshold = divisor * (1 - ratio);\n\n        return remainder === 0 || remainder > threshold;\n    }\n\n    function interpolateValue(start, end, progress) {\n        return round(start + (end - start) * progress, COORD_PRECISION);\n    }\n\n    function numericComparer(a, b) {\n        return a - b;\n    }\n\n    function updateArray(arr, prop, value) {\n        var i,\n            length = arr.length;\n\n        for(i = 0; i < length; i++) {\n            arr[i][prop] = value;\n        }\n    }\n\n    function autoFormat(format, value) {\n        if (format.match(FORMAT_REGEX)) {\n            return kendo.format.apply(this, arguments);\n        }\n\n        return kendo.toString(value, format);\n    }\n\n    function detached(element) {\n        var parent = element.parentNode;\n\n        while(parent && parent.parentNode) {\n            parent = parent.parentNode;\n        }\n\n        return parent !== doc;\n    }\n\n    function clockwise(v1, v2) {\n        // True if v2 is clockwise of v1\n        // assuming angles grow in clock-wise direction\n        // (as in the pie and radar charts)\n        return -v1.x * v2.y + v1.y * v2.x < 0;\n    }\n\n    function dateComparer(a, b) {\n         if (a && b) {\n             return a.getTime() - b.getTime();\n         }\n\n         return 0;\n    }\n\n    var CurveProcessor = function(closed){\n        this.closed = closed;\n    };\n\n    CurveProcessor.prototype = CurveProcessor.fn = {\n        WEIGHT: 0.333,\n        EXTREMUM_ALLOWED_DEVIATION: 0.01,\n\n        process: function(dataPoints) {\n            var that = this,\n                closed = that.closed,\n                points = dataPoints.slice(0),\n                length = points.length,\n                segments = [],\n                p0,p1,p2,\n                controlPoints,\n                initialControlPoint,\n                lastControlPoint,\n                tangent;\n\n            if (length > 2) {\n                that.removeDuplicates(0, points);\n                length = points.length;\n            }\n\n            if (length < 2 || (length == 2 && points[0].equals(points[1]))) {\n                return segments;\n            }\n\n            p0 = points[0]; p1 = points[1]; p2 = points[2];\n            segments.push(new draw.Segment(p0));\n\n            while (p0.equals(points[length - 1])) {\n                closed = true;\n                points.pop();\n                length--;\n            }\n\n            if (length == 2) {\n                tangent = that.tangent(p0,p1, X,Y);\n\n                last(segments).controlOut(\n                    that.firstControlPoint(tangent, p0, p1, X, Y)\n                );\n\n                segments.push(new draw.Segment(\n                    p1,\n                    that.secondControlPoint(tangent, p0, p1, X, Y)\n                ));\n\n                return segments;\n            }\n\n            if (closed) {\n                p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n                controlPoints = that.controlPoints(p0, p1, p2);\n                initialControlPoint = controlPoints[1];\n                lastControlPoint = controlPoints[0];\n            } else {\n                tangent = that.tangent(p0, p1, X,Y);\n                initialControlPoint = that.firstControlPoint(tangent, p0, p1, X, Y);\n            }\n\n            var cp0 = initialControlPoint;\n            for (var idx = 0; idx <= length - 3; idx++) {\n                that.removeDuplicates(idx, points);\n                length = points.length;\n                if (idx + 3 <= length) {\n                    p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n                    controlPoints = that.controlPoints(p0,p1,p2);\n\n                    last(segments).controlOut(cp0);\n                    cp0 = controlPoints[1];\n\n                    var cp1 = controlPoints[0];\n                    segments.push(new draw.Segment(p1, cp1));\n                }\n            }\n\n            if (closed) {\n                p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n                controlPoints = that.controlPoints(p0, p1, p2);\n\n                last(segments).controlOut(cp0);\n                segments.push(new draw.Segment(\n                    p1,\n                    controlPoints[0]\n                ));\n\n                last(segments).controlOut(controlPoints[1]);\n                segments.push(new draw.Segment(\n                    p2,\n                    lastControlPoint\n                ));\n            } else {\n                tangent = that.tangent(p1, p2, X, Y);\n\n                last(segments).controlOut(cp0);\n                segments.push(new draw.Segment(\n                    p2,\n                    that.secondControlPoint(tangent, p1, p2, X, Y)\n                ));\n            }\n\n            return segments;\n        },\n\n        removeDuplicates: function(idx, points) {\n            while (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2])) {\n                points.splice(idx + 1, 1);\n            }\n        },\n\n        invertAxis: function(p0,p1,p2){\n            var that = this,\n                fn, y2,\n                invertAxis = false;\n\n            if(p0.x === p1.x){\n                invertAxis = true;\n            } else if (p1.x === p2.x) {\n                if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n                    invertAxis = true;\n                }\n            } else {\n                fn = that.lineFunction(p0,p1);\n                y2 = that.calculateFunction(fn, p2.x);\n                if (!(p0.y <= p1.y && p2.y <= y2) &&\n                    !(p1.y <= p0.y && p2.y >= y2)) {\n                        invertAxis = true;\n                }\n            }\n\n            return invertAxis;\n        },\n\n        isLine: function(p0,p1,p2) {\n            var that = this,\n                fn = that.lineFunction(p0,p1),\n                y2 = that.calculateFunction(fn, p2.x);\n\n            return (p0.x == p1.x && p1.x == p2.x) || round(y2,1) === round(p2.y,1);\n        },\n\n        lineFunction: function(p1, p2) {\n            var a = (p2.y - p1.y) / (p2.x - p1.x),\n                b = p1.y - a * p1.x;\n            return [b,a];\n        },\n\n        controlPoints: function(p0,p1,p2) {\n            var that = this,\n                xField = X,\n                yField = Y,\n                restrict = false,\n                switchOrientation = false,\n                tangent,\n                monotonic,\n                firstControlPoint,\n                secondControlPoint,\n                allowedDeviation = that.EXTREMUM_ALLOWED_DEVIATION;\n\n            if (that.isLine(p0,p1,p2)) {\n                tangent = that.tangent(p0,p1, X,Y);\n            } else {\n                monotonic = {\n                    x: that.isMonotonicByField(p0,p1,p2,X),\n                    y: that.isMonotonicByField(p0,p1,p2,Y)\n                };\n\n                if (monotonic.x && monotonic.y) {\n                   tangent = that.tangent(p0,p2, X, Y);\n                   restrict = true;\n                } else {\n                    if (that.invertAxis(p0,p1,p2)) {\n                       xField = Y;\n                       yField = X;\n                    }\n\n                    if (monotonic[xField]) {\n                        tangent = 0;\n                     } else {\n                        var sign;\n                        if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n                            (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n                            sign = that.sign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n                        } else {\n                            sign = -that.sign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n                        }\n\n                        tangent = allowedDeviation * sign;\n                        switchOrientation = true;\n                     }\n                }\n            }\n\n            secondControlPoint = that.secondControlPoint(tangent, p0, p1, xField, yField);\n\n            if (switchOrientation) {\n                var oldXField = xField;\n                xField = yField;\n                yField = oldXField;\n            }\n\n            firstControlPoint = that.firstControlPoint(tangent, p1, p2, xField, yField);\n\n            if (restrict) {\n                that.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n                that.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n            }\n\n            return [secondControlPoint, firstControlPoint];\n        },\n\n        sign: function(x){\n            return x <= 0 ? -1 : 1;\n        },\n\n        restrictControlPoint: function(p1,p2, cp, tangent) {\n            if (p1.y < p2.y) {\n                if (p2.y < cp.y) {\n                    cp.x = p1.x + (p2.y - p1.y) / tangent;\n                    cp.y = p2.y;\n                } else if (cp.y < p1.y) {\n                    cp.x = p2.x - (p2.y - p1.y) / tangent;\n                    cp.y = p1.y;\n                }\n            } else {\n                if (cp.y < p2.y) {\n                    cp.x = p1.x - (p1.y - p2.y) / tangent;\n                    cp.y = p2.y;\n                } else if (p1.y < cp.y) {\n                    cp.x = p2.x + (p1.y - p2.y) / tangent;\n                    cp.y = p1.y;\n                }\n            }\n        },\n\n        tangent: function(p0,p1, xField, yField) {\n            var tangent,\n                x = p1[xField] - p0[xField],\n                y = p1[yField] - p0[yField];\n            if (x === 0) {\n                tangent = 0;\n            } else {\n               tangent = y/x;\n            }\n\n            return tangent;\n        },\n\n        isMonotonicByField: function(p0,p1,p2,field) {\n            return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n                        (p2[field] < p1[field] && p1[field] < p0[field]);\n        },\n\n        firstControlPoint: function(tangent, p0,p3, xField, yField) {\n            var that = this,\n                t1 = p0[xField],\n                t2 = p3[xField],\n                distance = (t2 - t1) * that.WEIGHT;\n\n            return that.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n        },\n\n        secondControlPoint: function(tangent, p0,p3, xField, yField) {\n            var that = this,\n                t1 = p0[xField],\n                t2 = p3[xField],\n                distance = (t2 - t1) * that.WEIGHT;\n\n            return that.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n        },\n\n        point: function (xValue, yValue, xField, yField) {\n            var controlPoint = new geom.Point();\n            controlPoint[xField] = xValue;\n            controlPoint[yField] = yValue;\n\n            return controlPoint;\n        },\n\n        calculateFunction: function(fn,x) {\n            var result = 0,\n                length = fn.length;\n            for (var i = 0; i < length; i++) {\n                result += Math.pow(x,i) * fn[i];\n            }\n            return result;\n        }\n    };\n\n    function mwDelta(e) {\n        var origEvent = e.originalEvent,\n            delta = 0;\n\n        if (origEvent.wheelDelta) {\n            delta = -origEvent.wheelDelta / 120;\n            delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n        }\n\n        if (origEvent.detail) {\n            delta = round(origEvent.detail / 3);\n        }\n\n        return delta;\n    }\n\n    function decodeEntities(text) {\n        if (!text || !text.indexOf || text.indexOf(\"&\") < 0) {\n            return text;\n        } else {\n            var element = decodeEntities._element;\n            element.innerHTML = text;\n            return element.textContent || element.innerText;\n        }\n    }\n\n    function isInRange(value, range) {\n        return value >= range.min && value <= range.max;\n    }\n\n    function alignPathToPixel(path) {\n        if (!kendo.support.vml) {\n            for (var i = 0; i < path.segments.length; i++) {\n                path.segments[i].anchor().round(0).translate(0.5, 0.5);\n            }\n        }\n\n        return path;\n    }\n\n    function innerRadialStops(options) {\n        var gradient = this,\n            stops = options.stops,\n            usedSpace = ((options.innerRadius / options.radius) * 100),\n            i,\n            length = stops.length,\n            currentStop,\n            currentStops = [];\n\n        for (i = 0; i < length; i++) {\n            currentStop = deepExtend({}, stops[i]);\n            currentStop.offset = (currentStop.offset * (100 -  usedSpace) + usedSpace) / 100;\n            currentStops.push(currentStop);\n        }\n\n        return currentStops;\n    }\n\n    decodeEntities._element = document.createElement(\"span\");\n\n    // Exports ================================================================\n    deepExtend(kendo.dataviz, {\n        AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n        COORD_PRECISION: COORD_PRECISION,\n        DEFAULT_PRECISION: DEFAULT_PRECISION,\n        DEFAULT_WIDTH: DEFAULT_WIDTH,\n        DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n        DEFAULT_FONT: DEFAULT_FONT,\n        INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n        NOTE_CLICK: NOTE_CLICK,\n        NOTE_HOVER: NOTE_HOVER,\n        CLIP: CLIP,\n\n        Axis: Axis,\n        AxisLabel: AxisLabel,\n        Box2D: Box2D,\n        BoxElement: BoxElement,\n        ChartElement: ChartElement,\n        CurveProcessor: CurveProcessor,\n        ExportMixin: ExportMixin,\n        FloatElement: FloatElement,\n        LogarithmicAxis: LogarithmicAxis,\n        Note: Note,\n        NumericAxis: NumericAxis,\n        Point2D: Point2D,\n        Ring: Ring,\n        RootElement: RootElement,\n        Sector: Sector,\n        ShapeBuilder: ShapeBuilder,\n        ShapeElement: ShapeElement,\n        Text: Text,\n        TextBox: TextBox,\n        Title: Title,\n\n        alignPathToPixel: alignPathToPixel,\n        autoFormat: autoFormat,\n        autoMajorUnit: autoMajorUnit,\n        boxDiff: boxDiff,\n        dateComparer: dateComparer,\n        decodeEntities: decodeEntities,\n        getSpacing: getSpacing,\n        inArray: inArray,\n        interpolateValue: interpolateValue,\n        mwDelta: mwDelta,\n        rotatePoint: rotatePoint,\n        round: round,\n        ceil: ceil,\n        floor: floor\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function () {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        ui = kendo.dataviz.ui,\n        deepExtend = kendo.deepExtend;\n\n    // Constants ==============================================================\n    var BAR_GAP = 1.5,\n        BAR_SPACING = 0.4,\n        BLACK = \"#000\",\n        SANS = \"Arial,Helvetica,sans-serif\",\n        SANS11 = \"11px \" + SANS,\n        SANS12 = \"12px \" + SANS,\n        SANS16 = \"16px \" + SANS,\n        WHITE = \"#fff\";\n\n    var chartBaseTheme = {\n            title: {\n                font: SANS16\n            },\n            legend: {\n                labels: {\n                    font: SANS12\n                }\n            },\n            seriesDefaults: {\n                visible: true,\n                labels: {\n                    font: SANS11\n                },\n                donut: {\n                    margin: 1\n                },\n                line: {\n                    width: 2\n                },\n                vericalLine: {\n                    width: 2\n                },\n                scatterLine: {\n                    width: 1\n                },\n                area: {\n                    opacity: 0.4,\n                    markers: {\n                        visible: false,\n                        size: 6\n                    },\n                    highlight: {\n                        markers: {\n                            border: {\n                                color: \"#fff\",\n                                opacity: 1,\n                                width: 1\n                            }\n                        }\n                    },\n                    line: {\n                        opacity: 1,\n                        width: 0\n                    }\n                },\n                verticalArea: {\n                    opacity: 0.4,\n                    markers: {\n                        visible: false,\n                        size: 6\n                    },\n                    line: {\n                        opacity: 1,\n                        width: 0\n                    }\n                },\n                radarLine: {\n                    width: 2,\n                    markers: {\n                        visible: false\n                    }\n                },\n                radarArea: {\n                    opacity: 0.5,\n                    markers: {\n                        visible: false,\n                        size: 6\n                    },\n                    line: {\n                        opacity: 1,\n                        width: 0\n                    }\n                },\n                candlestick: {\n                    line: {\n                        width: 1,\n                        color: BLACK\n                    },\n                    border: {\n                        width: 1,\n                        _brightness: 0.8\n                    },\n                    gap: 1,\n                    spacing: 0.3,\n                    downColor: WHITE,\n                    highlight: {\n                        line: {\n                            width: 2\n                        },\n                        border: {\n                            width: 2,\n                            opacity: 1\n                        }\n                    }\n                },\n                ohlc: {\n                    line: {\n                        width: 1\n                    },\n                    gap: 1,\n                    spacing: 0.3,\n                    highlight: {\n                        line: {\n                            width: 3,\n                            opacity: 1\n                        }\n                    }\n                },\n                bubble: {\n                    opacity: 0.6,\n                    border: {\n                        width: 0\n                    },\n                    labels: {\n                        background: \"transparent\"\n                    }\n                },\n                bar: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING\n                },\n                column: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING\n                },\n                rangeColumn: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING\n                },\n                rangeBar: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING\n                },\n                waterfall: {\n                    gap: 0.5,\n                    spacing: BAR_SPACING,\n                    line: {\n                        width: 1,\n                        color: BLACK\n                    }\n                },\n                horizontalWaterfall: {\n                    gap: 0.5,\n                    spacing: BAR_SPACING,\n                    line: {\n                        width: 1,\n                        color: BLACK\n                    }\n                },\n                bullet: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING,\n                    target: {\n                        color: \"#ff0000\"\n                    }\n                },\n                verticalBullet: {\n                    gap: BAR_GAP,\n                    spacing: BAR_SPACING,\n                    target: {\n                        color: \"#ff0000\"\n                    }\n                },\n                boxPlot: {\n                    outliersField: \"\",\n                    meanField: \"\",\n                    whiskers: {\n                        width: 1,\n                        color: BLACK\n                    },\n                    mean: {\n                        width: 1,\n                        color: BLACK\n                    },\n                    median: {\n                        width: 1,\n                        color: BLACK\n                    },\n                    border: {\n                        width: 1,\n                        _brightness: 0.8\n                    },\n                    gap: 1,\n                    spacing: 0.3,\n                    downColor: WHITE,\n                    highlight: {\n                        whiskers: {\n                            width: 2\n                        },\n                        border: {\n                            width: 2,\n                            opacity: 1\n                        }\n                    }\n                },\n                funnel: {\n                    labels: {\n                        color:\"\",\n                        background: \"\"\n                    }\n                },\n                notes: {\n                    icon: {\n                        size: 7,\n                        border: {\n                            width: 1\n                        }\n                    },\n                    label: {\n                        padding: 3,\n                        font: SANS12\n                    },\n                    line: {\n                        length: 10,\n                        width: 1\n                    },\n                    visible: true\n                }\n            },\n            categoryAxis: {\n                majorGridLines: {\n                    visible: true\n                }\n            },\n            axisDefaults: {\n                labels: {\n                    font: SANS12\n                },\n                title: {\n                    font: SANS16,\n                    margin: 5\n                },\n                crosshair: {\n                    tooltip: {\n                        font: SANS12\n                    }\n                },\n                notes: {\n                    icon: {\n                        size: 7,\n                        border: {\n                            width: 1\n                        }\n                    },\n                    label: {\n                        padding: 3,\n                        font: SANS12\n                    },\n                    line: {\n                        length: 10,\n                        width: 1\n                    },\n                    visible: true\n                }\n            },\n            tooltip: {\n                font: SANS12\n            },\n            navigator: {\n                pane: {\n                    height: 90,\n                    margin: {\n                        top: 10\n                    }\n                }\n            }\n        };\n\n    var gaugeBaseTheme = {\n        scale: {\n            labels: {\n                font: SANS12\n            }\n        }\n    };\n\n    var diagramBaseTheme = {\n        shapeDefaults: {\n            hover: {\n                opacity: 0.2\n            },\n            stroke: {\n                width: 0\n            }\n        },\n        editable: {\n            resize: {\n                handles: {\n                    width: 7,\n                    height: 7\n                }\n            }\n        },\n        selectable: {\n            stroke: {\n                width: 1,\n                dashType: \"dot\"\n            }\n        },\n        connectionDefaults: {\n            stroke: {\n                width: 2\n            },\n            selection: {\n                handles: {\n                    width: 8,\n                    height: 8\n                }\n            },\n            editable: {\n                tools: [\"edit\", \"delete\"]\n            }\n        }\n    };\n\n    var themes = ui.themes,\n        registerTheme = ui.registerTheme = function(themeName, options) {\n            var result = {};\n            // Apply base theme\n            result.chart = deepExtend({}, chartBaseTheme, options.chart);\n            result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\n            result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\n            result.treeMap = deepExtend({}, options.treeMap);\n\n            // Copy the line/area chart settings for their vertical counterparts\n            var defaults = result.chart.seriesDefaults;\n            defaults.verticalLine = deepExtend({}, defaults.line);\n            defaults.verticalArea = deepExtend({}, defaults.area);\n\n            defaults.polarArea = deepExtend({}, defaults.radarArea);\n            defaults.polarLine = deepExtend({}, defaults.radarLine);\n\n            themes[themeName] = result;\n        };\n\n    registerTheme(\"black\", {\n        chart: {\n            title: {\n                color: WHITE\n            },\n            legend: {\n                labels: {\n                    color: WHITE\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#919191\"\n                    },\n                    markers: {\n                        color: \"#919191\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: WHITE\n                },\n                errorBars: {\n                    color: WHITE\n                },\n                notes: {\n                    icon: {\n                        background: \"#3b3b3b\",\n                        border: {\n                            color: \"#8e8e8e\"\n                        }\n                    },\n                    label: {\n                        color: WHITE\n                    },\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                },\n                pie: {\n                    overlay: {\n                        gradient: \"sharpBevel\"\n                    }\n                },\n                donut: {\n                    overlay: {\n                        gradient: \"sharpGlass\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#3d3d3d\"\n                    }\n                },\n                scatter: {\n                    markers: {\n                        background: \"#3d3d3d\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#3d3d3d\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#555\",\n                    line: {\n                        color: WHITE\n                    },\n                    border: {\n                        _brightness: 1.5,\n                        opacity: 1\n                    },\n                    highlight: {\n                        border: {\n                            color: WHITE,\n                            opacity: 0.2\n                        }\n                    }\n                },\n                ohlc: {\n                    line: {\n                        color: WHITE\n                    }\n                }\n            },\n            chartArea: {\n                background: \"#3d3d3d\"\n            },\n            seriesColors: [\"#0081da\", \"#3aafff\", \"#99c900\", \"#ffeb3d\", \"#b20753\", \"#ff4195\"],\n            axisDefaults: {\n                line: {\n                    color: \"#8e8e8e\"\n                },\n                labels: {\n                    color: WHITE\n                },\n                majorGridLines: {\n                    color: \"#545454\"\n                },\n                minorGridLines: {\n                    color: \"#454545\"\n                },\n                title: {\n                    color: WHITE\n                },\n                crosshair: {\n                    color: \"#8e8e8e\"\n                },\n                notes: {\n                    icon: {\n                        background: \"#3b3b3b\",\n                        border: {\n                            color: \"#8e8e8e\"\n                        }\n                    },\n                    label: {\n                        color: WHITE\n                    },\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#0070e4\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#1d1d1d\",\n                labels: {\n                    color: WHITE\n                },\n                minorTicks: {\n                    color: WHITE\n                },\n                majorTicks: {\n                    color: WHITE\n                },\n                line: {\n                    color: WHITE\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#0066cc\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: WHITE\n                    },\n                    stroke: {\n                        color: \"#384049\"\n                    },\n                    hover: {\n                        fill: {\n                            color: \"#3d3d3d\"\n                        },\n                        stroke: {\n                            color: \"#efefef\"\n                        }\n                    }\n                },\n                content: {\n                    color: WHITE\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: \"#3d3d3d\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        },\n                        hover: {\n                            fill: {\n                                color: WHITE\n                            },\n                            stroke: {\n                                color: WHITE\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: WHITE\n                        },\n                        fill: {\n                            color: WHITE\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: WHITE\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: WHITE\n                },\n                content: {\n                    color: WHITE\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: \"#3d3d3d\"\n                        },\n                        stroke: {\n                            color: \"#efefef\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#0081da\", \"#314b5c\"],\n                [\"#3aafff\", \"#3c5464\"],\n                [\"#99c900\", \"#4f5931\"],\n                [\"#ffeb3d\", \"#64603d\"],\n                [\"#b20753\", \"#543241\"],\n                [\"#ff4195\", \"#643e4f\"]]\n        }\n    });\n\n    registerTheme(\"blueopal\", {\n        chart: {\n            title: {\n                color: \"#293135\"\n            },\n            legend: {\n                labels: {\n                    color: \"#293135\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#27A5BA\"\n                    },\n                    markers: {\n                        color: \"#27A5BA\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: BLACK,\n                    background: WHITE,\n                    opacity: 0.5\n                },\n                errorBars: {\n                    color: \"#293135\"\n                },\n                candlestick: {\n                    downColor: \"#c4d0d5\",\n                    line: {\n                        color: \"#9aabb2\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#9aabb2\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#9aabb2\"\n                    }\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#9aabb2\"\n                        }\n                    },\n                    label: {\n                        color: \"#293135\"\n                    },\n                    line: {\n                        color: \"#9aabb2\"\n                    }\n                }\n            },\n            seriesColors: [\"#0069a5\", \"#0098ee\", \"#7bd2f6\", \"#ffb800\", \"#ff8517\", \"#e34a00\"],\n            axisDefaults: {\n                line: {\n                    color: \"#9aabb2\"\n                },\n                labels: {\n                    color: \"#293135\"\n                },\n                majorGridLines: {\n                    color: \"#c4d0d5\"\n                },\n                minorGridLines: {\n                    color: \"#edf1f2\"\n                },\n                title: {\n                    color: \"#293135\"\n                },\n                crosshair: {\n                    color: \"#9aabb2\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#9aabb2\"\n                        }\n                    },\n                    label: {\n                        color: \"#293135\"\n                    },\n                    line: {\n                        color: \"#9aabb2\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#005c83\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#daecf4\",\n\n                labels: {\n                    color: \"#293135\"\n                },\n                minorTicks: {\n                    color: \"#293135\"\n                },\n                majorTicks: {\n                    color: \"#293135\"\n                },\n                line: {\n                    color: \"#293135\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#7ec6e3\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#003f59\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#003f59\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#293135\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#003f59\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#003f59\"\n                            },\n                            stroke: {\n                                color: \"#003f59\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#003f59\"\n                        },\n                        fill: {\n                            color: \"#003f59\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#003f59\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#003f59\"\n                },\n                content: {\n                    color: \"#293135\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: \"#3d3d3d\"\n                        },\n                        stroke: {\n                            color: \"#efefef\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#0069a5\", \"#bad7e7\"],\n                [\"#0098ee\", \"#b9e0f5\"],\n                [\"#7bd2f6\", \"#ceeaf6\"],\n                [\"#ffb800\", \"#e6e3c4\"],\n                [\"#ff8517\", \"#e4d8c8\"],\n                [\"#e34a00\", \"#ddccc2\"]\n            ]\n        }\n    });\n\n    registerTheme(\"highcontrast\", {\n        chart: {\n            title: {\n                color: \"#ffffff\"\n            },\n            legend: {\n                labels: {\n                    color: \"#ffffff\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#66465B\"\n                    },\n                    markers: {\n                        color: \"#66465B\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#ffffff\"\n                },\n                errorBars: {\n                    color: \"#ffffff\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#ffffff\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                },\n                pie: {\n                    overlay: {\n                        gradient: \"sharpGlass\"\n                    }\n                },\n                donut: {\n                    overlay: {\n                        gradient: \"sharpGlass\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#2c232b\"\n                    }\n                },\n                scatter: {\n                    markers: {\n                        background: \"#2c232b\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#2c232b\"\n                    }\n                },\n                area: {\n                    opacity: 0.5\n                },\n                waterfall: {\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#664e62\",\n                    line: {\n                        color: \"#ffffff\"\n                    },\n                    border: {\n                        _brightness: 1.5,\n                        opacity: 1\n                    },\n                    highlight: {\n                        border: {\n                            color: \"#ffffff\",\n                            opacity: 1\n                        }\n                    }\n                },\n                ohlc: {\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                }\n            },\n            chartArea: {\n                background: \"#2c232b\"\n            },\n            seriesColors: [\"#a7008f\", \"#ffb800\", \"#3aafff\", \"#99c900\", \"#b20753\", \"#ff4195\"],\n            axisDefaults: {\n                line: {\n                    color: \"#ffffff\"\n                },\n                labels: {\n                    color: \"#ffffff\"\n                },\n                majorGridLines: {\n                    color: \"#664e62\"\n                },\n                minorGridLines: {\n                    color: \"#4f394b\"\n                },\n                title: {\n                    color: \"#ffffff\"\n                },\n                crosshair: {\n                    color: \"#ffffff\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#ffffff\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#a7008f\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#2c232b\",\n\n                labels: {\n                    color: \"#ffffff\"\n                },\n                minorTicks: {\n                    color: \"#2c232b\"\n                },\n                majorTicks: {\n                    color: \"#664e62\"\n                },\n                line: {\n                    color: \"#ffffff\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#a7018f\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: WHITE\n                    },\n                    stroke: {\n                        color: \"#2c232b\"\n                    },\n                    hover: {\n                        fill: {\n                            color: \"#2c232b\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                },\n                content: {\n                    color: WHITE\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: \"#2c232b\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        },\n                        hover: {\n                            fill: {\n                                color: WHITE\n                            },\n                            stroke: {\n                                color: WHITE\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: WHITE\n                        },\n                        fill: {\n                            color: WHITE\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: WHITE\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: WHITE\n                },\n                content: {\n                    color: WHITE\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: \"#2c232b\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#a7008f\", \"#451c3f\"],\n                [\"#ffb800\", \"#564122\"],\n                [\"#3aafff\", \"#2f3f55\"],\n                [\"#99c900\", \"#424422\"],\n                [\"#b20753\", \"#471d33\"],\n                [\"#ff4195\", \"#562940\"]\n            ]\n        }\n    });\n\n    registerTheme(\"default\", {\n        chart: {\n            title: {\n                color: \"#8e8e8e\"\n            },\n            legend: {\n                labels: {\n                    color: \"#232323\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#919191\"\n                    },\n                    markers: {\n                        color: \"#919191\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: BLACK,\n                    background: WHITE,\n                    opacity: 0.5\n                },\n                errorBars: {\n                    color: \"#232323\"\n                },\n                candlestick: {\n                    downColor: \"#dedede\",\n                    line: {\n                        color: \"#8d8d8d\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#8e8e8e\"\n                        }\n                    },\n                    label: {\n                        color: \"#232323\"\n                    },\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                }\n            },\n            seriesColors: [\"#ff6800\", \"#a0a700\", \"#ff8d00\", \"#678900\", \"#ffb53c\", \"#396000\"],\n            axisDefaults: {\n                line: {\n                    color: \"#8e8e8e\"\n                },\n                labels: {\n                    color: \"#232323\"\n                },\n                minorGridLines: {\n                    color: \"#f0f0f0\"\n                },\n                majorGridLines: {\n                    color: \"#dfdfdf\"\n                },\n                title: {\n                    color: \"#232323\"\n                },\n                crosshair: {\n                    color: \"#8e8e8e\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#8e8e8e\"\n                        }\n                    },\n                    label: {\n                        color: \"#232323\"\n                    },\n                    line: {\n                        color: \"#8e8e8e\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#ea7001\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#dedede\",\n\n                labels: {\n                    color: \"#2e2e2e\"\n                },\n                minorTicks: {\n                    color: \"#2e2e2e\"\n                },\n                majorTicks: {\n                    color: \"#2e2e2e\"\n                },\n                line: {\n                    color: \"#2e2e2e\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#e15613\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#282828\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#282828\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#2e2e2e\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#282828\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#282828\"\n                            },\n                            stroke: {\n                                color: \"#282828\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#282828\"\n                        },\n                        fill: {\n                            color: \"#282828\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#a7018f\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#282828\"\n                },\n                content: {\n                    color: \"#2e2e2e\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#282828\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#ff6800\", \"#edcfba\"],\n                [\"#a0a700\", \"#dadcba\"],\n                [\"#ff8d00\", \"#edd7ba\"],\n                [\"#678900\", \"#cfd6ba\"],\n                [\"#ffb53c\", \"#eddfc6\"],\n                [\"#396000\", \"#c6ceba\"]\n            ]\n        }\n    });\n\n    registerTheme(\"silver\", {\n        chart: {\n            title: {\n                color: \"#4e5968\"\n            },\n            legend: {\n                labels: {\n                    color: \"#4e5968\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#B1BCC8\"\n                    },\n                    markers: {\n                        color: \"#B1BCC8\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#293135\",\n                    background: \"#eaeaec\",\n                    opacity: 0.5\n                },\n                errorBars: {\n                    color: \"#4e5968\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#4e5968\"\n                        }\n                    },\n                    label: {\n                        color: \"#4e5968\"\n                    },\n                    line: {\n                        color: \"#4e5968\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#eaeaec\"\n                    }\n                },\n                scatter: {\n                    markers: {\n                        background: \"#eaeaec\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#eaeaec\"\n                    }\n                },\n                pie: {\n                    connectors: {\n                        color: \"#A6B1C0\"\n                    }\n                },\n                donut: {\n                    connectors: {\n                        color: \"#A6B1C0\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#a6b1c0\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#a6b1c0\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#a6afbe\"\n                }\n            },\n            chartArea: {\n                background: \"#eaeaec\"\n            },\n            seriesColors: [\"#007bc3\", \"#76b800\", \"#ffae00\", \"#ef4c00\", \"#a419b7\", \"#430B62\"],\n            axisDefaults: {\n                line: {\n                    color: \"#a6b1c0\"\n                },\n                labels: {\n                    color: \"#4e5968\"\n                },\n                majorGridLines: {\n                    color: \"#dcdcdf\"\n                },\n                minorGridLines: {\n                    color: \"#eeeeef\"\n                },\n                title: {\n                    color: \"#4e5968\"\n                },\n                crosshair: {\n                    color: \"#a6b1c0\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#4e5968\"\n                        }\n                    },\n                    label: {\n                        color: \"#4e5968\"\n                    },\n                    line: {\n                        color: \"#4e5968\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#0879c0\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#f3f3f4\",\n\n                labels: {\n                    color: \"#515967\"\n                },\n                minorTicks: {\n                    color: \"#515967\"\n                },\n                majorTicks: {\n                    color: \"#515967\"\n                },\n                line: {\n                    color: \"#515967\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#1c82c2\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#515967\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#282828\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#515967\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#515967\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#515967\"\n                            },\n                            stroke: {\n                                color: \"#515967\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#515967\"\n                        },\n                        fill: {\n                            color: \"#515967\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#515967\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#515967\"\n                },\n                content: {\n                    color: \"#515967\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#515967\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#007bc3\", \"#c2dbea\"],\n                [\"#76b800\", \"#dae7c3\"],\n                [\"#ffae00\", \"#f5e5c3\"],\n                [\"#ef4c00\", \"#f2d2c3\"],\n                [\"#a419b7\", \"#e3c7e8\"],\n                [\"#430b62\", \"#d0c5d7\"]\n            ]\n        }\n    });\n\n    registerTheme(\"metro\", {\n        chart: {\n            title: {\n                color: \"#777777\"\n            },\n            legend: {\n                labels: {\n                    color: \"#777777\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#CBCBCB\"\n                    },\n                    markers: {\n                        color: \"#CBCBCB\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: BLACK\n                },\n                errorBars: {\n                    color: \"#777777\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#777777\"\n                        }\n                    },\n                    label: {\n                        color: \"#777777\"\n                    },\n                    line: {\n                        color: \"#777777\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#c7c7c7\",\n                    line: {\n                        color: \"#787878\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#c7c7c7\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#c7c7c7\"\n                    }\n                },\n                overlay: {\n                    gradient: \"none\"\n                },\n                border: {\n                    _brightness: 1\n                }\n            },\n            seriesColors: [\"#8ebc00\", \"#309b46\", \"#25a0da\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#16aba9\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\n            axisDefaults: {\n                line: {\n                    color: \"#c7c7c7\"\n                },\n                labels: {\n                    color: \"#777777\"\n                },\n                minorGridLines: {\n                    color: \"#c7c7c7\"\n                },\n                majorGridLines: {\n                    color: \"#c7c7c7\"\n                },\n                title: {\n                    color: \"#777777\"\n                },\n                crosshair: {\n                    color: \"#c7c7c7\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#777777\"\n                        }\n                    },\n                    label: {\n                        color: \"#777777\"\n                    },\n                    line: {\n                        color: \"#777777\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#8ebc00\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#e6e6e6\",\n\n                labels: {\n                    color: \"#777\"\n                },\n                minorTicks: {\n                    color: \"#777\"\n                },\n                majorTicks: {\n                    color: \"#777\"\n                },\n                line: {\n                    color: \"#777\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#8ebc00\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: BLACK\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: BLACK\n                        }\n                    }\n                },\n                content: {\n                    color: \"#777\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#787878\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#787878\"\n                            },\n                            stroke: {\n                                color: \"#787878\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#787878\"\n                        },\n                        fill: {\n                            color: \"#787878\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#515967\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#787878\"\n                },\n                content: {\n                    color: \"#777\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#787878\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#8ebc00\", \"#e8f2cc\"],\n                [\"#309b46\", \"#d6ebda\"],\n                [\"#25a0da\", \"#d3ecf8\"],\n                [\"#ff6900\", \"#ffe1cc\"],\n                [\"#e61e26\", \"#fad2d4\"],\n                [\"#d8e404\", \"#f7facd\"],\n                [\"#16aba9\", \"#d0eeee\"],\n                [\"#7e51a1\", \"#e5dcec\"],\n                [\"#313131\", \"#d6d6d6\"],\n                [\"#ed1691\", \"#fbd0e9\"]\n            ]\n        }\n    });\n\n    registerTheme(\"metroblack\", {\n        chart: {\n            title: {\n                color: \"#ffffff\"\n            },\n            legend: {\n                labels: {\n                    color: \"#ffffff\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#797979\"\n                    },\n                    markers: {\n                        color: \"#797979\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                border: {\n                    _brightness: 1\n                },\n                labels: {\n                    color: \"#ffffff\"\n                },\n                errorBars: {\n                    color: \"#ffffff\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#cecece\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#cecece\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#0e0e0e\"\n                    }\n                },\n                bubble: {\n                    opacity: 0.6\n                },\n                scatter: {\n                    markers: {\n                        background: \"#0e0e0e\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#0e0e0e\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#828282\",\n                    line: {\n                        color: \"#ffffff\"\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#cecece\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#cecece\"\n                    }\n                },\n                overlay: {\n                    gradient: \"none\"\n                }\n            },\n            chartArea: {\n                background: \"#0e0e0e\"\n            },\n            seriesColors: [\"#00aba9\", \"#309b46\", \"#8ebc00\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#25a0da\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\n            axisDefaults: {\n                line: {\n                    color: \"#cecece\"\n                },\n                labels: {\n                    color: \"#ffffff\"\n                },\n                minorGridLines: {\n                    color: \"#2d2d2d\"\n                },\n                majorGridLines: {\n                    color: \"#333333\"\n                },\n                title: {\n                    color: \"#ffffff\"\n                },\n                crosshair: {\n                    color: \"#cecece\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#cecece\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#cecece\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#00aba9\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#2d2d2d\",\n\n                labels: {\n                    color: \"#ffffff\"\n                },\n                minorTicks: {\n                    color: \"#333333\"\n                },\n                majorTicks: {\n                    color: \"#cecece\"\n                },\n                line: {\n                    color: \"#cecece\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#00aba9\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: WHITE\n                    },\n                    stroke: {\n                        color: \"#0e0e0e\"\n                    },\n                    hover: {\n                        fill: {\n                            color: \"#0e0e0e\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                },\n                content: {\n                    color: WHITE\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: \"#0e0e0e\"\n                        },\n                        stroke: {\n                            color: \"#787878\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#787878\"\n                            },\n                            stroke: {\n                                color: \"#787878\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: WHITE\n                        },\n                        fill: {\n                            color: WHITE\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#787878\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: WHITE\n                },\n                content: {\n                    color: WHITE\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: \"#0e0e0e\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#00aba9\", \"#0b2d2d\"],\n                [\"#309b46\", \"#152a19\"],\n                [\"#8ebc00\", \"#28310b\"],\n                [\"#ff6900\", \"#3e200b\"],\n                [\"#e61e26\", \"#391113\"],\n                [\"#d8e404\", \"#36390c\"],\n                [\"#25a0da\", \"#132b37\"],\n                [\"#7e51a1\", \"#241b2b\"],\n                [\"#313131\", \"#151515\"],\n                [\"#ed1691\", \"#3b1028\"]\n            ]\n        }\n    });\n\n    registerTheme(\"moonlight\", {\n        chart: {\n            title: {\n                color: \"#ffffff\"\n            },\n            legend: {\n                labels: {\n                    color: \"#ffffff\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#A1A7AB\"\n                    },\n                    markers: {\n                        color: \"#A1A7AB\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#ffffff\"\n                },\n                errorBars: {\n                    color: \"#ffffff\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#8c909e\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#8c909e\"\n                    }\n                },\n                pie: {\n                    overlay: {\n                        gradient: \"sharpBevel\"\n                    }\n                },\n                donut: {\n                    overlay: {\n                        gradient: \"sharpGlass\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#212a33\"\n                    }\n                },\n                bubble: {\n                    opacity: 0.6\n                },\n                scatter: {\n                    markers: {\n                        background: \"#212a33\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#212a33\"\n                    }\n                },\n                area: {\n                    opacity: 0.3\n                },\n                candlestick: {\n                    downColor: \"#757d87\",\n                    line: {\n                        color: \"#ea9d06\"\n                    },\n                    border: {\n                        _brightness: 1.5,\n                        opacity: 1\n                    },\n                    highlight: {\n                        border: {\n                            color: WHITE,\n                            opacity: 0.2\n                        }\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#8c909e\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#8c909e\"\n                    }\n                },\n                ohlc: {\n                    line: {\n                        color: \"#ea9d06\"\n                    }\n                }\n            },\n            chartArea: {\n                background: \"#212a33\"\n            },\n            seriesColors: [\"#ffca08\", \"#ff710f\", \"#ed2e24\", \"#ff9f03\", \"#e13c02\", \"#a00201\"],\n            axisDefaults: {\n                line: {\n                    color: \"#8c909e\"\n                },\n                minorTicks: {\n                    color: \"#8c909e\"\n                },\n                majorTicks: {\n                    color: \"#8c909e\"\n                },\n                labels: {\n                    color: \"#ffffff\"\n                },\n                majorGridLines: {\n                    color: \"#3e424d\"\n                },\n                minorGridLines: {\n                    color: \"#2f3640\"\n                },\n                title: {\n                    color: \"#ffffff\"\n                },\n                crosshair: {\n                    color: \"#8c909e\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#8c909e\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#8c909e\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#f4af03\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#2f3640\",\n\n                labels: {\n                    color: WHITE\n                },\n                minorTicks: {\n                    color: \"#8c909e\"\n                },\n                majorTicks: {\n                    color: \"#8c909e\"\n                },\n                line: {\n                    color: \"#8c909e\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#f3ae03\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: WHITE\n                    },\n                    stroke: {\n                        color: \"#414550\"\n                    },\n                    hover: {\n                        fill: {\n                            color: \"#414550\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                },\n                content: {\n                    color: WHITE\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: \"#414550\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        },\n                        hover: {\n                            fill: {\n                                color: WHITE\n                            },\n                            stroke: {\n                                color: WHITE\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: WHITE\n                        },\n                        fill: {\n                            color: WHITE\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: WHITE\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: WHITE\n                },\n                content: {\n                    color: WHITE\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: \"#414550\"\n                        },\n                        stroke: {\n                            color: WHITE\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#ffca08\", \"#4e4b2b\"],\n                [\"#ff710f\", \"#4e392d\"],\n                [\"#ed2e24\", \"#4b2c31\"],\n                [\"#ff9f03\", \"#4e422a\"],\n                [\"#e13c02\", \"#482e2a\"],\n                [\"#a00201\", \"#3b232a\"]\n            ]\n        }\n    });\n\n    registerTheme(\"uniform\", {\n        chart: {\n            title: {\n                color: \"#686868\"\n            },\n            legend: {\n                labels: {\n                    color: \"#686868\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#B6B6B6\"\n                    },\n                    markers: {\n                        color: \"#B6B6B6\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#686868\"\n                },\n                errorBars: {\n                    color: \"#686868\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#9e9e9e\"\n                        }\n                    },\n                    label: {\n                        color: \"#686868\"\n                    },\n                    line: {\n                        color: \"#9e9e9e\"\n                    }\n                },\n                pie: {\n                    overlay: {\n                        gradient: \"sharpBevel\"\n                    }\n                },\n                donut: {\n                    overlay: {\n                        gradient: \"sharpGlass\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                bubble: {\n                    opacity: 0.6\n                },\n                scatter: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                area: {\n                    opacity: 0.3\n                },\n                candlestick: {\n                    downColor: \"#cccccc\",\n                    line: {\n                        color: \"#cccccc\"\n                    },\n                    border: {\n                        _brightness: 1.5,\n                        opacity: 1\n                    },\n                    highlight: {\n                        border: {\n                            color: \"#cccccc\",\n                            opacity: 0.2\n                        }\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#9e9e9e\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#9e9e9e\"\n                    }\n                },\n                ohlc: {\n                    line: {\n                        color: \"#cccccc\"\n                    }\n                }\n            },\n            chartArea: {\n                background: \"#ffffff\"\n            },\n            seriesColors: [\"#527aa3\", \"#6f91b3\", \"#8ca7c2\", \"#a8bdd1\", \"#c5d3e0\", \"#e2e9f0\"],\n            axisDefaults: {\n                line: {\n                    color: \"#9e9e9e\"\n                },\n                minorTicks: {\n                    color: \"#aaaaaa\"\n                },\n                majorTicks: {\n                    color: \"#888888\"\n                },\n                labels: {\n                    color: \"#686868\"\n                },\n                majorGridLines: {\n                    color: \"#dadada\"\n                },\n                minorGridLines: {\n                    color: \"#e7e7e7\"\n                },\n                title: {\n                    color: \"#686868\"\n                },\n                crosshair: {\n                    color: \"#9e9e9e\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#9e9e9e\"\n                        }\n                    },\n                    label: {\n                        color: \"#686868\"\n                    },\n                    line: {\n                        color: \"#9e9e9e\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#527aa3\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#e7e7e7\",\n\n                labels: {\n                    color: \"#686868\"\n                },\n                minorTicks: {\n                    color: \"#aaaaaa\"\n                },\n                majorTicks: {\n                    color: \"#888888\"\n                },\n                line: {\n                    color: \"#9e9e9e\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#d1d1d1\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#686868\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#686868\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#686868\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#686868\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#686868\"\n                            },\n                            stroke: {\n                                color: \"#686868\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#686868\"\n                        },\n                        fill: {\n                            color: \"#686868\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#686868\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#686868\"\n                },\n                content: {\n                    color: \"#686868\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#686868\"\n                        }\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#527aa3\", \"#d0d8e1\"],\n                [\"#6f91b3\", \"#d6dde4\"],\n                [\"#8ca7c2\", \"#dce1e7\"],\n                [\"#a8bdd1\", \"#e2e6ea\"],\n                [\"#c5d3e0\", \"#e7eaed\"],\n                [\"#e2e9f0\", \"#edeff0\"]\n            ]\n        }\n    });\n\n    registerTheme(\"bootstrap\", {\n        chart: {\n            title: {\n                color: \"#333333\"\n            },\n            legend: {\n                labels: {\n                    color: \"#333333\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#999999\"\n                    },\n                    markers: {\n                        color: \"#9A9A9A\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#333333\"\n                },\n                overlay: {\n                    gradient: \"none\"\n                },\n                errorBars: {\n                    color: \"#343434\"\n                },\n                notes: {\n                    icon: {\n                        background: \"#000000\",\n                        border: {\n                            color: \"#000000\"\n                        }\n                    },\n                    label: {\n                        color: \"#333333\"\n                    },\n                    line: {\n                        color: \"#000000\"\n                    }\n                },\n                pie: {\n                    overlay: {\n                        gradient: \"none\"\n                    }\n                },\n                donut: {\n                    overlay: {\n                        gradient: \"none\"\n                    }\n                },\n                line: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                bubble: {\n                    opacity: 0.6\n                },\n                scatter: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                scatterLine: {\n                    markers: {\n                        background: \"#ffffff\"\n                    }\n                },\n                area: {\n                    opacity: 0.8\n                },\n                candlestick: {\n                    downColor: \"#d0d0d0\",\n                    line: {\n                        color: \"#333333\"\n                    },\n                    border: {\n                        _brightness: 1.5,\n                        opacity: 1\n                    },\n                    highlight: {\n                        border: {\n                            color: \"#b8b8b8\",\n                            opacity: 0.2\n                        }\n                    }\n                },\n                waterfall: {\n                    line: {\n                        color: \"#cccccc\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#cccccc\"\n                    }\n                },\n                ohlc: {\n                    line: {\n                        color: \"#333333\"\n                    }\n                }\n            },\n            chartArea: {\n                background: \"#ffffff\"\n            },\n            seriesColors: [\"#428bca\", \"#5bc0de\", \"#5cb85c\", \"#f2b661\", \"#e67d4a\", \"#da3b36\"],\n            axisDefaults: {\n                line: {\n                    color: \"#cccccc\"\n                },\n                minorTicks: {\n                    color: \"#ebebeb\"\n                },\n                majorTicks: {\n                    color: \"#cccccc\"\n                },\n                labels: {\n                    color: \"#333333\"\n                },\n                majorGridLines: {\n                    color: \"#cccccc\"\n                },\n                minorGridLines: {\n                    color: \"#ebebeb\"\n                },\n                title: {\n                    color: \"#333333\"\n                },\n                crosshair: {\n                    color: \"#000000\"\n                },\n                notes: {\n                    icon: {\n                        background: \"#000000\",\n                        border: {\n                            color: \"#000000\"\n                        }\n                    },\n                    label: {\n                        color: \"#ffffff\"\n                    },\n                    line: {\n                        color: \"#000000\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#428bca\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#cccccc\",\n                labels: {\n                    color: \"#333333\"\n                },\n                minorTicks: {\n                    color: \"#ebebeb\"\n                },\n                majorTicks: {\n                    color: \"#cccccc\"\n                },\n                line: {\n                    color: \"#cccccc\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#428bca\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#333333\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#333333\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#333333\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#333333\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#333333\"\n                            },\n                            stroke: {\n                                color: \"#333333\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#333333\"\n                        },\n                        fill: {\n                            color: \"#333333\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#333333\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#c4c4c4\"\n                },\n                content: {\n                    color: \"#333333\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#333333\"\n                        }\n                    },\n                    stroke: {\n                        color: \"#333333\"\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#428bca\", \"#d1e0ec\"],\n                [\"#5bc0de\", \"#d6eaf0\"],\n                [\"#5cb85c\", \"#d6e9d6\"],\n                [\"#5cb85c\", \"#f4e8d7\"],\n                [\"#e67d4a\", \"#f2ddd3\"],\n                [\"#da3b36\", \"#f0d0cf\"]\n            ]\n        }\n    });\n\n    registerTheme(\"flat\", {\n            chart: {\n            title: {\n                color: \"#4c5356\"\n            },\n            legend: {\n                labels: {\n                    color: \"#4c5356\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#CBCBCB\"\n                    },\n                    markers: {\n                        color: \"#CBCBCB\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#4c5356\"\n                },\n                errorBars: {\n                    color: \"#4c5356\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#cdcdcd\"\n                        }\n                    },\n                    label: {\n                        color: \"#4c5356\"\n                    },\n                    line: {\n                        color: \"#cdcdcd\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#c7c7c7\",\n                    line: {\n                        color: \"#787878\"\n                    }\n                },\n                area: {\n                    opacity: 0.9\n                },\n                waterfall: {\n                    line: {\n                        color: \"#cdcdcd\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#cdcdcd\"\n                    }\n                },\n                overlay: {\n                    gradient: \"none\"\n                },\n                border: {\n                    _brightness: 1\n                }\n            },\n            seriesColors: [\"#10c4b2\", \"#ff7663\", \"#ffb74f\", \"#a2df53\", \"#1c9ec4\", \"#ff63a5\", \"#1cc47b\"],\n            axisDefaults: {\n                line: {\n                    color: \"#cdcdcd\"\n                },\n                labels: {\n                    color: \"#4c5356\"\n                },\n                minorGridLines: {\n                    color: \"#cdcdcd\"\n                },\n                majorGridLines: {\n                    color: \"#cdcdcd\"\n                },\n                title: {\n                    color: \"#4c5356\"\n                },\n                crosshair: {\n                    color: \"#cdcdcd\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#cdcdcd\"\n                        }\n                    },\n                    label: {\n                        color: \"#4c5356\"\n                    },\n                    line: {\n                        color: \"#cdcdcd\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#10c4b2\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#cdcdcd\",\n\n                labels: {\n                    color: \"#4c5356\"\n                },\n                minorTicks: {\n                    color: \"#4c5356\"\n                },\n                majorTicks: {\n                    color: \"#4c5356\"\n                },\n                line: {\n                    color: \"#4c5356\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#10c4b2\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#363940\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#363940\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#4c5356\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#363940\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#363940\"\n                            },\n                            stroke: {\n                                color: \"#363940\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#363940\"\n                        },\n                        fill: {\n                            color: \"#363940\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#363940\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#cdcdcd\"\n                },\n                content: {\n                    color: \"#4c5356\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#363940\"\n                        }\n                    },\n                    stroke: {\n                        color: \"#363940\"\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#10c4b2\", \"#cff3f0\"],\n                [\"#ff7663\", \"#ffe4e0\"],\n                [\"#ffb74f\", \"#fff1dc\"],\n                [\"#a2df53\", \"#ecf9dd\"],\n                [\"#1c9ec4\", \"#d2ecf3\"],\n                [\"#ff63a5\", \"#ffe0ed\"],\n                [\"#1cc47b\", \"#d2f3e5\"]\n            ]\n        }\n    });\n\n\n     registerTheme(\"material\", {\n       chart: {\n            title: {\n                color: \"#444444\"\n            },\n            legend: {\n                labels: {\n                    color: \"#444444\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#CBCBCB\"\n                    },\n                    markers: {\n                        color: \"#CBCBCB\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#444444\"\n                },\n                errorBars: {\n                    color: \"#444444\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#e5e5e5\"\n                        }\n                    },\n                    label: {\n                        color: \"#444444\"\n                    },\n                    line: {\n                        color: \"#e5e5e5\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#c7c7c7\",\n                    line: {\n                        color: \"#787878\"\n                    }\n                },\n                area: {\n                    opacity: 0.9\n                },\n                waterfall: {\n                    line: {\n                        color: \"#e5e5e5\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#e5e5e5\"\n                    }\n                },\n                overlay: {\n                    gradient: \"none\"\n                },\n                border: {\n                    _brightness: 1\n                }\n            },\n            seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\n            axisDefaults: {\n                line: {\n                    color: \"#e5e5e5\"\n                },\n                labels: {\n                    color: \"#444444\"\n                },\n                minorGridLines: {\n                    color: \"#e5e5e5\"\n                },\n                majorGridLines: {\n                    color: \"#e5e5e5\"\n                },\n                title: {\n                    color: \"#444444\"\n                },\n                crosshair: {\n                    color: \"#7f7f7f\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#e5e5e5\"\n                        }\n                    },\n                    label: {\n                        color: \"#444444\"\n                    },\n                    line: {\n                        color: \"#e5e5e5\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#3f51b5\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#e5e5e5\",\n\n                labels: {\n                    color: \"#444444\"\n                },\n                minorTicks: {\n                    color: \"#444444\"\n                },\n                majorTicks: {\n                    color: \"#444444\"\n                },\n                line: {\n                    color: \"#444444\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#3f51b5\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#7f7f7f\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#7f7f7f\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#444444\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#444444\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#444444\"\n                            },\n                            stroke: {\n                                color: \"#444444\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#444444\"\n                        },\n                        fill: {\n                            color: \"#444444\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#444444\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#7f7f7f\"\n                },\n                content: {\n                    color: \"#444444\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#444444\"\n                        }\n                    },\n                    stroke: {\n                        color: \"#444444\"\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#3f51b5\", \"#cff3f0\"],\n                [\"#03a9f4\", \"#e5f6fe\"],\n                [\"#4caf50\", \"#edf7ed\"],\n                [\"#f9ce1d\", \"#fefae8\"],\n                [\"#ff9800\", \"#fff4e5\"],\n                [\"#ff5722\", \"#ffeee8\"]\n            ]\n        }\n    });\n\n    registerTheme(\"materialblack\", {\n       chart: {\n            title: {\n                color: \"#fff\"\n            },\n            legend: {\n                labels: {\n                    color: \"#fff\"\n                },\n                inactiveItems: {\n                    labels: {\n                        color: \"#CBCBCB\"\n                    },\n                    markers: {\n                        color: \"#CBCBCB\"\n                    }\n                }\n            },\n            seriesDefaults: {\n                labels: {\n                    color: \"#fff\"\n                },\n                errorBars: {\n                    color: \"#fff\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#e5e5e5\"\n                        }\n                    },\n                    label: {\n                        color: \"#fff\"\n                    },\n                    line: {\n                        color: \"#e5e5e5\"\n                    }\n                },\n                candlestick: {\n                    downColor: \"#c7c7c7\",\n                    line: {\n                        color: \"#787878\"\n                    }\n                },\n                area: {\n                    opacity: 0.9\n                },\n                waterfall: {\n                    line: {\n                        color: \"#4d4d4d\"\n                    }\n                },\n                horizontalWaterfall: {\n                    line: {\n                        color: \"#4d4d4d\"\n                    }\n                },\n                overlay: {\n                    gradient: \"none\"\n                },\n                border: {\n                    _brightness: 1\n                }\n            },\n            chartArea: {\n                background: \"#1c1c1c\"\n            },\n            seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\n            axisDefaults: {\n                line: {\n                    color: \"#4d4d4d\"\n                },\n                labels: {\n                    color: \"#fff\"\n                },\n                minorGridLines: {\n                    color: \"#4d4d4d\"\n                },\n                majorGridLines: {\n                    color: \"#4d4d4d\"\n                },\n                title: {\n                    color: \"#fff\"\n                },\n                crosshair: {\n                    color: \"#7f7f7f\"\n                },\n                notes: {\n                    icon: {\n                        background: \"transparent\",\n                        border: {\n                            color: \"#4d4d4d\"\n                        }\n                    },\n                    label: {\n                        color: \"#fff\"\n                    },\n                    line: {\n                        color: \"#4d4d4d\"\n                    }\n                }\n            }\n        },\n        gauge: {\n            pointer: {\n                color: \"#3f51b5\"\n            },\n            scale: {\n                rangePlaceholderColor: \"#4d4d4d\",\n\n                labels: {\n                    color: \"#fff\"\n                },\n                minorTicks: {\n                    color: \"#fff\"\n                },\n                majorTicks: {\n                    color: \"#fff\"\n                },\n                line: {\n                    color: \"#fff\"\n                }\n            }\n        },\n        diagram: {\n            shapeDefaults: {\n                fill: {\n                    color: \"#3f51b5\"\n                },\n                connectorDefaults: {\n                    fill: {\n                        color: \"#7f7f7f\"\n                    },\n                    stroke: {\n                        color: WHITE\n                    },\n                    hover: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#7f7f7f\"\n                        }\n                    }\n                },\n                content: {\n                    color: \"#fff\"\n                }\n            },\n            editable: {\n                resize: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#fff\"\n                        },\n                        hover: {\n                            fill: {\n                                color: \"#fff\"\n                            },\n                            stroke: {\n                                color: \"#fff\"\n                            }\n                        }\n                    }\n                },\n                rotate: {\n                    thumb: {\n                        stroke: {\n                            color: \"#fff\"\n                        },\n                        fill: {\n                            color: \"#fff\"\n                        }\n                    }\n                }\n            },\n            selectable: {\n                stroke: {\n                    color: \"#fff\"\n                }\n            },\n            connectionDefaults: {\n                stroke: {\n                    color: \"#7f7f7f\"\n                },\n                content: {\n                    color: \"#fff\"\n                },\n                selection: {\n                    handles: {\n                        fill: {\n                            color: WHITE\n                        },\n                        stroke: {\n                            color: \"#fff\"\n                        }\n                    },\n                    stroke: {\n                        color: \"#fff\"\n                    }\n                }\n            }\n        },\n        treeMap: {\n            colors: [\n                [\"#3f51b5\", \"#cff3f0\"],\n                [\"#03a9f4\", \"#e5f6fe\"],\n                [\"#4caf50\", \"#edf7ed\"],\n                [\"#f9ce1d\", \"#fefae8\"],\n                [\"#ff9800\", \"#fff4e5\"],\n                [\"#ff5722\", \"#ffeee8\"]\n            ]\n        }\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var each = $.each,\n        isArray = $.isArray,\n        map = $.map,\n        math = Math,\n        noop = $.noop,\n        extend = $.extend,\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        Observable = kendo.Observable,\n        DataSource = kendo.data.DataSource,\n        Widget = kendo.ui.Widget,\n        deepExtend = kendo.deepExtend,\n        getter = kendo.getter,\n        isFn = kendo.isFunction,\n        template = kendo.template,\n\n        dataviz = kendo.dataviz,\n        Axis = dataviz.Axis,\n        AxisLabel = dataviz.AxisLabel,\n        Box2D = dataviz.Box2D,\n        BoxElement = dataviz.BoxElement,\n        ChartElement = dataviz.ChartElement,\n        Color = kendo.drawing.Color,\n        CurveProcessor = dataviz.CurveProcessor,\n        FloatElement = dataviz.FloatElement,\n        Note = dataviz.Note,\n        LogarithmicAxis = dataviz.LogarithmicAxis,\n        NumericAxis = dataviz.NumericAxis,\n        Point2D = dataviz.Point2D,\n        RootElement = dataviz.RootElement,\n        Ring = dataviz.Ring,\n        ShapeElement = dataviz.ShapeElement,\n        ShapeBuilder = dataviz.ShapeBuilder,\n        Text = dataviz.Text,\n        TextBox = dataviz.TextBox,\n        Title = dataviz.Title,\n        alignPathToPixel = dataviz.alignPathToPixel,\n        autoFormat = dataviz.autoFormat,\n        dateComparer = dataviz.dateComparer,\n        getSpacing = dataviz.getSpacing,\n        inArray = dataviz.inArray,\n        interpolate = dataviz.interpolateValue,\n        mwDelta = dataviz.mwDelta,\n        round = dataviz.round,\n\n        util = kendo.util,\n        append = util.append,\n        defined = util.defined,\n        last = util.last,\n        limitValue = util.limitValue,\n        sparseArrayLimits = util.sparseArrayLimits,\n        sparseArrayMin = util.sparseArrayMin,\n        sparseArrayMax = util.sparseArrayMax,\n        renderTemplate = util.renderTemplate,\n        valueOrDefault = util.valueOrDefault,\n\n        geom = dataviz.geometry,\n        draw = dataviz.drawing;\n\n    // Constants ==============================================================\n    var NS = \".kendoChart\",\n        ABOVE = \"above\",\n        AREA = \"area\",\n        AUTO = \"auto\",\n        FIT = \"fit\",\n        AXIS_LABEL_CLICK = dataviz.AXIS_LABEL_CLICK,\n        BAR = \"bar\",\n        BAR_ALIGN_MIN_WIDTH = 6,\n        BAR_BORDER_BRIGHTNESS = 0.8,\n        BELOW = \"below\",\n        BLACK = \"#000\",\n        BOTH = \"both\",\n        BOTTOM = \"bottom\",\n        BOX_PLOT = \"boxPlot\",\n        BUBBLE = \"bubble\",\n        BULLET = \"bullet\",\n        CANDLESTICK = \"candlestick\",\n        CATEGORY = \"category\",\n        CENTER = \"center\",\n        CHANGE = \"change\",\n        CIRCLE = \"circle\",\n        CONTEXTMENU_NS = \"contextmenu\" + NS,\n        CLIP = dataviz.CLIP,\n        COLOR = \"color\",\n        COLUMN = \"column\",\n        COORD_PRECISION = dataviz.COORD_PRECISION,\n        CROSS = \"cross\",\n        CSS_PREFIX = \"k-\",\n        CUSTOM = \"custom\",\n        DATABOUND = \"dataBound\",\n        DATE = \"date\",\n        DAYS = \"days\",\n        DEFAULT_FONT = dataviz.DEFAULT_FONT,\n        DEFAULT_HEIGHT = dataviz.DEFAULT_HEIGHT,\n        DEFAULT_PRECISION = dataviz.DEFAULT_PRECISION,\n        DEFAULT_WIDTH = dataviz.DEFAULT_WIDTH,\n        DEFAULT_ERROR_BAR_WIDTH = 4,\n        DONUT = \"donut\",\n        DONUT_SECTOR_ANIM_DELAY = 50,\n        DRAG = \"drag\",\n        DRAG_END = \"dragEnd\",\n        DRAG_START = \"dragStart\",\n        ERROR_LOW_FIELD = \"errorLow\",\n        ERROR_HIGH_FIELD = \"errorHigh\",\n        X_ERROR_LOW_FIELD = \"xErrorLow\",\n        X_ERROR_HIGH_FIELD = \"xErrorHigh\",\n        Y_ERROR_LOW_FIELD = \"yErrorLow\",\n        Y_ERROR_HIGH_FIELD = \"yErrorHigh\",\n        FADEIN = \"fadeIn\",\n        FIRST = \"first\",\n        FROM = \"from\",\n        FUNNEL = \"funnel\",\n        GLASS = \"glass\",\n        HORIZONTAL = \"horizontal\",\n        HORIZONTAL_WATERFALL = \"horizontalWaterfall\",\n        HOURS = \"hours\",\n        INITIAL_ANIMATION_DURATION = dataviz.INITIAL_ANIMATION_DURATION,\n        INSIDE_BASE = \"insideBase\",\n        INSIDE_END = \"insideEnd\",\n        INTERPOLATE = \"interpolate\",\n        LEFT = \"left\",\n        LEGEND_ITEM_CLICK = \"legendItemClick\",\n        LEGEND_ITEM_HOVER = \"legendItemHover\",\n        LINE = \"line\",\n        LINE_MARKER_SIZE = 8,\n        LINEAR = \"linear\",\n        LOGARITHMIC = \"log\",\n        MAX = \"max\",\n        MAX_EXPAND_DEPTH = 5,\n        MAX_VALUE = Number.MAX_VALUE,\n        MIN = \"min\",\n        MIN_VALUE = -Number.MAX_VALUE,\n        MINUTES = \"minutes\",\n        MONTHS = \"months\",\n        MOUSELEAVE_NS = \"mouseleave\" + NS,\n        MOUSEMOVE_TRACKING = \"mousemove.tracking\",\n        MOUSEOVER_NS = \"mouseover\" + NS,\n        MOUSEOUT_NS = \"mouseout\" + NS,\n        MOUSEMOVE_NS = \"mousemove\" + NS,\n        MOUSEMOVE_DELAY = 20,\n        MOUSEWHEEL_DELAY = 150,\n        MOUSEWHEEL_NS = \"DOMMouseScroll\" + NS + \" mousewheel\" + NS,\n        NOTE_CLICK = dataviz.NOTE_CLICK,\n        NOTE_HOVER = dataviz.NOTE_HOVER,\n        NOTE_TEXT = \"noteText\",\n        OBJECT = \"object\",\n        OHLC = \"ohlc\",\n        OUTSIDE_END = \"outsideEnd\",\n        OUTLINE_SUFFIX = \"_outline\",\n        PIE = \"pie\",\n        PIE_SECTOR_ANIM_DELAY = 70,\n        PLOT_AREA_CLICK = \"plotAreaClick\",\n        POINTER = \"pointer\",\n        RANGE_BAR = \"rangeBar\",\n        RANGE_COLUMN = \"rangeColumn\",\n        RENDER = \"render\",\n        RIGHT = \"right\",\n        ROUNDED_BEVEL = \"roundedBevel\",\n        ROUNDED_GLASS = \"roundedGlass\",\n        SCATTER = \"scatter\",\n        SCATTER_LINE = \"scatterLine\",\n        SECONDS = \"seconds\",\n        SELECT_START = \"selectStart\",\n        SELECT = \"select\",\n        SELECT_END = \"selectEnd\",\n        SERIES_CLICK = \"seriesClick\",\n        SERIES_HOVER = \"seriesHover\",\n        START_SCALE = 0.001,\n        STEP = \"step\",\n        SMOOTH = \"smooth\",\n        STD_ERR = \"stderr\",\n        STD_DEV = \"stddev\",\n        STRING = \"string\",\n        SUMMARY_FIELD = \"summary\",\n        TIME_PER_SECOND = 1000,\n        TIME_PER_MINUTE = 60 * TIME_PER_SECOND,\n        TIME_PER_HOUR = 60 * TIME_PER_MINUTE,\n        TIME_PER_DAY = 24 * TIME_PER_HOUR,\n        TIME_PER_WEEK = 7 * TIME_PER_DAY,\n        TIME_PER_MONTH = 31 * TIME_PER_DAY,\n        TIME_PER_YEAR = 365 * TIME_PER_DAY,\n        TIME_PER_UNIT = {\n            \"years\": TIME_PER_YEAR,\n            \"months\": TIME_PER_MONTH,\n            \"weeks\": TIME_PER_WEEK,\n            \"days\": TIME_PER_DAY,\n            \"hours\": TIME_PER_HOUR,\n            \"minutes\": TIME_PER_MINUTE,\n            \"seconds\": TIME_PER_SECOND\n        },\n        TO = \"to\",\n        TOP = \"top\",\n        TOOLTIP_ANIMATION_DURATION = 150,\n        TOOLTIP_OFFSET = 5,\n        TOOLTIP_SHOW_DELAY = 100,\n        TOOLTIP_HIDE_DELAY = 100,\n        TOOLTIP_INVERSE = \"chart-tooltip-inverse\",\n        VALUE = \"value\",\n        VERTICAL = \"vertical\",\n        VERTICAL_AREA = \"verticalArea\",\n        VERTICAL_BULLET = \"verticalBullet\",\n        VERTICAL_LINE = \"verticalLine\",\n        WATERFALL = \"waterfall\",\n        WEEKS = \"weeks\",\n        WHITE = \"#fff\",\n        X = \"x\",\n        Y = \"y\",\n        YEARS = \"years\",\n        ZERO = \"zero\",\n        ZOOM_ACCELERATION = 3,\n        ZOOM_START = \"zoomStart\",\n        ZOOM = \"zoom\",\n        ZOOM_END = \"zoomEnd\",\n        BASE_UNITS = [\n            SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\n        ],\n        EQUALLY_SPACED_SERIES = [\n            BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n        ];\n\n    var DateLabelFormats = {\n        seconds: \"HH:mm:ss\",\n        minutes: \"HH:mm\",\n        hours: \"HH:mm\",\n        days: \"M/d\",\n        weeks: \"M/d\",\n        months: \"MMM 'yy\",\n        years: \"yyyy\"\n    };\n\n    // Chart ==================================================================\n    var Chart = Widget.extend({\n        init: function(element, userOptions) {\n            var chart = this,\n                options,\n                dataSource;\n\n            kendo.destroy(element);\n\n            Widget.fn.init.call(chart, element);\n\n            chart.element\n                .addClass(CSS_PREFIX + this.options.name.toLowerCase())\n                .css(\"position\", \"relative\");\n\n            if (userOptions) {\n                dataSource = userOptions.dataSource;\n                userOptions.dataSource = undefined;\n            }\n\n            options = deepExtend({}, chart.options, userOptions);\n            chart._originalOptions = deepExtend({}, options);\n            chart._initTheme(options);\n\n            chart._initSurface();\n\n            chart.bind(chart.events, chart.options);\n\n            chart.wrapper = chart.element;\n\n            if (userOptions) {\n                userOptions.dataSource = dataSource;\n            }\n\n            chart._initDataSource(userOptions);\n\n            kendo.notify(chart, dataviz.ui);\n        },\n\n        _initTheme: function(options) {\n            var chart = this,\n                themes = dataviz.ui.themes || {},\n                themeName = options.theme,\n                theme = themes[themeName] || themes[themeName.toLowerCase()],\n                themeOptions = themeName && theme ? theme.chart : {},\n                seriesCopies = [],\n                series = options.series || [],\n                i;\n\n            for (i = 0; i < series.length; i++) {\n                seriesCopies.push($.extend({}, series[i]));\n            }\n            options.series = seriesCopies;\n\n            resolveAxisAliases(options);\n            chart._applyDefaults(options, themeOptions);\n\n            // Clean up default if not overriden by data attributes\n            if (options.seriesColors === null) {\n                options.seriesColors = undefined;\n            }\n\n            chart.options = deepExtend({}, themeOptions, options);\n            applySeriesColors(chart.options);\n        },\n\n        _initDataSource: function(userOptions) {\n            var chart = this,\n                dataSource = (userOptions || {}).dataSource;\n\n            chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n\n            chart.dataSource = DataSource\n                .create(dataSource)\n                .bind(CHANGE, chart._dataChangeHandler);\n\n            chart._bindCategories();\n\n            if (dataSource) {\n                chart._hasDataSource = true;\n            }\n\n            chart._redraw();\n            chart._attachEvents();\n\n            if (dataSource) {\n                if (chart.options.autoBind) {\n                    chart.dataSource.fetch();\n                }\n            }\n        },\n\n        setDataSource: function(dataSource) {\n            var chart = this;\n\n            chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n            chart.dataSource = dataSource = DataSource.create(dataSource);\n            chart._hasDataSource = true;\n            chart._hasData = false;\n\n            dataSource.bind(CHANGE, chart._dataChangeHandler);\n\n            if (chart.options.autoBind) {\n                dataSource.fetch();\n            }\n        },\n\n        events:[\n            DATABOUND,\n            SERIES_CLICK,\n            SERIES_HOVER,\n            AXIS_LABEL_CLICK,\n            LEGEND_ITEM_CLICK,\n            LEGEND_ITEM_HOVER,\n            PLOT_AREA_CLICK,\n            DRAG_START,\n            DRAG,\n            DRAG_END,\n            ZOOM_START,\n            ZOOM,\n            ZOOM_END,\n            SELECT_START,\n            SELECT,\n            SELECT_END,\n            NOTE_CLICK,\n            NOTE_HOVER,\n            RENDER\n        ],\n\n        items: function() {\n            return $();\n        },\n\n        options: {\n            name: \"Chart\",\n            renderAs: \"\",\n            theme: \"default\",\n            chartArea: {},\n            legend: {\n                visible: true,\n                labels: {}\n            },\n            categoryAxis: {},\n            autoBind: true,\n            seriesDefaults: {\n                type: COLUMN,\n                data: [],\n                highlight: {\n                    visible: true\n                },\n                labels: {},\n                negativeValues: {\n                    visible: false\n                }\n            },\n            series: [],\n            seriesColors: null,\n            tooltip: {\n                visible: false\n            },\n            transitions: true,\n            valueAxis: {},\n            plotArea: {},\n            title: {},\n            xAxis: {},\n            yAxis: {},\n            panes: [{}]\n        },\n\n        refresh: function() {\n            var chart = this;\n\n            chart._applyDefaults(chart.options);\n\n            applySeriesColors(chart.options);\n\n            chart._bindSeries();\n            chart._bindCategories();\n\n            chart.trigger(DATABOUND);\n            chart._redraw();\n        },\n\n        getSize: function() {\n            return kendo.dimensions(this.element);\n        },\n\n        _resize: function() {\n            var t = this.options.transitions;\n            this.options.transitions = false;\n\n            this._redraw();\n\n            this.options.transitions = t;\n        },\n\n        redraw: function(paneName) {\n            var chart = this,\n                pane,\n                plotArea;\n\n            chart._applyDefaults(chart.options);\n            applySeriesColors(chart.options);\n\n            if (paneName) {\n                plotArea = chart._model._plotArea;\n                pane = plotArea.findPane(paneName);\n                plotArea.redraw(pane);\n            } else {\n                chart._redraw();\n            }\n        },\n\n        _initSurface: function() {\n            var surface = this.surface;\n            var wrap = this._surfaceWrap();\n            if (!surface || surface.options.type !== this.options.renderAs) {\n                if (surface) {\n                    surface.destroy();\n                }\n\n                this.surface = draw.Surface.create(wrap, {\n                    type: this.options.renderAs\n                });\n            } else {\n                this.surface.clear();\n            }\n\n            var chartArea = this.options.chartArea;\n            if (chartArea.width) {\n                wrap.css(\"width\", chartArea.width);\n            }\n            if (chartArea.height) {\n                wrap.css(\"height\", chartArea.height);\n            }\n        },\n\n        _surfaceWrap: function() {\n            return this.element;\n        },\n\n        _redraw: function() {\n            var chart = this,\n                model = chart._getModel(),\n                view;\n\n            chart._destroyView();\n\n            chart._model = model;\n            chart._plotArea = model._plotArea;\n\n            model.renderVisual();\n\n            if (this.options.transitions !== false) {\n                model.traverse(function(element) {\n                    if (element.animation) {\n                        element.animation.setup();\n                    }\n                });\n            }\n\n            chart._initSurface();\n            chart.surface.draw(model.visual);\n\n            if (this.options.transitions !== false) {\n                model.traverse(function(element) {\n                    if (element.animation) {\n                        element.animation.play();\n                    }\n                });\n            }\n\n            chart._tooltip = chart._createTooltip();\n            chart._highlight = new Highlight(view);\n            chart._setupSelection();\n\n            if (!chart._hasDataSource || chart._hasData || !chart.options.autoBind) {\n                chart.trigger(RENDER);\n            }\n        },\n\n        exportVisual: function() {\n            var model = this._getModel();\n            model.renderVisual();\n\n            return model.visual;\n        },\n\n        _sharedTooltip: function() {\n            var chart = this,\n                options = chart.options;\n\n            return chart._plotArea instanceof CategoricalPlotArea && options.tooltip.shared;\n        },\n\n        _createTooltip: function() {\n            var chart = this,\n                options = chart.options,\n                element = chart.element,\n                tooltip;\n\n            if (chart._sharedTooltip()) {\n                tooltip = new SharedTooltip(element, chart._plotArea, options.tooltip);\n            } else {\n                tooltip = new Tooltip(element, options.tooltip);\n            }\n\n            return tooltip;\n        },\n\n        _applyDefaults: function(options, themeOptions) {\n            applyAxisDefaults(options, themeOptions);\n            applySeriesDefaults(options, themeOptions);\n        },\n\n        _getModel: function() {\n            var chart = this,\n                options = chart.options,\n                model = new RootElement(chart._modelOptions()),\n                plotArea;\n\n            model.chart = chart;\n\n            Title.buildTitle(options.title, model);\n\n            plotArea = model._plotArea = chart._createPlotArea();\n            if (options.legend.visible) {\n                model.append(new Legend(plotArea.options.legend));\n            }\n            model.append(plotArea);\n            model.reflow();\n\n            return model;\n        },\n\n        _modelOptions: function() {\n            var chart = this,\n                options = chart.options,\n                element = chart.element,\n                height = math.floor(element.height()),\n                width = math.floor(element.width());\n\n            chart._size = null;\n\n            return deepExtend({\n                width: width || DEFAULT_WIDTH,\n                height: height || DEFAULT_HEIGHT,\n                transitions: options.transitions\n            }, options.chartArea);\n        },\n\n        _createPlotArea: function(skipSeries) {\n            var chart = this,\n                options = chart.options;\n\n            return PlotAreaFactory.current.create(skipSeries ? [] : options.series, options);\n        },\n\n        _setupSelection: function() {\n            var chart = this,\n                plotArea = chart._plotArea,\n                axes = plotArea.axes,\n                selections = chart._selections = [],\n                selection, i, axis,\n                min, max, options;\n\n            if (!chart._selectStartHandler) {\n                chart._selectStartHandler = proxy(chart._selectStart, chart);\n                chart._selectHandler = proxy(chart._select, chart);\n                chart._selectEndHandler = proxy(chart._selectEnd, chart);\n            }\n\n            for (i = 0; i < axes.length; i++) {\n                axis = axes[i];\n                options = axis.options;\n                if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n                    min = 0;\n                    max = options.categories.length - 1;\n\n                    if (axis instanceof DateCategoryAxis) {\n                        min = options.categories[min];\n                        max = options.categories[max];\n                    }\n\n                    if (!options.justified) {\n                        if (axis instanceof DateCategoryAxis) {\n                            max = addDuration(max, 1, options.baseUnit, options.weekStartDay);\n                        } else {\n                            max++;\n                        }\n                    }\n\n                    selection = new Selection(chart, axis,\n                        deepExtend({ min: min, max: max }, options.select)\n                    );\n\n                    selection.bind(SELECT_START, chart._selectStartHandler);\n                    selection.bind(SELECT, chart._selectHandler);\n                    selection.bind(SELECT_END, chart._selectEndHandler);\n\n                    selections.push(selection);\n                }\n            }\n        },\n\n        _selectStart: function(e) {\n            return this.trigger(SELECT_START, e);\n        },\n\n        _select: function(e) {\n            return this.trigger(SELECT, e);\n        },\n\n        _selectEnd: function(e) {\n            return this.trigger(SELECT_END, e);\n        },\n\n        _attachEvents: function() {\n            var chart = this,\n                element = chart.element;\n\n            element.on(CONTEXTMENU_NS, proxy(chart._click, chart));\n            element.on(MOUSEOVER_NS, proxy(chart._mouseover, chart));\n            element.on(MOUSEOUT_NS, proxy(chart._mouseout, chart));\n            element.on(MOUSEWHEEL_NS, proxy(chart._mousewheel, chart));\n            element.on(MOUSELEAVE_NS, proxy(chart._mouseleave, chart));\n\n            chart._mousemove = kendo.throttle(\n                proxy(chart._mousemove, chart),\n                MOUSEMOVE_DELAY\n            );\n\n            if (chart._shouldAttachMouseMove()) {\n                element.on(MOUSEMOVE_NS, chart._mousemove);\n            }\n\n            if (kendo.UserEvents) {\n                chart._userEvents = new kendo.UserEvents(element, {\n                    global: true,\n                    filter: \":not(.k-selector)\",\n                    multiTouch: false,\n                    tap: proxy(chart._tap, chart),\n                    start: proxy(chart._start, chart),\n                    move: proxy(chart._move, chart),\n                    end: proxy(chart._end, chart)\n                });\n            }\n        },\n\n        _mouseout: function(e) {\n            var chart = this,\n                element = chart._getChartElement(e);\n\n            if (element && element.leave) {\n                element.leave(chart, e);\n            }\n        },\n\n        _start: function(e) {\n            var chart = this,\n                events = chart._events;\n\n            if (defined(events[DRAG_START] || events[DRAG] || events[DRAG_END])) {\n                chart._startNavigation(e, DRAG_START);\n            }\n        },\n\n        _move: function(e) {\n            var chart = this,\n                state = chart._navState,\n                axes,\n                ranges = {},\n                i, currentAxis, axisName, axis, delta;\n\n            if (state) {\n                e.preventDefault();\n\n                axes = state.axes;\n\n                for (i = 0; i < axes.length; i++) {\n                    currentAxis = axes[i];\n                    axisName = currentAxis.options.name;\n                    if (axisName) {\n                        axis = currentAxis.options.vertical ? e.y : e.x;\n                        delta = axis.startLocation - axis.location;\n\n                        if (delta !== 0) {\n                            ranges[currentAxis.options.name] =\n                                currentAxis.translateRange(delta);\n                        }\n                    }\n                }\n\n                state.axisRanges = ranges;\n                chart.trigger(DRAG, {\n                   axisRanges: ranges,\n                   originalEvent: e\n                });\n            }\n        },\n\n        _end: function(e) {\n            this._endNavigation(e, DRAG_END);\n        },\n\n        _mousewheel: function(e) {\n            var chart = this,\n                origEvent = e.originalEvent,\n                prevented,\n                delta = mwDelta(e),\n                totalDelta,\n                state = chart._navState,\n                axes,\n                i,\n                currentAxis,\n                axisName,\n                ranges = {};\n\n            if (!state) {\n                prevented = chart._startNavigation(origEvent, ZOOM_START);\n                if (!prevented) {\n                    state = chart._navState;\n                }\n            }\n\n            if (state) {\n                totalDelta = state.totalDelta || delta;\n                state.totalDelta = totalDelta + delta;\n\n                axes = chart._navState.axes;\n\n                for (i = 0; i < axes.length; i++) {\n                    currentAxis = axes[i];\n                    axisName = currentAxis.options.name;\n                    if (axisName) {\n                        ranges[axisName] = currentAxis.scaleRange(-totalDelta);\n                    }\n                }\n\n                chart.trigger(ZOOM, {\n                    delta: delta,\n                    axisRanges: ranges,\n                    originalEvent: e\n                });\n\n                if (chart._mwTimeout) {\n                    clearTimeout(chart._mwTimeout);\n                }\n\n                chart._mwTimeout = setTimeout(function() {\n                    chart._endNavigation(e, ZOOM_END);\n                }, MOUSEWHEEL_DELAY);\n            }\n        },\n\n        _startNavigation: function(e, chartEvent) {\n            var chart = this,\n                coords = chart._eventCoordinates(e),\n                plotArea = chart._model._plotArea,\n                pane = plotArea.findPointPane(coords),\n                axes = plotArea.axes.slice(0),\n                i,\n                currentAxis,\n                inAxis = false,\n                prevented;\n\n            if (!pane) {\n                return;\n            }\n\n            for (i = 0; i < axes.length; i++) {\n                currentAxis = axes[i];\n                if (currentAxis.box.containsPoint(coords)) {\n                    inAxis = true;\n                    break;\n                }\n            }\n\n            if (!inAxis && plotArea.backgroundBox().containsPoint(coords)) {\n                prevented = chart.trigger(chartEvent, {\n                    axisRanges: axisRanges(axes),\n                    originalEvent: e\n                });\n\n                if (prevented) {\n                    chart._userEvents.cancel();\n                } else {\n                    chart._suppressHover = true;\n                    chart._unsetActivePoint();\n                    chart._navState = {\n                        pane: pane,\n                        axes: axes\n                    };\n                }\n            }\n        },\n\n        _endNavigation: function(e, chartEvent) {\n            var chart = this;\n\n            if (chart._navState) {\n                chart.trigger(chartEvent, {\n                    axisRanges: chart._navState.axisRanges,\n                    originalEvent: e\n                });\n                chart._suppressHover = false;\n                chart._navState = null;\n            }\n        },\n\n        _getChartElement: function(e, match) {\n            var element = this.surface.eventTarget(e);\n            if (!element) {\n                return;\n            }\n\n            var chartElement;\n            while (element && !chartElement) {\n                chartElement = element.chartElement;\n                element = element.parent;\n            }\n\n            if (chartElement) {\n                if (chartElement.aliasFor) {\n                    chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n                }\n\n                if (match) {\n                    chartElement = chartElement.closest(match);\n                }\n\n                return chartElement;\n            }\n        },\n\n        _eventCoordinates: function(e) {\n            var chart = this,\n                isTouch = defined((e.x || {}).client),\n                clientX = isTouch ? e.x.client : e.clientX,\n                clientY = isTouch ? e.y.client : e.clientY;\n\n            return chart._toModelCoordinates(clientX, clientY);\n        },\n\n        _toModelCoordinates: function(clientX, clientY) {\n            var element = this.element,\n                offset = element.offset(),\n                paddingLeft = parseInt(element.css(\"paddingLeft\"), 10),\n                paddingTop = parseInt(element.css(\"paddingTop\"), 10),\n                win = $(window);\n\n            return new Point2D(\n                clientX - offset.left - paddingLeft + win.scrollLeft(),\n                clientY - offset.top - paddingTop + win.scrollTop()\n            );\n        },\n\n        _tap: function(e) {\n            var chart = this,\n                element = chart._getChartElement(e);\n\n            if (chart._activePoint === element) {\n                chart._click(e);\n            } else {\n                if (!chart._startHover(e)) {\n                    chart._unsetActivePoint();\n                }\n\n                chart._click(e);\n            }\n        },\n\n        _click: function(e) {\n            var chart = this,\n                element = chart._getChartElement(e);\n\n            while (element) {\n                if (element.click) {\n                    element.click(chart, e);\n                }\n\n                element = element.parent;\n            }\n        },\n\n        _startHover: function(e) {\n            var chart = this,\n                element = chart._getChartElement(e),\n                tooltip = chart._tooltip,\n                highlight = chart._highlight,\n                tooltipOptions = chart.options.tooltip,\n                point;\n\n            if (chart._suppressHover || !highlight || highlight.isHighlighted(element) || chart._sharedTooltip()) {\n                return;\n            }\n\n            point = chart._getChartElement(e, function(element) {\n                return element.hover;\n            });\n\n            if (point && !point.hover(chart, e)) {\n                chart._activePoint = point;\n\n                tooltipOptions = deepExtend({}, tooltipOptions, point.options.tooltip);\n                if (tooltipOptions.visible) {\n                    tooltip.show(point);\n                }\n\n                highlight.show(point);\n\n                return point.tooltipTracking;\n            }\n        },\n\n        _mouseover: function(e) {\n            var chart = this;\n\n            if (chart._startHover(e)) {\n                $(document).on(MOUSEMOVE_TRACKING, proxy(chart._mouseMoveTracking, chart));\n            }\n        },\n\n        _mouseMoveTracking: function(e) {\n            var chart = this,\n                options = chart.options,\n                tooltip = chart._tooltip,\n                highlight = chart._highlight,\n                coords = chart._eventCoordinates(e),\n                point = chart._activePoint,\n                tooltipOptions, owner, seriesPoint;\n\n            if (chart._plotArea.box.containsPoint(coords)) {\n                if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n                    seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n                    if (seriesPoint && seriesPoint != point) {\n                        seriesPoint.hover(chart, e);\n                        chart._activePoint = seriesPoint;\n\n                        tooltipOptions = deepExtend({}, options.tooltip, point.options.tooltip);\n                        if (tooltipOptions.visible) {\n                            tooltip.show(seriesPoint);\n                        }\n\n                        highlight.show(seriesPoint);\n                    }\n                }\n            } else {\n                $(document).off(MOUSEMOVE_TRACKING);\n                chart._unsetActivePoint();\n            }\n        },\n\n        _mousemove: function(e) {\n            var coords = this._eventCoordinates(e);\n\n            this._trackCrosshairs(coords);\n\n            if (this._sharedTooltip()) {\n                this._trackSharedTooltip(coords, e);\n            }\n        },\n\n        _trackCrosshairs: function(coords) {\n            var crosshairs = this._plotArea.crosshairs,\n                i,\n                current;\n\n            for (i = 0; i < crosshairs.length; i++) {\n                current = crosshairs[i];\n\n                if (current.box.containsPoint(coords)) {\n                    current.showAt(coords);\n                } else {\n                    current.hide();\n                }\n            }\n        },\n\n        _trackSharedTooltip: function(coords, e) {\n            var chart = this,\n                options = chart.options,\n                plotArea = chart._plotArea,\n                categoryAxis = plotArea.categoryAxis,\n                tooltip = chart._tooltip,\n                tooltipOptions = options.tooltip,\n                highlight = chart._highlight,\n                index, points;\n\n            if (plotArea.box.containsPoint(coords)) {\n                index = categoryAxis.pointCategoryIndex(coords);\n                if (index !== chart._tooltipCategoryIx) {\n                    points = plotArea.pointsByCategoryIndex(index);\n\n                    var pointArgs = $.map(points, function(point) {\n                        return point.eventArgs(e);\n                    });\n\n                    var hoverArgs = pointArgs[0] || {};\n                    hoverArgs.categoryPoints = pointArgs;\n\n                    if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n                        if (tooltipOptions.visible) {\n                            tooltip.showAt(points, coords);\n                        }\n\n                        highlight.show(points);\n                    } else {\n                        tooltip.hide();\n                    }\n\n                    chart._tooltipCategoryIx = index;\n                }\n            }\n        },\n\n        _mouseleave: function(e) {\n            var chart = this,\n                plotArea = chart._plotArea,\n                crosshairs = plotArea.crosshairs,\n                tooltip = chart._tooltip,\n                highlight = chart._highlight,\n                target = e.relatedTarget,\n                i;\n\n            if (!(target && $(target).closest(tooltip.element).length)) {\n                chart._mousemove.cancel();\n\n                for (i = 0; i < crosshairs.length; i++) {\n                    crosshairs[i].hide();\n                }\n\n                highlight.hide();\n\n                setTimeout(proxy(tooltip.hide, tooltip), TOOLTIP_HIDE_DELAY);\n                chart._tooltipCategoryIx = null;\n            }\n        },\n\n        _unsetActivePoint: function() {\n            var chart = this,\n                tooltip = chart._tooltip,\n                highlight = chart._highlight;\n\n            chart._activePoint = null;\n\n            if (tooltip) {\n                tooltip.hide();\n            }\n\n            if (highlight) {\n                highlight.hide();\n            }\n        },\n\n        _onDataChanged: function() {\n            var chart = this,\n                options = chart.options,\n                series = chart._sourceSeries || options.series,\n                seriesIx,\n                seriesLength = series.length,\n                data = chart.dataSource.view(),\n                grouped = (chart.dataSource.group() || []).length > 0,\n                processedSeries = [],\n                currentSeries;\n\n            for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n                currentSeries = series[seriesIx];\n\n                if (chart._isBindable(currentSeries) && grouped) {\n                    append(processedSeries,\n                           groupSeries(currentSeries, data));\n                } else {\n                    processedSeries.push(currentSeries || []);\n                }\n            }\n\n            chart._sourceSeries = series;\n            options.series = processedSeries;\n\n            applySeriesColors(chart.options);\n\n            chart._bindSeries();\n            chart._bindCategories();\n            chart._hasData = true;\n\n            chart._deferRedraw();\n        },\n\n        _deferRedraw: function() {\n            var chart = this;\n\n            if (kendo.support.vml) {\n                chart._clearRedrawTimeout();\n                chart._redrawTimeout = setTimeout(function() {\n                    if (!chart.surface) {\n                        return;\n                    }\n\n                    chart.trigger(DATABOUND);\n                    chart._redraw();\n                }, 0);\n            } else {\n                chart.trigger(DATABOUND);\n                chart._redraw();\n            }\n        },\n\n        _clearRedrawTimeout: function() {\n            if (this._redrawTimeout) {\n                clearInterval(this._redrawTimeout);\n                this._redrawTimeout = null;\n            }\n        },\n\n        _bindSeries: function() {\n            var chart = this,\n                data = chart.dataSource.view(),\n                series = chart.options.series,\n                seriesIx,\n                seriesLength = series.length,\n                currentSeries,\n                groupIx,\n                seriesData;\n\n            for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n                currentSeries = series[seriesIx];\n\n                if (chart._isBindable(currentSeries)) {\n                    groupIx = currentSeries._groupIx;\n                    seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n\n                    if (currentSeries.autoBind !== false) {\n                        currentSeries.data = seriesData;\n                    }\n                }\n            }\n        },\n\n        _bindCategories: function() {\n            var chart = this,\n                data = chart.dataSource.view() || [],\n                grouped = (chart.dataSource.group() || []).length > 0,\n                categoriesData = data,\n                options = chart.options,\n                definitions = [].concat(options.categoryAxis),\n                axisIx,\n                axis;\n\n            if (grouped) {\n                if (data.length) {\n                    categoriesData = data[0].items;\n                }\n            }\n\n            for (axisIx = 0; axisIx < definitions.length; axisIx++) {\n                axis = definitions[axisIx];\n                if (axis.autoBind !== false) {\n                    chart._bindCategoryAxis(axis, categoriesData, axisIx);\n                }\n            }\n        },\n\n        _bindCategoryAxis: function(axis, data, axisIx) {\n            var count = (data || []).length,\n                categoryIx,\n                category,\n                row;\n\n            if (axis.field) {\n                axis.categories = [];\n                for (categoryIx = 0; categoryIx < count; categoryIx++) {\n                    row = data[categoryIx];\n\n                    category = getField(axis.field, row);\n                    if (categoryIx === 0) {\n                        axis.categories = [category];\n                        axis.dataItems = [row];\n                    } else {\n                        axis.categories.push(category);\n                        axis.dataItems.push(row);\n                    }\n                }\n            } else {\n                this._bindCategoryAxisFromSeries(axis, axisIx);\n            }\n        },\n\n        _bindCategoryAxisFromSeries: function(axis, axisIx) {\n            var chart = this,\n                items = [],\n                result,\n                series = chart.options.series,\n                seriesLength = series.length,\n                seriesIx,\n                s,\n                onAxis,\n                data,\n                dataIx,\n                dataLength,\n                dataRow,\n                category,\n                uniqueCategories = {},\n                getFn,\n                dateAxis;\n\n            for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n                s = series[seriesIx];\n                onAxis = s.categoryAxis === axis.name || (!s.categoryAxis && axisIx === 0);\n                data = s.data;\n                dataLength = data.length;\n\n                if (s.categoryField && onAxis && dataLength > 0) {\n                    dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n                    getFn = dateAxis ? getDateField : getField;\n\n                    for (dataIx = 0; dataIx < dataLength; dataIx++) {\n                        dataRow = data[dataIx];\n                        category = getFn(s.categoryField, dataRow);\n\n                        if (dateAxis || !uniqueCategories[category]) {\n                            items.push([category, dataRow]);\n\n                            if (!dateAxis) {\n                                uniqueCategories[category] = true;\n                            }\n                        }\n                    }\n                }\n            }\n\n            if (items.length > 0) {\n                if (dateAxis) {\n                    items = uniqueDates(items, function(a, b) {\n                        return dateComparer(a[0], b[0]);\n                    });\n                }\n\n                result = transpose(items);\n                axis.categories = result[0];\n                axis.dataItems = result[1];\n            }\n        },\n\n        _isBindable: function(series) {\n            var valueFields = SeriesBinder.current.valueFields(series),\n                result = true,\n                field, i;\n\n            for (i = 0; i < valueFields.length; i++) {\n                field = valueFields[i];\n                if (field === VALUE) {\n                    field = \"field\";\n                } else {\n                    field = field + \"Field\";\n                }\n\n                if (!defined(series[field])) {\n                    result = false;\n                    break;\n                }\n            }\n\n            return result;\n        },\n\n        _legendItemClick: function(seriesIndex, pointIndex) {\n            var chart = this,\n                plotArea = chart._plotArea,\n                currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex],\n                originalSeries = (chart._sourceSeries || [])[seriesIndex] || currentSeries,\n                transitionsState, visible, point;\n\n            if (inArray(currentSeries.type, [PIE, DONUT,FUNNEL])) {\n                point = originalSeries.data[pointIndex];\n                if (!defined(point.visible)) {\n                    visible = false;\n                } else {\n                    visible = !point.visible;\n                }\n                point.visible = visible;\n            } else {\n                visible = !originalSeries.visible;\n                originalSeries.visible = visible;\n                currentSeries.visible = visible;\n            }\n\n            if (chart.options.transitions) {\n                chart.options.transitions = false;\n                transitionsState = true;\n            }\n            chart.redraw();\n            if (transitionsState) {\n                chart.options.transitions = true;\n            }\n        },\n\n        _legendItemHover: function(seriesIndex, pointIndex) {\n            var chart = this,\n                plotArea = chart._plotArea,\n                highlight = chart._highlight,\n                currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex],\n                index, items;\n\n            if (inArray(currentSeries.type, [PIE, DONUT, FUNNEL])) {\n                index = pointIndex;\n            } else {\n                index = seriesIndex;\n            }\n\n            items = plotArea.pointsBySeriesIndex(index);\n            highlight.show(items);\n        },\n\n        _shouldAttachMouseMove: function() {\n            var chart = this;\n\n            return chart._plotArea.crosshairs.length || (chart._tooltip && chart._sharedTooltip());\n        },\n\n        setOptions: function(options) {\n            var chart = this,\n                dataSource = options.dataSource;\n\n            options.dataSource = undefined;\n\n            chart._originalOptions = deepExtend(chart._originalOptions, options);\n            chart.options = deepExtend({}, chart._originalOptions);\n            chart._sourceSeries = null;\n            $(document).off(MOUSEMOVE_NS);\n\n            Widget.fn._setEvents.call(chart, options);\n\n            chart._initTheme(chart.options);\n\n            if (dataSource) {\n                chart.setDataSource(dataSource);\n            }\n\n            if (chart._shouldAttachMouseMove()) {\n                chart.element.on(MOUSEMOVE_NS, chart._mousemove);\n            }\n\n            if (chart._hasDataSource) {\n                chart.refresh();\n            }  else {\n                chart.redraw();\n            }\n        },\n\n        destroy: function() {\n            var chart = this,\n                dataSource = chart.dataSource;\n\n            chart.element.off(NS);\n            dataSource.unbind(CHANGE, chart._dataChangeHandler);\n            $(document).off(MOUSEMOVE_TRACKING);\n\n            if (chart._userEvents) {\n                chart._userEvents.destroy();\n            }\n\n            chart._destroyView();\n\n            chart.surface.destroy();\n            chart.surface = null;\n\n            chart._clearRedrawTimeout();\n\n            Widget.fn.destroy.call(chart);\n        },\n\n        _destroyView: function() {\n            var chart = this,\n                model = chart._model,\n                selections = chart._selections;\n\n            if (model) {\n                model.destroy();\n                chart._model = null;\n            }\n\n            if (selections) {\n                while (selections.length > 0) {\n                    selections.shift().destroy();\n                }\n            }\n\n            chart._unsetActivePoint();\n\n            if (chart._tooltip) {\n                chart._tooltip.destroy();\n            }\n\n            if (chart._highlight) {\n                chart._highlight.destroy();\n            }\n        }\n    });\n\n    dataviz.ExportMixin.extend(Chart.fn);\n\n    if (kendo.PDFMixin) {\n        kendo.PDFMixin.extend(Chart.fn);\n    }\n\n    var PlotAreaFactory = Class.extend({\n        init: function() {\n            this._registry = [];\n        },\n\n        register: function(type, seriesTypes) {\n            this._registry.push({\n                type: type,\n                seriesTypes: seriesTypes\n            });\n        },\n\n        create: function(srcSeries, options) {\n            var registry = this._registry,\n                match = registry[0],\n                i,\n                entry,\n                series;\n\n            for (i = 0; i < registry.length; i++) {\n                entry = registry[i];\n                series = filterSeriesByType(srcSeries, entry.seriesTypes);\n\n                if (series.length > 0) {\n                    match = entry;\n                    break;\n                }\n            }\n\n            return new match.type(series, options);\n        }\n    });\n    PlotAreaFactory.current = new PlotAreaFactory();\n\n    var SeriesBinder = Class.extend({\n        init: function() {\n            this._valueFields = {};\n            this._otherFields = {};\n            this._nullValue = {};\n            this._undefinedValue = {};\n        },\n\n        register: function(seriesTypes, valueFields, otherFields) {\n            var binder = this,\n                i,\n                type;\n\n            valueFields = valueFields || [VALUE];\n\n            for (i = 0; i < seriesTypes.length; i++) {\n                type = seriesTypes[i];\n\n                binder._valueFields[type] = valueFields;\n                binder._otherFields[type] = otherFields;\n                binder._nullValue[type] = binder._makeValue(valueFields, null);\n                binder._undefinedValue[type] = binder._makeValue(valueFields, undefined);\n            }\n        },\n\n        canonicalFields: function(series) {\n            return this.valueFields(series).concat(this.otherFields(series));\n        },\n\n        valueFields: function(series) {\n            return this._valueFields[series.type] || [VALUE];\n        },\n\n        otherFields: function(series) {\n            return this._otherFields[series.type] || [VALUE];\n        },\n\n        bindPoint: function(series, pointIx) {\n            var binder = this,\n                data = series.data,\n                pointData = data[pointIx],\n                result = { valueFields: { value: pointData } },\n                fields, fieldData,\n                srcValueFields, srcPointFields,\n                valueFields = binder.valueFields(series),\n                otherFields = binder._otherFields[series.type],\n                value;\n\n            if (pointData === null) {\n                value = binder._nullValue[series.type];\n            } else if (!defined(pointData)) {\n                value = binder._undefinedValue[series.type];\n            } else if (isArray(pointData)) {\n                fieldData = pointData.slice(valueFields.length);\n                value = binder._bindFromArray(pointData, valueFields);\n                fields = binder._bindFromArray(fieldData, otherFields);\n            } else if (typeof pointData === OBJECT) {\n                srcValueFields = binder.sourceFields(series, valueFields);\n                srcPointFields = binder.sourceFields(series, otherFields);\n\n                value = binder._bindFromObject(pointData, valueFields, srcValueFields);\n                fields = binder._bindFromObject(pointData, otherFields, srcPointFields);\n            }\n\n            if (defined(value)) {\n                if (valueFields.length === 1) {\n                    result.valueFields.value = value[valueFields[0]];\n                } else {\n                    result.valueFields = value;\n                }\n            }\n\n            result.fields = fields || {};\n\n            return result;\n        },\n\n        _makeValue: function(fields, initialValue) {\n            var value = {},\n                i,\n                length = fields.length,\n                fieldName;\n\n            for (i = 0; i < length; i++) {\n                fieldName = fields[i];\n                value[fieldName] = initialValue;\n            }\n\n            return value;\n        },\n\n        _bindFromArray: function(array, fields) {\n            var value = {},\n                i,\n                length;\n\n            if (fields) {\n                length = math.min(fields.length, array.length);\n\n                for (i = 0; i < length; i++) {\n                    value[fields[i]] = array[i];\n                }\n            }\n\n            return value;\n        },\n\n        _bindFromObject: function(object, fields, srcFields) {\n            var value = {},\n                i,\n                length,\n                fieldName,\n                srcFieldName;\n\n            if (fields) {\n                length = fields.length;\n                srcFields = srcFields || fields;\n\n                for (i = 0; i < length; i++) {\n                    fieldName = fields[i];\n                    srcFieldName = srcFields[i];\n                    value[fieldName] = getField(srcFieldName, object);\n                }\n            }\n\n            return value;\n        },\n\n        sourceFields: function(series, canonicalFields) {\n            var i, length, fieldName,\n                sourceFields, sourceFieldName;\n\n            if (canonicalFields) {\n                length = canonicalFields.length;\n                sourceFields = [];\n\n                for (i = 0; i < length; i++) {\n                    fieldName = canonicalFields[i];\n                    sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\n\n                    sourceFields.push(series[sourceFieldName] || fieldName);\n                }\n            }\n\n            return sourceFields;\n        }\n    });\n    SeriesBinder.current = new SeriesBinder();\n\n    var BarLabel = ChartElement.extend({\n        init: function(content, options) {\n            var barLabel = this;\n            ChartElement.fn.init.call(barLabel, options);\n\n            this.textBox = new TextBox(content, barLabel.options);\n            barLabel.append(this.textBox);\n        },\n\n        options: {\n            position: OUTSIDE_END,\n            margin: getSpacing(3),\n            padding: getSpacing(4),\n            color: BLACK,\n            background: \"\",\n            border: {\n                width: 1,\n                color: \"\"\n            },\n            aboveAxis: true,\n            vertical: false,\n            animation: {\n                type: FADEIN,\n                delay: INITIAL_ANIMATION_DURATION\n            },\n            zIndex: 2\n        },\n\n        createVisual: function() {\n            this.textBox.options.noclip = this.options.noclip;\n        },\n\n        reflow: function(targetBox) {\n            var barLabel = this,\n                options = barLabel.options,\n                vertical = options.vertical,\n                aboveAxis = options.aboveAxis,\n                text = barLabel.children[0],\n                box = text.box,\n                padding = text.options.padding;\n\n            text.options.align = vertical ? CENTER : LEFT;\n            text.options.vAlign = vertical ? TOP : CENTER;\n\n            if (options.position == INSIDE_END) {\n                if (vertical) {\n                    text.options.vAlign = TOP;\n\n                    if (!aboveAxis && box.height() < targetBox.height()) {\n                        text.options.vAlign = BOTTOM;\n                    }\n                } else {\n                    text.options.align = aboveAxis ? RIGHT : LEFT;\n                }\n            } else if (options.position == CENTER) {\n                text.options.vAlign = CENTER;\n                text.options.align = CENTER;\n            } else if (options.position == INSIDE_BASE) {\n                if (vertical) {\n                    text.options.vAlign = aboveAxis ? BOTTOM : TOP;\n                } else {\n                    text.options.align = aboveAxis ? LEFT : RIGHT;\n                }\n            } else if (options.position == OUTSIDE_END) {\n                if (vertical) {\n                    if (aboveAxis) {\n                        targetBox = new Box2D(\n                            targetBox.x1, targetBox.y1 - box.height(),\n                            targetBox.x2, targetBox.y1\n                        );\n                    } else {\n                        targetBox = new Box2D(\n                            targetBox.x1, targetBox.y2,\n                            targetBox.x2, targetBox.y2 + box.height()\n                        );\n                    }\n                } else {\n                    text.options.align = CENTER;\n                    if (aboveAxis) {\n                        targetBox = new Box2D(\n                            targetBox.x2 + box.width(), targetBox.y1,\n                            targetBox.x2, targetBox.y2\n                        );\n                    } else {\n                        targetBox = new Box2D(\n                            targetBox.x1 - box.width(), targetBox.y1,\n                            targetBox.x1, targetBox.y2\n                        );\n                    }\n                }\n            }\n\n            if (!options.rotation) {\n                if (vertical) {\n                    padding.left = padding.right =\n                        (targetBox.width() - text.contentBox.width()) / 2;\n                } else {\n                    padding.top = padding.bottom =\n                        (targetBox.height() - text.contentBox.height()) / 2;\n                }\n            }\n\n            text.reflow(targetBox);\n        },\n\n        alignToClipBox: function(clipBox) {\n            var barLabel = this,\n                vertical = barLabel.options.vertical,\n                field = vertical ? Y : X,\n                start = field + \"1\",\n                end = field + \"2\",\n                text = barLabel.children[0],\n                parentBox = barLabel.parent.box,\n                targetBox;\n\n            if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n                targetBox = text.paddingBox.clone();\n                targetBox[start] = math.max(parentBox[start], clipBox[start]);\n                targetBox[end] = math.min(parentBox[end], clipBox[end]);\n\n                this.reflow(targetBox);\n            }\n        }\n    });\n\n    var LegendItem = BoxElement.extend({\n        init: function(options) {\n            var item = this;\n\n            BoxElement.fn.init.call(item, options);\n\n            item.createContainer();\n            item.createMarker();\n            item.createLabel();\n        },\n\n        createContainer: function() {\n            var item = this;\n\n            item.container = new FloatElement({ vertical: false, wrap: false, align: CENTER });\n            item.append(item.container);\n        },\n\n        createMarker: function() {\n            var item = this,\n                options = item.options,\n                markerColor = options.markerColor,\n                markers = options.markers,\n                markerOptions = deepExtend({}, markers, {\n                    background: markerColor,\n                    border: {\n                        color: markerColor\n                    }\n                });\n\n            item.container.append(new ShapeElement(markerOptions));\n        },\n\n        createLabel: function() {\n            var item = this,\n                options = item.options,\n                labelOptions = deepExtend({}, options.labels);\n\n            item.container.append(new TextBox(options.text, labelOptions));\n        },\n\n        renderComplete: function() {\n            ChartElement.fn.renderComplete.call(this);\n\n            var cursor = this.options.cursor || {};\n            var eventSink = this._itemOverlay = draw.Path.fromRect(this.container.box.toRect(), {\n                fill: {\n                    color: WHITE,\n                    opacity: 0\n                },\n                stroke: null,\n                cursor: cursor.style\n            });\n\n            this.appendVisual(eventSink);\n        },\n\n        click: function(widget, e) {\n            var args = this.eventArgs(e);\n\n            if (!widget.trigger(LEGEND_ITEM_CLICK, args)) {\n                e.preventDefault();\n                widget._legendItemClick(args.seriesIndex, args.pointIndex);\n            }\n        },\n\n        hover: function(widget, e) {\n            var args = this.eventArgs(e);\n\n            if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n                e.preventDefault();\n                widget._legendItemHover(args.seriesIndex, args.pointIndex);\n            }\n\n            // Don't trigger point hover for legend items\n            return true;\n        },\n\n        leave: function(widget) {\n            widget._unsetActivePoint();\n        },\n\n        eventArgs: function(e) {\n            var options = this.options;\n\n            return {\n                element: $(e.target),\n                text: options.text,\n                series: options.series,\n                seriesIndex: options.series.index,\n                pointIndex: options.pointIndex\n            };\n        },\n\n        createVisual: noop\n    });\n\n    var Legend = ChartElement.extend({\n        init: function(options) {\n            var legend = this;\n\n            ChartElement.fn.init.call(legend, options);\n\n            if (!inArray(legend.options.position, [TOP, RIGHT, BOTTOM, LEFT, CUSTOM])) {\n                legend.options.position = RIGHT;\n            }\n\n            legend.createContainer();\n\n            legend.createItems();\n        },\n\n        options: {\n            position: RIGHT,\n            items: [],\n            labels: {\n                margin: {\n                    left: 6\n                }\n            },\n            offsetX: 0,\n            offsetY: 0,\n            margin: getSpacing(5),\n            padding: getSpacing(5),\n            border: {\n                color: BLACK,\n                width: 0\n            },\n            item: {\n                cursor: {\n                    style: POINTER\n                }\n            },\n            spacing: 6,\n            background: \"\",\n            zIndex: 1,\n            markers: {\n                border: {\n                    width: 1\n                },\n                width: 7,\n                height: 7,\n                type: \"rect\",\n                align: LEFT,\n                vAlign: CENTER\n            }\n        },\n\n        createContainer: function() {\n            var legend = this,\n                options = legend.options,\n                position = options.position,\n                align = position,\n                vAlign = CENTER;\n\n            if (position == CUSTOM) {\n                align = LEFT;\n            } else if (inArray(position, [TOP, BOTTOM])) {\n                align = CENTER;\n                vAlign = position;\n            }\n\n            legend.container = new BoxElement({\n                margin: options.margin,\n                padding: options.padding,\n                background: options.background,\n                border: options.border,\n                vAlign: vAlign,\n                align: align,\n                zIndex: options.zIndex,\n                shrinkToFit: true\n            });\n\n            legend.append(legend.container);\n        },\n\n        createItems: function() {\n            var legend = this,\n                options = legend.options,\n                items = options.items,\n                count = items.length,\n                vertical = legend.isVertical(),\n                innerElement, i, item;\n\n            innerElement = new FloatElement({\n                vertical: vertical,\n                spacing: options.spacing\n            });\n\n            if (options.reverse) {\n                items = items.slice(0).reverse();\n            }\n\n            for (i = 0; i < count; i++) {\n                item = items[i];\n\n                innerElement.append(new LegendItem(deepExtend({}, {\n                    markers: options.markers,\n                    labels: options.labels\n                }, options.item, item)));\n            }\n            legend.container.append(innerElement);\n        },\n\n        isVertical: function() {\n            var legend = this,\n                options = legend.options,\n                position = options.position,\n                vertical = inArray(position, [ LEFT, RIGHT ]) ||\n                    (position == CUSTOM && options.orientation != HORIZONTAL);\n\n            return vertical;\n        },\n\n        hasItems: function() {\n            return this.container.children[0].children.length > 0;\n        },\n\n        reflow: function(targetBox) {\n            var legend = this,\n                options = legend.options,\n                container = legend.container,\n                vertical = legend.isVertical(),\n                containerBox = targetBox.clone();\n\n            if (!legend.hasItems()) {\n                legend.box = targetBox.clone();\n                return;\n            }\n\n            if (vertical) {\n                containerBox.y1 = 0;\n            }\n\n            if (options.position === CUSTOM) {\n                legend.containerCustomReflow(containerBox);\n                legend.box = targetBox.clone();\n            } else {\n                container.reflow(containerBox);\n                legend.containerReflow(targetBox);\n            }\n        },\n\n        containerReflow: function(targetBox) {\n            var legend = this,\n                options = legend.options,\n                pos = options.position == TOP || options.position == BOTTOM ? X : Y,\n                containerBox = legend.container.box,\n                box = containerBox.clone();\n\n            if (options.offsetX || options.offsetY) {\n                containerBox.translate(options.offsetX, options.offsetY);\n                legend.container.reflow(containerBox);\n            }\n\n            box[pos + 1] = targetBox[pos + 1];\n            box[pos + 2] = targetBox[pos + 2];\n\n            legend.box = box;\n        },\n\n        containerCustomReflow: function (targetBox) {\n            var legend = this,\n                options = legend.options,\n                offsetX = options.offsetX,\n                offsetY = options.offsetY,\n                container = legend.container,\n                width = options.width,\n                height = options.height,\n                vertical = legend.isVertical(),\n                containerBox = targetBox.clone();\n\n            if (vertical && height) {\n                containerBox.y2 = containerBox.y1 + height;\n            } else if (!vertical && width){\n                containerBox.x2 = containerBox.x1 + width;\n            }\n            container.reflow(containerBox);\n            containerBox = container.box;\n\n            container.reflow(Box2D(\n                offsetX, offsetY,\n                offsetX + containerBox.width(), offsetY + containerBox.height()\n            ));\n        },\n\n        renderVisual: function() {\n            if (this.hasItems()) {\n                ChartElement.fn.renderVisual.call(this);\n            }\n        }\n    });\n\n    var CategoryAxis = Axis.extend({\n        init: function(options) {\n            var axis = this;\n\n            Axis.fn.init.call(axis, options);\n\n            options = axis.options;\n            options.categories = options.categories.slice(0);\n\n            axis._ticks = {};\n        },\n\n        options: {\n            type: CATEGORY,\n            categories: [],\n            vertical: false,\n            majorGridLines: {\n                visible: false,\n                width: 1,\n                color: BLACK\n            },\n            labels: {\n                zIndex: 1\n            },\n            justified: false\n        },\n\n        range: function() {\n            return { min: 0, max: this.options.categories.length };\n        },\n\n        getTickPositions: function(itemsCount) {\n            var axis = this,\n                options = axis.options,\n                vertical = options.vertical,\n                justified = options.justified,\n                lineBox = axis.lineBox(),\n                size = vertical ? lineBox.height() : lineBox.width(),\n                intervals = itemsCount - (justified ? 1 : 0),\n                step = size / intervals,\n                dim = vertical ? Y : X,\n                pos = lineBox[dim + 1],\n                positions = [],\n                i;\n\n            for (i = 0; i < itemsCount; i++) {\n                positions.push(round(pos, COORD_PRECISION));\n                pos += step;\n            }\n\n            if (!justified) {\n                positions.push(lineBox[dim + 2]);\n            }\n\n            return options.reverse ? positions.reverse() : positions;\n        },\n\n        getMajorTickPositions: function() {\n            return this.getTicks().majorTicks;\n        },\n\n        getMinorTickPositions: function() {\n            return this.getTicks().minorTicks;\n        },\n\n        getTicks: function() {\n            var axis = this,\n                cache = axis._ticks,\n                options = axis.options,\n                count = options.categories.length,\n                reverse = options.reverse,\n                justified = options.justified,\n                lineBox = axis.lineBox(),\n                hash;\n\n            hash = lineBox.getHash() + count + reverse + justified;\n            if (cache._hash !== hash) {\n                cache._hash = hash;\n                cache.majorTicks = axis.getTickPositions(count);\n                cache.minorTicks = axis.getTickPositions(count * 2);\n            }\n\n            return cache;\n        },\n\n        getSlot: function(from, to) {\n            var axis = this,\n                options = axis.options,\n                majorTicks = axis.getTicks().majorTicks,\n                reverse = options.reverse,\n                justified = options.justified,\n                valueAxis = options.vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                lineStart = lineBox[valueAxis + (reverse ? 2 : 1)],\n                lineEnd = lineBox[valueAxis + (reverse ? 1 : 2)],\n                slotBox = lineBox.clone(),\n                intervals = math.max(1, majorTicks.length - (justified ? 0 : 1)),\n                p1,\n                p2,\n                slotSize;\n\n            var singleSlot = !defined(to);\n\n            from = valueOrDefault(from, 0);\n            to = valueOrDefault(to, from);\n            from = limitValue(from, 0, intervals);\n            to = limitValue(to - 1, from, intervals);\n            // Fixes transient bug caused by iOS 6.0 JIT\n            // (one can never be too sure)\n            to = math.max(from, to);\n\n            p1 = from === 0 ? lineStart : (majorTicks[from] || lineEnd);\n            p2 = justified ? p1 : majorTicks[to];\n            slotSize = to - from;\n\n            if (slotSize > 0 || (from === to)) {\n                p2 = majorTicks[to + 1] || lineEnd;\n            }\n\n            if (singleSlot && justified) {\n                if (from === intervals) {\n                    p1 = p2;\n                } else {\n                    p2 = p1;\n                }\n            }\n\n            slotBox[valueAxis + 1] = reverse ? p2 : p1;\n            slotBox[valueAxis + 2] = reverse ? p1 : p2;\n\n            return slotBox;\n        },\n\n        pointCategoryIndex: function(point) {\n            var axis = this,\n                options = axis.options,\n                reverse = options.reverse,\n                vertical = options.vertical,\n                valueAxis = vertical ? Y : X,\n                lineBox = axis.lineBox(),\n                lineStart = lineBox[valueAxis + 1],\n                lineEnd = lineBox[valueAxis + 2],\n                pos = point[valueAxis],\n                majorTicks = axis.getMajorTickPositions(),\n                diff = MAX_VALUE,\n                tickPos, nextTickPos, i, categoryIx;\n\n            if (pos < lineStart || pos > lineEnd) {\n                return null;\n            }\n\n            for (i = 0; i < majorTicks.length; i++) {\n                tickPos = majorTicks[i];\n                nextTickPos = majorTicks[i + 1];\n\n                if (!defined(nextTickPos)) {\n                    nextTickPos = reverse ? lineStart : lineEnd;\n                }\n\n                if (reverse) {\n                    tickPos = nextTickPos;\n                    nextTickPos = majorTicks[i];\n                }\n\n                if (options.justified) {\n                    if (pos === nextTickPos) {\n                        categoryIx = math.max(0, vertical ? majorTicks.length - i - 1 : i + 1);\n                        break;\n                    }\n\n                    if (math.abs(pos - tickPos) < diff) {\n                        diff = pos - tickPos;\n                        categoryIx = i;\n                    }\n                } else {\n                    if (pos >= tickPos && pos <= nextTickPos) {\n                        categoryIx = i;\n                        break;\n                    }\n                }\n            }\n\n            return categoryIx;\n        },\n\n        getCategory: function(point) {\n            var index = this.pointCategoryIndex(point);\n\n            if (index === null) {\n                return null;\n            }\n            return this.options.categories[index];\n        },\n\n        categoryIndex: function(value) {\n            return indexOf(value, this.options.categories);\n        },\n\n        translateRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                size = options.vertical ? lineBox.height() : lineBox.width(),\n                range = options.categories.length,\n                scale = size / range,\n                offset = round(delta / scale, DEFAULT_PRECISION);\n\n            return {\n                min: offset,\n                max: range + offset\n            };\n        },\n\n        scaleRange: function(scale) {\n            var axis = this,\n                options = axis.options,\n                range = options.categories.length,\n                delta = scale * range;\n\n            return {\n                min: -delta,\n                max: range + delta\n            };\n        },\n\n        labelsCount: function() {\n            return this.options.categories.length;\n        },\n\n        createAxisLabel: function(index, labelOptions) {\n            var axis = this,\n                options = axis.options,\n                dataItem = options.dataItems ? options.dataItems[index] : null,\n                category = valueOrDefault(options.categories[index], \"\"),\n                text = axis.axisLabelText(category, dataItem, labelOptions);\n\n            return new AxisLabel(category, text, index, dataItem, labelOptions);\n        },\n\n        shouldRenderNote: function(value) {\n            var categories = this.options.categories;\n\n            return categories.length && (categories.length > value && value >= 0);\n        }\n    });\n\n    var DateCategoryAxis = CategoryAxis.extend({\n        init: function(options) {\n            var axis = this,\n                baseUnit,\n                useDefault;\n\n            options = options || {};\n\n            options = deepExtend({\n                roundToBaseUnit: true\n            }, options, {\n                categories: toDate(options.categories),\n                min: toDate(options.min),\n                max: toDate(options.max)\n            });\n\n            if (options.categories && options.categories.length > 0) {\n                baseUnit = (options.baseUnit || \"\").toLowerCase();\n                useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n                if (useDefault) {\n                    options.baseUnit = axis.defaultBaseUnit(options);\n                }\n\n                if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n                    axis.autoBaseUnit(options);\n                }\n\n                axis.groupCategories(options);\n            } else {\n                options.baseUnit = options.baseUnit || DAYS;\n            }\n\n            CategoryAxis.fn.init.call(axis, options);\n        },\n\n        options: {\n            type: DATE,\n            labels: {\n                dateFormats: DateLabelFormats\n            },\n            autoBaseUnitSteps: {\n                seconds: [1, 2, 5, 15, 30],\n                minutes: [1, 2, 5, 15, 30],\n                hours: [1, 2, 3],\n                days: [1, 2, 3],\n                weeks: [1, 2],\n                months: [1, 2, 3, 6],\n                years: [1, 2, 3, 5, 10, 25, 50]\n            },\n            maxDateGroups: 10\n        },\n\n        shouldRenderNote: function(value) {\n            var axis = this,\n                range = axis.range(),\n                categories = axis.options.categories || [];\n\n            return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n        },\n\n        parseNoteValue: function(value) {\n            return toDate(value);\n        },\n\n        translateRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                baseUnit = options.baseUnit,\n                weekStartDay = options.weekStartDay,\n                lineBox = axis.lineBox(),\n                size = options.vertical ? lineBox.height() : lineBox.width(),\n                range = axis.range(),\n                scale = size / (range.max - range.min),\n                offset = round(delta / scale, DEFAULT_PRECISION),\n                from,\n                to;\n\n            if (range.min && range.max) {\n                from = addTicks(options.min || range.min, offset);\n                to = addTicks(options.max || range.max, offset);\n\n                range = {\n                    min: addDuration(from, 0, baseUnit, weekStartDay),\n                    max: addDuration(to, 0, baseUnit, weekStartDay)\n                };\n            }\n\n            return range;\n        },\n\n        scaleRange: function(delta) {\n            var axis = this,\n                rounds = math.abs(delta),\n                range = axis.range(),\n                from = range.min,\n                to = range.max,\n                step;\n\n            if (range.min && range.max) {\n                while (rounds--) {\n                    range = dateDiff(from, to);\n                    step = math.round(range * 0.1);\n                    if (delta < 0) {\n                        from = addTicks(from, step);\n                        to = addTicks(to, -step);\n                    } else {\n                        from = addTicks(from, -step);\n                        to = addTicks(to, step);\n                    }\n                }\n\n                range = { min: from, max: to };\n            }\n\n            return range;\n        },\n\n        defaultBaseUnit: function(options) {\n            var categories = options.categories,\n                count = defined(categories) ? categories.length : 0,\n                categoryIx,\n                cat,\n                diff,\n                minDiff = MAX_VALUE,\n                lastCat,\n                unit;\n\n            for (categoryIx = 0; categoryIx < count; categoryIx++) {\n                cat = categories[categoryIx];\n\n                if (cat && lastCat) {\n                    diff = dateDiff(cat, lastCat);\n                    if (diff > 0) {\n                        minDiff = math.min(minDiff, diff);\n\n                        if (minDiff >= TIME_PER_YEAR) {\n                            unit = YEARS;\n                        } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n                            unit = MONTHS;\n                        } else if (minDiff >= TIME_PER_WEEK) {\n                            unit = WEEKS;\n                        } else if (minDiff >= TIME_PER_DAY) {\n                            unit = DAYS;\n                        } else if (minDiff >= TIME_PER_HOUR) {\n                            unit = HOURS;\n                        } else if (minDiff >= TIME_PER_MINUTE) {\n                            unit = MINUTES;\n                        } else {\n                            unit = SECONDS;\n                        }\n                    }\n                }\n\n                lastCat = cat;\n            }\n\n            return unit || DAYS;\n        },\n\n        _categoryRange: function(categories) {\n            var range = categories._range;\n            if (!range) {\n                range = categories._range = sparseArrayLimits(categories);\n            }\n\n            return range;\n        },\n\n        range: function(options) {\n            options = options || this.options;\n\n            var categories = options.categories,\n                autoUnit = options.baseUnit === FIT,\n                baseUnit = autoUnit ? BASE_UNITS[0] : options.baseUnit,\n                baseUnitStep = options.baseUnitStep || 1,\n                min = toTime(options.min),\n                max = toTime(options.max),\n                categoryLimits = this._categoryRange(categories);\n\n            var minCategory = toTime(categoryLimits.min),\n                maxCategory = toTime(categoryLimits.max);\n\n            if (options.roundToBaseUnit) {\n                return { min: addDuration(min || minCategory, 0, baseUnit, options.weekStartDay),\n                         max: addDuration(max || maxCategory, baseUnitStep, baseUnit, options.weekStartDay) };\n            } else {\n                return { min: toDate(min || minCategory),\n                         max: toDate(max || this._srcMaxDate || maxCategory) };\n            }\n        },\n\n        autoBaseUnit: function(options) {\n            var axis = this,\n                range = axis.range(deepExtend({}, options, { baseUnitStep: 1 })),\n                autoUnit = options.baseUnit === FIT,\n                autoUnitIx = 0,\n                baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit,\n                span = range.max - range.min,\n                units = span / TIME_PER_UNIT[baseUnit],\n                totalUnits = units,\n                maxDateGroups = options.maxDateGroups || axis.options.maxDateGroups,\n                autoBaseUnitSteps = deepExtend(\n                    {}, axis.options.autoBaseUnitSteps, options.autoBaseUnitSteps\n                ),\n                unitSteps,\n                step,\n                nextStep;\n\n            while (!step || units > maxDateGroups) {\n                unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n                nextStep = unitSteps.shift();\n\n                if (nextStep) {\n                    step = nextStep;\n                    units = totalUnits / step;\n                } else if (baseUnit === last(BASE_UNITS)) {\n                    step = math.ceil(totalUnits / maxDateGroups);\n                    break;\n                } else if (autoUnit) {\n                    baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n                    totalUnits = span / TIME_PER_UNIT[baseUnit];\n                    unitSteps = null;\n                } else {\n                    if (units > maxDateGroups) {\n                        step = math.ceil(totalUnits / maxDateGroups);\n                    }\n                    break;\n                }\n            }\n\n            options.baseUnitStep = step;\n            options.baseUnit = baseUnit;\n        },\n\n        _timeScale: function() {\n            var axis = this,\n                range = axis.range(),\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                vertical = options.vertical,\n                lineSize = vertical ? lineBox.height() : lineBox.width(),\n                timeRange;\n\n            if (options.justified && options._collapse !== false) {\n                var categoryLimits = this._categoryRange(options.categories);\n                var maxCategory = toTime(categoryLimits.max);\n                timeRange = toDate(maxCategory) - range.min;\n            } else {\n                timeRange = range.max - range.min;\n            }\n\n            return lineSize / timeRange;\n        },\n\n        getTickPositions: function(count) {\n            var axis = this,\n                options = axis.options,\n                categories = options.categories,\n                positions = [];\n\n            if (options.roundToBaseUnit || categories.length === 0) {\n                positions = CategoryAxis.fn.getTickPositions.call(axis, count);\n            } else {\n                var vertical = options.vertical,\n                    reverse = options.reverse,\n                    lineBox = axis.lineBox(),\n                    startTime = categories[0].getTime(),\n                    collapse = valueOrDefault(options._collapse, options.justified),\n                    divisions = categories.length - (collapse ? 1 : 0),\n                    scale = axis._timeScale(),\n                    dir = (vertical ? -1 : 1) * (reverse ? -1 : 1),\n                    startEdge = dir === 1 ? 1 : 2,\n                    endEdge = dir === 1 ? 2 : 1,\n                    startPos = lineBox[(vertical ? Y : X) + startEdge],\n                    endPos = lineBox[(vertical ? Y : X) + endEdge],\n                    pos = startPos,\n                    i,\n                    timePos;\n\n                for (i = 0; i < divisions; i++) {\n                    timePos = categories[i] - startTime;\n                    pos = startPos + timePos * scale * dir;\n                    positions.push(round(pos, COORD_PRECISION));\n                }\n\n                if (last(positions) !== endPos) {\n                    positions.push(endPos);\n                }\n            }\n\n            return positions;\n        },\n\n        groupCategories: function(options) {\n            var axis = this,\n                categories = options.categories,\n                maxCategory = toDate(sparseArrayMax(categories)),\n                baseUnit = options.baseUnit,\n                baseUnitStep = options.baseUnitStep || 1,\n                range = axis.range(options),\n                max = range.max,\n                date,\n                nextDate,\n                groups = [];\n\n            for (date = range.min; date < max; date = nextDate) {\n                groups.push(date);\n\n                nextDate = addDuration(date, baseUnitStep, baseUnit, options.weekStartDay);\n                if (nextDate > maxCategory && !options.max) {\n                    break;\n                }\n            }\n\n            if (!options.roundToBaseUnit && !dateEquals(last(groups), max)) {\n                if (max < nextDate && options._collapse !== false) {\n                    this._srcMaxDate = max;\n                } else {\n                    groups.push(max);\n                }\n            }\n\n            options.srcCategories = categories;\n            options.categories = groups;\n        },\n\n        createAxisLabel: function(index, labelOptions) {\n            var options = this.options,\n                dataItem = options.dataItems ? options.dataItems[index] : null,\n                date = options.categories[index],\n                baseUnit = options.baseUnit,\n                visible = true,\n                unitFormat = labelOptions.dateFormats[baseUnit];\n\n            if (options.justified) {\n                var roundedDate = floorDate(date, baseUnit, options.weekStartDay);\n                visible = dateEquals(roundedDate, date);\n            } else if (!options.roundToBaseUnit) {\n                visible = !dateEquals(this.range().max, date);\n            }\n\n            if (visible) {\n                labelOptions.format = labelOptions.format || unitFormat;\n                var text = this.axisLabelText(date, dataItem, labelOptions);\n                if (text) {\n                    return new AxisLabel(date, text, index, dataItem, labelOptions);\n                }\n            }\n        },\n\n        categoryIndex: function(value, range) {\n            var axis = this,\n                options = axis.options,\n                categories = options.categories,\n                equalsRoundedMax,\n                index;\n\n            value = toDate(value);\n            range = range || axis.range();\n            equalsRoundedMax = options.roundToBaseUnit && dateEquals(range.max, value);\n            if (value && (value > range.max || equalsRoundedMax)) {\n                return categories.length;\n            } else if (!value || value < range.min) {\n                return -1;\n            }\n\n            index = lteDateIndex(value, categories);\n\n            return index;\n        },\n\n        getSlot: function(a, b) {\n            var axis = this;\n\n            if (typeof a === OBJECT) {\n                a = axis.categoryIndex(a);\n            }\n\n            if (typeof b === OBJECT) {\n                b = axis.categoryIndex(b);\n            }\n\n            return CategoryAxis.fn.getSlot.call(axis, a, b);\n        }\n    });\n\n    var DateValueAxis = Axis.extend({\n        init: function(seriesMin, seriesMax, options) {\n            var axis = this;\n\n            options = options || {};\n\n            deepExtend(options, {\n                min: toDate(options.min),\n                max: toDate(options.max),\n                axisCrossingValue: toDate(\n                    options.axisCrossingValues || options.axisCrossingValue\n                )\n            });\n\n            options = axis.applyDefaults(toDate(seriesMin), toDate(seriesMax), options);\n\n            Axis.fn.init.call(axis, options);\n        },\n\n        options: {\n            type: DATE,\n            majorGridLines: {\n                visible: true,\n                width: 1,\n                color: BLACK\n            },\n            labels: {\n                dateFormats: DateLabelFormats\n            }\n        },\n\n        applyDefaults: function(seriesMin, seriesMax, options) {\n            var axis = this,\n                min = options.min || seriesMin,\n                max = options.max || seriesMax,\n                baseUnit = options.baseUnit || axis.timeUnits(max - min),\n                baseUnitTime = TIME_PER_UNIT[baseUnit],\n                autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max),\n                autoMax = ceilDate(toTime(max) + 1, baseUnit),\n                userMajorUnit = options.majorUnit ? options.majorUnit : undefined,\n                majorUnit = userMajorUnit || dataviz.ceil(\n                                dataviz.autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\n                                baseUnitTime\n                            ) / baseUnitTime,\n                actualUnits = duration(autoMin, autoMax, baseUnit),\n                totalUnits = dataviz.ceil(actualUnits, majorUnit),\n                unitsToAdd = totalUnits - actualUnits,\n                head = math.floor(unitsToAdd / 2),\n                tail = unitsToAdd - head;\n\n            if (!options.baseUnit) {\n                delete options.baseUnit;\n            }\n\n            options.baseUnit  = options.baseUnit  || baseUnit;\n            options.min       = options.min       || addDuration(autoMin, -head, baseUnit);\n            options.max       = options.max       || addDuration(autoMax, tail, baseUnit);\n            options.minorUnit = options.minorUnit || majorUnit / 5;\n            options.majorUnit = majorUnit;\n\n            return options;\n        },\n\n        range: function() {\n            var options = this.options;\n            return { min: options.min, max: options.max };\n        },\n\n        getDivisions: function(stepValue) {\n            var options = this.options;\n\n            return math.floor(\n                duration(options.min, options.max, options.baseUnit) / stepValue + 1\n            );\n        },\n\n        getTickPositions: function(step) {\n            var options = this.options;\n            var vertical = options.vertical;\n            var reverse = options.reverse;\n\n            var lineBox = this.lineBox();\n            var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n            var startEdge = dir === 1 ? 1 : 2;\n            var start = lineBox[(vertical ? Y : X) + startEdge];\n\n            var divisions = this.getDivisions(step);\n            var timeRange = options.max - options.min;\n            var lineSize = vertical ? lineBox.height() : lineBox.width();\n            var scale = lineSize / timeRange;\n\n            var positions = [start];\n            for (var i = 1; i < divisions; i++) {\n                var date = addDuration(options.min, i * options.majorUnit, options.baseUnit);\n                var pos = start + (date - options.min) * scale * dir;\n\n                positions.push(round(pos, COORD_PRECISION));\n            }\n\n            return positions;\n        },\n\n        getMajorTickPositions: function() {\n            var axis = this;\n\n            return axis.getTickPositions(axis.options.majorUnit);\n        },\n\n        getMinorTickPositions: function() {\n            var axis = this;\n\n            return axis.getTickPositions(axis.options.minorUnit);\n        },\n\n        getSlot: function(a, b, limit) {\n            return NumericAxis.fn.getSlot.call(\n                this, toDate(a), toDate(b), limit\n            );\n        },\n\n        getValue: function(point) {\n            var value = NumericAxis.fn.getValue.call(this, point);\n\n            return value !== null ? toDate(value) : null;\n        },\n\n        labelsCount: function() {\n            return this.getDivisions(this.options.majorUnit);\n        },\n\n        createAxisLabel: function(index, labelOptions) {\n            var options = this.options;\n            var offset = index * options.majorUnit;\n\n            var date = options.min;\n            if (offset > 0) {\n                date = addDuration(date, offset, options.baseUnit);\n            }\n\n            var unitFormat = labelOptions.dateFormats[options.baseUnit];\n            labelOptions.format = labelOptions.format || unitFormat;\n\n            var text = this.axisLabelText(date, null, labelOptions);\n            return new AxisLabel(date, text, index, null, labelOptions);\n        },\n\n        timeUnits: function(delta) {\n            var unit = HOURS;\n\n            if (delta >= TIME_PER_YEAR) {\n                unit = YEARS;\n            } else if (delta >= TIME_PER_MONTH) {\n                unit = MONTHS;\n            } else if (delta >= TIME_PER_WEEK) {\n                unit = WEEKS;\n            } else if (delta >= TIME_PER_DAY) {\n                unit = DAYS;\n            }\n\n            return unit;\n        },\n\n        translateRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                baseUnit = options.baseUnit,\n                weekStartDay = options.weekStartDay,\n                lineBox = axis.lineBox(),\n                size = options.vertical ? lineBox.height() : lineBox.width(),\n                range = axis.range(),\n                scale = size / (range.max - range.min),\n                offset = round(delta / scale, DEFAULT_PRECISION),\n                from = addTicks(options.min, offset),\n                to = addTicks(options.max, offset);\n\n            return {\n                min: addDuration(from, 0, baseUnit, weekStartDay),\n                max: addDuration(to, 0, baseUnit, weekStartDay)\n            };\n        },\n\n        scaleRange: function(delta) {\n            var axis = this,\n                options = axis.options,\n                rounds = math.abs(delta),\n                from = options.min,\n                to = options.max,\n                range,\n                step;\n\n            while (rounds--) {\n                range = dateDiff(from, to);\n                step = math.round(range * 0.1);\n                if (delta < 0) {\n                    from = addTicks(from, step);\n                    to = addTicks(to, -step);\n                } else {\n                    from = addTicks(from, -step);\n                    to = addTicks(to, step);\n                }\n            }\n\n            return { min: from, max: to };\n        },\n\n        shouldRenderNote: function(value) {\n            var range = this.range();\n\n            return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n        }\n    });\n\n    var ClusterLayout = ChartElement.extend({\n        options: {\n            vertical: false,\n            gap: 0,\n            spacing: 0\n        },\n\n        reflow: function(box) {\n            var cluster = this,\n                options = cluster.options,\n                vertical = options.vertical,\n                axis = vertical ? Y : X,\n                children = cluster.children,\n                gap = options.gap,\n                spacing = options.spacing,\n                count = children.length,\n                slots = count + gap + (spacing * (count - 1)),\n                slotSize = (vertical ? box.height() : box.width()) / slots,\n                position = box[axis + 1] + slotSize * (gap / 2),\n                childBox,\n                i;\n\n            for (i = 0; i < count; i++) {\n                childBox = (children[i].box || box).clone();\n\n                childBox[axis + 1] = position;\n                childBox[axis + 2] = position + slotSize;\n\n                children[i].reflow(childBox);\n                if (i < count - 1) {\n                    position += (slotSize * spacing);\n                }\n\n                position += slotSize;\n            }\n        }\n    });\n\n    var StackWrap = ChartElement.extend({\n        options: {\n            vertical: true\n        },\n\n        reflow: function(targetBox) {\n            var options = this.options,\n                vertical = options.vertical,\n                positionAxis = vertical ? X : Y,\n                stackAxis = vertical ? Y : X,\n                children = this.children,\n                box = this.box = new Box2D(),\n                childrenCount = children.length,\n                i;\n\n            for (i = 0; i < childrenCount; i++) {\n                var currentChild = children[i],\n                    childBox;\n                if (currentChild.visible !== false) {\n                    childBox = currentChild.box.clone();\n                    childBox.snapTo(targetBox, positionAxis);\n\n                    if (i === 0) {\n                        box = this.box = childBox.clone();\n                    }\n\n                    currentChild.reflow(childBox);\n                    box.wrap(childBox);\n                }\n            }\n        }\n    });\n\n    var PointEventsMixin = {\n        click: function(chart, e) {\n            return chart.trigger(\n                SERIES_CLICK,\n                this.eventArgs(e)\n            );\n        },\n\n        hover: function(chart, e) {\n            return chart.trigger(\n                SERIES_HOVER,\n                this.eventArgs(e)\n            );\n        },\n\n        eventArgs: function(e) {\n            return {\n                value: this.value,\n                percentage: this.percentage,\n                category: this.category,\n                series: this.series,\n                dataItem: this.dataItem,\n                runningTotal: this.runningTotal,\n                total: this.total,\n                element: $(e.target),\n                originalEvent: e,\n                point: this\n            };\n        }\n    };\n\n    var NoteMixin = {\n        createNote: function() {\n            var element = this,\n                options = element.options.notes,\n                text = element.noteText || options.label.text;\n\n            if (options.visible !== false && defined(text) && text !== null) {\n                element.note = new Note(\n                    element.value,\n                    text,\n                    element.dataItem,\n                    element.category,\n                    element.series,\n                    element.options.notes\n                );\n                element.append(element.note);\n            }\n        }\n    };\n\n    var Bar = ChartElement.extend({\n        init: function(value, options) {\n            var bar = this;\n\n            ChartElement.fn.init.call(bar);\n\n            bar.options = options;\n            bar.color = options.color || WHITE;\n            bar.aboveAxis = valueOrDefault(bar.options.aboveAxis, true);\n            bar.value = value;\n        },\n\n        defaults: {\n            border: {\n                width: 1\n            },\n            vertical: true,\n            overlay: {\n                gradient: GLASS\n            },\n            labels: {\n                visible: false,\n                format: \"{0}\"\n            },\n            opacity: 1,\n            notes: {\n                label: {}\n            }\n        },\n\n        render: function() {\n            if (this._rendered) {\n                return;\n            } else {\n                this._rendered = true;\n            }\n\n            this.createLabel();\n            this.createNote();\n\n            if (this.errorBar) {\n                this.append(this.errorBar);\n            }\n        },\n\n        createLabel: function() {\n            var value = this.value;\n            var options = this.options;\n            var labels = options.labels;\n            var labelText;\n\n            if (labels.visible) {\n                if (labels.template) {\n                    var labelTemplate = template(labels.template);\n                    labelText = labelTemplate({\n                        dataItem: this.dataItem,\n                        category: this.category,\n                        value: this.value,\n                        percentage: this.percentage,\n                        runningTotal: this.runningTotal,\n                        total: this.total,\n                        series: this.series\n                    });\n                } else {\n                    labelText = this.formatValue(labels.format);\n                }\n\n                this.label = new BarLabel(labelText,\n                        deepExtend({\n                            vertical: options.vertical\n                        },\n                        options.labels\n                    ));\n                this.append(this.label);\n            }\n        },\n\n        formatValue: function(format) {\n            return this.owner.formatPointValue(this, format);\n        },\n\n        reflow: function(targetBox) {\n            this.render();\n\n            var bar = this,\n                options = bar.options,\n                label = bar.label;\n\n            bar.box = targetBox;\n\n            if (label) {\n                label.options.aboveAxis = bar.aboveAxis;\n                label.reflow(targetBox);\n            }\n\n            if (bar.note) {\n                bar.note.reflow(targetBox);\n            }\n\n            if(bar.errorBars){\n                for(var i = 0; i < bar.errorBars.length;i++){\n                    bar.errorBars[i].reflow(targetBox);\n                }\n            }\n        },\n\n        createVisual: function() {\n            var box = this.box;\n            if (this.visible !== false) {\n                ChartElement.fn.createVisual.call(this);\n                if (box.width() > 0 && box.height() > 0) {\n                    this.createRect();\n                }\n            }\n        },\n\n        createRect: function(view) {\n            var options = this.options;\n            var border = options.border;\n            var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n            var rect = draw.Path.fromRect(this.box.toRect(), {\n                fill: {\n                    color: this.color,\n                    opacity: options.opacity\n                },\n                stroke: {\n                    color: this.getBorderColor(),\n                    width: border.width,\n                    opacity: strokeOpacity,\n                    dashType: border.dashType\n                }\n            });\n\n            var size = options.vertical ? this.box.width() : this.box.height();\n            if (size > BAR_ALIGN_MIN_WIDTH) {\n                alignPathToPixel(rect);\n            }\n\n            this.visual.append(rect);\n\n            if (hasGradientOverlay(options)) {\n                this.visual.append(this.createGradientOverlay(rect, {\n                        baseColor: this.color\n                    }, deepExtend({\n                         end: !options.vertical ? [0, 1] : undefined\n                    }, options.overlay)\n                ));\n            }\n        },\n\n        createHighlight: function(style) {\n            var highlight = draw.Path.fromRect(this.box.toRect(), style);\n\n            return alignPathToPixel(highlight);\n        },\n\n        getBorderColor: function() {\n            var bar = this,\n                options = bar.options,\n                color = bar.color,\n                border = options.border,\n                borderColor = border.color,\n                brightness = border._brightness || BAR_BORDER_BRIGHTNESS;\n\n            if (!defined(borderColor)) {\n                borderColor =\n                    new Color(color).brightness(brightness).toHex();\n            }\n\n            return borderColor;\n        },\n\n        tooltipAnchor: function(tooltipWidth, tooltipHeight) {\n            var bar = this,\n                options = bar.options,\n                box = bar.box,\n                vertical = options.vertical,\n                aboveAxis = bar.aboveAxis,\n                clipBox = bar.owner.pane.clipBox() || box,\n                x,\n                y;\n\n            if (vertical) {\n                x = box.x2 + TOOLTIP_OFFSET;\n                y = aboveAxis ? math.max(box.y1, clipBox.y1) : math.min(box.y2, clipBox.y2) - tooltipHeight;\n            } else {\n                var x1 = math.max(box.x1, clipBox.x1),\n                    x2 = math.min(box.x2, clipBox.x2);\n                if (options.isStacked) {\n                    x = aboveAxis ? x2 - tooltipWidth : x1;\n                    y = box.y1 - tooltipHeight - TOOLTIP_OFFSET;\n                } else {\n                    x = aboveAxis ? x2 + TOOLTIP_OFFSET : x1 - tooltipWidth - TOOLTIP_OFFSET;\n                    y = box.y1;\n                }\n            }\n\n            return new Point2D(x, y);\n        }\n    });\n    deepExtend(Bar.fn, PointEventsMixin);\n    deepExtend(Bar.fn, NoteMixin);\n\n    var BarChartAnimation = draw.Animation.extend({\n        options: {\n            duration: INITIAL_ANIMATION_DURATION\n        },\n\n        setup: function() {\n            var element = this.element;\n            var options = this.options;\n\n            var bbox = element.bbox();\n            if (bbox) {\n                var origin = this.origin = options.origin;\n\n                var axis = options.vertical ? Y : X;\n\n                var fromScale = this.fromScale = new geom.Point(1, 1);\n                fromScale[axis] = START_SCALE;\n\n                element.transform(geom.transform()\n                    .scale(fromScale.x, fromScale.y)\n                );\n            } else {\n                this.abort();\n            }\n        },\n\n        step: function(pos) {\n            var scaleX = interpolate(this.fromScale.x, 1, pos);\n            var scaleY = interpolate(this.fromScale.y, 1, pos);\n\n            this.element.transform(geom.transform()\n                .scale(scaleX, scaleY, this.origin)\n            );\n        },\n\n        abort: function() {\n            draw.Animation.fn.abort.call(this);\n            this.element.transform(null);\n        }\n    });\n    draw.AnimationFactory.current.register(BAR, BarChartAnimation);\n\n    var FadeInAnimation = draw.Animation.extend({\n        options: {\n            duration: 200,\n            easing: LINEAR\n        },\n\n        setup: function() {\n            this.fadeTo = this.element.opacity();\n            this.element.opacity(0);\n        },\n\n        step: function(pos) {\n            this.element.opacity(pos * this.fadeTo);\n        }\n    });\n    draw.AnimationFactory.current.register(FADEIN, FadeInAnimation);\n\n\n    var ErrorRangeCalculator = function(errorValue, series, field) {\n        var that = this;\n        that.initGlobalRanges(errorValue, series, field);\n    };\n\n    ErrorRangeCalculator.prototype = ErrorRangeCalculator.fn = {\n        percentRegex: /percent(?:\\w*)\\((\\d+)\\)/,\n        standardDeviationRegex: new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\"),\n\n        initGlobalRanges: function(errorValue, series, field) {\n            var that = this,\n                data = series.data,\n                deviationMatch = that.standardDeviationRegex.exec(errorValue);\n\n            if (deviationMatch) {\n                that.valueGetter = that.createValueGetter(series, field);\n\n                var average = that.getAverage(data),\n                    deviation = that.getStandardDeviation(data, average, false),\n                    multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1,\n                    errorRange = {low: average.value - deviation * multiple, high: average.value + deviation * multiple};\n                that.globalRange = function() {\n                    return errorRange;\n                };\n            } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n                that.valueGetter = that.createValueGetter(series, field);\n                var standardError = that.getStandardError(data, that.getAverage(data));\n                that.globalRange = function(value) {\n                    return {low: value - standardError, high: value + standardError};\n                };\n            }\n        },\n\n        createValueGetter: function(series, field) {\n            var data = series.data,\n                binder = SeriesBinder.current,\n                valueFields = binder.valueFields(series),\n                item = defined(data[0]) ? data[0] : {},\n                idx,\n                srcValueFields,\n                valueGetter;\n\n            if (isArray(item)) {\n                idx = field ? indexOf(field, valueFields): 0;\n                valueGetter = getter(\"[\" + idx + \"]\");\n            } else if (isNumber(item)) {\n                valueGetter = getter();\n            } else if (typeof item === OBJECT) {\n                srcValueFields = binder.sourceFields(series, valueFields);\n                valueGetter = getter(srcValueFields[indexOf(field, valueFields)]);\n            }\n\n            return valueGetter;\n        },\n\n        getErrorRange: function(pointValue, errorValue) {\n            var that = this,\n                low,\n                high,\n                value;\n\n            if (!defined(errorValue)) {\n                return;\n            }\n\n            if (that.globalRange) {\n                return that.globalRange(pointValue);\n            }\n\n            if (isArray(errorValue)) {\n                low = pointValue - errorValue[0];\n                high = pointValue + errorValue[1];\n            } else if (isNumber(value = parseFloat(errorValue))) {\n                low = pointValue - value;\n                high = pointValue + value;\n            } else if ((value = that.percentRegex.exec(errorValue))) {\n                var percentValue = pointValue * (parseFloat(value[1]) / 100);\n                low = pointValue - math.abs(percentValue);\n                high = pointValue + math.abs(percentValue);\n            } else {\n                throw new Error(\"Invalid ErrorBar value: \" + errorValue);\n            }\n\n            return {low: low, high: high};\n        },\n\n        getStandardError: function(data, average) {\n            return this.getStandardDeviation(data, average, true) / math.sqrt(average.count);\n        },\n\n        getStandardDeviation: function(data, average, isSample) {\n            var squareDifferenceSum = 0,\n                length = data.length,\n                total = isSample ? average.count - 1 : average.count,\n                value;\n\n            for (var i = 0; i < length; i++) {\n                value = this.valueGetter(data[i]);\n                if (isNumber(value)) {\n                    squareDifferenceSum += math.pow(value - average.value, 2);\n                }\n            }\n\n            return math.sqrt(squareDifferenceSum / total);\n        },\n\n        getAverage: function(data) {\n            var sum = 0,\n                count = 0,\n                length = data.length,\n                value;\n\n            for(var i = 0; i < length; i++){\n                value = this.valueGetter(data[i]);\n                if (isNumber(value)) {\n                    sum += value;\n                    count++;\n                }\n            }\n\n            return {\n                value: sum / count,\n                count: count\n            };\n        }\n    };\n\n    var CategoricalChart = ChartElement.extend({\n        init: function(plotArea, options) {\n            var chart = this;\n\n            ChartElement.fn.init.call(chart, options);\n\n            chart.plotArea = plotArea;\n            chart.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n\n            // Value axis ranges grouped by axis name, e.g.:\n            // primary: { min: 0, max: 1 }\n            chart.valueAxisRanges = {};\n\n            chart.points = [];\n            chart.categoryPoints = [];\n            chart.seriesPoints = [];\n            chart.seriesOptions = [];\n            chart._evalSeries = [];\n\n            chart.render();\n        },\n\n        options: {\n            series: [],\n            invertAxes: false,\n            isStacked: false,\n            clip: true\n        },\n\n        render: function() {\n            var chart = this;\n            chart.traverseDataPoints(proxy(chart.addValue, chart));\n        },\n\n        pointOptions: function(series, seriesIx) {\n            var options = this.seriesOptions[seriesIx];\n            if (!options) {\n                var defaults = this.pointType().fn.defaults;\n                this.seriesOptions[seriesIx] = options = deepExtend({ }, defaults, {\n                    vertical: !this.options.invertAxes\n                }, series);\n            }\n\n            return options;\n        },\n\n        plotValue: function(point) {\n            if (!point) {\n                return 0;\n            }\n\n            if (this.options.isStacked100 && isNumber(point.value)) {\n                var categoryIx = point.categoryIx;\n                var categoryPts = this.categoryPoints[categoryIx];\n                var categorySum = 0;\n                var otherValues = [];\n\n                for (var i = 0; i < categoryPts.length; i++) {\n                    var other = categoryPts[i];\n                    if (other) {\n                        var stack = point.series.stack;\n                        var otherStack = other.series.stack;\n\n                        if ((stack && otherStack) && stack.group !== otherStack.group) {\n                            continue;\n                        }\n\n                        if (isNumber(other.value)) {\n                            categorySum += math.abs(other.value);\n                            otherValues.push(math.abs(other.value));\n                        }\n                    }\n                }\n\n                if (categorySum > 0) {\n                    return point.value / categorySum;\n                }\n            }\n\n            return point.value;\n        },\n\n        plotRange: function(point, startValue) {\n            var categoryIx = point.categoryIx;\n            var categoryPts = this.categoryPoints[categoryIx];\n\n            if (this.options.isStacked) {\n                startValue = startValue || 0;\n                var plotValue = this.plotValue(point);\n                var positive = plotValue > 0;\n                var prevValue = startValue;\n                var isStackedBar = false;\n\n                for (var i = 0; i < categoryPts.length; i++) {\n                    var other = categoryPts[i];\n\n                    if (point === other) {\n                        break;\n                    }\n\n                    var stack = point.series.stack;\n                    var otherStack = other.series.stack;\n                    if (stack && otherStack) {\n                        if (typeof stack === STRING && stack !== otherStack) {\n                            continue;\n                        }\n\n                        if (stack.group && stack.group !== otherStack.group) {\n                            continue;\n                        }\n                    }\n\n                    var otherValue = this.plotValue(other);\n                    if ((otherValue > 0 && positive) ||\n                        (otherValue < 0 && !positive)) {\n                        prevValue += otherValue;\n                        plotValue += otherValue;\n                        isStackedBar = true;\n\n                        if (this.options.isStacked100) {\n                            plotValue = math.min(plotValue, 1);\n                        }\n                    }\n                }\n\n                if (isStackedBar) {\n                    prevValue -= startValue;\n                }\n\n                return [prevValue, plotValue];\n            }\n\n            var series = point.series;\n            var valueAxis = this.seriesValueAxis(series);\n            var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n            return [axisCrossingValue, point.value || axisCrossingValue];\n        },\n\n        stackLimits: function(axisName, stackName) {\n            var min = MAX_VALUE;\n            var max = MIN_VALUE;\n\n            for (var i = 0; i < this.categoryPoints.length; i++) {\n                var categoryPts = this.categoryPoints[i];\n\n                for (var pIx = 0; pIx < categoryPts.length; pIx++) {\n                    var point = categoryPts[pIx];\n                    if (point) {\n                        if (point.series.stack === stackName || point.series.axis === axisName) {\n                            var to = this.plotRange(point, 0)[1];\n                            if (defined(to)) {\n                                max = math.max(max, to);\n                                min = math.min(min, to);\n                            }\n                        }\n                    }\n                }\n            }\n\n            return { min: min, max: max };\n        },\n\n        updateStackRange: function() {\n            var chart = this;\n            var chartSeries = chart.options.series;\n            var isStacked = chart.options.isStacked;\n            var limits;\n            var limitsCache = {};\n\n            if (isStacked) {\n                for (var i = 0; i < chartSeries.length; i++) {\n                    var series = chartSeries[i];\n                    var axisName = series.axis;\n                    var key = axisName + series.stack;\n\n                    limits = limitsCache[key];\n                    if (!limits) {\n                        limits = chart.stackLimits(axisName, series.stack);\n\n                        var errorTotals = chart.errorTotals;\n                        if (errorTotals) {\n                            if (errorTotals.negative.length) {\n                                limits.min = math.min(limits.min, sparseArrayMin(errorTotals.negative));\n                            }\n                            if (errorTotals.positive.length) {\n                                limits.max = math.max(limits.max, sparseArrayMax(errorTotals.positive));\n                            }\n                        }\n\n                        limitsCache[key] = limits;\n                    }\n\n                    chart.valueAxisRanges[axisName] = limits;\n                }\n            }\n        },\n\n        addErrorBar: function(point, data, categoryIx) {\n            var chart = this,\n                value = point.value,\n                series = point.series,\n                seriesIx = point.seriesIx,\n                errorBars = point.options.errorBars,\n                errorRange,\n                lowValue = data.fields[ERROR_LOW_FIELD],\n                highValue = data.fields[ERROR_HIGH_FIELD];\n\n            if (isNumber(lowValue) &&\n                isNumber(highValue)) {\n                errorRange = {low: lowValue, high: highValue};\n            } else if (errorBars && defined(errorBars.value)) {\n                chart.seriesErrorRanges = chart.seriesErrorRanges || [];\n                chart.seriesErrorRanges[seriesIx] = chart.seriesErrorRanges[seriesIx] ||\n                    new ErrorRangeCalculator(errorBars.value, series, VALUE);\n\n                errorRange = chart.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n            }\n\n            if (errorRange) {\n                point.low = errorRange.low;\n                point.high = errorRange.high;\n                chart.addPointErrorBar(point, categoryIx);\n            }\n        },\n\n        addPointErrorBar: function(point, categoryIx) {\n            var chart = this,\n                series = point.series,\n                low = point.low,\n                high = point.high,\n                isVertical = !chart.options.invertAxes,\n                options = point.options.errorBars,\n                errorBar,\n                stackedErrorRange;\n\n            if (chart.options.isStacked) {\n                stackedErrorRange = chart.stackedErrorRange(point, categoryIx);\n                low = stackedErrorRange.low;\n                high = stackedErrorRange.high;\n            } else {\n                var fields = { categoryIx: categoryIx, series: series };\n                chart.updateRange({value: low}, fields);\n                chart.updateRange({value: high}, fields);\n            }\n\n            errorBar = new CategoricalErrorBar(low, high, isVertical, chart, series, options);\n            point.errorBars = [errorBar];\n            point.append(errorBar);\n        },\n\n        stackedErrorRange: function(point, categoryIx) {\n            var chart = this,\n                value = point.value,\n                plotValue = chart.plotRange(point, 0)[1] - point.value,\n                low = point.low + plotValue,\n                high = point.high + plotValue;\n\n            chart.errorTotals = chart.errorTotals || {positive: [], negative: []};\n\n            if (low < 0) {\n                chart.errorTotals.negative[categoryIx] =  math.min(chart.errorTotals.negative[categoryIx] || 0, low);\n            }\n\n            if (high > 0) {\n                chart.errorTotals.positive[categoryIx] =  math.max(chart.errorTotals.positive[categoryIx] || 0, high);\n            }\n\n            return {low: low, high: high};\n        },\n\n        addValue: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n\n            var categoryPoints = chart.categoryPoints[categoryIx];\n            if (!categoryPoints) {\n                chart.categoryPoints[categoryIx] = categoryPoints = [];\n            }\n\n            var seriesPoints = chart.seriesPoints[seriesIx];\n            if (!seriesPoints) {\n                chart.seriesPoints[seriesIx] = seriesPoints = [];\n            }\n\n            var point = chart.createPoint(data, fields);\n            if (point) {\n                $.extend(point, fields);\n\n                point.owner = chart;\n                point.dataItem = series.data[categoryIx];\n                point.noteText = data.fields.noteText;\n                chart.addErrorBar(point, data, categoryIx);\n            }\n\n            chart.points.push(point);\n            seriesPoints.push(point);\n            categoryPoints.push(point);\n\n            chart.updateRange(data.valueFields, fields);\n        },\n\n        evalPointOptions: function(options, value, category, categoryIx, series, seriesIx) {\n            var state = { defaults: series._defaults, excluded: [\"data\", \"aggregate\", \"_events\", \"tooltip\", \"template\"] };\n\n            var doEval = this._evalSeries[seriesIx];\n            if (!defined(doEval)) {\n                this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n            }\n\n            if (doEval) {\n                options = deepExtend({}, options);\n                evalOptions(options, {\n                    value: value,\n                    category: category,\n                    index: categoryIx,\n                    series: series,\n                    dataItem: series.data[categoryIx]\n                }, state);\n            }\n\n            return options;\n        },\n\n        updateRange: function(data, fields) {\n            var chart = this,\n                axisName = fields.series.axis,\n                value = data.value,\n                axisRange = chart.valueAxisRanges[axisName];\n\n            if (isFinite(value) && value !== null) {\n                axisRange = chart.valueAxisRanges[axisName] =\n                    axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n                axisRange.min = math.min(axisRange.min, value);\n                axisRange.max = math.max(axisRange.max, value);\n            }\n        },\n\n        seriesValueAxis: function(series) {\n            var plotArea = this.plotArea,\n                axisName = series.axis,\n                axis = axisName ?\n                    plotArea.namedValueAxes[axisName] :\n                    plotArea.valueAxis;\n\n            if (!axis) {\n                throw new Error(\"Unable to locate value axis with name \" + axisName);\n            }\n\n            return axis;\n        },\n\n        reflow: function(targetBox) {\n            var chart = this,\n                pointIx = 0,\n                categorySlots = chart.categorySlots = [],\n                chartPoints = chart.points,\n                categoryAxis = chart.categoryAxis,\n                value, valueAxis,\n                point;\n\n            chart.traverseDataPoints(function(data, fields) {\n                var category = fields.category;\n                var categoryIx = fields.categoryIx;\n                var currentSeries = fields.series;\n\n                value = chart.pointValue(data);\n\n                valueAxis = chart.seriesValueAxis(currentSeries);\n                point = chartPoints[pointIx++];\n\n                var categorySlot = categorySlots[categoryIx];\n                if (!categorySlot) {\n                    categorySlots[categoryIx] = categorySlot =\n                        chart.categorySlot(categoryAxis, categoryIx, valueAxis);\n                }\n\n                if (point) {\n                    var plotRange = chart.plotRange(point, valueAxis.startValue());\n                    var valueSlot = valueAxis.getSlot(plotRange[0], plotRange[1], !chart.options.clip);\n                    if (valueSlot) {\n                        var pointSlot = chart.pointSlot(categorySlot, valueSlot);\n\n                        point.aboveAxis = chart.aboveAxis(point, valueAxis);\n                        if (chart.options.isStacked100) {\n                            point.percentage = chart.plotValue(point);\n                        }\n\n                        chart.reflowPoint(point, pointSlot);\n                    } else {\n                        point.visible = false;\n                    }\n                }\n            });\n\n            chart.reflowCategories(categorySlots);\n\n            chart.box = targetBox;\n        },\n\n        aboveAxis: function(point, valueAxis) {\n            var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n            var value = point.value;\n\n            return valueAxis.options.reverse ?\n                value < axisCrossingValue : value >= axisCrossingValue;\n        },\n\n        categoryAxisCrossingValue: function(valueAxis) {\n            var categoryAxis = this.categoryAxis,\n                options = valueAxis.options,\n                crossingValues = [].concat(\n                    options.axisCrossingValues || options.axisCrossingValue\n                );\n\n            return crossingValues[categoryAxis.axisIndex || 0] || 0;\n        },\n\n        reflowPoint: function(point, pointSlot) {\n            point.reflow(pointSlot);\n        },\n\n        reflowCategories: function() { },\n\n        pointSlot: function(categorySlot, valueSlot) {\n            var chart = this,\n                options = chart.options,\n                invertAxes = options.invertAxes,\n                slotX = invertAxes ? valueSlot : categorySlot,\n                slotY = invertAxes ? categorySlot : valueSlot;\n\n            return new Box2D(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n        },\n\n        categorySlot: function(categoryAxis, categoryIx) {\n            return categoryAxis.getSlot(categoryIx);\n        },\n\n        traverseDataPoints: function(callback) {\n            var chart = this,\n                options = chart.options,\n                series = options.series,\n                categories = chart.categoryAxis.options.categories || [],\n                count = categoriesCount(series),\n                categoryIx,\n                seriesIx,\n                pointData,\n                currentCategory,\n                currentSeries,\n                seriesCount = series.length;\n\n            for (categoryIx = 0; categoryIx < count; categoryIx++) {\n                for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n                    currentSeries = series[seriesIx];\n                    currentCategory = categories[categoryIx];\n                    pointData = this._bindPoint(currentSeries, seriesIx, categoryIx);\n\n                    callback(pointData, {\n                        category: currentCategory,\n                        categoryIx: categoryIx,\n                        series: currentSeries,\n                        seriesIx: seriesIx\n                    });\n                }\n            }\n        },\n\n        _bindPoint: function(series, seriesIx, categoryIx) {\n            if (!this._bindCache) {\n                this._bindCache = [];\n            }\n\n            var bindCache = this._bindCache[seriesIx];\n            if (!bindCache) {\n                bindCache = this._bindCache[seriesIx] = [];\n            }\n\n            var data = bindCache[categoryIx];\n            if (!data) {\n                data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx);\n            }\n\n            return data;\n        },\n\n        formatPointValue: function(point, format) {\n            if (point.value === null) {\n                return \"\";\n            }\n\n            return autoFormat(format, point.value);\n        },\n\n        pointValue: function(data) {\n            return data.valueFields.value;\n        }\n    });\n\n    var BarChart = CategoricalChart.extend({\n        options: {\n            animation: {\n                type: BAR\n            }\n        },\n\n        render: function() {\n            var chart = this;\n\n            CategoricalChart.fn.render.apply(chart);\n            chart.updateStackRange();\n        },\n\n        pointType: function() {\n            return Bar;\n        },\n\n        clusterType: function() {\n            return ClusterLayout;\n        },\n\n        stackType: function() {\n            return StackWrap;\n        },\n\n        stackLimits: function(axisName, stackName) {\n            var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n            limits.min = math.min(0, limits.min);\n            limits.max = math.max(0, limits.max);\n\n            return limits;\n        },\n\n        createPoint: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var value = chart.pointValue(data);\n            var options = chart.options;\n            var children = chart.children;\n            var isStacked = chart.options.isStacked;\n            var point;\n            var pointType = chart.pointType();\n            var pointOptions;\n            var cluster;\n            var clusterType = chart.clusterType();\n\n            pointOptions = this.pointOptions(series, seriesIx);\n\n            var labelOptions = pointOptions.labels;\n            if (isStacked) {\n                if (labelOptions.position == OUTSIDE_END) {\n                    labelOptions.position = INSIDE_END;\n                }\n            }\n\n            pointOptions.isStacked = isStacked;\n\n            var color = data.fields.color || series.color;\n            if (value < 0 && pointOptions.negativeColor) {\n                color = pointOptions.negativeColor;\n            }\n\n            pointOptions = chart.evalPointOptions(\n                pointOptions, value, category, categoryIx, series, seriesIx\n            );\n\n            if (kendo.isFunction(series.color)) {\n                color = pointOptions.color;\n            }\n\n            point = new pointType(value, pointOptions);\n            point.color = color;\n\n            cluster = children[categoryIx];\n            if (!cluster) {\n                cluster = new clusterType({\n                    vertical: options.invertAxes,\n                    gap: options.gap,\n                    spacing: options.spacing\n                });\n                chart.append(cluster);\n            }\n\n            if (isStacked) {\n               var stackWrap = chart.getStackWrap(series, cluster);\n               stackWrap.append(point);\n            } else {\n                cluster.append(point);\n            }\n\n            return point;\n        },\n\n        getStackWrap: function(series, cluster) {\n            var stack = series.stack;\n            var stackGroup = stack ? stack.group || stack : stack;\n\n            var wraps = cluster.children;\n            var stackWrap;\n            if (typeof stackGroup === STRING) {\n                for (var i = 0; i < wraps.length; i++) {\n                    if (wraps[i]._stackGroup === stackGroup) {\n                        stackWrap = wraps[i];\n                        break;\n                    }\n                }\n            } else {\n                stackWrap = wraps[0];\n            }\n\n            if (!stackWrap) {\n                var stackType = this.stackType();\n                stackWrap = new stackType({\n                    vertical: !this.options.invertAxes\n                });\n                stackWrap._stackGroup = stackGroup;\n                cluster.append(stackWrap);\n            }\n\n            return stackWrap;\n        },\n\n        categorySlot: function(categoryAxis, categoryIx, valueAxis) {\n            var chart = this,\n                options = chart.options,\n                categorySlot = categoryAxis.getSlot(categoryIx),\n                startValue = valueAxis.startValue(),\n                stackAxis, zeroSlot;\n\n            if (options.isStacked) {\n                zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n                stackAxis = options.invertAxes ? X : Y;\n                categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n            }\n\n            return categorySlot;\n        },\n\n        reflowCategories: function(categorySlots) {\n            var chart = this,\n                children = chart.children,\n                childrenLength = children.length,\n                i;\n\n            for (i = 0; i < childrenLength; i++) {\n                children[i].reflow(categorySlots[i]);\n            }\n        },\n\n        createAnimation: function() {\n            this._setAnimationOptions();\n            ChartElement.fn.createAnimation.call(this);\n            if (anyHasZIndex(this.options.series)) {\n                this._setChildrenAnimation();\n            }\n        },\n\n        _setChildrenAnimation: function() {\n            var points = this.points;\n            var point, pointVisual;\n\n            for (var idx = 0; idx < points.length; idx++) {\n                point = points[idx];\n                pointVisual = point.visual;\n                if (pointVisual && defined(pointVisual.options.zIndex)) {\n                    point.options.animation = this.options.animation;\n                    point.createAnimation();\n                }\n            }\n        },\n\n        _setAnimationOptions: function() {\n            var options = this.options;\n            var animation = options.animation || {};\n            var origin = this.categoryAxis.getSlot(0);\n\n            animation.origin = new geom.Point(origin.x1, origin.y1);\n            animation.vertical = !options.invertAxes;\n        }\n    });\n\n    var RangeBar = Bar.extend({\n        defaults: {\n            labels: {\n                format: \"{0} - {1}\"\n            },\n            tooltip: {\n                format: \"{1}\"\n            }\n        },\n\n        createLabel: function() {\n            var value = this.value;\n            var labels = this.options.labels;\n            var fromOptions = deepExtend({}, labels, labels.from);\n            var toOptions = deepExtend({}, labels, labels.to);\n\n            if (fromOptions.visible) {\n                this.labelFrom = this._createLabel(fromOptions);\n                this.append(this.labelFrom);\n            }\n\n            if (toOptions.visible) {\n                this.labelTo = this._createLabel(toOptions);\n                this.append(this.labelTo);\n            }\n        },\n\n        _createLabel: function(options) {\n            var labelText;\n\n            if (options.template) {\n                var labelTemplate = template(options.template);\n                labelText = labelTemplate({\n                    dataItem: this.dataItem,\n                    category: this.category,\n                    value: this.value,\n                    percentage: this.percentage,\n                    runningTotal: this.runningTotal,\n                    total: this.total,\n                    series: this.series\n                });\n            } else {\n                labelText = this.formatValue(options.format);\n            }\n\n            return new BarLabel(labelText,\n                deepExtend({\n                    vertical: this.options.vertical\n                },\n                options\n            ));\n        },\n\n        reflow: function(targetBox) {\n            this.render();\n\n            var rangeBar = this,\n                options = rangeBar.options,\n                labelFrom = rangeBar.labelFrom,\n                labelTo = rangeBar.labelTo,\n                value = rangeBar.value;\n\n            rangeBar.box = targetBox;\n\n            if (labelFrom) {\n                labelFrom.options.aboveAxis = rangeBar.value.from > rangeBar.value.to;\n                labelFrom.reflow(targetBox);\n            }\n\n            if (labelTo) {\n                labelTo.options.aboveAxis = rangeBar.value.to > rangeBar.value.from;\n                labelTo.reflow(targetBox);\n            }\n\n            if (rangeBar.note) {\n                rangeBar.note.reflow(targetBox);\n            }\n        }\n    });\n\n    var RangeBarChart = BarChart.extend({\n        pointType: function() {\n            return RangeBar;\n        },\n\n        pointValue: function(data) {\n            return data.valueFields;\n        },\n\n        formatPointValue: function(point, format) {\n            if (point.value.from === null && point.value.to === null) {\n                return \"\";\n            }\n\n            return autoFormat(format, point.value.from, point.value.to);\n        },\n\n        plotLimits: CategoricalChart.fn.plotLimits,\n\n        plotRange: function(point) {\n            if (!point) {\n                return 0;\n            }\n\n            return [point.value.from, point.value.to];\n        },\n\n        updateRange: function(value, fields) {\n            var chart = this,\n                axisName = fields.series.axis,\n                from = value.from,\n                to = value.to,\n                axisRange = chart.valueAxisRanges[axisName];\n\n            if (value !== null && isNumber(from) && isNumber(to)) {\n                axisRange = chart.valueAxisRanges[axisName] =\n                    axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n                axisRange.min = math.min(axisRange.min, from);\n                axisRange.max = math.max(axisRange.max, from);\n\n                axisRange.min = math.min(axisRange.min, to);\n                axisRange.max = math.max(axisRange.max, to);\n            }\n        },\n\n        aboveAxis: function(point){\n            var value = point.value;\n            return value.from < value.to;\n        }\n    });\n\n    var BulletChart = CategoricalChart.extend({\n        init: function(plotArea, options) {\n            var chart = this;\n\n            chart.wrapData(options);\n\n            CategoricalChart.fn.init.call(chart, plotArea, options);\n        },\n\n        options: {\n            animation: {\n                type: BAR\n            }\n        },\n\n        wrapData: function(options) {\n            var series = options.series,\n                i, data, seriesItem;\n\n            for (i = 0; i < series.length; i++) {\n                seriesItem = series[i];\n                data = seriesItem.data;\n                if (data && !isArray(data[0]) && typeof(data[0]) != OBJECT) {\n                    seriesItem.data = [data];\n                }\n            }\n        },\n\n        reflowCategories: function(categorySlots) {\n            var chart = this,\n                children = chart.children,\n                childrenLength = children.length,\n                i;\n\n            for (i = 0; i < childrenLength; i++) {\n                children[i].reflow(categorySlots[i]);\n            }\n        },\n\n        plotRange: function(point) {\n            var series = point.series;\n            var valueAxis = this.seriesValueAxis(series);\n            var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n            return [axisCrossingValue, point.value.current || axisCrossingValue];\n        },\n\n        createPoint: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var value = data.valueFields;\n            var options = chart.options;\n            var children = chart.children;\n            var bullet;\n            var bulletOptions;\n            var cluster;\n\n            bulletOptions = deepExtend({\n                vertical: !options.invertAxes,\n                overlay: series.overlay,\n                categoryIx: categoryIx,\n                invertAxes: options.invertAxes\n            }, series);\n\n            bulletOptions = chart.evalPointOptions(\n                bulletOptions, value, category, categoryIx, series, seriesIx\n            );\n\n            bullet = new Bullet(value, bulletOptions);\n\n            cluster = children[categoryIx];\n            if (!cluster) {\n                cluster = new ClusterLayout({\n                    vertical: options.invertAxes,\n                    gap: options.gap,\n                    spacing: options.spacing\n                });\n                chart.append(cluster);\n            }\n\n            cluster.append(bullet);\n\n            return bullet;\n        },\n\n        updateRange: function(value, fields) {\n            var chart = this,\n                axisName = fields.series.axis,\n                current = value.current,\n                target = value.target,\n                axisRange = chart.valueAxisRanges[axisName];\n\n            if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n                axisRange = chart.valueAxisRanges[axisName] =\n                    axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n                axisRange.min = math.min.apply(math, [axisRange.min, current, target]);\n                axisRange.max = math.max.apply(math, [axisRange.max, current, target]);\n            }\n        },\n\n        formatPointValue: function(point, format) {\n            return autoFormat(format, point.value.current, point.value.target);\n        },\n\n        pointValue: function(data) {\n            return data.valueFields.current;\n        },\n\n        aboveAxis: function(point, valueAxis) {\n            var value = point.value.current;\n\n            return value > 0;\n        },\n\n        createAnimation: function() {\n            var points = this.points;\n            var point, pointVisual;\n\n            this._setAnimationOptions();\n\n            for (var idx = 0; idx < points.length; idx++) {\n                point = points[idx];\n                point.options.animation = this.options.animation;\n                point.createAnimation();\n            }\n        },\n\n        _setAnimationOptions: BarChart.fn._setAnimationOptions\n    });\n\n    var Bullet = ChartElement.extend({\n        init: function(value, options) {\n            var bullet = this;\n\n            ChartElement.fn.init.call(bullet, options);\n\n            bullet.value = value;\n            bullet.aboveAxis = bullet.options.aboveAxis;\n        },\n\n        options: {\n            color: WHITE,\n            border: {\n                width: 1\n            },\n            vertical: false,\n            opacity: 1,\n            target: {\n                shape: \"\",\n                border: {\n                    width: 0,\n                    color: \"green\"\n                },\n                line: {\n                    width: 2\n                }\n            },\n            tooltip: {\n                format: \"Current: {0}</br>Target: {1}\"\n            }\n        },\n\n        render: function() {\n            var bullet = this,\n                options = bullet.options;\n\n            if (!bullet._rendered) {\n                bullet._rendered = true;\n\n                if (defined(bullet.value.target)) {\n                    bullet.target = new Target({\n                        type: options.target.shape,\n                        background: options.target.color || options.color,\n                        opacity: options.opacity,\n                        zIndex: options.zIndex,\n                        border: options.target.border,\n                        vAlign: TOP,\n                        align: RIGHT\n                    });\n\n                    bullet.append(bullet.target);\n                }\n\n                bullet.createNote();\n            }\n        },\n\n        reflow: function(box) {\n            this.render();\n\n            var bullet = this,\n                options = bullet.options,\n                chart = bullet.owner,\n                target = bullet.target,\n                invertAxes = options.invertAxes,\n                valueAxis = chart.seriesValueAxis(bullet.options),\n                categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis),\n                targetValueSlot = valueAxis.getSlot(bullet.value.target),\n                targetSlotX = invertAxes ? targetValueSlot : categorySlot,\n                targetSlotY = invertAxes ? categorySlot : targetValueSlot,\n                targetSlot;\n\n            if (target) {\n                targetSlot = new Box2D(\n                    targetSlotX.x1, targetSlotY.y1,\n                    targetSlotX.x2, targetSlotY.y2\n                );\n                target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n                target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n                target.reflow(targetSlot);\n            }\n\n            if (bullet.note) {\n                bullet.note.reflow(box);\n            }\n\n            bullet.box = box;\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var options = this.options;\n            var body = draw.Path.fromRect(this.box.toRect(), {\n                fill: {\n                    color: options.color,\n                    opacity: options.opacity\n                },\n                stroke: null\n            });\n\n            if (options.border.width > 0) {\n                body.options.set(\"stroke\", {\n                    color: options.border.color || options.color,\n                    width: options.border.width,\n                    dashType: options.border.dashType,\n                    opacity: valueOrDefault(options.border.opacity, options.opacity)\n                });\n            }\n\n            this.bodyVisual = body;\n\n            alignPathToPixel(body);\n            this.visual.append(body);\n        },\n\n        createAnimation: function() {\n            if (this.bodyVisual) {\n                this.animation = draw.Animation.create(\n                    this.bodyVisual, this.options.animation\n                );\n            }\n        },\n\n        tooltipAnchor: function(tooltipWidth, tooltipHeight) {\n            var bar = this,\n                options = bar.options,\n                box = bar.box,\n                vertical = options.vertical,\n                aboveAxis = bar.aboveAxis,\n                clipBox = bar.owner.pane.clipBox() || box,\n                x,\n                y;\n\n            if (vertical) {\n                x = box.x2 + TOOLTIP_OFFSET;\n                y = aboveAxis ? math.max(box.y1, clipBox.y1) : math.min(box.y2, clipBox.y2) - tooltipHeight;\n            } else {\n                var x1 = math.max(box.x1, clipBox.x1),\n                    x2 = math.min(box.x2, clipBox.x2);\n                if (options.isStacked) {\n                    x = aboveAxis ? x2 - tooltipWidth : x1;\n                    y = box.y1 - tooltipHeight - TOOLTIP_OFFSET;\n                } else {\n                    x = aboveAxis ? x2 + TOOLTIP_OFFSET : x1 - tooltipWidth - TOOLTIP_OFFSET;\n                    y = box.y1;\n                }\n            }\n\n            return new Point2D(x, y);\n        },\n\n        createHighlight: function(style) {\n            return draw.Path.fromRect(this.box.toRect(), style);\n        },\n\n        formatValue: function(format) {\n            var bullet = this;\n\n            return bullet.owner.formatPointValue(bullet, format);\n        }\n    });\n    deepExtend(Bullet.fn, PointEventsMixin);\n    deepExtend(Bullet.fn, NoteMixin);\n\n    var Target = ShapeElement.extend();\n    deepExtend(Target.fn, PointEventsMixin);\n\n    var ErrorBarBase = ChartElement.extend({\n        init: function(low, high, isVertical, chart, series, options) {\n            var errorBar = this;\n            errorBar.low = low;\n            errorBar.high = high;\n            errorBar.isVertical = isVertical;\n            errorBar.chart = chart;\n            errorBar.series = series;\n\n            ChartElement.fn.init.call(errorBar, options);\n        },\n\n        options: {\n            animation: {\n                type: FADEIN,\n                delay: INITIAL_ANIMATION_DURATION\n            },\n            endCaps: true,\n            line: {\n                width: 1\n            },\n            zIndex: 1\n        },\n\n        getAxis: function(){},\n\n        reflow: function(targetBox) {\n            var linePoints,\n                errorBar = this,\n                endCaps = errorBar.options.endCaps,\n                isVertical = errorBar.isVertical,\n                axis = errorBar.getAxis(),\n                valueBox = axis.getSlot(errorBar.low, errorBar.high),\n                centerBox = targetBox.center(),\n                capsWidth = errorBar.getCapsWidth(targetBox, isVertical),\n                capValue = isVertical ? centerBox.x: centerBox.y,\n                capStart = capValue - capsWidth,\n                capEnd = capValue + capsWidth;\n\n            if (isVertical) {\n                linePoints = [\n                    Point2D(centerBox.x, valueBox.y1),\n                    Point2D(centerBox.x, valueBox.y2)\n                ];\n                if (endCaps) {\n                    linePoints.push(Point2D(capStart, valueBox.y1),\n                        Point2D(capEnd, valueBox.y1),\n                        Point2D(capStart, valueBox.y2),\n                        Point2D(capEnd, valueBox.y2));\n                }\n            } else {\n                linePoints = [\n                    Point2D(valueBox.x1, centerBox.y),\n                    Point2D(valueBox.x2, centerBox.y)\n                ];\n                if (endCaps) {\n                    linePoints.push(Point2D(valueBox.x1, capStart),\n                        Point2D(valueBox.x1, capEnd),\n                        Point2D(valueBox.x2, capStart),\n                        Point2D(valueBox.x2, capEnd));\n                }\n            }\n\n            errorBar.linePoints = linePoints;\n        },\n\n        getCapsWidth: function(box, isVertical) {\n            var boxSize = isVertical ? box.width() : box.height(),\n                capsWidth = math.min(math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n\n            return capsWidth;\n        },\n\n        createVisual: function() {\n            var errorBar = this,\n                options = errorBar.options,\n                parent = errorBar.parent,\n                lineOptions = {\n                    stroke: {\n                        color: options.color,\n                        width: options.line.width,\n                        dashType: options.line.dashType\n                    }\n                },\n                linePoints = errorBar.linePoints;\n\n            ChartElement.fn.createVisual.call(this);\n\n            for (var idx = 0; idx < linePoints.length; idx+=2) {\n                var line = new draw.Path(lineOptions)\n                    .moveTo(linePoints[idx].x, linePoints[idx].y)\n                    .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n\n                this.visual.append(line);\n            }\n        }\n    });\n\n    var CategoricalErrorBar = ErrorBarBase.extend({\n        getAxis: function() {\n            var errorBar = this,\n                chart = errorBar.chart,\n                series = errorBar.series,\n                axis = chart.seriesValueAxis(series);\n\n            return axis;\n        }\n    });\n\n    var ScatterErrorBar = ErrorBarBase.extend({\n        getAxis: function() {\n            var errorBar = this,\n                chart = errorBar.chart,\n                series = errorBar.series,\n                axes = chart.seriesAxes(series),\n                axis = errorBar.isVertical ? axes.y : axes.x;\n            return axis;\n        }\n    });\n\n    var LinePoint = ChartElement.extend({\n        init: function(value, options) {\n            var point = this;\n\n            ChartElement.fn.init.call(point);\n\n            point.value = value;\n            point.options = options;\n            point.aboveAxis = valueOrDefault(point.options.aboveAxis, true);\n            point.tooltipTracking = true;\n        },\n\n        defaults: {\n            vertical: true,\n            markers: {\n                visible: true,\n                background: WHITE,\n                size: LINE_MARKER_SIZE,\n                type: CIRCLE,\n                border: {\n                    width: 2\n                },\n                opacity: 1\n            },\n            labels: {\n                visible: false,\n                position: ABOVE,\n                margin: getSpacing(3),\n                padding: getSpacing(4),\n                animation: {\n                    type: FADEIN,\n                    delay: INITIAL_ANIMATION_DURATION\n                }\n            },\n            notes: {\n                label: {}\n            },\n            highlight: {\n                markers: {\n                    border: {}\n                }\n            }\n        },\n\n        render: function() {\n            var point = this,\n                options = point.options,\n                markers = options.markers,\n                labels = options.labels,\n                labelText = point.value;\n\n            if (point._rendered) {\n                return;\n            } else {\n                point._rendered = true;\n            }\n\n            if (markers.visible && markers.size) {\n                point.marker = point.createMarker();\n                point.append(point.marker);\n            }\n\n            if (labels.visible) {\n                if (labels.template) {\n                    var labelTemplate = template(labels.template);\n                    labelText = labelTemplate({\n                        dataItem: point.dataItem,\n                        category: point.category,\n                        value: point.value,\n                        percentage: point.percentage,\n                        series: point.series\n                    });\n                } else if (labels.format) {\n                    labelText = point.formatValue(labels.format);\n                }\n                point.label = new TextBox(labelText,\n                    deepExtend({\n                        align: CENTER,\n                        vAlign: CENTER,\n                        margin: {\n                            left: 5,\n                            right: 5\n                        },\n                        zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n                    }, labels)\n                );\n                point.append(point.label);\n            }\n\n            point.createNote();\n\n            if (point.errorBar) {\n                point.append(point.errorBar);\n            }\n        },\n\n        markerBorder: function() {\n            var options = this.options.markers;\n            var background = options.background;\n            var border = deepExtend({ color: this.color }, options.border);\n\n            if (!defined(border.color)) {\n                border.color =\n                    new Color(background).brightness(BAR_BORDER_BRIGHTNESS).toHex();\n            }\n\n            return border;\n        },\n\n        createVisual: noop,\n\n        createMarker: function() {\n            var options = this.options.markers;\n            var marker = new ShapeElement({\n                type: options.type,\n                width: options.size,\n                height: options.size,\n                rotation: options.rotation,\n                background: options.background,\n                border: this.markerBorder(),\n                opacity: options.opacity,\n                zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n                animation: options.animation\n            });\n\n            return marker;\n        },\n\n        markerBox: function() {\n            if (!this.marker) {\n                this.marker = this.createMarker();\n                this.marker.reflow(this._childBox);\n            }\n\n            return this.marker.box;\n        },\n\n        reflow: function(targetBox) {\n            var point = this,\n                options = point.options,\n                vertical = options.vertical,\n                aboveAxis = point.aboveAxis,\n                childBox, center;\n\n            point.render();\n\n            point.box = targetBox;\n            childBox = targetBox.clone();\n\n            if (vertical) {\n                if (aboveAxis) {\n                    childBox.y1 -= childBox.height();\n                } else {\n                    childBox.y2 += childBox.height();\n                }\n            } else {\n                if (aboveAxis) {\n                    childBox.x1 += childBox.width();\n                } else {\n                    childBox.x2 -= childBox.width();\n                }\n            }\n\n            point._childBox = childBox;\n            if (point.marker) {\n                point.marker.reflow(childBox);\n            }\n\n            point.reflowLabel(childBox);\n\n            if (point.errorBars) {\n                for(var i = 0; i < point.errorBars.length; i++){\n                     point.errorBars[i].reflow(childBox);\n                }\n            }\n\n            if (point.note) {\n                var noteTargetBox = point.markerBox();\n\n                if (!point.marker) {\n                    center = noteTargetBox.center();\n                    noteTargetBox = Box2D(center.x, center.y, center.x, center.y);\n                }\n\n                point.note.reflow(noteTargetBox);\n            }\n        },\n\n        reflowLabel: function(box) {\n            var point = this,\n                options = point.options,\n                label = point.label,\n                anchor = options.labels.position;\n\n            if (label) {\n                anchor = anchor === ABOVE ? TOP : anchor;\n                anchor = anchor === BELOW ? BOTTOM : anchor;\n\n                label.reflow(box);\n                label.box.alignTo(point.markerBox(), anchor);\n                label.reflow(label.box);\n            }\n        },\n\n        createHighlight: function() {\n            var highlight = this.options.highlight;\n            var markers = highlight.markers;\n            var defaultColor = this.markerBorder().color;\n            var options = this.options.markers;\n\n            var shadow = new ShapeElement({\n                type: options.type,\n                width: options.size,\n                height: options.size,\n                rotation: options.rotation,\n                background: markers.color || defaultColor,\n                border: {\n                    color: markers.border.color,\n                    width: markers.border.width,\n                    opacity: valueOrDefault(markers.border.opacity, 1)\n                },\n                opacity: valueOrDefault(markers.opacity, 1)\n            });\n            shadow.reflow(this._childBox);\n\n            return shadow.getElement();\n        },\n\n        tooltipAnchor: function(tooltipWidth, tooltipHeight) {\n            var point = this,\n                markerBox = point.markerBox(),\n                options = point.options,\n                aboveAxis = point.aboveAxis,\n                x = markerBox.x2 + TOOLTIP_OFFSET,\n                y = aboveAxis ? markerBox.y1 - tooltipHeight : markerBox.y2,\n                clipBox = point.owner.pane.clipBox(),\n                showTooltip = !clipBox || clipBox.overlaps(markerBox);\n\n            if (showTooltip) {\n                return Point2D(x, y);\n            }\n        },\n\n        formatValue: function(format) {\n            var point = this;\n\n            return point.owner.formatPointValue(point, format);\n        }\n    });\n    deepExtend(LinePoint.fn, PointEventsMixin);\n    deepExtend(LinePoint.fn, NoteMixin);\n\n    var Bubble = LinePoint.extend({\n        init: function(value, options) {\n            var point = this;\n\n            LinePoint.fn.init.call(point, value, options);\n\n            point.category = value.category;\n        },\n\n        defaults: {\n            labels: {\n                position: CENTER\n            },\n            highlight: {\n                opacity: 1,\n                border: {\n                    width: 1,\n                    opacity: 1\n                }\n            }\n        },\n\n        createHighlight: function() {\n            var highlight = this.options.highlight;\n            var border = highlight.border;\n            var markers = this.options.markers;\n            var center = this.box.center();\n            var radius = markers.size / 2 - border.width / 2;\n            var overlay = new draw.Circle(new geom.Circle([center.x, center.y], radius), {\n                stroke: {\n                    color: border.color ||\n                        new Color(markers.background).brightness(BAR_BORDER_BRIGHTNESS).toHex(),\n                    width: border.width,\n                    opacity: border.opacity\n                },\n                fill: {\n                    color: markers.background,\n                    opacity: highlight.opacity\n                }\n            });\n\n            return overlay;\n        }\n    });\n\n    var LineSegment = ChartElement.extend({\n        init: function(linePoints, series, seriesIx) {\n            var segment = this;\n\n            ChartElement.fn.init.call(segment);\n\n            segment.linePoints = linePoints;\n            segment.series = series;\n            segment.seriesIx = seriesIx;\n        },\n\n        options: {\n            closed: false\n        },\n\n        points: function(visualPoints) {\n            var segment = this,\n                linePoints = segment.linePoints.concat(visualPoints || []),\n                points = [];\n\n            for (var i = 0, length = linePoints.length; i < length; i++) {\n                if (linePoints[i].visible !== false) {\n                    points.push(linePoints[i]._childBox.toRect().center());\n                }\n            }\n\n            return points;\n        },\n\n        createVisual: function() {\n            var options = this.options;\n            var series = this.series;\n            var defaults = series._defaults;\n            var color = series.color;\n\n            if (isFn(color) && defaults) {\n                color = defaults.color;\n            }\n\n            var line = draw.Path.fromPoints(this.points(), {\n                stroke: {\n                    color: color,\n                    width: series.width,\n                    opacity: series.opacity,\n                    dashType: series.dashType\n                },\n                zIndex: series.zIndex\n            });\n\n            if (options.closed) {\n                line.close();\n            }\n\n            this.visual = line;\n        },\n\n        aliasFor: function(e, coords) {\n            var segment = this,\n                seriesIx = segment.seriesIx;\n\n            return segment.parent.getNearestPoint(coords.x, coords.y, seriesIx);\n        }\n    });\n\n    var LineChartMixin = {\n        renderSegments: function() {\n            var chart = this,\n                options = chart.options,\n                series = options.series,\n                seriesPoints = chart.seriesPoints,\n                currentSeries, seriesIx,\n                seriesCount = seriesPoints.length,\n                sortedPoints, linePoints,\n                point, pointIx, pointCount,\n                lastSegment;\n\n            this._segments = [];\n\n            for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n                currentSeries = series[seriesIx];\n                sortedPoints = chart.sortPoints(seriesPoints[seriesIx]);\n                pointCount = sortedPoints.length;\n                linePoints = [];\n\n                for (pointIx = 0; pointIx < pointCount; pointIx++) {\n                    point = sortedPoints[pointIx];\n                    if (point) {\n                        linePoints.push(point);\n                    } else if (chart.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n                        if (linePoints.length > 1) {\n                            lastSegment = chart.createSegment(\n                                linePoints, currentSeries, seriesIx, lastSegment\n                            );\n                            this._addSegment(lastSegment);\n                        }\n                        linePoints = [];\n                    }\n                }\n\n                if (linePoints.length > 1) {\n                    lastSegment = chart.createSegment(\n                        linePoints, currentSeries, seriesIx, lastSegment\n                    );\n                    this._addSegment(lastSegment);\n                }\n            }\n        },\n\n        _addSegment: function(segment) {\n            this._segments.push(segment);\n            this.children.unshift(segment);\n            segment.parent = this;\n        },\n\n        sortPoints: function(points) {\n            return points;\n        },\n\n        seriesMissingValues: function(series) {\n            var missingValues = series.missingValues,\n                assumeZero = !missingValues && this.options.isStacked;\n\n            return assumeZero ? ZERO : missingValues || INTERPOLATE;\n        },\n\n        getNearestPoint: function(x, y, seriesIx) {\n            var target = new Point2D(x, y);\n            var allPoints = this.seriesPoints[seriesIx];\n            var nearestPointDistance = MAX_VALUE;\n            var nearestPoint;\n\n            for (var i = 0; i < allPoints.length; i++) {\n                var point = allPoints[i];\n\n                if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n                    var pointBox = point.box;\n                    var pointDistance = pointBox.center().distanceTo(target);\n\n                    if (pointDistance < nearestPointDistance) {\n                        nearestPoint = point;\n                        nearestPointDistance = pointDistance;\n                    }\n                }\n            }\n\n            return nearestPoint;\n        }\n    };\n\n    var ClipAnimationMixin = {\n        createAnimation: function() {\n            var box = this.box;\n            var clipPath = draw.Path.fromRect(box.toRect());\n            this.visual.clip(clipPath);\n            this.animation = new ClipAnimation(clipPath, {\n                box: box\n            });\n            if (anyHasZIndex(this.options.series)) {\n                this._setChildrenAnimation(clipPath);\n            }\n        },\n\n        _setChildrenAnimation: function(clipPath) {\n            var points = this.animationPoints();\n            var point, pointVisual;\n\n            for (var idx = 0; idx < points.length; idx++) {\n                point = points[idx];\n                pointVisual = point.visual;\n                if (pointVisual && defined(pointVisual.options.zIndex)) {\n                    pointVisual.clip(clipPath);\n                }\n            }\n        }\n    };\n\n    var LineChart = CategoricalChart.extend({\n        render: function() {\n            var chart = this;\n\n            CategoricalChart.fn.render.apply(chart);\n\n            chart.updateStackRange();\n            chart.renderSegments();\n        },\n\n        pointType: function() {\n            return LinePoint;\n        },\n\n        createPoint: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var value = data.valueFields.value;\n            var options = chart.options;\n            var isStacked = options.isStacked;\n            var categoryPoints = chart.categoryPoints[categoryIx];\n            var missingValues = chart.seriesMissingValues(series);\n            var stackPoint;\n            var plotValue = 0;\n            var point;\n            var pointOptions;\n\n            if (!defined(value) || value === null) {\n                if (missingValues === ZERO) {\n                    value = 0;\n                } else {\n                    return null;\n                }\n            }\n\n            pointOptions = this.pointOptions(series, seriesIx);\n            pointOptions = chart.evalPointOptions(\n                pointOptions, value, category, categoryIx, series, seriesIx\n            );\n\n            var color = data.fields.color || series.color;\n            if (kendo.isFunction(series.color)) {\n                color = pointOptions.color;\n            }\n\n            point = new LinePoint(value, pointOptions);\n            point.color = color;\n\n            chart.append(point);\n\n            return point;\n        },\n\n        plotRange: function(point) {\n            var plotValue = this.plotValue(point);\n\n            if (this.options.isStacked) {\n                var categoryIx = point.categoryIx;\n                var categoryPts = this.categoryPoints[categoryIx];\n\n                for (var i = 0; i < categoryPts.length; i++) {\n                    var other = categoryPts[i];\n\n                    if (point === other) {\n                        break;\n                    }\n\n                    plotValue += this.plotValue(other);\n                }\n\n            }\n\n            return [plotValue, plotValue];\n        },\n\n        createSegment: function(linePoints, currentSeries, seriesIx) {\n            var pointType,\n                style = currentSeries.style;\n\n            if (style === STEP) {\n                pointType = StepLineSegment;\n            } else if (style === SMOOTH) {\n                pointType = SplineSegment;\n            } else {\n                pointType = LineSegment;\n            }\n\n            return new pointType(linePoints, currentSeries, seriesIx);\n        },\n\n        animationPoints: function() {\n            var series = this.seriesOptions;\n            var points = [];\n            var seriesPoints;\n            var pointsIdx, idx;\n            for (idx = 0; idx < series.length; idx++) {\n                if (series[idx].markers.visible) {\n                    seriesPoints = this.seriesPoints[idx];\n                    for (pointsIdx = 0; pointsIdx < seriesPoints.length; pointsIdx++) {\n                        points.push(seriesPoints[pointsIdx].marker);\n                    }\n                }\n            }\n            return points.concat(this._segments);\n        }\n    });\n    deepExtend(LineChart.fn, LineChartMixin, ClipAnimationMixin);\n\n    var ClipAnimation = draw.Animation.extend({\n        options: {\n            duration: INITIAL_ANIMATION_DURATION\n        },\n\n        setup: function() {\n            this._setEnd(this.options.box.x1);\n        },\n\n        step: function(pos) {\n            var box = this.options.box;\n            this._setEnd(interpolate(box.x1, box.x2, pos));\n        },\n\n        _setEnd: function(x) {\n            var element = this.element;\n            var segments = element.segments;\n            var topRight = segments[1].anchor();\n            var bottomRight = segments[2].anchor();\n            element.suspend();\n            topRight.setX(x);\n            element.resume();\n            bottomRight.setX(x);\n        }\n    });\n    draw.AnimationFactory.current.register(CLIP, ClipAnimation);\n\n    var StepLineSegment = LineSegment.extend({\n        points: function(visualPoints) {\n            var segment = this,\n                points;\n\n            points = segment.calculateStepPoints(segment.linePoints);\n\n            if (visualPoints && visualPoints.length) {\n                points = points.concat(segment.calculateStepPoints(visualPoints).reverse());\n            }\n\n            return points;\n        },\n\n        calculateStepPoints: function(points) {\n            var segment = this,\n                chart = segment.parent,\n                plotArea = chart.plotArea,\n                categoryAxis = plotArea.seriesCategoryAxis(segment.series),\n                isInterpolate = chart.seriesMissingValues(segment.series) === INTERPOLATE,\n                length = points.length,\n                reverse = categoryAxis.options.reverse,\n                vertical = categoryAxis.options.vertical,\n                dir = reverse ? 2 : 1,\n                revDir = reverse ? 1 : 2,\n                prevPoint, point, i,\n                prevMarkerBoxCenter, markerBoxCenter,\n                result = [];\n\n            for (i = 1; i < length; i++) {\n                prevPoint = points[i - 1];\n                point = points[i];\n                prevMarkerBoxCenter = prevPoint.markerBox().center();\n                markerBoxCenter = point.markerBox().center();\n                if (categoryAxis.options.justified) {\n                    result.push(new geom.Point(prevMarkerBoxCenter.x, prevMarkerBoxCenter.y));\n                    if (vertical) {\n                        result.push(new geom.Point(prevMarkerBoxCenter.x, markerBoxCenter.y));\n                    } else {\n                        result.push(new geom.Point(markerBoxCenter.x, prevMarkerBoxCenter.y));\n                    }\n                    result.push(new geom.Point(markerBoxCenter.x, markerBoxCenter.y));\n                } else {\n                    if (vertical) {\n                        result.push(new geom.Point(prevMarkerBoxCenter.x, prevPoint.box[Y + dir]));\n                        result.push(new geom.Point(prevMarkerBoxCenter.x, prevPoint.box[Y + revDir]));\n                        if (isInterpolate) {\n                            result.push(new geom.Point(prevMarkerBoxCenter.x, point.box[Y + dir]));\n                        }\n                        result.push(new geom.Point(markerBoxCenter.x, point.box[Y + dir]));\n                        result.push(new geom.Point(markerBoxCenter.x, point.box[Y + revDir]));\n                    } else {\n                        result.push(new geom.Point(prevPoint.box[X + dir], prevMarkerBoxCenter.y));\n                        result.push(new geom.Point(prevPoint.box[X + revDir], prevMarkerBoxCenter.y));\n                        if (isInterpolate) {\n                            result.push(new geom.Point(point.box[X + dir], prevMarkerBoxCenter.y));\n                        }\n                        result.push(new geom.Point(point.box[X + dir], markerBoxCenter.y));\n                        result.push(new geom.Point(point.box[X + revDir], markerBoxCenter.y));\n                    }\n                }\n            }\n\n            return result || [];\n        }\n    });\n\n    var SplineSegment = LineSegment.extend({\n        createVisual: function() {\n            var options = this.options;\n            var series = this.series;\n            var defaults = series._defaults;\n            var color = series.color;\n\n            if (isFn(color) && defaults) {\n                color = defaults.color;\n            }\n\n            var curveProcessor = new CurveProcessor(this.options.closed);\n            var segments = curveProcessor.process(this.points());\n            var curve = new draw.Path({\n                stroke: {\n                    color: color,\n                    width: series.width,\n                    opacity: series.opacity,\n                    dashType: series.dashType\n                },\n                zIndex: series.zIndex\n            });\n\n            curve.segments.push.apply(curve.segments, segments);\n\n            this.visual = curve;\n        }\n    });\n\n    var AreaSegmentMixin = {\n        points: function() {\n            var segment = this,\n                chart = segment.parent,\n                plotArea = chart.plotArea,\n                invertAxes = chart.options.invertAxes,\n                valueAxis = chart.seriesValueAxis(segment.series),\n                valueAxisLineBox = valueAxis.lineBox(),\n                categoryAxis = plotArea.seriesCategoryAxis(segment.series),\n                categoryAxisLineBox = categoryAxis.lineBox(),\n                end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1,\n                stackPoints = segment.stackPoints,\n                points = segment._linePoints(stackPoints),\n                pos = invertAxes ? X : Y,\n                firstPoint, lastPoint;\n\n            end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\n            if (!segment.stackPoints && points.length > 1) {\n                firstPoint = points[0];\n                lastPoint = last(points);\n\n                if (invertAxes) {\n                    points.unshift(new geom.Point(end, firstPoint.y));\n                    points.push(new geom.Point(end, lastPoint.y));\n                } else {\n                    points.unshift(new geom.Point(firstPoint.x, end));\n                    points.push(new geom.Point(lastPoint.x, end));\n                }\n            }\n\n            return points;\n        },\n\n        createVisual: function() {\n            var options = this.options;\n            var series = this.series;\n            var defaults = series._defaults;\n            var color = series.color;\n\n            if (isFn(color) && defaults) {\n                color = defaults.color;\n            }\n\n            this.visual = new draw.Group({\n                zIndex: series.zIndex\n            });\n\n            this.createArea(color);\n            this.createLine(color);\n        },\n\n        createLine: function(color) {\n            var series = this.series;\n            var lineOptions = deepExtend({\n                        color: color,\n                        opacity: series.opacity\n                    }, series.line\n                );\n\n            if (lineOptions.visible !== false && lineOptions.width > 0) {\n                var line = draw.Path.fromPoints(this._linePoints(), {\n                    stroke: {\n                        color: lineOptions.color,\n                        width: lineOptions.width,\n                        opacity: lineOptions.opacity,\n                        dashType: lineOptions.dashType,\n                        lineCap: \"butt\"\n                    }\n                });\n\n                this.visual.append(line);\n            }\n        },\n\n        createArea: function(color) {\n            var series = this.series;\n\n            var area = draw.Path.fromPoints(this.points(), {\n                fill: {\n                    color: color,\n                    opacity: series.opacity\n                },\n                stroke: null\n            });\n\n            this.visual.append(area);\n        }\n    };\n\n    var AreaSegment = LineSegment.extend({\n        init: function(linePoints, stackPoints, currentSeries, seriesIx) {\n            var segment = this;\n\n            segment.stackPoints = stackPoints;\n\n            LineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\n        },\n\n        _linePoints: LineSegment.fn.points\n    });\n    deepExtend(AreaSegment.fn, AreaSegmentMixin);\n\n    var AreaChart = LineChart.extend({\n        createSegment: function(linePoints, currentSeries, seriesIx, prevSegment) {\n            var chart = this,\n                options = chart.options,\n                isStacked = options.isStacked,\n                stackPoints, pointType,\n                style = (currentSeries.line || {}).style;\n\n            if (isStacked && seriesIx > 0 && prevSegment) {\n                stackPoints = prevSegment.linePoints;\n                if (style !== STEP) {\n                    stackPoints = stackPoints.slice(0).reverse();\n                }\n            }\n\n            if (style === SMOOTH) {\n                return new SplineAreaSegment(linePoints, prevSegment, isStacked, currentSeries, seriesIx);\n            }\n\n            if (style === STEP) {\n                pointType = StepAreaSegment;\n            } else {\n                pointType = AreaSegment;\n            }\n\n            return new pointType(linePoints, stackPoints, currentSeries, seriesIx);\n        },\n\n        seriesMissingValues: function(series) {\n            return series.missingValues || ZERO;\n        }\n    });\n\n    var SplineAreaSegment = AreaSegment.extend({\n        init: function(linePoints, prevSegment, isStacked, currentSeries, seriesIx) {\n            var segment = this;\n\n            segment.prevSegment = prevSegment;\n            segment.isStacked = isStacked;\n            LineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\n        },\n\n        strokeSegments: function() {\n            var segments = this._strokeSegments;\n\n            if (!segments) {\n                var curveProcessor = new CurveProcessor(this.options.closed);\n                var linePoints = LineSegment.fn.points.call(this);\n                segments = this._strokeSegments = curveProcessor.process(linePoints);\n            }\n\n            return segments;\n        },\n\n        createVisual: function() {\n            var options = this.options;\n            var series = this.series;\n            var defaults = series._defaults;\n            var color = series.color;\n\n            if (isFn(color) && defaults) {\n                color = defaults.color;\n            }\n\n            this.visual = new draw.Group({\n                zIndex: series.zIndex\n            });\n\n            this.createFill({\n                fill: {\n                    color: color,\n                    opacity: series.opacity\n                },\n                stroke: null\n            });\n\n            this.createStroke({\n                stroke: deepExtend({\n                    color: color,\n                    opacity: series.opacity,\n                    lineCap: \"butt\"\n                }, series.line)\n            });\n        },\n\n        createFill: function(style) {\n            var strokeSegments = this.strokeSegments();\n            var fillSegments = strokeSegments.slice(0);\n            var prevSegment = this.prevSegment;\n\n            if (this.isStacked && prevSegment) {\n                var prevStrokeSegments = prevSegment.strokeSegments();\n                var prevAnchor = last(prevStrokeSegments).anchor();\n\n                fillSegments.push(new draw.Segment(\n                    prevAnchor,\n                    prevAnchor,\n                    last(strokeSegments).anchor()\n                ));\n\n                var stackSegments = $.map(prevStrokeSegments, function(segment) {\n                    return new draw.Segment(\n                        segment.anchor(),\n                        segment.controlOut(),\n                        segment.controlIn()\n                    );\n                }).reverse();\n\n                append(fillSegments, stackSegments);\n\n                var firstAnchor = fillSegments[0].anchor();\n                fillSegments.push(new draw.Segment(\n                    firstAnchor,\n                    firstAnchor,\n                    last(stackSegments).anchor()\n                ));\n            }\n\n            var fill = new draw.Path(style);\n            fill.segments.push.apply(fill.segments, fillSegments);\n            this.closeFill(fill);\n\n            this.visual.append(fill);\n        },\n\n        closeFill: function(fillPath) {\n            var segment = this,\n                chart = segment.parent,\n                prevSegment = segment.prevSegment,\n                plotArea = chart.plotArea,\n                invertAxes = chart.options.invertAxes,\n                valueAxis = chart.seriesValueAxis(segment.series),\n                valueAxisLineBox = valueAxis.lineBox(),\n                categoryAxis = plotArea.seriesCategoryAxis(segment.series),\n                categoryAxisLineBox = categoryAxis.lineBox(),\n                end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1,\n                pos = invertAxes ? X : Y,\n                segments = segment.strokeSegments(),\n                firstPoint = segments[0].anchor(),\n                lastPoint = last(segments).anchor();\n\n            end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\n            if (!(chart.options.isStacked && prevSegment) && segments.length > 1) {\n                if (invertAxes) {\n                    fillPath.lineTo(end, lastPoint.y)\n                            .lineTo(end, firstPoint.y);\n                } else {\n                    fillPath.lineTo(lastPoint.x, end)\n                            .lineTo(firstPoint.x, end);\n                }\n            }\n        },\n\n        createStroke: function(style) {\n            if (style.stroke.width > 0) {\n                var stroke = new draw.Path(style);\n                stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n\n                this.visual.append(stroke);\n            }\n        }\n    });\n\n    var StepAreaSegment = StepLineSegment.extend({\n        init: function(linePoints, stackPoints, currentSeries, seriesIx) {\n            var segment = this;\n\n            segment.stackPoints = stackPoints;\n\n            StepLineSegment.fn.init.call(segment, linePoints, currentSeries, seriesIx);\n        },\n\n        _linePoints: StepLineSegment.fn.points\n    });\n    deepExtend(StepAreaSegment.fn, AreaSegmentMixin);\n\n    var ScatterChart = ChartElement.extend({\n        init: function(plotArea, options) {\n            var chart = this;\n\n            ChartElement.fn.init.call(chart, options);\n\n            chart.plotArea = plotArea;\n\n            // X and Y axis ranges grouped by name, e.g.:\n            // primary: { min: 0, max: 1 }\n            chart.xAxisRanges = {};\n            chart.yAxisRanges = {};\n\n            chart.points = [];\n            chart.seriesPoints = [];\n            chart.seriesOptions = [];\n            chart._evalSeries = [];\n\n            chart.render();\n        },\n\n        options: {\n            series: [],\n            tooltip: {\n                format: \"{0}, {1}\"\n            },\n            labels: {\n                format: \"{0}, {1}\"\n            },\n            clip: true\n        },\n\n        render: function() {\n            var chart = this;\n\n            chart.traverseDataPoints(proxy(chart.addValue, chart));\n        },\n\n        addErrorBar: function(point, field, fields){\n            var errorRange,\n                chart = this,\n                value = point.value[field],\n                valueErrorField = field + \"Value\",\n                lowField = field + \"ErrorLow\",\n                highField = field + \"ErrorHigh\",\n                seriesIx = fields.seriesIx,\n                series = fields.series,\n                errorBars = point.options.errorBars,\n                lowValue = fields[lowField],\n                highValue = fields[highField];\n\n            if (isNumber(value)) {\n                if (isNumber(lowValue) && isNumber(highValue)) {\n                    errorRange = {low: lowValue, high: highValue};\n                }\n\n                if (errorBars && defined(errorBars[valueErrorField])) {\n                    chart.seriesErrorRanges = chart.seriesErrorRanges || {x: [], y: []};\n                    chart.seriesErrorRanges[field][seriesIx] = chart.seriesErrorRanges[field][seriesIx] ||\n                        new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n\n                    errorRange = chart.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n                }\n\n                if (errorRange) {\n                    chart.addPointErrorBar(errorRange, point, field);\n                }\n            }\n        },\n\n        addPointErrorBar: function(errorRange, point, field){\n            var chart = this,\n                low = errorRange.low,\n                high = errorRange.high,\n                series = point.series,\n                isVertical = field === Y,\n                options = point.options.errorBars,\n                item = {},\n                errorBar;\n\n            point[field + \"Low\"] = low;\n            point[field + \"High\"] = high;\n\n            point.errorBars = point.errorBars || [];\n            errorBar = new ScatterErrorBar(low, high, isVertical, chart, series, options);\n            point.errorBars.push(errorBar);\n            point.append(errorBar);\n\n            item[field] = low;\n            chart.updateRange(item, series);\n            item[field] = high;\n            chart.updateRange(item, series);\n        },\n\n        addValue: function(value, fields) {\n            var chart = this,\n                point,\n                x = value.x,\n                y = value.y,\n                seriesIx = fields.seriesIx,\n                seriesPoints = chart.seriesPoints[seriesIx];\n\n            chart.updateRange(value, fields.series);\n\n            if (defined(x) && x !== null && defined(y) && y !== null) {\n                point = chart.createPoint(value, fields);\n                if (point) {\n                    extend(point, fields);\n                    chart.addErrorBar(point, X, fields);\n                    chart.addErrorBar(point, Y, fields);\n                }\n            }\n\n            chart.points.push(point);\n            seriesPoints.push(point);\n        },\n\n        updateRange: function(value, series) {\n            var chart = this,\n                x = value.x,\n                y = value.y,\n                xAxisName = series.xAxis,\n                yAxisName = series.yAxis,\n                xAxisRange = chart.xAxisRanges[xAxisName],\n                yAxisRange = chart.yAxisRanges[yAxisName];\n\n            if (defined(x) && x !== null) {\n                xAxisRange = chart.xAxisRanges[xAxisName] =\n                    xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n                if (typeof(x) === STRING) {\n                    x = toDate(x);\n                }\n\n                xAxisRange.min = math.min(xAxisRange.min, x);\n                xAxisRange.max = math.max(xAxisRange.max, x);\n            }\n\n            if (defined(y) && y !== null) {\n                yAxisRange = chart.yAxisRanges[yAxisName] =\n                    yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n                if (typeof(y) === STRING) {\n                    y = toDate(y);\n                }\n\n                yAxisRange.min = math.min(yAxisRange.min, y);\n                yAxisRange.max = math.max(yAxisRange.max, y);\n            }\n        },\n\n        evalPointOptions: function(options, value, fields) {\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var state = { defaults: series._defaults, excluded: [\"data\", \"tooltip\", \"tempate\"] };\n\n            var doEval = this._evalSeries[seriesIx];\n            if (!defined(doEval)) {\n                this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n            }\n\n            if (doEval) {\n                options = deepExtend({}, options);\n                evalOptions(options, {\n                    value: value,\n                    series: series,\n                    dataItem: fields.dataItem\n                }, state);\n            }\n\n            return options;\n        },\n\n        pointType: function() {\n            return LinePoint;\n        },\n\n        pointOptions: function(series, seriesIx) {\n            var options = this.seriesOptions[seriesIx];\n            if (!options) {\n                var defaults = this.pointType().fn.defaults;\n                this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n                    markers: {\n                        opacity: series.opacity\n                    },\n                    tooltip: {\n                        format: this.options.tooltip.format\n                    },\n                    labels: {\n                        format: this.options.labels.format\n                    }\n                }, series);\n            }\n\n            return options;\n        },\n\n        createPoint: function(value, fields) {\n            var chart = this,\n                series = fields.series,\n                point;\n\n            var pointOptions = this.pointOptions(series, fields.seriesIx);\n            var color = fields.color || series.color;\n\n            pointOptions = chart.evalPointOptions(pointOptions, value, fields);\n\n            if (kendo.isFunction(series.color)) {\n                color = pointOptions.color;\n            }\n\n            point = new LinePoint(value, pointOptions);\n            point.color = color;\n\n            chart.append(point);\n\n            return point;\n        },\n\n        seriesAxes: function(series) {\n            var plotArea = this.plotArea,\n                xAxisName = series.xAxis,\n                xAxis = xAxisName ?\n                        plotArea.namedXAxes[xAxisName] :\n                        plotArea.axisX,\n                yAxisName = series.yAxis,\n                yAxis = yAxisName ?\n                        plotArea.namedYAxes[yAxisName] :\n                        plotArea.axisY;\n\n            if (!xAxis) {\n                throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n            }\n\n            if (!yAxis) {\n                throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n            }\n\n            return {\n                x: xAxis,\n                y: yAxis\n            };\n        },\n\n        reflow: function(targetBox) {\n            var chart = this,\n                chartPoints = chart.points,\n                pointIx = 0,\n                point,\n                seriesAxes,\n                clip = chart.options.clip,\n                limit = !chart.options.clip;\n\n            chart.traverseDataPoints(function(value, fields) {\n                point = chartPoints[pointIx++];\n                seriesAxes = chart.seriesAxes(fields.series);\n\n                var slotX = seriesAxes.x.getSlot(value.x, value.x, limit),\n                    slotY = seriesAxes.y.getSlot(value.y, value.y, limit),\n                    pointSlot;\n\n                if (point) {\n                    if (slotX && slotY) {\n                        pointSlot = chart.pointSlot(slotX, slotY);\n                        point.reflow(pointSlot);\n                    } else {\n                        point.visible = false;\n                    }\n                }\n            });\n\n            chart.box = targetBox;\n        },\n\n        pointSlot: function(slotX, slotY) {\n            return new Box2D(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n        },\n\n        traverseDataPoints: function(callback) {\n            var chart = this,\n                options = chart.options,\n                series = options.series,\n                seriesPoints = chart.seriesPoints,\n                pointIx,\n                seriesIx,\n                currentSeries,\n                currentSeriesPoints,\n                pointData,\n                value,\n                fields;\n\n            for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\n                currentSeries = series[seriesIx];\n                currentSeriesPoints = seriesPoints[seriesIx];\n                if (!currentSeriesPoints) {\n                    seriesPoints[seriesIx] = [];\n                }\n\n                for (pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n                    pointData = this._bindPoint(currentSeries, seriesIx, pointIx);\n                    value = pointData.valueFields;\n                    fields = pointData.fields;\n\n                   callback(value, deepExtend({\n                       pointIx: pointIx,\n                       series: currentSeries,\n                       seriesIx: seriesIx,\n                       dataItem: currentSeries.data[pointIx],\n                       owner: chart\n                   }, fields));\n                }\n            }\n        },\n\n        _bindPoint: CategoricalChart.fn._bindPoint,\n\n        formatPointValue: function(point, format) {\n            var value = point.value;\n            return autoFormat(format, value.x, value.y);\n        },\n\n        animationPoints: function() {\n            var seriesPoints = this.points;\n            var points = [];\n            var idx;\n\n            for (idx = 0; idx < seriesPoints.length; idx++) {\n                if (seriesPoints[idx].marker) {\n                    points.push(seriesPoints[idx].marker);\n                }\n            }\n            return points;\n        }\n    });\n\n    deepExtend(ScatterChart.fn, ClipAnimationMixin);\n\n    var ScatterLineChart = ScatterChart.extend({\n        render: function() {\n            var chart = this;\n\n            ScatterChart.fn.render.call(chart);\n\n            chart.renderSegments();\n        },\n\n        createSegment: function(linePoints, currentSeries, seriesIx) {\n            var pointType,\n                style = currentSeries.style;\n\n            if (style === SMOOTH) {\n                pointType = SplineSegment;\n            } else {\n                pointType = LineSegment;\n            }\n\n            return new pointType(linePoints, currentSeries, seriesIx);\n        },\n\n        animationPoints: function() {\n            var points = ScatterChart.fn.animationPoints.call(this);\n            return points.concat(this._segments);\n        }\n    });\n    deepExtend(ScatterLineChart.fn, LineChartMixin);\n\n    var BubbleChart = ScatterChart.extend({\n        options: {\n            tooltip: {\n                format: \"{3}\"\n            },\n            labels: {\n                format: \"{3}\"\n            }\n        },\n\n        addValue: function(value, fields) {\n            if ((value.size !== null && value.size >= 0) || fields.series.negativeValues.visible) {\n                ScatterChart.fn.addValue.call(this, value, fields);\n            }\n        },\n\n        reflow: function(box) {\n            var chart = this;\n\n            chart.updateBubblesSize(box);\n            ScatterChart.fn.reflow.call(chart, box);\n        },\n\n        pointType: function() {\n            return Bubble;\n        },\n\n        createPoint: function(value, fields) {\n            var chart = this,\n                series = fields.series,\n                seriesColors = chart.plotArea.options.seriesColors || [],\n                pointsCount = series.data.length,\n                delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount),\n                animationOptions = {\n                    delay: delay,\n                    duration: INITIAL_ANIMATION_DURATION - delay,\n                    type: BUBBLE\n                },\n                point, pointOptions;\n\n            var color = fields.color || series.color;\n            if (value.size < 0 && series.negativeValues.visible) {\n                color = valueOrDefault(\n                    series.negativeValues.color, color\n                );\n            }\n\n            pointOptions = deepExtend({\n                labels: {\n                    animation: {\n                        delay: delay,\n                        duration: INITIAL_ANIMATION_DURATION - delay\n                    }\n                }\n            }, this.pointOptions(series, fields.seriesIx), {\n                markers: {\n                    type: CIRCLE,\n                    border: series.border,\n                    opacity: series.opacity,\n                    animation: animationOptions\n                }\n            });\n\n            pointOptions = chart.evalPointOptions(pointOptions, value, fields);\n            if (kendo.isFunction(series.color)) {\n                color = pointOptions.color;\n            }\n\n            pointOptions.markers.background = color;\n\n            point = new Bubble(value, pointOptions);\n            point.color = color;\n\n            chart.append(point);\n\n            return point;\n        },\n\n        updateBubblesSize: function(box) {\n            var chart = this,\n                options = chart.options,\n                series = options.series,\n                boxSize = math.min(box.width(), box.height()),\n                seriesIx,\n                pointIx;\n\n            for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\n                var currentSeries = series[seriesIx],\n                    seriesPoints = chart.seriesPoints[seriesIx],\n                    seriesMaxSize = chart.maxSize(seriesPoints),\n                    minSize = currentSeries.minSize || math.max(boxSize * 0.02, 10),\n                    maxSize = currentSeries.maxSize || boxSize * 0.2,\n                    minR = minSize / 2,\n                    maxR = maxSize / 2,\n                    minArea = math.PI * minR * minR,\n                    maxArea = math.PI * maxR * maxR,\n                    areaRange = maxArea - minArea,\n                    areaRatio = areaRange / seriesMaxSize;\n\n                for (pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n                    var point = seriesPoints[pointIx],\n                        area = math.abs(point.value.size) * areaRatio,\n                        r = math.sqrt((minArea + area) / math.PI),\n                        baseZIndex = valueOrDefault(point.options.zIndex, 0),\n                        zIndex = baseZIndex + (1 - r / maxR);\n\n                    deepExtend(point.options, {\n                        zIndex: zIndex,\n                        markers: {\n                            size: r * 2,\n                            zIndex: zIndex\n                        },\n                        labels: {\n                            zIndex: zIndex + 1\n                        }\n                    });\n                }\n            }\n        },\n\n        maxSize: function(seriesPoints) {\n            var length = seriesPoints.length,\n                max = 0,\n                i,\n                size;\n\n            for (i = 0; i < length; i++) {\n                size = seriesPoints[i].value.size;\n                max = math.max(max, math.abs(size));\n            }\n\n            return max;\n        },\n\n        formatPointValue: function(point, format) {\n            var value = point.value;\n            return autoFormat(format, value.x, value.y, value.size, point.category);\n        },\n\n        createAnimation: noop,\n        createVisual: noop\n    });\n\n    var Candlestick = ChartElement.extend({\n        init: function(value, options) {\n            ChartElement.fn.init.call(this, options);\n            this.value = value;\n        },\n\n        options: {\n            border: {\n                _brightness: 0.8\n            },\n            line: {\n                width: 2\n            },\n            overlay: {\n                gradient: GLASS\n            },\n            tooltip: {\n                format: \"<table style='text-align: left;'>\" +\n                        \"<th colspan='2'>{4:d}</th>\" +\n                        \"<tr><td>Open:</td><td>{0:C}</td></tr>\" +\n                        \"<tr><td>High:</td><td>{1:C}</td></tr>\" +\n                        \"<tr><td>Low:</td><td>{2:C}</td></tr>\" +\n                        \"<tr><td>Close:</td><td>{3:C}</td></tr>\" +\n                        \"</table>\"\n            },\n            highlight: {\n                opacity: 1,\n                border: {\n                    width: 1,\n                    opacity: 1\n                },\n                line: {\n                    width: 1,\n                    opacity: 1\n                }\n            },\n            notes: {\n                visible: true,\n                label: {}\n            }\n        },\n\n        reflow: function(box) {\n            var point = this,\n                options = point.options,\n                chart = point.owner,\n                value = point.value,\n                valueAxis = chart.seriesValueAxis(options),\n                points = [], mid, ocSlot, lhSlot;\n\n            ocSlot = valueAxis.getSlot(value.open, value.close);\n            lhSlot = valueAxis.getSlot(value.low, value.high);\n\n            ocSlot.x1 = lhSlot.x1 = box.x1;\n            ocSlot.x2 = lhSlot.x2 = box.x2;\n\n            point.realBody = ocSlot;\n\n            mid = lhSlot.center().x;\n            points.push([ [mid, lhSlot.y1], [mid, ocSlot.y1] ]);\n            points.push([ [mid, ocSlot.y2], [mid, lhSlot.y2] ]);\n\n            point.lines = points;\n\n            point.box = lhSlot.clone().wrap(ocSlot);\n\n            if (!point._rendered) {\n                point._rendered = true;\n                point.createNote();\n            }\n\n            point.reflowNote();\n        },\n\n        reflowNote: function() {\n            var point = this;\n\n            if (point.note) {\n                point.note.reflow(point.box);\n            }\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            this.visual.append(\n                this.mainVisual(this.options)\n            );\n\n            this.createOverlay();\n        },\n\n        mainVisual: function(options) {\n            var group = new draw.Group();\n\n            this.createBody(group, options);\n            this.createLines(group, options);\n\n            return group;\n        },\n\n        createBody: function(container, options) {\n            var body = draw.Path.fromRect(this.realBody.toRect(), {\n                fill: {\n                    color: this.color,\n                    opacity: options.opacity\n                },\n                stroke: null\n            });\n\n            if (options.border.width > 0) {\n                body.options.set(\"stroke\", {\n                    color: this.getBorderColor(),\n                    width: options.border.width,\n                    dashType: options.border.dashType,\n                    opacity: valueOrDefault(options.border.opacity, options.opacity)\n                });\n            }\n\n            alignPathToPixel(body);\n            container.append(body);\n\n            if (hasGradientOverlay(options)) {\n                container.append(this.createGradientOverlay(body, {\n                        baseColor: this.color\n                    },\n                    deepExtend({}, options.overlay)\n                ));\n            }\n        },\n\n        createLines: function(container, options) {\n            this.drawLines(container, options, this.lines, options.line);\n        },\n\n        drawLines: function(container, options, lines, lineOptions) {\n            var lineStyle = {\n                stroke: {\n                    color: lineOptions.color || this.color,\n                    opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n                    width: lineOptions.width,\n                    dashType: lineOptions.dashType,\n                    lineCap: \"butt\"\n                }\n            };\n\n            for (var i = 0; i < lines.length; i++) {\n                var line = draw.Path.fromPoints(lines[i], lineStyle);\n                alignPathToPixel(line);\n                container.append(line);\n            }\n        },\n\n        getBorderColor: function() {\n            var point = this,\n                options = point.options,\n                border = options.border,\n                borderColor = border.color;\n\n            if (!defined(borderColor)) {\n                borderColor =\n                    new Color(point.color).brightness(border._brightness).toHex();\n            }\n\n            return borderColor;\n        },\n\n        createOverlay: function() {\n            var overlay = draw.Path.fromRect(this.box.toRect(), {\n                fill: {\n                    color: WHITE,\n                    opacity: 0\n                },\n                stroke: null\n            });\n\n            this.visual.append(overlay);\n        },\n\n        createHighlight: function() {\n            var highlight = this.options.highlight;\n            var normalColor = this.color;\n\n            this.color = highlight.color || this.color;\n            var overlay = this.mainVisual(\n                deepExtend({}, this.options, {\n                    line: {\n                        color: this.getBorderColor()\n                    }\n                }, highlight)\n            );\n            this.color = normalColor;\n\n            return overlay;\n        },\n\n        tooltipAnchor: function() {\n            var point = this,\n                box = point.box,\n                clipBox = point.owner.pane.clipBox() || box;\n\n            return new Point2D(box.x2 + TOOLTIP_OFFSET, math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET);\n        },\n\n        formatValue: function(format) {\n            var point = this;\n            return point.owner.formatPointValue(point, format);\n        }\n    });\n    deepExtend(Candlestick.fn, PointEventsMixin);\n    deepExtend(Candlestick.fn, NoteMixin);\n\n    var CandlestickChart = CategoricalChart.extend({\n        options: {},\n\n        reflowCategories: function(categorySlots) {\n            var chart = this,\n                children = chart.children,\n                childrenLength = children.length,\n                i;\n\n            for (i = 0; i < childrenLength; i++) {\n                children[i].reflow(categorySlots[i]);\n            }\n        },\n\n        addValue: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var options = chart.options;\n            var value = data.valueFields;\n            var children = chart.children;\n            var valueParts = chart.splitValue(value);\n            var hasValue = areNumbers(valueParts);\n            var categoryPoints = chart.categoryPoints[categoryIx];\n            var dataItem = series.data[categoryIx];\n            var point, cluster;\n\n            if (!categoryPoints) {\n                chart.categoryPoints[categoryIx] = categoryPoints = [];\n            }\n\n            if (hasValue) {\n                point = chart.createPoint(data, fields);\n            }\n\n            cluster = children[categoryIx];\n            if (!cluster) {\n                cluster = new ClusterLayout({\n                    vertical: options.invertAxes,\n                    gap: options.gap,\n                    spacing: options.spacing\n                });\n                chart.append(cluster);\n            }\n\n            if (point) {\n                chart.updateRange(value, fields);\n\n                cluster.append(point);\n\n                point.categoryIx = categoryIx;\n                point.category = category;\n                point.series = series;\n                point.seriesIx = seriesIx;\n                point.owner = chart;\n                point.dataItem = dataItem;\n                point.noteText = data.fields.noteText;\n            }\n\n            chart.points.push(point);\n            categoryPoints.push(point);\n        },\n\n        pointType: function() {\n            return Candlestick;\n        },\n\n        createPoint: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var value = data.valueFields;\n            var pointOptions = deepExtend({}, series);\n            var pointType = chart.pointType();\n            var color = data.fields.color || series.color;\n\n            pointOptions = chart.evalPointOptions(\n                pointOptions, value, category, categoryIx, series, seriesIx\n            );\n\n            if (series.type == CANDLESTICK) {\n                if (value.open > value.close) {\n                    color = data.fields.downColor || series.downColor || series.color;\n                }\n            }\n\n            if (kendo.isFunction(series.color)) {\n                color = pointOptions.color;\n            }\n\n            var point = new pointType(value, pointOptions);\n            point.color = color;\n\n            return point;\n        },\n\n        splitValue: function(value) {\n            return [value.low, value.open, value.close, value.high];\n        },\n\n        updateRange: function(value, fields) {\n            var chart = this,\n                axisName = fields.series.axis,\n                axisRange = chart.valueAxisRanges[axisName],\n                parts = chart.splitValue(value);\n\n            axisRange = chart.valueAxisRanges[axisName] =\n                axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n            axisRange = chart.valueAxisRanges[axisName] = {\n                min: math.min.apply(math, parts.concat([axisRange.min])),\n                max: math.max.apply(math, parts.concat([axisRange.max]))\n            };\n        },\n\n        formatPointValue: function(point, format) {\n            var value = point.value;\n\n            return autoFormat(format,\n                value.open, value.high,\n                value.low, value.close, point.category\n            );\n        },\n\n        animationPoints: function() {\n            return this.points;\n        }\n    });\n\n    deepExtend(CandlestickChart.fn, ClipAnimationMixin);\n\n    var OHLCPoint = Candlestick.extend({\n        reflow: function(box) {\n            var point = this,\n                options = point.options,\n                chart = point.owner,\n                value = point.value,\n                valueAxis = chart.seriesValueAxis(options),\n                oPoints = [], cPoints = [], lhPoints = [],\n                mid, oSlot, cSlot, lhSlot;\n\n            lhSlot = valueAxis.getSlot(value.low, value.high);\n            oSlot = valueAxis.getSlot(value.open, value.open);\n            cSlot = valueAxis.getSlot(value.close, value.close);\n\n            oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n            oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n\n            mid = lhSlot.center().x;\n\n            oPoints.push([oSlot.x1, oSlot.y1]);\n            oPoints.push([mid, oSlot.y1]);\n            cPoints.push([mid, cSlot.y1]);\n            cPoints.push([cSlot.x2, cSlot.y1]);\n            lhPoints.push([mid, lhSlot.y1]);\n            lhPoints.push([mid, lhSlot.y2]);\n\n            point.lines = [\n                oPoints, cPoints, lhPoints\n            ];\n\n            point.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n\n            point.reflowNote();\n        },\n\n        createBody: $.noop\n    });\n\n    var OHLCChart = CandlestickChart.extend({\n        pointType: function() {\n            return OHLCPoint;\n        }\n    });\n\n    var BoxPlotChart = CandlestickChart.extend({\n        addValue: function(data, fields) {\n            var chart = this;\n            var categoryIx = fields.categoryIx;\n            var category = fields.category;\n            var series = fields.series;\n            var seriesIx = fields.seriesIx;\n            var options = chart.options;\n            var children = chart.children;\n            var value = data.valueFields;\n            var valueParts = chart.splitValue(value);\n            var hasValue = areNumbers(valueParts);\n            var categoryPoints = chart.categoryPoints[categoryIx];\n            var dataItem = series.data[categoryIx];\n            var point, cluster;\n\n            if (!categoryPoints) {\n                chart.categoryPoints[categoryIx] = categoryPoints = [];\n            }\n\n            if (hasValue) {\n                point = chart.createPoint(data, fields);\n            }\n\n            cluster = children[categoryIx];\n            if (!cluster) {\n                cluster = new ClusterLayout({\n                    vertical: options.invertAxes,\n                    gap: options.gap,\n                    spacing: options.spacing\n                });\n                chart.append(cluster);\n            }\n\n            if (point) {\n                chart.updateRange(value, fields);\n\n                cluster.append(point);\n\n                point.categoryIx = categoryIx;\n                point.category = category;\n                point.series = series;\n                point.seriesIx = seriesIx;\n                point.owner = chart;\n                point.dataItem = dataItem;\n            }\n\n            chart.points.push(point);\n            categoryPoints.push(point);\n        },\n\n        pointType: function() {\n            return BoxPlot;\n        },\n\n        splitValue: function(value) {\n            return [\n                value.lower, value.q1, value.median,\n                value.q3, value.upper\n            ];\n        },\n\n        updateRange: function(value, fields) {\n            var chart = this,\n                axisName = fields.series.axis,\n                axisRange = chart.valueAxisRanges[axisName],\n                parts = chart.splitValue(value).concat(\n                    chart.filterOutliers(value.outliers));\n\n            if (defined(value.mean)) {\n                parts = parts.concat(value.mean);\n            }\n\n            axisRange = chart.valueAxisRanges[axisName] =\n                axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n            axisRange = chart.valueAxisRanges[axisName] = {\n                min: math.min.apply(math, parts.concat([axisRange.min])),\n                max: math.max.apply(math, parts.concat([axisRange.max]))\n            };\n        },\n\n        formatPointValue: function(point, format) {\n            var value = point.value;\n\n            return autoFormat(format,\n                value.lower, value.q1, value.median,\n                value.q3, value.upper, value.mean, point.category\n            );\n        },\n\n        filterOutliers: function(items) {\n            var length = (items || []).length,\n                result = [],\n                i, item;\n\n            for (i = 0; i < length; i++) {\n                item = items[i];\n                if (defined(item)) {\n                    appendIfNotNull(result, item);\n                }\n            }\n\n            return result;\n        }\n    });\n\n    var BoxPlot = Candlestick.extend({\n        init: function(value, options) {\n            var point = this;\n\n            ChartElement.fn.init.call(point, options);\n            point.value = value;\n\n            point.createNote();\n        },\n\n        options: {\n            border: {\n                _brightness: 0.8\n            },\n            line: {\n                width: 2\n            },\n            mean: {\n                width: 2,\n                dashType: \"dash\"\n            },\n            overlay: {\n                gradient: GLASS\n            },\n            tooltip: {\n                format: \"<table style='text-align: left;'>\" +\n                        \"<th colspan='2'>{6:d}</th>\" +\n                        \"<tr><td>Lower:</td><td>{0:C}</td></tr>\" +\n                        \"<tr><td>Q1:</td><td>{1:C}</td></tr>\" +\n                        \"<tr><td>Median:</td><td>{2:C}</td></tr>\" +\n                        \"<tr><td>Mean:</td><td>{5:C}</td></tr>\" +\n                        \"<tr><td>Q3:</td><td>{3:C}</td></tr>\" +\n                        \"<tr><td>Upper:</td><td>{4:C}</td></tr>\" +\n                        \"</table>\"\n            },\n            highlight: {\n                opacity: 1,\n                border: {\n                    width: 1,\n                    opacity: 1\n                },\n                line: {\n                    width: 1,\n                    opacity: 1\n                }\n            },\n            notes: {\n                visible: true,\n                label: {}\n            },\n            outliers: {\n                visible: true,\n                size: LINE_MARKER_SIZE,\n                type: CROSS,\n                background: WHITE,\n                border: {\n                    width: 2,\n                    opacity: 1\n                },\n                opacity: 0\n            },\n            extremes: {\n                visible: true,\n                size: LINE_MARKER_SIZE,\n                type: CIRCLE,\n                background: WHITE,\n                border: {\n                    width: 2,\n                    opacity: 1\n                },\n                opacity: 0\n            }\n        },\n\n        reflow: function(box) {\n            var point = this,\n                options = point.options,\n                chart = point.owner,\n                value = point.value,\n                valueAxis = chart.seriesValueAxis(options),\n                mid, whiskerSlot, boxSlot, medianSlot, meanSlot;\n\n            boxSlot = valueAxis.getSlot(value.q1, value.q3);\n            point.boxSlot = boxSlot;\n\n            whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n            medianSlot = valueAxis.getSlot(value.median);\n\n            boxSlot.x1 = whiskerSlot.x1 = box.x1;\n            boxSlot.x2 = whiskerSlot.x2 = box.x2;\n\n            point.realBody = boxSlot;\n\n            if (value.mean) {\n                meanSlot = valueAxis.getSlot(value.mean);\n                point.meanPoints = [\n                    [[box.x1, meanSlot.y1], [box.x2, meanSlot.y1]]\n                ];\n            }\n\n            mid = whiskerSlot.center().x;\n            point.whiskerPoints = [[\n                [mid - 5, whiskerSlot.y1], [mid + 5, whiskerSlot.y1],\n                [mid, whiskerSlot.y1], [mid, boxSlot.y1]\n            ], [\n                [mid - 5, whiskerSlot.y2], [mid + 5, whiskerSlot.y2],\n                [mid, whiskerSlot.y2], [mid, boxSlot.y2]\n            ]];\n\n            point.medianPoints = [\n                [[box.x1, medianSlot.y1], [box.x2, medianSlot.y1]]\n            ];\n\n            point.box = whiskerSlot.clone().wrap(boxSlot);\n\n            point.reflowNote();\n        },\n\n        renderOutliers: function(options) {\n            var point = this,\n                markers = options.markers || {},\n                value = point.value,\n                outliers = value.outliers || [],\n                valueAxis = point.owner.seriesValueAxis(options),\n                outerFence = math.abs(value.q3 - value.q1) * 3,\n                markersBorder, markerBox, shape, outlierValue, i;\n\n            var elements = [];\n\n            for (i = 0; i < outliers.length; i++) {\n                outlierValue = outliers[i];\n                if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n                    markers = options.outliers;\n                } else {\n                    markers = options.extremes;\n                }\n                markersBorder = deepExtend({}, markers.border);\n\n                if (!defined(markersBorder.color)) {\n                    if (defined(point.color)) {\n                        markersBorder.color = point.color;\n                    } else {\n                        markersBorder.color =\n                            new Color(markers.background).brightness(BAR_BORDER_BRIGHTNESS).toHex();\n                    }\n                }\n\n                shape = new ShapeElement({\n                    type: markers.type,\n                    width: markers.size,\n                    height: markers.size,\n                    rotation: markers.rotation,\n                    background: markers.background,\n                    border: markersBorder,\n                    opacity: markers.opacity\n                });\n\n                shape.value = outlierValue;\n\n                elements.push(shape);\n            }\n\n            this.reflowOutliers(elements);\n            return elements;\n        },\n\n        reflowOutliers: function(outliers) {\n            var valueAxis = this.owner.seriesValueAxis(this.options);\n            var centerX = this.box.center().x;\n\n            for (var i = 0; i < outliers.length; i++) {\n                var outlierValue = outliers[i].value;\n                var markerBox = valueAxis.getSlot(outlierValue).move(centerX);\n\n                this.box = this.box.wrap(markerBox);\n                outliers[i].reflow(markerBox);\n            }\n        },\n\n        mainVisual: function(options) {\n            var group = Candlestick.fn.mainVisual.call(this, options);\n\n            var outliers = this.renderOutliers(options);\n            for (var i = 0; i < outliers.length; i++) {\n                var element = outliers[i].getElement();\n                if (element) {\n                    group.append(element);\n                }\n            }\n\n            return group;\n        },\n\n        createLines: function(container, options) {\n            this.drawLines(container, options, this.whiskerPoints, options.line);\n            this.drawLines(container, options, this.medianPoints, options.median);\n            this.drawLines(container, options, this.meanPoints, options.mean);\n        },\n\n        getBorderColor: function() {\n            if (this.color) {\n                return this.color;\n            }\n\n            return Candlestick.getBorderColor.call(this);\n        }\n    });\n    deepExtend(BoxPlot.fn, PointEventsMixin);\n\n    // TODO: Rename to Segment?\n    var PieSegment = ChartElement.extend({\n        init: function(value, sector, options) {\n            var segment = this;\n\n            segment.value = value;\n            segment.sector = sector;\n\n            ChartElement.fn.init.call(segment, options);\n        },\n\n        options: {\n            color: WHITE,\n            overlay: {\n                gradient: ROUNDED_BEVEL\n            },\n            border: {\n                width: 0.5\n            },\n            labels: {\n                visible: false,\n                distance: 35,\n                font: DEFAULT_FONT,\n                margin: getSpacing(0.5),\n                align: CIRCLE,\n                zIndex: 1,\n                position: OUTSIDE_END\n            },\n            animation: {\n                type: PIE\n            },\n            highlight: {\n                visible: true,\n                border: {\n                    width: 1\n                }\n            },\n            visible: true\n        },\n\n        render: function() {\n            var segment = this,\n                options = segment.options,\n                labels = options.labels,\n                labelText = segment.value,\n                labelTemplate;\n\n            if (segment._rendered || segment.visible === false) {\n                return;\n            } else {\n                segment._rendered = true;\n            }\n\n            if (labels.template) {\n                labelTemplate = template(labels.template);\n                labelText = labelTemplate({\n                    dataItem: segment.dataItem,\n                    category: segment.category,\n                    value: segment.value,\n                    series: segment.series,\n                    percentage: segment.percentage\n                });\n            } else if (labels.format) {\n                labelText = autoFormat(labels.format, labelText);\n            }\n\n            if (labels.visible && labelText) {\n                segment.label = new TextBox(labelText, deepExtend({}, labels, {\n                        align: CENTER,\n                        vAlign: \"\",\n                        animation: {\n                            type: FADEIN,\n                            delay: segment.animationDelay\n                        }\n                    }));\n\n                segment.append(segment.label);\n            }\n        },\n\n        reflow: function(targetBox) {\n            var segment = this;\n\n            segment.render();\n            segment.box = targetBox;\n            segment.reflowLabel();\n        },\n\n        reflowLabel: function() {\n            var segment = this,\n                sector = segment.sector.clone(),\n                options = segment.options,\n                label = segment.label,\n                labelsOptions = options.labels,\n                labelsDistance = labelsOptions.distance,\n                angle = sector.middle(),\n                lp, x1, labelWidth, labelHeight;\n\n            if (label) {\n                labelHeight = label.box.height();\n                labelWidth = label.box.width();\n                if (labelsOptions.position == CENTER) {\n                    sector.r = math.abs((sector.r - labelHeight) / 2) + labelHeight;\n                    lp = sector.point(angle);\n                    label.reflow(Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n                } else if (labelsOptions.position == INSIDE_END) {\n                    sector.r = sector.r - labelHeight / 2;\n                    lp = sector.point(angle);\n                    label.reflow(Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n                } else {\n                    lp = sector.clone().expand(labelsDistance).point(angle);\n                    if (lp.x >= sector.c.x) {\n                        x1 = lp.x + labelWidth;\n                        label.orientation = RIGHT;\n                    } else {\n                        x1 = lp.x - labelWidth;\n                        label.orientation = LEFT;\n                    }\n                    label.reflow(Box2D(x1, lp.y - labelHeight, lp.x, lp.y));\n                }\n            }\n        },\n\n        createVisual: function() {\n            var segment = this,\n                sector = segment.sector,\n                options = segment.options,\n                borderOptions = options.border || {},\n                border = borderOptions.width > 0 ? {\n                    stroke: {\n                        color: borderOptions.color,\n                        width: borderOptions.width,\n                        opacity: borderOptions.opacity,\n                        dashType: borderOptions.dashType\n                    }\n                } : {},\n                elements = [],\n                color = options.color,\n                fill = {\n                    color: color,\n                    opacity: options.opacity\n                },\n                visual;\n\n            ChartElement.fn.createVisual.call(this);\n            if (segment.value) {\n                visual = segment.createSegment(sector, deepExtend({\n                    fill: fill,\n                    stroke: {\n                        opacity: options.opacity\n                    },\n                    zIndex: options.zIndex\n                }, border));\n\n                this.visual.append(visual);\n\n                if (hasGradientOverlay(options)) {\n                    this.visual.append(this.createGradientOverlay(visual, {\n                            baseColor: color,\n                            fallbackFill: fill\n                        }, deepExtend({\n                            center: [sector.c.x, sector.c.y],\n                            innerRadius: sector.ir,\n                            radius: sector.r,\n                            userSpace: true\n                        }, options.overlay)\n                    ));\n                }\n            }\n        },\n\n        createSegment: function(sector, options) {\n            if (options.singleSegment) {\n                return new draw.Circle(new geom.Circle(new geom.Point(sector.c.x, sector.c.y), sector.r), options);\n            } else {\n                return ShapeBuilder.current.createRing(sector, options);\n            }\n        },\n\n        createAnimation: function() {\n            var options = this.options;\n\n            var center = this.sector.c;\n            deepExtend(options, {\n                animation: {\n                    center: [center.x, center.y],\n                    delay: this.animationDelay\n                }\n            });\n\n            ChartElement.fn.createAnimation.call(this);\n        },\n\n        createHighlight: function(options) {\n            var segment = this,\n                highlight = segment.options.highlight || {},\n                border = highlight.border || {};\n\n            return segment.createSegment(segment.sector, deepExtend({}, options, {\n                fill: {\n                    color: highlight.color,\n                    opacity: highlight.opacity\n                },\n                stroke: {\n                    opacity: border.opacity,\n                    width: border.width,\n                    color: border.color\n                }\n            }));\n        },\n\n        tooltipAnchor: function(width, height) {\n            var point = this,\n                box = point.sector.adjacentBox(TOOLTIP_OFFSET, width, height);\n\n            return new Point2D(box.x1, box.y1);\n        },\n\n        formatValue: function(format) {\n            var point = this;\n\n            return point.owner.formatPointValue(point, format);\n        }\n    });\n    deepExtend(PieSegment.fn, PointEventsMixin);\n\n    var PieChartMixin = {\n        createLegendItem: function(value, point, options) {\n            var chart = this,\n                legendOptions = chart.options.legend || {},\n                labelsOptions = legendOptions.labels || {},\n                inactiveItems = legendOptions.inactiveItems || {},\n                inactiveItemsLabels = inactiveItems.labels || {},\n                text, labelTemplate, markerColor, itemLabelOptions,\n                pointVisible;\n\n            if (options && options.visibleInLegend !== false) {\n                pointVisible = options.visible !== false;\n                text = options.category || \"\";\n                labelTemplate = pointVisible ? labelsOptions.template :\n                    (inactiveItemsLabels.template || labelsOptions.template);\n\n                if (labelTemplate) {\n                    text = template(labelTemplate)({\n                        text: text,\n                        series: options.series,\n                        dataItem: options.dataItem,\n                        percentage: options.percentage,\n                        value: value\n                    });\n                }\n\n                if (pointVisible) {\n                    itemLabelOptions = {};\n                    markerColor = point.color;\n                } else {\n                    itemLabelOptions = {\n                        color: inactiveItemsLabels.color,\n                        font: inactiveItemsLabels.font\n                    };\n                    markerColor = (inactiveItems.markers || {}).color;\n                }\n\n                if (text) {\n                    chart.legendItems.push({\n                        pointIndex: options.index,\n                        text: text,\n                        series: options.series,\n                        markerColor: markerColor,\n                        labels: itemLabelOptions\n                    });\n                }\n            }\n        }\n    };\n\n    var PieChart = ChartElement.extend({\n        init: function(plotArea, options) {\n            var chart = this;\n\n            ChartElement.fn.init.call(chart, options);\n\n            chart.plotArea = plotArea;\n            chart.points = [];\n            chart.legendItems = [];\n            chart.render();\n        },\n\n        options: {\n            startAngle: 90,\n            connectors: {\n                width: 1,\n                color: \"#939393\",\n                padding: 4\n            },\n            inactiveItems: {\n                markers: {},\n                labels: {}\n            }\n        },\n\n        render: function() {\n            var chart = this;\n\n            chart.traverseDataPoints(proxy(chart.addValue, chart));\n        },\n\n        traverseDataPoints: function(callback) {\n            var chart = this,\n                options = chart.options,\n                colors = chart.plotArea.options.seriesColors || [],\n                colorsCount = colors.length,\n                series = options.series,\n                seriesCount = series.length,\n                currentSeries, pointData, fields, seriesIx,\n                angle, data, anglePerValue, value, plotValue, explode,\n                total, currentAngle, i, pointIx = 0;\n\n            for (seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n                currentSeries = series[seriesIx];\n                data = currentSeries.data;\n                total = seriesTotal(currentSeries);\n                anglePerValue = 360 / total;\n\n                if (defined(currentSeries.startAngle)) {\n                    currentAngle = currentSeries.startAngle;\n                } else {\n                    currentAngle = options.startAngle;\n                }\n\n                if (seriesIx != seriesCount - 1) {\n                    if (currentSeries.labels.position == OUTSIDE_END) {\n                        currentSeries.labels.position = CENTER;\n                    }\n                }\n\n                for (i = 0; i < data.length; i++) {\n                    pointData = SeriesBinder.current.bindPoint(currentSeries, i);\n                    value = pointData.valueFields.value;\n                    plotValue = math.abs(value);\n                    fields = pointData.fields;\n                    angle = round(plotValue * anglePerValue, DEFAULT_PRECISION);\n                    explode = data.length != 1 && !!fields.explode;\n                    if (!isFn(currentSeries.color)) {\n                        currentSeries.color = fields.color || colors[i % colorsCount];\n                    }\n\n                    callback(value, new Ring(null, 0, 0, currentAngle, angle), {\n                        owner: chart,\n                        category: fields.category || \"\",\n                        index: pointIx,\n                        series: currentSeries,\n                        seriesIx: seriesIx,\n                        dataItem: data[i],\n                        percentage: plotValue / total,\n                        explode: explode,\n                        visibleInLegend: fields.visibleInLegend,\n                        visible: fields.visible,\n                        zIndex: seriesCount - seriesIx,\n                        animationDelay: chart.animationDelay(i, seriesIx, seriesCount)\n                    });\n\n                    if (pointData.fields.visible !== false) {\n                        currentAngle += angle;\n                    }\n                    pointIx++;\n                }\n                pointIx = 0;\n            }\n        },\n\n        evalSegmentOptions: function(options, value, fields) {\n            var series = fields.series;\n\n            evalOptions(options, {\n                value: value,\n                series: series,\n                dataItem: fields.dataItem,\n                category: fields.category,\n                percentage: fields.percentage\n            }, { defaults: series._defaults, excluded: [\"data\", \"template\"] });\n        },\n\n        addValue: function(value, sector, fields) {\n            var chart = this,\n                segment;\n\n            var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n            chart.evalSegmentOptions(segmentOptions, value, fields);\n\n            chart.createLegendItem(value, segmentOptions, fields);\n\n            if (fields.visible === false) {\n                return;\n            }\n\n            segment = new PieSegment(value, sector, segmentOptions);\n            extend(segment, fields);\n            chart.append(segment);\n            chart.points.push(segment);\n        },\n\n        reflow: function(targetBox) {\n            var chart = this,\n                options = chart.options,\n                box = targetBox.clone(),\n                space = 5,\n                minWidth = math.min(box.width(), box.height()),\n                halfMinWidth = minWidth / 2,\n                defaultPadding = minWidth - minWidth * 0.85,\n                padding = valueOrDefault(options.padding, defaultPadding),\n                newBox = Box2D(box.x1, box.y1,\n                    box.x1 + minWidth, box.y1 + minWidth),\n                newBoxCenter = newBox.center(),\n                seriesConfigs = chart.seriesConfigs || [],\n                boxCenter = box.center(),\n                points = chart.points,\n                count = points.length,\n                seriesCount = options.series.length,\n                leftSideLabels = [],\n                rightSideLabels = [],\n                seriesConfig, seriesIndex, label,\n                segment, sector, r, i, c;\n\n            padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n            newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n            r = halfMinWidth - padding;\n            c = Point2D(\n                r + newBox.x1 + padding,\n                r + newBox.y1 + padding\n            );\n\n            for (i = 0; i < count; i++) {\n                segment = points[i];\n\n                sector = segment.sector;\n                sector.r = r;\n                sector.c = c;\n                seriesIndex = segment.seriesIx;\n                if (seriesConfigs.length) {\n                    seriesConfig = seriesConfigs[seriesIndex];\n                    sector.ir = seriesConfig.ir;\n                    sector.r = seriesConfig.r;\n                }\n\n                if (seriesIndex == seriesCount - 1 && segment.explode) {\n                    sector.c = sector.clone().radius(sector.r * 0.15).point(sector.middle());\n                }\n\n                segment.reflow(newBox);\n\n                label = segment.label;\n                if (label) {\n                    if (label.options.position === OUTSIDE_END) {\n                        if (seriesIndex == seriesCount - 1) {\n                            if (label.orientation === RIGHT) {\n                                rightSideLabels.push(label);\n                            } else {\n                                leftSideLabels.push(label);\n                            }\n                        }\n                    }\n                }\n            }\n\n            if (leftSideLabels.length > 0) {\n                leftSideLabels.sort(chart.labelComparator(true));\n                chart.leftLabelsReflow(leftSideLabels);\n            }\n\n            if (rightSideLabels.length > 0) {\n                rightSideLabels.sort(chart.labelComparator(false));\n                chart.rightLabelsReflow(rightSideLabels);\n            }\n\n            chart.box = newBox;\n        },\n\n        leftLabelsReflow: function(labels) {\n            var chart = this,\n                distances = chart.distanceBetweenLabels(labels);\n\n            chart.distributeLabels(distances, labels);\n        },\n\n        rightLabelsReflow: function(labels) {\n            var chart = this,\n                distances = chart.distanceBetweenLabels(labels);\n\n            chart.distributeLabels(distances, labels);\n        },\n\n        distanceBetweenLabels: function(labels) {\n            var chart = this,\n                points = chart.points,\n                segment = points[points.length - 1],\n                sector = segment.sector,\n                firstBox = labels[0].box,\n                count = labels.length - 1,\n                lr = sector.r + segment.options.labels.distance,\n                distances = [],\n                secondBox, distance, i;\n\n            distance = round(firstBox.y1 - (sector.c.y - lr - firstBox.height() - firstBox.height() / 2));\n            distances.push(distance);\n            for (i = 0; i < count; i++) {\n                firstBox = labels[i].box;\n                secondBox = labels[i + 1].box;\n                distance = round(secondBox.y1 - firstBox.y2);\n                distances.push(distance);\n            }\n            distance = round(sector.c.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n            distances.push(distance);\n\n            return distances;\n        },\n\n        distributeLabels: function(distances, labels) {\n            var chart = this,\n                count = distances.length,\n                remaining, left, right, i;\n\n            for (i = 0; i < count; i++) {\n                left = right = i;\n                remaining = -distances[i];\n                while (remaining > 0 && (left >= 0 || right < count)) {\n                    remaining = chart._takeDistance(distances, i, --left, remaining);\n                    remaining = chart._takeDistance(distances, i, ++right, remaining);\n                }\n            }\n\n            chart.reflowLabels(distances, labels);\n        },\n\n        _takeDistance: function(distances, anchor, position, amount) {\n            if (distances[position] > 0) {\n                var available = math.min(distances[position], amount);\n                amount -= available;\n                distances[position] -= available;\n                distances[anchor] += available;\n            }\n\n            return amount;\n        },\n\n        reflowLabels: function(distances, labels) {\n            var chart = this,\n                points = chart.points,\n                segment = points[points.length - 1],\n                sector = segment.sector,\n                labelsCount = labels.length,\n                labelOptions = segment.options.labels,\n                labelDistance = labelOptions.distance,\n                boxY = sector.c.y - (sector.r + labelDistance) - labels[0].box.height(),\n                label, boxX, box, i;\n\n            distances[0] += 2;\n            for (i = 0; i < labelsCount; i++) {\n                label = labels[i];\n                boxY += distances[i];\n                box = label.box;\n                boxX = chart.hAlignLabel(\n                    box.x2,\n                    sector.clone().expand(labelDistance),\n                    boxY,\n                    boxY + box.height(),\n                    label.orientation == RIGHT);\n\n                if (label.orientation == RIGHT) {\n                    if (labelOptions.align !== CIRCLE) {\n                        boxX = sector.r + sector.c.x + labelDistance;\n                    }\n                    label.reflow(Box2D(boxX + box.width(), boxY,\n                        boxX, boxY));\n                } else {\n                    if (labelOptions.align !== CIRCLE) {\n                        boxX = sector.c.x - sector.r - labelDistance;\n                    }\n                    label.reflow(Box2D(boxX - box.width(), boxY,\n                        boxX, boxY));\n                }\n\n                boxY += box.height();\n            }\n        },\n\n        createVisual: function() {\n            var chart = this,\n                options = chart.options,\n                connectors = options.connectors,\n                points = chart.points,\n                connectorLine,\n                count = points.length,\n                space = 4,\n                sector, angle, segment,\n                seriesIx, label, i;\n\n            ChartElement.fn.createVisual.call(this);\n            this._connectorLines = [];\n            for (i = 0; i < count; i++) {\n                segment = points[i];\n                sector = segment.sector;\n                angle = sector.middle();\n                label = segment.label;\n                seriesIx = { seriesId: segment.seriesIx };\n\n                if (label) {\n                    connectorLine = new draw.Path({\n                        stroke: {\n                            color:  connectors.color,\n                            width: connectors.width\n                        },\n                        animation: {\n                            type: FADEIN,\n                            delay: segment.animationDelay\n                        }\n                    });\n                    if (label.options.position === OUTSIDE_END && segment.value !== 0) {\n                        var box = label.box,\n                            centerPoint = sector.c,\n                            start = sector.point(angle),\n                            middle = Point2D(box.x1, box.center().y),\n                            sr, end, crossing;\n\n                        start = sector.clone().expand(connectors.padding).point(angle);\n                        connectorLine.moveTo(start.x, start.y);\n                        // TODO: Extract into a method to remove duplication\n                        if (label.orientation == RIGHT) {\n                            end = Point2D(box.x1 - connectors.padding, box.center().y);\n                            crossing = intersection(centerPoint, start, middle, end);\n                            middle = Point2D(end.x - space, end.y);\n                            crossing = crossing || middle;\n                            crossing.x = math.min(crossing.x, middle.x);\n\n                            if (chart.pointInCircle(crossing, sector.c, sector.r + space) ||\n                                crossing.x < sector.c.x) {\n                                sr = sector.c.x + sector.r + space;\n                                if (segment.options.labels.align !== COLUMN) {\n                                    if (sr < middle.x) {\n                                        connectorLine.lineTo(sr, start.y);\n                                    } else {\n                                        connectorLine.lineTo(start.x + space * 2, start.y);\n                                    }\n                                } else {\n                                    connectorLine.lineTo(sr, start.y);\n                                }\n                                connectorLine.lineTo(middle.x, end.y);\n                            } else {\n                                crossing.y = end.y;\n                                connectorLine.lineTo(crossing.x, crossing.y);\n                            }\n                        } else {\n                            end = Point2D(box.x2 + connectors.padding, box.center().y);\n                            crossing = intersection(centerPoint, start, middle, end);\n                            middle = Point2D(end.x + space, end.y);\n                            crossing = crossing || middle;\n                            crossing.x = math.max(crossing.x, middle.x);\n\n                            if (chart.pointInCircle(crossing, sector.c, sector.r + space) ||\n                                crossing.x > sector.c.x) {\n                                sr = sector.c.x - sector.r - space;\n                                if (segment.options.labels.align !== COLUMN) {\n                                    if (sr > middle.x) {\n                                        connectorLine.lineTo(sr, start.y);\n                                    } else {\n                                        connectorLine.lineTo(start.x - space * 2, start.y);\n                                    }\n                                } else {\n                                    connectorLine.lineTo(sr, start.y);\n                                }\n                                connectorLine.lineTo(middle.x, end.y);\n                            } else {\n                                crossing.y = end.y;\n                                connectorLine.lineTo(crossing.x, crossing.y);\n                            }\n                        }\n\n                        connectorLine.lineTo(end.x, end.y);\n\n                        this._connectorLines.push(connectorLine);\n                        this.visual.append(connectorLine);\n                    }\n                }\n            }\n        },\n\n        labelComparator: function (reverse) {\n            reverse = (reverse) ? -1 : 1;\n\n            return function(a, b) {\n                a = (a.parent.sector.middle() + 270) % 360;\n                b = (b.parent.sector.middle() + 270) % 360;\n                return (a - b) * reverse;\n            };\n        },\n\n        hAlignLabel: function(originalX, sector, y1, y2, direction) {\n            var cx = sector.c.x,\n                cy = sector.c.y,\n                r = sector.r,\n                t = math.min(math.abs(cy - y1), math.abs(cy - y2));\n\n            if (t > r) {\n                return originalX;\n            } else {\n                return cx + math.sqrt((r * r) - (t * t)) * (direction ? 1 : -1);\n            }\n        },\n\n        pointInCircle: function(point, c, r) {\n            return sqr(c.x - point.x) + sqr(c.y - point.y) < sqr(r);\n        },\n\n        formatPointValue: function(point, format) {\n            return autoFormat(format, point.value);\n        },\n\n        animationDelay: function(categoryIndex) {\n            return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n        }\n    });\n\n    deepExtend(PieChart.fn, PieChartMixin);\n\n    var DonutSegment = PieSegment.extend({\n        options: {\n            overlay: {\n                gradient: ROUNDED_GLASS\n            },\n            labels: {\n                position: CENTER\n            },\n            animation: {\n                type: PIE\n            }\n        },\n\n        reflowLabel: function() {\n            var segment = this,\n                sector = segment.sector.clone(),\n                options = segment.options,\n                label = segment.label,\n                labelsOptions = options.labels,\n                lp,\n                angle = sector.middle(),\n                labelHeight;\n\n            if (label) {\n                labelHeight = label.box.height();\n                if (labelsOptions.position == CENTER) {\n                    sector.r -= (sector.r - sector.ir) / 2;\n                    lp = sector.point(angle);\n                    label.reflow(new Box2D(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n                } else {\n                    PieSegment.fn.reflowLabel.call(segment);\n                }\n            }\n        },\n\n        createSegment: function(sector, options) {\n            return ShapeBuilder.current.createRing(sector, options);\n        }\n    });\n    deepExtend(DonutSegment.fn, PointEventsMixin);\n\n    var DonutChart = PieChart.extend({\n        options: {\n            startAngle: 90,\n            connectors: {\n                width: 1,\n                color: \"#939393\",\n                padding: 4\n            }\n        },\n\n        addValue: function(value, sector, fields) {\n            var chart = this,\n                segment;\n\n            var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n            chart.evalSegmentOptions(segmentOptions, value, fields);\n\n            chart.createLegendItem(value, segmentOptions, fields);\n\n            if (!value || fields.visible === false) {\n                return;\n            }\n\n            segment = new DonutSegment(value, sector, segmentOptions);\n            extend(segment, fields);\n            chart.append(segment);\n            chart.points.push(segment);\n        },\n\n        reflow: function(targetBox) {\n            var chart = this,\n                options = chart.options,\n                box = targetBox.clone(),\n                space = 5,\n                minWidth = math.min(box.width(), box.height()),\n                halfMinWidth = minWidth / 2,\n                defaultPadding = minWidth - minWidth * 0.85,\n                padding = valueOrDefault(options.padding, defaultPadding),\n                series = options.series,\n                currentSeries,\n                seriesCount = series.length,\n                seriesWithoutSize = 0,\n                holeSize, totalSize, size,\n                margin = 0, i, r, ir = 0,\n                currentSize = 0;\n\n            chart.seriesConfigs = [];\n            padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n            totalSize = halfMinWidth - padding;\n\n            for (i = 0; i < seriesCount; i++) {\n                currentSeries = series[i];\n                if (i === 0) {\n                    if (defined(currentSeries.holeSize)) {\n                        holeSize = currentSeries.holeSize;\n                        totalSize -= currentSeries.holeSize;\n                    }\n                }\n\n                if (defined(currentSeries.size)) {\n                    totalSize -= currentSeries.size;\n                } else {\n                    seriesWithoutSize++;\n                }\n\n                if (defined(currentSeries.margin) && i != seriesCount - 1) {\n                    totalSize -= currentSeries.margin;\n                }\n            }\n\n            if (!defined(holeSize)) {\n                currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n                holeSize = currentSize * 0.75;\n                totalSize -= holeSize;\n            }\n\n            ir = holeSize;\n\n            for (i = 0; i < seriesCount; i++) {\n                currentSeries = series[i];\n                size = valueOrDefault(currentSeries.size, totalSize / seriesWithoutSize);\n                ir += margin;\n                r = ir + size;\n                chart.seriesConfigs.push({ ir: ir, r: r });\n                margin = currentSeries.margin || 0;\n                ir = r;\n            }\n\n            PieChart.fn.reflow.call(chart, targetBox);\n        },\n\n        animationDelay: function(categoryIndex, seriesIndex, seriesCount) {\n            return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n                (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n        }\n    });\n\n    var WaterfallChart = BarChart.extend({\n        render: function() {\n            BarChart.fn.render.call(this);\n            this.createSegments();\n        },\n\n        traverseDataPoints: function(callback) {\n            var series = this.options.series;\n            var categories = this.categoryAxis.options.categories || [];\n            var totalCategories = categoriesCount(series);\n            var isVertical = !this.options.invertAxes;\n\n            for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n                var currentSeries = series[seriesIx];\n                var total = 0;\n                var runningTotal = 0;\n\n                for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n                    var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n                    var value = data.valueFields.value;\n                    var summary = data.fields.summary;\n\n                    var from = total;\n                    var to;\n                    if (summary) {\n                        if (summary.toLowerCase() === \"total\") {\n                            data.valueFields.value = total;\n                            from = 0;\n                            to = total;\n                        } else {\n                            data.valueFields.value = runningTotal;\n                            to = from - runningTotal;\n                            runningTotal = 0;\n                        }\n                    } else if (isNumber(value)) {\n                        runningTotal += value;\n                        total += value;\n                        to = total;\n                    }\n\n                    callback(data, {\n                        category: categories[categoryIx],\n                        categoryIx: categoryIx,\n                        series: currentSeries,\n                        seriesIx: seriesIx,\n                        total: total,\n                        runningTotal: runningTotal,\n                        from: from,\n                        to: to,\n                        isVertical: isVertical\n                    });\n                }\n            }\n        },\n\n        updateRange: function(value, fields) {\n            BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n        },\n\n        aboveAxis: function(point) {\n            return point.value >= 0;\n        },\n\n        plotRange: function(point) {\n            return [point.from, point.to];\n        },\n\n        createSegments: function() {\n            var series = this.options.series;\n            var seriesPoints = this.seriesPoints;\n            var segments = this.segments = [];\n\n            for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n                var currentSeries = series[seriesIx];\n                var points = seriesPoints[seriesIx];\n\n                if (points) {\n                    var prevPoint;\n                    for (var pointIx = 0; pointIx < points.length; pointIx++) {\n                        var point = points[pointIx];\n\n                        if (point && prevPoint) {\n                            var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n                            segments.push(segment);\n                            this.append(segment);\n                        }\n\n                        prevPoint = point;\n                    }\n                }\n            }\n        }\n    });\n\n    var WaterfallSegment = ChartElement.extend({\n        init: function(from, to, series) {\n            var segment = this;\n\n            ChartElement.fn.init.call(segment);\n\n            segment.from = from;\n            segment.to = to;\n            segment.series = series;\n        },\n\n        options: {\n            animation: {\n                type: FADEIN,\n                delay: INITIAL_ANIMATION_DURATION\n            }\n        },\n\n        linePoints: function() {\n            var points = [];\n            var from = this.from;\n            var fromBox = from.box;\n            var toBox = this.to.box;\n\n            if (from.isVertical) {\n                var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n                points.push(\n                    [fromBox.x1, y],\n                    [toBox.x2, y]\n                );\n            } else {\n                var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n                points.push(\n                    [x, fromBox.y1],\n                    [x, toBox.y2]\n                );\n            }\n\n            return points;\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var options = this.options;\n            var line = this.series.line || {};\n\n            var path = draw.Path.fromPoints(this.linePoints(), {\n                stroke: {\n                    color: line.color,\n                    width: line.width,\n                    opacity: line.opacity,\n                    dashType: line.dashType\n                }\n            });\n\n            alignPathToPixel(path);\n            this.visual.append(path);\n        }\n    });\n\n    var Pane = BoxElement.extend({\n        init: function(options) {\n            var pane = this;\n\n            BoxElement.fn.init.call(pane, options);\n\n            options = pane.options;\n            pane.id = kendo.guid();\n\n            pane.createTitle();\n\n            pane.content = new ChartElement();\n\n            pane.chartContainer = new ChartContainer({}, pane);\n            pane.append(pane.content);\n\n            pane.axes = [];\n            pane.charts = [];\n        },\n\n        options: {\n            zIndex: -1,\n            shrinkToFit: true,\n            title: {\n                align: LEFT\n            },\n            visible: true\n        },\n\n        createTitle: function() {\n            var pane = this;\n            var titleOptions = pane.options.title;\n            if (typeof titleOptions === OBJECT) {\n                titleOptions = deepExtend({}, titleOptions, {\n                    align: titleOptions.position,\n                    position: TOP\n                });\n            }\n            pane.title = Title.buildTitle(titleOptions, pane, Pane.fn.options.title);\n        },\n\n        appendAxis: function(axis) {\n            var pane = this;\n\n            pane.content.append(axis);\n            pane.axes.push(axis);\n            axis.pane = pane;\n        },\n\n        appendChart: function(chart) {\n            var pane = this;\n            if (pane.chartContainer.parent !== pane.content) {\n                pane.content.append(pane.chartContainer);\n            }\n            pane.charts.push(chart);\n            pane.chartContainer.append(chart);\n            chart.pane = pane;\n        },\n\n        empty: function() {\n            var pane = this,\n                plotArea = pane.parent,\n                i;\n\n            if (plotArea) {\n                for (i = 0; i < pane.axes.length; i++) {\n                    plotArea.removeAxis(pane.axes[i]);\n                }\n\n                for (i = 0; i < pane.charts.length; i++) {\n                    plotArea.removeChart(pane.charts[i]);\n                }\n            }\n\n            pane.axes = [];\n            pane.charts = [];\n\n            pane.content.destroy();\n            pane.content.children = [];\n            pane.chartContainer.children = [];\n        },\n\n        reflow: function(targetBox) {\n            var pane = this;\n\n            // Content (such as charts) is rendered, but excluded from reflows\n            var content;\n            if (last(pane.children) === pane.content) {\n                content = pane.children.pop();\n            }\n\n            BoxElement.fn.reflow.call(pane, targetBox);\n\n            if (content) {\n                pane.children.push(content);\n            }\n\n            if (pane.title) {\n                pane.contentBox.y1 += pane.title.box.height();\n            }\n        },\n\n        renderComplete: function() {\n            if (this.options.visible) {\n                this.createGridLines();\n            }\n        },\n\n        stackRoot: returnSelf,\n\n        createGridLines: function() {\n            var pane = this,\n                axes = pane.axes,\n                allAxes = axes.concat(pane.parent.axes),\n                vGridLines = [],\n                hGridLines = [],\n                gridLines, i, j, axis,\n                vertical, altAxis;\n\n            // TODO\n            // Is full combination really necessary?\n            for (i = 0; i < axes.length; i++) {\n                axis = axes[i];\n                vertical = axis.options.vertical;\n                gridLines = vertical ? vGridLines : hGridLines;\n                for (j = 0; j < allAxes.length; j++) {\n                    if (gridLines.length === 0) {\n                        altAxis = allAxes[j];\n                        if (vertical !== altAxis.options.vertical) {\n                            append(gridLines, axis.createGridLines(altAxis));\n                        }\n                    }\n                }\n            }\n        },\n\n        refresh: function() {\n            this.visual.clear();\n\n            this.content.parent = null;\n            this.content.createGradient = $.proxy(this.createGradient, this);\n            this.content.renderVisual();\n            this.content.parent = this;\n\n            if (this.title) {\n                this.visual.append(this.title.visual);\n            }\n\n            this.visual.append(this.content.visual);\n\n            this.renderComplete();\n        },\n\n        clipBox: function() {\n            return this.chartContainer.clipBox;\n        }\n    });\n\n    var ChartContainer = ChartElement.extend({\n        init: function(options, pane) {\n            var container = this;\n            ChartElement.fn.init.call(container, options);\n            container.pane = pane;\n        },\n\n        shouldClip: function () {\n            var container = this,\n                children = container.children,\n                length = children.length,\n                i;\n\n            for (i = 0; i < length; i++) {\n                if (children[i].options.clip === true) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _clipBox: function() {\n            var container = this,\n                pane = container.pane,\n                axes = pane.axes,\n                length = axes.length,\n                clipBox = pane.box.clone(),\n                axisValueField, idx,\n                lineBox, axis;\n\n            for (idx = 0; idx < length; idx++) {\n                axis = axes[idx];\n                axisValueField = axis.options.vertical ? Y : X;\n                lineBox = axis.lineBox();\n                clipBox[axisValueField + 1] = lineBox[axisValueField + 1];\n                clipBox[axisValueField + 2] = lineBox[axisValueField + 2];\n            }\n\n            return clipBox;\n        },\n\n        createVisual: function() {\n            this.visual = new draw.Group({\n                zIndex: 0\n            });\n\n            if (this.shouldClip()) {\n                var clipBox = this.clipBox = this._clipBox();\n\n                var clipRect = clipBox.toRect();\n                var clipPath = draw.Path.fromRect(clipRect);\n                this.visual.clip(clipPath);\n\n                this.unclipLabels();\n            }\n        },\n\n        stackRoot: returnSelf,\n\n        unclipLabels: function() {\n            var container = this,\n                charts = container.children,\n                clipBox = container.clipBox,\n                points, point,\n                i, j, length;\n            for (i = 0; i < charts.length; i++) {\n                points = charts[i].points || {};\n                length = points.length;\n\n                for (j = 0; j < length; j++) {\n                    point = points[j];\n                    if (point && point.label && point.label.options.visible) {\n                        if (point.box.overlaps(clipBox)) {\n                            if (point.label.alignToClipBox) {\n                                point.label.alignToClipBox(clipBox);\n                            }\n                            point.label.options.noclip = true;\n                        }\n                    }\n                }\n            }\n        },\n\n        destroy: function() {\n            ChartElement.fn.destroy.call(this);\n            delete this.parent;\n        }\n    });\n\n    var PlotAreaBase = ChartElement.extend({\n        init: function(series, options) {\n            var plotArea = this;\n\n            ChartElement.fn.init.call(plotArea, options);\n\n            plotArea.series = series;\n            plotArea.initSeries();\n            plotArea.charts = [];\n            plotArea.options.legend.items = [];\n            plotArea.axes = [];\n            plotArea.crosshairs = [];\n\n            plotArea.createPanes();\n            plotArea.render();\n            plotArea.createCrosshairs();\n        },\n\n        options: {\n            series: [],\n            plotArea: {\n                margin: {}\n            },\n            background: \"\",\n            border: {\n                color: BLACK,\n                width: 0\n            },\n            legend: {\n                inactiveItems: {\n                    labels: {\n                        color: \"#919191\"\n                    },\n                    markers: {\n                        color: \"#919191\"\n                    }\n                }\n            }\n        },\n\n        initSeries: function() {\n            var series = this.series,\n                i, currentSeries;\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n                currentSeries.index = i;\n            }\n        },\n\n        createPanes: function() {\n            var plotArea = this,\n                panes = [],\n                paneOptions = plotArea.options.panes || [],\n                i,\n                panesLength = math.max(paneOptions.length, 1),\n                currentPane;\n\n            for (i = 0; i < panesLength; i++) {\n                currentPane = new Pane(paneOptions[i]);\n                currentPane.paneIndex = i;\n\n                panes.push(currentPane);\n                plotArea.append(currentPane);\n            }\n\n            plotArea.panes = panes;\n        },\n\n        createCrosshairs: function(panes) {\n            var plotArea = this,\n                i, j, pane, axis, currentCrosshair;\n\n            panes = panes || plotArea.panes;\n            for (i = 0; i < panes.length; i++) {\n                pane = panes[i];\n                for (j = 0; j < pane.axes.length; j++) {\n                    axis = pane.axes[j];\n                    if (axis.options.crosshair && axis.options.crosshair.visible) {\n                        currentCrosshair = new Crosshair(axis, axis.options.crosshair);\n\n                        plotArea.crosshairs.push(currentCrosshair);\n                        pane.content.append(currentCrosshair);\n                    }\n                }\n            }\n        },\n\n        removeCrosshairs: function(pane) {\n            var plotArea = this,\n               crosshairs = plotArea.crosshairs,\n               axes = pane.axes,\n               i, j;\n\n            for (i = crosshairs.length - 1; i >= 0; i--) {\n                for (j = 0; j < axes.length; j++) {\n                    if (crosshairs[i].axis === axes[j]) {\n                        crosshairs.splice(i, 1);\n                        break;\n                    }\n                }\n            }\n        },\n\n        findPane: function(name) {\n            var plotArea = this,\n                panes = plotArea.panes,\n                i, matchingPane;\n\n            for (i = 0; i < panes.length; i++) {\n                if (panes[i].options.name === name) {\n                    matchingPane = panes[i];\n                    break;\n                }\n            }\n\n            return matchingPane || panes[0];\n        },\n\n        findPointPane: function(point) {\n            var plotArea = this,\n                panes = plotArea.panes,\n                i, matchingPane;\n\n            for (i = 0; i < panes.length; i++) {\n                if (panes[i].box.containsPoint(point)) {\n                    matchingPane = panes[i];\n                    break;\n                }\n            }\n\n            return matchingPane;\n        },\n\n        appendAxis: function(axis) {\n            var plotArea = this,\n                pane = plotArea.findPane(axis.options.pane);\n\n            pane.appendAxis(axis);\n            plotArea.axes.push(axis);\n            axis.plotArea = plotArea;\n        },\n\n        removeAxis: function(axisToRemove) {\n            var plotArea = this,\n                i, axis,\n                filteredAxes = [];\n\n            for (i = 0; i < plotArea.axes.length; i++) {\n                axis = plotArea.axes[i];\n                if (axisToRemove !== axis) {\n                    filteredAxes.push(axis);\n                } else {\n                    axis.destroy();\n                }\n            }\n\n            plotArea.axes = filteredAxes;\n        },\n\n        appendChart: function(chart, pane) {\n            var plotArea = this;\n\n            plotArea.charts.push(chart);\n            if (pane) {\n                pane.appendChart(chart);\n            } else {\n                plotArea.append(chart);\n            }\n        },\n\n        removeChart: function(chartToRemove) {\n            var plotArea = this,\n                i, chart,\n                filteredCharts = [];\n\n            for (i = 0; i < plotArea.charts.length; i++) {\n                chart = plotArea.charts[i];\n                if (chart !== chartToRemove) {\n                    filteredCharts.push(chart);\n                } else {\n                    chart.destroy();\n                }\n            }\n\n            plotArea.charts = filteredCharts;\n        },\n\n        addToLegend: function(series) {\n            var count = series.length,\n                data = [],\n                i, currentSeries, text,\n                legend = this.options.legend,\n                labels = legend.labels || {},\n                inactiveItems = legend.inactiveItems || {},\n                inactiveItemsLabels = inactiveItems.labels || {},\n                color, itemLabelOptions, markerColor,\n                defaults, seriesVisible, labelTemplate;\n\n            for (i = 0; i < count; i++) {\n                currentSeries = series[i];\n                seriesVisible = currentSeries.visible !== false;\n                if (currentSeries.visibleInLegend === false) {\n                    continue;\n                }\n\n                text = currentSeries.name || \"\";\n                labelTemplate = seriesVisible ? labels.template :\n                    (inactiveItemsLabels.template || labels.template);\n                if (labelTemplate) {\n                    text = template(labelTemplate)({\n                        text: text,\n                        series: currentSeries\n                    });\n                }\n\n                color = currentSeries.color;\n                defaults = currentSeries._defaults;\n                if (isFn(color) && defaults) {\n                    color = defaults.color;\n                }\n\n                if (seriesVisible) {\n                    itemLabelOptions = {};\n                    markerColor = color;\n                } else {\n                    itemLabelOptions = {\n                        color: inactiveItemsLabels.color,\n                        font: inactiveItemsLabels.font\n                    };\n                    markerColor = inactiveItems.markers.color;\n                }\n\n                if (text) {\n                    data.push({\n                        text: text,\n                        labels: itemLabelOptions,\n                        markerColor: markerColor,\n                        series: currentSeries,\n                        active: seriesVisible\n                    });\n                }\n            }\n\n            append(legend.items, data);\n        },\n\n        groupAxes: function(panes) {\n            var xAxes = [],\n                yAxes = [],\n                paneAxes, axis, paneIx, axisIx;\n\n            for (paneIx = 0; paneIx < panes.length; paneIx++) {\n                paneAxes = panes[paneIx].axes;\n                for (axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n                    axis = paneAxes[axisIx];\n                    if (axis.options.vertical) {\n                        yAxes.push(axis);\n                    } else {\n                        xAxes.push(axis);\n                    }\n                }\n            }\n\n            return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\n        },\n\n        groupSeriesByPane: function() {\n            var plotArea = this,\n                series = plotArea.series,\n                seriesByPane = {},\n                i, pane, currentSeries;\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n                pane = plotArea.seriesPaneName(currentSeries);\n\n                if (seriesByPane[pane]) {\n                    seriesByPane[pane].push(currentSeries);\n                } else {\n                    seriesByPane[pane] = [currentSeries];\n                }\n            }\n\n            return seriesByPane;\n        },\n\n        filterVisibleSeries: function(series) {\n            var i, currentSeries,\n                result = [];\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n                if (currentSeries.visible !== false) {\n                    result.push(currentSeries);\n                }\n            }\n\n            return result;\n        },\n\n        reflow: function(targetBox) {\n            var plotArea = this,\n                options = plotArea.options.plotArea,\n                panes = plotArea.panes,\n                margin = getSpacing(options.margin);\n\n            plotArea.box = targetBox.clone().unpad(margin);\n            plotArea.reflowPanes();\n\n            plotArea.reflowAxes(panes);\n            plotArea.reflowCharts(panes);\n        },\n\n        redraw: function(panes) {\n            var plotArea = this,\n                i;\n\n            panes = [].concat(panes);\n            this.initSeries();\n\n            for (i = 0; i < panes.length; i++) {\n                plotArea.removeCrosshairs(panes[i]);\n                panes[i].empty();\n            }\n\n            plotArea.render(panes);\n            plotArea.reflowAxes(plotArea.panes);\n            plotArea.reflowCharts(panes);\n\n            plotArea.createCrosshairs(panes);\n\n            for (i = 0; i < panes.length; i++) {\n                panes[i].refresh();\n            }\n        },\n\n        axisCrossingValues: function(axis, crossingAxes) {\n            var options = axis.options,\n                crossingValues = [].concat(\n                    options.axisCrossingValues || options.axisCrossingValue\n                ),\n                valuesToAdd = crossingAxes.length - crossingValues.length,\n                defaultValue = crossingValues[0] || 0,\n                i;\n\n            for (i = 0; i < valuesToAdd; i++) {\n                crossingValues.push(defaultValue);\n            }\n\n            return crossingValues;\n        },\n\n        alignAxisTo: function(axis, targetAxis, crossingValue, targetCrossingValue) {\n            var slot = axis.getSlot(crossingValue, crossingValue, true),\n                slotEdge = axis.options.reverse ? 2 : 1,\n                targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true),\n                targetEdge = targetAxis.options.reverse ? 2 : 1,\n                axisBox = axis.box.translate(\n                    targetSlot[X + targetEdge] - slot[X + slotEdge],\n                    targetSlot[Y + targetEdge] - slot[Y + slotEdge]\n                );\n\n            if (axis.pane !== targetAxis.pane) {\n                axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n            }\n\n            axis.reflow(axisBox);\n        },\n\n        alignAxes: function(xAxes, yAxes) {\n            var plotArea = this,\n                xAnchor = xAxes[0],\n                yAnchor = yAxes[0],\n                xAnchorCrossings = plotArea.axisCrossingValues(xAnchor, yAxes),\n                yAnchorCrossings = plotArea.axisCrossingValues(yAnchor, xAxes),\n                leftAnchors = {},\n                rightAnchors = {},\n                topAnchors = {},\n                bottomAnchors = {},\n                pane, paneId, axis, i;\n\n            for (i = 0; i < yAxes.length; i++) {\n                axis = yAxes[i];\n                pane = axis.pane;\n                paneId = pane.id;\n                plotArea.alignAxisTo(axis, xAnchor, yAnchorCrossings[i], xAnchorCrossings[i]);\n\n                if (axis.options._overlap) {\n                    continue;\n                }\n\n                if (round(axis.lineBox().x1) === round(xAnchor.lineBox().x1)) {\n                    if (leftAnchors[paneId]) {\n                        axis.reflow(axis.box\n                            .alignTo(leftAnchors[paneId].box, LEFT)\n                            .translate(-axis.options.margin, 0)\n                        );\n                    }\n\n                    leftAnchors[paneId] = axis;\n                }\n\n                if (round(axis.lineBox().x2) === round(xAnchor.lineBox().x2)) {\n                    if (!axis._mirrored) {\n                        axis.options.labels.mirror = !axis.options.labels.mirror;\n                        axis._mirrored = true;\n                    }\n                    plotArea.alignAxisTo(axis, xAnchor, yAnchorCrossings[i], xAnchorCrossings[i]);\n\n                    if (rightAnchors[paneId]) {\n                        axis.reflow(axis.box\n                            .alignTo(rightAnchors[paneId].box, RIGHT)\n                            .translate(axis.options.margin, 0)\n                        );\n                    }\n\n                    rightAnchors[paneId] = axis;\n                }\n\n                if (i !== 0 && yAnchor.pane === axis.pane) {\n                    axis.alignTo(yAnchor);\n                }\n            }\n\n            for (i = 0; i < xAxes.length; i++) {\n                axis = xAxes[i];\n                pane = axis.pane;\n                paneId = pane.id;\n                plotArea.alignAxisTo(axis, yAnchor, xAnchorCrossings[i], yAnchorCrossings[i]);\n\n                if (axis.options._overlap) {\n                    continue;\n                }\n\n                if (round(axis.lineBox().y1) === round(yAnchor.lineBox().y1)) {\n                    if (!axis._mirrored) {\n                        axis.options.labels.mirror = !axis.options.labels.mirror;\n                        axis._mirrored = true;\n                    }\n                    plotArea.alignAxisTo(axis, yAnchor, xAnchorCrossings[i], yAnchorCrossings[i]);\n\n                    if (topAnchors[paneId]) {\n                        axis.reflow(axis.box\n                            .alignTo(topAnchors[paneId].box, TOP)\n                            .translate(0, -axis.options.margin)\n                        );\n                    }\n\n                    topAnchors[paneId] = axis;\n                }\n\n                if (round(axis.lineBox().y2, COORD_PRECISION) === round(yAnchor.lineBox().y2, COORD_PRECISION)) {\n                    if (bottomAnchors[paneId]) {\n                        axis.reflow(axis.box\n                            .alignTo(bottomAnchors[paneId].box, BOTTOM)\n                            .translate(0, axis.options.margin)\n                        );\n                    }\n\n                    bottomAnchors[paneId] = axis;\n                }\n\n                if (i !== 0) {\n                    axis.alignTo(xAnchor);\n                }\n            }\n        },\n\n        shrinkAxisWidth: function(panes) {\n            var plotArea = this,\n                axes = plotArea.groupAxes(panes).any,\n                axisBox = axisGroupBox(axes),\n                overflowX = 0,\n                i, currentPane, currentAxis;\n\n            for (i = 0; i < panes.length; i++) {\n                currentPane = panes[i];\n\n                if (currentPane.axes.length > 0) {\n                    overflowX = math.max(\n                        overflowX,\n                        axisBox.width() - currentPane.contentBox.width()\n                    );\n                }\n            }\n\n            for (i = 0; i < axes.length; i++) {\n                currentAxis = axes[i];\n\n                if (!currentAxis.options.vertical) {\n                    currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n                }\n            }\n        },\n\n        shrinkAxisHeight: function(panes) {\n            var i, currentPane, axes,\n                overflowY, j, currentAxis;\n\n            for (i = 0; i < panes.length; i++) {\n                currentPane = panes[i];\n                axes = currentPane.axes;\n                overflowY = math.max(\n                    0,\n                    axisGroupBox(axes).height() - currentPane.contentBox.height()\n                );\n\n                for (j = 0; j < axes.length; j++) {\n                    currentAxis = axes[j];\n\n                    if (currentAxis.options.vertical) {\n                        currentAxis.reflow(\n                            currentAxis.box.shrink(0, overflowY)\n                        );\n                    }\n                }\n            }\n        },\n\n        fitAxes: function(panes) {\n            var plotArea = this,\n                axes = plotArea.groupAxes(panes).any,\n                offsetX = 0,\n                paneAxes, paneBox, axisBox, offsetY,\n                currentPane, currentAxis, i, j;\n\n            for (i = 0; i < panes.length; i++) {\n                currentPane = panes[i];\n                paneAxes = currentPane.axes;\n                paneBox = currentPane.contentBox;\n\n                if (paneAxes.length > 0) {\n                    axisBox = axisGroupBox(paneAxes);\n\n                    // OffsetX is calculated and applied globally\n                    offsetX = math.max(offsetX, paneBox.x1 - axisBox.x1);\n\n                    // OffsetY is calculated and applied per pane\n                    offsetY = math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n\n                    for (j = 0; j < paneAxes.length; j++) {\n                        currentAxis = paneAxes[j];\n\n                        currentAxis.reflow(\n                            currentAxis.box.translate(0, offsetY)\n                        );\n                    }\n                }\n            }\n\n            for (i = 0; i < axes.length; i++) {\n                currentAxis = axes[i];\n\n                currentAxis.reflow(\n                    currentAxis.box.translate(offsetX, 0)\n                );\n            }\n        },\n\n        reflowAxes: function(panes) {\n            var plotArea = this,\n                i,\n                axes = plotArea.groupAxes(panes);\n\n            for (i = 0; i < panes.length; i++) {\n                plotArea.reflowPaneAxes(panes[i]);\n            }\n\n            if (axes.x.length > 0 && axes.y.length > 0) {\n                plotArea.alignAxes(axes.x, axes.y);\n                plotArea.shrinkAxisWidth(panes);\n                plotArea.alignAxes(axes.x, axes.y);\n                plotArea.shrinkAxisHeight(panes);\n                plotArea.alignAxes(axes.x, axes.y);\n                plotArea.fitAxes(panes);\n            }\n        },\n\n        reflowPaneAxes: function(pane) {\n            var axes = pane.axes,\n                i,\n                length = axes.length;\n\n            if (length > 0) {\n                for (i = 0; i < length; i++) {\n                    axes[i].reflow(pane.contentBox);\n                }\n            }\n        },\n\n        reflowCharts: function(panes) {\n            var plotArea = this,\n                charts = plotArea.charts,\n                count = charts.length,\n                box = plotArea.box,\n                chartPane, i;\n\n            for (i = 0; i < count; i++) {\n                chartPane = charts[i].pane;\n                if (!chartPane || inArray(chartPane, panes)) {\n                    charts[i].reflow(box);\n                }\n            }\n        },\n\n        reflowPanes: function() {\n            var plotArea = this,\n                box = plotArea.box,\n                panes = plotArea.panes,\n                panesLength = panes.length,\n                i, currentPane, paneBox,\n                remainingHeight = box.height(),\n                remainingPanes = panesLength,\n                autoHeightPanes = 0,\n                top = box.y1,\n                height, percents;\n\n            for (i = 0; i < panesLength; i++) {\n                currentPane = panes[i];\n                height = currentPane.options.height;\n\n                currentPane.options.width = box.width();\n\n                if (!currentPane.options.height) {\n                    autoHeightPanes++;\n                } else {\n                    if (height.indexOf && height.indexOf(\"%\")) {\n                        percents = parseInt(height, 10) / 100;\n                        currentPane.options.height = percents * box.height();\n                    }\n\n                    currentPane.reflow(box.clone());\n\n                    remainingHeight -= currentPane.options.height;\n                }\n            }\n\n            for (i = 0; i < panesLength; i++) {\n                currentPane = panes[i];\n\n                if (!currentPane.options.height) {\n                    currentPane.options.height = remainingHeight / autoHeightPanes;\n                }\n            }\n\n            for (i = 0; i < panesLength; i++) {\n                currentPane = panes[i];\n\n                paneBox = box\n                    .clone()\n                    .move(box.x1, top);\n\n                currentPane.reflow(paneBox);\n\n                remainingPanes--;\n                top += currentPane.options.height;\n            }\n        },\n\n        backgroundBox: function() {\n            var plotArea = this,\n                axes = plotArea.axes,\n                axesCount = axes.length,\n                lineBox, box, i, j, axisA, axisB;\n\n            for (i = 0; i < axesCount; i++) {\n                axisA = axes[i];\n\n                for (j = 0; j < axesCount; j++) {\n                    axisB = axes[j];\n\n                    if (axisA.options.vertical !== axisB.options.vertical) {\n                        lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n\n                        if (!box) {\n                            box = lineBox;\n                        } else {\n                            box = box.wrap(lineBox);\n                        }\n                    }\n                }\n            }\n\n            return box || plotArea.box;\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var bgBox = this.backgroundBox();\n            var options = this.options.plotArea;\n            var border = options.border || {};\n\n            var bg = this._bgVisual = draw.Path.fromRect(bgBox.toRect(), {\n                fill: {\n                    color: options.background,\n                    opacity: options.opacity\n                },\n                stroke: {\n                    color: border.width ? border.color : \"\",\n                    width: border.width,\n                    dashType: border.dashType\n                },\n                zIndex: -1\n            });\n\n            this.appendVisual(bg);\n        },\n\n        pointsByCategoryIndex: function(categoryIndex) {\n            var charts = this.charts,\n                result = [],\n                i, j, points, point, chart;\n\n            if (categoryIndex !== null) {\n                for (i = 0; i < charts.length; i++) {\n                    chart = charts[i];\n                    if (chart.pane.options.name === \"_navigator\") {\n                        continue;\n                    }\n\n                    points = charts[i].categoryPoints[categoryIndex];\n                    if (points && points.length) {\n                        for (j = 0; j < points.length; j++) {\n                            point = points[j];\n                            if (point && defined(point.value) && point.value !== null) {\n                                result.push(point);\n                            }\n                        }\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        pointsBySeriesIndex: function(seriesIndex) {\n            var charts = this.charts,\n                result = [],\n                points, point, i, j, chart;\n\n            for (i = 0; i < charts.length; i++) {\n                chart = charts[i];\n                points = chart.points;\n                for (j = 0; j < points.length; j++) {\n                    point = points[j];\n                    if (point && point.options.index === seriesIndex) {\n                        result.push(point);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        paneByPoint: function(point) {\n            var plotArea = this,\n                panes = plotArea.panes,\n                pane, i;\n\n            for (i = 0; i < panes.length; i++) {\n                pane = panes[i];\n                if (pane.box.containsPoint(point)) {\n                    return pane;\n                }\n            }\n        }\n    });\n\n    var CategoricalPlotArea = PlotAreaBase.extend({\n        init: function(series, options) {\n            var plotArea = this;\n\n            plotArea.namedCategoryAxes = {};\n            plotArea.namedValueAxes = {};\n            plotArea.valueAxisRangeTracker = new AxisGroupRangeTracker();\n\n            if (series.length > 0) {\n                plotArea.invertAxes = inArray(\n                    series[0].type, [BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, RANGE_BAR, HORIZONTAL_WATERFALL]\n                );\n\n                for (var i = 0; i < series.length; i++) {\n                    var stack = series[i].stack;\n                    if (stack && stack.type === \"100%\") {\n                        plotArea.stack100 = true;\n                        break;\n                    }\n                }\n            }\n\n            PlotAreaBase.fn.init.call(plotArea, series, options);\n        },\n\n        options: {\n            categoryAxis: {\n                categories: []\n            },\n            valueAxis: {}\n        },\n\n        render: function(panes) {\n            var plotArea = this;\n\n            panes = panes || plotArea.panes;\n\n            plotArea.createCategoryAxes(panes);\n            plotArea.aggregateCategories(panes);\n            plotArea.createCharts(panes);\n            plotArea.createValueAxes(panes);\n        },\n\n        removeAxis: function(axis) {\n            var plotArea = this,\n                axisName = axis.options.name;\n\n            PlotAreaBase.fn.removeAxis.call(plotArea, axis);\n\n            if (axis instanceof CategoryAxis) {\n                delete plotArea.namedCategoryAxes[axisName];\n            } else {\n                plotArea.valueAxisRangeTracker.reset(axisName);\n                delete plotArea.namedValueAxes[axisName];\n            }\n\n            if (axis === plotArea.categoryAxis) {\n                delete plotArea.categoryAxis;\n            }\n\n            if (axis === plotArea.valueAxis) {\n                delete plotArea.valueAxis;\n            }\n        },\n\n        createCharts: function(panes) {\n            var plotArea = this,\n                seriesByPane = plotArea.groupSeriesByPane(),\n                i, pane, paneSeries, filteredSeries;\n\n            for (i = 0; i < panes.length; i++) {\n                pane = panes[i];\n                paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n                plotArea.addToLegend(paneSeries);\n                filteredSeries = plotArea.filterVisibleSeries(paneSeries);\n\n                if (!filteredSeries) {\n                    continue;\n                }\n\n                plotArea.createAreaChart(\n                    filterSeriesByType(filteredSeries, [AREA, VERTICAL_AREA]),\n                    pane\n                );\n\n                plotArea.createBarChart(\n                    filterSeriesByType(filteredSeries, [COLUMN, BAR]),\n                    pane\n                );\n\n                plotArea.createRangeBarChart(\n                    filterSeriesByType(filteredSeries, [RANGE_COLUMN, RANGE_BAR]),\n                    pane\n                );\n\n                plotArea.createBulletChart(\n                    filterSeriesByType(filteredSeries, [BULLET, VERTICAL_BULLET]),\n                    pane\n                );\n\n                plotArea.createCandlestickChart(\n                    filterSeriesByType(filteredSeries, CANDLESTICK),\n                    pane\n                );\n\n                plotArea.createBoxPlotChart(\n                    filterSeriesByType(filteredSeries, BOX_PLOT),\n                    pane\n                );\n\n                plotArea.createOHLCChart(\n                    filterSeriesByType(filteredSeries, OHLC),\n                    pane\n                );\n\n                plotArea.createWaterfallChart(\n                    filterSeriesByType(filteredSeries, [WATERFALL, HORIZONTAL_WATERFALL]),\n                    pane\n                );\n\n                plotArea.createLineChart(\n                    filterSeriesByType(filteredSeries, [LINE, VERTICAL_LINE]),\n                    pane\n                );\n            }\n        },\n\n        aggregateCategories: function(panes) {\n            var plotArea = this,\n                series = plotArea.srcSeries || plotArea.series,\n                processedSeries = [],\n                i, currentSeries,\n                categoryAxis, axisPane, dateAxis;\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n                categoryAxis = plotArea.seriesCategoryAxis(currentSeries);\n                axisPane = plotArea.findPane(categoryAxis.options.pane);\n                dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n                if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n                    currentSeries = plotArea.aggregateSeries(currentSeries, categoryAxis);\n                }\n\n                processedSeries.push(currentSeries);\n\n            }\n\n            plotArea.srcSeries = series;\n            plotArea.series = processedSeries;\n        },\n\n        aggregateSeries: function(series, categoryAxis) {\n            var axisOptions = categoryAxis.options,\n                dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE),\n                categories = axisOptions.categories,\n                srcCategories = axisOptions.srcCategories || categories,\n                srcData = series.data,\n                srcPoints = [],\n                range = categoryAxis.range(),\n                result = deepExtend({}, series),\n                aggregatorSeries = deepExtend({}, series),\n                i, category, categoryIx,\n                data,\n                aggregator,\n                getFn = getField;\n\n            result.data = data = [];\n\n            if (dateAxis) {\n                getFn = getDateField;\n            }\n\n            for (i = 0; i < srcData.length; i++) {\n                if (series.categoryField) {\n                    category = getFn(series.categoryField, srcData[i]);\n                } else {\n                    category = srcCategories[i];\n                }\n\n                categoryIx = categoryAxis.categoryIndex(category, range);\n                if (categoryIx > -1) {\n                    srcPoints[categoryIx] = srcPoints[categoryIx] || [];\n                    srcPoints[categoryIx].push(i);\n                }\n            }\n\n            aggregator = new SeriesAggregator(\n                aggregatorSeries, SeriesBinder.current, DefaultAggregates.current\n            );\n\n            for (i = 0; i < categories.length; i++) {\n                data[i] = aggregator.aggregatePoints(\n                    srcPoints[i], categories[i]\n                );\n            }\n\n            return result;\n        },\n\n        appendChart: function(chart, pane) {\n            var plotArea = this,\n                series = chart.options.series,\n                categoryAxis = plotArea.seriesCategoryAxis(series[0]),\n                categories = categoryAxis.options.categories,\n                categoriesToAdd = math.max(0, categoriesCount(series) - categories.length);\n\n            while (categoriesToAdd--) {\n                categories.push(\"\");\n            }\n\n            plotArea.valueAxisRangeTracker.update(chart.valueAxisRanges);\n\n            PlotAreaBase.fn.appendChart.call(plotArea, chart, pane);\n        },\n\n        // TODO: Refactor, optionally use series.pane option\n        seriesPaneName: function(series) {\n            var plotArea = this,\n                options = plotArea.options,\n                axisName = series.axis,\n                axisOptions = [].concat(options.valueAxis),\n                axis = $.grep(axisOptions, function(a) { return a.name === axisName; })[0],\n                panes = options.panes || [{}],\n                defaultPaneName = (panes[0] || {}).name || \"default\",\n                paneName = (axis || {}).pane || defaultPaneName;\n\n            return paneName;\n        },\n\n        seriesCategoryAxis: function(series) {\n            var plotArea = this,\n                axisName = series.categoryAxis,\n                axis = axisName ?\n                    plotArea.namedCategoryAxes[axisName] :\n                    plotArea.categoryAxis;\n\n            if (!axis) {\n                throw new Error(\"Unable to locate category axis with name \" + axisName);\n            }\n\n            return axis;\n        },\n\n        stackableChartOptions: function(firstSeries, pane) {\n            var stack = firstSeries.stack,\n                isStacked100 = stack && stack.type === \"100%\",\n                clip;\n            if (defined(pane.options.clip)) {\n                clip = pane.options.clip;\n            } else if (isStacked100){\n                clip = false;\n            }\n            return {\n                isStacked: stack,\n                isStacked100: isStacked100,\n                clip: clip\n            };\n        },\n\n        createBarChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                barChart = new BarChart(plotArea, extend({\n                    series: series,\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    spacing: firstSeries.spacing\n                }, plotArea.stackableChartOptions(firstSeries, pane)));\n\n            plotArea.appendChart(barChart, pane);\n        },\n\n        createRangeBarChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                rangeColumnChart = new RangeBarChart(plotArea, {\n                    series: series,\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    spacing: firstSeries.spacing\n                });\n\n            plotArea.appendChart(rangeColumnChart, pane);\n        },\n\n        createBulletChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                bulletChart = new BulletChart(plotArea, {\n                    series: series,\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    spacing: firstSeries.spacing,\n                    clip: pane.options.clip\n                });\n\n            plotArea.appendChart(bulletChart, pane);\n        },\n\n        createLineChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                lineChart = new LineChart(plotArea, extend({\n                    invertAxes: plotArea.invertAxes,\n                    series: series\n                }, plotArea.stackableChartOptions(firstSeries, pane)));\n\n            plotArea.appendChart(lineChart, pane);\n        },\n\n        createAreaChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                areaChart = new AreaChart(plotArea, extend({\n                    invertAxes: plotArea.invertAxes,\n                    series: series\n                }, plotArea.stackableChartOptions(firstSeries, pane)));\n\n            plotArea.appendChart(areaChart, pane);\n        },\n\n        createOHLCChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                chart = new OHLCChart(plotArea, {\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    series: series,\n                    spacing: firstSeries.spacing,\n                    clip: pane.options.clip\n                });\n\n            plotArea.appendChart(chart, pane);\n        },\n\n        createCandlestickChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                chart = new CandlestickChart(plotArea, {\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    series: series,\n                    spacing: firstSeries.spacing,\n                    clip: pane.options.clip\n                });\n\n            plotArea.appendChart(chart, pane);\n        },\n\n        createBoxPlotChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                chart = new BoxPlotChart(plotArea, {\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    series: series,\n                    spacing: firstSeries.spacing,\n                    clip: pane.options.clip\n                });\n\n            plotArea.appendChart(chart, pane);\n        },\n\n        createWaterfallChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                firstSeries = series[0],\n                waterfallChart = new WaterfallChart(plotArea, {\n                    series: series,\n                    invertAxes: plotArea.invertAxes,\n                    gap: firstSeries.gap,\n                    spacing: firstSeries.spacing\n                });\n\n            plotArea.appendChart(waterfallChart, pane);\n        },\n\n        axisRequiresRounding: function(categoryAxisName, categoryAxisIndex) {\n            var plotArea = this,\n                centeredSeries = filterSeriesByType(plotArea.series, EQUALLY_SPACED_SERIES),\n                seriesIx,\n                seriesAxis;\n\n            for (seriesIx = 0; seriesIx < centeredSeries.length; seriesIx++) {\n                seriesAxis = centeredSeries[seriesIx].categoryAxis || \"\";\n                if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\n                    return true;\n                }\n            }\n        },\n\n        createCategoryAxes: function(panes) {\n            var plotArea = this,\n                invertAxes = plotArea.invertAxes,\n                definitions = [].concat(plotArea.options.categoryAxis),\n                i, axisOptions, axisPane,\n                categories, type, name,\n                categoryAxis, axes = [],\n                primaryAxis;\n\n            for (i = 0; i < definitions.length; i++) {\n                axisOptions = definitions[i];\n                axisPane = plotArea.findPane(axisOptions.pane);\n\n                if (inArray(axisPane, panes)) {\n                    name = axisOptions.name;\n                    categories = axisOptions.categories || [];\n                    type  = axisOptions.type || \"\";\n                    axisOptions = deepExtend({\n                        vertical: invertAxes,\n                        axisCrossingValue: invertAxes ? MAX_VALUE : 0\n                    }, axisOptions);\n\n                    if (!defined(axisOptions.justified)) {\n                        axisOptions.justified = plotArea.isJustified();\n                    }\n\n                    if (plotArea.axisRequiresRounding(name, i)) {\n                        axisOptions.justified = false;\n                        axisOptions.roundToBaseUnit = true;\n                    }\n\n                    if (isDateAxis(axisOptions, categories[0])) {\n                        categoryAxis = new DateCategoryAxis(axisOptions);\n                    } else {\n                        categoryAxis = new CategoryAxis(axisOptions);\n                    }\n\n                    if (name) {\n                        if (plotArea.namedCategoryAxes[name]) {\n                            throw new Error(\n                                \"Category axis with name \" + name + \" is already defined\"\n                            );\n                        }\n                        plotArea.namedCategoryAxes[name] = categoryAxis;\n                    }\n\n                    categoryAxis.axisIndex = i;\n                    axes.push(categoryAxis);\n                    plotArea.appendAxis(categoryAxis);\n                }\n            }\n\n            primaryAxis = plotArea.categoryAxis || axes[0];\n            plotArea.categoryAxis = primaryAxis;\n\n            if (invertAxes) {\n                plotArea.axisY = primaryAxis;\n            } else {\n                plotArea.axisX = primaryAxis;\n            }\n        },\n\n        isJustified: function() {\n            var plotArea = this,\n                series = plotArea.series,\n                i, currentSeries;\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n                if (!inArray(currentSeries.type, [AREA, VERTICAL_AREA])) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        createValueAxes: function(panes) {\n            var plotArea = this,\n                tracker = plotArea.valueAxisRangeTracker,\n                defaultRange = tracker.query(),\n                definitions = [].concat(plotArea.options.valueAxis),\n                invertAxes = plotArea.invertAxes,\n                baseOptions = { vertical: !invertAxes },\n                axisOptions, axisPane, valueAxis,\n                primaryAxis, axes = [], range,\n                axisType, defaultAxisRange,\n                name, i;\n\n            if (plotArea.stack100) {\n                baseOptions.roundToMajorUnit = false;\n                baseOptions.labels = { format: \"P0\" };\n            }\n\n            for (i = 0; i < definitions.length; i++) {\n                axisOptions = definitions[i];\n                axisPane = plotArea.findPane(axisOptions.pane);\n\n                if (inArray(axisPane, panes)) {\n                    name = axisOptions.name;\n                    defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {min: 0.1, max: 1} : { min: 0, max: 1 };\n                    range = tracker.query(name) || defaultRange || defaultAxisRange;\n\n                    if (i === 0 && range && defaultRange) {\n                        range.min = math.min(range.min, defaultRange.min);\n                        range.max = math.max(range.max, defaultRange.max);\n                    }\n\n                    if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n                        axisType = LogarithmicAxis;\n                    } else {\n                        axisType = NumericAxis;\n                    }\n\n                    valueAxis = new axisType(range.min, range.max,\n                        deepExtend({}, baseOptions, axisOptions)\n                    );\n\n                    if (name) {\n                        if (plotArea.namedValueAxes[name]) {\n                            throw new Error(\n                                \"Value axis with name \" + name + \" is already defined\"\n                            );\n                        }\n                        plotArea.namedValueAxes[name] = valueAxis;\n                    }\n                    valueAxis.axisIndex = i;\n\n                    axes.push(valueAxis);\n                    plotArea.appendAxis(valueAxis);\n                }\n            }\n\n            primaryAxis = plotArea.valueAxis || axes[0];\n            plotArea.valueAxis = primaryAxis;\n\n            if (invertAxes) {\n                plotArea.axisX = primaryAxis;\n            } else {\n                plotArea.axisY = primaryAxis;\n            }\n        },\n\n        click: function(chart, e) {\n            var plotArea = this,\n                coords = chart._eventCoordinates(e),\n                point = new Point2D(coords.x, coords.y),\n                pane = plotArea.pointPane(point),\n                allAxes,\n                i,\n                axis,\n                categories = [],\n                values = [];\n\n            if (!pane) {\n                return;\n            }\n\n            allAxes = pane.axes;\n            for (i = 0; i < allAxes.length; i++) {\n                axis = allAxes[i];\n                if (axis.getValue) {\n                    appendIfNotNull(values, axis.getValue(point));\n                } else {\n                    appendIfNotNull(categories, axis.getCategory(point));\n                }\n            }\n\n            if (categories.length === 0) {\n                appendIfNotNull(\n                    categories, plotArea.categoryAxis.getCategory(point)\n                );\n            }\n\n            if (categories.length > 0 && values.length > 0) {\n                chart.trigger(PLOT_AREA_CLICK, {\n                    element: $(e.target),\n                    originalEvent: e,\n                    category: singleItemOrArray(categories),\n                    value: singleItemOrArray(values)\n                });\n            }\n        },\n\n        pointPane: function(point) {\n            var plotArea = this,\n                panes = plotArea.panes,\n                currentPane,\n                i;\n\n            for (i = 0; i < panes.length; i++) {\n                currentPane = panes[i];\n                if (currentPane.contentBox.containsPoint(point)) {\n                    return currentPane;\n                }\n            }\n        }\n    });\n\n    var AxisGroupRangeTracker = Class.extend({\n        init: function() {\n            var tracker = this;\n\n            tracker.axisRanges = {};\n        },\n\n        update: function(chartAxisRanges) {\n            var tracker = this,\n                axisRanges = tracker.axisRanges,\n                range,\n                chartRange,\n                axisName;\n\n            for (axisName in chartAxisRanges) {\n                range = axisRanges[axisName];\n                chartRange = chartAxisRanges[axisName];\n                axisRanges[axisName] = range =\n                    range || { min: MAX_VALUE, max: MIN_VALUE };\n\n                range.min = math.min(range.min, chartRange.min);\n                range.max = math.max(range.max, chartRange.max);\n            }\n        },\n\n        reset: function(axisName) {\n            this.axisRanges[axisName] = undefined;\n        },\n\n        query: function(axisName) {\n            return this.axisRanges[axisName];\n        }\n    });\n\n    var XYPlotArea = PlotAreaBase.extend({\n        init: function(series, options) {\n            var plotArea = this;\n\n            plotArea.namedXAxes = {};\n            plotArea.namedYAxes = {};\n\n            plotArea.xAxisRangeTracker = new AxisGroupRangeTracker();\n            plotArea.yAxisRangeTracker = new AxisGroupRangeTracker();\n\n            PlotAreaBase.fn.init.call(plotArea, series, options);\n        },\n\n        options: {\n            xAxis: {},\n            yAxis: {}\n        },\n\n        render: function(panes) {\n            var plotArea = this,\n                seriesByPane = plotArea.groupSeriesByPane(),\n                i, pane, paneSeries, filteredSeries;\n\n            panes = panes || plotArea.panes;\n\n            for (i = 0; i < panes.length; i++) {\n                pane = panes[i];\n                paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n                plotArea.addToLegend(paneSeries);\n                filteredSeries = plotArea.filterVisibleSeries(paneSeries);\n\n                if (!filteredSeries) {\n                    continue;\n                }\n\n                plotArea.createScatterChart(\n                    filterSeriesByType(filteredSeries, SCATTER),\n                    pane\n                );\n\n                plotArea.createScatterLineChart(\n                    filterSeriesByType(filteredSeries, SCATTER_LINE),\n                    pane\n                );\n\n                plotArea.createBubbleChart(\n                    filterSeriesByType(filteredSeries, BUBBLE),\n                    pane\n                );\n            }\n\n            plotArea.createAxes(panes);\n        },\n\n        appendChart: function(chart, pane) {\n            var plotArea = this;\n\n            plotArea.xAxisRangeTracker.update(chart.xAxisRanges);\n            plotArea.yAxisRangeTracker.update(chart.yAxisRanges);\n\n            PlotAreaBase.fn.appendChart.call(plotArea, chart, pane);\n        },\n\n        removeAxis: function(axis) {\n            var plotArea = this,\n                axisName = axis.options.name;\n\n            PlotAreaBase.fn.removeAxis.call(plotArea, axis);\n\n            if (axis.options.vertical) {\n                plotArea.yAxisRangeTracker.reset(axisName);\n                delete plotArea.namedYAxes[axisName];\n            } else {\n                plotArea.xAxisRangeTracker.reset(axisName);\n                delete plotArea.namedXAxes[axisName];\n            }\n\n            if (axis === plotArea.axisX) {\n                delete plotArea.axisX;\n            }\n\n            if (axis === plotArea.axisY) {\n                delete plotArea.axisY;\n            }\n        },\n\n        // TODO: Refactor, optionally use series.pane option\n        seriesPaneName: function(series) {\n            var plotArea = this,\n                options = plotArea.options,\n                xAxisName = series.xAxis,\n                xAxisOptions = [].concat(options.xAxis),\n                xAxis = $.grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0],\n                yAxisName = series.yAxis,\n                yAxisOptions = [].concat(options.yAxis),\n                yAxis = $.grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0],\n                panes = options.panes || [{}],\n                defaultPaneName = panes[0].name || \"default\",\n                paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n            return paneName;\n        },\n\n        createScatterChart: function(series, pane) {\n            var plotArea = this;\n\n            if (series.length > 0) {\n                plotArea.appendChart(\n                    new ScatterChart(plotArea, { series: series, clip: pane.options.clip }),\n                    pane\n                );\n            }\n        },\n\n        createScatterLineChart: function(series, pane) {\n            var plotArea = this;\n\n            if (series.length > 0) {\n                plotArea.appendChart(\n                    new ScatterLineChart(plotArea, { series: series, clip: pane.options.clip }),\n                    pane\n                );\n            }\n        },\n\n        createBubbleChart: function(series, pane) {\n            var plotArea = this;\n\n            if (series.length > 0) {\n                plotArea.appendChart(\n                    new BubbleChart(plotArea, { series: series, clip: pane.options.clip }),\n                    pane\n                );\n            }\n        },\n\n        createXYAxis: function(options, vertical, axisIndex) {\n            var plotArea = this,\n                axisName = options.name,\n                namedAxes = vertical ? plotArea.namedYAxes : plotArea.namedXAxes,\n                tracker = vertical ? plotArea.yAxisRangeTracker : plotArea.xAxisRangeTracker,\n                axisOptions = deepExtend({}, options, { vertical: vertical }),\n                isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC),\n                defaultRange = tracker.query(),\n                defaultAxisRange = isLog ? {min: 0.1, max: 1} : { min: 0, max: 1 },\n                range = tracker.query(axisName) || defaultRange || defaultAxisRange,\n                axis,\n                axisType,\n                seriesIx,\n                series = plotArea.series,\n                currentSeries,\n                seriesAxisName,\n                firstPointValue,\n                typeSamples = [axisOptions.min, axisOptions.max],\n                inferredDate,\n                i;\n\n            for (seriesIx = 0; seriesIx < series.length; seriesIx++) {\n                currentSeries = series[seriesIx];\n                seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n                if ((seriesAxisName == axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n                    firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n                    typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n                    break;\n                }\n            }\n\n            if (axisIndex === 0 && defaultRange) {\n                range.min = math.min(range.min, defaultRange.min);\n                range.max = math.max(range.max, defaultRange.max);\n            }\n\n            for (i = 0; i < typeSamples.length; i++) {\n                if (typeSamples[i] instanceof Date) {\n                    inferredDate = true;\n                    break;\n                }\n            }\n\n            if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n                axisType = DateValueAxis;\n            } else if (isLog){\n                axisType = LogarithmicAxis;\n            } else {\n                axisType = NumericAxis;\n            }\n\n            axis = new axisType(range.min, range.max, axisOptions);\n\n            if (axisName) {\n                if (namedAxes[axisName]) {\n                    throw new Error(\n                        (vertical ? \"Y\" : \"X\") +\n                        \" axis with name \" + axisName + \" is already defined\"\n                    );\n                }\n                namedAxes[axisName] = axis;\n            }\n\n            plotArea.appendAxis(axis);\n\n            return axis;\n        },\n\n        createAxes: function(panes) {\n            var plotArea = this,\n                options = plotArea.options,\n                axisPane,\n                xAxesOptions = [].concat(options.xAxis),\n                xAxes = [],\n                yAxesOptions = [].concat(options.yAxis),\n                yAxes = [];\n\n            each(xAxesOptions, function(i) {\n                axisPane = plotArea.findPane(this.pane);\n                if (inArray(axisPane, panes)) {\n                    xAxes.push(plotArea.createXYAxis(this, false, i));\n                }\n            });\n\n            each(yAxesOptions, function(i) {\n                axisPane = plotArea.findPane(this.pane);\n                if (inArray(axisPane, panes)) {\n                    yAxes.push(plotArea.createXYAxis(this, true, i));\n                }\n            });\n\n            plotArea.axisX = plotArea.axisX || xAxes[0];\n            plotArea.axisY = plotArea.axisY || yAxes[0];\n        },\n\n        click: function(chart, e) {\n            var plotArea = this,\n                coords = chart._eventCoordinates(e),\n                point = new Point2D(coords.x, coords.y),\n                allAxes = plotArea.axes,\n                i,\n                length = allAxes.length,\n                axis,\n                xValues = [],\n                yValues = [],\n                currentValue,\n                values;\n\n            for (i = 0; i < length; i++) {\n                axis = allAxes[i];\n                values = axis.options.vertical ? yValues : xValues;\n                currentValue = axis.getValue(point);\n                if (currentValue !== null) {\n                    values.push(currentValue);\n                }\n            }\n\n            if (xValues.length > 0 && yValues.length > 0) {\n                chart.trigger(PLOT_AREA_CLICK, {\n                    element: $(e.target),\n                    originalEvent: e,\n                    x: singleItemOrArray(xValues),\n                    y: singleItemOrArray(yValues)\n                });\n            }\n        }\n    });\n\n    var PiePlotArea = PlotAreaBase.extend({\n        render: function() {\n            var plotArea = this,\n                series = plotArea.series;\n\n            plotArea.createPieChart(series);\n        },\n\n        createPieChart: function(series) {\n            var plotArea = this,\n                firstSeries = series[0],\n                pieChart = new PieChart(plotArea, {\n                    series: series,\n                    padding: firstSeries.padding,\n                    startAngle: firstSeries.startAngle,\n                    connectors: firstSeries.connectors,\n                    legend: plotArea.options.legend\n                });\n\n            plotArea.appendChart(pieChart);\n        },\n\n        appendChart: function(chart, pane) {\n            PlotAreaBase.fn.appendChart.call(this, chart, pane);\n            append(this.options.legend.items, chart.legendItems);\n        }\n    });\n\n    var DonutPlotArea = PiePlotArea.extend({\n        render: function() {\n            var plotArea = this,\n                series = plotArea.series;\n\n            plotArea.createDonutChart(series);\n        },\n\n        createDonutChart: function(series) {\n            var plotArea = this,\n                firstSeries = series[0],\n                donutChart = new DonutChart(plotArea, {\n                    series: series,\n                    padding: firstSeries.padding,\n                    connectors: firstSeries.connectors,\n                    legend: plotArea.options.legend\n                });\n\n            plotArea.appendChart(donutChart);\n        }\n    });\n\n    var PieAnimation = draw.Animation.extend({\n        options: {\n            easing: \"easeOutElastic\",\n            duration: INITIAL_ANIMATION_DURATION\n        },\n\n        setup: function() {\n            this.element.transform(geom.transform()\n                .scale(START_SCALE, START_SCALE, this.options.center)\n            );\n        },\n\n        step: function(pos) {\n            this.element.transform(geom.transform()\n                .scale(pos, pos, this.options.center)\n            );\n        }\n    });\n    draw.AnimationFactory.current.register(PIE, PieAnimation);\n\n    var BubbleAnimation = draw.Animation.extend({\n        options: {\n            easing: \"easeOutElastic\"\n        },\n\n        setup: function() {\n            var center = this.center = this.element.bbox().center();\n            this.element.transform(geom.transform()\n                .scale(START_SCALE, START_SCALE, center)\n            );\n        },\n\n        step: function(pos) {\n            this.element.transform(geom.transform()\n                .scale(pos, pos, this.center)\n            );\n        }\n    });\n    draw.AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n\n    var Highlight = Class.extend({\n        init: function() {\n            this._points = [];\n        },\n\n        destroy: function() {\n            this._points = [];\n        },\n\n        show: function(points) {\n            points = [].concat(points);\n            this.hide();\n\n            for (var i = 0; i < points.length; i++) {\n                var point = points[i];\n                if (point && point.toggleHighlight) {\n                    point.toggleHighlight(true);\n                    this._points.push(point);\n                }\n            }\n        },\n\n        hide: function() {\n            var points = this._points;\n            while (points.length) {\n                points.pop().toggleHighlight(false);\n            }\n        },\n\n        isHighlighted: function(element) {\n            var points = this._points;\n\n            for (var i = 0; i < points.length; i++) {\n                var point = points[i];\n                if (element == point) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n    });\n\n    var BaseTooltip = Class.extend({\n        init: function(chartElement, options) {\n            var tooltip = this;\n\n            tooltip.options = deepExtend({}, tooltip.options, options);\n\n            tooltip.chartElement = chartElement;\n\n            tooltip.template = BaseTooltip.template;\n            if (!tooltip.template) {\n                tooltip.template = BaseTooltip.template = renderTemplate(\n                    \"<div class='\" + CSS_PREFIX + \"tooltip \" + CSS_PREFIX + \"chart-tooltip' \" +\n                    \"style='display:none; position: absolute; font: #= d.font #;\" +\n                    \"border: #= d.border.width #px solid;\" +\n                    \"opacity: #= d.opacity #; filter: alpha(opacity=#= d.opacity * 100 #);'>\" +\n                    \"</div>\"\n                );\n            }\n\n            tooltip.element = $(tooltip.template(tooltip.options));\n            tooltip.move = proxy(tooltip.move, tooltip);\n            tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n        },\n\n        destroy: function() {\n            this._clearShowTimeout();\n\n            if (this.element) {\n                this.element.off(MOUSELEAVE_NS).remove();\n                this.element = null;\n            }\n        },\n\n        options: {\n            border: {\n                width: 1\n            },\n            opacity: 1,\n            animation: {\n                duration: TOOLTIP_ANIMATION_DURATION\n            }\n        },\n\n        move: function() {\n            var tooltip = this,\n                options = tooltip.options,\n                element = tooltip.element,\n                offset;\n\n            if (!tooltip.anchor) {\n                return;\n            }\n\n            offset = tooltip._offset();\n            if (!tooltip.visible) {\n                element.css({ top: offset.top, left: offset.left });\n            }\n\n            tooltip._ensureElement(document.body);\n            element\n                .stop(true, true)\n                .show()\n                .animate({\n                    left: offset.left,\n                    top: offset.top\n                }, options.animation.duration);\n\n            tooltip.visible = true;\n        },\n\n        _clearShowTimeout: function() {\n            if (this.showTimeout) {\n                clearTimeout(this.showTimeout);\n                this.showTimeout = null;\n            }\n        },\n\n        _padding: function() {\n            if (!this._chartPadding) {\n                var chartElement = this.chartElement;\n                this._chartPadding = {\n                    top: parseInt(chartElement.css(\"paddingTop\"), 10),\n                    left: parseInt(chartElement.css(\"paddingLeft\"), 10)\n                };\n            }\n\n            return this._chartPadding;\n        },\n\n        _offset: function() {\n            var tooltip = this,\n                size = tooltip._measure(),\n                anchor = tooltip.anchor,\n                chartPadding = tooltip._padding(),\n                chartOffset = tooltip.chartElement.offset(),\n                top = round(anchor.y + chartPadding.top + chartOffset.top),\n                left = round(anchor.x + chartPadding.left + chartOffset.left),\n                zoomLevel = kendo.support.zoomLevel(),\n                viewport = $(window),\n                scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0,\n                scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;\n\n            top += tooltip._fit(top - scrollTop, size.height, viewport.outerHeight() / zoomLevel);\n            left += tooltip._fit(left - scrollLeft, size.width, viewport.outerWidth() / zoomLevel);\n\n            return {\n                top: top,\n                left: left\n            };\n        },\n\n        setStyle: function(options, point) {\n            var background = options.background;\n            var border = options.border.color;\n\n            if (point) {\n                var pointColor = point.color || point.options.color;\n                background = valueOrDefault(background, pointColor);\n                border = valueOrDefault(border, pointColor);\n            }\n\n            if (!defined(options.color)) {\n                var brightness = new Color(background).percBrightness();\n\n                this.element.toggleClass(\n                    CSS_PREFIX + TOOLTIP_INVERSE,\n                    brightness > 180\n                );\n            }\n\n            this.element.css({\n                backgroundColor: background,\n                borderColor: border,\n                font: options.font,\n                color: options.color,\n                opacity: options.opacity,\n                borderWidth: options.border.width\n            });\n        },\n\n        show: function() {\n            this._clearShowTimeout();\n            this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n        },\n\n        hide: function() {\n            var tooltip = this;\n\n            clearTimeout(tooltip.showTimeout);\n            tooltip._hideElement();\n\n            if (tooltip.visible) {\n                tooltip.point = null;\n                tooltip.visible = false;\n                tooltip.index = null;\n            }\n        },\n\n        _measure: function() {\n            this._ensureElement();\n\n            var size = {\n                width: this.element.outerWidth(),\n                height: this.element.outerHeight()\n            };\n\n            return size;\n        },\n\n        _ensureElement: function() {\n            if (this.element) {\n                this.element\n                    .appendTo(document.body)\n                    .on(MOUSELEAVE_NS, this._mouseleave);\n            }\n        },\n\n        _mouseleave: function(e) {\n            var target = e.relatedTarget;\n            var chart = this.chartElement[0];\n            if (target && target !== chart && !$.contains(chart, target)) {\n                this.hide();\n            }\n        },\n\n        _hideElement: function() {\n            if (this.element) {\n                this.element.fadeOut({\n                    always: function(){\n                        $(this).off(MOUSELEAVE_NS).remove();\n                    }\n                });\n            }\n        },\n\n        _pointContent: function(point) {\n            var tooltip = this,\n                options = deepExtend({}, tooltip.options, point.options.tooltip),\n                content, tooltipTemplate;\n\n            if (defined(point.value)) {\n                content = point.value.toString();\n            }\n\n            if (options.template) {\n                tooltipTemplate = template(options.template);\n                content = tooltipTemplate({\n                    value: point.value,\n                    category: point.category,\n                    series: point.series,\n                    dataItem: point.dataItem,\n                    percentage: point.percentage,\n                    runningTotal: point.runningTotal,\n                    total: point.total,\n                    low: point.low,\n                    high: point.high,\n                    xLow: point.xLow,\n                    xHigh: point.xHigh,\n                    yLow: point.yLow,\n                    yHigh: point.yHigh\n                });\n            } else if (options.format) {\n                content = point.formatValue(options.format);\n            }\n\n            return content;\n        },\n\n        _pointAnchor: function(point) {\n            var size = this._measure();\n\n            return point.tooltipAnchor(size.width, size.height);\n        },\n\n        _fit: function(offset, size, viewPortSize) {\n            var output = 0;\n\n            if (offset + size > viewPortSize) {\n                output = viewPortSize - (offset + size);\n            }\n\n            if (offset < 0) {\n                output = -offset;\n            }\n\n            return output;\n        }\n    });\n\n    var Tooltip = BaseTooltip.extend({\n        show: function(point) {\n            var tooltip = this,\n                options = deepExtend({}, tooltip.options, point.options.tooltip);\n\n            if (!point || !point.tooltipAnchor || !tooltip.element) {\n                return;\n            }\n\n            tooltip.element.html(tooltip._pointContent(point));\n            tooltip.anchor = tooltip._pointAnchor(point);\n\n            if (tooltip.anchor) {\n                tooltip.setStyle(options, point);\n                BaseTooltip.fn.show.call(tooltip, point);\n            } else {\n                tooltip.hide();\n            }\n        }\n    });\n\n    var SharedTooltip = BaseTooltip.extend({\n        init: function(element, plotArea, options) {\n            var tooltip = this;\n\n            BaseTooltip.fn.init.call(tooltip, element, options);\n\n            tooltip.plotArea = plotArea;\n        },\n\n        options: {\n            sharedTemplate:\n                \"<table>\" +\n                \"<th colspan='2'>#= categoryText #</th>\" +\n                \"# for(var i = 0; i < points.length; i++) { #\" +\n                \"# var point = points[i]; #\" +\n                \"<tr>\" +\n                    \"# if(point.series.name) { # \" +\n                        \"<td> #= point.series.name #:</td>\" +\n                    \"# } #\" +\n                    \"<td>#= content(point) #</td>\" +\n                \"</tr>\" +\n                \"# } #\" +\n                \"</table>\",\n            categoryFormat: \"{0:d}\"\n        },\n\n        showAt: function(points, coords) {\n            var tooltip = this,\n                options = tooltip.options,\n                plotArea = tooltip.plotArea,\n                axis = plotArea.categoryAxis,\n                index = axis.pointCategoryIndex(coords),\n                category = axis.getCategory(coords),\n                slot = axis.getSlot(index),\n                content;\n\n            points = $.grep(points, function(p) {\n                var tooltip = p.series.tooltip,\n                    excluded = tooltip && tooltip.visible === false;\n\n                return !excluded;\n            });\n\n            if (points.length > 0) {\n                content = tooltip._content(points, category);\n                tooltip.element.html(content);\n                tooltip.anchor = tooltip._slotAnchor(coords, slot);\n                tooltip.setStyle(options, points[0]);\n\n                BaseTooltip.fn.show.call(tooltip);\n            }\n        },\n\n        _slotAnchor: function(point, slot) {\n            var tooltip = this,\n                plotArea = tooltip.plotArea,\n                axis = plotArea.categoryAxis,\n                anchor,\n                size = this._measure(),\n                hCenter = point.y - size.height / 2;\n\n            if (axis.options.vertical) {\n                anchor = Point2D(point.x, hCenter);\n            } else {\n                anchor = Point2D(slot.center().x, hCenter);\n            }\n\n            return anchor;\n        },\n\n        _content: function(points, category) {\n            var tooltip = this,\n                template,\n                content;\n\n            template = kendo.template(tooltip.options.sharedTemplate);\n            content = template({\n                points: points,\n                category: category,\n                categoryText: autoFormat(tooltip.options.categoryFormat, category),\n                content: tooltip._pointContent\n            });\n\n            return content;\n        }\n    });\n\n    var Crosshair = ChartElement.extend({\n        init: function(axis, options) {\n            ChartElement.fn.init.call(this, options);\n\n            this.axis = axis;\n            this.stickyMode = axis instanceof CategoryAxis;\n        },\n\n        options: {\n            color: BLACK,\n            width: 1,\n            zIndex: -1,\n            tooltip: {\n                visible: false\n            }\n        },\n\n        showAt: function(point) {\n            var crosshair = this;\n\n            this.point = point;\n            this.moveLine();\n            this.line.visible(true);\n\n            var tooltipOptions = this.options.tooltip;\n            if (tooltipOptions.visible) {\n                if (!this.tooltip) {\n                    this.tooltip = new CrosshairTooltip(this,\n                        deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\n                    );\n                }\n                this.tooltip.showAt(point);\n            }\n        },\n\n        hide: function() {\n            this.line.visible(false);\n\n            if (this.tooltip) {\n                this.tooltip.hide();\n            }\n        },\n\n        moveLine: function() {\n            var crosshair = this,\n                axis = crosshair.axis,\n                vertical = axis.options.vertical,\n                box = crosshair.getBox(),\n                point = crosshair.point,\n                dim = vertical ? Y : X,\n                slot, lineStart, lineEnd;\n\n            lineStart = new geom.Point(box.x1, box.y1);\n            if (vertical) {\n                lineEnd = new geom.Point(box.x2, box.y1);\n            } else {\n                lineEnd = new geom.Point(box.x1, box.y2);\n            }\n\n            if (point) {\n                if (crosshair.stickyMode) {\n                    slot = axis.getSlot(axis.pointCategoryIndex(point));\n                    lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n                } else {\n                    lineStart[dim] = lineEnd[dim] = point[dim];\n                }\n            }\n\n            crosshair.box = box;\n\n            this.line.moveTo(lineStart).lineTo(lineEnd);\n        },\n\n        getBox: function() {\n            var crosshair = this,\n                axis = crosshair.axis,\n                axes = axis.pane.axes,\n                length = axes.length,\n                vertical = axis.options.vertical,\n                box = axis.lineBox().clone(),\n                dim = vertical ? X : Y,\n                axisLineBox, currentAxis, i;\n\n            for (i = 0; i < length; i++) {\n                currentAxis = axes[i];\n                if (currentAxis.options.vertical != vertical) {\n                    if (!axisLineBox) {\n                        axisLineBox = currentAxis.lineBox().clone();\n                    } else {\n                        axisLineBox.wrap(currentAxis.lineBox());\n                    }\n                }\n            }\n\n            box[dim + 1] = axisLineBox[dim + 1];\n            box[dim + 2] = axisLineBox[dim + 2];\n\n            return box;\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var options = this.options;\n            this.line = new draw.Path({\n                stroke: {\n                    color: options.color,\n                    width: options.width,\n                    opacity: options.opacity,\n                    dashType: options.dashType\n                },\n                visible: false\n            });\n\n            this.moveLine();\n            this.visual.append(this.line);\n        },\n\n        destroy: function() {\n            var crosshair = this;\n            if (crosshair.tooltip) {\n                crosshair.tooltip.destroy();\n            }\n\n            ChartElement.fn.destroy.call(crosshair);\n        }\n    });\n\n    var CrosshairTooltip = BaseTooltip.extend({\n        init: function(crosshair, options) {\n            var tooltip = this,\n                chartElement = crosshair.axis.getRoot().chart.element;\n\n            tooltip.crosshair = crosshair;\n\n            BaseTooltip.fn.init.call(tooltip, chartElement, deepExtend({},\n                tooltip.options, {\n                    background: crosshair.axis.plotArea.options.seriesColors[0]\n                },\n                options));\n\n            tooltip.setStyle(tooltip.options);\n        },\n\n        options: {\n            padding: 10\n        },\n\n        showAt: function(point) {\n            var tooltip = this,\n                element = tooltip.element;\n\n            if (element) {\n                tooltip.point = point;\n                tooltip.element.html(tooltip.content(point));\n                tooltip.anchor = tooltip.getAnchor();\n\n                tooltip.move();\n            }\n        },\n\n        move: function() {\n            var tooltip = this,\n                element = tooltip.element,\n                offset = tooltip._offset();\n\n            tooltip._ensureElement();\n            element.css({ top: offset.top, left: offset.left }).show();\n        },\n\n        content: function(point) {\n            var tooltip = this,\n                options = tooltip.options,\n                axis = tooltip.crosshair.axis,\n                axisOptions = axis.options,\n                content, value, tooltipTemplate;\n\n            value = content = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\n\n            if (options.template) {\n                tooltipTemplate = template(options.template);\n                content = tooltipTemplate({\n                    value: value\n                });\n            } else if (options.format) {\n                content = autoFormat(options.format, value);\n            } else {\n                if (axisOptions.type === DATE) {\n                    content = autoFormat(axisOptions.labels.dateFormats[axisOptions.baseUnit], value);\n                }\n            }\n\n            return content;\n        },\n\n        getAnchor: function() {\n            var tooltip = this,\n                options = tooltip.options,\n                position = options.position,\n                crosshair = this.crosshair,\n                vertical = !crosshair.axis.options.vertical,\n                lineBox = crosshair.line.bbox(),\n                size = this._measure(),\n                halfWidth = size.width / 2,\n                halfHeight = size.height / 2,\n                padding = options.padding,\n                anchor;\n\n            if (vertical) {\n                if (position === BOTTOM) {\n                    anchor = lineBox.bottomLeft()\n                        .translate(-halfWidth, padding);\n                } else {\n                    anchor = lineBox.topLeft()\n                        .translate(-halfWidth, -size.height - padding);\n                }\n            } else {\n                if (position === LEFT) {\n                    anchor = lineBox.topLeft()\n                        .translate(-size.width - padding, -halfHeight);\n                } else {\n                    anchor = lineBox.topRight()\n                        .translate(padding, -halfHeight);\n                }\n            }\n\n            return anchor;\n        },\n\n        hide: function() {\n            this.element.hide();\n            this.point = null;\n        },\n\n        destroy: function() {\n            BaseTooltip.fn.destroy.call(this);\n\n            this.point = null;\n        }\n    });\n\n    var Aggregates = {\n        min: function(values) {\n            var min = MAX_VALUE,\n                length = values.length,\n                i, n;\n\n            for (i = 0; i < length; i++) {\n                n = values[i];\n                if (isNumber(n)) {\n                    min = math.min(min, n);\n                }\n            }\n\n            return min === MAX_VALUE ? values[0] : min;\n        },\n\n        max: function(values) {\n            var max = MIN_VALUE,\n                length = values.length,\n                i, n;\n\n            for (i = 0; i < length; i++) {\n                n = values[i];\n                if (isNumber(n)) {\n                    max = math.max(max, n);\n                }\n            }\n\n            return max === MIN_VALUE ? values[0] : max;\n        },\n\n        sum: function(values) {\n            var length = values.length,\n                sum = 0,\n                i, n;\n\n            for (i = 0; i < length; i++) {\n                n = values[i];\n                if (isNumber(n)) {\n                    sum += n;\n                }\n            }\n\n            return sum;\n        },\n\n        sumOrNull: function(values) {\n            var result = null;\n\n            if (countNumbers(values)) {\n                result = Aggregates.sum(values);\n            }\n\n            return result;\n        },\n\n        count: function(values) {\n            var length = values.length,\n                count = 0,\n                i, val;\n\n            for (i = 0; i < length; i++) {\n                val = values[i];\n                if (val !== null && defined(val)) {\n                    count++;\n                }\n            }\n\n            return count;\n        },\n\n        avg: function(values) {\n            var result = values[0],\n                count = countNumbers(values);\n\n            if (count > 0) {\n                result = Aggregates.sum(values) / count;\n            }\n\n            return result;\n        },\n\n        first: function(values) {\n            var length = values.length,\n                i,\n                val;\n\n            for (i = 0; i < length; i++) {\n                val = values[i];\n                if (val !== null && defined(val)) {\n                    return val;\n                }\n            }\n\n            return values[0];\n        }\n    };\n\n    function DefaultAggregates() {\n        this._defaults = {};\n    }\n\n    DefaultAggregates.prototype = {\n        register: function(seriesTypes, aggregates) {\n            for (var i = 0; i < seriesTypes.length; i++) {\n                this._defaults[seriesTypes[i]] = aggregates;\n            }\n        },\n\n        query: function(seriesType) {\n            return this._defaults[seriesType];\n        }\n    };\n\n    DefaultAggregates.current = new DefaultAggregates();\n\n    var Selection = Observable.extend({\n        init: function(chart, categoryAxis, options) {\n            var that = this,\n                chartElement = chart.element,\n                categoryAxisLineBox = categoryAxis.lineBox(),\n                valueAxis = that.getValueAxis(categoryAxis),\n                valueAxisLineBox = valueAxis.lineBox(),\n                selectorPrefix = \".\" + CSS_PREFIX,\n                wrapper, padding;\n\n            Observable.fn.init.call(that);\n\n            that.options = deepExtend({}, that.options, options);\n            options = that.options;\n            that.chart = chart;\n            that.chartElement = chartElement;\n            that.categoryAxis = categoryAxis;\n            that._dateAxis = that.categoryAxis instanceof DateCategoryAxis;\n            that.valueAxis = valueAxis;\n\n            if (that._dateAxis) {\n                deepExtend(options, {\n                    min: toDate(options.min),\n                    max: toDate(options.max),\n                    from: toDate(options.from),\n                    to: toDate(options.to)\n                });\n            }\n\n            that.template = Selection.template;\n            if (!that.template) {\n                that.template = Selection.template = renderTemplate(\n                    \"<div class='\" + CSS_PREFIX + \"selector' \" +\n                    \"style='width: #= d.width #px; height: #= d.height #px;\" +\n                    \" top: #= d.offset.top #px; left: #= d.offset.left #px;'>\" +\n                    \"<div class='\" + CSS_PREFIX + \"mask'></div>\" +\n                    \"<div class='\" + CSS_PREFIX + \"mask'></div>\" +\n                    \"<div class='\" + CSS_PREFIX + \"selection'>\" +\n                    \"<div class='\" + CSS_PREFIX + \"selection-bg'></div>\" +\n                    \"<div class='\" + CSS_PREFIX + \"handle \" + CSS_PREFIX + \"leftHandle'><div></div></div>\" +\n                    \"<div class='\" + CSS_PREFIX + \"handle \" + CSS_PREFIX + \"rightHandle'><div></div></div>\" +\n                    \"</div></div>\"\n                );\n            }\n\n            padding = {\n                left: parseInt(chartElement.css(\"paddingLeft\"), 10),\n                right: parseInt(chartElement.css(\"paddingTop\"), 10)\n            };\n\n            that.options = deepExtend({}, {\n                width: categoryAxisLineBox.width(),\n                height: valueAxisLineBox.height(),\n                padding: padding,\n                offset: {\n                    left: valueAxisLineBox.x2 + padding.left,\n                    top: valueAxisLineBox.y1 + padding.right\n                },\n                from: options.min,\n                to: options.max\n            }, options);\n\n            if (that.options.visible) {\n                that.wrapper = wrapper = $(that.template(that.options)).appendTo(chartElement);\n\n                that.selection = wrapper.find(selectorPrefix + \"selection\");\n                that.leftMask = wrapper.find(selectorPrefix + \"mask\").first();\n                that.rightMask = wrapper.find(selectorPrefix + \"mask\").last();\n                that.leftHandle = wrapper.find(selectorPrefix + \"leftHandle\");\n                that.rightHandle = wrapper.find(selectorPrefix + \"rightHandle\");\n                that.options.selection = {\n                    border: {\n                        left: parseFloat(that.selection.css(\"border-left-width\"), 10),\n                        right: parseFloat(that.selection.css(\"border-right-width\"), 10)\n                    }\n                };\n\n                that.leftHandle.css(\"top\", (that.selection.height() - that.leftHandle.height()) / 2);\n                that.rightHandle.css(\"top\", (that.selection.height() - that.rightHandle.height()) / 2);\n\n                that.set(that._index(options.from), that._index(options.to));\n\n                that.bind(that.events, that.options);\n                that.wrapper[0].style.cssText = that.wrapper[0].style.cssText;\n\n                that.wrapper.on(MOUSEWHEEL_NS, proxy(that._mousewheel, that));\n\n                if (kendo.UserEvents) {\n                    that.userEvents = new kendo.UserEvents(that.wrapper, {\n                        global: true,\n                        stopPropagation: true,\n                        multiTouch: true,\n                        start: proxy(that._start, that),\n                        move: proxy(that._move, that),\n                        end: proxy(that._end, that),\n                        tap: proxy(that._tap, that),\n                        gesturestart: proxy(that._gesturechange, that),\n                        gesturechange: proxy(that._gesturechange, that)\n                    });\n                } else {\n                    that.leftHandle.add(that.rightHandle).removeClass(CSS_PREFIX + \"handle\");\n                }\n            }\n        },\n\n        events: [\n            SELECT_START,\n            SELECT,\n            SELECT_END\n        ],\n\n        options: {\n            visible: true,\n            mousewheel: {\n                zoom: BOTH\n            },\n            min: MIN_VALUE,\n            max: MAX_VALUE\n        },\n\n        destroy: function() {\n            var that = this,\n                userEvents = that.userEvents;\n\n            if (userEvents) {\n                userEvents.destroy();\n            }\n\n            clearTimeout(that._mwTimeout);\n            that._state = null;\n\n            that.wrapper.remove();\n        },\n\n        _rangeEventArgs: function(range) {\n            var that = this;\n\n            return {\n                axis: that.categoryAxis.options,\n                from: that._value(range.from),\n                to: that._value(range.to)\n            };\n        },\n\n        _start: function(e) {\n            var that = this,\n                options = that.options,\n                target = $(e.event.target),\n                args;\n\n            if (that._state || !target) {\n                return;\n            }\n\n            that.chart._unsetActivePoint();\n            that._state = {\n                moveTarget: target.parents(\".k-handle\").add(target).first(),\n                startLocation: e.x ? e.x.location : 0,\n                range: {\n                    from: that._index(options.from),\n                    to: that._index(options.to)\n                }\n            };\n\n            args = that._rangeEventArgs({\n                from: that._index(options.from),\n                to: that._index(options.to)\n            });\n\n            if (that.trigger(SELECT_START, args)) {\n                that.userEvents.cancel();\n                that._state = null;\n            }\n        },\n\n        _move: function(e) {\n            if (!this._state) {\n                return;\n            }\n\n            var that = this,\n                state = that._state,\n                options = that.options,\n                categories = that.categoryAxis.options.categories,\n                from = that._index(options.from),\n                to = that._index(options.to),\n                min = that._index(options.min),\n                max = that._index(options.max),\n                delta = state.startLocation - e.x.location,\n                range = state.range,\n                oldRange = { from: range.from, to: range.to },\n                span = range.to - range.from,\n                target = state.moveTarget,\n                scale = that.wrapper.width() / (categories.length - 1),\n                offset = math.round(delta / scale);\n\n            if (!target) {\n                return;\n            }\n\n            e.preventDefault();\n\n            if (target.is(\".k-selection, .k-selection-bg\")) {\n                range.from = math.min(\n                    math.max(min, from - offset),\n                    max - span\n                );\n                range.to = math.min(\n                    range.from + span,\n                    max\n                );\n            } else if (target.is(\".k-leftHandle\")) {\n                range.from = math.min(\n                    math.max(min, from - offset),\n                    max - 1\n                );\n                range.to = math.max(range.from + 1, range.to);\n            } else if (target.is(\".k-rightHandle\")) {\n                range.to = math.min(\n                    math.max(min + 1, to - offset),\n                    max\n                );\n                range.from = math.min(range.to - 1, range.from);\n            }\n\n            if (range.from !== oldRange.from || range.to !== oldRange.to) {\n                that.move(range.from, range.to);\n                that.trigger(SELECT, that._rangeEventArgs(range));\n            }\n        },\n\n        _end: function() {\n            var that = this,\n                range = that._state.range;\n\n            delete that._state;\n            that.set(range.from, range.to);\n            that.trigger(SELECT_END, that._rangeEventArgs(range));\n        },\n\n        _gesturechange: function(e) {\n            if (!this._state) {\n                return;\n            }\n\n            var that = this,\n                chart = that.chart,\n                state = that._state,\n                options = that.options,\n                categoryAxis = that.categoryAxis,\n                range = state.range,\n                p0 = chart._toModelCoordinates(e.touches[0].x.location).x,\n                p1 = chart._toModelCoordinates(e.touches[1].x.location).x,\n                left = math.min(p0, p1),\n                right = math.max(p0, p1);\n\n            e.preventDefault();\n            state.moveTarget = null;\n\n            range.from =\n                categoryAxis.pointCategoryIndex(new dataviz.Point2D(left)) ||\n                options.min;\n\n            range.to =\n                categoryAxis.pointCategoryIndex(new dataviz.Point2D(right)) ||\n                options.max;\n\n            that.move(range.from, range.to);\n        },\n\n        _tap: function(e) {\n            var that = this,\n                options = that.options,\n                coords = that.chart._eventCoordinates(e),\n                categoryAxis = that.categoryAxis,\n                categoryIx = categoryAxis.pointCategoryIndex(\n                    new dataviz.Point2D(coords.x, categoryAxis.box.y1)\n                ),\n                from = that._index(options.from),\n                to = that._index(options.to),\n                min = that._index(options.min),\n                max = that._index(options.max),\n                span = to - from,\n                mid = from + span / 2,\n                offset = math.round(mid - categoryIx),\n                range = {},\n                rightClick = e.event.which === 3;\n\n            if (that._state || rightClick) {\n                return;\n            }\n\n            e.preventDefault();\n            that.chart._unsetActivePoint();\n\n            if (!categoryAxis.options.justified) {\n                offset--;\n            }\n\n            range.from = math.min(\n                math.max(min, from - offset),\n                max - span\n            );\n\n            range.to = math.min(range.from + span, max);\n\n            that._start(e);\n            if (that._state) {\n                that._state.range = range;\n                that.trigger(SELECT, that._rangeEventArgs(range));\n                that._end();\n            }\n        },\n\n        _mousewheel: function(e) {\n            var that = this,\n                options = that.options,\n                delta = mwDelta(e);\n\n            that._start({ event: { target: that.selection } });\n\n            if (that._state) {\n                var range = that._state.range;\n\n                e.preventDefault();\n                e.stopPropagation();\n\n                if (math.abs(delta) > 1) {\n                    delta *= ZOOM_ACCELERATION;\n                }\n\n                if (options.mousewheel.reverse) {\n                    delta *= -1;\n                }\n\n                if (that.expand(delta)) {\n                    that.trigger(SELECT, {\n                        axis: that.categoryAxis.options,\n                        delta: delta,\n                        originalEvent: e,\n                        from: that._value(range.from),\n                        to: that._value(range.to)\n                    });\n                }\n\n                if (that._mwTimeout) {\n                    clearTimeout(that._mwTimeout);\n                }\n\n                that._mwTimeout = setTimeout(function() {\n                    that._end();\n                }, MOUSEWHEEL_DELAY);\n            }\n        },\n\n        _index: function(value) {\n            var that = this,\n                categoryAxis = that.categoryAxis,\n                categories = categoryAxis.options.categories,\n                index = value;\n\n            if (value instanceof Date) {\n                index = lteDateIndex(value, categories);\n                if (!categoryAxis.options.justified && value > last(categories)) {\n                    index += 1;\n                }\n            }\n\n            return index;\n        },\n\n        _value: function(index) {\n            var that = this,\n                categoryAxis = this.categoryAxis,\n                categories = categoryAxis.options.categories,\n                value = index;\n\n            if (that._dateAxis) {\n                if (index > categories.length - 1) {\n                    value = that.options.max;\n                } else {\n                    value = categories[index];\n                }\n            }\n\n            return value;\n        },\n\n        _slot: function(value) {\n            var that = this,\n                categoryAxis = this.categoryAxis;\n\n            return categoryAxis.getSlot(that._index(value));\n        },\n\n        move: function(from, to) {\n            var that = this,\n                options = that.options,\n                offset = options.offset,\n                padding = options.padding,\n                border = options.selection.border,\n                leftMaskWidth,\n                rightMaskWidth,\n                box,\n                distance;\n\n            box = that._slot(from);\n            leftMaskWidth = round(box.x1 - offset.left + padding.left);\n            that.leftMask.width(leftMaskWidth);\n            that.selection.css(\"left\", leftMaskWidth);\n\n            box = that._slot(to);\n            rightMaskWidth = round(options.width - (box.x1 - offset.left + padding.left));\n            that.rightMask.width(rightMaskWidth);\n            distance = options.width - rightMaskWidth;\n            if (distance != options.width) {\n                distance += border.right;\n            }\n\n            that.rightMask.css(\"left\", distance);\n            that.selection.width(math.max(\n                options.width - (leftMaskWidth + rightMaskWidth) - border.right,\n                0\n            ));\n        },\n\n        set: function(from, to) {\n            var that = this,\n                options = that.options,\n                min = that._index(options.min),\n                max = that._index(options.max);\n\n            from = limitValue(that._index(from), min, max);\n            to = limitValue(that._index(to), from + 1, max);\n\n            if (options.visible) {\n                that.move(from, to);\n            }\n\n            options.from = that._value(from);\n            options.to = that._value(to);\n        },\n\n        expand: function(delta) {\n            var that = this,\n                options = that.options,\n                min = that._index(options.min),\n                max = that._index(options.max),\n                zDir = options.mousewheel.zoom,\n                from = that._index(options.from),\n                to = that._index(options.to),\n                range = { from: from, to: to },\n                oldRange = deepExtend({}, range);\n\n            if (that._state) {\n                range = that._state.range;\n            }\n\n            if (zDir !== RIGHT) {\n                range.from = limitValue(\n                    limitValue(from - delta, 0, to - 1),\n                    min, max\n                );\n            }\n\n            if (zDir !== LEFT) {\n                range.to = limitValue(\n                    limitValue(to + delta, range.from + 1, max),\n                    min,\n                    max\n                 );\n            }\n\n            if (range.from !== oldRange.from || range.to !== oldRange.to) {\n                that.set(range.from, range.to);\n                return true;\n            }\n        },\n\n        getValueAxis: function(categoryAxis) {\n            var axes = categoryAxis.pane.axes,\n                axesCount = axes.length,\n                i, axis;\n\n            for (i = 0; i < axesCount; i++) {\n                axis = axes[i];\n\n                if (axis.options.vertical !== categoryAxis.options.vertical) {\n                    return axis;\n                }\n            }\n        }\n    });\n\n    var SeriesAggregator = function(series, binder, defaultAggregates) {\n        var sa = this,\n            canonicalFields = binder.canonicalFields(series),\n            valueFields = binder.valueFields(series),\n            sourceFields = binder.sourceFields(series, canonicalFields),\n            seriesFields = sa._seriesFields = [],\n            defaults = defaultAggregates.query(series.type),\n            rootAggregate = series.aggregate || defaults,\n            i;\n\n        sa._series = series;\n        sa._binder = binder;\n\n        for (i = 0; i < canonicalFields.length; i++) {\n            var field = canonicalFields[i],\n                fieldAggregate;\n\n            if (typeof rootAggregate === OBJECT) {\n                fieldAggregate = rootAggregate[field];\n            } else if (i === 0 || inArray(field, valueFields)) {\n                fieldAggregate = rootAggregate;\n            } else {\n                break;\n            }\n\n            if (fieldAggregate) {\n                seriesFields.push({\n                    canonicalName: field,\n                    name: sourceFields[i],\n                    transform: isFn(fieldAggregate) ?\n                        fieldAggregate : Aggregates[fieldAggregate]\n                });\n            }\n        }\n    };\n\n    SeriesAggregator.prototype = {\n        aggregatePoints: function(srcPoints, group) {\n            var sa = this,\n                data = sa._bindPoints(srcPoints || []),\n                series = sa._series,\n                seriesFields = sa._seriesFields,\n                i,\n                field,\n                srcValues,\n                value,\n                firstDataItem = data.dataItems[0],\n                result = {};\n\n            if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n                var fn = function() {};\n                fn.prototype = firstDataItem;\n                result = new fn();\n            }\n\n            for (i = 0; i < seriesFields.length; i++) {\n                field = seriesFields[i];\n                srcValues = sa._bindField(data.values, field.canonicalName);\n                value = field.transform(srcValues, series, data.dataItems, group);\n\n                if (value !== null && typeof value === OBJECT && !defined(value.length)) {\n                    result = value;\n                    break;\n                } else {\n                    if (defined(value)) {\n                        ensureTree(field.name, result);\n                        kendo.setter(field.name)(result, value);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        _bindPoints: function(points) {\n            var sa = this,\n                binder = sa._binder,\n                series = sa._series,\n                values = [],\n                dataItems = [],\n                i,\n                pointIx;\n\n            for (i = 0; i < points.length; i++) {\n                pointIx = points[i];\n\n                values.push(binder.bindPoint(series, pointIx));\n                dataItems.push(series.data[pointIx]);\n            }\n\n            return {\n                values: values,\n                dataItems: dataItems\n            };\n        },\n\n        _bindField: function(data, field) {\n            var values = [],\n                count = data.length,\n                i, item, value, valueFields;\n\n            for (i = 0; i < count; i++) {\n                item = data[i];\n                valueFields = item.valueFields;\n\n                if (defined(valueFields[field])) {\n                    value = valueFields[field];\n                } else {\n                    value = item.fields[field];\n                }\n\n                values.push(value);\n            }\n\n            return values;\n        }\n    };\n\n    function intersection(a1, a2, b1, b2) {\n        var result,\n            ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\n            u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y),\n            ua;\n\n        if (u_b !== 0) {\n            ua = (ua_t / u_b);\n\n            result = new Point2D(\n                a1.x + ua * (a2.x - a1.x),\n                a1.y + ua * (a2.y - a1.y)\n            );\n        }\n\n        return result;\n    }\n\n    function applySeriesDefaults(options, themeOptions) {\n        var series = options.series,\n            i,\n            seriesLength = series.length,\n            seriesType,\n            seriesDefaults = options.seriesDefaults,\n            commonDefaults = deepExtend({}, options.seriesDefaults),\n            themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {},\n            commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n\n        cleanupNestedSeriesDefaults(commonDefaults);\n        cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n        for (i = 0; i < seriesLength; i++) {\n\n            seriesType = series[i].type || options.seriesDefaults.type;\n\n            var baseOptions = deepExtend(\n                { data: [] },\n                commonThemeDefaults,\n                themeSeriesDefaults[seriesType],\n                { tooltip: options.tooltip },\n                commonDefaults,\n                seriesDefaults[seriesType]\n            );\n\n            series[i]._defaults = baseOptions;\n            series[i] = deepExtend({}, baseOptions, series[i]);\n        }\n    }\n\n    function cleanupNestedSeriesDefaults(seriesDefaults) {\n        delete seriesDefaults.bar;\n        delete seriesDefaults.column;\n        delete seriesDefaults.rangeColumn;\n        delete seriesDefaults.line;\n        delete seriesDefaults.verticalLine;\n        delete seriesDefaults.pie;\n        delete seriesDefaults.donut;\n        delete seriesDefaults.area;\n        delete seriesDefaults.verticalArea;\n        delete seriesDefaults.scatter;\n        delete seriesDefaults.scatterLine;\n        delete seriesDefaults.bubble;\n        delete seriesDefaults.candlestick;\n        delete seriesDefaults.ohlc;\n        delete seriesDefaults.boxPlot;\n        delete seriesDefaults.bullet;\n        delete seriesDefaults.verticalBullet;\n        delete seriesDefaults.polarArea;\n        delete seriesDefaults.polarLine;\n        delete seriesDefaults.radarArea;\n        delete seriesDefaults.radarLine;\n        delete seriesDefaults.waterfall;\n    }\n\n    function applySeriesColors(options) {\n        var series = options.series,\n            colors = options.seriesColors || [],\n            i,\n            currentSeries,\n            seriesColor,\n            defaults;\n\n        for (i = 0; i < series.length; i++) {\n            currentSeries = series[i];\n            seriesColor = colors[i % colors.length];\n            currentSeries.color = currentSeries.color || seriesColor;\n\n            defaults = currentSeries._defaults;\n            if (defaults) {\n                defaults.color = defaults.color || seriesColor;\n            }\n        }\n    }\n\n    function resolveAxisAliases(options) {\n        var alias;\n\n        each([CATEGORY, VALUE, X, Y], function() {\n            alias = this + \"Axes\";\n            if (options[alias]) {\n                options[this + \"Axis\"] = options[alias];\n                delete options[alias];\n            }\n        });\n    }\n\n    function applyAxisDefaults(options, themeOptions) {\n        var themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n\n        each([CATEGORY, VALUE, X, Y], function() {\n            var axisName = this + \"Axis\",\n                axes = [].concat(options[axisName]),\n                axisDefaults = options.axisDefaults || {};\n\n            axes = $.map(axes, function(axisOptions) {\n                var axisColor = (axisOptions || {}).color;\n                var result = deepExtend({},\n                    themeAxisDefaults,\n                    themeAxisDefaults[axisName],\n                    axisDefaults,\n                    axisDefaults[axisName],\n                    {\n                        line: { color: axisColor },\n                        labels: { color: axisColor },\n                        title: { color: axisColor }\n                    },\n                    axisOptions\n                );\n\n                delete result[axisName];\n\n                return result;\n            });\n\n            options[axisName] = axes.length > 1 ? axes : axes[0];\n        });\n    }\n\n    function categoriesCount(series) {\n        var seriesCount = series.length,\n            categories = 0,\n            i;\n\n        for (i = 0; i < seriesCount; i++) {\n            categories = math.max(categories, series[i].data.length);\n        }\n\n        return categories;\n    }\n\n    function sqr(value) {\n        return value * value;\n    }\n\n    extend($.easing, {\n        easeOutElastic: function (n, d, first, diff) {\n            var s = 1.70158,\n                p = 0,\n                a = diff;\n\n            if ( n === 0 ) {\n                return first;\n            }\n\n            if ( n === 1) {\n                return first + diff;\n            }\n\n            if (!p) {\n                p = 0.5;\n            }\n\n            if (a < math.abs(diff)) {\n                a=diff;\n                s = p / 4;\n            } else {\n                s = p / (2 * math.PI) * math.asin(diff / a);\n            }\n\n            return a * math.pow(2,-10 * n) *\n                   math.sin((n * 1 - s) * (1.1 * math.PI) / p) +\n                   diff + first;\n        }\n    });\n\n    function getField(field, row) {\n        if (row === null) {\n            return row;\n        }\n\n        var get = getter(field, true);\n        return get(row);\n    }\n\n    function getDateField(field, row) {\n        if (row === null) {\n            return row;\n        }\n\n        var key = \"_date_\" + field,\n            value = row[key];\n\n        if (!value) {\n            value = toDate(getter(field, true)(row));\n            row[key] = value;\n        }\n\n        return value;\n    }\n\n    function toDate(value) {\n        var result,\n            i;\n\n        if (value instanceof Date) {\n            result = value;\n        } else if (typeof value === STRING) {\n            result = kendo.parseDate(value) || new Date(value);\n        } else if (value) {\n            if (isArray(value)) {\n                result = [];\n                for (i = 0; i < value.length; i++) {\n                    result.push(toDate(value[i]));\n                }\n            } else {\n                result = new Date(value);\n            }\n        }\n\n        return result;\n    }\n\n    function toTime(value) {\n        if (isArray(value)) {\n            return map(value, toTime);\n        } else if (value) {\n            return toDate(value).getTime();\n        }\n    }\n\n    function addDuration(date, value, unit, weekStartDay) {\n        var result = date,\n            hours;\n\n        if (date) {\n            date = toDate(date);\n            hours = date.getHours();\n\n            if (unit === YEARS) {\n                result = new Date(date.getFullYear() + value, 0, 1);\n                kendo.date.adjustDST(result, 0);\n            } else if (unit === MONTHS) {\n                result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n                kendo.date.adjustDST(result, hours);\n            } else if (unit === WEEKS) {\n                result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n                kendo.date.adjustDST(result, hours);\n            } else if (unit === DAYS) {\n                result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n                kendo.date.adjustDST(result, hours);\n            } else if (unit === HOURS) {\n                result = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours() + value);\n                if (value > 0 && dateEquals(date, result)) {\n                    result = addDuration(date, value + 1, unit, weekStartDay);\n                }\n            } else if (unit === MINUTES) {\n                result = new Date(date.getTime() + value * TIME_PER_MINUTE);\n\n                if (result.getSeconds() > 0) {\n                    result.setSeconds(0);\n                }\n            } else if (unit === SECONDS) {\n                result = new Date(date.getTime() + value * TIME_PER_SECOND);\n            }\n\n            if (result.getMilliseconds() > 0) {\n                result.setMilliseconds(0);\n            }\n        }\n\n        return result;\n    }\n\n    function startOfWeek(date, weekStartDay) {\n        var day = date.getDay(),\n            daysToSubtract = 0;\n\n        if (!isNaN(day)) {\n            weekStartDay = weekStartDay || 0;\n            while (day !== weekStartDay) {\n                if (day === 0) {\n                    day = 6;\n                } else {\n                    day--;\n                }\n\n                daysToSubtract++;\n            }\n        }\n\n        return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n    }\n\n    function floorDate(date, unit, weekStartDay) {\n        date = toDate(date);\n\n        return addDuration(date, 0, unit, weekStartDay);\n    }\n\n    function ceilDate(date, unit, weekStartDay) {\n        date = toDate(date);\n\n        if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n            return date;\n        }\n\n        return addDuration(date, 1, unit, weekStartDay);\n    }\n\n    function dateDiff(a, b) {\n        var diff = a.getTime() - b,\n            offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n\n        return diff - (offsetDiff * TIME_PER_MINUTE);\n    }\n\n    function addTicks(date, ticks) {\n        var tzOffsetBefore = date.getTimezoneOffset(),\n            result = new Date(date.getTime() + ticks),\n            tzOffsetDiff = result.getTimezoneOffset() - tzOffsetBefore;\n\n        return new Date(result.getTime() + tzOffsetDiff * TIME_PER_MINUTE);\n    }\n\n    function duration(a, b, unit) {\n        var diff;\n\n        if (unit === YEARS) {\n            diff = b.getFullYear() - a.getFullYear();\n        } else if (unit === MONTHS) {\n            diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n        } else if (unit === DAYS) {\n            diff = math.floor(dateDiff(b, a) / TIME_PER_DAY);\n        } else {\n            diff = math.floor((b - a) / TIME_PER_UNIT[unit]);\n        }\n\n        return diff;\n    }\n\n    function singleItemOrArray(array) {\n        return array.length === 1 ? array[0] : array;\n    }\n\n    function axisGroupBox(axes) {\n        var length = axes.length,\n            box, i, axisBox;\n\n        if (length > 0) {\n            for (i = 0; i < length; i++) {\n                axisBox = axes[i].box;\n\n                if (!box) {\n                    box = axisBox.clone();\n                } else {\n                    box.wrap(axisBox);\n                }\n            }\n        }\n\n        return box || Box2D();\n    }\n\n    function equalsIgnoreCase(a, b) {\n        if (a && b) {\n            return a.toLowerCase() === b.toLowerCase();\n        }\n\n        return a === b;\n    }\n\n    function dateEquals(a, b) {\n        if (a && b) {\n            return toTime(a) === toTime(b);\n        }\n\n        return a === b;\n    }\n\n    function lastValue(array) {\n        var i = array.length,\n            value;\n\n        while (i--) {\n            value = array[i];\n            if (defined(value) && value !== null) {\n                return value;\n            }\n        }\n    }\n\n    function appendIfNotNull(array, element) {\n        if (element !== null) {\n            array.push(element);\n        }\n    }\n\n    function lteDateIndex(date, sortedDates) {\n        var low = 0,\n            high = sortedDates.length - 1,\n            i,\n            currentDate;\n\n        while (low <= high) {\n            i = math.floor((low + high) / 2);\n            currentDate = sortedDates[i];\n\n            if (currentDate < date) {\n                low = i + 1;\n                continue;\n            }\n\n            if (currentDate > date) {\n                high = i - 1;\n                continue;\n            }\n\n            while (dateEquals(sortedDates[i - 1], date)) {\n                i--;\n            }\n\n            return i;\n        }\n\n        if (sortedDates[i] <= date) {\n            return i;\n        } else {\n            return i - 1;\n        }\n    }\n\n    function isNumber(val) {\n        return typeof val === \"number\" && !isNaN(val);\n    }\n\n    function countNumbers(values) {\n        var length = values.length,\n            count = 0,\n            i,\n            num;\n\n        for (i = 0; i < length; i++) {\n            num = values[i];\n            if (isNumber(num)) {\n                count++;\n            }\n        }\n\n        return count;\n    }\n\n    function areNumbers(values) {\n        return countNumbers(values) === values.length;\n    }\n\n    function axisRanges(axes) {\n        var i,\n            axis,\n            axisName,\n            ranges = {};\n\n        for (i = 0; i < axes.length; i++) {\n            axis = axes[i];\n            axisName = axis.options.name;\n            if (axisName) {\n                ranges[axisName] = axis.range();\n            }\n        }\n\n        return ranges;\n    }\n\n    function evalOptions(options, context, state, dryRun) {\n        var property,\n            propValue,\n            excluded,\n            defaults,\n            depth,\n            needsEval = false;\n\n        state = state || {};\n        excluded = state.excluded = state.excluded || [];\n        defaults = state.defaults = state.defaults || {};\n        depth = state.depth = state.depth || 0;\n\n        if (depth > MAX_EXPAND_DEPTH) {\n            return;\n        }\n\n        for (property in options) {\n            if (!inArray(property, state.excluded)&&options.hasOwnProperty(property)) {\n                propValue = options[property];\n                if (isFn(propValue)) {\n                    needsEval = true;\n                    if (!dryRun) {\n                        options[property] = valueOrDefault(propValue(context), defaults[property]);\n                    }\n                } else if (typeof propValue === OBJECT) {\n                    state.defaults = defaults[property];\n                    state.depth++;\n                    needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n                    state.depth--;\n                }\n            }\n        }\n\n        return needsEval;\n    }\n\n    function groupSeries(series, data) {\n        var result = [],\n            nameTemplate,\n            legacyTemplate = series.groupNameTemplate,\n            groupIx,\n            dataLength = data.length,\n            seriesClone;\n\n        if (defined(legacyTemplate)) {\n            kendo.logToConsole(\n                \"'groupNameTemplate' is obsolete and will be removed in future versions. \" +\n                \"Specify the group name template as 'series.name'\"\n            );\n\n            if (legacyTemplate) {\n                nameTemplate = template(legacyTemplate);\n            }\n        } else {\n            nameTemplate = template(series.name || \"\");\n            if (nameTemplate._slotCount === 0) {\n                nameTemplate = template(defined(series.name) ?\n                    \"#= group.value #: #= series.name #\" :\n                    \"#= group.value #\"\n                );\n            }\n        }\n\n        for (groupIx = 0; groupIx < dataLength; groupIx++) {\n            seriesClone = deepExtend({}, series);\n\n            if (!isFn(seriesClone.color)) {\n                seriesClone.color = undefined;\n            }\n\n            seriesClone._groupIx = groupIx;\n            result.push(seriesClone);\n\n            if (nameTemplate) {\n                seriesClone.name = nameTemplate({\n                    series: seriesClone, group: data[groupIx]\n                });\n            }\n        }\n\n        return result;\n    }\n\n    function filterSeriesByType(series, types) {\n         var i, currentSeries,\n             result = [];\n\n         types = [].concat(types);\n         for (i = 0; i < series.length; i++) {\n             currentSeries = series[i];\n             if (inArray(currentSeries.type, types)) {\n                 result.push(currentSeries);\n             }\n         }\n\n         return result;\n    }\n\n    function indexOf(item, arr) {\n         if (item instanceof Date) {\n             for (var i = 0, length = arr.length; i < length; i++) {\n                 if (dateEquals(arr[i], item)) {\n                     return i;\n                 }\n             }\n\n             return -1;\n         } else {\n             return $.inArray(item, arr);\n         }\n    }\n\n    function sortDates(dates, comparer) {\n         comparer = comparer || dateComparer;\n\n         for (var i = 1, length = dates.length; i < length; i++) {\n             if (comparer(dates[i], dates[i - 1]) < 0) {\n                 dates.sort(comparer);\n                 break;\n             }\n         }\n\n         return dates;\n    }\n\n    // Will mutate srcDates, not cloned for performance\n    function uniqueDates(srcDates, comparer) {\n        var i,\n            dates = sortDates(srcDates, comparer),\n            length = dates.length,\n            result = length > 0 ? [dates[0]] : [];\n\n        comparer = comparer || dateComparer;\n\n        for (i = 1; i < length; i++) {\n            if (comparer(dates[i], last(result)) !== 0) {\n                result.push(dates[i]);\n            }\n        }\n\n        return result;\n    }\n\n    function isDateAxis(axisOptions, sampleCategory) {\n        var type = axisOptions.type,\n            dateCategory = sampleCategory instanceof Date;\n\n        return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\n    }\n\n    function transpose(rows) {\n        var result = [],\n            rowCount = rows.length,\n            rowIx,\n            row,\n            colIx,\n            colCount;\n\n        for (rowIx = 0; rowIx < rowCount; rowIx++) {\n            row = rows[rowIx];\n            colCount = row.length;\n            for (colIx = 0; colIx < colCount; colIx++) {\n                result[colIx] = result[colIx] || [];\n                result[colIx].push(row[colIx]);\n            }\n        }\n\n        return result;\n    }\n\n    function ensureTree(fieldName, target) {\n        if (fieldName.indexOf(\".\") > -1) {\n            var parts = fieldName.split(\".\"),\n                path = \"\",\n                val;\n\n            while (parts.length > 1) {\n                path += parts.shift();\n                val = kendo.getter(path)(target) || {};\n                kendo.setter(path)(target, val);\n                path += \".\";\n            }\n        }\n    }\n\n    function seriesTotal(series) {\n        var data = series.data;\n        var sum = 0;\n\n        for (var i = 0; i < data.length; i++) {\n            var pointData = SeriesBinder.current.bindPoint(series, i);\n            var value = pointData.valueFields.value;\n\n            if (typeof value === STRING) {\n                value = parseFloat(value);\n            }\n\n            if (isNumber(value) && pointData.fields.visible !== false) {\n                sum += math.abs(value);\n            }\n        }\n\n        return sum;\n    }\n\n    function hasGradientOverlay(options) {\n        var overlay = options.overlay;\n        return overlay && overlay.gradient && overlay.gradient != \"none\";\n    }\n\n    function returnSelf() {\n        return this;\n    }\n\n    function anyHasZIndex(elements) {\n        for (var idx = 0; idx < elements.length; idx++) {\n            if (defined(elements[idx].zIndex)) {\n                return true;\n            }\n        }\n    }\n\n    // Exports ================================================================\n    dataviz.ui.plugin(Chart);\n\n    PlotAreaFactory.current.register(CategoricalPlotArea, [\n        BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n        CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT,\n        RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n    ]);\n\n    PlotAreaFactory.current.register(XYPlotArea, [\n        SCATTER, SCATTER_LINE, BUBBLE\n    ]);\n\n    PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n    PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n\n    SeriesBinder.current.register(\n        [BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA],\n        [VALUE], [CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD]\n    );\n\n    SeriesBinder.current.register(\n        [RANGE_COLUMN, RANGE_BAR],\n        [FROM, TO], [CATEGORY, COLOR, NOTE_TEXT]\n    );\n\n    SeriesBinder.current.register(\n        [WATERFALL, HORIZONTAL_WATERFALL],\n        [VALUE], [CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD]\n    );\n\n    DefaultAggregates.current.register(\n        [BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL],\n        { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\n    );\n\n    DefaultAggregates.current.register(\n        [RANGE_COLUMN, RANGE_BAR],\n        { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\n    );\n\n    SeriesBinder.current.register(\n        [SCATTER, SCATTER_LINE, BUBBLE],\n        [X, Y], [COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD]\n    );\n\n    SeriesBinder.current.register(\n        [BUBBLE], [X, Y, \"size\"], [COLOR, CATEGORY, NOTE_TEXT]\n    );\n\n    SeriesBinder.current.register(\n        [CANDLESTICK, OHLC],\n        [\"open\", \"high\", \"low\", \"close\"], [CATEGORY, COLOR, \"downColor\", NOTE_TEXT]\n    );\n\n    DefaultAggregates.current.register(\n        [CANDLESTICK, OHLC],\n        { open: MAX, high: MAX, low: MIN, close: MAX,\n          color: FIRST, downColor: FIRST, noteText: FIRST }\n    );\n\n    SeriesBinder.current.register(\n        [BOX_PLOT],\n        [\"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\"], [CATEGORY, COLOR, NOTE_TEXT]\n    );\n\n    DefaultAggregates.current.register(\n        [BOX_PLOT],\n        { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\n          color: FIRST, noteText: FIRST }\n    );\n\n    SeriesBinder.current.register(\n        [BULLET, VERTICAL_BULLET],\n        [\"current\", \"target\"], [CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT]\n    );\n\n    DefaultAggregates.current.register(\n        [BULLET, VERTICAL_BULLET],\n        { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\n    );\n\n    SeriesBinder.current.register(\n        [PIE, DONUT],\n        [VALUE], [CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\"]\n    );\n\n    deepExtend(dataviz, {\n        EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n\n        Aggregates: Aggregates,\n        AreaChart: AreaChart,\n        AreaSegment: AreaSegment,\n        AxisGroupRangeTracker: AxisGroupRangeTracker,\n        Bar: Bar,\n        BarChart: BarChart,\n        BarLabel: BarLabel,\n        BubbleChart: BubbleChart,\n        Bullet: Bullet,\n        BulletChart: BulletChart,\n        CandlestickChart: CandlestickChart,\n        Candlestick: Candlestick,\n        CategoricalChart: CategoricalChart,\n        CategoricalErrorBar: CategoricalErrorBar,\n        CategoricalPlotArea: CategoricalPlotArea,\n        CategoryAxis: CategoryAxis,\n        ChartContainer: ChartContainer,\n        ClipAnimation: ClipAnimation,\n        ClusterLayout: ClusterLayout,\n        Crosshair: Crosshair,\n        CrosshairTooltip: CrosshairTooltip,\n        DateCategoryAxis: DateCategoryAxis,\n        DateValueAxis: DateValueAxis,\n        DefaultAggregates: DefaultAggregates,\n        DonutChart: DonutChart,\n        DonutPlotArea: DonutPlotArea,\n        DonutSegment: DonutSegment,\n        ErrorBarBase: ErrorBarBase,\n        ErrorRangeCalculator: ErrorRangeCalculator,\n        Highlight: Highlight,\n        SharedTooltip: SharedTooltip,\n        Legend: Legend,\n        LegendItem: LegendItem,\n        LineChart: LineChart,\n        LinePoint: LinePoint,\n        LineSegment: LineSegment,\n        Pane: Pane,\n        PieAnimation: PieAnimation,\n        PieChart: PieChart,\n        PieChartMixin: PieChartMixin,\n        PiePlotArea: PiePlotArea,\n        PieSegment: PieSegment,\n        PlotAreaBase: PlotAreaBase,\n        PlotAreaFactory: PlotAreaFactory,\n        PointEventsMixin: PointEventsMixin,\n        RangeBar: RangeBar,\n        RangeBarChart: RangeBarChart,\n        ScatterChart: ScatterChart,\n        ScatterErrorBar: ScatterErrorBar,\n        ScatterLineChart: ScatterLineChart,\n        Selection: Selection,\n        SeriesAggregator: SeriesAggregator,\n        SeriesBinder: SeriesBinder,\n        ShapeElement: ShapeElement,\n        SplineSegment: SplineSegment,\n        SplineAreaSegment: SplineAreaSegment,\n        StackWrap: StackWrap,\n        Tooltip: Tooltip,\n        OHLCChart: OHLCChart,\n        OHLCPoint: OHLCPoint,\n        WaterfallChart: WaterfallChart,\n        WaterfallSegment: WaterfallSegment,\n        XYPlotArea: XYPlotArea,\n\n        addDuration: addDuration,\n        areNumbers: areNumbers,\n        axisGroupBox: axisGroupBox,\n        categoriesCount: categoriesCount,\n        ceilDate: ceilDate,\n        countNumbers: countNumbers,\n        duration: duration,\n        ensureTree: ensureTree,\n        indexOf: indexOf,\n        isNumber: isNumber,\n        floorDate: floorDate,\n        filterSeriesByType: filterSeriesByType,\n        lteDateIndex: lteDateIndex,\n        evalOptions: evalOptions,\n        seriesTotal: seriesTotal,\n        singleItemOrArray: singleItemOrArray,\n        sortDates: sortDates,\n        startOfWeek: startOfWeek,\n        transpose: transpose,\n        toDate: toDate,\n        toTime: toTime,\n        uniqueDates: uniqueDates\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var math = Math,\n\n        kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        append = util.append,\n\n        draw = kendo.drawing,\n        geom = kendo.geometry,\n        dataviz = kendo.dataviz,\n        AreaSegment = dataviz.AreaSegment,\n        Axis = dataviz.Axis,\n        AxisGroupRangeTracker = dataviz.AxisGroupRangeTracker,\n        BarChart = dataviz.BarChart,\n        Box2D = dataviz.Box2D,\n        CategoryAxis = dataviz.CategoryAxis,\n        CategoricalChart = dataviz.CategoricalChart,\n        CategoricalPlotArea = dataviz.CategoricalPlotArea,\n        ChartElement = dataviz.ChartElement,\n        CurveProcessor = dataviz.CurveProcessor,\n        DonutSegment = dataviz.DonutSegment,\n        LineChart = dataviz.LineChart,\n        LineSegment = dataviz.LineSegment,\n        LogarithmicAxis = dataviz.LogarithmicAxis,\n        NumericAxis = dataviz.NumericAxis,\n        PlotAreaBase = dataviz.PlotAreaBase,\n        PlotAreaFactory = dataviz.PlotAreaFactory,\n        Point2D = dataviz.Point2D,\n        Ring = dataviz.Ring,\n        ScatterChart = dataviz.ScatterChart,\n        ScatterLineChart = dataviz.ScatterLineChart,\n        SeriesBinder = dataviz.SeriesBinder,\n        ShapeBuilder = dataviz.ShapeBuilder,\n        SplineSegment = dataviz.SplineSegment,\n        SplineAreaSegment = dataviz.SplineAreaSegment,\n        getSpacing = dataviz.getSpacing,\n        filterSeriesByType = dataviz.filterSeriesByType,\n        limitValue = util.limitValue,\n        round = dataviz.round;\n\n    // Constants ==============================================================\n    var ARC = \"arc\",\n        BLACK = \"#000\",\n        COORD_PRECISION = dataviz.COORD_PRECISION,\n        DEFAULT_PADDING = 0.15,\n        DEG_TO_RAD = math.PI / 180,\n        LOGARITHMIC = \"log\",\n        PLOT_AREA_CLICK = \"plotAreaClick\",\n        POLAR_AREA = \"polarArea\",\n        POLAR_LINE = \"polarLine\",\n        POLAR_SCATTER = \"polarScatter\",\n        RADAR_AREA = \"radarArea\",\n        RADAR_COLUMN = \"radarColumn\",\n        RADAR_LINE = \"radarLine\",\n        SMOOTH = \"smooth\",\n        X = \"x\",\n        Y = \"y\",\n        ZERO = \"zero\",\n        POLAR_CHARTS = [\n            POLAR_AREA, POLAR_LINE, POLAR_SCATTER\n        ],\n        RADAR_CHARTS = [\n            RADAR_AREA, RADAR_COLUMN, RADAR_LINE\n        ];\n\n    // Polar and radar charts =================================================\n    var GridLinesMixin = {\n        createGridLines: function(altAxis) {\n            var axis = this,\n                options = axis.options,\n                radius = math.abs(axis.box.center().y - altAxis.lineBox().y1),\n                majorAngles,\n                minorAngles,\n                skipMajor = false,\n                gridLines = [];\n\n            if (options.majorGridLines.visible) {\n                majorAngles = axis.majorGridLineAngles(altAxis);\n                skipMajor = true;\n\n                gridLines = axis.renderGridLines(\n                    majorAngles, radius, options.majorGridLines\n                );\n            }\n\n            if (options.minorGridLines.visible) {\n                minorAngles = axis.minorGridLineAngles(altAxis, skipMajor);\n\n                append(gridLines, axis.renderGridLines(\n                    minorAngles, radius, options.minorGridLines\n                ));\n            }\n\n            return gridLines;\n        },\n\n        renderGridLines: function(angles, radius, options) {\n            var style = {\n                stroke: {\n                    width: options.width,\n                    color: options.color,\n                    dashType: options.dashType\n                }\n            };\n\n            var center = this.box.center();\n            var circle = new geom.Circle([center.x, center.y], radius);\n            var container = this.gridLinesVisual();\n\n            for (var i = 0; i < angles.length; i++) {\n                var line = new draw.Path(style);\n\n                line.moveTo(circle.center)\n                    .lineTo(circle.pointAt(angles[i]));\n\n                container.append(line);\n            }\n\n            return container.children;\n        },\n\n        gridLineAngles: function(altAxis, step, skipStep) {\n            var axis = this,\n                divs = axis.intervals(step, skipStep);\n\n            return $.map(divs, function(d) {\n                var alpha = axis.intervalAngle(d);\n\n                if (!altAxis.options.visible || alpha !== 90) {\n                    return alpha;\n                }\n            });\n        }\n    };\n\n    var RadarCategoryAxis = CategoryAxis.extend({\n        options: {\n            startAngle: 90,\n            labels: {\n                margin: getSpacing(10)\n            },\n            majorGridLines: {\n                visible: true\n            },\n            justified: true\n        },\n\n        range: function() {\n            return { min: 0, max: this.options.categories.length };\n        },\n\n        reflow: function(box) {\n            this.box = box;\n            this.reflowLabels();\n        },\n\n        lineBox: function() {\n            return this.box;\n        },\n\n        reflowLabels: function() {\n            var axis = this,\n                measureBox = new Box2D(),\n                labels = axis.labels,\n                labelBox,\n                i;\n\n            for (i = 0; i < labels.length; i++) {\n                labels[i].reflow(measureBox);\n                labelBox = labels[i].box;\n\n                labels[i].reflow(axis.getSlot(i).adjacentBox(\n                    0, labelBox.width(), labelBox.height()\n                ));\n            }\n        },\n\n        intervals: function(step, skipStep) {\n            var axis = this,\n                options = axis.options,\n                categories = options.categories.length,\n                angle = 0,\n                skipAngle = 0,\n                divCount = categories / step || 1,\n                divAngle = 360 / divCount,\n                divs = [],\n                i;\n\n            if (skipStep) {\n                skipAngle = 360 / (categories / skipStep);\n            }\n\n            for (i = 0; i < divCount; i++) {\n                angle = round(angle, COORD_PRECISION);\n\n                if (angle % skipAngle !== 0) {\n                    divs.push(angle % 360);\n                }\n\n                if (options.reverse) {\n                    angle = 360 + angle - divAngle;\n                } else {\n                    angle += divAngle;\n                }\n            }\n\n            return divs;\n        },\n\n        majorIntervals: function() {\n            return this.intervals(1);\n        },\n\n        minorIntervals: function() {\n            return this.intervals(0.5);\n        },\n\n        intervalAngle: function(interval) {\n            return (360 + interval + this.options.startAngle) % 360;\n        },\n\n        majorAngles: function() {\n            return $.map(this.majorIntervals(), $.proxy(this.intervalAngle, this));\n        },\n\n        createLine: function() {\n            return [];\n        },\n\n        majorGridLineAngles: function(altAxis) {\n            return this.gridLineAngles(altAxis, 1);\n        },\n\n        minorGridLineAngles: function(altAxis, skipMajor) {\n            return this.gridLineAngles(altAxis, 0.5, skipMajor ? 1 : 0);\n        },\n\n        createPlotBands: function() {\n            var axis = this,\n                options = axis.options,\n                plotBands = options.plotBands || [],\n                i,\n                band,\n                slot,\n                singleSlot,\n                head,\n                tail;\n\n            var group = this._plotbandGroup = new draw.Group({\n                zIndex: -1\n            });\n\n            for (i = 0; i < plotBands.length; i++) {\n                band = plotBands[i];\n                slot = axis.plotBandSlot(band);\n                singleSlot = axis.getSlot(band.from);\n\n                head = band.from - math.floor(band.from);\n                slot.startAngle += head * singleSlot.angle;\n\n                tail = math.ceil(band.to) - band.to;\n                slot.angle -= (tail + head) * singleSlot.angle;\n\n                var ring = ShapeBuilder.current.createRing(slot, {\n                    fill: {\n                        color: band.color,\n                        opacity: band.opacity\n                    },\n                    stroke: {\n                        opacity: band.opacity\n                    }\n                });\n                group.append(ring);\n            }\n\n            axis.appendVisual(group);\n        },\n\n        plotBandSlot: function(band) {\n            return this.getSlot(band.from, band.to - 1);\n        },\n\n        getSlot: function(from, to) {\n            var axis = this,\n                options = axis.options,\n                justified = options.justified,\n                box = axis.box,\n                divs = axis.majorAngles(),\n                totalDivs = divs.length,\n                slots,\n                slotAngle = 360 / totalDivs,\n                slotStart,\n                angle;\n\n            if (options.reverse && !justified) {\n                from = (from + 1) % totalDivs;\n            }\n\n            from = limitValue(math.floor(from), 0, totalDivs - 1);\n            slotStart = divs[from];\n\n            if (justified) {\n                slotStart = slotStart - slotAngle / 2;\n\n                if (slotStart < 0) {\n                    slotStart += 360;\n                }\n            }\n\n            to = limitValue(math.ceil(to || from), from, totalDivs - 1);\n            slots = to - from + 1;\n            angle = slotAngle * slots;\n\n            return new Ring(\n                box.center(), 0, box.height() / 2,\n                slotStart, angle\n            );\n        },\n\n        pointCategoryIndex: function(point) {\n            var axis = this,\n                index = null,\n                i,\n                length = axis.options.categories.length,\n                slot;\n\n            for (i = 0; i < length; i++) {\n                slot = axis.getSlot(i);\n                if (slot.containsPoint(point)) {\n                    index = i;\n                    break;\n                }\n            }\n\n            return index;\n        }\n    });\n    deepExtend(RadarCategoryAxis.fn, GridLinesMixin);\n\n    var RadarNumericAxisMixin = {\n        options: {\n            majorGridLines: {\n                visible: true\n            }\n        },\n\n        createPlotBands: function() {\n            var axis = this,\n                options = axis.options,\n                plotBands = options.plotBands || [],\n                type = options.majorGridLines.type,\n                altAxis = axis.plotArea.polarAxis,\n                majorAngles = altAxis.majorAngles(),\n                center = altAxis.box.center(),\n                i,\n                band,\n                bandStyle,\n                slot,\n                ring;\n\n            var group = this._plotbandGroup = new draw.Group({\n                zIndex: -1\n            });\n\n            for (i = 0; i < plotBands.length; i++) {\n                band = plotBands[i];\n                bandStyle = {\n                    fill: {\n                        color: band.color,\n                        opacity: band.opacity\n                    },\n                    stroke: {\n                        opacity: band.opacity\n                    }\n                };\n\n                slot = axis.getSlot(band.from, band.to, true);\n                ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n\n                var shape;\n                if (type === ARC) {\n                    shape = ShapeBuilder.current.createRing(ring, bandStyle);\n                } else {\n                    shape = draw.Path.fromPoints(\n                            axis.plotBandPoints(ring, majorAngles), bandStyle\n                    ).close();\n                }\n\n                group.append(shape);\n            }\n\n            axis.appendVisual(group);\n        },\n\n        plotBandPoints: function(ring, angles) {\n            var innerPoints = [],\n                outerPoints = [];\n\n            var center = [ring.c.x, ring.c.y];\n            var innerCircle = new geom.Circle(center, ring.ir);\n            var outerCircle = new geom.Circle(center, ring.r);\n\n            for (var i = 0; i < angles.length; i++) {\n                innerPoints.push(innerCircle.pointAt(angles[i]));\n                outerPoints.push(outerCircle.pointAt(angles[i]));\n            }\n\n            innerPoints.reverse();\n            innerPoints.push(innerPoints[0]);\n            outerPoints.push(outerPoints[0]);\n\n            return outerPoints.concat(innerPoints);\n        },\n\n        createGridLines: function(altAxis) {\n            var axis = this,\n                options = axis.options,\n                majorTicks = axis.radarMajorGridLinePositions(),\n                majorAngles = altAxis.majorAngles(),\n                minorTicks,\n                center = altAxis.box.center(),\n                gridLines = [];\n\n            if (options.majorGridLines.visible) {\n                gridLines = axis.renderGridLines(\n                    center, majorTicks, majorAngles, options.majorGridLines\n                );\n            }\n\n            if (options.minorGridLines.visible) {\n                minorTicks = axis.radarMinorGridLinePositions();\n                append(gridLines, axis.renderGridLines(\n                    center, minorTicks, majorAngles, options.minorGridLines\n                ));\n            }\n\n            return gridLines;\n        },\n\n        renderGridLines: function(center, ticks, angles, options) {\n            var axis = this,\n                tickRadius,\n                tickIx,\n                angleIx;\n\n            var style = {\n                stroke: {\n                    width: options.width,\n                    color: options.color,\n                    dashType: options.dashType\n                }\n            };\n\n            var container = this.gridLinesVisual();\n            for (tickIx = 0; tickIx < ticks.length; tickIx++) {\n                tickRadius = center.y - ticks[tickIx];\n                if(tickRadius > 0) {\n                    var circle = new geom.Circle([center.x, center.y], tickRadius);\n                    if (options.type === ARC) {\n                        container.append(new draw.Circle(circle, style));\n                    } else {\n                        var line = new draw.Path(style);\n                        for (angleIx = 0; angleIx < angles.length; angleIx++) {\n                            line.lineTo(circle.pointAt(angles[angleIx]));\n                        }\n\n                        line.close();\n                        container.append(line);\n                    }\n                }\n            }\n\n            return container.children;\n        },\n\n        getValue: function(point) {\n            var axis = this,\n                options = axis.options,\n                lineBox = axis.lineBox(),\n                altAxis = axis.plotArea.polarAxis,\n                majorAngles = altAxis.majorAngles(),\n                center = altAxis.box.center(),\n                r = point.distanceTo(center),\n                distance = r;\n\n            if (options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n                var dx = point.x - center.x,\n                    dy = point.y - center.y,\n                    theta = (math.atan2(dy, dx) / DEG_TO_RAD + 540) % 360;\n\n                majorAngles.sort(function(a, b) {\n                    return angularDistance(a, theta) - angularDistance(b, theta);\n                });\n\n                // Solve triangle (center, point, axis X) using one side (r) and two angles.\n                // Angles are derived from triangle (center, point, gridline X)\n                var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2,\n                    alpha = angularDistance(theta, majorAngles[0]),\n                    gamma = 90 - midAngle,\n                    beta = 180 - alpha - gamma;\n\n                distance = r * (math.sin(beta * DEG_TO_RAD) / math.sin(gamma * DEG_TO_RAD));\n            }\n\n            return axis.axisType().fn.getValue.call(\n                axis, new Point2D(lineBox.x1, lineBox.y2 - distance)\n            );\n        }\n    };\n\n    var RadarNumericAxis = NumericAxis.extend({\n        radarMajorGridLinePositions: function() {\n            return this.getTickPositions(this.options.majorUnit);\n        },\n\n        radarMinorGridLinePositions: function() {\n            var axis = this,\n                options = axis.options,\n                minorSkipStep = 0;\n            if (options.majorGridLines.visible) {\n                minorSkipStep = options.majorUnit;\n            }\n            return axis.getTickPositions(options.minorUnit, minorSkipStep);\n        },\n\n        axisType: function() {\n            return NumericAxis;\n        }\n    });\n\n    deepExtend(RadarNumericAxis.fn, RadarNumericAxisMixin);\n\n    var RadarLogarithmicAxis = LogarithmicAxis.extend({\n        radarMajorGridLinePositions: function() {\n            var axis = this,\n                positions = [];\n\n            axis.traverseMajorTicksPositions(function(position) {\n                positions.push(position);\n            }, axis.options.majorGridLines);\n\n            return positions;\n        },\n\n        radarMinorGridLinePositions: function() {\n            var axis = this,\n                positions = [];\n\n            axis.traverseMinorTicksPositions(function(position) {\n                positions.push(position);\n            }, axis.options.minorGridLines);\n\n            return positions;\n        },\n\n        axisType: function() {\n            return LogarithmicAxis;\n        }\n    });\n\n    deepExtend(RadarLogarithmicAxis.fn, RadarNumericAxisMixin);\n\n    var PolarAxis = Axis.extend({\n        init: function(options) {\n            var axis = this;\n\n            Axis.fn.init.call(axis, options);\n            options = axis.options;\n\n            options.minorUnit = options.minorUnit || axis.options.majorUnit / 2;\n        },\n\n        options: {\n            type: \"polar\",\n            startAngle: 0,\n            reverse: false,\n            majorUnit: 60,\n            min: 0,\n            max: 360,\n            labels: {\n                margin: getSpacing(10)\n            },\n            majorGridLines: {\n                color: BLACK,\n                visible: true,\n                width: 1\n            },\n            minorGridLines: {\n                color: \"#aaa\"\n            }\n        },\n\n        getDivisions: function(stepValue) {\n            return NumericAxis.fn.getDivisions.call(this, stepValue) - 1;\n        },\n\n        reflow: function(box) {\n            this.box = box;\n            this.reflowLabels();\n        },\n\n        reflowLabels: function() {\n            var axis = this,\n                measureBox = new Box2D(),\n                divs = axis.majorIntervals(),\n                labels = axis.labels,\n                labelBox,\n                i;\n\n            for (i = 0; i < labels.length; i++) {\n                labels[i].reflow(measureBox);\n                labelBox = labels[i].box;\n\n                labels[i].reflow(axis.getSlot(divs[i]).adjacentBox(\n                    0, labelBox.width(), labelBox.height()\n                ));\n            }\n        },\n\n        lineBox: function() {\n            return this.box;\n        },\n\n        intervals: function(step, skipStep) {\n            var axis = this,\n                options = axis.options,\n                divisions = axis.getDivisions(step),\n                angle = options.min,\n                divs = [],\n                i;\n\n            if (skipStep) {\n                skipStep = skipStep / step;\n            }\n\n            for (i = 0; i < divisions; i++) {\n                if (i % skipStep !== 0) {\n                    divs.push((360 + angle) % 360);\n                }\n\n                angle += step;\n            }\n\n            return divs;\n        },\n\n        majorIntervals: function() {\n            return this.intervals(this.options.majorUnit);\n        },\n\n        minorIntervals: function() {\n            return this.intervals(this.options.minorUnit);\n        },\n\n        intervalAngle: function(i) {\n            return (360 + i - this.options.startAngle) % 360;\n        },\n\n        majorAngles: RadarCategoryAxis.fn.majorAngles,\n\n        createLine: function() {\n            return [];\n        },\n\n        majorGridLineAngles: function(altAxis) {\n            return this.gridLineAngles(altAxis, this.options.majorUnit);\n        },\n\n        minorGridLineAngles: function(altAxis, skipMajor) {\n            return this.gridLineAngles(altAxis, this.options.minorUnit,\n                      skipMajor ? this.options.majorUnit : 0);\n        },\n\n        createPlotBands: RadarCategoryAxis.fn.createPlotBands,\n\n        plotBandSlot: function(band) {\n            return this.getSlot(band.from, band.to);\n        },\n\n        getSlot: function(a, b) {\n            var axis = this,\n                options = axis.options,\n                start = options.startAngle,\n                box = axis.box,\n                tmp;\n\n            a = limitValue(a, options.min, options.max);\n            b = limitValue(b || a, a, options.max);\n\n            if (options.reverse) {\n                a *= -1;\n                b *= -1;\n            }\n\n            a = (540 - a - start) % 360;\n            b = (540 - b - start) % 360;\n\n            if (b < a) {\n                tmp = a;\n                a = b;\n                b = tmp;\n            }\n\n            return new Ring(\n                box.center(), 0, box.height() / 2,\n                a, b - a\n            );\n        },\n\n        getValue: function(point) {\n            var axis = this,\n                options = axis.options,\n                center = axis.box.center(),\n                dx = point.x - center.x,\n                dy = point.y - center.y,\n                theta = math.round(math.atan2(dy, dx) / DEG_TO_RAD),\n                start = options.startAngle;\n\n            if (!options.reverse) {\n                theta *= -1;\n                start *= -1;\n            }\n\n            return (theta + start + 360) % 360;\n        },\n\n        labelsCount: NumericAxis.fn.labelsCount,\n        createAxisLabel: NumericAxis.fn.createAxisLabel\n    });\n    deepExtend(PolarAxis.fn, GridLinesMixin);\n\n    var RadarClusterLayout = ChartElement.extend({\n        options: {\n            gap: 1,\n            spacing: 0\n        },\n\n        reflow: function(sector) {\n            var cluster = this,\n                options = cluster.options,\n                children = cluster.children,\n                gap = options.gap,\n                spacing = options.spacing,\n                count = children.length,\n                slots = count + gap + (spacing * (count - 1)),\n                slotAngle = sector.angle / slots,\n                slotSector,\n                angle = sector.startAngle + slotAngle * (gap / 2),\n                i;\n\n            for (i = 0; i < count; i++) {\n                slotSector = sector.clone();\n                slotSector.startAngle = angle;\n                slotSector.angle = slotAngle;\n\n                if (children[i].sector) {\n                    slotSector.r = children[i].sector.r;\n                }\n\n                children[i].reflow(slotSector);\n                children[i].sector = slotSector;\n\n                angle += slotAngle + (slotAngle * spacing);\n            }\n        }\n    });\n\n    var RadarStackLayout = ChartElement.extend({\n        reflow: function(sector) {\n            var stack = this,\n                reverse = stack.options.isReversed,\n                children = stack.children,\n                childrenCount = children.length,\n                childSector,\n                i,\n                first = reverse ? childrenCount - 1 : 0,\n                step = reverse ? -1 : 1;\n\n            stack.box = new Box2D();\n\n            for (i = first; i >= 0 && i < childrenCount; i += step) {\n                childSector = children[i].sector;\n                childSector.startAngle = sector.startAngle;\n                childSector.angle = sector.angle;\n            }\n        }\n    });\n\n    var RadarSegment = DonutSegment.extend({\n        init: function(value, options) {\n            DonutSegment.fn.init.call(this, value, null, options);\n        },\n\n        options: {\n            overlay: {\n                gradient: null\n            },\n            labels: {\n                distance: 10\n            }\n        }\n    });\n\n    var RadarBarChart = BarChart.extend({\n        pointType: function() {\n            return RadarSegment;\n        },\n\n        clusterType: function() {\n            return RadarClusterLayout;\n        },\n\n        stackType: function() {\n            return RadarStackLayout;\n        },\n\n        categorySlot: function(categoryAxis, categoryIx) {\n            return categoryAxis.getSlot(categoryIx);\n        },\n\n        pointSlot: function(categorySlot, valueSlot) {\n            var slot = categorySlot.clone(),\n                y = categorySlot.c.y;\n\n            slot.r = y - valueSlot.y1;\n            slot.ir = y - valueSlot.y2;\n\n            return slot;\n        },\n\n        reflow: CategoricalChart.fn.reflow,\n\n        reflowPoint: function(point, pointSlot) {\n            point.sector = pointSlot;\n            point.reflow();\n        },\n\n        options: {\n            clip: false,\n            animation: {\n                type: \"pie\"\n            }\n        },\n\n        createAnimation: function() {\n            this.options.animation.center = this.box.toRect().center();\n            BarChart.fn.createAnimation.call(this);\n        }\n    });\n\n    var RadarLineChart = LineChart.extend({\n        options: {\n            clip: false\n        },\n\n        pointSlot: function(categorySlot, valueSlot) {\n            var valueRadius = categorySlot.c.y - valueSlot.y1,\n                slot = Point2D.onCircle(categorySlot.c, categorySlot.middle(), valueRadius);\n\n            return new Box2D(slot.x, slot.y, slot.x, slot.y);\n        },\n\n        createSegment: function(linePoints, currentSeries, seriesIx) {\n            var segment,\n                pointType,\n                style = currentSeries.style;\n\n            if(style == SMOOTH){\n                pointType = SplineSegment;\n            } else {\n                pointType = LineSegment;\n            }\n\n            segment = new pointType(linePoints, currentSeries, seriesIx);\n\n            if (linePoints.length === currentSeries.data.length) {\n                segment.options.closed = true;\n            }\n\n            return segment;\n        }\n    });\n\n    var RadarAreaSegment = AreaSegment.extend({\n        points: function() {\n            return LineSegment.fn.points.call(this, this.stackPoints);\n        }\n    });\n\n    var SplineRadarAreaSegment = SplineAreaSegment.extend({\n        areaPoints: function() {\n            return [];\n        }\n    });\n\n    var RadarAreaChart = RadarLineChart.extend({\n        createSegment: function(linePoints, currentSeries, seriesIx, prevSegment) {\n            var chart = this,\n                options = chart.options,\n                isStacked = options.isStacked,\n                stackPoints,\n                segment,\n                style = (currentSeries.line || {}).style;\n\n            if(style === SMOOTH){\n                segment = new SplineRadarAreaSegment(linePoints, prevSegment, isStacked, currentSeries, seriesIx);\n                segment.options.closed = true;\n            }\n            else {\n                if (isStacked && seriesIx > 0 && prevSegment) {\n                    stackPoints = prevSegment.linePoints.slice(0).reverse();\n                }\n\n                linePoints.push(linePoints[0]);\n                segment = new RadarAreaSegment(linePoints, stackPoints, currentSeries, seriesIx);\n            }\n\n            return segment;\n        },\n\n        seriesMissingValues: function(series) {\n            return series.missingValues || ZERO;\n        }\n    });\n\n    var PolarScatterChart = ScatterChart.extend({\n        pointSlot: function(slotX, slotY) {\n            var valueRadius = slotX.c.y - slotY.y1,\n                slot = Point2D.onCircle(slotX.c, slotX.startAngle, valueRadius);\n\n            return new Box2D(slot.x, slot.y, slot.x, slot.y);\n        },\n        options: {\n            clip: false\n        }\n    });\n\n    var PolarLineChart = ScatterLineChart.extend({\n        pointSlot: PolarScatterChart.fn.pointSlot,\n        options: {\n            clip: false\n        }\n    });\n\n    var PolarAreaSegment = AreaSegment.extend({\n        points: function() {\n            var segment = this,\n                chart = segment.parent,\n                plotArea = chart.plotArea,\n                polarAxis = plotArea.polarAxis,\n                center = polarAxis.box.center(),\n                stackPoints = segment.stackPoints,\n                points = LineSegment.fn.points.call(segment, stackPoints);\n\n            points.unshift([center.x, center.y]);\n            points.push([center.x, center.y]);\n\n            return points;\n        }\n    });\n\n    var SplinePolarAreaSegment = SplineAreaSegment.extend({\n        areaPoints: function(){\n             var segment = this,\n                chart = segment.parent,\n                plotArea = chart.plotArea,\n                polarAxis = plotArea.polarAxis,\n                center = polarAxis.box.center();\n            return [center];\n        },\n        points: function() {\n            var segment = this,\n                chart = segment.parent,\n                plotArea = chart.plotArea,\n                polarAxis = plotArea.polarAxis,\n                center = polarAxis.box.center(),\n                curvePoints,\n                curveProcessor = new CurveProcessor(false),\n                linePoints = LineSegment.fn.points.call(this);\n                linePoints.push(center);\n\n            curvePoints = curveProcessor.process(linePoints);\n            curvePoints.splice(curvePoints.length - 3, curvePoints.length - 1);\n            segment.curvePoints = curvePoints;\n            return curvePoints;\n        }\n    });\n\n    var PolarAreaChart = PolarLineChart.extend({\n        createSegment: function(linePoints, currentSeries, seriesIx) {\n            var segment,\n                style = (currentSeries.line || {}).style;\n            if(style == SMOOTH){\n                segment = new SplinePolarAreaSegment(linePoints, null, false, currentSeries, seriesIx);\n            }\n            else{\n                segment = new PolarAreaSegment(linePoints, [], currentSeries, seriesIx);\n            }\n            return segment;\n        },\n\n        seriesMissingValues: function(series) {\n            return series.missingValues || ZERO;\n        },\n\n        sortPoints: function(points) {\n            return points.sort(xComparer);\n        }\n    });\n\n    var PolarPlotAreaBase = PlotAreaBase.extend({\n        init: function(series, options) {\n            var plotArea = this;\n\n            plotArea.valueAxisRangeTracker = new AxisGroupRangeTracker();\n\n            PlotAreaBase.fn.init.call(plotArea, series, options);\n        },\n\n        render: function() {\n            var plotArea = this;\n\n            plotArea.addToLegend(plotArea.series);\n            plotArea.createPolarAxis();\n            plotArea.createCharts();\n            plotArea.createValueAxis();\n        },\n\n        createValueAxis: function() {\n            var plotArea = this,\n                tracker = plotArea.valueAxisRangeTracker,\n                defaultRange = tracker.query(),\n                range,\n                valueAxis,\n                axisOptions = plotArea.valueAxisOptions({\n                    roundToMajorUnit: false, zIndex: -1\n                }),\n                axisType,\n                axisDefaultRange;\n\n            if (axisOptions.type === LOGARITHMIC) {\n                axisType = RadarLogarithmicAxis;\n                axisDefaultRange = {min: 0.1, max: 1};\n            } else {\n                axisType = RadarNumericAxis;\n                axisDefaultRange = {min: 0, max: 1};\n            }\n\n            range = tracker.query(name) || defaultRange || axisDefaultRange;\n\n            if (range && defaultRange) {\n                range.min = math.min(range.min, defaultRange.min);\n                range.max = math.max(range.max, defaultRange.max);\n            }\n\n            valueAxis = new axisType(\n                range.min, range.max,\n                axisOptions\n            );\n\n            plotArea.valueAxis = valueAxis;\n            plotArea.appendAxis(valueAxis);\n        },\n\n        reflowAxes: function () {\n            var plotArea = this,\n                options = plotArea.options.plotArea,\n                valueAxis = plotArea.valueAxis,\n                polarAxis = plotArea.polarAxis,\n                box = plotArea.box,\n                defaultPadding = math.min(box.width(), box.height()) * DEFAULT_PADDING,\n                padding = getSpacing(options.padding || {}, defaultPadding),\n                axisBox = box.clone().unpad(padding),\n                valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\n            polarAxis.reflow(axisBox);\n            valueAxis.reflow(valueAxisBox);\n            var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n            valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n\n            plotArea.axisBox = axisBox;\n            plotArea.alignAxes(axisBox);\n        },\n\n        alignAxes: function() {\n            var plotArea = this,\n                valueAxis = plotArea.valueAxis,\n                slot = valueAxis.getSlot(valueAxis.options.min),\n                slotEdge = valueAxis.options.reverse ? 2 : 1,\n                center = plotArea.polarAxis.getSlot(0).c,\n                box = valueAxis.box.translate(\n                    center.x - slot[X + slotEdge],\n                    center.y - slot[Y + slotEdge]\n                );\n\n            valueAxis.reflow(box);\n        },\n\n        backgroundBox: function() {\n            return this.box;\n        }\n    });\n\n    var RadarPlotArea = PolarPlotAreaBase.extend({\n        options: {\n            categoryAxis: {\n                categories: []\n            },\n            valueAxis: {}\n        },\n\n        createPolarAxis: function() {\n            var plotArea = this,\n                categoryAxis;\n\n            categoryAxis = new RadarCategoryAxis(plotArea.options.categoryAxis);\n\n            plotArea.polarAxis = categoryAxis;\n            plotArea.categoryAxis = categoryAxis;\n            plotArea.appendAxis(categoryAxis);\n        },\n\n        valueAxisOptions: function(defaults) {\n            var plotArea = this;\n\n            if (plotArea._hasBarCharts) {\n                deepExtend(defaults, {\n                    majorGridLines: { type: ARC },\n                    minorGridLines: { type: ARC }\n                });\n            }\n\n            if (plotArea._isStacked100) {\n                deepExtend(defaults, {\n                    roundToMajorUnit: false,\n                    labels: { format: \"P0\" }\n                });\n            }\n\n            return deepExtend(defaults, plotArea.options.valueAxis);\n        },\n\n        appendChart: CategoricalPlotArea.fn.appendChart,\n\n        createCharts: function() {\n            var plotArea = this,\n                series = plotArea.filterVisibleSeries(plotArea.series),\n                pane = plotArea.panes[0];\n\n            plotArea.createAreaChart(\n                filterSeriesByType(series, [RADAR_AREA]),\n                pane\n            );\n\n            plotArea.createLineChart(\n                filterSeriesByType(series, [RADAR_LINE]),\n                pane\n            );\n\n            plotArea.createBarChart(\n                filterSeriesByType(series, [RADAR_COLUMN]),\n                pane\n            );\n        },\n\n        chartOptions: function(series) {\n            var options = { series: series };\n            var firstSeries = series[0];\n            if (firstSeries) {\n                var filteredSeries = this.filterVisibleSeries(series);\n                var stack = firstSeries.stack;\n                options.isStacked = stack && filteredSeries.length > 1;\n                options.isStacked100 = stack && stack.type === \"100%\" && filteredSeries.length > 1;\n\n                if (options.isStacked100) {\n                    this._isStacked100 = true;\n                }\n            }\n\n            return options;\n        },\n\n        createAreaChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n            this.appendChart(areaChart, pane);\n        },\n\n        createLineChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var lineChart = new RadarLineChart(this, this.chartOptions(series));\n            this.appendChart(lineChart, pane);\n        },\n\n        createBarChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var firstSeries = series[0];\n            var options = this.chartOptions(series);\n            options.gap = firstSeries.gap;\n            options.spacing = firstSeries.spacing;\n\n            var barChart = new RadarBarChart(this, options);\n            this.appendChart(barChart, pane);\n\n            this._hasBarCharts = true;\n        },\n\n        seriesCategoryAxis: function() {\n            return this.categoryAxis;\n        },\n\n        click: function(chart, e) {\n            var plotArea = this,\n                coords = chart._eventCoordinates(e),\n                point = new Point2D(coords.x, coords.y),\n                category,\n                value;\n\n            category = plotArea.categoryAxis.getCategory(point);\n            value = plotArea.valueAxis.getValue(point);\n\n            if (category !== null && value !== null) {\n                chart.trigger(PLOT_AREA_CLICK, {\n                    element: $(e.target),\n                    category: category,\n                    value: value\n                });\n            }\n        },\n\n        createCrosshairs: $.noop\n    });\n\n    var PolarPlotArea = PolarPlotAreaBase.extend({\n        options: {\n            xAxis: {},\n            yAxis: {}\n        },\n\n        createPolarAxis: function() {\n            var plotArea = this,\n                polarAxis;\n\n            polarAxis = new PolarAxis(plotArea.options.xAxis);\n\n            plotArea.polarAxis = polarAxis;\n            plotArea.axisX = polarAxis;\n            plotArea.appendAxis(polarAxis);\n        },\n\n        valueAxisOptions: function(defaults) {\n            var plotArea = this;\n\n            return deepExtend(defaults, {\n                    majorGridLines: { type: ARC },\n                    minorGridLines: { type: ARC }\n                }, plotArea.options.yAxis\n            );\n        },\n\n        createValueAxis: function() {\n            var plotArea = this;\n\n            PolarPlotAreaBase.fn.createValueAxis.call(plotArea);\n            plotArea.axisY = plotArea.valueAxis;\n        },\n\n        appendChart: function(chart, pane) {\n            var plotArea = this;\n\n            plotArea.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n            PlotAreaBase.fn.appendChart.call(plotArea, chart, pane);\n        },\n\n        createCharts: function() {\n            var plotArea = this,\n                series = plotArea.filterVisibleSeries(plotArea.series),\n                pane = plotArea.panes[0];\n\n            plotArea.createLineChart(\n                filterSeriesByType(series, [POLAR_LINE]),\n                pane\n            );\n\n            plotArea.createScatterChart(\n                filterSeriesByType(series, [POLAR_SCATTER]),\n                pane\n            );\n\n            plotArea.createAreaChart(\n                filterSeriesByType(series, [POLAR_AREA]),\n                pane\n            );\n        },\n\n        createLineChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                lineChart = new PolarLineChart(plotArea, { series: series });\n\n            plotArea.appendChart(lineChart, pane);\n        },\n\n        createScatterChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                scatterChart = new PolarScatterChart(plotArea, { series: series });\n\n            plotArea.appendChart(scatterChart, pane);\n        },\n\n        createAreaChart: function(series, pane) {\n            if (series.length === 0) {\n                return;\n            }\n\n            var plotArea = this,\n                areaChart = new PolarAreaChart(plotArea, { series: series });\n\n            plotArea.appendChart(areaChart, pane);\n        },\n\n        click: function(chart, e) {\n            var plotArea = this,\n                coords = chart._eventCoordinates(e),\n                point = new Point2D(coords.x, coords.y),\n                xValue,\n                yValue;\n\n            xValue = plotArea.axisX.getValue(point);\n            yValue = plotArea.axisY.getValue(point);\n\n            if (xValue !== null && yValue !== null) {\n                chart.trigger(PLOT_AREA_CLICK, {\n                    element: $(e.target),\n                    x: xValue,\n                    y: yValue\n                });\n            }\n        },\n\n        createCrosshairs: $.noop\n    });\n\n    // Helpers ================================================================\n    function xComparer(a, b) {\n        return a.value.x - b.value.x;\n    }\n\n    function angularDistance(a, b) {\n        return 180 - math.abs(math.abs(a - b) - 180);\n    }\n\n    // Exports ================================================================\n    PlotAreaFactory.current.register(PolarPlotArea, POLAR_CHARTS);\n    PlotAreaFactory.current.register(RadarPlotArea, RADAR_CHARTS);\n\n    SeriesBinder.current.register(POLAR_CHARTS, [X, Y], [\"color\"]);\n    SeriesBinder.current.register(RADAR_CHARTS, [\"value\"], [\"color\"]);\n\n    dataviz.DefaultAggregates.current.register(\n        RADAR_CHARTS,\n        { value: \"max\", color: \"first\" }\n    );\n\n    deepExtend(dataviz, {\n        PolarAreaChart: PolarAreaChart,\n        PolarAxis: PolarAxis,\n        PolarLineChart: PolarLineChart,\n        PolarPlotArea: PolarPlotArea,\n        RadarAreaChart: RadarAreaChart,\n        RadarBarChart: RadarBarChart,\n        RadarCategoryAxis: RadarCategoryAxis,\n        RadarClusterLayout: RadarClusterLayout,\n        RadarLineChart: RadarLineChart,\n        RadarNumericAxis: RadarNumericAxis,\n        RadarPlotArea: RadarPlotArea,\n        SplinePolarAreaSegment:  SplinePolarAreaSegment,\n        SplineRadarAreaSegment: SplineRadarAreaSegment,\n        RadarStackLayout: RadarStackLayout\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n\n    // Imports ================================================================\n    var kendo = window.kendo,\n        deepExtend = kendo.deepExtend,\n        extend = $.extend,\n        isFn = kendo.isFunction,\n        template = kendo.template,\n\n        util = kendo.util,\n        append = util.append,\n\n        draw = kendo.drawing,\n        geom = kendo.geometry,\n        dataviz = kendo.dataviz,\n        Color = kendo.drawing.Color,\n        ChartElement = dataviz.ChartElement,\n        PieChartMixin = dataviz.PieChartMixin,\n        PlotAreaBase = dataviz.PlotAreaBase,\n        PlotAreaFactory = dataviz.PlotAreaFactory,\n        Point2D = dataviz.Point2D,\n        Box2D = dataviz.Box2D,\n        SeriesBinder = dataviz.SeriesBinder,\n        TextBox = dataviz.TextBox,\n        autoFormat = dataviz.autoFormat,\n        evalOptions = dataviz.evalOptions,\n        limitValue = util.limitValue,\n        seriesTotal = dataviz.seriesTotal;\n\n    // Constants ==============================================================\n    var CATEGORY = \"category\",\n        COLOR = \"color\",\n        FUNNEL = \"funnel\",\n        VALUE = \"value\",\n        BLACK = \"black\",\n        WHITE = \"white\";\n\n    // Funnel chart ===========================================================\n    var FunnelPlotArea = PlotAreaBase.extend({\n        render: function() {\n            var plotArea = this,\n                series = plotArea.series;\n\n            plotArea.createFunnelChart(series);\n        },\n\n        createFunnelChart: function(series) {\n            var plotArea = this,\n                firstSeries = series[0],\n                funnelChart = new FunnelChart(plotArea, {\n                    series: series,\n                    legend: plotArea.options.legend,\n                    neckRatio: firstSeries.neckRatio,\n                    dynamicHeight: firstSeries.dynamicHeight,\n                    dynamicSlope:firstSeries.dynamicSlope,\n                    segmentSpacing:firstSeries.segmentSpacing,\n                    highlight:firstSeries.highlight\n                });\n\n            plotArea.appendChart(funnelChart);\n        },\n\n        appendChart: function(chart, pane) {\n            PlotAreaBase.fn.appendChart.call(this, chart, pane);\n            append(this.options.legend.items, chart.legendItems);\n        }\n    });\n\n    var FunnelChart = ChartElement.extend({\n        init: function(plotArea, options) {\n            var chart = this;\n\n            ChartElement.fn.init.call(chart, options);\n\n            chart.plotArea = plotArea;\n            chart.points = [];\n            chart.labels = [];\n            chart.legendItems = [];\n            chart.render();\n        },\n\n        options: {\n            neckRatio: 0.3,\n            width: 300,\n            dynamicSlope:false,\n            dynamicHeight:true,\n            segmentSpacing:0,\n            labels: {\n                visible: false,\n                align: \"center\",\n                position: \"center\"\n            }\n        },\n\n        formatPointValue:function(point,format){\n            return autoFormat(format,point.value);\n        },\n\n        render: function() {\n            var chart = this,\n                options = chart.options,\n                colors = chart.plotArea.options.seriesColors || [],\n                colorsCount = colors.length,\n                series = options.series[0],\n                pointData, fields,\n                data = series.data;\n\n            if(!data){\n                return;\n            }\n\n            var total = seriesTotal(series),\n                value,\n                i;\n\n            for (i = 0; i < data.length; i++) {\n                pointData = SeriesBinder.current.bindPoint(series, i);\n                value = pointData.valueFields.value;\n\n                if (value === null || value === undefined) {\n                   continue;\n                }\n\n                fields = pointData.fields;\n\n                if (!isFn(series.color)) {\n                    series.color = fields.color || colors[i % colorsCount];\n                }\n\n                fields = deepExtend({\n                    index: i,\n                    owner: chart,\n                    series: series,\n                    category: fields.category,\n                    dataItem: data[i],\n                    percentage: Math.abs(value) / total,\n                    visibleInLegend: fields.visibleInLegend,\n                    visible: fields.visible\n                }, fields);\n\n                var segment = chart.createSegment(value, fields);\n                var label = chart.createLabel(value, fields);\n\n                if (segment && label) {\n                    segment.append(label);\n                }\n            }\n        },\n\n        evalSegmentOptions: function(options, value, fields) {\n            var series = fields.series;\n\n            evalOptions(options, {\n                value: value,\n                series: series,\n                dataItem: fields.dataItem,\n                index: fields.index\n            }, { defaults: series._defaults, excluded: [\"data\"] });\n        },\n\n        createSegment: function(value, fields) {\n            var chart = this,\n                segment;\n\n            var seriesOptions = deepExtend({}, fields.series);\n            chart.evalSegmentOptions(seriesOptions,  value, fields);\n\n            chart.createLegendItem(value, seriesOptions, fields);\n\n            if (fields.visible !== false) {\n\n                segment = new FunnelSegment(value, seriesOptions, fields);\n                extend(segment, fields);\n\n                chart.append(segment);\n                chart.points.push(segment);\n\n                return segment;\n            }\n        },\n\n        createLabel: function(value, fields) {\n            var chart = this,\n                series = fields.series,\n                dataItem = fields.dataItem,\n                labels = deepExtend({}, chart.options.labels, series.labels),\n                text = value,\n                textBox;\n\n            if (labels.visible) {\n                if (labels.template) {\n                    var labelTemplate = template(labels.template);\n                    text = labelTemplate({\n                        dataItem: dataItem,\n                        value: value,\n                        percentage : fields.percentage,\n                        category: fields.category,\n                        series: series\n                    });\n                } else if (labels.format) {\n                    text = autoFormat(labels.format, text);\n                }\n\n                if (!labels.color&&labels.align===\"center\") {\n                    var brightnessValue = new Color(series.color).percBrightness();\n                    if (brightnessValue > 180) {\n                        labels.color = BLACK;\n                    } else {\n                        labels.color = WHITE;\n                    }\n                }\n\n                chart.evalSegmentOptions(labels, value, fields);\n\n                textBox = new TextBox(text, deepExtend({\n                        vAlign: labels.position\n                    }, labels)\n                );\n\n                chart.labels.push(textBox);\n\n                return textBox;\n            }\n        },\n\n        labelPadding: function() {\n            var labels = this.labels,\n                label,\n                align,\n                width,\n                padding = { left: 0, right: 0 },\n                i;\n\n            for (i = 0; i < labels.length; i++) {\n                label = labels[i];\n                align = label.options.align;\n                if (align !== \"center\") {\n                    width = labels[i].box.width();\n\n                    if(align === \"left\") {\n                        padding.left = Math.max(padding.left, width);\n                    } else {\n                        padding.right = Math.max(padding.right, width);\n                    }\n                }\n            }\n\n            return padding;\n        },\n\n        reflow: function(chartBox) {\n            var chart = this,\n                options = chart.options,\n                segments = chart.points,\n                count = segments.length,\n                decreasingWidth = options.neckRatio<=1,\n                i,\n                height,\n                lastUpperSide,\n                points,\n                percentage,\n                offset,\n                box = chartBox.clone().unpad(chart.labelPadding()),\n                width = box.width(),\n                previousHeight = 0,\n                previousOffset = decreasingWidth ? 0 :(width-width/options.neckRatio)/2,\n                segmentSpacing = options.segmentSpacing,\n                dynamicSlope = options.dynamicSlope,\n                totalHeight = box.height() - segmentSpacing * (count-1),\n                neckRatio = decreasingWidth ? options.neckRatio*width : width;\n\n            if(!count){\n                return;\n            }\n\n            if(dynamicSlope){\n                var firstSegment = segments[0],\n                    maxSegment = firstSegment;\n\n                $.each(segments,function(idx,val){\n                   if(val.percentage>maxSegment.percentage){\n                       maxSegment = val;\n                   }\n                });\n\n                lastUpperSide = (firstSegment.percentage/maxSegment.percentage)*width;\n                previousOffset = (width - lastUpperSide) / 2;\n\n                for (i = 0; i < count; i++) {\n                    percentage = segments[i].percentage;\n\n                    var nextSegment = segments[i+1],\n                        nextPercentage = (nextSegment ? nextSegment.percentage : percentage);\n\n                    points = segments[i].points = [];\n                    height = (options.dynamicHeight)? (totalHeight * percentage): (totalHeight / count);\n                    offset = (width - lastUpperSide* (nextPercentage / percentage))/2;\n                    offset = limitValue(offset, 0, width);\n\n                    points.push(new geom.Point(box.x1 + previousOffset, box.y1 + previousHeight));\n                    points.push(new geom.Point(box.x1+width - previousOffset, box.y1 + previousHeight));\n                    points.push(new geom.Point(box.x1+width - offset, box.y1 + height + previousHeight));\n                    points.push(new geom.Point(box.x1+ offset,box.y1 + height + previousHeight));\n\n                    previousOffset = offset;\n                    previousHeight += height + segmentSpacing;\n                    lastUpperSide *= nextPercentage/percentage;\n                    lastUpperSide = limitValue(lastUpperSide, 0, width);\n                }\n            }\n            else {\n                var topMostWidth = decreasingWidth ? width : width - previousOffset*2,\n                    finalNarrow = (topMostWidth - neckRatio)/2;\n\n                for (i = 0; i < count; i++) {\n                    points = segments[i].points = [];\n                    percentage = segments[i].percentage;\n                    offset = (options.dynamicHeight)? (finalNarrow * percentage): (finalNarrow / count);\n                    height = (options.dynamicHeight)? (totalHeight * percentage): (totalHeight / count);\n\n                    points.push(new geom.Point(box.x1+previousOffset, box.y1 + previousHeight));\n                    points.push(new geom.Point(box.x1+width - previousOffset, box.y1 + previousHeight));\n                    points.push(new geom.Point(box.x1+width - previousOffset - offset, box.y1 + height + previousHeight));\n                    points.push(new geom.Point(box.x1+previousOffset + offset,box.y1 + height + previousHeight));\n                    previousOffset += offset;\n                    previousHeight += height + segmentSpacing;\n                }\n            }\n\n            for (i = 0; i < count; i++) {\n                segments[i].reflow(chartBox);\n            }\n        }\n    });\n\n    deepExtend(FunnelChart.fn, PieChartMixin);\n\n    var FunnelSegment = ChartElement.extend({\n        init: function(value, options, segmentOptions) {\n            var segment = this;\n\n            ChartElement.fn.init.call(segment, options);\n\n            segment.value = value;\n            segment.options.index = segmentOptions.index;\n        },\n\n        options: {\n            color: WHITE,\n            border: {\n                width: 1\n            }\n        },\n\n        reflow: function(chartBox) {\n            var segment = this,\n                points = segment.points,\n                label = segment.children[0];\n\n            segment.box = new Box2D(points[0].x, points[0].y, points[1].x, points[2].y);\n\n            if (label) {\n                label.reflow(new Box2D(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n            }\n        },\n\n        createVisual: function() {\n            ChartElement.fn.createVisual.call(this);\n\n            var options = this.options;\n            var border = options.border;\n            var path = draw.Path.fromPoints(this.points, {\n                fill: {\n                    color: options.color,\n                    opacity: options.opacity\n                },\n                stroke: {\n                    color: border.color,\n                    opacity: border.opacity,\n                    width: border.width\n                }\n            }).close();\n\n            this.visual.append(path);\n        },\n\n        createHighlight: function(style) {\n            return draw.Path.fromPoints(this.points, style);\n        },\n\n        highlightOverlay: function(view, opt) {\n            var options = this.options,\n                hlOptions = options.highlight || {};\n            if(hlOptions.visible===false){\n                return;\n            }\n            var border = hlOptions.border || {};\n            var calcOptions = extend({},opt,{\n                fill:hlOptions.color,\n                stroke: border.color,\n                strokeOpacity: border.opacity,\n                strokeWidth: border.width,\n                fillOpacity:hlOptions.opacity\n            });\n            var element = view.createPolyline(this.points,true,calcOptions);\n            return element;\n        },\n\n        tooltipAnchor: function(tooltipWidth) {\n            var box = this.box;\n            return new Point2D(\n                box.center().x - (tooltipWidth / 2),\n                box.y1\n            );\n        },\n        formatValue: function(format){\n            var point = this;\n            return point.owner.formatPointValue(point,format);\n        }\n    });\n    deepExtend(FunnelSegment.fn, dataviz.PointEventsMixin);\n\n    // Exports ================================================================\n    PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n\n    SeriesBinder.current.register(\n        [FUNNEL],\n        [VALUE], [CATEGORY, COLOR, \"visibleInLegend\", \"visible\"]\n    );\n\n    deepExtend(dataviz, {\n        FunnelChart: FunnelChart\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n\n    var math = Math,\n        kendo = window.kendo,\n        util = kendo.util,\n        Widget = kendo.ui.Widget,\n        deepExtend = kendo.deepExtend,\n\n        dataviz = kendo.dataviz,\n        autoMajorUnit = dataviz.autoMajorUnit,\n        ChartElement = dataviz.ChartElement,\n        NumericAxis = dataviz.NumericAxis,\n        Axis = dataviz.Axis,\n        Box2D = dataviz.Box2D,\n        Class = kendo.Class,\n        defined = util.defined,\n        isArray = $.isArray,\n        isNumber = util.isNumber,\n        interpolateValue = dataviz.interpolateValue,\n        valueOrDefault = util.valueOrDefault,\n\n        getSpacing = dataviz.getSpacing,\n        round = dataviz.round,\n        geo = dataviz.geometry,\n        draw = dataviz.drawing,\n        Point = geo.Point,\n        Circle = draw.Circle,\n        Group = draw.Group,\n        Path = draw.Path,\n        Rect = geo.Rect,\n        Text = draw.Text,\n        Surface = draw.Surface;\n\n    // Constants ==============================================================\n    var ANGULAR_SPEED = 150,\n        LINEAR_SPEED = 250,\n        ARROW = \"arrow\",\n        ARROW_POINTER = \"arrowPointer\",\n        BAR_POINTER = \"barPointer\",\n        BLACK = \"#000\",\n        CAP_SIZE = 0.05,\n        COORD_PRECISION = dataviz.COORD_PRECISION,\n        MAX_VALUE = Number.MAX_VALUE,\n        MIN_VALUE = -Number.MAX_VALUE,\n        DEFAULT_HEIGHT = 200,\n        DEFAULT_LINE_WIDTH = 0.5,\n        DEFAULT_WIDTH = 200,\n        DEFAULT_MIN_WIDTH = 60,\n        DEFAULT_MIN_HEIGHT = 60,\n        DEFAULT_MARGIN = 5,\n        DEGREE = math.PI / 180,\n        GEO_ARC_ADJUST_ANGLE = 180,\n        INSIDE = \"inside\",\n        LINEAR = \"linear\",\n        NEEDLE = \"needle\",\n        OUTSIDE = \"outside\",\n        RADIAL_POINTER = \"radialPointer\",\n        X = \"x\",\n        Y = \"y\";\n\n    var Pointer = Class.extend({\n        init: function(scale, options) {\n            var pointer = this;\n            var scaleOptions = scale.options;\n\n            ChartElement.fn.init.call(pointer, options);\n\n            options = pointer.options;\n\n            options.fill = options.color;\n\n            pointer.scale = scale;\n\n            if (defined(options.value)){\n                options.value = math.min(math.max(options.value, scaleOptions.min), scaleOptions.max);\n            } else {\n                options.value = scaleOptions.min;\n            }\n        },\n\n        options: {\n            color: BLACK\n        },\n\n        value: function(newValue) {\n            var that = this;\n            var options = that.options;\n            var value = options.value;\n            var scaleOptions = that.scale.options;\n\n            if (arguments.length === 0) {\n                return value;\n            }\n\n            options._oldValue = (options._oldValue !== undefined)? options.value : scaleOptions.min;\n            options.value = math.min(math.max(newValue, scaleOptions.min), scaleOptions.max);\n\n            if (that.elements) {\n                that.repaint();\n            }\n        }\n    });\n\n    var RadialPointer = Pointer.extend({\n        options: {\n            shape: NEEDLE,\n            cap: {\n                size: CAP_SIZE\n            },\n            arrow: {\n                width: 16,\n                height: 14\n            },\n            animation: {\n                type: RADIAL_POINTER,\n                duration: ANGULAR_SPEED\n            }\n        },\n\n        setRadius: function(radius) {\n            var that = this;\n\n            if (radius) {\n                that.elements.clear();\n                that.render(that.parent, that.center, radius);\n            }\n        },\n\n        setAngle: function(angle) {\n            this.elements.transform(geo.transform().rotate(angle, this.center));\n        },\n\n        repaint: function() {\n            var that = this;\n            var scale = that.scale;\n            var options = that.options;\n            var oldAngle = scale.slotAngle(options._oldValue);\n            var newAngle = scale.slotAngle(options.value);\n\n            if (options.animation.transitions === false) {\n                that.setAngle(newAngle);\n            } else {\n                new RadialPointerAnimation(that.elements, deepExtend(options.animation, {\n                    oldAngle: oldAngle,\n                    newAngle: newAngle\n                })).play();\n            }\n        },\n\n        render: function() {\n            var that = this;\n            var scale = that.scale;\n            var center = scale.arc.center;\n            var options = that.options;\n            var minAngle = scale.slotAngle(scale.options.min);\n            var elements = new Group();\n\n            if (options.animation !== false) {\n                deepExtend(options.animation, {\n                    startAngle: 0,\n                    center: center,\n                    reverse: scale.options.reverse\n                });\n            }\n\n            if (options.shape === NEEDLE) {\n                elements.append(\n                    that._renderNeedle(),\n                    that._renderCap()\n                );\n            } else {\n                elements.append(that._renderArrow());\n            }\n\n            that.elements = elements;\n            that.setAngle(DEGREE);\n\n            return elements;\n        },\n\n        reflow: function(arc) {\n            var that = this;\n            var center = that.center = arc.center;\n            var radius = that.radius = arc.getRadiusX();\n            var capSize = that.capSize = Math.round(radius * that.options.cap.size);\n\n            that.bbox = Rect.fromPoints(new Point(center.x - capSize, center.y - capSize),\n                                        new Point(center.x + capSize, center.y + capSize));\n        },\n\n        _renderNeedle: function() {\n            var that = this;\n            var options = that.options;\n            var minorTickSize = that.scale.options.minorTicks.size;\n            var center = that.center;\n            var needleColor = options.color;\n\n            var needlePath = new Path({\n                fill: { color: needleColor },\n                stroke: { color: needleColor, width: DEFAULT_LINE_WIDTH }\n            });\n\n            needlePath.moveTo(center.x + that.radius - minorTickSize, center.y)\n                      .lineTo(center.x, center.y - (that.capSize / 2))\n                      .lineTo(center.x, center.y + (that.capSize / 2))\n                      .close();\n\n            return needlePath;\n        },\n\n        _renderCap: function() {\n            var that = this;\n            var options = that.options;\n            var capColor = options.cap.color || options.color;\n            var circle = new geo.Circle(that.center, that.capSize);\n\n            var cap = new draw.Circle(circle, {\n               fill: { color: capColor },\n               stroke: { color: capColor }\n            });\n\n            return cap;\n        }\n    });\n\n    var RadialScale = NumericAxis.extend({\n        init: function(options) {\n            var scale = this;\n\n            scale.options = deepExtend({}, scale.options, options);\n            scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n\n            scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n\n            Axis.fn.init.call(scale, scale.options);\n        },\n\n        options: {\n            min: 0,\n            max: 100,\n\n            majorTicks: {\n                size: 15,\n                align: INSIDE,\n                color: BLACK,\n                width: DEFAULT_LINE_WIDTH,\n                visible: true\n            },\n\n            minorTicks: {\n                size: 10,\n                align: INSIDE,\n                color: BLACK,\n                width: DEFAULT_LINE_WIDTH,\n                visible: true\n            },\n\n            startAngle: -30,\n            endAngle: 210,\n\n            labels: {\n                position: INSIDE,\n                padding: 2\n            }\n        },\n\n        render: function(center, radius) {\n            var that = this;\n            var options = that.options;\n            var arc = that.renderArc(center, radius);\n\n            that.bbox = arc.bbox();\n            that.labelElements = that.renderLabels();\n            that.ticks = that.renderTicks();\n            that.ranges = that.renderRanges();\n        },\n\n        reflow: function(bbox) {\n            var that = this;\n            var options = that.options;\n            var center = bbox.center();\n            var radius = math.min(bbox.height(), bbox.width()) / 2;\n\n            if (that.bbox !== undefined) {\n                that.bbox = that.arc.bbox();\n                that.radius(that.arc.getRadiusX());\n                that.repositionRanges();\n                that.renderLabels();\n            } else {\n                return that.render(center, radius);\n            }\n        },\n\n        slotAngle: function(value) {\n            var options = this.options;\n            var startAngle = options.startAngle;\n            var reverse = options.reverse;\n            var angle = options.endAngle - startAngle;\n            var min = options.min;\n            var max = options.max;\n            var result;\n\n            if (reverse) {\n                result = options.endAngle - (value - min) / (max - min) * angle;\n            } else {\n                result = ((value - min) / (max - min) * angle) + startAngle;\n            }\n\n            return result + GEO_ARC_ADJUST_ANGLE;\n        },\n\n        renderLabels: function() {\n            var that = this;\n            var options = that.options;\n            var majorTickSize = options.majorTicks.size;\n            var arc = that.arc.clone();\n            var radius = arc.getRadiusX();\n            var tickAngles = that.tickAngles(arc, options.majorUnit);\n            var labels = that.labels;\n            var count = labels.length;\n            var labelsOptions = options.labels;\n            var padding = labelsOptions.padding;\n            var rangeDistance = radius * 0.05;\n            var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n            var ranges = options.ranges || [];\n            var halfWidth, halfHeight, labelAngle;\n            var angle, label, lp, i, cx, cy, isInside;\n            var labelsGroup = new Group();\n            var lbl, labelPos, prevLabelPos, labelTransform;\n\n            if (that.options.rangeDistance !== undefined) {\n                rangeDistance = that.options.rangeDistance;\n            } else {\n                that.options.rangeDistance = rangeDistance;\n            }\n\n            if (labelsOptions.position === INSIDE) {\n                radius -= majorTickSize;\n\n                if (ranges.length && that.labelElements === undefined) {\n                    radius -= rangeSize + rangeDistance;\n                }\n                arc.setRadiusX(radius).setRadiusY(radius);\n            }\n\n            for (i = 0; i < count; i++) {\n                label = labels[i];\n                halfWidth = label.box.width() / 2;\n                halfHeight = label.box.height() / 2;\n                angle = tickAngles[i];\n                labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n                isInside = labelsOptions.position === INSIDE;\n                lp = arc.pointAt(angle);\n                cx = lp.x + (math.cos(labelAngle) * (halfWidth + padding) * (isInside ? 1 : -1));\n                cy = lp.y + (math.sin(labelAngle) * (halfHeight + padding) * (isInside ? 1 : -1));\n\n                label.reflow(new dataviz.Box2D(cx - halfWidth, cy - halfHeight,\n                                               cx + halfWidth, cy + halfHeight));\n                labelPos = new Point(label.box.x1, label.box.y1);\n\n                if (that.labelElements === undefined) {\n                    lbl = _buildLabel(label, options.labels);\n                    labelsGroup.append(lbl);\n                } else {\n                    lbl = that.labelElements.children[i];\n                    prevLabelPos = lbl.bbox().origin;\n\n                    labelTransform = lbl.transform() || geo.transform();\n                    labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n                    lbl.transform(labelTransform);\n                }\n\n                that.bbox = Rect.union(that.bbox, lbl.bbox());\n            }\n\n            return labelsGroup;\n        },\n\n        repositionRanges: function() {\n            var that = this;\n            var arc = that.arc;\n            var ranges = that.ranges.children;\n            var rangeSize = that.options.rangeSize;\n            var rangeDistance = that.options.rangeDistance;\n            var rangeRadius, newRadius;\n\n            if (ranges.length > 0) {\n                rangeRadius = that.getRangeRadius();\n\n                if (that.options.labels.position === INSIDE) {\n                    rangeRadius += rangeSize + rangeDistance;\n                }\n\n                newRadius = rangeRadius + (rangeSize / 2);\n\n                for (var i = 0; i < ranges.length; i++) {\n                    ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n                }\n\n                that.bbox = Rect.union(that.bbox, that.ranges.bbox());\n            }\n        },\n\n        renderRanges: function() {\n            var that = this;\n            var arc = that.arc;\n            var result = new Group();\n            var from, to;\n            var segments = that.rangeSegments();\n            var segmentsCount = segments.length;\n            var reverse = that.options.reverse;\n            var radius = that.radius();\n            var rangeSize = that.options.rangeSize;\n            var rangeDistance = that.options.rangeDistance;\n            var segment, rangeRadius, rangeGeom, i;\n\n            if (segmentsCount) {\n                rangeRadius = that.getRangeRadius();\n\n                // move the ticks with a range distance and a range size\n                that.radius(that.radius() - rangeSize - rangeDistance);\n\n                for (i = 0; i < segmentsCount; i++) {\n                    segment = segments[i];\n                    from = that.slotAngle(segment[reverse ? \"to\": \"from\"]);\n                    to = that.slotAngle(segment[!reverse ? \"to\": \"from\"]);\n\n                    if (to - from !== 0) {\n                        rangeGeom = new geo.Arc(arc.center, {\n                            radiusX: rangeRadius + (rangeSize / 2),\n                            radiusY: rangeRadius + (rangeSize / 2),\n                            startAngle: from,\n                            endAngle: to\n                        });\n\n                        result.append(new draw.Arc(rangeGeom, {\n                                stroke: {\n                                    width: rangeSize,\n                                    color: segment.color,\n                                    opacity: segment.opacity\n                                }\n                            })\n                        );\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        rangeSegments: function() {\n            var gauge = this;\n            var options = gauge.options;\n            var ranges = options.ranges || [];\n            var count = ranges.length;\n            var range;\n            var segmentsCount;\n            var defaultColor = options.rangePlaceholderColor;\n            var segments = [];\n            var segment;\n            var min = options.min;\n            var max = options.max;\n            var i, j;\n\n            function rangeSegment(from, to, color, opacity) {\n                return { from: from, to: to, color: color, opacity: opacity };\n            }\n\n            if (count) {\n                segments.push(rangeSegment(min, max, defaultColor));\n\n                for (i = 0; i < count; i++) {\n                    range = getRange(ranges[i], min, max);\n                    segmentsCount = segments.length;\n                    for (j = 0; j < segmentsCount; j++) {\n                        segment = segments[j];\n                        if (segment.from <= range.from && range.from <= segment.to) {\n                            segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n                            if (segment.from <= range.to && range.to <= segment.to) {\n                                segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n                            }\n                            segment.to = range.from;\n                            break;\n                        }\n                    }\n                }\n            }\n\n            return segments;\n        },\n\n        getRangeRadius: function() {\n            var that = this;\n            var options = that.options;\n            var majorTickSize = options.majorTicks.size;\n            var rangeSize = options.rangeSize;\n            var rangeDistance = options.rangeDistance;\n            var arc = that.arc;\n            var r;\n\n            if (options.labels.position === OUTSIDE) {\n                r = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n            } else {\n                r = arc.getRadiusX() - rangeSize;\n            }\n\n            return r;\n        },\n\n        renderArc: function(center, radius) {\n            var that = this;\n            var options = that.options;\n\n            var arc = that.arc = new geo.Arc(center, {\n                    radiusX: radius,\n                    radiusY: radius,\n                    startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n                    endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n                });\n\n            return arc;\n        },\n\n        renderTicks: function() {\n            var that = this;\n            var arc = that.arc;\n            var options = that.options;\n            var labelsPosition = options.labels.position;\n            var allTicks = new Group();\n            var majorTickSize = options.majorTicks.size;\n            var minorTickSize = options.minorTicks.size;\n            var tickArc = arc.clone();\n            var radius = tickArc.getRadiusX();\n\n            function drawTicks(arc, tickAngles, unit, tickOptions) {\n                var ticks = new Group(),\n                    center = arc.center,\n                    radius = arc.getRadiusX(),\n                    i, tickStart, tickEnd,\n                    tickSize = unit.size,\n                    visible = tickOptions.visible;\n\n                if (visible) {\n                    for (i = 0; i < tickAngles.length; i++) {\n                        tickStart = arc.pointAt(tickAngles[i]);\n                        tickEnd = new Point(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n\n                        ticks.append(new Path({\n                            stroke: {\n                                color: tickOptions.color,\n                                width: tickOptions.width\n                            }\n                        }).moveTo(tickStart).lineTo(tickEnd));\n                    }\n                }\n\n                return ticks;\n            }\n\n            that.majorTickAngles = that.tickAngles(arc, options.majorUnit);\n            that.majorTicks = drawTicks(tickArc, that.majorTickAngles, options.majorUnit, options.majorTicks);\n            allTicks.append(that.majorTicks);\n\n            that._tickDifference = majorTickSize - minorTickSize;\n            if (labelsPosition === OUTSIDE) {\n                tickArc.setRadiusX(radius - majorTickSize + minorTickSize)\n                       .setRadiusY(radius - majorTickSize + minorTickSize);\n            }\n\n            that.minorTickAngles = that.normalizeTickAngles(that.tickAngles(arc, options.minorUnit));\n            that.minorTicks = drawTicks(tickArc, that.minorTickAngles, options.minorUnit, options.minorTicks, options.majorUnit);\n            allTicks.append(that.minorTicks);\n\n            return allTicks;\n        },\n\n        normalizeTickAngles: function(angles) {\n            var that = this;\n            var options = that.options;\n            var skip = options.majorUnit / options.minorUnit;\n\n            for (var i = angles.length - 1; i >= 0; i--) {\n                if (i % skip === 0) {\n                    angles.splice(i, 1);\n                }\n            }\n\n            return angles;\n        },\n\n        tickAngles: function(ring, stepValue) {\n            var scale = this;\n            var options = scale.options;\n            var reverse = options.reverse;\n            var range = options.max - options.min;\n            var angle = ring.endAngle - ring.startAngle;\n            var pos = ring.startAngle;\n            var tickCount = range / stepValue;\n            var step = angle / tickCount;\n            var positions = [];\n            var i;\n\n            if (reverse) {\n                pos += angle;\n                step = -step;\n            }\n\n            for (i = 0; i < tickCount ; i++) {\n                positions.push(round(pos, COORD_PRECISION));\n                pos += step;\n            }\n\n            if (round(pos) <= ring.endAngle) {\n                positions.push(pos);\n            }\n\n            return positions;\n        },\n\n        radius: function(radius) {\n            var that = this;\n            var parent = that.parent;\n            var center = that.arc.center;\n\n            if(radius) {\n                that.arc.setRadiusX(radius).setRadiusY(radius);\n                that.repositionTicks(that.majorTicks.children, that.majorTickAngles);\n                that.repositionTicks(that.minorTicks.children, that.minorTickAngles, true);\n            } else {\n                return that.arc.getRadiusX();\n            }\n        },\n\n        repositionTicks: function(ticks, tickAngles, minor) {\n            var that = this;\n            var diff = minor ? (that._tickDifference || 0) : 0;\n            var tickArc = that.arc;\n            var radius = tickArc.getRadiusX();\n\n            if (minor && that.options.labels.position === OUTSIDE && diff !== 0) {\n                tickArc = that.arc.clone();\n                tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n            }\n\n            for (var i = 0; i < ticks.length; i++) {\n                var newPoint = tickArc.pointAt(tickAngles[i]);\n                var segments = ticks[i].segments;\n                var xDiff = newPoint.x - segments[0].anchor().x;\n                var yDiff = newPoint.y - segments[0].anchor().y;\n\n                ticks[i].transform(new geo.Transformation().translate(xDiff, yDiff));\n            }\n        }\n    });\n\n    var Gauge = Widget.extend({\n        init: function(element, userOptions) {\n            var gauge = this;\n            var options;\n            var themeOptions;\n            var themeName;\n            var themes = dataviz.ui.themes || {};\n            var theme;\n\n            kendo.destroy(element);\n            $(element).empty();\n\n            Widget.fn.init.call(gauge, element);\n\n            gauge.wrapper = gauge.element;\n\n            gauge._originalOptions = deepExtend({}, userOptions);\n            options = deepExtend({}, gauge.options, userOptions);\n\n            themeName = options.theme;\n            theme = themes[themeName] || themes[themeName.toLowerCase()];\n            themeOptions = themeName && theme ? theme.gauge : {};\n\n            gauge.options = deepExtend({}, themeOptions, options);\n\n            if ($.isArray(options.pointer)) {\n                for (var i = 0; i < options.pointer.length; i++) {\n                    gauge.options.pointer[i] = deepExtend({}, themeOptions.pointer, options.pointer[i]);\n                }\n            }\n\n            gauge.element.addClass(\"k-gauge\");\n\n            gauge.surface = gauge._createSurface();\n\n            gauge.redraw();\n        },\n\n        options: {\n            plotArea: {},\n            theme: \"default\",\n            renderAs: \"\",\n            pointer: {},\n            scale: {},\n            gaugeArea: {}\n        },\n\n        destroy: function() {\n            this.surface.destroy();\n\n            Widget.fn.destroy.call(this);\n        },\n\n        value: function(value) {\n            var that = this;\n            var pointer = that.pointers[0];\n\n            if (arguments.length === 0) {\n                return pointer.value();\n            }\n\n            pointer.value(value);\n            that._setValueOptions(value);\n        },\n\n         _draw: function() {\n            var surface = this.surface;\n\n            surface.clear();\n            surface.draw(this._visuals);\n        },\n\n        exportVisual: function() {\n            return this._visuals;\n        },\n\n        allValues: function(values) {\n            var that = this;\n            var pointers = that.pointers;\n            var allValues = [];\n            var i;\n\n            if (arguments.length === 0) {\n                for (i = 0; i < pointers.length; i++) {\n                    allValues.push(pointers[i].value());\n                }\n\n                return allValues;\n            }\n\n            if ($.isArray(values)) {\n                for (i = 0; i < values.length; i++) {\n                    if (isNumber(values[i])) {\n                        pointers[i].value(values[i]);\n                    }\n                }\n            }\n\n            that._setValueOptions(values);\n        },\n\n        _setValueOptions: function(values) {\n            var pointers = [].concat(this.options.pointer);\n            values = [].concat(values);\n\n            for (var i = 0; i < values.length; i++) {\n                pointers[i].value = values[i];\n            }\n        },\n\n        _resize: function() {\n            var that = this;\n            var t = that.options.transitions;\n            var i;\n\n            that.options.transitions = false;\n            for (i = 0; i < that.pointers.length; i++) {\n                that.pointers[i].options.animation.transitions = false;\n            }\n\n            that.redraw();\n\n            that.options.transitions = t;\n            for (i = 0; i < that.pointers.length; i++) {\n                that.pointers[i].options.animation.transitions = t;\n            }\n        },\n\n        redraw: function() {\n            var that = this;\n            var size = deepExtend(that._getSize(), that.options.gaugeArea);\n            var wrapper = new Rect([0, 0], [size.width, size.height]);\n            var bbox;\n\n            that.surface.clear();\n            that.gaugeArea = that._createGaugeArea();\n            that._createModel();\n\n            bbox = _unpad(wrapper.bbox(), that._gaugeAreaMargin);\n            that.reflow(bbox);\n        },\n\n        _createGaugeArea: function() {\n            var that = this;\n            var options = that.options.gaugeArea;\n            var size = that.surface.size();\n            var margin = that._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n            var border = options.border || {};\n            var areaGeometry =  new Rect([0, 0], [size.width, size.height]);\n\n            if (border.width > 0) {\n                areaGeometry = _unpad(areaGeometry, border.width);\n            }\n\n            var gaugeArea = Path.fromRect(areaGeometry, {\n                stroke: {\n                    color: border.width ? border.color : \"\",\n                    width: border.width,\n                    dashType: border.dashType,\n                    lineJoin: \"round\",\n                    lineCap: \"round\"\n                },\n                fill: {\n                    color: options.background\n                }\n            });\n\n            return gaugeArea;\n        },\n\n        _createSurface: function() {\n            var that = this;\n            var options = that.options;\n            var size = that._getSize();\n            size = options.gaugeArea ? deepExtend(size, options.gaugeArea) : size;\n\n            var wrap = $(\"<div></div>\").appendTo(that.element).css({\n                width: size.width,\n                height: size.height\n            });\n\n            return new draw.Surface.create(wrap, {\n                type: options.renderAs\n            });\n        },\n\n        getSize: function() {\n            return this._getSize();\n        },\n\n        _getSize: function() {\n            var that = this;\n            var element = that.element;\n            var width = element.width();\n            var height = element.height();\n\n            if (!width) {\n                width = DEFAULT_WIDTH;\n            }\n\n            if (!height) {\n                height = DEFAULT_HEIGHT;\n            }\n\n            return { width: width, height: height };\n        }\n    });\n\n    var RadialGauge = Gauge.extend({\n        init: function(element, options) {\n            var radialGauge = this;\n\n            Gauge.fn.init.call(radialGauge, element, options);\n\n            kendo.notify(radialGauge, dataviz.ui);\n        },\n\n        options: {\n            name: \"RadialGauge\",\n            transitions: true,\n            gaugeArea: {\n                background: \"\"\n            }\n        },\n\n        reflow: function(bbox) {\n            var that = this;\n            var pointers = that.pointers;\n            var scaleElements = that.scale.reflow(bbox);\n            that._initialPlotArea = that.scale.bbox;\n\n            for (var i = 0; i < pointers.length; i++) {\n                var pointerElement = pointers[i].reflow(that.scale.arc);\n                that._initialPlotArea = Rect.union(that._initialPlotArea, pointers[i].bbox);\n            }\n\n            that.fitScale(bbox);\n            that.alignScale(bbox);\n            that._buildVisual(that.gaugeArea, pointers, that.scale);\n            that._draw();\n        },\n\n        _buildVisual: function(gaugeArea, pointers, scale) {\n            var visuals = new Group();\n            var current;\n\n            visuals.append(gaugeArea);\n            visuals.append(scale.ticks);\n            visuals.append(scale.ranges);\n\n            for (var i = 0; i < pointers.length; i++) {\n                current = pointers[i];\n                current.render();\n                visuals.append(current.elements);\n                current.value(current.options.value);\n            }\n            visuals.append(scale.labelElements);\n\n            this._visuals = visuals;\n        },\n\n        fitScale: function(bbox) {\n            var that = this;\n            var scale = that.scale;\n            var arc = scale.arc;\n            var plotAreaBox = that._initialPlotArea;\n            var step = math.abs(that.getDiff(plotAreaBox, bbox));\n            var min = round(step, COORD_PRECISION);\n            var max = round(-step, COORD_PRECISION);\n            var minDiff, midDiff, maxDiff, mid;\n            var i = 0;\n\n            while (i < 100) {\n                i++;\n                if (min != mid) {\n                    minDiff = that.getPlotBox(min, bbox, arc);\n                    if (0 <= minDiff && minDiff <= 2) {\n                        break;\n                    }\n                }\n\n                if (max != mid) {\n                    maxDiff = that.getPlotBox(max, bbox, arc);\n                    if (0 <= maxDiff && maxDiff <= 2) {\n                        break;\n                    }\n                }\n\n                if (minDiff > 0 && maxDiff > 0) {\n                    mid = min * 2;\n                } else if (minDiff < 0 && maxDiff < 0) {\n                    mid = max * 2;\n                } else {\n                    mid = round(((min + max) / 2) || 1, COORD_PRECISION);\n                }\n\n                midDiff = that.getPlotBox(mid, bbox, arc);\n                if (0 <= midDiff && midDiff <= 2) {\n                    break;\n                }\n\n                if (midDiff > 0) {\n                    max = mid;\n                    maxDiff = midDiff;\n                } else {\n                    min = mid;\n                    minDiff = midDiff;\n                }\n            }\n        },\n\n        getPlotBox: function(step, bbox, arc) {\n            var that = this;\n            var scale = that.scale;\n            var pointers = that.pointers;\n            var radius = arc.getRadiusX();\n\n            arc = arc.clone();\n            arc.setRadiusX(radius + step).setRadiusY(radius + step);\n\n            scale.arc = arc;\n            scale.reflow(bbox);\n            that.plotBbox = scale.bbox;\n\n            for (var i = 0; i < pointers.length; i++) {\n                pointers[i].reflow(arc);\n                that.plotBbox = Rect.union(that.plotBbox, pointers[i].bbox);\n            }\n\n            return that.getDiff(that.plotBbox, bbox);\n        },\n\n        getDiff: function(plotBox, box) {\n            return math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n        },\n\n        alignScale: function(bbox) {\n            var that = this;\n            var plotBoxCenter = that.plotBbox.center();\n            var boxCenter = bbox.center();\n            var paddingX = plotBoxCenter.x - boxCenter.x;\n            var paddingY = plotBoxCenter.y - boxCenter.y;\n            var scale = that.scale;\n            var pointers = that.pointers;\n\n            scale.arc.center.x -= paddingX;\n            scale.arc.center.y -= paddingY;\n\n            scale.reflow(bbox);\n\n            for (var i = 0; i < pointers.length; i++) {\n                pointers[i].reflow(scale.arc);\n                that.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n            }\n        },\n\n        _createModel: function() {\n            var that = this;\n            var options = that.options;\n            var pointers = options.pointer;\n            var scale = that.scale = new RadialScale(options.scale);\n            var current;\n\n            that.pointers = [];\n\n            pointers = $.isArray(pointers) ? pointers : [pointers];\n            for (var i = 0; i < pointers.length; i++) {\n                current = new RadialPointer(scale,\n                    deepExtend({}, pointers[i], {\n                        animation: {\n                            transitions: options.transitions\n                        }\n                }));\n                that.pointers.push(current);\n            }\n        }\n    });\n\n    var LinearGauge = Gauge.extend({\n        init: function(element, options) {\n            var linearGauge = this;\n\n            Gauge.fn.init.call(linearGauge, element, options);\n\n            kendo.notify(linearGauge, dataviz.ui);\n        },\n\n        options: {\n            name: \"LinearGauge\",\n            transitions: true,\n            gaugeArea: {\n                background: \"\"\n            },\n            scale: {\n                vertical: true\n            }\n        },\n\n        reflow: function(bbox) {\n            var that = this;\n            var surface = that.surface;\n            var pointers = that.pointers;\n            var bboxX = bbox.origin.x;\n            var bboxY = bbox.origin.y;\n\n            var bbox2D = new dataviz.Box2D(bboxX, bboxX,\n                                           bboxX + bbox.width(), bboxY + bbox.height());\n\n            that.scale.reflow(bbox2D);\n\n            for (var i = 0; i < pointers.length; i++) {\n                pointers[i].reflow();\n            }\n\n            that.bbox = that._getBox(bbox2D);\n            that._alignElements();\n            that._shrinkElements();\n            that._buildVisual();\n            that._draw();\n        },\n\n        _buildVisual: function(){\n            var that = this;\n            var visuals = new Group();\n            var scaleElements = that.scale.render();\n            var pointers = that.pointers;\n            var current;\n\n            visuals.append(that.gaugeArea);\n            visuals.append(scaleElements);\n\n            for (var i = 0; i < pointers.length; i++) {\n                current = pointers[i];\n                visuals.append(current.render());\n                current.value(current.options.value);\n            }\n\n            that._visuals = visuals;\n        },\n\n        _createModel: function() {\n            var that = this;\n            var options = that.options;\n            var pointers = options.pointer;\n            var scale = that.scale = new LinearScale(options.scale);\n            var current, currentOptions;\n\n            that.pointers = [];\n\n            pointers = $.isArray(pointers) ? pointers : [pointers];\n            for (var i = 0; i < pointers.length; i++) {\n                currentOptions = deepExtend({}, pointers[i], {\n                        animation: {\n                            transitions: options.transitions\n                        }\n                });\n\n                if (currentOptions.shape === ARROW) {\n                    current = new ArrowLinearPointer(scale, currentOptions);\n                } else {\n                    current = new BarLinearPointer(scale, currentOptions);\n                }\n\n                that.pointers.push(current);\n            }\n        },\n\n        _getSize: function() {\n            var gauge = this;\n            var element = gauge.element;\n            var width = element.width();\n            var height = element.height();\n            var vertical = gauge.options.scale.vertical;\n\n            if (!width) {\n                width = vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH;\n            }\n\n            if (!height) {\n                height = vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT;\n            }\n\n            return { width: width, height: height };\n        },\n\n        _getBox: function(box) {\n            var that = this;\n            var scale = that.scale;\n            var pointers = that.pointers;\n            var boxCenter = box.center();\n            var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n            var size;\n\n            for (var i = 0; i < pointers.length; i++) {\n                plotAreaBox.wrap(pointers[i].box.clone());\n            }\n\n            if (scale.options.vertical) {\n                size = plotAreaBox.width() / 2;\n                plotAreaBox = new Box2D(\n                    boxCenter.x - size, box.y1,\n                    boxCenter.x + size, box.y2\n                );\n            } else {\n                size = plotAreaBox.height() / 2;\n                plotAreaBox = new Box2D(\n                    box.x1, boxCenter.y - size,\n                    box.x2, boxCenter.y + size\n                );\n            }\n\n            return plotAreaBox;\n        },\n\n        _alignElements: function() {\n            var that = this;\n            var scale = that.scale;\n            var pointers = that.pointers;\n            var scaleBox = scale.box;\n            var box = pointers[0].box.clone().wrap(scale.box);\n            var plotAreaBox = that.bbox;\n            var diff, i;\n\n            for (i = 0; i < pointers.length; i++) {\n                box.wrap(pointers[i].box.clone());\n            }\n\n            if (scale.options.vertical) {\n                diff = plotAreaBox.center().x - box.center().x;\n                scale.reflow(new Box2D(\n                    scaleBox.x1 + diff, plotAreaBox.y1,\n                    scaleBox.x2 + diff, plotAreaBox.y2\n                ));\n            } else {\n                diff = plotAreaBox.center().y - box.center().y;\n                scale.reflow(new Box2D(\n                    plotAreaBox.x1, scaleBox.y1 + diff,\n                    plotAreaBox.x2, scaleBox.y2 + diff\n                ));\n            }\n\n            for (i = 0; i < pointers.length; i++) {\n                pointers[i].reflow(that.bbox);\n            }\n        },\n\n        _shrinkElements: function () {\n            var that = this;\n            var scale = that.scale;\n            var pointers = that.pointers;\n            var scaleBox = scale.box.clone();\n            var pos = scale.options.vertical ? \"y\" : \"x\";\n            var pointerBox = pointers[0].box;\n            var i;\n\n            for (i = 0; i < pointers.length; i++) {\n                pointerBox.wrap(pointers[i].box.clone());\n            }\n\n            scaleBox[pos + 1] += math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n            scaleBox[pos + 2] -= math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n\n            scale.reflow(scaleBox);\n\n            for (i = 0; i < pointers.length; i++) {\n                pointers[i].reflow(that.bbox);\n            }\n        }\n    });\n\n    var LinearScale = NumericAxis.extend({\n        init: function (options) {\n            var scale = this;\n\n            scale.options = deepExtend({}, scale.options, options);\n            scale.options = deepExtend({}, scale.options , { labels: { mirror: scale.options.mirror } });\n            scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n\n            Axis.fn.init.call(scale, scale.options);\n            scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n        },\n\n        options: {\n            min: 0,\n            max: 50,\n\n            majorTicks: {\n                size: 15,\n                align: INSIDE,\n                color: BLACK,\n                width: DEFAULT_LINE_WIDTH,\n                visible: true\n            },\n\n            minorTicks: {\n                size: 10,\n                align: INSIDE,\n                color: BLACK,\n                width: DEFAULT_LINE_WIDTH,\n                visible: true\n            },\n\n            line: {\n                width: DEFAULT_LINE_WIDTH\n            },\n\n            labels: {\n                position: INSIDE,\n                padding: 2\n            },\n            mirror: false,\n            _alignLines: false\n        },\n\n        render: function() {\n            var that = this;\n            var elements = that.elements = new Group();\n            var labels = that.renderLabels();\n            var scaleLine = that.renderLine();\n            var scaleTicks = that.renderTicks();\n            var ranges = that.renderRanges();\n\n            elements.append(scaleLine, labels, scaleTicks, ranges);\n\n            return elements;\n        },\n\n        renderRanges: function() {\n            var that = this;\n            var options = that.options;\n            var min = options.min;\n            var max = options.max;\n            var ranges = options.ranges || [];\n            var vertical = options.vertical;\n            var mirror = options.labels.mirror;\n            var elements = new Group();\n            var count = ranges.length;\n            var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n            var range, slot, slotX, slotY, i;\n\n            if (count) {\n                for (i = 0; i < count; i++) {\n                    range = getRange(ranges[i], min, max);\n                    slot = that.getSlot(range.from, range.to);\n                    slotX = vertical ? that.lineBox() : slot;\n                    slotY = vertical ? slot : that.lineBox();\n                    if (vertical) {\n                        slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n                    } else {\n                        slotY.y2 += rangeSize * (mirror ? -1 : 1);\n                    }\n\n                    elements.append(Path.fromRect(new Rect([slotX.x1, slotY.y1],\n                        [slotX.x2 - slotX.x1, slotY.y2 - slotY.y1]), {\n                        fill: { color: range.color, opacity: range.opacity },\n                        stroke: { }\n                    }));\n                }\n            }\n\n            return elements;\n        },\n\n        renderLabels: function() {\n            var that = this;\n            var options = that.options;\n            var labels = that.labels;\n            var elements = new Group();\n\n            for (var i = 0; i < labels.length; i++) {\n                elements.append(_buildLabel(labels[i], options.labels));\n            }\n\n            return elements;\n        },\n\n        renderLine: function() {\n            var that = this;\n            var options = that.options;\n            var line = options.line;\n            var lineBox = that.lineBox();\n            var linePath;\n            var elements = new Group();\n\n            if (line.width > 0 && line.visible) {\n                linePath = new Path({\n                    stroke: {\n                        color: line.color,\n                        dashType: line.dashType,\n                        width: line.width\n                    }\n                });\n\n                linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n                elements.append(linePath);\n            }\n\n            return elements;\n        },\n\n        renderTicks: function() {\n            var that = this;\n            var ticks = new Group();\n            var options = that.options;\n            var lineBox = that.lineBox();\n            var mirror = options.labels.mirror;\n            var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n            var tickLineOptions= {\n               _alignLines: options._alignLines,\n               vertical: options.vertical\n            };\n            var start, end;\n\n            function render(tickPositions, tickOptions) {\n                var i, count = tickPositions.length;\n\n                if (tickOptions.visible) {\n                    for (i = tickOptions.skip; i < count; i += tickOptions.step) {\n                        if (i % tickOptions.skipUnit === 0) {\n                            continue;\n                        }\n\n                        tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n                        tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n                        tickLineOptions.position = tickPositions[i];\n\n                        ticks.append(that.renderAxisTick(tickLineOptions, tickOptions));\n                    }\n                }\n            }\n\n            render(that.getMajorTickPositions(), options.majorTicks);\n            render(that.getMinorTickPositions(), deepExtend({}, {\n                    skipUnit: majorUnit / options.minorUnit\n                }, options.minorTicks));\n\n            return ticks;\n        },\n\n        renderAxisTick: function(options, tickOptions) {\n            var tickX = options.tickX;\n            var tickY = options.tickY;\n            var position = options.position;\n            var start, end, tickPath;\n\n            if (options.vertical) {\n                start = new Point(tickX, position);\n                end = new Point(tickX + tickOptions.size, position);\n            } else {\n                start = new Point(position, tickY);\n                end = new Point(position, tickY + tickOptions.size);\n            }\n\n            tickPath = new Path({\n                stroke: {\n                    color: tickOptions.color,\n                    width: tickOptions.width\n                }\n            }).moveTo(start).lineTo(end);\n\n            return tickPath;\n        }\n    });\n\n    var LinearPointer = Pointer.extend({\n        init: function(scale, options) {\n            var pointer = this;\n\n            Pointer.fn.init.call(pointer, scale, options);\n\n            pointer.options = deepExtend({\n                track: {\n                    visible: defined(options.track)\n                }\n            }, pointer.options);\n        },\n\n        options: {\n            shape: BAR_POINTER,\n\n            track: {\n                border: {\n                    width: 1\n                }\n            },\n\n            color: BLACK,\n            border: {\n                width: 1\n            },\n            opacity: 1,\n\n            margin: getSpacing(3),\n            animation: {\n                type: BAR_POINTER\n            },\n            visible: true\n        },\n\n        reflow: function() {\n            var pointer = this;\n            var options = pointer.options;\n            var scale = pointer.scale;\n            var scaleLine = scale.lineBox();\n            var trackSize = options.track.size || options.size;\n            var pointerHalfSize = options.size / 2;\n            var mirror = scale.options.mirror;\n            var margin = getSpacing(options.margin);\n            var vertical = scale.options.vertical;\n            var space = vertical ?\n                     margin[mirror ? \"left\" : \"right\"] :\n                     margin[mirror ? \"bottom\" : \"top\"];\n            var pointerBox, pointerRangeBox, trackBox;\n\n            space = mirror ? -space : space;\n\n            if (vertical) {\n                trackBox = new Box2D(\n                    scaleLine.x1 + space, scaleLine.y1,\n                    scaleLine.x1 + space, scaleLine.y2);\n\n                if (mirror) {\n                    trackBox.x1 -= trackSize;\n                } else {\n                    trackBox.x2 += trackSize;\n                }\n\n                if (options.shape !== BAR_POINTER) {\n                    pointerRangeBox = new Box2D(\n                        scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize,\n                        scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize\n                    );\n                    pointerBox = pointerRangeBox;\n                }\n            } else {\n                trackBox = new Box2D(\n                    scaleLine.x1, scaleLine.y1 - space,\n                    scaleLine.x2, scaleLine.y1 - space);\n\n                if (mirror) {\n                    trackBox.y2 += trackSize;\n                } else {\n                    trackBox.y1 -= trackSize;\n                }\n\n                if (options.shape !== BAR_POINTER) {\n                    pointerRangeBox = new Box2D(\n                        scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space,\n                        scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space\n                    );\n                    pointerBox = pointerRangeBox;\n                }\n            }\n\n            pointer.trackBox = trackBox;\n            pointer.pointerRangeBox = pointerRangeBox;\n            pointer.box = pointerBox || trackBox.clone().pad(options.border.width);\n        },\n\n        getElementOptions: function() {\n            var options = this.options;\n            var elements = new Group();\n            var scale = this.scale;\n\n            return {\n                fill: {\n                    color: options.color,\n                    opacity: options.opacity\n                },\n                stroke: defined(options.border) ? {\n                    color: options.border.width ? options.border.color || options.color : \"\",\n                    width: options.border.width,\n                    dashType: options.border.dashType,\n                    opacity: options.opacity\n                } : null\n            };\n        },\n\n        _margin: function() {\n            var pointer = this;\n            var options = pointer.options;\n            var scale = pointer.scale;\n            var mirror = scale.options.mirror;\n            var margin = getSpacing(options.margin);\n            var vertical = scale.options.vertical;\n\n            var space = vertical ?\n                     margin[mirror ? \"left\" : \"right\"] :\n                     margin[mirror ? \"bottom\" : \"top\"];\n\n            return space;\n        }\n    });\n\n    var ArrowLinearPointer = LinearPointer.extend({\n        init: function(scale, options) {\n            LinearPointer.fn.init.call(this, scale, options);\n\n            if (this.options.size === undefined) {\n                this.options.size = this.scale.options.majorTicks.size * 0.6;\n            }\n        },\n\n        pointerShape: function(value) {\n            var that = this;\n            var options = that.options;\n            var scale = that.scale;\n            var size = options.size;\n            var vertical = scale.options.vertical;\n            var halfSize = size / 2;\n            var sign = (scale.options.mirror ? -1 : 1);\n            var reverse = scale.options.reverse;\n            var pos, shape;\n\n            if (vertical) {\n                pos = reverse ? \"y2\" : \"y1\";\n                shape = [\n                    new Point(0, 0 - halfSize), new Point(0 - sign * size, 0), new Point(0, 0 + halfSize)\n                ];\n            } else {\n                pos = reverse ? \"x1\" : \"x2\";\n                shape = [\n                    new Point(0 - halfSize, 0), new Point(0, 0 + sign * size), new Point(0 + halfSize, 0)\n                ];\n            }\n\n            return shape;\n        },\n\n        repaint: function() {\n            var that = this;\n            var scale = that.scale;\n            var options = that.options;\n            var animation = new ArrowLinearPointerAnimation(that.elements, deepExtend(options.animation, {\n                vertical: scale.options.vertical,\n                mirror: scale.options.mirror,\n                margin: that._margin(options.margin),\n                from: scale.getSlot(options._oldValue),\n                to: scale.getSlot(options.value)\n            }));\n\n            if (options.animation.transitions === false) {\n                animation.options.duration = 0;\n            }\n\n            animation.setup();\n            animation.play();\n        },\n\n        render: function() {\n            var that = this;\n            var options = that.options;\n            var elements = new Group();\n            var scale = that.scale;\n            var elementOptions = that.getElementOptions();\n            var shape = that.pointerShape(options.value);\n\n            options.animation.type = ARROW_POINTER;\n\n            elements = new Path({\n                stroke: elementOptions.stroke,\n                fill: elementOptions.fill\n            }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n\n            var slot = scale.getSlot(options.value);\n            elements.transform(geo.transform().translate(slot.x1, slot.y1));\n\n            that.elements = elements;\n\n            return elements;\n        }\n    });\n\n    var BarLinearPointer = LinearPointer.extend({\n        init: function(scale, options) {\n            LinearPointer.fn.init.call(this, scale, options);\n\n            if (this.options.size === undefined) {\n                this.options.size = this.scale.options.majorTicks.size * 0.3;\n            }\n        },\n\n        pointerShape: function(value) {\n            var that = this;\n            var options = that.options;\n            var scale = that.scale;\n            var vertical = scale.options.vertical;\n            var mirror = scale.options.mirror ;\n            var dir = mirror == vertical  ? -1 : 1;\n            var size = options.size * dir;\n            var minSlot = scale.getSlot(scale.options.min);\n            var slot = scale.getSlot(value);\n            var axis = vertical ? Y : X;\n            var sizeAxis = vertical ? X : Y;\n            var margin = that._margin() * dir;\n\n            var shape = [];\n            var p1 = new Point();\n            p1[axis] = minSlot[axis + \"1\"];\n            p1[sizeAxis] = minSlot[sizeAxis + \"1\"];\n\n            var p2 = new Point();\n            p2[axis] = slot[axis + \"1\"];\n            p2[sizeAxis] = slot[sizeAxis + \"1\"];\n\n            if (vertical) {\n                p1.translate(margin, 0);\n                p2.translate(margin, 0);\n            } else {\n                p1.translate(0, margin);\n                p2.translate(0, margin);\n            }\n\n            var p3 = p2.clone();\n            var p4 = p1.clone();\n\n            if (vertical) {\n                p3.translate(size, 0);\n                p4.translate(size, 0);\n            } else {\n                p3.translate(0, size);\n                p4.translate(0, size);\n            }\n\n            return [p1, p2, p3, p4];\n        },\n\n        repaint: function() {\n            var that = this;\n            var scale = that.scale;\n            var options = that.options;\n            var shape = that.pointerShape(options.value);\n            var pointerPath = that.elements.children[0];\n            var oldShape = that.pointerShape(options._oldValue);\n\n            pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n\n            var animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n                    reverse:  scale.options.reverse,\n                    vertical: scale.options.vertical,\n                    oldPoints: [oldShape[1], oldShape[2]],\n                    newPoints: [shape[1], shape[2]]\n                }));\n\n            if (options.animation.transitions === false) {\n                animation.options.duration = 0;\n            }\n\n            animation.setup();\n            animation.play();\n        },\n\n        render: function() {\n            var that = this;\n            var options = that.options;\n            var group = new Group();\n            var scale = that.scale;\n            var elementOptions = that.getElementOptions();\n\n            var pointer = new Path({\n                stroke: elementOptions.stroke,\n                fill: elementOptions.fill\n            });\n\n            group.append(pointer);\n\n            that.elements = group;\n\n            return group;\n        }\n    });\n\n    var RadialPointerAnimation = draw.Animation.extend({\n        init: function(element, options){\n            draw.Animation.fn.init.call(this, element, options);\n\n            options = this.options;\n\n            options.duration = math.max((math.abs(options.newAngle - options.oldAngle) / options.duration) * 1000, 1);\n        },\n\n        options: {\n            easing: LINEAR,\n            duration: ANGULAR_SPEED\n        },\n\n        step: function(pos) {\n            var anim = this;\n            var options = anim.options;\n            var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n\n            anim.element.transform(geo.transform().rotate(angle, options.center));\n        }\n    });\n    draw.AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n\n    var ArrowLinearPointerAnimation = draw.Animation.extend({\n        options: {\n            easing: LINEAR,\n            duration: LINEAR_SPEED\n        },\n\n        setup: function() {\n            var options = this.options;\n            var halfSize = this.element.bbox().width() / 2;\n            var margin = options.margin;\n            var from = options.from;\n            var to = options.to;\n            var axis = options.vertical ? \"x1\" : \"y1\";\n\n            if (options.mirror == options.vertical) {\n                from[axis] -= margin; to[axis] -= margin;\n            } else {\n                from[axis] += margin; to[axis] += margin;\n            }\n\n            var fromScale = this.fromScale = new Point(from.x1, from.y1);\n            var toScale = this.toScale = new Point(to.x1, to.y1);\n\n            if (options.duration !== 0) {\n                options.duration = math.max((fromScale.distanceTo(toScale) / options.duration) * 1000, 1);\n            }\n        },\n\n        step: function(pos) {\n            var translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n            var translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n\n            this.element.transform(geo.transform().translate(translateX, translateY));\n        }\n    });\n    draw.AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n\n    var BarLinearPointerAnimation = draw.Animation.extend({\n        options: {\n            easing: LINEAR,\n            speed: LINEAR_SPEED\n        },\n\n        setup: function() {\n            var element = this.element;\n            var options = this.options;\n\n            var newPoints = options.newPoints;\n            var oldPoints = options.oldPoints;\n            var axis = this.axis = options.vertical ? Y : X;\n            var to = this.to = newPoints[0][axis];\n            var from = this.from = oldPoints[0][axis];\n\n            if (options.duration !== 0) {\n                options.duration = math.max((math.abs(to - from) / options.speed) * 1000, 1);\n            }\n\n            this._set(from);\n        },\n\n        step: function(pos) {\n            var value = interpolateValue(this.from, this.to, pos);\n            this._set(value);\n        },\n\n        _set: function(value) {\n            var setter = \"set\" + this.axis.toUpperCase();\n            var points = this.options.newPoints;\n\n            points[0][setter](value);\n            points[1][setter](value);\n        }\n    });\n    draw.AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n\n    function _buildLabel(label, options) {\n        var labelBox = label.box;\n        var textBox = label.children[0].box;\n        var border = options.border || {};\n        var background = options.background || \"\";\n        var elements = new Group();\n        var styleBox, styleGeometry, wrapper;\n\n        wrapper = Path.fromRect(new Rect([labelBox.x1, labelBox.y1], [labelBox.width(), labelBox.height()]), {\n            stroke: {}\n        });\n\n        var text = new Text(label.text, new Point(textBox.x1, textBox.y1), {\n            font: options.font,\n            fill: { color: options.color }\n        });\n\n        styleGeometry = _pad(text.bbox().clone(), options.padding);\n\n        styleBox = Path.fromRect(styleGeometry, {\n            stroke: {\n                color: border.width ? border.color : \"\",\n                width: border.width,\n                dashType: border.dashType,\n                lineJoin: \"round\",\n                lineCap: \"round\"\n            },\n            fill: {\n                color: background\n            }\n        });\n\n        elements.append(wrapper);\n        elements.append(styleBox);\n        elements.append(text);\n\n        return elements;\n    }\n\n    function getRange(range, min, max) {\n        var from = defined(range.from) ? range.from : MIN_VALUE;\n        var to = defined(range.to) ? range.to : MAX_VALUE;\n\n        range.from = math.max(math.min(to, from), min);\n        range.to = math.min(math.max(to, from), max);\n\n        return range;\n    }\n\n    function _pad(bbox, value) {\n        var origin = bbox.getOrigin();\n        var size = bbox.getSize();\n        var spacing = getSpacing(value);\n\n        bbox.setOrigin([origin.x - spacing.left, origin.y - spacing.top]);\n        bbox.setSize([size.width + (spacing.left + spacing.right),\n                      size.height + (spacing.top + spacing.bottom)]);\n\n        return bbox;\n    }\n\n    function _unpad(bbox, value) {\n        var spacing = getSpacing(value);\n\n        spacing.left = -spacing.left; spacing.top = -spacing.top;\n        spacing.right = -spacing.right; spacing.bottom = -spacing.bottom;\n\n        return _pad(bbox, spacing);\n    }\n\n    dataviz.ui.plugin(RadialGauge);\n    dataviz.ui.plugin(LinearGauge);\n    dataviz.ExportMixin.extend(Gauge.fn);\n\n    deepExtend(dataviz, {\n        Gauge: Gauge,\n        RadialPointer: RadialPointer,\n        LinearPointer: LinearPointer,\n        ArrowLinearPointer: ArrowLinearPointer,\n        BarLinearPointer: BarLinearPointer,\n        LinearScale: LinearScale,\n        RadialScale: RadialScale,\n        LinearGauge: LinearGauge,\n        RadialGauge: RadialGauge\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n\n        extend = $.extend,\n        deepExtend = kendo.deepExtend,\n        inArray = $.inArray,\n        isPlainObject = $.isPlainObject,\n\n        draw = kendo.drawing,\n        geom = kendo.geometry,\n        util = kendo.util,\n        defined = util.defined,\n        append = util.append,\n        dataviz = kendo.dataviz,\n        Box2D = dataviz.Box2D,\n        TextBox = dataviz.TextBox,\n        DEFAULT_WIDTH = 300,\n        DEFAULT_HEIGHT = 100,\n        DEFAULT_QUIETZONE_LENGTH = 10,\n        numberRegex = /^\\d+$/,\n        alphanumericRegex = /^[a-z0-9]+$/i,\n        InvalidCharacterErrorTemplate = \"Character '{0}' is not valid for symbology {1}\";\n\n    function getNext(value, index, count){\n        return value.substring(index, index + count);\n    }\n\n    var Encoding  = kendo.Class.extend({\n        init: function (options) {\n            this.setOptions(options);\n        },\n        setOptions: function(options){\n            var that = this;\n            that.options = extend({}, that.options, options);\n            that.quietZoneLength = that.options.addQuietZone ? 2 * that.options.quietZoneLength : 0;\n        },\n        encode: function (value, width, height) {\n            var that = this;\n            if (defined(value)) {\n                value+='';\n            }\n\n            that.initValue(value, width, height);\n\n            if (that.options.addQuietZone) {\n                that.addQuietZone();\n            }\n\n            that.addData();\n\n            if (that.options.addQuietZone) {\n                that.addQuietZone();\n            }\n\n            return {\n                baseUnit: that.baseUnit,\n                pattern: that.pattern\n            };\n        },\n        options: {\n            quietZoneLength: DEFAULT_QUIETZONE_LENGTH,\n            addQuietZone: true,\n            addCheckSum: true\n        },\n        initValue: function () {},\n        addQuietZone: function () {\n            this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIETZONE_LENGTH);\n        },\n        addData: function () {\n        },\n        invalidCharacterError: function(character){\n            throw new Error(kendo.format(InvalidCharacterErrorTemplate, character, this.name));\n        }\n    });\n\n    var encodings = {};\n\n    var code39Base = Encoding.extend({\n        minBaseUnitLength: 0.7,\n        addData: function(){\n            var that = this,\n                value  = that.value;\n\n            that.addStart();\n\n            for(var idx = 0; idx < value.length; idx++){\n                that.addCharacter(value.charAt(idx));\n            }\n\n            if(that.options.addCheckSum){\n                that.pushCheckSum();\n            }\n\n            that.addStop();\n            that.prepareValues();\n        },\n        addCharacter: function(character){\n            var that = this,\n                charData = that.characterMap[character];\n            if(!charData){\n                that.invalidCharacterError(character);\n            }\n            that.addBase(charData);\n        },\n        addBase: function(){}\n    });\n\n    var code39ExtendedBase = {\n        addCharacter: function(character){\n            var that = this;\n            if(that.characterMap[character]){\n                that.addBase(that.characterMap[character]);\n            }\n            else if(character.charCodeAt(0) > 127){\n                that.invalidCharacterError(character);\n            }\n            else{\n                that.addExtended(character.charCodeAt(0));\n            }\n        },\n        addExtended: function(code){\n            var that = this,\n                patterns;\n            for(var i = 0; i < that.extendedMappings.length; i++){\n                if((patterns = that.extendedMappings[i].call(that, code))){\n                    for(var j = 0; j < patterns.length; j++){\n                        that.addBase(patterns[j]);\n                    }\n                    that.dataLength+= patterns.length - 1;\n                    return;\n                }\n            }\n        },\n        extendedMappings: [\n            function(code){\n                if(97 <= code && code <= 122){\n                    var that = this;\n                    return [that.characterMap[that.shiftCharacters[0]], that.characterMap[String.fromCharCode(code - 32)]];\n                }\n            },\n            function(code){\n                if(33 <= code && code <= 58){\n                    var that = this;\n                    return [that.characterMap[that.shiftCharacters[1]], that.characterMap[String.fromCharCode(code + 32)]];\n                }\n            },\n            function(code){\n                if(1 <= code && code <= 26){\n                    var that = this;\n                    return [that.characterMap[that.shiftCharacters[2]], that.characterMap[String.fromCharCode(code + 64)]];\n                }\n            },\n            function(code){\n                var that = this,\n                    result,\n                    dataCharacter;\n                if(!that.specialAsciiCodes[code]){\n                    dataCharacter =  Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n                    result = [that.characterMap[that.shiftCharacters[3]], that.characterMap[String.fromCharCode(dataCharacter)]];\n                }\n                else{\n                    result = [];\n                    for(var i = 0; i < that.specialAsciiCodes[code].length; i++){\n                        result.push(that.characterMap[that.shiftCharacters[3]]);\n                        result.push(that.characterMap[that.specialAsciiCodes[code][i]]);\n                    }\n                }\n\n                return result;\n            }\n        ],\n        specialAsciiCodes: {\n            \"0\": [\"U\"],\n            \"64\": [\"V\"],\n            \"96\": [\"W\"],\n            \"127\": [\"T\",\"X\",\"Y\",\"Z\"]\n        },\n        shiftValuesAsciiCodes:{\n            \"39\": 36,\n            \"40\": 47,\n            \"41\": 43,\n            \"42\": 37\n        },\n        characterMap: {\n            \"+\": false,\n            \"/\": false,\n            \"$\": false,\n            \"%\": false\n        },\n        shiftCharacters: [\"SHIFT0\", \"SHIFT1\", \"SHIFT2\", \"SHIFT3\"]\n    };\n\n    encodings.code39 =  code39Base.extend({\n        name: \"Code 39\",\n        checkSumMod: 43,\n        minRatio: 2.5,\n        maxRatio: 3,\n        gapWidth: 1,\n        splitCharacter: \"|\",\n        initValue: function (value, width, height) {\n            var that = this;\n            that.width = width;\n            that.height = height;\n            that.value = value;\n            that.dataLength = value.length;\n            that.pattern = [];\n            that.patternString = \"\";\n        },\n        prepareValues: function(){\n            var that = this,\n                baseUnit,\n                minBaseUnit = that.minBaseUnitLength,\n                ratio = that.maxRatio,\n                minRatio = that.minRatio,\n                minHeight = Math.max(0.15 * that.width, 24);\n            if (that.height < minHeight) {\n                throw new Error(\"Insufficient Height. The minimum height for value: \" + that.value + \" is: \" + minHeight);\n            }\n\n            while((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio){\n                ratio = parseFloat((ratio - 0.1).toFixed(1));\n            }\n\n            if(baseUnit < minBaseUnit){\n                var minWidth = Math.ceil(that.getBaseWidth(minRatio) * minBaseUnit);\n                throw new Error(\"Insufficient width. The minimum width for value: \" + that.value + \" is: \" + minWidth);\n            }\n\n            that.ratio = ratio;\n            that.baseUnit = baseUnit;\n            that.patternString = that.patternString.substring(0, that.patternString.length - 1);\n            that.pattern = that.pattern.concat(that.patternString.replace(/ratio/g, ratio).split(that.splitCharacter));\n        },\n        getBaseUnit: function(ratio){\n            return this.width / this.getBaseWidth(ratio);\n        },\n        getBaseWidth: function(ratio){\n            var that = this,\n                characterLength = 3 * (ratio + 2);\n            return that.quietZoneLength + characterLength * (that.dataLength + 2) + that.gapWidth * (that.dataLength + 1);\n        },\n        addStart: function () {\n            var that = this;\n            that.addPattern(that.characterMap.START.pattern);\n            that.addCharacterGap();\n        },\n        addBase: function(character){\n            this.addPattern(character.pattern);\n            this.addCharacterGap();\n        },\n        addStop: function () {\n            this.addPattern(this.characterMap.START.pattern);\n        },\n        addPattern: function (pattern) {\n            for (var i = 0; i < pattern.length; i++) {\n                 this.patternString+= this.patternMappings[pattern.charAt(i)];\n            }\n        },\n        addCharacterGap: function () {\n            var that = this;\n            that.patternString+=that.gapWidth + that.splitCharacter;\n        },\n        patternMappings: {\n            \"b\": \"1|\",\n            \"w\": \"1|\",\n            \"B\": \"ratio|\",\n            \"W\": \"ratio|\"\n        },\n        characterMap: {\n            \"0\":{\"pattern\":\"bwbWBwBwb\",\"value\":0},\n            \"1\":{\"pattern\":\"BwbWbwbwB\",\"value\":1},\n            \"2\":{\"pattern\":\"bwBWbwbwB\",\"value\":2},\n            \"3\":{\"pattern\":\"BwBWbwbwb\",\"value\":3},\n            \"4\":{\"pattern\":\"bwbWBwbwB\",\"value\":4},\n            \"5\":{\"pattern\":\"BwbWBwbwb\",\"value\":5},\n            \"6\":{\"pattern\":\"bwBWBwbwb\",\"value\":6},\n            \"7\":{\"pattern\":\"bwbWbwBwB\",\"value\":7},\n            \"8\":{\"pattern\":\"BwbWbwBwb\",\"value\":8},\n            \"9\":{\"pattern\":\"bwBWbwBwb\",\"value\":9},\n            \"A\":{\"pattern\":\"BwbwbWbwB\",\"value\":10},\n            \"B\":{\"pattern\":\"bwBwbWbwB\",\"value\":11},\n            \"C\":{\"pattern\":\"BwBwbWbwb\",\"value\":12},\n            \"D\":{\"pattern\":\"bwbwBWbwB\",\"value\":13},\n            \"E\":{\"pattern\":\"BwbwBWbwb\",\"value\":14},\n            \"F\":{\"pattern\":\"bwBwBWbwb\",\"value\":15},\n            \"G\":{\"pattern\":\"bwbwbWBwB\",\"value\":16},\n            \"H\":{\"pattern\":\"BwbwbWBwb\",\"value\":17},\n            \"I\":{\"pattern\":\"bwBwbWBwb\",\"value\":18},\n            \"J\":{\"pattern\":\"bwbwBWBwb\",\"value\":19},\n            \"K\":{\"pattern\":\"BwbwbwbWB\",\"value\":20},\n            \"L\":{\"pattern\":\"bwBwbwbWB\",\"value\":21},\n            \"M\":{\"pattern\":\"BwBwbwbWb\",\"value\":22},\n            \"N\":{\"pattern\":\"bwbwBwbWB\",\"value\":23},\n            \"O\":{\"pattern\":\"BwbwBwbWb\",\"value\":24},\n            \"P\":{\"pattern\":\"bwBwBwbWb\",\"value\":25},\n            \"Q\":{\"pattern\":\"bwbwbwBWB\",\"value\":26},\n            \"R\":{\"pattern\":\"BwbwbwBWb\",\"value\":27},\n            \"S\":{\"pattern\":\"bwBwbwBWb\",\"value\":28},\n            \"T\":{\"pattern\":\"bwbwBwBWb\",\"value\":29},\n            \"U\":{\"pattern\":\"BWbwbwbwB\",\"value\":30},\n            \"V\":{\"pattern\":\"bWBwbwbwB\",\"value\":31},\n            \"W\":{\"pattern\":\"BWBwbwbwb\",\"value\":32},\n            \"X\":{\"pattern\":\"bWbwBwbwB\",\"value\":33},\n            \"Y\":{\"pattern\":\"BWbwBwbwb\",\"value\":34},\n            \"Z\":{\"pattern\":\"bWBwBwbwb\",\"value\":35},\n            \"-\":{\"pattern\":\"bWbwbwBwB\",\"value\":36},\n            \".\":{\"pattern\":\"BWbwbwBwb\",\"value\":37},\n            \" \":{\"pattern\":\"bWBwbwBwb\",\"value\":38},\n            \"$\":{\"pattern\":\"bWbWbWbwb\",\"value\":39},\n            \"/\":{\"pattern\":\"bWbWbwbWb\",\"value\":40},\n            \"+\":{\"pattern\":\"bWbwbWbWb\",\"value\":41},\n            \"%\":{\"pattern\":\"bwbWbWbWb\",\"value\":42},\n            START: { pattern: \"bWbwBwBwb\"}\n        },\n        options: {\n            addCheckSum: false\n        }\n    });\n\n    encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, {\n        name: \"Code 39 extended\",\n        characterMap: {\n            SHIFT0: {\"pattern\":\"bWbwbWbWb\",\"value\":41},\n            SHIFT1: {\"pattern\":\"bWbWbwbWb\",\"value\":40},\n            SHIFT2: {\"pattern\":\"bWbWbWbwb\",\"value\":39},\n            SHIFT3: {\"pattern\":\"bwbWbWbWb\",\"value\":42}\n        }\n    }));\n\n    encodings.code93 = code39Base.extend({\n        name: \"Code 93\",\n        cCheckSumTotal: 20,\n        kCheckSumTotal: 15,\n        checkSumMod: 47,\n        initValue: function(value, width, height){\n            var that = this;\n            that.value = value;\n            that.width = width;\n            that.height = height;\n            that.pattern = [];\n            that.values = [];\n            that.dataLength = value.length;\n        },\n        prepareValues: function(){\n            var that = this,\n                minHeight = Math.max(0.15 * that.width, 24);\n            if (that.height < minHeight) {\n                throw new Error(\"Insufficient Height\");\n            }\n\n            that.setBaseUnit();\n\n            if(that.baseUnit < that.minBaseUnitLength){\n                throw new Error(\"Insufficient Width\");\n            }\n        },\n        setBaseUnit: function(){\n            var that = this,\n                checkSumLength = 2;\n            that.baseUnit = that.width / (9 * (that.dataLength + 2 + checkSumLength) + that.quietZoneLength + 1);\n        },\n        addStart: function(){\n            var pattern = this.characterMap.START.pattern;\n            this.addPattern(pattern);\n        },\n        addStop: function(){\n            var that = this;\n            that.addStart();\n            that.pattern.push(that.characterMap.TERMINATION_BAR);\n        },\n        addBase: function(charData){\n            this.addPattern(charData.pattern);\n            this.values.push(charData.value);\n        },\n        pushCheckSum: function(){\n            var that = this,\n                checkValues = that._getCheckValues(),\n                charData;\n\n            that.checksum = checkValues.join(\"\");\n            for(var i = 0; i < checkValues.length; i++){\n                charData = that.characterMap[that._findCharacterByValue(checkValues[i])];\n                that.addPattern(charData.pattern);\n            }\n        },\n        _getCheckValues: function(){\n            var that = this,\n                values = that.values,\n                length = values.length,\n                wightedSum = 0,\n                cValue,\n                kValue,\n                idx;\n\n            for(idx = length - 1; idx >= 0; idx--){\n                wightedSum += that.weightedValue(values[idx],length - idx, that.cCheckSumTotal);\n            }\n            cValue = wightedSum % that.checkSumMod;\n\n            wightedSum = that.weightedValue(cValue, 1, that.kCheckSumTotal);\n            for(idx = length - 1; idx >= 0; idx--){\n                wightedSum += that.weightedValue(values[idx], length - idx + 1, that.kCheckSumTotal);\n            }\n\n            kValue = wightedSum % that.checkSumMod;\n            return [cValue, kValue];\n        },\n        _findCharacterByValue: function (value) {\n            for (var character in this.characterMap) {\n                if (this.characterMap[character].value === value) {\n                    return character;\n                }\n            }\n        },\n        weightedValue: function(value, index, total){\n            return (index % total || total) * value;\n        },\n        addPattern: function(pattern){\n            var value;\n\n            for(var i = 0; i < pattern.length; i++){\n                value = parseInt(pattern.charAt(i),10);\n                this.pattern.push(value);\n            }\n        },\n        characterMap: {\n            \"0\":{\"pattern\":\"131112\",\"value\":0},\n            \"1\":{\"pattern\":\"111213\",\"value\":1},\n            \"2\":{\"pattern\":\"111312\",\"value\":2},\n            \"3\":{\"pattern\":\"111411\",\"value\":3},\n            \"4\":{\"pattern\":\"121113\",\"value\":4},\n            \"5\":{\"pattern\":\"121212\",\"value\":5},\n            \"6\":{\"pattern\":\"121311\",\"value\":6},\n            \"7\":{\"pattern\":\"111114\",\"value\":7},\n            \"8\":{\"pattern\":\"131211\",\"value\":8},\n            \"9\":{\"pattern\":\"141111\",\"value\":9},\n            \"A\":{\"pattern\":\"211113\",\"value\":10},\n            \"B\":{\"pattern\":\"211212\",\"value\":11},\n            \"C\":{\"pattern\":\"211311\",\"value\":12},\n            \"D\":{\"pattern\":\"221112\",\"value\":13},\n            \"E\":{\"pattern\":\"221211\",\"value\":14},\n            \"F\":{\"pattern\":\"231111\",\"value\":15},\n            \"G\":{\"pattern\":\"112113\",\"value\":16},\n            \"H\":{\"pattern\":\"112212\",\"value\":17},\n            \"I\":{\"pattern\":\"112311\",\"value\":18},\n            \"J\":{\"pattern\":\"122112\",\"value\":19},\n            \"K\":{\"pattern\":\"132111\",\"value\":20},\n            \"L\":{\"pattern\":\"111123\",\"value\":21},\n            \"M\":{\"pattern\":\"111222\",\"value\":22},\n            \"N\":{\"pattern\":\"111321\",\"value\":23},\n            \"O\":{\"pattern\":\"121122\",\"value\":24},\n            \"P\":{\"pattern\":\"131121\",\"value\":25},\n            \"Q\":{\"pattern\":\"212112\",\"value\":26},\n            \"R\":{\"pattern\":\"212211\",\"value\":27},\n            \"S\":{\"pattern\":\"211122\",\"value\":28},\n            \"T\":{\"pattern\":\"211221\",\"value\":29},\n            \"U\":{\"pattern\":\"221121\",\"value\":30},\n            \"V\":{\"pattern\":\"222111\",\"value\":31},\n            \"W\":{\"pattern\":\"112122\",\"value\":32},\n            \"X\":{\"pattern\":\"112221\",\"value\":33},\n            \"Y\":{\"pattern\":\"122121\",\"value\":34},\n            \"Z\":{\"pattern\":\"123111\",\"value\":35},\n            \"-\":{\"pattern\":\"121131\",\"value\":36},\n            \".\":{\"pattern\":\"311112\",\"value\":37},\n            \" \":{\"pattern\":\"311211\",\"value\":38},\n            \"$\":{\"pattern\":\"321111\",\"value\":39},\n            \"/\":{\"pattern\":\"112131\",\"value\":40},\n            \"+\":{\"pattern\":\"113121\",\"value\":41},\n            \"%\":{\"pattern\":\"211131\",\"value\":42},\n            SHIFT0:{\"pattern\":\"122211\",\"value\":46},\n            SHIFT1:{\"pattern\":\"311121\",\"value\":45},\n            SHIFT2:{\"pattern\":\"121221\",\"value\":43},\n            SHIFT3:{\"pattern\":\"312111\",\"value\":44},\n            START: {\"pattern\":\"111141\"},\n            TERMINATION_BAR: \"1\"\n        }\n    });\n\n    encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, {\n        name: \"Code 93 extended\",\n        pushCheckSum: function(){\n            var that = this,\n                checkValues = that._getCheckValues(),\n                value;\n\n            that.checksum = checkValues.join(\"\");\n\n            for(var i = 0; i < checkValues.length; i++){\n                value = checkValues[i];\n                if(that.shiftValuesAsciiCodes[value]){\n                    that.addExtended(that.shiftValuesAsciiCodes[value]);\n                }\n                else{\n                    that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern);\n                }\n            }\n        }\n    }));\n\n    var state128 = kendo.Class.extend({\n        init: function(encoding){\n            this.encoding = encoding;\n        },\n        addStart: function(){},\n        is: function (){},\n        move: function (){},\n        pushState: function(){}\n    });\n\n    var state128AB = state128.extend({\n        FNC4: \"FNC4\",\n        init: function(encoding, states){\n            var that = this;\n            that.encoding = encoding;\n            that.states = states;\n            that._initMoves(states);\n        },\n        addStart: function(){\n            this.encoding.addPattern(this.START);\n        },\n        is: function (value, index){\n            var code = value.charCodeAt(index);\n            return this.isCode(code);\n        },\n        move: function(encodingState){\n            var that = this,\n                idx = 0;\n\n            while(!that._moves[idx].call(that, encodingState) && idx < that._moves.length){\n                idx++;\n            }\n        },\n        pushState: function(encodingState){\n            var that = this,\n                states = that.states,\n                value = encodingState.value,\n                maxLength = value.length,\n                code;\n\n            if(inArray(\"C\", states) >= 0){\n                var numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n                if(numberMatch){\n                    maxLength = value.indexOf(numberMatch[0], encodingState.index);\n                }\n            }\n\n            while((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 &&\n                that.isCode(code) && encodingState.index < maxLength){\n                that.encoding.addPattern(that.getValue(code));\n                encodingState.index++;\n            }\n        },\n        _initMoves: function(states){\n            var that = this;\n            that._moves = [];\n\n            if(inArray(that.FNC4, states) >= 0){\n                that._moves.push(that._moveFNC);\n            }\n\n            if(inArray(that.shiftKey, states) >= 0){\n                that._moves.push(that._shiftState);\n            }\n            that._moves.push(that._moveState);\n        },\n        _moveFNC: function(encodingState){\n            if(encodingState.fnc){\n                encodingState.fnc = false;\n                return encodingState.previousState == this.key;\n            }\n        },\n        _shiftState: function(encodingState){\n            var that = this;\n            if(encodingState.previousState == that.shiftKey &&\n                (encodingState.index + 1 >= encodingState.value.length ||\n                    that.encoding[that.shiftKey].is(encodingState.value, encodingState.index + 1))){\n                that.encoding.addPattern(that.SHIFT);\n                encodingState.shifted = true;\n                return true;\n            }\n        },\n        _moveState: function(){\n            this.encoding.addPattern(this.MOVE);\n            return true;\n        },\n        SHIFT: 98\n    });\n\n    var states128 = {};\n\n    states128.A = state128AB.extend({\n        key: \"A\",\n        shiftKey: \"B\",\n        isCode: function(code){\n            return 0 <= code && code < 96;\n        },\n        getValue: function(code){\n            if(code < 32){\n                return code + 64;\n            }\n\n            return code - 32;\n        },\n        MOVE: 101,\n        START: 103\n    });\n\n    states128.B = state128AB.extend({\n        key: \"B\",\n        shiftKey: \"A\",\n        isCode: function(code){\n            return 32 <= code && code < 128;\n        },\n        getValue: function(code){\n            return code - 32;\n        },\n        MOVE: 100,\n        START: 104\n    });\n\n    states128.C = state128.extend({\n        key: \"C\",\n        addStart: function(){\n            this.encoding.addPattern(this.START);\n        },\n        is: function (value, index){\n            var next4 = getNext(value, index, 4);\n            return (index + 4 <= value.length || value.length == 2) && numberRegex.test(next4);\n        },\n        move: function (){\n            this.encoding.addPattern(this.MOVE);\n        },\n        pushState: function(encodingState){\n            var code;\n            while(( code = getNext(encodingState.value, encodingState.index, 2)) &&\n                numberRegex.test(code) && code.length == 2)\n            {\n                this.encoding.addPattern(parseInt(code, 10));\n                encodingState.index+=2;\n            }\n        },\n        getValue: function(code){\n            return code;\n        },\n        MOVE: 99,\n        START: 105\n    });\n\n    states128.FNC4 = state128.extend({\n        key: \"FNC4\",\n        dependentStates: [\"A\",\"B\"],\n        init: function(encoding, states){\n            this.encoding = encoding;\n            this._initSubStates(states);\n        },\n        addStart: function(encodingState){\n            var code = encodingState.value.charCodeAt(0) - 128,\n                subState = this._getSubState(code);\n\n            this.encoding[subState].addStart();\n        },\n        is: function(value, index){\n            var code = value.charCodeAt(index);\n            return this.isCode(code);\n        },\n        isCode: function(code){\n            return 128 <= code && code < 256;\n        },\n        pushState: function(encodingState){\n            var that = this,\n                subState = that._initSubState(encodingState),\n                encoding = that.encoding,\n                length = subState.value.length;\n            encodingState.index += length;\n\n            if(length < 3){\n                var code;\n                for(; subState.index < length; subState.index++){\n                    code = subState.value.charCodeAt(subState.index);\n                    subState.state = that._getSubState(code);\n                    if(subState.previousState != subState.state){\n                        subState.previousState = subState.state;\n                        encoding[subState.state].move(subState);\n                    }\n                    encoding.addPattern(encoding[subState.state].MOVE);\n                    encoding.addPattern(encoding[subState.state].getValue(code));\n                }\n            }\n            else{\n                if(subState.state != subState.previousState){\n                    encoding[subState.state].move(subState);\n                }\n                that._pushStart(subState);\n                encoding.pushData(subState, that.subStates);\n                if(encodingState.index < encodingState.value.length){\n                    that._pushStart(subState);\n                }\n            }\n\n            encodingState.fnc = true;\n            encodingState.state = subState.state;\n        },\n        _pushStart: function(subState){\n            var that = this;\n            that.encoding.addPattern(that.encoding[subState.state].MOVE);\n            that.encoding.addPattern(that.encoding[subState.state].MOVE);\n        },\n        _initSubState: function(encodingState){\n            var that = this,\n                subState = {\n                    value: that._getAll(encodingState.value, encodingState.index),\n                    index: 0\n                };\n            subState.state = that._getSubState(subState.value.charCodeAt(0));\n            subState.previousState = encodingState.previousState == that.key ?\n                subState.state : encodingState.previousState;\n            return subState;\n        },\n        _initSubStates: function(states){\n            var that = this;\n            that.subStates = [];\n            for(var i = 0; i < states.length; i++){\n                if(inArray(states[i], that.dependentStates) >= 0){\n                    that.subStates.push(states[i]);\n                }\n            }\n        },\n        _getSubState: function(code){\n            var that = this;\n            for(var i = 0; i < that.subStates.length; i++){\n                if(that.encoding[that.subStates[i]].isCode(code)){\n                    return that.subStates[i];\n                }\n            }\n        },\n        _getAll: function(value, index){\n            var code,\n                result = \"\";\n            while((code = value.charCodeAt(index++)) && this.isCode(code)){\n                result += String.fromCharCode(code - 128);\n            }\n            return result;\n        }\n    });\n\n    states128.FNC1 = state128.extend({\n        key: \"FNC1\",\n        startState: \"C\",\n        dependentStates: [\"C\",\"B\"],\n        startAI: \"(\",\n        endAI: \")\",\n        init: function(encoding, states){\n            this.encoding = encoding;\n            this.states = states;\n        },\n        addStart: function(){\n            this.encoding[this.startState].addStart();\n        },\n        is: function(){\n            return inArray(this.key, this.states) >= 0;\n        },\n        pushState: function(encodingState){\n            var that = this,\n                encoding = that.encoding,\n                value = encodingState.value.replace(/\\s/g, \"\"),\n                regexSeparators = new RegExp(\"[\" +  that.startAI + that.endAI + \"]\", \"g\"),\n                index = encodingState.index,\n                subState= {\n                    state: that.startState\n                },\n                current,\n                nextStart,\n                separatorLength;\n\n            encoding.addPattern(that.START);\n\n            while(true){\n                subState.index = 0;\n\n                separatorLength = value.charAt(index) === that.startAI ? 2 : 0;\n                current = separatorLength > 0 ? that.getBySeparator(value, index) : that.getByLength(value, index);\n                if(current.ai.length){\n                    nextStart = index + separatorLength + current.id.length + current.ai.length;\n                }\n                else{\n                    nextStart = value.indexOf(that.startAI, index + 1);\n                    if(nextStart < 0){\n                        if(index + current.ai.max + current.id.length + separatorLength < value.length){\n                            throw new Error(\"Separators are required after variable length identifiers\");\n                        }\n                        nextStart = value.length;\n                    }\n                }\n                subState.value = value.substring(index, nextStart).replace(regexSeparators, \"\");\n                that.validate(current, subState.value);\n\n                encoding.pushData(subState, that.dependentStates);\n\n                if(nextStart >= value.length){\n                    break;\n                }\n\n                index = nextStart;\n\n                if(subState.state != that.startState){\n                    encoding[that.startState].move(subState);\n                    subState.state = that.startState;\n                }\n\n                if(!current.ai.length){\n                    encoding.addPattern(that.START);\n                }\n            }\n            encodingState.index = encodingState.value.length;\n        },\n        validate: function(current, value){\n            var code = value.substr(current.id.length),\n                ai = current.ai;\n            if(!ai.type && !numberRegex.test(code)){\n                throw new Error(\"Application identifier \" + current.id+ \" is numeric only but contains non numeric character(s).\");\n            }\n\n            if(ai.type == \"alphanumeric\" && !alphanumericRegex.test(code)){\n                 throw new Error(\"Application identifier \" + current.id+ \" is alphanumeric only but contains non alphanumeric character(s).\");\n            }\n\n            if(ai.length && ai.length !== code.length){\n                 throw new Error(\"Application identifier \" + current.id + \" must be \" + ai.length + \" characters long.\");\n            }\n\n            if(ai.min && ai.min > code.length){\n                 throw new Error(\"Application identifier \" + current.id + \" must be at least \" + ai.min + \" characters long.\");\n            }\n\n            if(ai.max && ai.max < code.length){\n                 throw new Error(\"Application identifier \" + current.id + \" must be at most \" + ai.max + \" characters long.\");\n            }\n        },\n        getByLength: function(value, index){\n            var that = this,\n                id,\n                ai;\n            for(var i = 2; i <= 4; i++){\n                id = getNext(value, index, i);\n                ai = that.getAI(id) || that.getAI(id.substring(0, id.length - 1));\n                if(ai){\n                    return {\n                        id: id,\n                        ai: ai\n                    };\n                }\n            }\n            that.unsupportedAIError(id);\n        },\n        unsupportedAIError: function(id){\n            throw new Error(kendo.format(\"'{0}' is not a supported Application Identifier\"),id);\n        },\n        getBySeparator: function(value, index){\n            var that = this,\n                start = value.indexOf(that.startAI, index),\n                end = value.indexOf(that.endAI, start),\n                id = value.substring(start + 1,end),\n                ai = that.getAI(id) || that.getAI(id.substr(id.length - 1));\n            if(!ai){\n                that.unsupportedAIError(id);\n            }\n\n            return {\n                ai: ai,\n                id: id\n            };\n        },\n        getAI: function(id){\n            var ai = this.applicationIdentifiers,\n                multiKey = ai.multiKey;\n            if(ai[id]){\n                return ai[id];\n            }\n\n            for(var i = 0; i < multiKey.length; i++){\n                if(multiKey[i].ids && inArray(id, multiKey[i].ids) >= 0){\n                    return multiKey[i].type;\n                }\n                else if(multiKey[i].ranges){\n                    var ranges = multiKey[i].ranges;\n                    for(var j = 0; j < ranges.length; j++){\n                        if(ranges[j][0] <= id && id <= ranges[j][1]){\n                            return multiKey[i].type;\n                        }\n                    }\n                }\n            }\n        },\n        applicationIdentifiers: {\n            \"22\": {max: 29, type: \"alphanumeric\"},\n            \"402\": {length: 17},\n            \"7004\": {max: 4, type: \"alphanumeric\"},\n            \"242\": {max: 6, type: \"alphanumeric\"},\n            \"8020\": {max: 25, type: \"alphanumeric\"},\n            \"703\": { min: 3, max: 30, type: \"alphanumeric\"},\n            \"8008\": { min: 8, max: 12, type: \"alphanumeric\"},\n            \"253\": { min: 13, max: 17, type: \"alphanumeric\"},\n            \"8003\": { min: 14, max: 30, type: \"alphanumeric\"},\n            multiKey: [{\n                ids: [\"15\", \"17\", \"8005\", \"8100\"],\n                ranges: [\n                    [11, 13],\n                    [310, 316],\n                    [320, 336],\n                    [340, 369]\n                ],\n                type: { length: 6}\n            },{\n                ids: [\"240\", \"241\", \"250\", \"251\", \"400\", \"401\", \"403\", \"7002\", \"8004\", \"8007\", \"8110\"],\n                ranges: [[90-99]],\n                type: {max: 30, type: \"alphanumeric\"}\n            },{\n                ids: [\"7001\"],\n                ranges: [[410, 414]],\n                type: { length: 13}\n            },{\n                ids: [\"10\",\"21\", \"254\", \"420\", \"8002\"],\n                type: {max: 20, type: \"alphanumeric\"}\n            },{\n                ids: [\"00\", \"8006\", \"8017\", \"8018\"],\n                type: {length: 18}\n            },{\n                ids: [\"01\", \"02\", \"8001\"],\n                type: { length: 14}\n            },{\n                ids: [\"422\"],\n                ranges: [\n                    [424, 426]\n                ],\n                type: {length: 3}\n            },{\n                ids: [\"20\", \"8102\"],\n                type: { length: 2}\n            },{\n                ids: [\"30\",\"37\"],\n                type: {max: 8, type: \"alphanumeric\"}\n            },{\n                ids: [\"390\",\"392\"],\n                type: {max: 15, type: \"alphanumeric\"}\n            },{\n                ids: [\"421\", \"423\"],\n                type: { min: 3, max: 15, type: \"alphanumeric\"}\n            }, {\n                ids: [\"391\", \"393\"],\n                type: { min: 3, max: 18, type: \"alphanumeric\"}\n            },{\n                ids: [\"7003\", \"8101\"],\n                type: {length: 10}\n            }]\n        },\n        START: 102\n    });\n\n    var code128Base = Encoding.extend({\n        init: function (options) {\n            Encoding.fn.init.call(this, options);\n            this._initStates();\n        },\n        _initStates: function(){\n            var that = this;\n            for(var i = 0; i < that.states.length; i++){\n                that[that.states[i]]  = new states128[that.states[i]](that, that.states);\n            }\n        },\n        initValue: function (value, width, height) {\n           var that = this;\n           that.pattern = [];\n           that.value = value;\n           that.width = width;\n           that.height = height;\n           that.checkSum = 0;\n           that.totalUnits = 0;\n           that.index = 0;\n           that.position = 1;\n        },\n        addData: function(){\n            var that = this,\n                encodingState = {\n                    value: that.value,\n                    index: 0,\n                    state: \"\"\n                };\n            if(that.value.length === 0){\n                return;\n            }\n\n            encodingState.state =\n                encodingState.previousState = that.getNextState(encodingState, that.states);\n\n            that.addStart(encodingState);\n\n            that.pushData(encodingState, that.states);\n\n            that.addCheckSum();\n            that.addStop();\n            that.setBaseUnit();\n        },\n        pushData: function(encodingState, states){\n            var that = this;\n            while(true){\n                that[encodingState.state].pushState(encodingState);\n                if(encodingState.index >= encodingState.value.length){\n                    break;\n                }\n\n                if(!encodingState.shifted){\n                    encodingState.previousState = encodingState.state;\n                    encodingState.state  = that.getNextState(encodingState, states);\n                    that[encodingState.state].move(encodingState);\n                }\n                else{\n                   var temp = encodingState.state;\n                   encodingState.state = encodingState.previousState;\n                   encodingState.previousState = temp;\n                   encodingState.shifted = false;\n                }\n            }\n        },\n        addStart: function(encodingState){\n            this[encodingState.state].addStart(encodingState);\n            this.position = 1;\n        },\n        addCheckSum: function(){\n            var that = this;\n\n            that.checksum = that.checkSum % 103;\n            that.addPattern(that.checksum);\n        },\n        addStop: function(){\n            this.addPattern(this.STOP);\n        },\n        setBaseUnit: function(){\n            var that = this;\n            that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n        },\n        addPattern: function(code){\n            var that = this,\n                pattern = that.characterMap[code].toString(),\n                value;\n\n            for(var i = 0; i < pattern.length; i++){\n                value = parseInt(pattern.charAt(i),10);\n                that.pattern.push(value);\n                that.totalUnits += value;\n            }\n            that.checkSum += code * that.position++;\n        },\n        getNextState: function(encodingState, states){\n            for(var i = 0; i < states.length; i++){\n                if(this[states[i]].is(encodingState.value, encodingState.index)){\n                    return states[i];\n                }\n            }\n            this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n        },\n        characterMap: [\n            212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,\n            221312,231212,112232,122132,122231,113222,123122,123221,223211,221132,\n            221231,213212,223112,312131,311222,321122,321221,312212,322112,322211,\n            212123,212321,232121,111323,131123,131321,112313,132113,132311,211313,\n            231113,231311,112133,112331,132131,113123,113321,133121,313121,211331,\n            231131,213113,213311,213131,311123,311321,331121,312113,312311,332111,\n            314111,221411,431111,111224,111422,121124,121421,141122,141221,112214,\n            112412,122114,122411,142112,142211,241211,221114,413111,241112,134111,\n            111242,121142,121241,114212,124112,124211,411212,421112,421211,212141,\n            214121,412121,111143,111341,131141,114113,114311,411113,411311,113141,\n            114131,311141,411131,211412,211214,211232,2331112\n        ],\n        STOP: 106\n    });\n\n    encodings.code128a = code128Base.extend({\n        name: \"Code 128 A\",\n        states: [\"A\"]\n    });\n\n\n    encodings.code128b = code128Base.extend({\n        name: \"Code 128 B\",\n        states: [\"B\"]\n    });\n\n    encodings.code128c = code128Base.extend({\n        name: \"Code 128 C\",\n        states: [\"C\"]\n    });\n\n    encodings.code128 = code128Base.extend({\n        name: \"Code 128\",\n        states: [\"C\", \"B\", \"A\", \"FNC4\"]\n    });\n\n    encodings[\"gs1-128\"] = code128Base.extend({\n       name: \"Code GS1-128\",\n       states: [\"FNC1\", \"C\", \"B\"]\n    });\n\n    var msiBase = Encoding.extend({\n        initValue: function(value, width){\n            var that = this;\n            that.pattern = [];\n            that.value = value;\n            that.checkSumLength = 0;\n            that.width = width;\n        },\n        setBaseUnit: function(){\n            var that = this,\n                startStopLength = 7;\n\n            that.baseUnit = that.width /\n                    ( 12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength);\n        },\n        addData:  function(){\n            var that = this,\n                value = that.value;\n            that.addPattern(that.START);\n\n            for(var i = 0; i < value.length; i++){\n                that.addCharacter(value.charAt(i));\n            }\n\n            if(that.options.addCheckSum){\n                that.addCheckSum();\n            }\n\n            that.addPattern(that.STOP);\n            that.setBaseUnit();\n        },\n        addCharacter: function(character){\n            var that = this,\n                pattern = that.characterMap[character];\n            if(!pattern){\n                that.invalidCharacterError(character);\n            }\n            that.addPattern(pattern);\n        },\n        addPattern: function(pattern){\n            for(var i = 0; i < pattern.length; i++){\n                this.pattern.push(parseInt(pattern.charAt(i),10));\n            }\n        },\n        addCheckSum: function(){\n            var that = this,\n                checkSumFunction = that.checkSums[that.checkSumType],\n                checkValues;\n\n            checkValues = checkSumFunction.call(that.checkSums, that.value);\n\n            that.checksum = checkValues.join(\"\");\n            for(var i = 0; i < checkValues.length; i++){\n                that.checkSumLength++;\n                that.addPattern(that.characterMap[checkValues[i]]);\n            }\n        },\n        checkSums: {\n            Modulo10: function(value){\n                var checkValues = [0, \"\"],\n                odd = value.length % 2,\n                idx,\n                evenSum,\n                oddSum;\n\n                for(idx = 0; idx < value.length; idx++){\n                    checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx),10);\n                }\n\n                oddSum = checkValues[0];\n                evenSum = (checkValues[1] * 2).toString();\n\n                for(idx = 0; idx < evenSum.length; idx++){\n                    oddSum += parseInt(evenSum.charAt(idx),10);\n                }\n\n                return [(10 - (oddSum % 10)) % 10];\n            },\n            Modulo11: function(value){\n                var weightedSum = 0,\n                    mod = 11,\n                    length = value.length,\n                    weight,\n                    checkValue;\n\n                for(var i = 0; i < length; i++){\n                    weight = ((length - i) % 6 || 6) + 1;\n                    weightedSum +=  weight * value.charAt(i);\n                }\n                checkValue = (mod - weightedSum % mod) % mod;\n                if(checkValue != 10){\n                    return [checkValue];\n                }\n                return [1, 0];\n            },\n            Modulo11Modulo10: function(value){\n                var checkValues = this.Modulo11(value),\n                    mod11Value;\n                mod11Value = value + checkValues[0];\n\n                return checkValues.concat(this.Modulo10(mod11Value));\n            },\n            Modulo10Modulo10: function(value){\n                var checkValues = this.Modulo10(value),\n                    mod10Value;\n                mod10Value = value + checkValues[0];\n\n                return checkValues.concat(this.Modulo10(mod10Value));\n            }\n        },\n        characterMap: [\"12121212\", \"12121221\",\"12122112\", \"12122121\", \"12211212\", \"12211221\", \"12212112\", \"12212121\", \"21121212\", \"21121221\"],\n        START: \"21\",\n        STOP: \"121\",\n        checkSumType: \"\"\n    });\n\n    encodings.msimod10 = msiBase.extend({\n        name: \"MSI Modulo10\",\n        checkSumType: \"Modulo10\"\n    });\n\n    encodings.msimod11 = msiBase.extend({\n        name: \"MSI Modulo11\",\n        checkSumType: \"Modulo11\"\n    });\n\n    encodings.msimod1110 = msiBase.extend({\n        name: \"MSI Modulo11 Modulo10\",\n        checkSumType: \"Modulo11Modulo10\"\n    });\n\n    encodings.msimod1010 = msiBase.extend({\n        name: \"MSI Modulo10 Modulo10\",\n        checkSumType: \"Modulo10Modulo10\"\n    });\n\n    encodings.code11 = Encoding.extend({\n        name: \"Code 11\",\n        cCheckSumTotal: 10,\n        kCheckSumTotal: 9,\n        kCheckSumMinLength: 10,\n        checkSumMod: 11,\n        DASH_VALUE: 10,\n        DASH: \"-\",\n        START: \"112211\",\n        STOP: \"11221\",\n        initValue: function(value, width){\n            var that = this;\n            that.pattern = [];\n            that.value = value;\n            that.width = width;\n            that.totalUnits = 0;\n        },\n        addData:  function(){\n            var that = this;\n            var value = that.value;\n            that.addPattern(that.START);\n\n            for(var i = 0; i < value.length; i++){\n                that.addCharacter(value.charAt(i));\n            }\n\n            if(that.options.addCheckSum){\n                that.addCheckSum();\n            }\n\n            that.addPattern(that.STOP);\n            that.setBaseUnit();\n        },\n        setBaseUnit: function(){\n            var that = this;\n            that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n        },\n        addCheckSum: function(){\n            var that = this,\n                value = that.value,\n                length = value.length,\n                cValue;\n\n            cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod;\n            that.checksum = cValue + \"\";\n            that.addPattern(that.characterMap[cValue]);\n\n            length++;\n            if(length >= that.kCheckSumMinLength){\n                var kValue = (cValue + that.getWeightedSum(value, length, that.kCheckSumTotal)) % that.checkSumMod;\n                that.checksum += kValue;\n                that.addPattern(that.characterMap[kValue]);\n            }\n        },\n        getWeightedSum: function(value, length, total){\n            var weightedSum = 0;\n            for(var i = 0; i < value.length; i++){\n                weightedSum+= this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n            }\n\n            return weightedSum;\n        },\n        weightedValue: function(value, length, index, total){\n            var weight = (length - index) % total || total;\n            return weight * value;\n        },\n        getValue: function(character){\n            var that = this;\n            if(!isNaN(character)){\n                return parseInt(character,10);\n            }\n            else if(character !== that.DASH){\n                that.invalidCharacterError(character);\n            }\n            return that.DASH_VALUE;\n        },\n        addCharacter: function(character){\n            var that = this,\n                value = that.getValue(character),\n                pattern = that.characterMap[value];\n            that.addPattern(pattern);\n        },\n        addPattern: function(pattern){\n            var value;\n            for(var i = 0; i < pattern.length; i++){\n                value = parseInt(pattern.charAt(i),10);\n                this.pattern.push(value);\n                this.totalUnits+=value;\n            }\n        },\n        characterMap: [\"111121\", \"211121\", \"121121\", \"221111\", \"112121\", \"212111\", \"122111\", \"111221\", \"211211\", \"211111\", \"112111\"],\n        options: {\n            addCheckSum: true\n        }\n    });\n\n    encodings.postnet = Encoding.extend({\n        name: \"Postnet\",\n        START: \"2\",\n        VALID_CODE_LENGTHS: [5,9, 11],\n        DIGIT_SEPARATOR: \"-\",\n        initValue: function(value, width, height){\n            var that = this;\n            that.height = height;\n            that.width = width;\n            that.baseHeight = height /2;\n            that.value = value.replace(new RegExp(that.DIGIT_SEPARATOR,\"g\"), \"\");\n            that.pattern = [];\n            that.validate(that.value);\n            that.checkSum = 0;\n            that.setBaseUnit();\n        },\n        addData:  function(){\n            var that = this,\n                value = that.value;\n            that.addPattern(that.START);\n\n            for(var i = 0; i < value.length; i++){\n                that.addCharacter(value.charAt(i));\n            }\n\n            if(that.options.addCheckSum){\n                that.addCheckSum();\n            }\n\n            that.addPattern(that.START);\n            that.pattern.pop();\n        },\n        addCharacter: function(character){\n            var that = this,\n                pattern = that.characterMap[character];\n            that.checkSum+= parseInt(character,10);\n            that.addPattern(pattern);\n        },\n        addCheckSum: function(){\n            var that = this;\n            that.checksum = (10 - (that.checkSum % 10)) % 10;\n            that.addCharacter(that.checksum);\n        },\n        setBaseUnit: function(){\n            var that=this,\n                startStopLength = 3;\n            that.baseUnit = that.width / ((that.value.length + 1) * 10 +  startStopLength + that.quietZoneLength);\n        },\n        validate: function(value){\n            var that = this;\n\n            if(!numberRegex.test(value)){\n                that.invalidCharacterError(value.match(/[^0-9]/)[0]);\n            }\n            if(inArray(value.length, that.VALID_CODE_LENGTHS) < 0){\n                throw new Error(\"Invalid value length. Valid lengths for the Postnet symbology are \" + that.VALID_CODE_LENGTHS.join(\",\"));\n            }\n        },\n        addPattern: function(pattern){\n            var that = this,\n                y1;\n            for(var i = 0; i < pattern.length; i++){\n                y1 = that.height - that.baseHeight * pattern.charAt(i);\n                that.pattern.push({width: 1, y1: y1, y2: that.height});\n                that.pattern.push(1);\n            }\n        },\n        characterMap: [\"22111\", \"11122\", \"11212\", \"11221\", \"12112\", \"12121\", \"12211\", \"21112\", \"21121\", \"21211\"]\n    });\n\n    encodings.ean13 = Encoding.extend({\n        initValue: function(value, width, height){\n            value+=\"\";\n\n            if(value.length!=12 || /\\D/.test(value)){\n                throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n            }\n\n            var that = this;\n            that.pattern = [];\n            that.options.height = height;\n            that.baseUnit = width /(95 + that.quietZoneLength);\n            that.value = value;\n            that.checksum = that.calculateChecksum();\n            that.leftKey = value[0];\n            that.leftPart = value.substr(1,6);\n            that.rightPart = value.substr(7)+that.checksum;\n        },\n        addData:  function(){\n            var that = this;\n            that.addPieces(that.characterMap.start);\n            that.addSide(that.leftPart,that.leftKey);\n            that.addPieces(that.characterMap.middle);\n            that.addSide(that.rightPart);\n            that.addPieces(that.characterMap.start);\n        },\n        addSide:function(leftPart,key){\n            var that = this;\n            for(var i = 0; i < leftPart.length; i++){\n                if(key && parseInt(that.keyTable[key].charAt(i),10)){\n                    that.addPieces(Array.prototype.slice.call(that.characterMap.digits[leftPart.charAt(i)]).reverse(),true);\n                }else{\n                    that.addPieces(that.characterMap.digits[leftPart.charAt(i)],true);\n                }\n            }\n        },\n        addPieces:function(arrToAdd,limitedHeight){\n            var that = this;\n            for(var i=0;i<arrToAdd.length;i++){\n                if(limitedHeight){\n                    that.pattern.push({\n                        y1:0,\n                        y2:that.options.height*0.95,\n                        width:arrToAdd[i]\n                    });\n                }else{\n                    that.pattern.push(arrToAdd[i]);\n                }\n            }\n        },\n        calculateChecksum: function (){\n            var odd = 0,\n                even = 0,\n                value = this.value.split(\"\").reverse().join(\"\");\n            for(var i = 0;i < value.length;i++){\n                if(i%2){\n                    even += parseInt(value.charAt(i),10);\n                }\n                else{\n                    odd += parseInt(value.charAt(i),10);\n                }\n            }\n            var checksum = (10 - ((3*odd + even)%10))%10;\n            return checksum;\n        },\n        keyTable:[\n            '000000',\n            '001011',\n            '001101',\n            '001110',\n            '010011',\n            '011001',\n            '011100',\n            '010101',\n            '010110',\n            '011010'\n        ],\n        characterMap: {\n            digits:[\n                [3,2,1,1],\n                [2,2,2,1],\n                [2,1,2,2],\n                [1,4,1,1],\n                [1,1,3,2],\n                [1,2,3,1],\n                [1,1,1,4],\n                [1,3,1,2],\n                [1,2,1,3],\n                [3,1,1,2]\n            ],\n            start: [1,1,1],\n            middle: [1,1,1,1,1]\n        }\n    });\n\n    encodings.ean8 = encodings.ean13.extend({\n        initValue: function(value, width, height){\n            var that = this;\n            if(value.length!=7 || /\\D/.test(value)){\n                throw new Error('Invalid value provided');\n            }\n            that.value = value;\n            that.options.height = height;\n            that.checksum = that.calculateChecksum(that.value);\n            that.leftPart  = that.value.substr(0,4);\n            that.rightPart = that.value.substr(4) + that.checksum;\n            that.pattern = [];\n            that.baseUnit = width /(67 + that.quietZoneLength);\n        }\n    });\n\n    var Barcode = Widget.extend({\n        init: function (element, options) {\n             var that = this;\n             Widget.fn.init.call(that, element, options);\n             that.element = $(element);\n             that.wrapper = that.element;\n             that.element.addClass(\"k-barcode\").css(\"display\", \"block\");\n             that.surfaceWrap = $(\"<div />\").css(\"position\", \"relative\").appendTo(this.element);\n             that.surface = draw.Surface.create(that.surfaceWrap, {\n                 type: that.options.renderAs\n             });\n             that.setOptions(options);\n        },\n\n        setOptions: function (options) {\n            var that = this;\n            that.type = (options.type || that.options.type).toLowerCase();\n            if(that.type==\"upca\"){ //extend instead\n                that.type = \"ean13\";\n                options.value = '0' + options.value;\n            }\n            if(that.type==\"upce\"){\n                that.type = \"ean8\";\n                options.value = '0' + options.value;\n            }\n            if(!encodings[that.type]){\n                throw new Error('Encoding ' + that.type + 'is not supported.');\n            }\n            that.encoding = new encodings[that.type]();\n\n            that.options = extend(true, that.options, options);\n            if (!defined(options.value)) {\n                return;\n            }\n            that.redraw();\n        },\n\n        redraw: function () {\n            var size = this._getSize();\n            this.surfaceWrap.css({\n                width: size.width,\n                height: size.height\n            });\n            this.surface.clear();\n\n            this.createVisual();\n            this.surface.draw(this.visual);\n        },\n\n        getSize: function() {\n            return kendo.dimensions(this.element);\n        },\n\n        _resize: function() {\n            this.redraw();\n        },\n\n        createVisual: function() {\n            this.visual = this._render();\n        },\n\n        _render: function() {\n            var that = this,\n                options = that.options,\n                value = options.value,\n                textOptions = options.text,\n                textMargin = dataviz.getSpacing(textOptions.margin),\n                size = that._getSize(),\n                border = options.border || {},\n                encoding = that.encoding,\n                contentBox = Box2D(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding),\n                barHeight = contentBox.height(),\n                result, textToDisplay,\n                textHeight;\n\n            var visual = new draw.Group();\n\n            that.contentBox = contentBox;\n            visual.append(that._getBackground(size));\n\n            if (textOptions.visible) {\n                textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n                barHeight -= textHeight + textMargin.top + textMargin.bottom;\n            }\n\n            result = encoding.encode(value, contentBox.width(), barHeight);\n\n            if (textOptions.visible) {\n                textToDisplay = value;\n                if (options.checksum && defined(encoding.checksum)) {\n                    textToDisplay += \" \" + encoding.checksum;\n                }\n\n                visual.append(that._getText(textToDisplay));\n            }\n\n            that.barHeight = barHeight;\n            this._bandsGroup = this._getBands(result.pattern, result.baseUnit);\n            visual.append(this._bandsGroup);\n\n            return visual;\n        },\n\n        exportVisual: function() {\n            return this._render();\n        },\n\n        _getSize: function() {\n            var that = this,\n                element = that.element,\n                size = new geom.Size(DEFAULT_WIDTH, DEFAULT_HEIGHT);\n\n            if (element.width() > 0) {\n                size.width = element.width();\n            }\n            if (element.height() > 0) {\n                size.height = element.height();\n            }\n            if (that.options.width) {\n               size.width = that.options.width;\n            }\n            if (that.options.height) {\n               size.height = that.options.height;\n            }\n\n            return size;\n        },\n\n        value: function(value) {\n            var that = this;\n            if (!defined(value)) {\n                return that.options.value;\n            }\n            that.options.value = value + '';\n            that.redraw();\n        },\n\n        _getBands: function (pattern, baseUnit) {\n            var that = this,\n                contentBox = that.contentBox,\n                position = contentBox.x1,\n                step,\n                item;\n\n            var group = new draw.Group();\n            for (var i = 0; i < pattern.length; i++) {\n                item = isPlainObject(pattern[i]) ? pattern[i] : {\n                    width: pattern[i],\n                    y1: 0,\n                    y2: that.barHeight\n                };\n\n                step = item.width * baseUnit;\n\n                if (i%2) {\n                    var rect = geom.Rect.fromPoints(\n                        new geom.Point(position, item.y1 + contentBox.y1),\n                        new geom.Point(position + step, item.y2 + contentBox.y1)\n                    );\n\n                    var path = draw.Path.fromRect(rect, {\n                        fill: {\n                            color: that.options.color\n                        },\n                        stroke: null\n                    });\n\n                    group.append(path);\n                }\n\n                position += step;\n            }\n\n            return group;\n        },\n\n        _getBackground: function (size) {\n            var that = this,\n                options = that.options,\n                border = options.border || {};\n\n            var box = Box2D(0,0, size.width, size.height).unpad(border.width / 2);\n            var path = draw.Path.fromRect(box.toRect(), {\n                fill: {\n                    color: options.background\n                },\n                stroke: {\n                    color: border.width ? border.color : \"\",\n                    width: border.width,\n                    dashType: border.dashType\n                }\n            });\n\n            return path;\n        },\n\n        _getText: function(value) {\n            var that = this,\n                textOptions = that.options.text,\n                text = that._textbox = new TextBox(value, {\n                    font: textOptions.font,\n                    color: textOptions.color,\n                    align: \"center\",\n                    vAlign: \"bottom\",\n                    margin: textOptions.margin\n                });\n\n            text.reflow(that.contentBox);\n            text.renderVisual();\n\n            return text.visual;\n        },\n\n        options: {\n            name: \"Barcode\",\n            renderAs: \"svg\",\n            value: \"\",\n            type: \"code39\",\n            checksum: false,\n            width: 0,\n            height: 0,\n            color: \"black\",\n            background: \"white\",\n            text: {\n                visible: true,\n                font: \"16px Consolas, Monaco, Sans Mono, monospace, sans-serif\",\n                color: \"black\",\n                margin: {\n                    top: 0,\n                    bottom: 0,\n                    left: 0,\n                    right: 0\n                }\n            },\n            border: {\n                width: 0,\n                dashType: \"solid\",\n                color: \"black\"\n            },\n            padding: {\n                top: 0,\n                bottom: 0,\n                left: 0,\n                right: 0\n            }\n        }\n    });\n    dataviz.ExportMixin.extend(Barcode.fn);\n\n    dataviz.ui.plugin(Barcode);\n\n    kendo.deepExtend(dataviz, {\n        encodings: encodings,\n        Encoding: Encoding\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        extend = $.extend,\n        geom = kendo.geometry,\n        draw = kendo.drawing,\n        dataviz = kendo.dataviz,\n        Widget = kendo.ui.Widget,\n        Box2D = dataviz.Box2D,\n        terminator = \"0000\",\n        NUMERIC = \"numeric\",\n        ALPHA_NUMERIC = \"alphanumeric\",\n        BYTE = \"byte\",\n        powersOfTwo = {\"1\": 0},\n        powersOfTwoResult = {\"0\": 1},\n        generatorPolynomials = [[1,0],[1,25,0]],\n        irregularAlignmentPatternsStartDistance = {15:20,16:20,18:24,19:24,22:20,24:22,26:24,28:20,30:20,31:24,32:28,33:24,36:18,37:22,39:20,40:24},\n        versionsCodewordsInformation = [{L:{groups:[[1,19]],totalDataCodewords:19,errorCodewordsPerBlock:7},M:{groups:[[1,16]],totalDataCodewords:16,errorCodewordsPerBlock:10},Q:{groups:[[1,13]],totalDataCodewords:13,errorCodewordsPerBlock:13},H:{groups:[[1,9]],totalDataCodewords:9,errorCodewordsPerBlock:17}},{L:{groups:[[1,34]],totalDataCodewords:34,errorCodewordsPerBlock:10},M:{groups:[[1,28]],totalDataCodewords:28,errorCodewordsPerBlock:16},Q:{groups:[[1,22]],totalDataCodewords:22,errorCodewordsPerBlock:22},H:{groups:[[1,16]],totalDataCodewords:16,errorCodewordsPerBlock:28}},{L:{groups:[[1,55]],totalDataCodewords:55,errorCodewordsPerBlock:15},M:{groups:[[1,44]],totalDataCodewords:44,errorCodewordsPerBlock:26},Q:{groups:[[2,17]],totalDataCodewords:34,errorCodewordsPerBlock:18},H:{groups:[[2,13]],totalDataCodewords:26,errorCodewordsPerBlock:22}},{L:{groups:[[1,80]],totalDataCodewords:80,errorCodewordsPerBlock:20},M:{groups:[[2,32]],totalDataCodewords:64,errorCodewordsPerBlock:18},Q:{groups:[[2,24]],totalDataCodewords:48,errorCodewordsPerBlock:26},H:{groups:[[4,9]],totalDataCodewords:36,errorCodewordsPerBlock:16}},{L:{groups:[[1,108]],totalDataCodewords:108,errorCodewordsPerBlock:26},M:{groups:[[2,43]],totalDataCodewords:86,errorCodewordsPerBlock:24},Q:{groups:[[2,15],[2,16]],totalDataCodewords:62,errorCodewordsPerBlock:18},H:{groups:[[2,11],[2,12]],totalDataCodewords:46,errorCodewordsPerBlock:22}},{L:{groups:[[2,68]],totalDataCodewords:136,errorCodewordsPerBlock:18},M:{groups:[[4,27]],totalDataCodewords:108,errorCodewordsPerBlock:16},Q:{groups:[[4,19]],totalDataCodewords:76,errorCodewordsPerBlock:24},H:{groups:[[4,15]],totalDataCodewords:60,errorCodewordsPerBlock:28}},{L:{groups:[[2,78]],totalDataCodewords:156,errorCodewordsPerBlock:20},M:{groups:[[4,31]],totalDataCodewords:124,errorCodewordsPerBlock:18},Q:{groups:[[2,14],[4,15]],totalDataCodewords:88,errorCodewordsPerBlock:18},H:{groups:[[4,13],[1,14]],totalDataCodewords:66,errorCodewordsPerBlock:26}},{L:{groups:[[2,97]],totalDataCodewords:194,errorCodewordsPerBlock:24},M:{groups:[[2,38],[2,39]],totalDataCodewords:154,errorCodewordsPerBlock:22},Q:{groups:[[4,18],[2,19]],totalDataCodewords:110,errorCodewordsPerBlock:22},H:{groups:[[4,14],[2,15]],totalDataCodewords:86,errorCodewordsPerBlock:26}},{L:{groups:[[2,116]],totalDataCodewords:232,errorCodewordsPerBlock:30},M:{groups:[[3,36],[2,37]],totalDataCodewords:182,errorCodewordsPerBlock:22},Q:{groups:[[4,16],[4,17]],totalDataCodewords:132,errorCodewordsPerBlock:20},H:{groups:[[4,12],[4,13]],totalDataCodewords:100,errorCodewordsPerBlock:24}},{L:{groups:[[2,68],[2,69]],totalDataCodewords:274,errorCodewordsPerBlock:18},M:{groups:[[4,43],[1,44]],totalDataCodewords:216,errorCodewordsPerBlock:26},Q:{groups:[[6,19],[2,20]],totalDataCodewords:154,errorCodewordsPerBlock:24},H:{groups:[[6,15],[2,16]],totalDataCodewords:122,errorCodewordsPerBlock:28}},{L:{groups:[[4,81]],totalDataCodewords:324,errorCodewordsPerBlock:20},M:{groups:[[1,50],[4,51]],totalDataCodewords:254,errorCodewordsPerBlock:30},Q:{groups:[[4,22],[4,23]],totalDataCodewords:180,errorCodewordsPerBlock:28},H:{groups:[[3,12],[8,13]],totalDataCodewords:140,errorCodewordsPerBlock:24}},{L:{groups:[[2,92],[2,93]],totalDataCodewords:370,errorCodewordsPerBlock:24},M:{groups:[[6,36],[2,37]],totalDataCodewords:290,errorCodewordsPerBlock:22},Q:{groups:[[4,20],[6,21]],totalDataCodewords:206,errorCodewordsPerBlock:26},H:{groups:[[7,14],[4,15]],totalDataCodewords:158,errorCodewordsPerBlock:28}},{L:{groups:[[4,107]],totalDataCodewords:428,errorCodewordsPerBlock:26},M:{groups:[[8,37],[1,38]],totalDataCodewords:334,errorCodewordsPerBlock:22},Q:{groups:[[8,20],[4,21]],totalDataCodewords:244,errorCodewordsPerBlock:24},H:{groups:[[12,11],[4,12]],totalDataCodewords:180,errorCodewordsPerBlock:22}},{L:{groups:[[3,115],[1,116]],totalDataCodewords:461,errorCodewordsPerBlock:30},M:{groups:[[4,40],[5,41]],totalDataCodewords:365,errorCodewordsPerBlock:24},Q:{groups:[[11,16],[5,17]],totalDataCodewords:261,errorCodewordsPerBlock:20},H:{groups:[[11,12],[5,13]],totalDataCodewords:197,errorCodewordsPerBlock:24}},{L:{groups:[[5,87],[1,88]],totalDataCodewords:523,errorCodewordsPerBlock:22},M:{groups:[[5,41],[5,42]],totalDataCodewords:415,errorCodewordsPerBlock:24},Q:{groups:[[5,24],[7,25]],totalDataCodewords:295,errorCodewordsPerBlock:30},H:{groups:[[11,12],[7,13]],totalDataCodewords:223,errorCodewordsPerBlock:24}},{L:{groups:[[5,98],[1,99]],totalDataCodewords:589,errorCodewordsPerBlock:24},M:{groups:[[7,45],[3,46]],totalDataCodewords:453,errorCodewordsPerBlock:28},Q:{groups:[[15,19],[2,20]],totalDataCodewords:325,errorCodewordsPerBlock:24},H:{groups:[[3,15],[13,16]],totalDataCodewords:253,errorCodewordsPerBlock:30}},{L:{groups:[[1,107],[5,108]],totalDataCodewords:647,errorCodewordsPerBlock:28},M:{groups:[[10,46],[1,47]],totalDataCodewords:507,errorCodewordsPerBlock:28},Q:{groups:[[1,22],[15,23]],totalDataCodewords:367,errorCodewordsPerBlock:28},H:{groups:[[2,14],[17,15]],totalDataCodewords:283,errorCodewordsPerBlock:28}},{L:{groups:[[5,120],[1,121]],totalDataCodewords:721,errorCodewordsPerBlock:30},M:{groups:[[9,43],[4,44]],totalDataCodewords:563,errorCodewordsPerBlock:26},Q:{groups:[[17,22],[1,23]],totalDataCodewords:397,errorCodewordsPerBlock:28},H:{groups:[[2,14],[19,15]],totalDataCodewords:313,errorCodewordsPerBlock:28}},{L:{groups:[[3,113],[4,114]],totalDataCodewords:795,errorCodewordsPerBlock:28},M:{groups:[[3,44],[11,45]],totalDataCodewords:627,errorCodewordsPerBlock:26},Q:{groups:[[17,21],[4,22]],totalDataCodewords:445,errorCodewordsPerBlock:26},H:{groups:[[9,13],[16,14]],totalDataCodewords:341,errorCodewordsPerBlock:26}},{L:{groups:[[3,107],[5,108]],totalDataCodewords:861,errorCodewordsPerBlock:28},M:{groups:[[3,41],[13,42]],totalDataCodewords:669,errorCodewordsPerBlock:26},Q:{groups:[[15,24],[5,25]],totalDataCodewords:485,errorCodewordsPerBlock:30},H:{groups:[[15,15],[10,16]],totalDataCodewords:385,errorCodewordsPerBlock:28}},{L:{groups:[[4,116],[4,117]],totalDataCodewords:932,errorCodewordsPerBlock:28},M:{groups:[[17,42]],totalDataCodewords:714,errorCodewordsPerBlock:26},Q:{groups:[[17,22],[6,23]],totalDataCodewords:512,errorCodewordsPerBlock:28},H:{groups:[[19,16],[6,17]],totalDataCodewords:406,errorCodewordsPerBlock:30}},{L:{groups:[[2,111],[7,112]],totalDataCodewords:1006,errorCodewordsPerBlock:28},M:{groups:[[17,46]],totalDataCodewords:782,errorCodewordsPerBlock:28},Q:{groups:[[7,24],[16,25]],totalDataCodewords:568,errorCodewordsPerBlock:30},H:{groups:[[34,13]],totalDataCodewords:442,errorCodewordsPerBlock:24}},{L:{groups:[[4,121],[5,122]],totalDataCodewords:1094,errorCodewordsPerBlock:30},M:{groups:[[4,47],[14,48]],totalDataCodewords:860,errorCodewordsPerBlock:28},Q:{groups:[[11,24],[14,25]],totalDataCodewords:614,errorCodewordsPerBlock:30},H:{groups:[[16,15],[14,16]],totalDataCodewords:464,errorCodewordsPerBlock:30}},{L:{groups:[[6,117],[4,118]],totalDataCodewords:1174,errorCodewordsPerBlock:30},M:{groups:[[6,45],[14,46]],totalDataCodewords:914,errorCodewordsPerBlock:28},Q:{groups:[[11,24],[16,25]],totalDataCodewords:664,errorCodewordsPerBlock:30},H:{groups:[[30,16],[2,17]],totalDataCodewords:514,errorCodewordsPerBlock:30}},{L:{groups:[[8,106],[4,107]],totalDataCodewords:1276,errorCodewordsPerBlock:26},M:{groups:[[8,47],[13,48]],totalDataCodewords:1000,errorCodewordsPerBlock:28},Q:{groups:[[7,24],[22,25]],totalDataCodewords:718,errorCodewordsPerBlock:30},H:{groups:[[22,15],[13,16]],totalDataCodewords:538,errorCodewordsPerBlock:30}},{L:{groups:[[10,114],[2,115]],totalDataCodewords:1370,errorCodewordsPerBlock:28},M:{groups:[[19,46],[4,47]],totalDataCodewords:1062,errorCodewordsPerBlock:28},Q:{groups:[[28,22],[6,23]],totalDataCodewords:754,errorCodewordsPerBlock:28},H:{groups:[[33,16],[4,17]],totalDataCodewords:596,errorCodewordsPerBlock:30}},{L:{groups:[[8,122],[4,123]],totalDataCodewords:1468,errorCodewordsPerBlock:30},M:{groups:[[22,45],[3,46]],totalDataCodewords:1128,errorCodewordsPerBlock:28},Q:{groups:[[8,23],[26,24]],totalDataCodewords:808,errorCodewordsPerBlock:30},H:{groups:[[12,15],[28,16]],totalDataCodewords:628,errorCodewordsPerBlock:30}},{L:{groups:[[3,117],[10,118]],totalDataCodewords:1531,errorCodewordsPerBlock:30},M:{groups:[[3,45],[23,46]],totalDataCodewords:1193,errorCodewordsPerBlock:28},Q:{groups:[[4,24],[31,25]],totalDataCodewords:871,errorCodewordsPerBlock:30},H:{groups:[[11,15],[31,16]],totalDataCodewords:661,errorCodewordsPerBlock:30}},{L:{groups:[[7,116],[7,117]],totalDataCodewords:1631,errorCodewordsPerBlock:30},M:{groups:[[21,45],[7,46]],totalDataCodewords:1267,errorCodewordsPerBlock:28},Q:{groups:[[1,23],[37,24]],totalDataCodewords:911,errorCodewordsPerBlock:30},H:{groups:[[19,15],[26,16]],totalDataCodewords:701,errorCodewordsPerBlock:30}},{L:{groups:[[5,115],[10,116]],totalDataCodewords:1735,errorCodewordsPerBlock:30},M:{groups:[[19,47],[10,48]],totalDataCodewords:1373,errorCodewordsPerBlock:28},Q:{groups:[[15,24],[25,25]],totalDataCodewords:985,errorCodewordsPerBlock:30},H:{groups:[[23,15],[25,16]],totalDataCodewords:745,errorCodewordsPerBlock:30}},{L:{groups:[[13,115],[3,116]],totalDataCodewords:1843,errorCodewordsPerBlock:30},M:{groups:[[2,46],[29,47]],totalDataCodewords:1455,errorCodewordsPerBlock:28},Q:{groups:[[42,24],[1,25]],totalDataCodewords:1033,errorCodewordsPerBlock:30},H:{groups:[[23,15],[28,16]],totalDataCodewords:793,errorCodewordsPerBlock:30}},{L:{groups:[[17,115]],totalDataCodewords:1955,errorCodewordsPerBlock:30},M:{groups:[[10,46],[23,47]],totalDataCodewords:1541,errorCodewordsPerBlock:28},Q:{groups:[[10,24],[35,25]],totalDataCodewords:1115,errorCodewordsPerBlock:30},H:{groups:[[19,15],[35,16]],totalDataCodewords:845,errorCodewordsPerBlock:30}},{L:{groups:[[17,115],[1,116]],totalDataCodewords:2071,errorCodewordsPerBlock:30},M:{groups:[[14,46],[21,47]],totalDataCodewords:1631,errorCodewordsPerBlock:28},Q:{groups:[[29,24],[19,25]],totalDataCodewords:1171,errorCodewordsPerBlock:30},H:{groups:[[11,15],[46,16]],totalDataCodewords:901,errorCodewordsPerBlock:30}},{L:{groups:[[13,115],[6,116]],totalDataCodewords:2191,errorCodewordsPerBlock:30},M:{groups:[[14,46],[23,47]],totalDataCodewords:1725,errorCodewordsPerBlock:28},Q:{groups:[[44,24],[7,25]],totalDataCodewords:1231,errorCodewordsPerBlock:30},H:{groups:[[59,16],[1,17]],totalDataCodewords:961,errorCodewordsPerBlock:30}},{L:{groups:[[12,121],[7,122]],totalDataCodewords:2306,errorCodewordsPerBlock:30},M:{groups:[[12,47],[26,48]],totalDataCodewords:1812,errorCodewordsPerBlock:28},Q:{groups:[[39,24],[14,25]],totalDataCodewords:1286,errorCodewordsPerBlock:30},H:{groups:[[22,15],[41,16]],totalDataCodewords:986,errorCodewordsPerBlock:30}},{L:{groups:[[6,121],[14,122]],totalDataCodewords:2434,errorCodewordsPerBlock:30},M:{groups:[[6,47],[34,48]],totalDataCodewords:1914,errorCodewordsPerBlock:28},Q:{groups:[[46,24],[10,25]],totalDataCodewords:1354,errorCodewordsPerBlock:30},H:{groups:[[2,15],[64,16]],totalDataCodewords:1054,errorCodewordsPerBlock:30}},{L:{groups:[[17,122],[4,123]],totalDataCodewords:2566,errorCodewordsPerBlock:30},M:{groups:[[29,46],[14,47]],totalDataCodewords:1992,errorCodewordsPerBlock:28},Q:{groups:[[49,24],[10,25]],totalDataCodewords:1426,errorCodewordsPerBlock:30},H:{groups:[[24,15],[46,16]],totalDataCodewords:1096,errorCodewordsPerBlock:30}},{L:{groups:[[4,122],[18,123]],totalDataCodewords:2702,errorCodewordsPerBlock:30},M:{groups:[[13,46],[32,47]],totalDataCodewords:2102,errorCodewordsPerBlock:28},Q:{groups:[[48,24],[14,25]],totalDataCodewords:1502,errorCodewordsPerBlock:30},H:{groups:[[42,15],[32,16]],totalDataCodewords:1142,errorCodewordsPerBlock:30}},{L:{groups:[[20,117],[4,118]],totalDataCodewords:2812,errorCodewordsPerBlock:30},M:{groups:[[40,47],[7,48]],totalDataCodewords:2216,errorCodewordsPerBlock:28},Q:{groups:[[43,24],[22,25]],totalDataCodewords:1582,errorCodewordsPerBlock:30},H:{groups:[[10,15],[67,16]],totalDataCodewords:1222,errorCodewordsPerBlock:30}},{L:{groups:[[19,118],[6,119]],totalDataCodewords:2956,errorCodewordsPerBlock:30},M:{groups:[[18,47],[31,48]],totalDataCodewords:2334,errorCodewordsPerBlock:28},Q:{groups:[[34,24],[34,25]],totalDataCodewords:1666,errorCodewordsPerBlock:30},H:{groups:[[20,15],[61,16]],totalDataCodewords:1276,errorCodewordsPerBlock:30}}],\n        finderPattern = [1,0,1,1,1],\n        alignmentPattern = [1,0,1],\n        errorCorrectionPatterns = {L: \"01\", M: \"00\", Q: \"11\", H: \"10\"},\n        formatMaskPattern = \"101010000010010\",\n        formatGeneratorPolynomial = \"10100110111\",\n        versionGeneratorPolynomial = \"1111100100101\",\n        paddingCodewords = [\"11101100\", \"00010001\"],\n        finderPatternValue = 93,\n        maskPatternConditions = [\n            function(row,column){return (row + column) % 2 === 0;},\n            function(row){return row % 2 === 0;},\n            function(row,column){return column % 3 === 0;},\n            function(row,column){return (row + column) % 3 === 0;},\n            function(row,column){return (Math.floor(row/2) + Math.floor(column/3)) % 2 === 0;},\n            function(row,column){return ((row * column) % 2) + ((row * column) % 3) === 0;},\n            function(row,column){return (((row * column) % 2) + ((row * column) % 3)) % 2 === 0;},\n            function(row,column){return (((row + column) % 2) + ((row * column) % 3)) % 2 === 0;}\n        ],\n        numberRegex = /^\\d+/,\n        alphaPattern = \"A-Z0-9 $%*+./:-\",\n        alphaExclusiveSet = \"A-Z $%*+./:-\",\n        alphaRegex = new RegExp(\"^[\" + alphaExclusiveSet + \"]+\"),\n        alphaNumericRegex = new RegExp(\"^[\" + alphaPattern+ \"]+\"),\n        byteRegex = new RegExp(\"^[^\" + alphaPattern+ \"]+\"),\n        initMinNumericBeforeAlpha = 8,\n        initMinNumericBeforeByte = 5,\n        initMinAlphaBeforeByte = 8,\n        minNumericBeforeAlpha = 17,\n        minNumericBeforeByte = 9,\n        minAlphaBeforeByte =  16,\n        round = Math.round;\n\n        function toDecimal(value){\n            return parseInt(value, 2);\n        }\n\n        function toBitsString(value, length){\n            var result = Number(value).toString(2);\n            if(result.length < length){\n                result = new Array(length - result.length + 1).join(0) + result;\n            }\n            return result;\n        }\n\n        function splitInto(str, n){\n            var result = [],\n                idx = 0;\n            while(idx < str.length){\n                result.push(str.substring(idx, idx + n));\n                idx+= n;\n            }\n            return result;\n        }\n\n        var QRDataMode = kendo.Class.extend({\n            getVersionIndex: function(version){\n                if(version < 10){\n                    return 0;\n                }\n                else if(version > 26){\n                    return 2;\n                }\n\n                return 1;\n            },\n            getBitsCharacterCount: function(version){\n                var mode = this;\n                return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n            },\n            getModeCountString: function(length, version){\n                var mode = this;\n                return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n            },\n            encode: function(){},\n            getStringBitsLength: function(){},\n            getValue: function(){},\n            modeIndicator: \"\",\n            bitsInCharacterCount: []\n        });\n\n        var modes = {};\n        modes[NUMERIC] = QRDataMode.extend({\n            bitsInCharacterCount: [10, 12, 14],\n            modeIndicator: \"0001\",\n            getValue: function(character){\n                return parseInt(character, 10);\n            },\n            encode: function(str, version){\n                var mode = this,\n                    parts = splitInto(str, 3),\n                    result = mode.getModeCountString(str.length, version);\n\n                for(var i = 0; i < parts.length - 1; i++){\n                    result += toBitsString(parts[i], 10);\n                }\n                return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n            },\n            getStringBitsLength: function(inputLength, version){\n                var mod3 = inputLength % 3;\n                return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n            }\n        });\n\n        modes[ALPHA_NUMERIC] = QRDataMode.extend({\n            characters: {\"0\":0,\"1\": 1,\"2\": 2,\"3\": 3,\"4\": 4,\"5\": 5,\"6\": 6,\"7\": 7,\"8\": 8,\"9\": 9,\"A\": 10,\"B\": 11,\"C\": 12,\"D\": 13,\"E\": 14,\"F\": 15,\"G\": 16,\"H\": 17,\"I\": 18,\"J\": 19,\"K\": 20,\"L\": 21,\"M\": 22,\"N\": 23,\"O\": 24,\"P\": 25,\"Q\": 26,\"R\": 27,\"S\": 28,\"T\": 29,\"U\": 30,\"V\": 31,\"W\": 32,\"X\": 33,\"Y\": 34,\"Z\": 35,\" \": 36,\"$\": 37,\"%\": 38,\"*\": 39,\"+\": 40,\"-\": 41,\".\": 42,\"/\": 43,\":\": 44},\n            bitsInCharacterCount: [9,11,13],\n            modeIndicator: \"0010\",\n            getValue: function(character){\n                return this.characters[character];\n            },\n            encode: function(str, version){\n                var mode = this,\n                    parts = splitInto(str, 2),\n                    result = mode.getModeCountString(str.length, version),\n                    value;\n                for(var i = 0; i < parts.length - 1; i++){\n                    value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n                    result += toBitsString(value, 11);\n                }\n                value = parts[i].length == 2 ?\n                    45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) :\n                    mode.getValue(parts[i].charAt(0));\n                return result + toBitsString(value, 1 + 5 * parts[i].length);\n            },\n            getStringBitsLength: function(inputLength, version){\n                return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n            }\n        });\n\n        modes[BYTE] = QRDataMode.extend({\n            bitsInCharacterCount: [8,16,16],\n            modeIndicator: \"0100\",\n            getValue: function(character){\n                var code = character.charCodeAt(0);\n                if(code <= 127 || (160 <= code && code <= 255)){\n                    return code;\n                }\n                else{\n                    throw new Error(\"Unsupported character: \" + character);\n                }\n            },\n            encode: function(str, version){\n                var mode = this,\n                    result = mode.getModeCountString(str.length, version);\n\n                for(var i = 0; i < str.length; i++){\n                    result += toBitsString(mode.getValue(str.charAt(i)), 8);\n                }\n                return result;\n            },\n            getStringBitsLength: function(inputLength, version){\n                return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n            }\n        });\n\n        var modeInstances = {};\n        for(var mode in modes){\n            modeInstances[mode] = new modes[mode]();\n        }\n\n        var FreeCellVisitor = function (matrix){\n            var that = this,\n                row = matrix.length - 1,\n                column = matrix.length - 1,\n                startColumn = column,\n                dir = -1,\n                c = 0;\n            that.move = function(){\n                row += dir * c;\n                c^=1;\n                column = startColumn - c;\n            };\n            that.getNextCell = function(){\n                while(matrix[row][column] !== undefined){\n                    that.move();\n                    if(row < 0 || row >= matrix.length){\n                        dir = -dir;\n                        startColumn-= startColumn != 8 ? 2 : 3;\n                        column = startColumn;\n                        row = dir < 0 ? matrix.length - 1 : 0;\n                    }\n                }\n                return {row: row, column: column};\n            };\n            that.getNextRemainderCell = function(){\n                that.move();\n                if(matrix[row][column] === undefined){\n                     return {row: row, column: column};\n                }\n            };\n        };\n\n        function fillFunctionCell(matrices, bit, x, y){\n            for(var i = 0; i< matrices.length;i++){\n                matrices[i][x][y] = bit;\n            }\n        }\n\n        function fillDataCell(matrices, bit, x, y){\n            for(var i = 0; i < maskPatternConditions.length;i++){\n                matrices[i][x][y] = maskPatternConditions[i](x,y) ? bit ^ 1 : parseInt(bit, 10);\n            }\n        }\n\n        var fillData = function (matrices, blocks){\n            var cellVisitor = new FreeCellVisitor(matrices[0]),\n                block,\n                codewordIdx,\n                cell;\n\n            for(var blockIdx = 0; blockIdx < blocks.length;blockIdx++){\n                block = blocks[blockIdx];\n                codewordIdx = 0;\n                while(block.length > 0){\n                    for(var i = 0; i< block.length; i++){\n                         for(var j = 0; j < 8;j++){\n                            cell = cellVisitor.getNextCell();\n                            fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n                        }\n                    }\n\n                    codewordIdx++;\n                    while(block[0] && codewordIdx == block[0].length){\n                        block.splice(0,1);\n                    }\n                }\n            }\n\n            while((cell = cellVisitor.getNextRemainderCell())){\n                fillDataCell(matrices, 0, cell.row, cell.column);\n            }\n        };\n\n        var padDataString = function (dataString, totalDataCodewords){\n            var dataBitsCount = totalDataCodewords * 8,\n                terminatorIndex = 0,\n                paddingCodewordIndex = 0;\n            while(dataString.length < dataBitsCount && terminatorIndex < terminator.length){\n                dataString+=terminator.charAt(terminatorIndex++);\n            }\n\n            if(dataString.length % 8 !== 0){\n                dataString+= new Array(9 - dataString.length % 8).join(\"0\");\n            }\n\n            while(dataString.length < dataBitsCount){\n                dataString+= paddingCodewords[paddingCodewordIndex];\n                paddingCodewordIndex ^= 1;\n            }\n            return dataString;\n        };\n\n        function generatePowersOfTwo(){\n            var result;\n            for(var power = 1; power < 255; power++){\n\n                result =  powersOfTwoResult[power - 1] * 2;\n                if(result > 255){\n                    result = result ^ 285;\n                }\n\n                powersOfTwoResult[power] = result;\n                powersOfTwo[result] = power;\n            }\n\n            result = (powersOfTwoResult[power - 1] * 2) ^ 285;\n            powersOfTwoResult[power] =   result;\n            powersOfTwoResult[-1] = 0;\n        }\n\n        var xorPolynomials = function (x,y){\n            var result = [],\n                idx = x.length - 2;\n            for(var i = idx; i>=0; i--){\n                 result[i] = x[i] ^ y[i];\n            }\n\n            return result;\n        };\n\n        var multiplyPolynomials = function (x, y){\n            var result = [];\n            for(var i = 0; i < x.length; i++){\n                for(var j = 0; j < y.length; j++){\n                    if(result[i+j] === undefined){\n                         result[i+j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n                    }\n                    else{\n                       result[i+j] = powersOfTwo[powersOfTwoResult[result[i+j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n                    }\n                }\n            }\n\n            return result;\n        };\n\n        function generateGeneratorPolynomials(){\n            var maxErrorCorrectionCodeWordsCount = 68;\n            for(var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++){\n                var firstPolynomial = generatorPolynomials[idx - 1],\n                    secondPolynomial = [idx, 0];\n                generatorPolynomials[idx] =  multiplyPolynomials(firstPolynomial, secondPolynomial);\n            }\n        }\n\n        //possibly generate on demand\n        generatePowersOfTwo();\n        generateGeneratorPolynomials();\n\n        function multiplyByConstant(polynomial, power){\n            var result = [],\n                idx = polynomial.length - 1;\n            do{\n                result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n                idx--;\n            }while(polynomial[idx] !== undefined);\n\n            return result;\n        }\n\n        var generateErrorCodewords = function (data, errorCodewordsCount){\n            var generator = generatorPolynomials[errorCodewordsCount - 1],\n                result = new Array(errorCodewordsCount).concat(data),\n                generatorPolynomial = new Array(result.length - generator.length).concat(generator),\n                steps = data.length,\n                errorCodewords = [],\n                divisor,\n                idx;\n\n            for(idx = 0; idx < steps; idx++){\n                divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n                generatorPolynomial.splice(0,1);\n\n                result = xorPolynomials(divisor, result);\n            }\n\n            for(idx = result.length - 1; idx >= 0;idx--){\n                errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n            }\n\n            return errorCodewords;\n        };\n\n        var getBlocks = function (dataStream, versionCodewordsInformation){\n            var codewordStart = 0,\n                dataBlocks = [],\n                errorBlocks = [],\n                dataBlock,\n                versionGroups = versionCodewordsInformation.groups,\n                blockCodewordsCount,\n                groupBlocksCount,\n                messagePolynomial,\n                codeword;\n\n            for(var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++){\n                groupBlocksCount = versionGroups[groupIdx][0];\n                for(var blockIdx = 0; blockIdx < groupBlocksCount;blockIdx++){\n                    blockCodewordsCount = versionGroups[groupIdx][1];\n                    dataBlock = [];\n                    messagePolynomial = [];\n                    for(var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++){\n                        codeword = dataStream.substring(codewordStart, codewordStart + 8);\n                        dataBlock.push(codeword);\n                        messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n                        codewordStart+=8;\n                    }\n                    dataBlocks.push(dataBlock);\n                    errorBlocks.push(generateErrorCodewords(messagePolynomial,\n                        versionCodewordsInformation.errorCodewordsPerBlock));\n                }\n            }\n            return [dataBlocks, errorBlocks];\n        };\n\n        var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode){\n             var numeric = numberRegex.exec(str),\n                numericMatch = numeric ? numeric[0] : \"\",\n                alpha = alphaRegex.exec(str),\n                alphaMatch = alpha ? alpha[0] : \"\",\n                alphaNumeric = alphaNumericRegex.exec(str),\n                alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : \"\",\n                mode,\n                modeString;\n\n             if(numericMatch && (numericMatch.length >= minNumericBeforeAlpha ||\n                     str.length == numericMatch.length || (numericMatch.length >= minNumericBeforeByte &&\n                     !alphaNumericRegex.test(str.charAt(numericMatch.length))))){\n                mode = NUMERIC;\n                modeString = numericMatch;\n             }\n             else if(alphaNumericMatch && (str.length == alphaNumericMatch.length ||\n                alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)){\n                mode = ALPHA_NUMERIC;\n                modeString =  numericMatch || alphaMatch;\n             }\n             else {\n                mode = BYTE;\n                if(alphaNumericMatch){\n                    modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n                }\n                else{\n                    modeString = byteRegex.exec(str)[0];\n                }\n             }\n\n             return {\n                mode: mode,\n                modeString: modeString\n             };\n        };\n\n        var getModes = function (str){\n            var modes = [],\n                previousMode,\n                idx = 0;\n            modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n            previousMode = modes[0].mode;\n            str = str.substr(modes[0].modeString.length);\n\n            while(str.length > 0){\n               var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n               if(nextMode.mode != previousMode){\n                    previousMode = nextMode.mode;\n                    modes.push(nextMode);\n                    idx++;\n               }\n               else{\n                    modes[idx].modeString += nextMode.modeString;\n               }\n               str = str.substr(nextMode.modeString.length);\n            }\n\n            return modes;\n        };\n\n        var getDataCodewordsCount = function (modes){\n            var length = 0,\n                mode;\n            for(var i = 0; i < modes.length; i++){\n                mode = modeInstances[modes[i].mode];\n                length+= mode.getStringBitsLength(modes[i].modeString.length);\n            }\n\n            return Math.ceil(length / 8);\n        };\n\n        var getVersion = function (dataCodewordsCount, errorCorrectionLevel){\n            var x = 0,\n                y = versionsCodewordsInformation.length - 1,\n                version = Math.floor(versionsCodewordsInformation.length / 2);\n\n            do{\n                if(dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords){\n                    y = version;\n                }\n                else{\n                    x = version;\n                }\n                version = x + Math.floor((y - x) / 2);\n\n            }while(y - x > 1);\n\n            if(dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords){\n                return version + 1;\n            }\n            return y + 1;\n        };\n\n        var getDataString = function (modes, version){\n            var dataString = \"\",\n                mode;\n            for(var i = 0; i < modes.length; i++){\n                mode = modeInstances[modes[i].mode];\n                dataString+= mode.encode(modes[i].modeString, version);\n            }\n\n            return dataString;\n        };\n\n        //fix case all zeros\n        var encodeFormatInformation = function (format){\n            var formatNumber = toDecimal(format),\n                encodedString,\n                result = \"\";\n            if(formatNumber === 0){\n                return \"101010000010010\";\n            }\n            else{\n                encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n            }\n            for(var i = 0; i < encodedString.length; i++){\n                result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n            }\n\n            return result;\n        };\n\n        var encodeBCH = function (value, generatorPolynomial, codeLength){\n            var generatorNumber = toDecimal(generatorPolynomial),\n                polynomialLength = generatorPolynomial.length - 1,\n                valueNumber = value << polynomialLength,\n                length = codeLength - polynomialLength,\n                valueString = toBitsString(value, length),\n                result = dividePolynomials(valueNumber, generatorNumber);\n            result = valueString + toBitsString(result, polynomialLength);\n            return result;\n        };\n\n        var dividePolynomials = function (numberX,numberY){\n                var yLength = numberY.toString(2).length,\n                    xLength = numberX.toString(2).length;\n                do{\n                    numberX ^= numberY << xLength - yLength;\n                    xLength = numberX.toString(2).length;\n                }\n                while(xLength >= yLength);\n\n                return numberX;\n        };\n\n        function getNumberAt(str, idx){\n            return parseInt(str.charAt(idx), 10);\n        }\n\n        var initMatrices = function (version){\n            var matrices = [],\n                modules =  17 + 4 * version;\n            for(var i = 0; i < maskPatternConditions.length; i++){\n                matrices[i] = new Array(modules);\n                for(var j = 0; j < modules; j++){\n                    matrices[i][j] = new Array(modules);\n                }\n            }\n\n            return matrices;\n        };\n\n        var addFormatInformation =function (matrices, formatString){\n            var matrix = matrices[0],\n                x,\n                y,\n                idx = 0,\n                length = formatString.length;\n\n            for(x=0, y=8; x <= 8;x++){\n                if(x!== 6){\n                    fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n                }\n            }\n\n            for(x=8, y=7; y>=0;y--){\n                if(y!== 6){\n                    fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n                }\n            }\n            idx=0;\n            for(y = matrix.length - 1, x = 8; y >= matrix.length - 8;y--){\n                fillFunctionCell(matrices,getNumberAt(formatString, length - 1 - idx++), x, y);\n            }\n\n            fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n\n            for(x = matrix.length - 7, y = 8; x < matrix.length;x++){\n                fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n            }\n        };\n\n        var encodeVersionInformation = function (version){\n            return encodeBCH(version, versionGeneratorPolynomial, 18);\n        };\n\n        var addVersionInformation = function (matrices, dataString){\n            var matrix = matrices[0],\n                modules = matrix.length,\n                x1 = 0,\n                y1 = modules - 11,\n                x2 = modules - 11,\n                y2 = 0,\n                quotient,\n                mod,\n                value;\n\n            for(var idx =0; idx < dataString.length; idx++){\n                quotient = Math.floor(idx / 3);\n                mod = idx % 3;\n                value = getNumberAt(dataString, dataString.length - idx - 1);\n                fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n                fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n            }\n        };\n\n        var addCentricPattern = function (matrices, pattern, x, y){\n            var size = pattern.length + 2,\n                length = pattern.length + 1,\n                value;\n\n            for(var i = 0; i < pattern.length; i++){\n                for(var j = i; j < size - i; j++){\n                    value = pattern[i];\n                    fillFunctionCell(matrices, value, x + j, y + i);\n                    fillFunctionCell(matrices, value, x + i, y + j);\n                    fillFunctionCell(matrices, value, x + length - j, y + length - i);\n                    fillFunctionCell(matrices, value, x + length - i, y + length - j);\n                }\n            }\n        };\n\n        var addFinderSeparator = function (matrices, direction, x, y){\n            var nextX = x,\n                nextY = y,\n                matrix = matrices[0];\n            do{\n                fillFunctionCell(matrices, 0, nextX, y);\n                fillFunctionCell(matrices, 0, x, nextY);\n                nextX+= direction[0];\n                nextY+= direction[1];\n            }\n            while(nextX >=0 && nextX < matrix.length);\n        };\n\n        var addFinderPatterns = function (matrices){\n            var modules = matrices[0].length;\n            addCentricPattern(matrices, finderPattern, 0, 0);\n            addFinderSeparator(matrices, [-1,-1], 7,7);\n            addCentricPattern(matrices, finderPattern, modules - 7, 0);\n            addFinderSeparator(matrices, [1,-1], modules - 8, 7);\n            addCentricPattern(matrices, finderPattern, 0 , modules - 7);\n            addFinderSeparator(matrices, [-1,1],7, modules - 8);\n        };\n\n        var addAlignmentPatterns = function (matrices, version){\n            if(version < 2) {\n                return;\n            }\n\n            var matrix = matrices[0],\n                modules = matrix.length,\n                pointsCount = Math.floor(version / 7),\n                points = [6],\n                startDistance,\n                distance,\n                idx = 0;\n\n            if((startDistance = irregularAlignmentPatternsStartDistance[version])){\n                distance = (modules - 13 - startDistance) / pointsCount;\n            }\n            else{\n                startDistance = distance = (modules - 13) / (pointsCount + 1);\n            }\n            points.push(points[idx++] + startDistance);\n            while((points[idx] + distance) < modules){\n                points.push(points[idx++] + distance);\n            }\n            for(var i = 0; i < points.length;i++){\n                for(var j = 0; j < points.length; j++){\n                    if(matrix[points[i]][points[j]] === undefined){\n                        addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n                    }\n                }\n            }\n        };\n\n        var addTimingFunctions = function (matrices){\n            var row = 6,\n                column = 6,\n                value = 1,\n                modules = matrices[0].length;\n            for(var i = 8; i < modules - 8;i++){\n                fillFunctionCell(matrices, value, row, i);\n                fillFunctionCell(matrices, value, i, column);\n                value ^= 1;\n            }\n        };\n\n        var scoreMaskMatrixes = function (matrices){\n            var scores = [],\n                previousBits = [],\n                darkModules =  [],\n                patterns = [],\n                adjacentSameBits = [],\n                matrix,\n                i,\n                row = 0,\n                column = 1,\n                modules = matrices[0].length;\n\n\n            for(i = 0; i < matrices.length; i++){\n                scores[i] = 0;\n                darkModules[i] = 0;\n                adjacentSameBits[i] = [0,0];\n                patterns[i] = [0, 0];\n                previousBits[i] = [];\n            }\n            for(i = 0; i < modules; i++){\n                for(var j = 0; j < modules; j++){\n                    for(var k = 0; k < matrices.length; k++){\n                        matrix = matrices[k];\n                        darkModules[k]+= parseInt(matrix[i][j], 10);\n                        if(previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 &&\n                            matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]){\n                            scores[k]+=3;\n                        }\n                        scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n                        scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n                        scoreAdjacentSameBits(k,scores,previousBits,matrix[i][j],adjacentSameBits,row);\n                        scoreAdjacentSameBits(k,scores,previousBits,matrix[j][i],adjacentSameBits,column);\n                    }\n                }\n            }\n            var total = modules * modules,\n                minIdx,\n                min = Number.MAX_VALUE;\n\n            for(i = 0; i < scores.length; i++){\n                scores[i]+= calculateDarkModulesRatioScore(darkModules[i], total);\n                if(scores[i] < min){\n                    min = scores[i];\n                    minIdx = i;\n                }\n            }\n\n            return minIdx;\n        };\n\n        function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit){\n            patterns[idx][rowColumn] = ((patterns[idx][rowColumn] << 1) ^ bit) % 128;\n            if(patterns[idx][rowColumn] == finderPatternValue){\n                scores[idx] += 40;\n            }\n        }\n\n        function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn){\n            if(previousBits[idx][rowColumn] == bit){\n                adjacentBits[idx][rowColumn]++;\n            }\n            else{\n                previousBits[idx][rowColumn] = bit;\n                if(adjacentBits[idx][rowColumn] >= 5){\n                    scores[idx]+= 3 + adjacentBits[idx][rowColumn] - 5;\n                }\n                adjacentBits[idx][rowColumn] = 1;\n            }\n        }\n\n        function calculateDarkModulesRatioScore(darkModules, total){\n            var percent = Math.floor((darkModules / total) * 100),\n                mod5 = percent % 5,\n                previous = Math.abs(percent - mod5 - 50),\n                next = Math.abs(percent +  5 - mod5 - 50),\n                score = 10 * Math.min(previous / 5, next / 5);\n            return score;\n        }\n\n        var EncodingResult = function(dataString, version){\n            this.dataString = dataString;\n            this.version = version;\n        };\n\n        var IsoEncoder = function(){\n            this.getEncodingResult = function(inputString, errorCorrectionLevel){\n                var modes = getModes(inputString),\n                dataCodewordsCount = getDataCodewordsCount(modes),\n                version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n                dataString = getDataString(modes, version);\n\n                return new EncodingResult(dataString, version);\n            };\n        };\n\n        var UTF8Encoder = function(){\n            this.mode = modeInstances[this.encodingMode];\n        };\n\n        UTF8Encoder.fn = UTF8Encoder.prototype = {\n            encodingMode: BYTE,\n            utfBOM: \"111011111011101110111111\",\n            initialModeCountStringLength: 20,\n            getEncodingResult: function(inputString, errorCorrectionLevel){\n                var that = this,\n                    data = that.encode(inputString),\n                    dataCodewordsCount = that.getDataCodewordsCount(data),\n                    version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n                    dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n\n                return new EncodingResult(dataString, version);\n            },\n            getDataCodewordsCount: function(data){\n                var that = this,\n                    dataLength = data.length,\n                    dataCodewordsCount = Math.ceil(( that.initialModeCountStringLength + dataLength) / 8);\n\n                return dataCodewordsCount;\n            },\n            encode: function(str){\n                var that = this,\n                    result = that.utfBOM;\n                for(var i = 0; i < str.length; i++){\n                    result += that.encodeCharacter(str.charCodeAt(i));\n                }\n                return result;\n            },\n            encodeCharacter: function(code){\n                var bytesCount = this.getBytesCount(code),\n                    bc = bytesCount - 1,\n                    result = \"\";\n\n                if(bytesCount == 1){\n                    result = toBitsString(code, 8);\n                }\n                else{\n                    var significantOnes = 8 - bytesCount;\n\n                    for(var i = 0; i < bc; i++){\n                        result = toBitsString(code >> (i * 6) & 63 | 128, 8) + result;\n                    }\n\n                    result = ((code >> bc * 6) | ((255 >> significantOnes) << significantOnes)).toString(2) + result;\n                }\n                return result;\n            },\n            getBytesCount: function(code){\n                var ranges = this.ranges;\n                for(var i = 0; i < ranges.length;i++){\n                    if(code < ranges[i]){\n                        return i + 1;\n                    }\n                }\n            },\n            ranges: [128,2048,65536,2097152,67108864]\n        };\n\n        var QRCodeDataEncoder = function(encoding){\n            if(encoding && encoding.toLowerCase().indexOf(\"utf_8\") >= 0){\n                return new UTF8Encoder();\n            }\n            else{\n                return new IsoEncoder();\n            }\n        };\n\n        var encodeData = function (inputString, errorCorrectionLevel, encoding){\n            var encoder = new QRCodeDataEncoder(encoding),\n                encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel),\n                version = encodingResult.version,\n                versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel],\n                dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords),\n                blocks = getBlocks(dataString, versionInformation),\n                matrices = initMatrices(version);\n\n            addFinderPatterns(matrices);\n            addAlignmentPatterns(matrices, version);\n            addTimingFunctions(matrices);\n\n            if(version >= 7){\n                addVersionInformation(matrices, toBitsString(0, 18));\n            }\n\n            addFormatInformation(matrices, toBitsString(0, 15));\n            fillData(matrices, blocks);\n\n            var minIdx = scoreMaskMatrixes(matrices),\n                optimalMatrix = matrices[minIdx];\n\n            if(version >= 7){\n                addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n            }\n\n            var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n            addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n\n            return optimalMatrix;\n        };\n\n        var QRCodeDefaults= {\n            DEFAULT_SIZE: 200,\n            QUIET_ZONE_LENGTH: 4,\n            DEFAULT_ERROR_CORRECTION_LEVEL:\"L\",\n            DEFAULT_BACKGROUND: \"#fff\",\n            DEFAULT_DARK_MODULE_COLOR: \"#000\",\n            MIN_BASE_UNIT_SIZE: 1\n        };\n\n        var QRCode = Widget.extend({\n            init: function (element, options) {\n                var that = this;\n\n                Widget.fn.init.call(that, element, options);\n\n                that.element = $(element);\n                that.wrapper = that.element;\n                that.element.addClass(\"k-qrcode\");\n                that.surfaceWrap = $(\"<div />\").css(\"position\", \"relative\").appendTo(this.element);\n                that.surface = draw.Surface.create(that.surfaceWrap, {\n                    type: that.options.renderAs\n                });\n                that.setOptions(options);\n            },\n\n            redraw: function(){\n                var size = this._getSize();\n\n                this.surfaceWrap.css({\n                    width: size,\n                    height: size\n                });\n                this.surface.clear();\n\n                this.createVisual();\n                this.surface.draw(this.visual);\n            },\n\n            getSize: function() {\n                return kendo.dimensions(this.element);\n            },\n\n            _resize: function() {\n                this.redraw();\n            },\n\n            createVisual: function() {\n                this.visual = this._render();\n            },\n\n            exportVisual: function() {\n                return this._render();\n            },\n\n            _render: function() {\n                var that = this,\n                    value = that._value,\n                    baseUnit,\n                    border = that.options.border || {},\n                    padding = that.options.padding || 0,\n                    borderWidth = border.width || 0,\n                    quietZoneSize,\n                    matrix,\n                    size,\n                    dataSize,\n                    contentSize;\n\n                border.width = borderWidth;\n\n                var visual = new draw.Group();\n\n                if (value){\n                    matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n                    size = that._getSize();\n                    contentSize = size - 2  * (borderWidth + padding);\n                    baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n                    dataSize = matrix.length * baseUnit;\n                    quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n\n                    visual.append(that._renderBackground(size, border));\n                    visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n                }\n\n                return visual;\n            },\n\n            _getSize: function(){\n                var that = this,\n                    size;\n\n                if (that.options.size){\n                   size = parseInt(that.options.size, 10);\n                } else {\n                    var element = that.element,\n                        min = Math.min(element.width(), element.height());\n\n                    if (min > 0){\n                        size = min;\n                    } else {\n                        size = QRCodeDefaults.DEFAULT_SIZE;\n                    }\n                }\n\n                return size;\n            },\n\n            _calculateBaseUnit: function(size, matrixSize){\n                var baseUnit = Math.floor(size/ matrixSize);\n\n                if(baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE){\n                    throw new Error(\"Insufficient size.\");\n                }\n\n                if(baseUnit * matrixSize >= size &&\n                    baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE){\n                    baseUnit--;\n                }\n\n                return baseUnit;\n            },\n\n            _renderMatrix: function(matrix, baseUnit, quietZoneSize){\n                var path = new draw.MultiPath({\n                    fill: {\n                        color: this.options.color\n                    },\n                    stroke: null\n                });\n\n                for (var row = 0; row < matrix.length; row++){\n                    var y = quietZoneSize + row * baseUnit;\n                    var column = 0;\n\n                    while (column < matrix.length){\n                        while (matrix[row][column] === 0 && column < matrix.length){\n                            column++;\n                        }\n\n                        if (column < matrix.length){\n                            var x = column;\n                            while (matrix[row][column] == 1){\n                                column++;\n                            }\n\n                            var x1 = round(quietZoneSize + x * baseUnit);\n                            var y1 = round(y);\n                            var x2 = round(quietZoneSize + column * baseUnit);\n                            var y2 = round(y + baseUnit);\n\n                            path.moveTo(x1, y1)\n                                .lineTo(x1, y2)\n                                .lineTo(x2, y2)\n                                .lineTo(x2, y1)\n                                .close();\n                        }\n                    }\n                }\n\n                return path;\n            },\n\n            _renderBackground: function (size, border) {\n                var box = Box2D(0,0, size, size).unpad(border.width / 2);\n                return draw.Path.fromRect(box.toRect(), {\n                    fill: {\n                        color: this.options.background\n                    },\n                    stroke: {\n                        color: border.color,\n                        width: border.width\n                    }\n                });\n            },\n\n            setOptions: function (options) {\n                var that = this;\n                options = options || {};\n                that.options = extend(that.options, options);\n                if (options.value !== undefined) {\n                    that._value = that.options.value + \"\";\n                }\n                that.redraw();\n            },\n            value: function(value){\n                var that = this;\n                if (value === undefined) {\n                    return that._value;\n                }\n                that._value = value + \"\";\n                that.redraw();\n            },\n            options: {\n                name: \"QRCode\",\n                renderAs: \"svg\",\n                encoding: \"ISO_8859_1\",\n                value: \"\",\n                errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n                background: QRCodeDefaults.DEFAULT_BACKGROUND,\n                color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n                size: \"\",\n                padding: 0,\n                border: {\n                    color: \"\",\n                    width: 0\n                }\n            }\n        });\n\n        dataviz.ExportMixin.extend(QRCode.fn);\n        dataviz.ui.plugin(QRCode);\n\n      kendo.deepExtend(dataviz, {\n            QRCode: QRCode,\n            QRCodeDefaults: QRCodeDefaults,\n            QRCodeFunctions: {\n                FreeCellVisitor: FreeCellVisitor,\n                fillData: fillData,\n                padDataString: padDataString,\n                generateErrorCodewords: generateErrorCodewords,\n                xorPolynomials: xorPolynomials,\n                getBlocks: getBlocks,\n                multiplyPolynomials: multiplyPolynomials,\n                chooseMode: chooseMode,\n                getModes: getModes,\n                getDataCodewordsCount: getDataCodewordsCount,\n                getVersion: getVersion,\n                getDataString: getDataString,\n                encodeFormatInformation: encodeFormatInformation,\n                encodeBCH: encodeBCH,\n                dividePolynomials: dividePolynomials,\n                initMatrices: initMatrices,\n                addFormatInformation: addFormatInformation,\n                encodeVersionInformation: encodeVersionInformation,\n                addVersionInformation: addVersionInformation,\n                addCentricPattern: addCentricPattern,\n                addFinderSeparator: addFinderSeparator,\n                addFinderPatterns: addFinderPatterns,\n                addAlignmentPatterns: addAlignmentPatterns,\n                addTimingFunctions: addTimingFunctions,\n                scoreMaskMatrixes: scoreMaskMatrixes,\n                encodeData: encodeData,\n                UTF8Encoder: UTF8Encoder\n            },\n            QRCodeFields: {\n                modes: modeInstances,\n                powersOfTwo: powersOfTwo,\n                powersOfTwoResult: powersOfTwoResult,\n                generatorPolynomials: generatorPolynomials\n            }\n      });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Class = kendo.Class,\n        Observable = kendo.Observable,\n        deepExtend = kendo.deepExtend,\n        math = Math,\n        proxy = $.proxy,\n\n        util = kendo.util,\n        last = util.last,\n        renderTemplate = util.renderTemplate,\n\n        dataviz = kendo.dataviz,\n        defined = util.defined,\n        filterSeriesByType = dataviz.filterSeriesByType,\n        template = kendo.template,\n        Chart = dataviz.ui.Chart,\n        Selection = dataviz.Selection,\n        addDuration = dataviz.addDuration,\n        limitValue = util.limitValue,\n        lteDateIndex = dataviz.lteDateIndex,\n        toDate = dataviz.toDate,\n        toTime = dataviz.toTime;\n\n    // Constants =============================================================\n    var AUTO_CATEGORY_WIDTH = 28,\n        CHANGE = \"change\",\n        CSS_PREFIX = \"k-\",\n        DRAG = \"drag\",\n        DRAG_END = \"dragEnd\",\n        NAVIGATOR_PANE = \"_navigator\",\n        NAVIGATOR_AXIS = NAVIGATOR_PANE,\n        EQUALLY_SPACED_SERIES = dataviz.EQUALLY_SPACED_SERIES,\n        ZOOM_ACCELERATION = 3,\n        ZOOM = \"zoom\",\n        ZOOM_END = \"zoomEnd\";\n\n    // Stock chart ===========================================================\n    var StockChart = Chart.extend({\n        init: function(element, userOptions) {\n            $(element).addClass(CSS_PREFIX + \"chart\");\n            Chart.fn.init.call(this, element, userOptions);\n        },\n\n        _applyDefaults: function(options, themeOptions) {\n            var chart = this,\n                width = chart.element.width() || dataviz.DEFAULT_WIDTH;\n\n            var stockDefaults = {\n                seriesDefaults: {\n                    categoryField: options.dateField\n                },\n                axisDefaults: {\n                    categoryAxis: {\n                        name: \"default\",\n                        majorGridLines: {\n                            visible: false\n                        },\n                        labels: {\n                            step: 2\n                        },\n                        majorTicks: {\n                            visible: false\n                        },\n                        maxDateGroups: math.floor(width / AUTO_CATEGORY_WIDTH)\n                    }\n                }\n            };\n\n            if (themeOptions) {\n                themeOptions = deepExtend({}, themeOptions, stockDefaults);\n            }\n\n            if (!chart._navigator) {\n                Navigator.setup(options, themeOptions);\n            }\n\n            Chart.fn._applyDefaults.call(chart, options, themeOptions);\n        },\n\n        _initDataSource: function(userOptions) {\n            var options = userOptions || {},\n                dataSource = options.dataSource,\n                hasServerFiltering = dataSource && dataSource.serverFiltering,\n                mainAxis = [].concat(options.categoryAxis)[0],\n                naviOptions = options.navigator || {},\n                select = naviOptions.select,\n                hasSelect = select && select.from && select.to,\n                filter,\n                dummyAxis;\n\n            if (hasServerFiltering && hasSelect) {\n                filter = [].concat(dataSource.filter || []);\n\n                dummyAxis = new dataviz.DateCategoryAxis(deepExtend({\n                    baseUnit: \"fit\"\n                }, mainAxis, {\n                    categories: [select.from, select.to]\n                }));\n\n                dataSource.filter =\n                    Navigator.buildFilter(dummyAxis.range().min, select.to)\n                    .concat(filter);\n            }\n\n            Chart.fn._initDataSource.call(this, userOptions);\n        },\n\n        options: {\n            name: \"StockChart\",\n            dateField: \"date\",\n            axisDefaults: {\n                categoryAxis: {\n                    type: \"date\",\n                    baseUnit: \"fit\",\n                    justified: true\n                },\n                valueAxis: {\n                    narrowRange: true,\n                    labels: {\n                        format: \"C\"\n                    }\n                }\n            },\n            navigator: {\n                select: {},\n                seriesDefaults: {\n                    markers: {\n                        visible: false\n                    },\n                    tooltip: {\n                        visible: true,\n                        template: \"#= kendo.toString(category, 'd') #\"\n                    },\n                    line: {\n                        width: 2\n                    }\n                },\n                hint: {},\n                visible: true\n            },\n            tooltip: {\n                visible: true\n            },\n            legend: {\n                visible: false\n            }\n        },\n\n        _resize: function() {\n            var t = this.options.transitions;\n\n            this.options.transitions = false;\n            this._fullRedraw();\n            this.options.transitions = t;\n        },\n\n        _redraw: function() {\n            var chart = this,\n                navigator = chart._navigator;\n\n            if (navigator && navigator.dataSource) {\n                navigator.redrawSlaves();\n            } else {\n                chart._fullRedraw();\n            }\n        },\n\n        _fullRedraw: function() {\n            var chart = this,\n                navigator = chart._navigator;\n\n            if (!navigator) {\n                navigator = chart._navigator = new Navigator(chart);\n            }\n\n            navigator._setRange();\n            Chart.fn._redraw.call(chart);\n            navigator._initSelection();\n        },\n\n        _onDataChanged: function() {\n            var chart = this;\n\n            Chart.fn._onDataChanged.call(chart);\n            chart._dataBound = true;\n        },\n\n        _bindCategoryAxis: function(axis, data, axisIx) {\n            var chart = this,\n                categoryAxes = chart.options.categoryAxis,\n                axesLength = categoryAxes.length,\n                currentAxis;\n\n            Chart.fn._bindCategoryAxis.apply(this, arguments);\n\n            if (axis.name === NAVIGATOR_AXIS) {\n                while (axisIx < axesLength) {\n                    currentAxis = categoryAxes[axisIx++];\n                    if (currentAxis.pane == NAVIGATOR_PANE) {\n                        currentAxis.categories = axis.categories;\n                    }\n                }\n            }\n        },\n\n        _trackSharedTooltip: function(coords) {\n            var chart = this,\n                plotArea = chart._plotArea,\n                pane = plotArea.paneByPoint(coords);\n\n            if (pane && pane.options.name === NAVIGATOR_PANE) {\n                chart._unsetActivePoint();\n            } else {\n                Chart.fn._trackSharedTooltip.call(chart, coords);\n            }\n        },\n\n        destroy: function() {\n            var chart = this;\n\n            chart._navigator.destroy();\n\n            Chart.fn.destroy.call(chart);\n        }\n    });\n\n    var Navigator = Observable.extend({\n        init: function(chart) {\n            var navi = this;\n\n            navi.chart = chart;\n            navi.options = deepExtend({}, navi.options, chart.options.navigator);\n\n            navi._initDataSource();\n\n            if (!defined(navi.options.hint.visible)) {\n                navi.options.hint.visible = navi.options.visible;\n            }\n\n            chart.bind(DRAG, proxy(navi._drag, navi));\n            chart.bind(DRAG_END, proxy(navi._dragEnd, navi));\n            chart.bind(ZOOM, proxy(navi._zoom, navi));\n            chart.bind(ZOOM_END, proxy(navi._zoomEnd, navi));\n        },\n\n        options: { },\n\n        _initDataSource: function() {\n            var navi = this,\n                options = navi.options,\n                autoBind = options.autoBind,\n                dsOptions = options.dataSource;\n\n            if (!defined(autoBind)) {\n               autoBind = navi.chart.options.autoBind;\n            }\n\n            navi._dataChangedHandler = proxy(navi._onDataChanged, navi);\n\n            if (dsOptions) {\n                navi.dataSource = kendo.data.DataSource\n                    .create(dsOptions)\n                    .bind(CHANGE, navi._dataChangedHandler);\n\n                if (autoBind) {\n                    navi.dataSource.fetch();\n                }\n            }\n        },\n\n        _onDataChanged: function() {\n            var navi = this,\n                chart = navi.chart,\n                series = chart.options.series,\n                seriesIx,\n                seriesLength = series.length,\n                categoryAxes = chart.options.categoryAxis,\n                axisIx,\n                axesLength = categoryAxes.length,\n                data = navi.dataSource.view(),\n                currentSeries,\n                currentAxis,\n                naviCategories;\n\n            for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n                currentSeries = series[seriesIx];\n\n                if (currentSeries.axis == NAVIGATOR_AXIS && chart._isBindable(currentSeries)) {\n                    currentSeries.data = data;\n                }\n            }\n\n            for (axisIx = 0; axisIx < axesLength; axisIx++) {\n                currentAxis = categoryAxes[axisIx];\n\n                if (currentAxis.pane == NAVIGATOR_PANE) {\n                    if (currentAxis.name == NAVIGATOR_AXIS) {\n                        chart._bindCategoryAxis(currentAxis, data, axisIx);\n                        naviCategories = currentAxis.categories;\n                    } else {\n                        currentAxis.categories = naviCategories;\n                    }\n                }\n            }\n\n            if (chart._model) {\n                navi.redraw();\n                navi.filterAxes();\n\n                if (!chart.options.dataSource || (chart.options.dataSource && chart._dataBound)) {\n                    navi.redrawSlaves();\n                }\n            }\n        },\n\n        destroy: function() {\n            var navi = this,\n                dataSource = navi.dataSource;\n\n            if (dataSource) {\n                dataSource.unbind(CHANGE, navi._dataChangeHandler);\n            }\n\n            if (navi.selection) {\n                navi.selection.destroy();\n            }\n        },\n\n        redraw: function() {\n            this._redrawSelf();\n            this._initSelection();\n        },\n\n        _initSelection: function() {\n            var navi = this,\n                chart = navi.chart,\n                options = navi.options,\n                axis = navi.mainAxis(),\n                axisClone = clone(axis),\n                range = axis.range(),\n                min = range.min,\n                max = range.max,\n                groups = axis.options.categories,\n                select = navi.options.select,\n                selection = navi.selection,\n                from = toDate(select.from),\n                to = toDate(select.to);\n\n            if (groups.length === 0) {\n                return;\n            }\n\n            if (selection) {\n                selection.destroy();\n                selection.wrapper.remove();\n            }\n\n            // \"Freeze\" the selection axis position until the next redraw\n            axisClone.box = axis.box;\n\n            selection = navi.selection = new Selection(chart, axisClone, {\n                min: min,\n                max: max,\n                from: from,\n                to: to,\n                selectStart: $.proxy(navi._selectStart, navi),\n                select: $.proxy(navi._select, navi),\n                selectEnd: $.proxy(navi._selectEnd, navi),\n                mousewheel: {\n                    zoom: \"left\"\n                }\n            });\n\n            if (options.hint.visible) {\n                navi.hint = new NavigatorHint(chart.element, {\n                    min: min,\n                    max: max,\n                    template: options.hint.template,\n                    format: options.hint.format\n                });\n            }\n        },\n\n        _setRange: function() {\n            var plotArea = this.chart._createPlotArea(true);\n            var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n            var axisOpt = axis.options;\n\n            var range = axis.range();\n            var min = range.min;\n            var max = addDuration(range.max, axisOpt.baseUnitStep, axisOpt.baseUnit);\n\n            var select = this.options.select || {};\n            var from = toDate(select.from) || min;\n            if (from < min) {\n                from = min;\n            }\n\n            var to = toDate(select.to) || max;\n            if (to > max) {\n                to = max;\n            }\n\n            this.options.select = {\n                from: from,\n                to: to\n            };\n\n            this.filterAxes();\n        },\n\n        _redrawSelf: function(silent) {\n            var plotArea = this.chart._plotArea;\n\n            if (plotArea) {\n                plotArea.redraw(last(plotArea.panes), silent);\n            }\n        },\n\n        redrawSlaves: function() {\n            var navi = this,\n                chart = navi.chart,\n                plotArea = chart._plotArea,\n                slavePanes = plotArea.panes.slice(0, -1);\n\n            // Update the original series before partial refresh.\n            plotArea.srcSeries = chart.options.series;\n\n            plotArea.redraw(slavePanes);\n        },\n\n        _drag: function(e) {\n            var navi = this,\n                chart = navi.chart,\n                coords = chart._eventCoordinates(e.originalEvent),\n                navigatorAxis = navi.mainAxis(),\n                naviRange = navigatorAxis.range(),\n                inNavigator = navigatorAxis.pane.box.containsPoint(coords),\n                axis = chart._plotArea.categoryAxis,\n                range = e.axisRanges[axis.options.name],\n                select = navi.options.select,\n                selection = navi.selection,\n                duration,\n                from,\n                to;\n\n            if (!range || inNavigator || !selection) {\n                return;\n            }\n\n            if (select.from && select.to) {\n                duration = toTime(select.to) - toTime(select.from);\n            } else {\n                duration = toTime(selection.options.to) - toTime(selection.options.from);\n            }\n\n            from = toDate(limitValue(\n                toTime(range.min),\n                naviRange.min, toTime(naviRange.max) - duration\n            ));\n\n            to = toDate(limitValue(\n                toTime(from) + duration,\n                toTime(naviRange.min) + duration, naviRange.max\n            ));\n\n            navi.options.select = { from: from, to: to };\n\n            if (navi._liveDrag()) {\n                navi.filterAxes();\n                navi.redrawSlaves();\n            }\n\n            selection.set(\n                from,\n                to\n            );\n\n            navi.showHint(from, to);\n        },\n\n        _dragEnd: function() {\n            var navi = this;\n\n            navi.filterAxes();\n            navi.filterDataSource();\n            navi.redrawSlaves();\n\n            if (navi.hint) {\n                navi.hint.hide();\n            }\n        },\n\n        _liveDrag: function() {\n            var support = kendo.support,\n                isTouch = support.touch,\n                browser = support.browser,\n                isFirefox = browser.mozilla,\n                isOldIE = browser.msie && browser.version < 9;\n\n            return !isTouch && !isFirefox && !isOldIE;\n        },\n\n        readSelection: function() {\n            var navi = this,\n                selection = navi.selection,\n                src = selection.options,\n                dst = navi.options.select;\n\n            dst.from = src.from;\n            dst.to = src.to;\n        },\n\n        filterAxes: function() {\n            var navi = this,\n                select = navi.options.select || {},\n                chart = navi.chart,\n                allAxes = chart.options.categoryAxis,\n                from = select.from,\n                to = select.to,\n                i,\n                axis;\n\n            for (i = 0; i < allAxes.length; i++) {\n                axis = allAxes[i];\n                if (axis.pane !== NAVIGATOR_PANE) {\n                    axis.min = toDate(from);\n                    axis.max = toDate(to);\n                }\n            }\n        },\n\n        filterDataSource: function() {\n            var navi = this,\n                select = navi.options.select || {},\n                chart = navi.chart,\n                chartDataSource = chart.dataSource,\n                hasServerFiltering = chartDataSource && chartDataSource.options.serverFiltering,\n                axisOptions;\n\n            if (navi.dataSource && hasServerFiltering) {\n                axisOptions = new dataviz.DateCategoryAxis(deepExtend({\n                    baseUnit: \"fit\"\n                }, chart.options.categoryAxis[0], {\n                    categories: [select.from, select.to]\n                })).options;\n\n                chartDataSource.filter(\n                    Navigator.buildFilter(\n                        addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit),\n                        addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit)\n                    )\n                );\n            }\n        },\n\n        _zoom: function(e) {\n            var navi = this,\n                chart = navi.chart,\n                delta = e.delta,\n                axis = chart._plotArea.categoryAxis,\n                select = navi.options.select,\n                selection = navi.selection,\n                categories = navi.mainAxis().options.categories,\n                fromIx,\n                toIx;\n\n            if (!selection) {\n                return;\n            }\n\n            fromIx = lteDateIndex(selection.options.from, categories);\n            toIx = lteDateIndex(selection.options.to, categories);\n\n            e.originalEvent.preventDefault();\n\n            if (math.abs(delta) > 1) {\n                delta *= ZOOM_ACCELERATION;\n            }\n\n            if (toIx - fromIx > 1) {\n                selection.expand(delta);\n                navi.readSelection();\n            } else {\n                axis.options.min = select.from;\n                select.from = axis.scaleRange(-e.delta).min;\n            }\n\n            if (!kendo.support.touch) {\n                navi.filterAxes();\n                navi.redrawSlaves();\n            }\n\n            selection.set(select.from, select.to);\n\n            navi.showHint(navi.options.select.from, navi.options.select.to);\n        },\n\n        _zoomEnd: function(e) {\n            this._dragEnd(e);\n        },\n\n        showHint: function(from, to) {\n            var navi = this,\n                chart = navi.chart,\n                plotArea = chart._plotArea;\n\n            if (navi.hint) {\n                navi.hint.show(\n                    from,\n                    to,\n                    plotArea.backgroundBox()\n                );\n            }\n        },\n\n        _selectStart: function(e) {\n            var chart = this.chart;\n            chart._selectStart.call(chart, e);\n        },\n\n        _select: function(e) {\n            var navi = this,\n                chart = navi.chart;\n\n            navi.showHint(e.from, e.to);\n\n            chart._select.call(chart, e);\n        },\n\n        _selectEnd: function(e) {\n            var navi = this,\n                chart = navi.chart;\n\n            if (navi.hint) {\n                navi.hint.hide();\n            }\n\n            navi.readSelection();\n            navi.filterAxes();\n            navi.filterDataSource();\n            navi.redrawSlaves();\n\n            chart._selectEnd.call(chart, e);\n        },\n\n        mainAxis: function() {\n            var plotArea = this.chart._plotArea;\n\n            if (plotArea) {\n                return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n            }\n        }\n    });\n\n    Navigator.setup = function(options, themeOptions) {\n        options = options || {};\n        themeOptions = themeOptions || {};\n\n        var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator),\n            panes = options.panes = [].concat(options.panes),\n            paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n\n        if (!naviOptions.visible) {\n            paneOptions.visible = false;\n            paneOptions.height = 0.1;\n        }\n\n        panes.push(paneOptions);\n\n        Navigator.attachAxes(options, naviOptions);\n        Navigator.attachSeries(options, naviOptions, themeOptions);\n    };\n\n    Navigator.attachAxes = function(options, naviOptions) {\n        var categoryAxes,\n            valueAxes,\n            series = naviOptions.series || [];\n\n        categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n        valueAxes = options.valueAxis = [].concat(options.valueAxis);\n\n        var equallySpacedSeries = filterSeriesByType(series, EQUALLY_SPACED_SERIES);\n        var justifyAxis = equallySpacedSeries.length === 0;\n\n        var base = deepExtend({\n            type: \"date\",\n            pane: NAVIGATOR_PANE,\n            roundToBaseUnit: !justifyAxis,\n            justified: justifyAxis,\n            _collapse: false,\n            tooltip: { visible: false },\n            labels: { step: 1 },\n            autoBind: !naviOptions.dataSource,\n            autoBaseUnitSteps: {\n                minutes: [1],\n                hours: [1, 2],\n                days: [1, 2],\n                weeks: [],\n                months: [1],\n                years: [1]\n            },\n            _overlap: false\n        });\n        var user = naviOptions.categoryAxis;\n\n        categoryAxes.push(\n            deepExtend({}, base, {\n                    maxDateGroups: 200\n                }, user, {\n                name: NAVIGATOR_AXIS,\n                baseUnit: \"fit\",\n                baseUnitStep: \"auto\",\n                labels: { visible: false },\n                majorTicks: { visible: false }\n            }), deepExtend({}, base, user, {\n                name: NAVIGATOR_AXIS + \"_labels\",\n                maxDateGroups: 20,\n                baseUnitStep: \"auto\",\n                autoBaseUnitSteps: {\n                    minutes: []\n                },\n                majorTicks: { visible: true }\n            }), deepExtend({}, base, user, {\n                name: NAVIGATOR_AXIS + \"_ticks\",\n                maxDateGroups: 200,\n                majorTicks: {\n                    visible: true,\n                    width: 0.5\n                },\n                labels: { visible: false, mirror: true }\n            })\n        );\n\n        valueAxes.push(deepExtend({\n            name: NAVIGATOR_AXIS,\n            pane: NAVIGATOR_PANE,\n            majorGridLines: {\n                visible: false\n            },\n            visible: false\n        }, naviOptions.valueAxis));\n    };\n\n    Navigator.attachSeries = function(options, naviOptions, themeOptions) {\n        var series = options.series = options.series || [],\n            navigatorSeries = [].concat(naviOptions.series || []),\n            seriesColors = themeOptions.seriesColors,\n            defaults = naviOptions.seriesDefaults,\n            i;\n\n        for (i = 0; i < navigatorSeries.length; i++) {\n            series.push(\n                deepExtend({\n                    color: seriesColors[i % seriesColors.length],\n                    categoryField: naviOptions.dateField,\n                    visibleInLegend: false,\n                    tooltip: {\n                        visible: false\n                    }\n                }, defaults, navigatorSeries[i], {\n                    axis: NAVIGATOR_AXIS,\n                    categoryAxis: NAVIGATOR_AXIS,\n                    autoBind: !naviOptions.dataSource\n                })\n            );\n        }\n    };\n\n    Navigator.buildFilter = function(from, to) {\n        return [{\n            field: \"Date\", operator: \"gte\", value: toDate(from)\n        }, {\n            field: \"Date\", operator: \"lt\", value: toDate(to)\n        }];\n    };\n\n    var NavigatorHint = Class.extend({\n        init: function(container, options) {\n            var hint = this;\n\n            hint.options = deepExtend({}, hint.options, options);\n\n            hint.container = container;\n            hint.chartPadding = {\n                top: parseInt(container.css(\"paddingTop\"), 10),\n                left: parseInt(container.css(\"paddingLeft\"), 10)\n            };\n\n            hint.template = hint.template;\n            if (!hint.template) {\n                hint.template = hint.template = renderTemplate(\n                    \"<div class='\" + CSS_PREFIX + \"navigator-hint' \" +\n                    \"style='display: none; position: absolute; top: 1px; left: 1px;'>\" +\n                        \"<div class='\" + CSS_PREFIX + \"tooltip \" + CSS_PREFIX + \"chart-tooltip'>&nbsp;</div>\" +\n                        \"<div class='\" + CSS_PREFIX + \"scroll' />\" +\n                    \"</div>\"\n                );\n            }\n\n            hint.element = $(hint.template()).appendTo(container);\n        },\n\n        options: {\n            format: \"{0:d} - {1:d}\",\n            hideDelay: 500\n        },\n\n        show: function(from, to, bbox) {\n            var hint = this,\n                middle = toDate(toTime(from) + toTime(to - from) / 2),\n                options = hint.options,\n                text = kendo.format(hint.options.format, from, to),\n                tooltip = hint.element.find(\".\" + CSS_PREFIX + \"tooltip\"),\n                scroll = hint.element.find(\".\" + CSS_PREFIX + \"scroll\"),\n                scrollWidth = bbox.width() * 0.4,\n                minPos = bbox.center().x - scrollWidth,\n                maxPos = bbox.center().x,\n                posRange = maxPos - minPos,\n                range = options.max - options.min,\n                scale = posRange / range,\n                offset = middle - options.min,\n                hintTemplate;\n\n            if (hint._hideTimeout) {\n                clearTimeout(hint._hideTimeout);\n            }\n\n            if (!hint._visible) {\n                hint.element\n                    .stop(false, true)\n                    .css(\"visibility\", \"hidden\")\n                    .show();\n                hint._visible = true;\n            }\n\n            if (options.template) {\n                hintTemplate = template(options.template);\n                text = hintTemplate({\n                    from: from,\n                    to: to\n                });\n            }\n\n            tooltip\n                .html(text)\n                .css({\n                    left: bbox.center().x - tooltip.outerWidth() / 2,\n                    top: bbox.y1\n                });\n\n            scroll\n                .css({\n                    width: scrollWidth,\n                    left: minPos + offset * scale,\n                    top: bbox.y1 +\n                         parseInt(tooltip.css(\"margin-top\"), 10) +\n                         parseInt(tooltip.css(\"border-top-width\"), 10) +\n                         tooltip.height() / 2\n                });\n\n            hint.element.css(\"visibility\", \"visible\");\n        },\n\n        hide: function() {\n            var hint = this;\n\n            if (hint._hideTimeout) {\n                clearTimeout(hint._hideTimeout);\n            }\n\n            hint._hideTimeout = setTimeout(function() {\n                hint._visible = false;\n                hint.element.fadeOut(\"slow\");\n            }, hint.options.hideDelay);\n        }\n    });\n\n    function ClonedObject() { }\n    function clone(obj) {\n        ClonedObject.prototype = obj;\n        return new ClonedObject();\n    }\n\n    // Exports ================================================================\n\n    dataviz.ui.plugin(StockChart);\n\n    deepExtend(dataviz, {\n        Navigator: Navigator\n    });\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function ($, undefined) {\n    // Imports ===============================================================\n    var kendo = window.kendo,\n        dataviz = kendo.dataviz,\n\n        Chart = dataviz.ui.Chart,\n        ObservableArray = kendo.data.ObservableArray,\n        SharedTooltip = dataviz.SharedTooltip,\n\n        deepExtend = kendo.deepExtend,\n        isArray = $.isArray,\n        inArray = dataviz.inArray,\n        math = Math;\n\n    // Constants =============================================================\n    var CSS_PREFIX = \"k-\",\n        DEAULT_BAR_WIDTH = 150,\n        DEAULT_BULLET_WIDTH = 150,\n        BAR = \"bar\",\n        BULLET = \"bullet\",\n        PIE = \"pie\",\n        NO_CROSSHAIR = [BAR, BULLET];\n\n    // Sparkline =============================================================\n    var Sparkline = Chart.extend({\n        init: function(element, userOptions) {\n            var chart = this,\n                stage = chart.stage = $(\"<span />\"),\n                options = userOptions || {};\n\n            element = $(element)\n                .addClass(CSS_PREFIX + \"sparkline\")\n                .empty().append(stage);\n\n            chart._initialWidth = math.floor(element.width());\n\n            options = wrapNumber(options);\n\n            if (isArray(options) || options instanceof ObservableArray) {\n                options = { seriesDefaults: { data: options } };\n            }\n\n            if (!options.series) {\n                options.series = [{ data: wrapNumber(options.data) }];\n            }\n\n            deepExtend(options, {\n                seriesDefaults: {\n                    type: options.type\n                }\n            });\n\n            if (inArray(options.series[0].type, NO_CROSSHAIR) ||\n                inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n                options = deepExtend({}, {\n                        categoryAxis: {\n                            crosshair: {\n                                visible: false\n                            }\n                        }\n                    }, options);\n            }\n\n            Chart.fn.init.call(chart, element, options);\n        },\n\n        options: {\n            name: \"Sparkline\",\n            chartArea: {\n                margin: 2\n            },\n            axisDefaults: {\n                visible: false,\n                majorGridLines: {\n                    visible: false\n                },\n                valueAxis: {\n                    narrowRange: true\n                }\n            },\n            seriesDefaults: {\n                type: \"line\",\n                area: {\n                    line: {\n                        width: 0.5\n                    }\n                },\n                bar: {\n                    stack: true\n                },\n                padding: 2,\n                width: 0.5,\n                overlay: {\n                    gradient: null\n                },\n                highlight: {\n                    visible: false\n                },\n                border: {\n                    width: 0\n                },\n                markers: {\n                    size: 2,\n                    visible: false\n                }\n            },\n            tooltip: {\n                visible: true,\n                shared: true\n            },\n            categoryAxis: {\n                crosshair: {\n                    visible: true,\n                    tooltip: {\n                        visible: false\n                    }\n                }\n            },\n            legend: {\n                visible: false\n            },\n            transitions: false,\n\n            pointWidth: 5,\n\n            panes: [{\n                clip: false\n            }]\n        },\n\n        _modelOptions: function() {\n            var chart = this,\n                chartOptions = chart.options,\n                options,\n                width = chart._initialWidth,\n                stage = chart.stage;\n\n            chart.stage.children().hide();\n\n            var space = $(\"<span>&nbsp;</span>\");\n            chart.stage.append(space);\n\n            options = deepExtend({\n                width: width ? width : chart._autoWidth(),\n                height: stage.height(),\n                transitions: chartOptions.transitions\n            }, chartOptions.chartArea, {\n                inline: true,\n                align: false\n            });\n\n            stage.css({\n                width: options.width,\n                height: options.height\n            });\n\n            space.remove();\n\n            chart.stage.children().show();\n            chart.surface.resize();\n\n            return options;\n        },\n\n        _createTooltip: function() {\n            var chart = this,\n                options = chart.options,\n                element = chart.element,\n                tooltip;\n\n            if (chart._sharedTooltip()) {\n                tooltip = new SparklineSharedTooltip(element, chart._plotArea, options.tooltip);\n            } else {\n                tooltip = Chart.fn._createTooltip.call(chart);\n            }\n\n            return tooltip;\n        },\n\n        _surfaceWrap: function() {\n            return this.stage;\n        },\n\n        _autoWidth: function() {\n            var chart = this,\n                options = chart.options,\n                margin = dataviz.getSpacing(options.chartArea.margin),\n                series = options.series,\n                dsTotal = chart.dataSource.total(),\n                seriesTotal = 0,\n                width,\n                i,\n                currentSeries;\n\n            for (i = 0; i < series.length; i++) {\n                currentSeries = series[i];\n\n                if (currentSeries.type === BAR) {\n                    return DEAULT_BAR_WIDTH;\n                }\n\n                if (currentSeries.type === BULLET) {\n                    return DEAULT_BULLET_WIDTH;\n                }\n\n                if (currentSeries.type === PIE) {\n                    return chart.stage.height();\n                }\n\n                if (currentSeries.data) {\n                    seriesTotal = math.max(seriesTotal, currentSeries.data.length);\n                }\n            }\n\n            width = math.max(dsTotal, seriesTotal) * options.pointWidth;\n            if (width > 0) {\n                width += margin.left + margin.right;\n            }\n\n            return width;\n        }\n    });\n\n    var SparklineSharedTooltip = SharedTooltip.extend({\n        options: {\n            animation: {\n                duration: 0\n            }\n        },\n\n        _anchor: function(point, slot) {\n            var anchor = SharedTooltip.fn._anchor.call(this, point, slot);\n            var size = this._measure();\n            anchor.y = -size.height - this.options.offset;\n\n            return anchor;\n        },\n\n        _hideElement: function() {\n            if (this.element) {\n                this.element.hide().remove();\n            }\n        }\n    });\n\n    function wrapNumber(x) {\n        return typeof x === \"number\" ? [x] : x;\n    }\n\n    // Exports ================================================================\n\n    dataviz.ui.plugin(Sparkline);\n\n    deepExtend(dataviz, {\n        SparklineSharedTooltip: SparklineSharedTooltip\n    });\n\n})(window.kendo.jQuery);\n\n\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var math = Math,\n        abs = math.abs,\n        atan = math.atan,\n        atan2 = math.atan2,\n        cos = math.cos,\n        max = math.max,\n        min = math.min,\n        sin = math.sin,\n        tan = math.tan,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        defined = util.defined,\n        deg = util.deg,\n        rad = util.rad,\n        round = util.round,\n        sqr = util.sqr,\n        valueOrDefault = util.valueOrDefault;\n\n    // Implementation =========================================================\n    var Location = Class.extend({\n        init: function(lat, lng) {\n            if (arguments.length === 1) {\n                this.lat = lat[0];\n                this.lng = lat[1];\n            } else {\n                this.lat = lat;\n                this.lng = lng;\n            }\n        },\n\n        DISTANCE_ITERATIONS: 100,\n        DISTANCE_CONVERGENCE: 1e-12,\n        DISTANCE_PRECISION: 2,\n        FORMAT: \"{0:N6},{1:N6}\",\n\n        toArray: function() {\n            return [this.lat, this.lng];\n        },\n\n        equals: function(loc) {\n            return loc && loc.lat === this.lat && loc.lng === this.lng;\n        },\n\n        clone: function() {\n            return new Location(this.lat, this.lng);\n        },\n\n        round: function(precision) {\n            this.lng = round(this.lng, precision);\n            this.lat = round(this.lat, precision);\n            return this;\n        },\n\n        wrap: function() {\n            this.lng = this.lng % 180;\n            this.lat = this.lat % 90;\n            return this;\n        },\n\n        distanceTo: function(dest, datum) {\n            return this.greatCircleTo(dest, datum).distance;\n        },\n\n        destination: function(distance, bearing, datum) {\n            bearing = rad(bearing);\n            datum = datum || dataviz.map.datums.WGS84;\n\n            var fromLat = rad(this.lat);\n            var fromLng = rad(this.lng);\n            var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n\n            var lat = math.asin(sin(fromLat) * cos(dToR) +\n                                cos(fromLat) * sin(dToR) * cos(bearing));\n\n            var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat),\n                                      cos(dToR) - sin(fromLat) * sin(lat));\n\n           return new Location(deg(lat), deg(lng));\n        },\n\n        greatCircleTo: function(dest, datum) {\n            dest = Location.create(dest);\n            datum = datum || dataviz.map.datums.WGS84;\n\n            if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n                return {\n                    distance: 0,\n                    azimuthFrom: 0,\n                    azimuthTo: 0\n                };\n            }\n\n            // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n            // o == sigma\n            // A == alpha\n            var a = datum.a;\n            var b = datum.b;\n            var f = datum.f;\n\n            var L = rad(dest.lng - this.lng);\n\n            var U1 = atan((1 - f) * tan(rad(this.lat)));\n            var sinU1 = sin(U1);\n            var cosU1 = cos(U1);\n\n            var U2 = atan((1 - f) * tan(rad(dest.lat)));\n            var sinU2 = sin(U2);\n            var cosU2 = cos(U2);\n\n            var lambda = L;\n            var prevLambda;\n\n            var i = this.DISTANCE_ITERATIONS;\n            var converged = false;\n\n            var sinLambda;\n            var cosLambda;\n            var sino;\n            var cosA2;\n            var coso;\n            var cos2om;\n            var sigma;\n\n            while (!converged && i-- > 0) {\n                sinLambda = sin(lambda);\n                cosLambda = cos(lambda);\n                sino = math.sqrt(\n                    sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n                );\n\n                coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n                sigma = atan2(sino, coso);\n\n                var sinA = cosU1 * cosU2 * sinLambda / sino;\n                cosA2 = 1 - sqr(sinA);\n                cos2om = 0;\n                if (cosA2 !== 0) {\n                    cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n                }\n\n                prevLambda = lambda;\n                var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n                lambda = L + (1 - C) * f * sinA * (\n                    sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om)))\n                );\n\n                converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n            }\n\n            var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n            var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n            var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n            var deltao = B * sino * (cos2om + B / 4 * (\n                coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))\n            ));\n\n            var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n            var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n            return {\n                distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n                azimuthFrom: deg(azimuthFrom),\n                azimuthTo: deg(azimuthTo)\n            };\n        }\n    });\n\n    // IE < 9 doesn't allow to override toString on definition\n    Location.fn.toString = function() {\n        return kendo.format(this.FORMAT, this.lng, this.lat);\n    };\n\n    Location.fromLngLat = function(ll) {\n        return new Location(ll[1], ll[0]);\n    };\n\n    Location.fromLatLng = function(ll) {\n        return new Location(ll[0], ll[1]);\n    };\n\n    Location.create = function(a, b) {\n        if (defined(a)) {\n            if (a instanceof Location) {\n                return a.clone();\n            } else if (arguments.length === 1 && a.length === 2) {\n                return Location.fromLatLng(a);\n            } else {\n                return new Location(a, b);\n            }\n        }\n    };\n\n    var Extent = Class.extend({\n        init: function(nw, se) {\n            nw = Location.create(nw);\n            se = Location.create(se);\n\n            if (nw.lng + 180 > se.lng + 180 &&\n                nw.lat + 90 < se.lat + 90) {\n                this.se = nw;\n                this.nw = se;\n            } else {\n                this.se = se;\n                this.nw = nw;\n            }\n        },\n\n        contains: function(loc) {\n            var nw = this.nw,\n                se = this.se,\n                lng = valueOrDefault(loc.lng, loc[1]),\n                lat = valueOrDefault(loc.lat, loc[0]);\n\n            return loc &&\n                   lng + 180 >= nw.lng + 180 &&\n                   lng + 180 <= se.lng + 180 &&\n                   lat + 90 >= se.lat + 90 &&\n                   lat + 90 <= nw.lat + 90;\n        },\n\n        center: function() {\n            var nw = this.nw;\n            var se = this.se;\n\n            var lng = nw.lng + (se.lng - nw.lng) / 2;\n            var lat = nw.lat + (se.lat - nw.lat) / 2;\n            return new Location(lat, lng);\n        },\n\n        containsAny: function(locs) {\n            var result = false;\n            for (var i = 0; i < locs.length; i++) {\n                result = result || this.contains(locs[i]);\n            }\n\n            return result;\n        },\n\n        include: function(loc) {\n            var nw = this.nw,\n                se = this.se,\n                lng = valueOrDefault(loc.lng, loc[1]),\n                lat = valueOrDefault(loc.lat, loc[0]);\n\n            nw.lng = min(nw.lng, lng);\n            nw.lat = max(nw.lat, lat);\n\n            se.lng = max(se.lng, lng);\n            se.lat = min(se.lat, lat);\n        },\n\n        includeAll: function(locs) {\n            for (var i = 0; i < locs.length; i++) {\n                this.include(locs[i]);\n            }\n        },\n\n        edges: function() {\n            var nw = this.nw,\n                se = this.se;\n\n            return {nw: this.nw, ne: new Location(nw.lat, se.lng),\n                    se: this.se, sw: new Location(se.lat, nw.lng)};\n        },\n\n        toArray: function() {\n            var nw = this.nw,\n                se = this.se;\n\n            return [nw, new Location(nw.lat, se.lng),\n                    se, new Location(se.lat, nw.lng)];\n        },\n\n        overlaps: function(extent) {\n            return this.containsAny(extent.toArray()) ||\n                   extent.containsAny(this.toArray());\n        }\n    });\n\n    Extent.World = new Extent([90, -180], [-90, 180]);\n\n    Extent.create = function(a, b) {\n        if (a instanceof Extent) {\n            return a;\n        } else if (a && b) {\n            return new Extent(a, b);\n        } else if (a && a.length === 4 && !b) {\n            return new Extent([a[0], a[1]], [a[2], a[3]]);\n        }\n    };\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            Extent: Extent,\n            Location: Location\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function($) {\n    var kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        template = kendo.template,\n\n        dataviz = kendo.dataviz,\n        valueOrDefault = kendo.util.valueOrDefault,\n        defined = kendo.util.defined;\n\n    var Attribution = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n            this._initOptions(options);\n            this.items = [];\n            this.element.addClass(\"k-widget k-attribution\");\n        },\n\n        options: {\n            name: \"Attribution\",\n            separator: \"&nbsp;|&nbsp;\",\n            itemTemplate: \"#= text #\"\n        },\n\n        filter: function(extent, zoom) {\n            this._extent = extent;\n            this._zoom = zoom;\n            this._render();\n        },\n\n        add: function(item) {\n            if (defined(item)) {\n                if (typeof item === \"string\") {\n                    item = { text: item };\n                }\n\n                this.items.push(item);\n                this._render();\n            }\n        },\n\n        remove: function(text) {\n            var result = [];\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                if (item.text !== text) {\n                    result.push(item);\n                }\n            }\n\n            this.items = result;\n\n            this._render();\n        },\n\n        clear: function() {\n            this.items = [];\n            this.element.empty();\n        },\n\n        _render: function() {\n            var result = [];\n            var itemTemplate = template(this.options.itemTemplate);\n\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                var text = this._itemText(item);\n                if (text !== \"\") {\n                    result.push(itemTemplate({\n                        text: text\n                    }));\n                }\n            }\n\n            if (result.length > 0) {\n                this.element.empty()\n                    .append(result.join(this.options.separator))\n                    .show();\n            } else {\n                this.element.hide();\n            }\n        },\n\n        _itemText: function(item) {\n            var text = \"\";\n            var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n            var inArea = this._inArea(item.extent);\n\n            if (inZoomLevel && inArea) {\n                text += item.text;\n            }\n\n            return text;\n        },\n\n        _inZoomLevel: function(min, max) {\n            var result = true;\n            min = valueOrDefault(min, -Number.MAX_VALUE);\n            max = valueOrDefault(max, Number.MAX_VALUE);\n\n            result = this._zoom > min && this._zoom < max;\n\n            return result;\n        },\n\n        _inArea: function(area) {\n            var result = true;\n\n            if (area) {\n                result = area.contains(this._extent);\n            }\n\n            return result;\n        }\n    });\n\n    kendo.dataviz.ui.plugin(Attribution);\n})(window.kendo.jQuery);\n\n(function ($) {\n    var kendo = window.kendo;\n    var Widget = kendo.ui.Widget;\n    var keys = kendo.keys;\n    var proxy = $.proxy;\n\n    var NS = \".kendoNavigator\";\n    var BUTTONS = button(\"n\") + button(\"e\") + button(\"s\") + button(\"w\");\n\n    var Navigator = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n            this._initOptions(options);\n\n            this.element.addClass(\"k-widget k-header k-shadow k-navigator\")\n                        .append(BUTTONS)\n                        .on(\"click\" + NS, \".k-button\", proxy(this, \"_click\"));\n\n            var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n            this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n            this._tabindex(this._keyroot);\n\n            this._keydown = proxy(this._keydown, this);\n            this._keyroot.on(\"keydown\", this._keydown);\n        },\n\n        options: {\n            name: \"Navigator\",\n            panStep: 1\n        },\n\n        events: [\n            \"pan\"\n        ],\n\n        dispose: function() {\n            this._keyroot.off(\"keydown\", this._keydown);\n        },\n\n        _pan: function(x, y) {\n            var panStep = this.options.panStep;\n            this.trigger(\"pan\", {\n                x: x * panStep,\n                y: y * panStep\n            });\n        },\n\n        _click: function(e) {\n            var x = 0;\n            var y = 0;\n            var button = $(e.currentTarget);\n\n            if (button.is(\".k-navigator-n\")) {\n                y = 1;\n            } else if (button.is(\".k-navigator-s\")) {\n                y = -1;\n            } else if (button.is(\".k-navigator-e\")) {\n                x = 1;\n            } else if (button.is(\".k-navigator-w\")) {\n                x = -1;\n            }\n\n            this._pan(x, y);\n            e.preventDefault();\n        },\n\n        _keydown: function(e) {\n            switch (e.which) {\n                case keys.UP:\n                    this._pan(0, 1);\n                    e.preventDefault();\n                    break;\n\n                case keys.DOWN:\n                    this._pan(0, -1);\n                    e.preventDefault();\n                    break;\n\n                case keys.RIGHT:\n                    this._pan(1, 0);\n                    e.preventDefault();\n                    break;\n\n                case keys.LEFT:\n                    this._pan(-1, 0);\n                    e.preventDefault();\n                    break;\n            }\n        }\n    });\n\n    // Helper functions =======================================================\n    function button(dir) {\n       return kendo.format(\n           '<button class=\"k-button k-navigator-{0}\">' +\n               '<span class=\"k-icon k-i-arrow-{0}\"/>' +\n           '</button>', dir);\n    }\n\n    // Exports ================================================================\n    kendo.dataviz.ui.plugin(Navigator);\n\n})(window.kendo.jQuery);\n\n(function ($) {\n    var kendo = window.kendo;\n    var Widget = kendo.ui.Widget;\n    var keys = kendo.keys;\n    var proxy = $.proxy;\n\n    var NS = \".kendoZoomControl\";\n    var BUTTONS = button(\"in\", \"+\") + button(\"out\", \"-\");\n\n    var PLUS = 187;\n    var MINUS = 189;\n    var FF_PLUS = 61;\n    var FF_MINUS = 173;\n\n    var ZoomControl = Widget.extend({\n        init: function(element, options) {\n            Widget.fn.init.call(this, element, options);\n            this._initOptions(options);\n\n            this.element.addClass(\"k-widget k-zoom-control k-button-wrap k-buttons-horizontal\")\n                        .append(BUTTONS)\n                        .on(\"click\" + NS, \".k-button\", proxy(this, \"_click\"));\n\n            var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n            this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n\n            this._tabindex(this._keyroot);\n\n            this._keydown = proxy(this._keydown, this);\n            this._keyroot.on(\"keydown\", this._keydown);\n        },\n\n        options: {\n            name: \"ZoomControl\",\n            zoomStep: 1\n        },\n\n        events: [\n            \"change\"\n        ],\n\n        _change: function(dir) {\n            var zoomStep = this.options.zoomStep;\n            this.trigger(\"change\", {\n                delta: dir * zoomStep\n            });\n        },\n\n        _click: function(e) {\n            var button = $(e.currentTarget);\n            var dir = 1;\n\n            if (button.is(\".k-zoom-out\")) {\n                dir = -1;\n            }\n\n            this._change(dir);\n            e.preventDefault();\n        },\n\n        _keydown: function(e) {\n            switch (e.which) {\n                case keys.NUMPAD_PLUS:\n                case PLUS:\n                case FF_PLUS:\n                    this._change(1);\n                    break;\n\n                case keys.NUMPAD_MINUS:\n                case MINUS:\n                case FF_MINUS:\n                    this._change(-1);\n                    break;\n            }\n        }\n    });\n\n    // Helper functions =======================================================\n    function button(dir, symbol) {\n       return kendo.format(\n           '<button class=\"k-button k-zoom-{0}\" title=\"zoom-{0}\">{1}</button>',\n           dir, symbol);\n    }\n\n    // Exports ================================================================\n    kendo.dataviz.ui.plugin(ZoomControl);\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var math = Math,\n        atan = math.atan,\n        exp = math.exp,\n        pow = math.pow,\n        sin = math.sin,\n        log = math.log,\n        tan = math.tan,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        g = kendo.geometry,\n        Point = g.Point,\n\n        map = dataviz.map,\n        Location = map.Location,\n\n        util = kendo.util,\n        rad = util.rad,\n        deg = util.deg,\n        limit = util.limitValue;\n\n    // Constants ==============================================================\n    var PI = math.PI,\n        PI_DIV_2 = PI / 2,\n        PI_DIV_4 = PI / 4,\n        DEG_TO_RAD = PI / 180;\n\n    // Coordinate reference systems ===========================================\n    var WGS84 = {\n        a: 6378137,                 // Semi-major radius\n        b: 6356752.314245179,       // Semi-minor radius\n        f: 0.0033528106647474805,   // Flattening\n        e: 0.08181919084262149      // Eccentricity\n    };\n\n    // WGS 84 / World Mercator\n    var Mercator = Class.extend({\n        init: function(options) {\n            this._initOptions(options);\n        },\n\n        MAX_LNG: 180,\n        MAX_LAT: 85.0840590501,\n        INVERSE_ITERATIONS: 15,\n        INVERSE_CONVERGENCE: 1e-12,\n\n        options: {\n            centralMeridian: 0,\n            datum: WGS84\n        },\n\n        forward: function(loc, clamp) {\n            var proj = this,\n                options = proj.options,\n                datum = options.datum,\n                r = datum.a,\n                lng0 = options.centralMeridian,\n                lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n                lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n                x = rad(lng - lng0) * r,\n                y = proj._projectLat(lat);\n\n            return new Point(x, y);\n        },\n\n        _projectLat: function(lat) {\n            var datum = this.options.datum,\n                ecc = datum.e,\n                r = datum.a,\n                y = rad(lat),\n                ts = tan(PI_DIV_4 + y / 2),\n                con = ecc * sin(y),\n                p = pow((1 - con) / (1 + con), ecc / 2);\n\n            // See:\n            // http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n            return r * log(ts * p);\n        },\n\n        inverse: function(point, clamp) {\n            var proj = this,\n                options = proj.options,\n                datum = options.datum,\n                r = datum.a,\n                lng0 = options.centralMeridian,\n                lng = point.x / (DEG_TO_RAD * r) + lng0,\n                lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n\n            if (clamp) {\n                lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n            }\n\n            return new Location(lat, lng);\n        },\n\n        _inverseY: function(y) {\n            var proj = this,\n                datum = proj.options.datum,\n                r = datum.a,\n                ecc = datum.e,\n                ecch = ecc / 2,\n                ts = exp(-y / r),\n                phi = PI_DIV_2 - 2 * atan(ts),\n                i;\n\n            for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n                var con = ecc * sin(phi),\n                    p = pow((1 - con) / (1 + con), ecch),\n                    dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n\n                phi += dphi;\n\n                if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n                    break;\n                }\n            }\n\n            return deg(phi);\n        }\n    });\n\n    // WGS 84 / Pseudo-Mercator\n    // Used by Google Maps, Bing, OSM, etc.\n    // Spherical projection of ellipsoidal coordinates.\n    var SphericalMercator = Mercator.extend({\n        MAX_LAT: 85.0511287798,\n\n        _projectLat: function(lat) {\n            var r = this.options.datum.a,\n                y = rad(lat),\n                ts = tan(PI_DIV_4 + y / 2);\n\n            return r * log(ts);\n        },\n\n        _inverseY: function(y) {\n            var r = this.options.datum.a,\n                ts = exp(-y / r);\n\n            return deg(PI_DIV_2 - (2 * atan(ts)));\n        }\n    });\n\n    var Equirectangular = Class.extend({\n        forward: function(loc) {\n            return new Point(loc.lng, loc.lat);\n        },\n\n        inverse: function(point) {\n            return new Location(point.y, point.x);\n        }\n    });\n\n    // TODO: Better (less cryptic name) for this class(es)\n    var EPSG3857 = Class.extend({\n        init: function() {\n            var crs = this,\n                proj = crs._proj = new SphericalMercator();\n\n            var c = this.c = 2 * PI * proj.options.datum.a;\n\n            // Scale circumference to 1, mirror Y and shift origin to top left\n            this._tm = g.transform().translate(0.5, 0.5).scale(1/c, -1/c);\n\n            // Inverse transform matrix\n            this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n        },\n\n        // Location <-> Point (screen coordinates for a given scale)\n        toPoint: function(loc, scale, clamp) {\n            var point = this._proj.forward(loc, clamp);\n\n            return point\n                .transform(this._tm)\n                .scale(scale || 1);\n        },\n\n        toLocation: function(point, scale, clamp) {\n            point = point\n                .clone()\n                .scale(1 / (scale || 1))\n                .transform(this._itm);\n\n            return this._proj.inverse(point, clamp);\n        }\n    });\n\n    var EPSG3395 = Class.extend({\n        init: function() {\n            this._proj = new Mercator();\n        },\n\n        toPoint: function(loc) {\n            return this._proj.forward(loc);\n        },\n\n        toLocation: function(point) {\n            return this._proj.inverse(point);\n        }\n    });\n\n    // WGS 84\n    var EPSG4326 = Class.extend({\n        init: function() {\n            this._proj = new Equirectangular();\n        },\n\n        toPoint: function(loc) {\n            return this._proj.forward(loc);\n        },\n\n        toLocation: function(point) {\n            return this._proj.inverse(point);\n        }\n    });\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            crs: {\n                EPSG3395: EPSG3395,\n                EPSG3857: EPSG3857,\n                EPSG4326: EPSG4326\n            },\n            datums: {\n                WGS84: WGS84\n            },\n            projections: {\n                Equirectangular: Equirectangular,\n                Mercator: Mercator,\n                SphericalMercator: SphericalMercator\n            }\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var proxy = $.proxy,\n        noop = $.noop,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        Extent = dataviz.map.Extent,\n\n        util = kendo.util,\n        defined = util.defined,\n        valueOrDefault = util.valueOrDefault;\n\n    // Implementation =========================================================\n    var Layer = Class.extend({\n        init: function(map, options) {\n            this._initOptions(options);\n            this.map = map;\n\n            this.element = $(\"<div class='k-layer'></div>\")\n               .css({\n                   \"zIndex\": this.options.zIndex,\n                   \"opacity\": this.options.opacity\n               })\n               .appendTo(map.scrollElement);\n\n            this._beforeReset = proxy(this._beforeReset, this);\n            this._reset = proxy(this._reset, this);\n            this._resize = proxy(this._resize, this);\n            this._panEnd = proxy(this._panEnd, this);\n            this._activate();\n\n            this._updateAttribution();\n        },\n\n        destroy: function() {\n            this._deactivate();\n        },\n\n        show: function() {\n            this.reset();\n            this._activate();\n            this._applyExtent(true);\n        },\n\n        hide: function() {\n            this._deactivate();\n            this._setVisibility(false);\n        },\n\n        reset: function() {\n            this._beforeReset();\n            this._reset();\n        },\n\n        _reset: function() {\n            this._applyExtent();\n        },\n\n        _beforeReset: $.noop,\n\n        _resize: $.noop,\n\n        _panEnd: function() {\n            this._applyExtent();\n        },\n\n        _applyExtent: function() {\n            var options = this.options;\n\n            var zoom = this.map.zoom();\n            var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n            var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n\n            var extent = Extent.create(options.extent);\n            var inside = !extent || extent.overlaps(this.map.extent());\n\n            this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n        },\n\n        _setVisibility: function(visible) {\n            this.element.css(\"display\", visible ? \"\" : \"none\");\n        },\n\n        _activate: function() {\n            var map = this.map;\n            map.bind(\"beforeReset\", this._beforeReset);\n            map.bind(\"reset\", this._reset);\n            map.bind(\"resize\", this._resize);\n            map.bind(\"panEnd\", this._panEnd);\n        },\n\n        _deactivate: function() {\n            var map = this.map;\n            map.unbind(\"beforeReset\", this._beforeReset);\n            map.unbind(\"reset\", this._reset);\n            map.unbind(\"resize\", this._resize);\n            map.unbind(\"panEnd\", this._panEnd);\n        },\n\n        _updateAttribution: function() {\n            var attr = this.map.attribution;\n\n            if (attr) {\n                attr.add(this.options.attribution);\n            }\n        }\n    });\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                Layer: Layer\n            }\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        DataSource = kendo.data.DataSource,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n        last = kendo.util.last,\n        defined = kendo.util.defined,\n\n        g = kendo.geometry,\n\n        d = kendo.drawing,\n        Group = d.Group,\n\n        map = dataviz.map,\n        Location = map.Location,\n        Layer = map.layers.Layer;\n\n    // Implementation =========================================================\n    var ShapeLayer = Layer.extend({\n        init: function(map, options) {\n            Layer.fn.init.call(this, map, options);\n\n            this.surface = d.Surface.create(this.element, {\n                width: map.scrollElement.width(),\n                height: map.scrollElement.height()\n            });\n\n            this._initRoot();\n\n            this.movable = new kendo.ui.Movable(this.surface.element);\n            this._markers = [];\n\n            this._click = this._handler(\"shapeClick\");\n            this.surface.bind(\"click\", this._click);\n\n            this._mouseenter = this._handler(\"shapeMouseEnter\");\n            this.surface.bind(\"mouseenter\", this._mouseenter);\n\n            this._mouseleave = this._handler(\"shapeMouseLeave\");\n            this.surface.bind(\"mouseleave\", this._mouseleave);\n\n            this._initDataSource();\n        },\n\n        options: {\n            autoBind: true\n        },\n\n        destroy: function() {\n            Layer.fn.destroy.call(this);\n\n            this.surface.destroy();\n            this.dataSource.unbind(\"change\", this._dataChange);\n        },\n\n        setDataSource: function(dataSource) {\n            if (this.dataSource) {\n                this.dataSource.unbind(\"change\", this._dataChange);\n            }\n\n            this.dataSource = dataSource;\n            this.dataSource.bind(\"change\", this._dataChange);\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        _reset: function() {\n            Layer.fn._reset.call(this);\n            this._translateSurface();\n\n            if (this._data) {\n                this._load(this._data);\n            }\n        },\n\n        _initRoot: function() {\n            this._root = new Group();\n            this.surface.draw(this._root);\n        },\n\n        _beforeReset: function() {\n            this.surface.clear();\n            this._initRoot();\n        },\n\n        _resize: function() {\n            this.surface.size(this.map.size());\n        },\n\n        _initDataSource: function() {\n            var dsOptions = this.options.dataSource;\n            this._dataChange = proxy(this._dataChange, this);\n            this.dataSource = DataSource\n                .create(dsOptions)\n                .bind(\"change\", this._dataChange);\n\n            if (dsOptions && this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        _dataChange: function(e) {\n            this._data = e.sender.view();\n            this._load(this._data);\n        },\n\n        _load: function(data) {\n            this._clearMarkers();\n\n            if (!this._loader) {\n                this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n            }\n\n            var container = new Group();\n            for (var i = 0; i < data.length; i++) {\n                var shape = this._loader.parse(data[i]);\n                if (shape) {\n                    container.append(shape);\n                }\n            }\n\n            this._root.clear();\n            this._root.append(container);\n        },\n\n        shapeCreated: function(shape) {\n            var cancelled = false;\n            if (shape instanceof d.Circle) {\n                cancelled = defined(this._createMarker(shape));\n            }\n\n            if (!cancelled) {\n                var args = { layer: this, shape: shape };\n                cancelled = this.map.trigger(\"shapeCreated\", args);\n            }\n\n            return cancelled;\n        },\n\n        _createMarker: function(shape) {\n            var marker = this.map.markers.bind({\n                location: shape.location\n            }, shape.dataItem);\n\n            if (marker) {\n                this._markers.push(marker);\n            }\n\n            return marker;\n        },\n\n        _clearMarkers: function() {\n            for (var i = 0; i < this._markers.length; i++) {\n                this.map.markers.remove(this._markers[i]);\n            }\n            this._markers = [];\n        },\n\n        _panEnd: function(e) {\n            Layer.fn._panEnd.call(this, e);\n            this._translateSurface();\n        },\n\n        _translateSurface: function() {\n            var map = this.map;\n            var nw = map.locationToView(map.extent().nw);\n\n            if (this.surface.translate) {\n                this.surface.translate(nw);\n                this.movable.moveTo({ x: nw.x, y: nw.y });\n            }\n        },\n\n        _handler: function(event) {\n            var layer = this;\n            return function(e) {\n                if (e.element) {\n                    var args = {\n                        layer: layer,\n                        shape: e.element,\n                        originalEvent: e.originalEvent\n                    };\n\n                    layer.map.trigger(event, args);\n                }\n            };\n        }\n    });\n\n    var GeoJSONLoader = Class.extend({\n        init: function(locator, defaultStyle, observer) {\n            this.observer = observer;\n            this.locator = locator;\n            this.style = defaultStyle;\n        },\n\n        parse: function(item) {\n            var root = new Group();\n\n            if (item.type === \"Feature\") {\n                this._loadGeometryTo(root, item.geometry, item);\n            } else {\n                this._loadGeometryTo(root, item, item);\n            }\n\n            if (root.children.length < 2) {\n                root = root.children[0];\n            }\n\n            return root;\n        },\n\n        _shapeCreated: function(shape) {\n            var cancelled = false;\n\n            if (this.observer && this.observer.shapeCreated) {\n                cancelled = this.observer.shapeCreated(shape);\n            }\n\n            return cancelled;\n        },\n\n        _loadGeometryTo: function(container, geometry, dataItem) {\n            var coords = geometry.coordinates;\n            var i;\n            var path;\n\n            switch(geometry.type) {\n                case \"LineString\":\n                    path = this._loadPolygon(container, [coords], dataItem);\n                    this._setLineFill(path);\n                    break;\n\n                case \"MultiLineString\":\n                    for (i = 0; i < coords.length; i++) {\n                        path = this._loadPolygon(container, [coords[i]], dataItem);\n                        this._setLineFill(path);\n                    }\n                    break;\n\n                case \"Polygon\":\n                    this._loadPolygon(container, coords, dataItem);\n                    break;\n\n                case \"MultiPolygon\":\n                    for (i = 0; i < coords.length; i++) {\n                        this._loadPolygon(container, coords[i], dataItem);\n                    }\n                    break;\n\n                case \"Point\":\n                    this._loadPoint(container, coords, dataItem);\n                    break;\n\n                case \"MultiPoint\":\n                    for (i = 0; i < coords.length; i++) {\n                        this._loadPoint(container, coords[i], dataItem);\n                    }\n                    break;\n            }\n        },\n\n        _setLineFill: function(path) {\n            var segments = path.segments;\n            if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n                path.options.fill = null;\n            }\n        },\n\n        _loadShape: function(container, shape) {\n            if (!this._shapeCreated(shape)) {\n                container.append(shape);\n            }\n\n            return shape;\n        },\n\n        _loadPolygon: function(container, rings, dataItem) {\n            var shape = this._buildPolygon(rings);\n            shape.dataItem = dataItem;\n\n            return this._loadShape(container, shape);\n        },\n\n        _buildPolygon: function(rings) {\n            var type = rings.length > 1 ? d.MultiPath : d.Path;\n            var path = new type(this.style);\n\n            for (var i = 0; i < rings.length; i++) {\n                for (var j = 0; j < rings[i].length; j++) {\n                    var point = this.locator.locationToView(\n                        Location.fromLngLat(rings[i][j])\n                    );\n\n                    if (j === 0) {\n                        path.moveTo(point.x, point.y);\n                    } else {\n                        path.lineTo(point.x, point.y);\n                    }\n                }\n            }\n\n            return path;\n        },\n\n        _loadPoint: function(container, coords, dataItem) {\n            var location = Location.fromLngLat(coords);\n            var point = this.locator.locationToView(location);\n\n            var circle = new g.Circle(point, 10);\n            var shape = new d.Circle(circle, this.style);\n            shape.dataItem = dataItem;\n            shape.location = location;\n\n            return this._loadShape(container, shape);\n        }\n    });\n\n    // Exports ================================================================\n    deepExtend(kendo.data, {\n        schemas: {\n            geojson: {\n                type: \"json\",\n                data: function(data) {\n                    if (data.type === \"FeatureCollection\") {\n                        return data.features;\n                    }\n\n                    if (data.type === \"GeometryCollection\") {\n                        return data.geometries;\n                    }\n\n                    return data;\n                }\n            }\n        },\n        transports: {\n            geojson: {\n                read: {\n                    dataType: \"json\"\n                }\n            }\n        }\n    });\n\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                shape: ShapeLayer,\n                ShapeLayer: ShapeLayer\n            },\n            GeoJSONLoader: GeoJSONLoader\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var proxy = $.proxy,\n\n        kendo = window.kendo,\n        getter = kendo.getter,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        util = kendo.util,\n        defined = util.defined,\n        isNumber = util.isNumber,\n\n        g = kendo.geometry,\n        d = kendo.drawing,\n\n        map = dataviz.map,\n        Location = map.Location,\n        ShapeLayer = map.layers.ShapeLayer;\n\n    var PI = Math.PI;\n\n    // Implementation =========================================================\n    var BubbleLayer = ShapeLayer.extend({\n        options: {\n            autoBind: true,\n            locationField: \"location\",\n            valueField: \"value\",\n            minSize: 0,\n            maxSize: 100,\n            scale: \"sqrt\",\n            symbol: \"circle\"\n        },\n\n        _load: function(data) {\n            if (data.length === 0) {\n                return;\n            }\n\n            var opt = this.options;\n            var getValue = getter(opt.valueField);\n\n            data = data.slice(0);\n            data.sort(function(a, b) {\n                return getValue(b) - getValue(a);\n            });\n\n            var maxValue = getValue(data[0]);\n            var scaleType = this._scaleType();\n            var scale;\n            for (var i = 0; i < data.length; i++) {\n                var dataItem = data[i];\n                var location = getter(opt.locationField)(dataItem);\n                var value = getter(opt.valueField)(dataItem);\n\n                if (defined(location) && defined(value)) {\n                    if (!scale) {\n                        scale = new scaleType([0, value], [opt.minSize, opt.maxSize]);\n                    }\n\n                    location = Location.create(location);\n                    var center = this.map.locationToView(location);\n                    var size = scale.map(value);\n\n                    var symbol = this._createSymbol({\n                        center: center,\n                        size: size,\n                        style: opt.style,\n                        dataItem: dataItem,\n                        location: location\n                    });\n\n                    symbol.dataItem = dataItem;\n                    symbol.location = location;\n                    symbol.value = value;\n\n                    this._drawSymbol(symbol);\n                }\n            }\n        },\n\n        _scaleType: function() {\n            var scale = this.options.scale;\n\n            if (kendo.isFunction(scale)) {\n                return scale;\n            }\n\n            return dataviz.map.scales[scale];\n        },\n\n        _createSymbol: function(args) {\n            var symbol = this.options.symbol;\n            if (!kendo.isFunction(symbol)) {\n                symbol = dataviz.map.symbols[symbol];\n            }\n\n            return symbol(args);\n        },\n\n        _drawSymbol: function(shape) {\n            var args = { layer: this, shape: shape };\n            var cancelled = this.map.trigger(\"shapeCreated\", args);\n            if (!cancelled) {\n                this.surface.draw(shape);\n            }\n        }\n    });\n\n    var SqrtScale = kendo.Class.extend({\n        init: function(domain, range) {\n            this._domain = domain;\n            this._range = range;\n\n            var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n            var outputRange = range[1] - range[0];\n            this._ratio = outputRange / domainRange;\n        },\n\n        map: function(value) {\n            var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n            return this._range[0] + rel;\n        }\n    });\n\n    var Symbols = {\n        circle: function (args) {\n            var geo = new g.Circle(args.center, args.size / 2);\n            return new d.Circle(geo, args.style);\n        },\n\n        square: function(args) {\n            var path = new d.Path(args.style);\n            var halfSize = args.size / 2;\n            var center = args.center;\n\n            path.moveTo(center.x - halfSize, center.y - halfSize)\n                .lineTo(center.x + halfSize, center.y - halfSize)\n                .lineTo(center.x + halfSize, center.y + halfSize)\n                .lineTo(center.x - halfSize, center.y + halfSize)\n                .close();\n\n            return path;\n        }\n    };\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                bubble: BubbleLayer,\n                BubbleLayer: BubbleLayer\n            },\n            scales: {\n                sqrt: SqrtScale\n            },\n            symbols: Symbols\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var math = Math,\n\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        template = kendo.template,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        g = kendo.geometry,\n        Point = g.Point,\n\n        Layer = dataviz.map.layers.Layer,\n\n        util = kendo.util,\n        round = util.round,\n        renderSize = util.renderSize,\n        limit = util.limitValue;\n\n    var PAN_DELAY = 100;\n\n    // Image tile layer =============================================================\n    var TileLayer = Layer.extend({\n        init: function(map, options) {\n            Layer.fn.init.call(this, map, options);\n\n            if (typeof this.options.subdomains === \"string\") {\n                this.options.subdomains = this.options.subdomains.split(\"\");\n            }\n\n            var viewType = this._viewType();\n            this._view = new viewType(this.element, this.options);\n        },\n\n        destroy: function() {\n            Layer.fn.destroy.call(this);\n\n            this._view.destroy();\n            this._view = null;\n        },\n\n        _reset: function() {\n            Layer.fn._reset.call(this);\n            this._updateView();\n            this._view.clear();\n            this._view.reset();\n        },\n\n        _viewType: function() {\n            return TileView;\n        },\n\n        _activate: function() {\n            Layer.fn._activate.call(this);\n\n            if (!kendo.support.mobileOS) {\n                if (!this._pan) {\n                    this._pan = kendo.throttle(\n                        proxy(this._render, this),\n                        100\n                    );\n                }\n\n                this.map.bind(\"pan\", this._pan);\n            }\n        },\n\n        _deactivate: function() {\n            Layer.fn._deactivate.call(this);\n\n            if (this._pan) {\n                this.map.unbind(\"pan\", this._pan);\n            }\n        },\n\n        _updateView: function() {\n            var view = this._view,\n                map = this.map,\n                extent = map.extent(),\n                extentToPoint = {\n                    nw: map.locationToLayer(extent.nw).round(),\n                    se: map.locationToLayer(extent.se).round()\n                };\n\n            view.center(map.locationToLayer(map.center()));\n            view.extent(extentToPoint);\n            view.zoom(map.zoom());\n        },\n\n        _resize: function() {\n            this._render();\n        },\n\n        _panEnd: function(e) {\n            Layer.fn._panEnd.call(this, e);\n            this._render();\n        },\n\n        _render: function() {\n            this._updateView();\n            this._view.render();\n        }\n    });\n\n    var TileView = Class.extend({\n        init: function(element, options) {\n            this.element = element;\n            this._initOptions(options);\n\n            this.pool = new TilePool();\n        },\n\n        options: {\n            tileSize: 256,\n            subdomains: [\"a\", \"b\", \"c\"],\n            urlTemplate: \"\"\n        },\n\n        center: function(center) {\n            this._center = center;\n        },\n\n        extent: function(extent) {\n            this._extent = extent;\n        },\n\n        zoom: function(zoom) {\n            this._zoom = zoom;\n        },\n\n        pointToTileIndex: function(point) {\n            return new Point(\n                math.floor(point.x / this.options.tileSize),\n                math.floor(point.y / this.options.tileSize)\n            );\n        },\n\n        clear: function() {\n            this.pool.empty();\n        },\n\n        tileCount: function() {\n            var size = this.size(),\n                firstTileIndex = this.pointToTileIndex(this._extent.nw),\n                nw = this._extent.nw,\n                point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\n            return {\n                x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n                y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n            };\n        },\n\n        size: function() {\n            var nw = this._extent.nw,\n                se = this._extent.se,\n                diff = se.clone().translate(-nw.x, -nw.y);\n\n            return {\n                width: diff.x,\n                height: diff.y\n            };\n        },\n\n        indexToPoint: function(index) {\n            var x = index.x, y = index.y;\n\n            return new Point(\n                x * this.options.tileSize,\n                y * this.options.tileSize\n            );\n        },\n\n        subdomainText: function() {\n            var subdomains = this.options.subdomains;\n\n            return subdomains[this.subdomainIndex++ % subdomains.length];\n        },\n\n        destroy: function() {\n            this.element.empty();\n            this.pool.empty();\n        },\n\n        reset: function() {\n            this.subdomainIndex = 0;\n            this.basePoint = this._extent.nw;\n            this.render();\n        },\n\n        render: function() {\n            var size = this.tileCount(),\n                firstTileIndex = this.pointToTileIndex(this._extent.nw),\n                tile, x, y;\n\n            for (x = 0; x < size.x; x++) {\n                for (y = 0; y < size.y; y++) {\n                    tile = this.createTile({\n                        x: firstTileIndex.x + x,\n                        y: firstTileIndex.y + y\n                    });\n\n                    if (!tile.options.visible) {\n                        this.element.append(tile.element);\n                        tile.options.visible = true;\n                    }\n                }\n            }\n        },\n\n        createTile: function(currentIndex) {\n            var options = this.tileOptions(currentIndex);\n\n            return this.pool.get(this._center, options);\n        },\n\n        tileOptions: function(currentIndex) {\n            var index = this.wrapIndex(currentIndex),\n                point = this.indexToPoint(currentIndex),\n                base = this.basePoint,\n                offset = point.clone().translate(-base.x, -base.y);\n\n            return {\n                index: index,\n                currentIndex: currentIndex,\n                point: point,\n                offset: roundPoint(offset),\n                zoom: this._zoom,\n                subdomain: this.subdomainText(),\n                urlTemplate: this.options.urlTemplate,\n                errorUrlTemplate: this.options.errorUrlTemplate\n            };\n        },\n\n        wrapIndex: function(index) {\n            var boundary = math.pow(2, this._zoom);\n            return {\n                x: this.wrapValue(index.x, boundary),\n                y: limit(index.y, 0, boundary - 1)\n            };\n        },\n\n        wrapValue: function(value, boundary) {\n            var remainder = (math.abs(value) % boundary);\n            if (value >= 0) {\n                value = remainder;\n            } else {\n                value = boundary - (remainder === 0 ? boundary : remainder);\n            }\n\n            return value;\n        }\n    });\n\n    var ImageTile = Class.extend({\n        init: function(options) {\n            this._initOptions(options);\n            this.createElement();\n            this.load();\n            // initially the image should be\n            this.options.visible = false;\n        },\n\n        options: {\n            urlTemplate: \"\",\n            errorUrlTemplate: \"\",\n            visible: false\n        },\n\n        createElement: function() {\n            this.element = $(\"<img style='position: absolute; display: block; visibility: visible;' />\")\n                            .error(proxy(function(e) {\n                                if (this.errorUrl()) {\n                                    e.target.setAttribute(\"src\", this.errorUrl());\n                                } else {\n                                    e.target.removeAttribute(\"src\");\n                                }\n                            }, this));\n        },\n\n        load: function(options) {\n            this.options = deepExtend({}, this.options, options);\n\n            var htmlElement = this.element[0];\n\n            htmlElement.style.visibility = \"visible\";\n            htmlElement.style.display = \"block\";\n            htmlElement.style.top = renderSize(this.options.offset.y);\n            htmlElement.style.left = renderSize(this.options.offset.x);\n            htmlElement.setAttribute(\"src\", this.url());\n\n            this.options.id = tileId(this.options.currentIndex, this.options.zoom);\n            this.options.visible = true;\n        },\n\n        url: function() {\n            var urlResult = template(this.options.urlTemplate);\n\n            return urlResult(this.urlOptions());\n        },\n\n        errorUrl: function() {\n            var urlResult = template(this.options.errorUrlTemplate);\n\n            return urlResult(this.urlOptions());\n        },\n\n        urlOptions: function() {\n            var options = this.options;\n            return {\n                zoom: options.zoom,\n                subdomain: options.subdomain,\n                z: options.zoom,\n                x: options.index.x,\n                y: options.index.y,\n                s: options.subdomain,\n                quadkey: options.quadkey,\n                q: options.quadkey,\n                culture: options.culture,\n                c: options.culture\n            };\n        },\n\n        destroy: function() {\n            if (this.element) {\n                this.element.remove();\n                this.element = null;\n            }\n        }\n    });\n\n    var TilePool = Class.extend({\n        init: function() {\n            // calculate max size automaticaly\n            this._items = [];\n        },\n\n        options: {\n            maxSize: 100\n        },\n\n        // should considered to remove the center of the screen\n        get: function(center, options) {\n            var pool = this,\n                item;\n\n            if (pool._items.length >= pool.options.maxSize) {\n                item = pool._update(center, options);\n            } else {\n                item = pool._create(options);\n            }\n\n            return item;\n        },\n\n        empty: function() {\n            var items = this._items,\n                i;\n\n            for (i = 0; i < items.length; i++) {\n                items[i].destroy();\n            }\n\n            this._items = [];\n        },\n\n        _create: function(options) {\n            var pool = this,\n                items = pool._items,\n                id = tileId(options.currentIndex, options.zoom),\n                oldTile, i, item, tile;\n\n            for (i = 0; i < items.length; i++) {\n                item = items[i];\n                if (item.options.id === id) {\n                    oldTile = item;\n                    tile = oldTile;\n                }\n            }\n\n            if (oldTile) {\n                oldTile.load(options);\n            } else {\n                tile = new ImageTile(options);\n                this._items.push(tile);\n            }\n\n            return tile;\n        },\n\n        _update: function(center, options) {\n            var pool = this,\n                items = pool._items,\n                dist = -Number.MAX_VALUE,\n                currentDist, index, i, item;\n\n            var id = tileId(options.currentIndex, options.zoom);\n\n            for (i = 0; i < items.length; i++) {\n                item = items[i];\n                currentDist = item.options.point.clone().distanceTo(center);\n                if (item.options.id === id) {\n                    return items[i];\n                }\n\n                if (dist < currentDist) {\n                    index = i;\n                    dist = currentDist;\n                }\n            }\n\n            items[index].load(options);\n\n            return items[index];\n        }\n    });\n\n    // Methods ================================================================\n    function roundPoint(point) {\n        return new Point(round(point.x), round(point.y));\n    }\n\n    function tileId(index, zoom) {\n            return \"x:\" + index.x + \"y:\" + index.y + \"zoom:\" + zoom;\n    }\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                tile: TileLayer,\n                TileLayer: TileLayer,\n\n                ImageTile: ImageTile,\n                TilePool: TilePool,\n                TileView: TileView\n            }\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var math = Math,\n\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        template = kendo.template,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n        defined = kendo.util.defined,\n\n        Extent = dataviz.map.Extent,\n        Location = dataviz.map.Location,\n        Layer = dataviz.map.layers.Layer,\n        TileLayer = dataviz.map.layers.TileLayer,\n        TileView = dataviz.map.layers.TileView;\n\n    // Bing tile layer =============================================================\n    var BingLayer = TileLayer.extend({\n        init: function(map, options) {\n            TileLayer.fn.init.call(this, map, options);\n\n            this._onMetadata = $.proxy(this._onMetadata, this);\n            this._fetchMetadata();\n        },\n\n        options: {\n            baseUrl: \"//dev.virtualearth.net/REST/v1/Imagery/Metadata/\",\n            imagerySet: \"road\"\n        },\n\n        _fetchMetadata: function() {\n            var options = this.options;\n\n            if (!options.key) {\n                throw new Error(\"Bing tile layer: API key is required\");\n            }\n\n            $.ajax({\n                url: options.baseUrl + options.imagerySet,\n                data: {\n                    output: \"json\",\n                    include: \"ImageryProviders\",\n                    key: options.key,\n                    uriScheme: this._scheme(window.location.protocol)\n                },\n                type: \"get\",\n                dataType: \"jsonp\",\n                jsonp: \"jsonp\",\n                success: this._onMetadata\n            });\n        },\n\n        _scheme: function(proto) {\n            return proto.replace(\":\", \"\") === \"https\" ? \"https\" : \"http\";\n        },\n\n        _onMetadata: function(data) {\n            if (data && data.resourceSets.length) {\n                var resource = this.resource = data.resourceSets[0].resources[0];\n\n                deepExtend(this._view.options, {\n                    urlTemplate: resource.imageUrl\n                        .replace(\"{subdomain}\", \"#= subdomain #\")\n                        .replace(\"{quadkey}\", \"#= quadkey #\")\n                        .replace(\"{culture}\", \"#= culture #\"),\n                    subdomains: resource.imageUrlSubdomains\n                });\n\n                var options = this.options;\n                if (!defined(options.minZoom)) {\n                    options.minZoom = resource.zoomMin;\n                }\n                if (!defined(options.maxZoom)) {\n                    options.maxZoom = resource.zoomMax;\n                }\n\n                this._addAttribution();\n                this.reset();\n            }\n        },\n\n        _viewType: function() {\n            return BingView;\n        },\n\n        _addAttribution: function() {\n            var attr = this.map.attribution;\n            if (attr) {\n                var items = this.resource.imageryProviders;\n                if (items) {\n                    for (var i = 0; i < items.length; i++) {\n                        var item = items[i];\n                        for (var y = 0; y < item.coverageAreas.length; y++) {\n                            var area = item.coverageAreas[y];\n                            attr.add({\n                                text: item.attribution,\n                                minZoom: area.zoomMin,\n                                maxZoom: area.zoomMax,\n                                extent: new Extent(\n                                    new Location(area.bbox[2], area.bbox[1]),\n                                    new Location(area.bbox[0], area.bbox[3])\n                                )\n                            });\n                        }\n                    }\n                }\n            }\n        },\n\n        imagerySet: function(value) {\n            if (value) {\n                this.options.imagerySet = value;\n                this.map.attribution.clear();\n                this._fetchMetadata();\n                this._reset();\n            } else {\n                return this.options.imagerySet;\n            }\n        }\n    });\n\n    var BingView = TileView.extend({\n        options: {\n            culture: \"en-US\"\n        },\n\n        tileOptions: function(currentIndex) {\n            var options = TileView.fn.tileOptions.call(this, currentIndex);\n\n            options.culture = this.options.culture;\n            options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n\n            return options;\n        },\n\n        tileQuadKey: function(index) {\n            var quadKey = \"\",\n                digit, mask, i;\n\n            for (i = this._zoom; i > 0; i--) {\n                digit = 0;\n                mask = 1 << (i - 1);\n\n                if ((index.x & mask) !== 0) {\n                    digit++;\n                }\n\n                if ((index.y & mask) !== 0) {\n                    digit += 2;\n                }\n\n                quadKey += digit;\n            }\n\n            return quadKey;\n        }\n    });\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                bing: BingLayer,\n                BingLayer: BingLayer,\n                BingView: BingView\n            }\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var doc = document,\n        math = Math,\n        indexOf = $.inArray,\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        DataSource = kendo.data.DataSource,\n        Tooltip = kendo.ui.Tooltip,\n\n        dataviz = kendo.dataviz,\n        deepExtend = kendo.deepExtend,\n\n        map = dataviz.map,\n        Location = map.Location,\n        Layer = map.layers.Layer;\n\n    // Implementation =========================================================\n    var MarkerLayer = Layer.extend({\n        init: function(map, options) {\n            Layer.fn.init.call(this, map, options);\n\n            this._markerClick = proxy(this._markerClick, this);\n            this.element.on(\"click\", \".k-marker\", this._markerClick);\n\n            this.items = [];\n            this._initDataSource();\n        },\n\n        destroy: function() {\n            Layer.fn.destroy.call(this);\n\n            this.element.off(\"click\", \".k-marker\", this._markerClick);\n\n            this.dataSource.unbind(\"change\", this._dataChange);\n            this.clear();\n        },\n\n        options: {\n            zIndex: 1000,\n            autoBind: true,\n            dataSource: {},\n            locationField: \"location\",\n            titleField: \"title\"\n        },\n\n        add: function(arg) {\n            if ($.isArray(arg)) {\n                for (var i = 0; i < arg.length; i++) {\n                    this._addOne(arg[i]);\n                }\n            } else {\n                return this._addOne(arg);\n            }\n        },\n\n        remove: function(marker) {\n            marker.destroy();\n\n            var index = indexOf(marker, this.items);\n            if (index > -1) {\n                this.items.splice(index, 1);\n            }\n        },\n\n        clear: function() {\n            for (var i = 0; i < this.items.length; i++) {\n                this.items[i].destroy();\n            }\n\n            this.items = [];\n        },\n\n        update: function(marker) {\n            var loc = marker.location();\n            if (loc) {\n                marker.showAt(this.map.locationToView(loc));\n\n                var args = { marker: marker, layer: this };\n                this.map.trigger(\"markerActivate\", args);\n            }\n        },\n\n        _reset: function() {\n            Layer.fn._reset.call(this);\n            var items = this.items;\n            for (var i = 0; i < items.length; i++) {\n                this.update(items[i]);\n            }\n        },\n\n        bind: function (options, dataItem) {\n            var marker = map.Marker.create(options, this.options);\n            marker.dataItem = dataItem;\n\n            var args = { marker: marker, layer: this };\n            var cancelled = this.map.trigger(\"markerCreated\", args);\n            if (!cancelled) {\n                this.add(marker);\n                return marker;\n            }\n        },\n\n        setDataSource: function(dataSource) {\n            if (this.dataSource) {\n                this.dataSource.unbind(\"change\", this._dataChange);\n            }\n\n            this.dataSource = dataSource;\n            this.dataSource.bind(\"change\", this._dataChange);\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        _addOne: function(arg) {\n            var marker = Marker.create(arg, this.options);\n            marker.addTo(this);\n\n            return marker;\n        },\n\n        _initDataSource: function() {\n            var dsOptions = this.options.dataSource;\n            this._dataChange = proxy(this._dataChange, this);\n            this.dataSource = DataSource\n                .create(dsOptions)\n                .bind(\"change\", this._dataChange);\n\n            if (dsOptions && this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        },\n\n        _dataChange: function(e) {\n            this._load(e.sender.view());\n        },\n\n        _load: function(data) {\n            this._data = data;\n            this.clear();\n\n            var getLocation = kendo.getter(this.options.locationField);\n            var getTitle = kendo.getter(this.options.titleField);\n            for (var i = 0; i < data.length; i++) {\n                var dataItem = data[i];\n                this.bind({\n                    location: getLocation(dataItem),\n                    title: getTitle(dataItem)\n                }, dataItem);\n            }\n        },\n\n        _markerClick: function(e) {\n            var args = { marker: $(e.target).data(\"kendoMarker\"), layer: this };\n            this.map.trigger(\"markerClick\", args);\n        }\n    });\n\n    var Marker = Class.extend({\n        init: function(options) {\n            this.options = options || {};\n        },\n\n        addTo: function(parent) {\n            this.layer = parent.markers || parent;\n            this.layer.items.push(this);\n            this.layer.update(this);\n        },\n\n        location: function(value) {\n            if (value) {\n                this.options.location = Location.create(value).toArray();\n\n                if (this.layer) {\n                    this.layer.update(this);\n                }\n\n                return this;\n            } else {\n                return Location.create(this.options.location);\n            }\n        },\n\n        showAt: function(point) {\n            this.render();\n            this.element.css({\n                left: math.round(point.x),\n                top: math.round(point.y)\n            });\n\n            if (this.tooltip && this.tooltip.popup) {\n                // TODO: Expose popup/tooltip updatePosition? method\n                this.tooltip.popup._position();\n            }\n        },\n\n        hide: function() {\n            if (this.element) {\n                this.element.remove();\n                this.element = null;\n            }\n\n            if (this.tooltip) {\n                this.tooltip.destroy();\n                this.tooltip = null;\n            }\n        },\n\n        destroy: function() {\n            this.layer = null;\n            this.hide();\n        },\n\n        render: function() {\n            if (!this.element) {\n                var options = this.options;\n                var layer = this.layer;\n\n                this.element = $(doc.createElement(\"span\"))\n                    .addClass(\"k-marker k-marker-\" + kendo.toHyphens(options.shape || \"pin\"))\n                    .attr(\"title\", options.title)\n                    .data(\"kendoMarker\", this)\n                    .css(\"zIndex\", options.zIndex);\n\n                if (layer) {\n                    layer.element.append(this.element);\n                }\n\n                this.renderTooltip();\n            }\n        },\n\n        renderTooltip: function() {\n            var marker = this;\n            var title = marker.options.title;\n            var options = marker.options.tooltip || {};\n\n            if (options && Tooltip) {\n                var template = options.template;\n                if (template) {\n                    var contentTemplate = kendo.template(template);\n                    options.content = function(e) {\n                        e.location = marker.location();\n                        e.marker = marker;\n                        return contentTemplate(e);\n                    };\n                }\n\n                if (title || options.content || options.contentUrl) {\n                    this.tooltip = new Tooltip(this.element, options);\n                    this.tooltip.marker = this;\n                }\n            }\n        }\n    });\n\n    Marker.create = function(arg, defaults) {\n        if (arg instanceof Marker) {\n            return arg;\n        }\n\n        return new Marker(deepExtend({}, defaults, arg));\n    };\n\n    // Exports ================================================================\n    deepExtend(dataviz, {\n        map: {\n            layers: {\n                marker: MarkerLayer,\n                MarkerLayer: MarkerLayer\n            },\n            Marker: Marker\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var doc = document,\n        math = Math,\n        min = math.min,\n        pow = math.pow,\n\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Widget = kendo.ui.Widget,\n        deepExtend = kendo.deepExtend,\n\n        dataviz = kendo.dataviz,\n        ui = dataviz.ui,\n\n        g = kendo.geometry,\n        Point = g.Point,\n\n        map = dataviz.map,\n        Extent = map.Extent,\n        Location = map.Location,\n        EPSG3857 = map.crs.EPSG3857,\n\n        util = kendo.util,\n        defined = util.defined,\n        limit = util.limitValue,\n        renderPos = util.renderPos,\n        valueOrDefault = util.valueOrDefault;\n\n    // Constants ==============================================================\n    var CSS_PREFIX = \"k-\",\n        FRICTION = 0.90,\n        FRICTION_MOBILE = 0.93,\n        MOUSEWHEEL = \"DOMMouseScroll mousewheel\",\n        VELOCITY_MULTIPLIER = 5;\n\n    // Map widget =============================================================\n    var Map = Widget.extend({\n        init: function(element, options) {\n            kendo.destroy(element);\n            Widget.fn.init.call(this, element);\n\n            this._initOptions(options);\n            this.bind(this.events, options);\n\n            this.crs = new EPSG3857();\n\n            this.element\n                .addClass(CSS_PREFIX + this.options.name.toLowerCase())\n                .css(\"position\", \"relative\")\n                .empty()\n                .append(doc.createElement(\"div\"));\n\n            this._viewOrigin = this._getOrigin();\n            this._initScroller();\n            this._initMarkers();\n            this._initControls();\n            this._initLayers();\n            this._reset();\n\n            this._mousewheel = proxy(this._mousewheel, this);\n            this.element.bind(\"click\", proxy(this._click, this));\n            this.element.bind(MOUSEWHEEL, this._mousewheel);\n        },\n\n        options: {\n            name: \"Map\",\n            controls: {\n                attribution: true,\n                navigator: {\n                    panStep: 100\n                },\n                zoom: true\n            },\n            layers: [],\n            layerDefaults: {\n                shape: {\n                    style: {\n                        fill: {\n                            color: \"#fff\"\n                        },\n                        stroke: {\n                            color: \"#aaa\",\n                            width: 0.5\n                        }\n                    }\n                },\n                bubble: {\n                    style: {\n                        fill: {\n                            color: \"#fff\",\n                            opacity: 0.5\n                        },\n                        stroke: {\n                            color: \"#aaa\",\n                            width: 0.5\n                        }\n                    }\n                },\n                marker: {\n                    shape: \"pinTarget\",\n                    tooltip: {\n                        position: \"top\"\n                    }\n                }\n            },\n            center: [0, 0],\n            zoom: 3,\n            minSize: 256,\n            minZoom: 1,\n            maxZoom: 19,\n            markers: [],\n            markerDefaults: {\n                shape: \"pinTarget\",\n                tooltip: {\n                    position: \"top\"\n                }\n            },\n            wraparound: true\n        },\n\n        events:[\n            \"beforeReset\",\n            \"click\",\n            \"reset\",\n            \"pan\",\n            \"panEnd\",\n            \"markerActivate\",\n            \"markerClick\",\n            \"markerCreated\",\n            \"shapeClick\",\n            \"shapeCreated\",\n            \"shapeMouseEnter\",\n            \"shapeMouseLeave\",\n            \"zoomStart\",\n            \"zoomEnd\"\n        ],\n\n        destroy: function() {\n            this.scroller.destroy();\n\n            if (this.navigator) {\n                this.navigator.destroy();\n            }\n\n            if (this.attribution) {\n                this.attribution.destroy();\n            }\n\n            if (this.zoomControl) {\n                this.zoomControl.destroy();\n            }\n\n            this.markers.destroy();\n\n            for (var i = 0; i < this.layers.length; i++) {\n                this.layers[i].destroy();\n            }\n\n            Widget.fn.destroy.call(this);\n        },\n\n        zoom: function(level) {\n            var options = this.options;\n\n            if (defined(level)) {\n                level = limit(level, options.minZoom, options.maxZoom);\n                if (options.zoom !== level) {\n                    options.zoom = level;\n                    this._reset();\n                }\n\n                return this;\n            } else {\n                return options.zoom;\n            }\n        },\n\n        center: function(center) {\n            if (center) {\n                this.options.center = Location.create(center).toArray();\n                this._reset();\n\n                return this;\n            } else {\n                return Location.create(this.options.center);\n            }\n        },\n\n        extent: function(extent) {\n            if (extent) {\n                this._setExtent(extent);\n                return this;\n            } else {\n                return this._getExtent();\n            }\n        },\n\n        setOptions: function(options) {\n            Widget.fn.setOptions.call(this, options);\n            this._reset();\n        },\n\n        locationToLayer: function(location, zoom) {\n            var clamp = !this.options.wraparound;\n            location = Location.create(location);\n            return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n        },\n\n        layerToLocation: function(point, zoom) {\n            var clamp = !this.options.wraparound;\n            point = Point.create(point);\n            return  this.crs.toLocation(point, this._layerSize(zoom), clamp);\n        },\n\n        locationToView: function(location) {\n            location = Location.create(location);\n            var origin = this.locationToLayer(this._viewOrigin);\n            var point = this.locationToLayer(location);\n\n            return point.translateWith(origin.scale(-1));\n        },\n\n        viewToLocation: function(point, zoom) {\n            var origin = this.locationToLayer(this._getOrigin(), zoom);\n            point = Point.create(point);\n            point = point.clone().translateWith(origin);\n            return this.layerToLocation(point, zoom);\n        },\n\n        eventOffset: function(e) {\n            var offset = this.element.offset();\n            var event = e.originalEvent || e;\n            var x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n            var y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n\n            return new g.Point(x, y);\n        },\n\n        eventToView: function(e) {\n            var cursor = this.eventOffset(e);\n            return this.locationToView(this.viewToLocation(cursor));\n        },\n\n        eventToLayer: function(e) {\n            return this.locationToLayer(this.eventToLocation(e));\n        },\n\n        eventToLocation: function(e) {\n            var cursor = this.eventOffset(e);\n            return this.viewToLocation(cursor);\n        },\n\n        viewSize: function() {\n            var element = this.element;\n            var scale = this._layerSize();\n            var width = element.width();\n\n            if (!this.options.wraparound) {\n                width = min(scale, width);\n            }\n            return {\n                width: width,\n                height: min(scale, element.height())\n            };\n        },\n\n        _setOrigin: function(origin, zoom) {\n            var size = this.viewSize(),\n                topLeft;\n\n            origin = this._origin = Location.create(origin);\n            topLeft = this.locationToLayer(origin, zoom);\n            topLeft.x += size.width / 2;\n            topLeft.y += size.height / 2;\n\n            this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n\n            return this;\n        },\n\n        _getOrigin: function(invalidate) {\n            var size = this.viewSize(),\n                topLeft;\n\n            if (invalidate || !this._origin) {\n                topLeft = this.locationToLayer(this.center());\n                topLeft.x -= size.width / 2;\n                topLeft.y -= size.height / 2;\n\n                this._origin = this.layerToLocation(topLeft);\n            }\n\n            return this._origin;\n        },\n\n        _setExtent: function(extent) {\n            extent = Extent.create(extent);\n            this.center(extent.center());\n\n            var width = this.element.width();\n            var height = this.element.height();\n            for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n                var nw = this.locationToLayer(extent.nw, zoom);\n                var se = this.locationToLayer(extent.se, zoom);\n                var layerWidth = math.abs(se.x - nw.x);\n                var layerHeight = math.abs(se.y - nw.y);\n\n                if (layerWidth <= width && layerHeight <= height) {\n                    break;\n                }\n            }\n\n            this.zoom(zoom);\n        },\n\n        _getExtent: function() {\n            var nw = this._getOrigin();\n            var bottomRight = this.locationToLayer(nw);\n            var size = this.viewSize();\n\n            bottomRight.x += size.width;\n            bottomRight.y += size.height;\n\n            var se = this.layerToLocation(bottomRight);\n            return new Extent(nw, se);\n        },\n\n        _zoomAround: function(pivot, level) {\n            this._setOrigin(this.layerToLocation(pivot, level), level);\n            this.zoom(level);\n        },\n\n        _initControls: function() {\n            var controls = this.options.controls;\n\n            if (ui.Attribution && controls.attribution) {\n                this._createAttribution(controls.attribution);\n            }\n\n            if (!kendo.support.mobileOS) {\n                if (ui.Navigator && controls.navigator) {\n                    this._createNavigator(controls.navigator);\n                }\n\n                if (ui.ZoomControl && controls.zoom) {\n                    this._createZoomControl(controls.zoom);\n                }\n            }\n        },\n\n        _createControlElement: function(options, defaultPos) {\n            var pos = options.position || defaultPos;\n            var posSelector = \".\" + renderPos(pos).replace(\" \", \".\");\n            var wrap = $(\".k-map-controls\" + posSelector, this.element);\n            if (wrap.length === 0) {\n                wrap = $(\"<div>\")\n                       .addClass(\"k-map-controls \" + renderPos(pos))\n                       .appendTo(this.element);\n            }\n\n            return $(\"<div>\").appendTo(wrap);\n        },\n\n        _createAttribution: function(options) {\n            var element = this._createControlElement(options, \"bottomRight\");\n            this.attribution = new ui.Attribution(element, options);\n        },\n\n        _createNavigator: function(options) {\n            var element = this._createControlElement(options, \"topLeft\");\n            var navigator = this.navigator = new ui.Navigator(element, options);\n\n            this._navigatorPan = proxy(this._navigatorPan, this);\n            navigator.bind(\"pan\", this._navigatorPan);\n\n            this._navigatorCenter = proxy(this._navigatorCenter, this);\n            navigator.bind(\"center\", this._navigatorCenter);\n        },\n\n        _navigatorPan: function(e) {\n            var map = this;\n            var scroller = map.scroller;\n\n            var x = scroller.scrollLeft + e.x;\n            var y = scroller.scrollTop - e.y;\n\n            var bounds = this._virtualSize;\n            var height = this.element.height();\n            var width = this.element.width();\n\n            // TODO: Move limits in scroller\n            x = limit(x, bounds.x.min, bounds.x.max - width);\n            y = limit(y, bounds.y.min, bounds.y.max - height);\n\n            map.scroller.one(\"scroll\", function(e) { map._scrollEnd(e); });\n            map.scroller.scrollTo(-x, -y);\n        },\n\n        _navigatorCenter: function() {\n            this.center(this.options.center);\n        },\n\n        _createZoomControl: function(options) {\n            var element = this._createControlElement(options, \"topLeft\");\n            var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n\n            this._zoomControlChange = proxy(this._zoomControlChange, this);\n            zoomControl.bind(\"change\", this._zoomControlChange);\n        },\n\n        _zoomControlChange: function(e) {\n            if (!this.trigger(\"zoomStart\", { originalEvent: e })) {\n                this.zoom(this.zoom() + e.delta);\n                this.trigger(\"zoomEnd\", { originalEvent: e });\n            }\n        },\n\n        _initScroller: function() {\n            var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n            var zoomable = this.options.zoomable !== false;\n            var scroller = this.scroller = new kendo.mobile.ui.Scroller(\n                this.element.children(0), {\n                    friction: friction,\n                    velocityMultiplier: VELOCITY_MULTIPLIER,\n                    zoom: zoomable,\n                    mousewheelScrolling: false\n                });\n\n            scroller.bind(\"scroll\", proxy(this._scroll, this));\n            scroller.bind(\"scrollEnd\", proxy(this._scrollEnd, this));\n            scroller.userEvents.bind(\"gesturestart\", proxy(this._scaleStart, this));\n            scroller.userEvents.bind(\"gestureend\", proxy(this._scale, this));\n\n            this.scrollElement = scroller.scrollElement;\n        },\n\n        _initLayers: function() {\n            var defs = this.options.layers,\n                layers = this.layers = [];\n\n            for (var i = 0; i < defs.length; i++) {\n                var options = defs[i];\n                var type = options.type || \"shape\";\n                var defaults = this.options.layerDefaults[type];\n                var impl = dataviz.map.layers[type];\n\n                layers.push(new impl(this, deepExtend({}, defaults, options)));\n            }\n        },\n\n        _initMarkers: function() {\n            this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n            this.markers.add(this.options.markers);\n        },\n\n        _scroll: function(e) {\n            var origin = this.locationToLayer(this._viewOrigin).round();\n            var movable = e.sender.movable;\n\n            var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1/movable.scale);\n            origin.x += offset.x;\n            origin.y += offset.y;\n\n            this._setOrigin(this.layerToLocation(origin));\n            this.trigger(\"pan\", {\n                originalEvent: e,\n                origin: this._getOrigin(),\n                center: this.center()\n            });\n        },\n\n        _scrollEnd: function(e) {\n            this.trigger(\"panEnd\", {\n                originalEvent: e,\n                origin: this._getOrigin(),\n                center: this.center()\n            });\n        },\n\n        _scaleStart: function(e) {\n            if (this.trigger(\"zoomStart\", { originalEvent: e })) {\n                var touch = e.touches[1];\n                if (touch) {\n                    touch.cancel();\n                }\n            }\n        },\n\n        _scale: function(e) {\n            var scale = this.scroller.movable.scale;\n            var zoom = this._scaleToZoom(scale);\n            var gestureCenter = new g.Point(e.center.x, e.center.y);\n            var centerLocation = this.viewToLocation(gestureCenter, zoom);\n            var centerPoint = this.locationToLayer(centerLocation, zoom);\n            var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n\n            this._zoomAround(originPoint, zoom);\n            this.trigger(\"zoomEnd\", { originalEvent: e });\n        },\n\n        _scaleToZoom: function(scaleDelta) {\n            var scale = this._layerSize() * scaleDelta;\n            var tiles = scale / this.options.minSize;\n            var zoom = math.log(tiles) / math.log(2);\n\n            return math.round(zoom);\n        },\n\n        _reset: function() {\n            if (this.attribution) {\n                this.attribution.filter(this.center(), this.zoom());\n            }\n\n            this._viewOrigin = this._getOrigin(true);\n            this._resetScroller();\n            this.trigger(\"beforeReset\");\n            this.trigger(\"reset\");\n        },\n\n        _resetScroller: function() {\n            var scroller = this.scroller;\n            var x = scroller.dimensions.x;\n            var y = scroller.dimensions.y;\n            var scale = this._layerSize();\n            var maxScale = 20 * scale;\n            var nw = this.extent().nw;\n            var topLeft = this.locationToLayer(nw).round();\n\n            scroller.movable.round = true;\n            scroller.reset();\n            scroller.userEvents.cancel();\n\n            var maxZoom = this.options.maxZoom - this.zoom();\n            scroller.dimensions.maxScale = pow(2, maxZoom);\n\n            var xBounds = { min: -topLeft.x, max: scale - topLeft.x };\n            var yBounds = { min: -topLeft.y, max: scale - topLeft.y };\n\n            if (this.options.wraparound) {\n                xBounds.min = -maxScale;\n                xBounds.max = maxScale;\n            }\n\n            if (this.options.pannable === false) {\n                var viewSize = this.viewSize();\n                xBounds.min = yBounds.min = 0;\n                xBounds.max = viewSize.width;\n                yBounds.max = viewSize.height;\n            }\n\n            x.makeVirtual();\n            y.makeVirtual();\n            x.virtualSize(xBounds.min, xBounds.max);\n            y.virtualSize(yBounds.min, yBounds.max);\n\n            this._virtualSize = { x: xBounds, y: yBounds };\n        },\n\n        _renderLayers: function() {\n            var defs = this.options.layers,\n                layers = this.layers = [],\n                scrollWrap = this.scrollWrap;\n\n            scrollWrap.empty();\n\n            for (var i = 0; i < defs.length; i++) {\n                var options = defs[i];\n                var type = options.type || \"shape\";\n                var defaults = this.options.layerDefaults[type];\n                var impl = dataviz.map.layers[type];\n\n                layers.push(new impl(this, deepExtend({}, defaults, options)));\n            }\n        },\n\n        _layerSize: function(zoom) {\n            zoom = valueOrDefault(zoom, this.options.zoom);\n            return this.options.minSize * pow(2, zoom);\n        },\n\n        _click: function(e) {\n            var cursor = this.eventOffset(e);\n            this.trigger(\"click\", {\n                originalEvent: e,\n                location: this.viewToLocation(cursor)\n            });\n        },\n\n        _mousewheel: function(e) {\n            e.preventDefault();\n            var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n            var options = this.options;\n            var fromZoom = this.zoom();\n            var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n\n            if (options.zoomable !== false && toZoom !== fromZoom) {\n                if (!this.trigger(\"zoomStart\", { originalEvent: e })) {\n                    var cursor = this.eventOffset(e);\n                    var location = this.viewToLocation(cursor);\n                    var postZoom = this.locationToLayer(location, toZoom);\n                    var origin = postZoom.translate(-cursor.x, -cursor.y);\n                    this._zoomAround(origin, toZoom);\n\n                    this.trigger(\"zoomEnd\", { originalEvent: e });\n                }\n            }\n        }\n    });\n\n    // Exports ================================================================\n    dataviz.ui.plugin(Map);\n\n})(window.kendo.jQuery);\n\n\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        diagram = kendo.dataviz.diagram = {},\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n        isArray = $.isArray,\n        EPSILON = 1e-06;\n\n    /*-------------------Diverse utilities----------------------------*/\n    var Utils = {\n    };\n\n    deepExtend(Utils, {\n        isNearZero: function (num) {\n            return Math.abs(num) < EPSILON;\n        },\n        isDefined: function (obj) {\n            return typeof obj !== 'undefined';\n        },\n\n        isUndefined: function (obj) {\n            return (typeof obj === 'undefined') || obj === null;\n        },\n        /**\n         * Returns whether the given object is an object or a value.\n         */\n        isObject: function (obj) {\n            return obj === Object(obj);\n        },\n        /**\n         * Returns whether the object has a property with the given name.\n         */\n        has: function (obj, key) {\n            return Object.hasOwnProperty.call(obj, key);\n        },\n        /**\n         * Returns whether the given object is a string.\n         */\n        isString: function (obj) {\n            return Object.prototype.toString.call(obj) == '[object String]';\n        },\n        isBoolean: function (obj) {\n            return Object.prototype.toString.call(obj) == '[object Boolean]';\n        },\n        isType: function (obj, type) {\n            return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n        },\n        /**\n         * Returns whether the given object is a number.\n         */\n        isNumber: function (obj) {\n            return !isNaN(parseFloat(obj)) && isFinite(obj);\n        },\n        /**\n         * Return whether the given object (array or dictionary).\n         */\n        isEmpty: function (obj) {\n            if (obj === null) {\n                return true;\n            }\n            if (isArray(obj) || Utils.isString(obj)) {\n                return obj.length === 0;\n            }\n            for (var key in obj) {\n                if (Utils.has(obj, key)) {\n                    return false;\n                }\n            }\n            return true;\n        },\n        simpleExtend: function(destination, source) {\n            if(!Utils.isObject(source)) {\n                return;\n            }\n\n            for(var name in source) {\n                destination[name] = source[name];\n            }\n        },\n        /**\n         * Returns an array of the specified size and with each entry set to the given value.\n         * @param size\n         * @param value\n         * @returns {Array}\n         */\n        initArray: function createIdArray(size, value) {\n            var array = [];\n            for (var i = 0; i < size; ++i) {\n                array[i] = value;\n            }\n            return array;\n        },\n        serializePoints: function (points) {\n            var res = [];\n            for (var i = 0; i < points.length; i++) {\n                var p = points[i];\n                res.push(p.x + \";\" + p.y);\n            }\n            return res.join(\";\");\n        },\n        deserializePoints: function (s) {\n            var v = s.split(\";\"), points = [];\n            if (v.length % 2 !== 0) {\n                throw \"Not an array of points.\";\n            }\n            for (var i = 0; i < v.length; i += 2) {\n                points.push(new diagram.Point(\n                    parseInt(v[i], 10),\n                    parseInt(v[i + 1], 10)\n                ));\n            }\n            return points;\n        },\n        /**\n         * Returns an integer within the given bounds.\n         * @param lower The inclusive lower bound.\n         * @param upper The exclusive upper bound.\n         * @returns {number}\n         */\n        randomInteger: function (lower, upper) {\n            return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n        } ,\n        /*\n         Depth-first traversal of the given node.\n         */\n        DFT: function (el, func) {\n            func(el);\n            if (el.childNodes) {\n                for (var i = 0; i < el.childNodes.length; i++) {\n                    var item = el.childNodes[i];\n                    this.DFT(item, func);\n                }\n            }\n        },\n        /*\n         Returns the angle in degrees for the given matrix\n         */\n        getMatrixAngle: function (m) {\n            if (m === null || m.d === 0) {\n                return 0;\n            }\n            return Math.atan2(m.b, m.d) * 180 / Math.PI;\n        },\n\n        /*\n         Returns the scaling factors for the given matrix.\n         */\n        getMatrixScaling: function (m) {\n            var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n            var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n            return [sX, sY];\n        }\n\n    });\n\n    /**\n     * The Range defines an array of equally separated numbers.\n     * @param start The start-value of the Range.\n     * @param stop The end-value of the Range.\n     * @param step The separation between the values (default:1).\n     * @returns {Array}\n     */\n    function Range(start, stop, step) {\n        if (typeof start == 'undefined' || typeof stop == 'undefined') {\n            return [];\n        }\n        if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n            throw \"The sign of the increment should allow to reach the stop-value.\";\n        }\n        step = step || 1;\n        start = start || 0;\n        stop = stop || start;\n        if ((stop - start) / step === Infinity) {\n            throw \"Infinite range defined.\";\n        }\n        var range = [], i = -1, j;\n\n        function rangeIntegerScale(x) {\n            var k = 1;\n            while (x * k % 1) {\n                k *= 10;\n            }\n            return k;\n        }\n\n        var k = rangeIntegerScale(Math.abs(step));\n        start *= k;\n        stop *= k;\n        step *= k;\n        if (start > stop && step > 0) {\n            step = -step;\n        }\n        if (step < 0) {\n            while ((j = start + step * ++i) >= stop) {\n                range.push(j / k);\n            }\n        }\n        else {\n            while ((j = start + step * ++i) <= stop) {\n                range.push(j / k);\n            }\n        }\n        return range;\n    }\n\n    /*-------------------Diverse math functions----------------------------*/\n\n    function findRadian(start, end) {\n        if (start == end) {\n            return 0;\n        }\n        var sngXComp = end.x - start.x,\n            sngYComp = start.y - end.y,\n            atan = Math.atan(sngXComp / sngYComp);\n        if (sngYComp >= 0) {\n            return sngXComp < 0 ? atan + (2 * Math.PI) : atan;\n        }\n        return atan + Math.PI;\n    }\n\n    Utils.sign = function(number) {\n        return number ? number < 0 ? -1 : 1 : 0;\n    };\n\n    Utils.findAngle = function(center, end) {\n        return findRadian(center, end) * 180 / Math.PI;\n    };\n\n    /*-------------------Array Helpers ----------------------------*/\n\n    Utils.forEach = function(arr, iterator, thisRef) {\n        for (var i = 0; i < arr.length; i++) {\n            iterator.call(thisRef, arr[i], i, arr);\n        }\n    };\n\n    Utils.any = function(arr, predicate) {\n        for (var i = 0; i < arr.length; ++i) {\n            if (predicate(arr[i])) {\n                return arr[i];\n            }\n        }\n        return null;\n    };\n\n    Utils.remove = function (arr, what) {\n        var ax;\n        while ((ax = Utils.indexOf(arr, what)) !== -1) {\n            arr.splice(ax, 1);\n        }\n        return arr;\n    };\n\n    Utils.contains = function (arr, obj) {\n        return Utils.indexOf(arr, obj) !== -1;\n    };\n\n    Utils.indexOf = function(arr, what) {\n        return $.inArray(what, arr);\n    };\n\n    Utils.fold = function (list, iterator, acc, context) {\n        var initial = arguments.length > 2;\n\n        for (var i = 0; i < list.length; i++) {\n            var value = list[i];\n            if (!initial) {\n                acc = value;\n                initial = true;\n            }\n            else {\n                acc = iterator.call(context, acc, value, i, list);\n            }\n        }\n\n        if (!initial) {\n            throw 'Reduce of empty array with no initial value';\n        }\n\n        return acc;\n    };\n\n    Utils.find = function (arr, iterator, context) {\n        var result;\n        Utils.any(arr, function (value, index, list) {\n            if (iterator.call(context, value, index, list)) {\n                result = value;\n                return true;\n            }\n            return false;\n        });\n        return result;\n    };\n\n    Utils.first = function (arr, constraint, context) {\n        if (arr.length === 0) {\n            return null;\n        }\n        if (Utils.isUndefined(constraint)) {\n            return arr[0];\n        }\n\n        return Utils.find(arr, constraint, context);\n    };\n\n    /**\n     * Inserts the given element at the specified position and returns the result.\n     */\n    Utils.insert = function (arr, element, position) {\n        arr.splice(position, 0, element);\n        return arr;\n    };\n\n    Utils.all = function (arr, iterator, context) {\n        var result = true;\n        var value;\n\n        for (var i = 0; i < arr.length; i++) {\n            value = arr[i];\n            result = result && iterator.call(context, value, i, arr);\n\n            if (!result) {\n                break;\n            }\n        }\n\n        return result;\n    };\n\n    Utils.clear = function (arr) {\n        arr.splice(0, arr.length);\n    };\n\n    /**\n     * Sort the arrays on the basis of the first one (considered as keys and the other array as values).\n     * @param a\n     * @param b\n     * @param sortfunc (optiona) sorting function for the values in the first array\n     */\n    Utils.bisort = function (a, b, sortfunc) {\n        if (Utils.isUndefined(a)) {\n            throw \"First array is not specified.\";\n        }\n        if (Utils.isUndefined(b)) {\n            throw \"Second array is not specified.\";\n        }\n        if (a.length != b.length) {\n            throw \"The two arrays should have equal length\";\n        }\n\n        var all = [], i;\n\n        for (i = 0; i < a.length; i++) {\n            all.push({ 'x': a[i], 'y': b[i] });\n        }\n        if (Utils.isUndefined(sortfunc)) {\n            all.sort(function (m, n) {\n                return m.x - n.x;\n            });\n        }\n        else {\n            all.sort(function (m, n) {\n                return sortfunc(m.x, n.x);\n            });\n        }\n\n        Utils.clear(a);\n        Utils.clear(b);\n\n        for (i = 0; i < all.length; i++) {\n            a.push(all[i].x);\n            b.push(all[i].y);\n        }\n    };\n\n    Utils.addRange = function (arr, range) {\n        arr.push.apply(arr, range);\n    };\n\n    var Easing = {\n        easeInOut: function (pos) {\n            return ((-Math.cos(pos * Math.PI) / 2) + 0.5);\n        }\n    };\n\n    /**\n     * An animation ticker driving an adapter which sets a particular\n     * property in function of the tick.\n     * @type {*}\n     */\n    var Ticker = kendo.Class.extend({\n        init: function () {\n            this.adapters = [];\n            this.target = 0;\n            this.tick = 0;\n            this.interval = 20;\n            this.duration = 800;\n            this.lastTime = null;\n            this.handlers = [];\n            var _this = this;\n            this.transition = Easing.easeInOut;\n            this.timerDelegate = function () {\n                _this.onTimerEvent();\n            };\n        },\n        addAdapter: function (a) {\n            this.adapters.push(a);\n        },\n        onComplete: function (handler) {\n            this.handlers.push(handler);\n        },\n        removeHandler: function (handler) {\n            this.handlers = $.grep(this.handlers, function (h) {\n                return h !== handler;\n            });\n        },\n        trigger: function () {\n            var _this = this;\n            if (this.handlers) {\n                Utils.forEach(this.handlers, function (h) {\n                    return h.call(_this.caller !== null ? _this.caller : _this);\n                });\n            }\n        },\n        onStep: function () {\n        },\n        seekTo: function (to) {\n            this.seekFromTo(this.tick, to);\n        },\n        seekFromTo: function (from, to) {\n            this.target = Math.max(0, Math.min(1, to));\n            this.tick = Math.max(0, Math.min(1, from));\n            this.lastTime = new Date().getTime();\n            if (!this.intervalId) {\n                this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n            }\n        },\n        stop: function () {\n            if (this.intervalId) {\n                window.clearInterval(this.intervalId);\n                this.intervalId = null;\n\n                //this.trigger.call(this);\n                this.trigger();\n                // this.next();\n            }\n        },\n        play: function (origin) {\n            if (this.adapters.length === 0) {\n                return;\n            }\n            if (origin !== null) {\n                this.caller = origin;\n            }\n            this.initState();\n            this.seekFromTo(0, 1);\n        },\n        reverse: function () {\n            this.seekFromTo(1, 0);\n        },\n        initState: function () {\n            if (this.adapters.length === 0) {\n                return;\n            }\n            for (var i = 0; i < this.adapters.length; i++) {\n                this.adapters[i].initState();\n            }\n        },\n        propagate: function () {\n            var value = this.transition(this.tick);\n\n            for (var i = 0; i < this.adapters.length; i++) {\n                this.adapters[i].update(value);\n            }\n        },\n        onTimerEvent: function () {\n            var now = new Date().getTime();\n            var timePassed = now - this.lastTime;\n            this.lastTime = now;\n            var movement = (timePassed / this.duration) * (this.tick < this.target ? 1 : -1);\n            if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n                this.tick = this.target;\n            } else {\n                this.tick += movement;\n            }\n\n            try {\n                this.propagate();\n            } finally {\n                this.onStep.call(this);\n                if (this.target == this.tick) {\n                    this.stop();\n                }\n            }\n        }\n    });\n\n    kendo.deepExtend(diagram, {\n        init: function (element) {\n            kendo.init(element, diagram.ui);\n        },\n\n        Utils: Utils,\n        Range: Range,\n        Ticker: Ticker\n    });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var kendo = window.kendo,\n        diagram = kendo.dataviz.diagram,\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n        dataviz = kendo.dataviz,\n        Utils = diagram.Utils,\n        Point = dataviz.Point2D,\n        isFunction = kendo.isFunction,\n        contains = Utils.contains,\n        map = $.map;\n\n    // Constants ==============================================================\n    var HITTESTAREA = 3,\n        EPSILON = 1e-06;\n\n    deepExtend(Point.fn, {\n        plus: function (p) {\n            return new Point(this.x + p.x, this.y + p.y);\n        },\n        minus: function (p) {\n            return new Point(this.x - p.x, this.y - p.y);\n        },\n        offset: function (value) {\n            return new Point(this.x - value, this.y - value);\n        },\n        times: function (s) {\n            return new Point(this.x * s, this.y * s);\n        },\n        normalize: function () {\n            if (this.length() === 0) {\n                return new Point();\n            }\n            return this.times(1 / this.length());\n        },\n        length: function () {\n            return Math.sqrt(this.x * this.x + this.y * this.y);\n        },\n        toString: function () {\n            return \"(\" + this.x + \",\" + this.y + \")\";\n        },\n        lengthSquared: function () {\n            return (this.x * this.x + this.y * this.y);\n        },\n        middleOf: function MiddleOf(p, q) {\n            return new Point(q.x - p.x, q.y - p.y).times(0.5).plus(p);\n        },\n        toPolar: function (useDegrees) {\n            var factor = 1;\n            if (useDegrees) {\n                factor = 180 / Math.PI;\n            }\n            var a = Math.atan2(Math.abs(this.y), Math.abs(this.x));\n            var halfpi = Math.PI / 2;\n            var len = this.length();\n            if (this.x === 0) {\n                // note that the angle goes down and not the usual mathematical convention\n\n                if (this.y === 0) {\n                    return new Polar(0, 0);\n                }\n                if (this.y > 0) {\n                    return new Polar(len, factor * halfpi);\n                }\n                if (this.y < 0) {\n                    return new Polar(len, factor * 3 * halfpi);\n                }\n            }\n            else if (this.x > 0) {\n                if (this.y === 0) {\n                    return new Polar(len, 0);\n                }\n                if (this.y > 0) {\n                    return new Polar(len, factor * a);\n                }\n                if (this.y < 0) {\n                    return new Polar(len, factor * (4 * halfpi - a));\n                }\n            }\n            else {\n                if (this.y === 0) {\n                    return new Polar(len, 2 * halfpi);\n                }\n                if (this.y > 0) {\n                    return new Polar(len, factor * (2 * halfpi - a));\n                }\n                if (this.y < 0) {\n                    return new Polar(len, factor * (2 * halfpi + a));\n                }\n            }\n        },\n        isOnLine: function (from, to) {\n            if (from.x > to.x) { // from must be the leftmost point\n                var temp = to;\n                to = from;\n                from = temp;\n            }\n            var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA),\n                r2 = new Rect(to.x, to.y).inflate(HITTESTAREA, HITTESTAREA), o1, u1;\n            if (r1.union(r2).contains(this)) {\n                if (from.x === to.x || from.y === to.y) {\n                    return true;\n                }\n                else if (from.y < to.y) {\n                    o1 = r1.x + (((r2.x - r1.x) * (this.y - (r1.y + r1.height))) / ((r2.y + r2.height) - (r1.y + r1.height)));\n                    u1 = (r1.x + r1.width) + ((((r2.x + r2.width) - (r1.x + r1.width)) * (this.y - r1.y)) / (r2.y - r1.y));\n                }\n                else {\n                    o1 = r1.x + (((r2.x - r1.x) * (this.y - r1.y)) / (r2.y - r1.y));\n                    u1 = (r1.x + r1.width) + ((((r2.x + r2.width) - (r1.x + r1.width)) * (this.y - (r1.y + r1.height))) / ((r2.y + r2.height) - (r1.y + r1.height)));\n                }\n                return (this.x > o1 && this.x < u1);\n            }\n            return false;\n        }\n    });\n\n    deepExtend(Point, {\n        parse: function (str) {\n            var tempStr = str.slice(1, str.length - 1),\n                xy = tempStr.split(\",\"),\n                x = parseInt(xy[0], 10),\n                y = parseInt(xy[1], 10);\n            if (!isNaN(x) && !isNaN(y)) {\n                return new Point(x, y);\n            }\n        }\n    });\n\n    /**\n     * Structure combining a Point with two additional points representing the handles or tangents attached to the first point.\n     * If the additional points are null or equal to the first point the path will be sharp.\n     * Left and right correspond to the direction of the underlying path.\n     */\n    var PathDefiner = Class.extend(\n        {\n            init: function (p, left, right) {\n                this.point = p;\n                this.left = left;\n                this.right = right;\n            }\n        }\n    );\n\n    /**\n     * Defines a rectangular region.\n     */\n    var Rect = Class.extend({\n        init: function (x, y, width, height) {\n            this.x = x || 0;\n            this.y = y || 0;\n            this.width = width || 0;\n            this.height = height || 0;\n        },\n        contains: function (point) {\n            return ((point.x >= this.x) && (point.x <= (this.x + this.width)) && (point.y >= this.y) && (point.y <= (this.y + this.height)));\n        },\n        inflate: function (dx, dy) {\n            if (dy === undefined) {\n                dy = dx;\n            }\n\n            this.x -= dx;\n            this.y -= dy;\n            this.width += 2 * dx + 1;\n            this.height += 2 * dy + 1;\n            return this;\n        },\n        offset: function (dx, dy) {\n            var x = dx, y = dy;\n            if (dx instanceof Point) {\n                x = dx.x;\n                y = dx.y;\n            }\n            this.x += x;\n            this.y += y;\n            return this;\n        },\n        union: function (r) {\n            var x1 = Math.min(this.x, r.x);\n            var y1 = Math.min(this.y, r.y);\n            var x2 = Math.max((this.x + this.width), (r.x + r.width));\n            var y2 = Math.max((this.y + this.height), (r.y + r.height));\n            return new Rect(x1, y1, x2 - x1, y2 - y1);\n        },\n        center: function () {\n            return new Point(this.x + this.width / 2, this.y + this.height / 2);\n        },\n        top: function () {\n            return new Point(this.x + this.width / 2, this.y);\n        },\n        right: function () {\n            return new Point(this.x + this.width, this.y + this.height / 2);\n        },\n        bottom: function () {\n            return new Point(this.x + this.width / 2, this.y + this.height);\n        },\n        left: function () {\n            return new Point(this.x, this.y + this.height / 2);\n        },\n        topLeft: function () {\n            return new Point(this.x, this.y);\n        },\n        topRight: function () {\n            return new Point(this.x + this.width, this.y);\n        },\n        bottomLeft: function () {\n            return new Point(this.x, this.y + this.height);\n        },\n        bottomRight: function () {\n            return new Point(this.x + this.width, this.y + this.height);\n        },\n        clone: function () {\n            return new Rect(this.x, this.y, this.width, this.height);\n        },\n        isEmpty: function () {\n            return !this.width && !this.height;\n        },\n        equals: function (rect) {\n            return this.x === rect.x && this.y === rect.y && this.width === rect.width && this.height === rect.height;\n        },\n        rotatedBounds: function (angle) {\n            var rect = this.clone(),\n                points = this.rotatedPoints(angle),\n                tl = points[0],\n                tr = points[1],\n                br = points[2],\n                bl = points[3];\n\n            rect.x = Math.min(br.x, tl.x, tr.x, bl.x);\n            rect.y = Math.min(br.y, tl.y, tr.y, bl.y);\n            rect.width = Math.max(br.x, tl.x, tr.x, bl.x) - rect.x;\n            rect.height = Math.max(br.y, tl.y, tr.y, bl.y) - rect.y;\n\n            return rect;\n        },\n        rotatedPoints: function (angle) {\n            var rect = this,\n                c = rect.center(),\n                br = rect.bottomRight().rotate(c, 360 - angle),\n                tl = rect.topLeft().rotate(c, 360 - angle),\n                tr = rect.topRight().rotate(c, 360 - angle),\n                bl = rect.bottomLeft().rotate(c, 360 - angle);\n\n            return [tl, tr, br, bl];\n        },\n        toString: function (delimiter) {\n            delimiter = delimiter || \" \";\n\n            return this.x + delimiter + this.y + delimiter + this.width + delimiter + this.height;\n        },\n        scale: function (scaleX, scaleY, staicPoint, adornerCenter, angle) {\n            var tl = this.topLeft();\n            var thisCenter = this.center();\n            tl.rotate(thisCenter, 360 - angle).rotate(adornerCenter, angle);\n\n            var delta = staicPoint.minus(tl);\n            var scaled = new Point(delta.x * scaleX, delta.y * scaleY);\n            var position = delta.minus(scaled);\n            tl = tl.plus(position);\n            tl.rotate(adornerCenter, 360 - angle).rotate(thisCenter, angle);\n\n            this.x = tl.x;\n            this.y = tl.y;\n\n            this.width *= scaleX;\n            this.height *= scaleY;\n        },\n\n        zoom: function(zoom) {\n            this.x *= zoom;\n            this.y *= zoom;\n            this.width *= zoom;\n            this.height *= zoom;\n            return this;\n        }\n    });\n\n    var Size = Class.extend({\n        init: function (width, height) {\n            this.width = width;\n            this.height = height;\n        }\n    });\n\n    Size.prototype.Empty = new Size(0, 0);\n\n    Rect.toRect = function (rect) {\n        if (!(rect instanceof Rect)) {\n            rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n        }\n\n        return rect;\n    };\n\n    Rect.empty = function () {\n        return new Rect(0, 0, 0, 0);\n    };\n\n    Rect.fromPoints = function (p, q) {\n        if (isNaN(p.x) || isNaN(p.y) || isNaN(q.x) || isNaN(q.y)) {\n            throw \"Some values are NaN.\";\n        }\n        return new Rect(Math.min(p.x, q.x), Math.min(p.y, q.y), Math.abs(p.x - q.x), Math.abs(p.y - q.y));\n    };\n\n    function isNearZero(num) {\n        return Math.abs(num) < EPSILON;\n    }\n\n    function intersectLine(start1, end1, start2, end2, isSegment) {\n        var tangensdiff = ((end1.x - start1.x) * (end2.y - start2.y)) - ((end1.y - start1.y) * (end2.x - start2.x));\n        if (isNearZero(tangensdiff)) {\n            //parallel lines\n            return;\n        }\n\n        var num1 = ((start1.y - start2.y) * (end2.x - start2.x)) - ((start1.x - start2.x) * (end2.y - start2.y));\n        var num2 = ((start1.y - start2.y) * (end1.x - start1.x)) - ((start1.x - start2.x) * (end1.y - start1.y));\n        var r = num1 / tangensdiff;\n        var s = num2 / tangensdiff;\n\n        if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n            //r < 0 => line 1 is below line 2\n            //r > 1 => line 1 is above line 2\n            //s < 0 => line 2 is below line 1\n            //s > 1 => line 2 is above line 1\n            return;\n        }\n\n        return new Point(start1.x + (r * (end1.x - start1.x)), start1.y + (r * (end1.y - start1.y)));\n    }\n\n    var Intersect = {\n        lines: function (start1, end1, start2, end2) {\n            return intersectLine(start1, end1, start2, end2);\n        },\n        segments: function (start1, end1, start2, end2) {\n            return intersectLine(start1, end1, start2, end2, true);\n        },\n        rectWithLine: function (rect, start, end) {\n            return  Intersect.segments(start, end, rect.topLeft(), rect.topRight()) ||\n                Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) ||\n                Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) ||\n                Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n        },\n        rects: function (rect1, rect2, angle) {\n            var tl = rect2.topLeft(),\n                tr = rect2.topRight(),\n                bl = rect2.bottomLeft(),\n                br = rect2.bottomRight();\n            var center = rect2.center();\n            if (angle) {\n                tl = tl.rotate(center, angle);\n                tr = tr.rotate(center, angle);\n                bl = bl.rotate(center, angle);\n                br = br.rotate(center, angle);\n            }\n\n            var intersect = rect1.contains(tl) ||\n                rect1.contains(tr) ||\n                rect1.contains(bl) ||\n                rect1.contains(br) ||\n                Intersect.rectWithLine(rect1, tl, tr) ||\n                Intersect.rectWithLine(rect1, tl, bl) ||\n                Intersect.rectWithLine(rect1, tr, br) ||\n                Intersect.rectWithLine(rect1, bl, br);\n\n            if (!intersect) {//last possible case is rect1 to be completely within rect2\n                tl = rect1.topLeft();\n                tr = rect1.topRight();\n                bl = rect1.bottomLeft();\n                br = rect1.bottomRight();\n\n                if (angle) {\n                    var reverseAngle = 360 - angle;\n                    tl = tl.rotate(center, reverseAngle);\n                    tr = tr.rotate(center, reverseAngle);\n                    bl = bl.rotate(center, reverseAngle);\n                    br = br.rotate(center, reverseAngle);\n                }\n\n                intersect = rect2.contains(tl) ||\n                    rect2.contains(tr) ||\n                    rect2.contains(bl) ||\n                    rect2.contains(br);\n            }\n\n            return intersect;\n        }\n    };\n\n    /**\n     * Aligns two rectangles, where one is the container and the other is content.\n     */\n    var RectAlign = Class.extend({\n        init: function (container) {\n            this.container = Rect.toRect(container);\n        },\n\n        align: function (content, alignment) {\n            var alignValues = alignment.toLowerCase().split(\" \");\n\n            for (var i = 0; i < alignValues.length; i++) {\n                content = this._singleAlign(content, alignValues[i]);\n            }\n\n            return content;\n        },\n        _singleAlign: function (content, alignment) {\n            if (isFunction(this[alignment])) {\n                return this[alignment](content);\n            }\n            else {\n                return content;\n            }\n        },\n\n        left: function (content) {\n            return this._align(content, this._left);\n        },\n        center: function (content) {\n            return this._align(content, this._center);\n        },\n        right: function (content) {\n            return this._align(content, this._right);\n        },\n        stretch: function (content) {\n            return this._align(content, this._stretch);\n        },\n        top: function (content) {\n            return this._align(content, this._top);\n        },\n        middle: function (content) {\n            return this._align(content, this._middle);\n        },\n        bottom: function (content) {\n            return this._align(content, this._bottom);\n        },\n\n        _left: function (container, content) {\n            content.x = container.x;\n        },\n        _center: function (container, content) {\n            content.x = ((container.width - content.width) / 2) || 0;\n        },\n        _right: function (container, content) {\n            content.x = container.width - content.width;\n        },\n        _top: function (container, content) {\n            content.y = container.y;\n        },\n        _middle: function (container, content) {\n            content.y = ((container.height - content.height) / 2) || 0;\n        },\n        _bottom: function (container, content) {\n            content.y = container.height - content.height;\n        },\n        _stretch: function (container, content) {\n            content.x = 0;\n            content.y = 0;\n            content.height = container.height;\n            content.width = container.width;\n        },\n        _align: function (content, alignCalc) {\n            content = Rect.toRect(content);\n            alignCalc(this.container, content);\n\n            return content;\n        }\n    });\n\n    var Polar = Class.extend({\n        init: function (r, a) {\n            this.r = r;\n            this.angle = a;\n        }\n    });\n\n    /**\n     * SVG transformation matrix.\n     */\n    var Matrix = Class.extend({\n        init: function (a, b, c, d, e, f) {\n            this.a = a || 0;\n            this.b = b || 0;\n            this.c = c || 0;\n            this.d = d || 0;\n            this.e = e || 0;\n            this.f = f || 0;\n        },\n        plus: function (m) {\n            this.a += m.a;\n            this.b += m.b;\n            this.c += m.c;\n            this.d += m.d;\n            this.e += m.e;\n            this.f += m.f;\n        },\n        minus: function (m) {\n            this.a -= m.a;\n            this.b -= m.b;\n            this.c -= m.c;\n            this.d -= m.d;\n            this.e -= m.e;\n            this.f -= m.f;\n        },\n        times: function (m) {\n            return new Matrix(\n                this.a * m.a + this.c * m.b,\n                this.b * m.a + this.d * m.b,\n                this.a * m.c + this.c * m.d,\n                this.b * m.c + this.d * m.d,\n                this.a * m.e + this.c * m.f + this.e,\n                this.b * m.e + this.d * m.f + this.f\n            );\n        },\n        apply: function (p) {\n            return new Point(this.a * p.x + this.c * p.y + this.e, this.b * p.x + this.d * p.y + this.f);\n        },\n        applyRect: function (r) {\n            return Rect.fromPoints(this.apply(r.topLeft()), this.apply(r.bottomRight()));\n        },\n        toString: function () {\n            return \"matrix(\" + this.a + \" \" + this.b + \" \" + this.c + \" \" + this.d + \" \" + this.e + \" \" + this.f + \")\";\n        }\n    });\n\n    deepExtend(Matrix, {\n        fromSVGMatrix: function (vm) {\n            var m = new Matrix();\n            m.a = vm.a;\n            m.b = vm.b;\n            m.c = vm.c;\n            m.d = vm.d;\n            m.e = vm.e;\n            m.f = vm.f;\n            return m;\n        },\n        fromMatrixVector: function (v) {\n            var m = new Matrix();\n            m.a = v.a;\n            m.b = v.b;\n            m.c = v.c;\n            m.d = v.d;\n            m.e = v.e;\n            m.f = v.f;\n            return m;\n        },\n        fromList: function (v) {\n            if (v.length !== 6) {\n                throw \"The given list should consist of six elements.\";\n            }\n            var m = new Matrix();\n            m.a = v[0];\n            m.b = v[1];\n            m.c = v[2];\n            m.d = v[3];\n            m.e = v[4];\n            m.f = v[5];\n            return m;\n        },\n        translation: function (x, y) {\n            var m = new Matrix();\n            m.a = 1;\n            m.b = 0;\n            m.c = 0;\n            m.d = 1;\n            m.e = x;\n            m.f = y;\n            return m;\n        },\n        unit: function () {\n            return new Matrix(1, 0, 0, 1, 0, 0);\n        },\n        rotation: function (angle, x, y) {\n            var m = new Matrix();\n            m.a = Math.cos(angle * Math.PI / 180);\n            m.b = Math.sin(angle * Math.PI / 180);\n            m.c = -m.b;\n            m.d = m.a;\n            m.e = (x - x * m.a + y * m.b) || 0;\n            m.f = (y - y * m.a - x * m.b) || 0;\n            return m;\n        },\n        scaling: function (scaleX, scaleY) {\n            var m = new Matrix();\n            m.a = scaleX;\n            m.b = 0;\n            m.c = 0;\n            m.d = scaleY;\n            m.e = 0;\n            m.f = 0;\n            return m;\n        },\n        parse: function (v) {\n            var parts, nums;\n            if (v) {\n                v = v.trim();\n                // of the form \"matrix(...)\"\n                if (v.slice(0, 6).toLowerCase() === \"matrix\") {\n                    nums = v.slice(7, v.length - 1).trim();\n                    parts = nums.split(\",\");\n                    if (parts.length === 6) {\n                        return Matrix.fromList(map(parts, function (p) {\n                            return parseFloat(p);\n                        }));\n                    }\n                    parts = nums.split(\" \");\n                    if (parts.length === 6) {\n                        return Matrix.fromList(map(parts, function (p) {\n                            return parseFloat(p);\n                        }));\n                    }\n                }\n                // of the form \"(...)\"\n                if (v.slice(0, 1) === \"(\" && v.slice(v.length - 1) === \")\") {\n                    v = v.substr(1, v.length - 1);\n                }\n                if (v.indexOf(\",\") > 0) {\n                    parts = v.split(\",\");\n                    if (parts.length === 6) {\n                        return Matrix.fromList(map(parts, function (p) {\n                            return parseFloat(p);\n                        }));\n                    }\n                }\n                if (v.indexOf(\" \") > 0) {\n                    parts = v.split(\" \");\n                    if (parts.length === 6) {\n                        return Matrix.fromList(map(parts, function (p) {\n                            return parseFloat(p);\n                        }));\n                    }\n                }\n            }\n            return parts;\n        }\n    });\n\n    /**\n     * SVG transformation represented as a vector.\n     */\n    var MatrixVector = Class.extend({\n        init: function (a, b, c, d, e, f) {\n            this.a = a || 0;\n            this.b = b || 0;\n            this.c = c || 0;\n            this.d = d || 0;\n            this.e = e || 0;\n            this.f = f || 0;\n        },\n        fromMatrix: function FromMatrix(m) {\n            var v = new MatrixVector();\n            v.a = m.a;\n            v.b = m.b;\n            v.c = m.c;\n            v.d = m.d;\n            v.e = m.e;\n            v.f = m.f;\n            return v;\n        }\n    });\n\n    /**\n     * Returns a value with Gaussian (normal) distribution.\n     * @param mean The mean value of the distribution.\n     * @param deviation The deviation (spreading at half-height) of the distribution.\n     * @returns {number}\n     */\n    function normalVariable(mean, deviation) {\n        var x, y, r;\n        do {\n            x = Math.random() * 2 - 1;\n            y = Math.random() * 2 - 1;\n            r = x * x + y * y;\n        }\n        while (!r || r > 1);\n        return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n    }\n\n    /**\n     * Returns a random identifier which can be used as an ID of objects, eventually augmented with a prefix.\n     * @returns {string}\n     */\n    function randomId(length) {\n        if (Utils.isUndefined(length)) {\n            length = 10;\n        }\n        // old version return Math.floor((1 + Math.random()) * 0x1000000).toString(16).substring(1);\n        var result = '';\n        var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n        for (var i = length; i > 0; --i) {\n            result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n        }\n        return result;\n    }\n\n    var Geometry = {\n\n        /**\n         * Returns the squared distance to the line defined by the two given Points.\n         * @param p An arbitrary Point.\n         * @param a An endpoint of the line or segment.\n         * @param b The complementary endpoint of the line or segment.\n         */\n        _distanceToLineSquared: function (p, a, b) {\n            function d2(pt1, pt2) {\n                return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y);\n            }\n\n            if (a === b) { // returns the distance of p to a\n                return d2(p, a);\n            }\n\n            var vx = b.x - a.x,\n                vy = b.y - a.y,\n                dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n            if (dot < 0) {\n                return d2(a, p); // sits on side of a\n            }\n\n            dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n            if (dot < 0) {\n                return d2(b, p); // sits on side of b\n            }\n            // regular case, use crossproduct to get the sine out\n            dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n            return dot * dot / (vx * vx + vy * vy);\n        },\n\n        /**\n         * Returns the distance to the line defined by the two given Points.\n         * @param p An arbitrary Point.\n         * @param a An endpoint of the line or segment.\n         * @param b The complementary endpoint of the line or segment.\n         */\n        distanceToLine: function (p, a, b) {\n            return Math.sqrt(this._distanceToLineSquared(p, a, b));\n        },\n\n        /**\n         * Returns the distance of the given points to the polyline defined by the points.\n         * @param p An arbitrary point.\n         * @param points The points defining the polyline.\n         * @returns {Number}\n         */\n        distanceToPolyline: function (p, points) {\n            var minimum = Number.MAX_VALUE;\n            if (Utils.isUndefined(points) || points.length === 0) {\n                return Number.MAX_VALUE;\n            }\n            for (var s = 0; s < points.length - 1; s++) {\n                var p1 = points[s];\n                var p2 = points[s + 1];\n\n                var d = this._distanceToLineSquared(p, p1, p2);\n                if (d < minimum) {\n                    minimum = d;\n                }\n            }\n            return Math.sqrt(minimum);\n        }\n    };\n\n    /*---------------The HashTable structure--------------------------------*/\n\n    /**\n     * Represents a collection of key-value pairs that are organized based on the hash code of the key.\n     * _buckets[hashId] = {key: key, value:...}\n     * Important: do not use the standard Array access method, use the get/set methods instead.\n     * See http://en.wikipedia.org/wiki/Hash_table\n     */\n    var HashTable = kendo.Class.extend({\n        init: function () {\n            this._buckets = [];\n            this.length = 0;\n        },\n\n        /**\n         * Adds the literal object with the given key (of the form {key: key,....}).\n         */\n        add: function (key, value) {\n\n            var obj = this._createGetBucket(key);\n            if (Utils.isDefined(value)) {\n                obj.value = value;\n            }\n            return obj;\n        },\n\n        /**\n         * Gets the literal object with the given key.\n         */\n        get: function (key) {\n            if (this._bucketExists(key)) {\n                return this._createGetBucket(key);\n            }\n            return null;\n        },\n\n        /**\n         * Set the key-value pair.\n         * @param key The key of the entry.\n         * @param value The value to set. If the key already exists the value will be overwritten.\n         */\n        set: function (key, value) {\n            this.add(key, value);\n        },\n\n        /**\n         * Determines whether the HashTable contains a specific key.\n         */\n        containsKey: function (key) {\n            return this._bucketExists(key);\n        },\n\n        /**\n         * Removes the element with the specified key from the hashtable.\n         * Returns the removed bucket.\n         */\n        remove: function (key) {\n            if (this._bucketExists(key)) {\n                var hashId = this._hash(key);\n                delete this._buckets[hashId];\n                this.length--;\n                return key;\n            }\n        },\n\n        /**\n         * Foreach with an iterator working on the key-value pairs.\n         * @param func\n         */\n        forEach: function (func) {\n            var hashes = this._hashes();\n            for (var i = 0, len = hashes.length; i < len; i++) {\n                var hash = hashes[i];\n                var bucket = this._buckets[hash];\n                if (Utils.isUndefined(bucket)) {\n                    continue;\n                }\n                func(bucket);\n            }\n        },\n\n        /**\n         * Returns a (shallow) clone of the current HashTable.\n         * @returns {HashTable}\n         */\n        clone: function () {\n            var ht = new HashTable();\n            var hashes = this._hashes();\n            for (var i = 0, len = hashes.length; i < len; i++) {\n                var hash = hashes[i];\n                var bucket = this._buckets[hash];\n                if (Utils.isUndefined(bucket)) {\n                    continue;\n                }\n                ht.add(bucket.key, bucket.value);\n            }\n            return ht;\n        },\n\n        /**\n         * Returns the hashes of the buckets.\n         * @returns {Array}\n         * @private\n         */\n        _hashes: function () {\n            var hashes = [];\n            for (var hash in this._buckets) {\n                if (this._buckets.hasOwnProperty(hash)) {\n                    hashes.push(hash);\n                }\n            }\n            return hashes;\n        },\n\n        _bucketExists: function (key) {\n            var hashId = this._hash(key);\n            return Utils.isDefined(this._buckets[hashId]);\n        },\n\n        /**\n         * Returns-adds the createGetBucket with the given key. If not present it will\n         * be created and returned.\n         * A createGetBucket is a literal object of the form {key: key, ...}.\n         */\n        _createGetBucket: function (key) {\n            var hashId = this._hash(key);\n            var bucket = this._buckets[hashId];\n            if (Utils.isUndefined(bucket)) {\n                bucket = { key: key };\n                this._buckets[hashId] = bucket;\n                this.length++;\n            }\n            return bucket;\n        },\n\n        /**\n         * Hashing of the given key.\n         */\n        _hash: function (key) {\n            if (Utils.isNumber(key)) {\n                return key;\n            }\n            if (Utils.isString(key)) {\n                return this._hashString(key);\n            }\n            if (Utils.isObject(key)) {\n                return this._objectHashId(key);\n            }\n            throw \"Unsupported key type.\";\n        },\n\n        /**\n         * Hashing of a string.\n         */\n        _hashString: function (s) {\n            // see for example http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\n            var result = 0;\n            if (s.length === 0) {\n                return result;\n            }\n            for (var i = 0; i < s.length; i++) {\n                var ch = s.charCodeAt(i);\n                result = ((result * 32) - result) + ch;\n            }\n            return result;\n        },\n\n        /**\n         * Returns the unique identifier for an object. This is automatically assigned and add on the object.\n         */\n        _objectHashId: function (key) {\n            var id = key._hashId;\n            if (Utils.isUndefined(id)) {\n                id = randomId();\n                key._hashId = id;\n            }\n            return id;\n        }\n    });\n\n    /*---------------The Dictionary structure--------------------------------*/\n\n    /**\n     * Represents a collection of key-value pairs.\n     * Important: do not use the standard Array access method, use the get/Set methods instead.\n     */\n    var Dictionary = kendo.Observable.extend({\n        /**\n         * Initializes a new instance of the Dictionary class.\n         * @param dictionary Loads the content of the given dictionary into this new one.\n         */\n        init: function (dictionary) {\n            var that = this;\n            kendo.Observable.fn.init.call(that);\n            this._hashTable = new HashTable();\n            this.length = 0;\n            if (Utils.isDefined(dictionary)) {\n                if ($.isArray(dictionary)) {\n                    for (var i = 0; i < dictionary.length; i++) {\n                        this.add(dictionary[i]);\n                    }\n                } else {\n                    dictionary.forEach(function (k, v) {\n                        this.add(k, v);\n                    }, this);\n                }\n            }\n        },\n\n        /**\n         * Adds a key-value to the dictionary.\n         * If the key already exists this will assign the given value to the existing entry.\n         */\n        add: function (key, value) {\n            var entry = this._hashTable.get(key);\n            if (!entry) {\n                entry = this._hashTable.add(key);\n                this.length++;\n                this.trigger('changed');\n            }\n            entry.value = value;\n        },\n\n        /**\n         * Set the key-value pair.\n         * @param key The key of the entry.\n         * @param value The value to set. If the key already exists the value will be overwritten.\n         */\n        set: function (key, value) {\n            this.add(key, value);\n        },\n\n        /**\n         * Gets the value associated with the given key in the dictionary.\n         */\n        get: function (key) {\n            var entry = this._hashTable.get(key);\n            if (entry) {\n                return entry.value;\n            }\n            throw new Error(\"Cannot find key \" + key);\n        },\n\n        /**\n         * Returns whether the dictionary contains the given key.\n         */\n        containsKey: function (key) {\n            return this._hashTable.containsKey(key);\n        },\n\n        /**\n         * Removes the element with the specified key from the dictionary.\n         */\n        remove: function (key) {\n            if (this.containsKey(key)) {\n                this.trigger(\"changed\");\n                this.length--;\n                return this._hashTable.remove(key);\n            }\n        },\n\n        /**\n         * The functional gets the key and value as parameters.\n         */\n        forEach: function (func, thisRef) {\n            this._hashTable.forEach(function (entry) {\n                func.call(thisRef, entry.key, entry.value);\n            });\n        },\n\n        /**\n         * Same as forEach except that only the value is passed to the functional.\n         */\n        forEachValue: function (func, thisRef) {\n            this._hashTable.forEach(function (entry) {\n                func.call(thisRef, entry.value);\n            });\n        },\n\n        /**\n         * Calls a defined callback function for each key in the dictionary.\n         */\n        forEachKey: function (func, thisRef) {\n            this._hashTable.forEach(function (entry) {\n                func.call(thisRef, entry.key);\n            });\n        },\n\n        /**\n         * Gets an array with all keys in the dictionary.\n         */\n        keys: function () {\n            var keys = [];\n            this.forEachKey(function (key) {\n                keys.push(key);\n            });\n            return keys;\n        }\n    });\n\n    /*---------------Queue structure--------------------------------*/\n\n    var Queue = kendo.Class.extend({\n\n        init: function () {\n            this._tail = null;\n            this._head = null;\n            this.length = 0;\n        },\n\n        /**\n         * Enqueues an object to the end of the queue.\n         */\n        enqueue: function (value) {\n            var entry = { value: value, next: null };\n            if (!this._head) {\n                this._head = entry;\n                this._tail = this._head;\n            }\n            else {\n                this._tail.next = entry;\n                this._tail = this._tail.next;\n            }\n            this.length++;\n        },\n\n        /**\n         * Removes and returns the object at top of the queue.\n         */\n        dequeue: function () {\n            if (this.length < 1) {\n                throw new Error(\"The queue is empty.\");\n            }\n            var value = this._head.value;\n            this._head = this._head.next;\n            this.length--;\n            return value;\n        },\n\n        contains: function (item) {\n            var current = this._head;\n            while (current) {\n                if (current.value === item) {\n                    return true;\n                }\n                current = current.next;\n            }\n            return false;\n        }\n    });\n\n\n    /**\n     * While other data structures can have multiple times the same item a Set owns only\n     * once a particular item.\n     * @type {*}\n     */\n    var Set = kendo.Observable.extend({\n        init: function (resource) {\n            var that = this;\n            kendo.Observable.fn.init.call(that);\n            this._hashTable = new HashTable();\n            this.length = 0;\n            if (Utils.isDefined(resource)) {\n                if (resource instanceof HashTable) {\n                    resource.forEach(function (d) {\n                        this.add(d);\n                    });\n                }\n                else if (resource instanceof Dictionary) {\n                    resource.forEach(function (k, v) {\n                        this.add({key: k, value: v});\n                    }, this);\n                }\n            }\n        },\n\n        contains: function (item) {\n            return this._hashTable.containsKey(item);\n        },\n\n        add: function (item) {\n            var entry = this._hashTable.get(item);\n            if (!entry) {\n                this._hashTable.add(item, item);\n                this.length++;\n                this.trigger('changed');\n            }\n        },\n\n        get: function (item) {\n            if (this.contains(item)) {\n                return this._hashTable.get(item).value;\n            }\n            else {\n                return null;\n            }\n        },\n\n        /**\n         * Returns the hash of the item.\n         * @param item\n         * @returns {*}\n         */\n        hash: function (item) {\n            return this._hashTable._hash(item);\n        },\n\n        /**\n         * Removes the given item from the set. No exception is thrown if the item is not in the Set.\n         * @param item\n         */\n        remove: function (item) {\n            if (this.contains(item)) {\n                this._hashTable.remove(item);\n                this.length--;\n                this.trigger('changed');\n            }\n        },\n        /**\n         * Foreach with an iterator working on the key-value pairs.\n         * @param func\n         */\n        forEach: function (func, context) {\n            this._hashTable.forEach(function (kv) {\n                func(kv.value);\n            }, context);\n        },\n        toArray: function () {\n            var r = [];\n            this.forEach(function (d) {\n                r.push(d);\n            });\n            return r;\n        }\n    });\n\n    /*----------------Node-------------------------------*/\n\n    /**\n     * Defines the node (vertex) of a Graph.\n     */\n    var Node = kendo.Class.extend({\n\n        init: function (id, shape) {\n\n            /**\n             * Holds all the links incident with the current node.\n             * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n             */\n            this.links = [];\n\n            /**\n             * Holds the links from the current one to another Node .\n             * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n             */\n            this.outgoing = [];\n\n            /**\n             * Holds the links from another Node to the current one.\n             * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n             */\n            this.incoming = [];\n\n            /**\n             * Holds the weight of this Node.\n             */\n            this.weight = 1;\n\n            if (Utils.isDefined(id)) {\n                this.id = id;\n            }\n            else {\n                this.id = randomId();\n            }\n            if (Utils.isDefined(shape)) {\n                this.associatedShape = shape;\n                // transfer the shape's bounds to the runtime props\n                var b = shape.bounds();\n                this.width = b.width;\n                this.height = b.height;\n                this.x = b.x;\n                this.y = b.y;\n            }\n            else {\n                this.associatedShape = null;\n            }\n            /**\n             * The payload of the node.\n             * @type {null}\n             */\n            this.data = null;\n            this.type = \"Node\";\n            this.shortForm = \"Node '\" + this.id + \"'\";\n            /**\n             * Whether this is an injected node during the analysis or layout process.\n             * @type {boolean}\n             */\n            this.isVirtual = false;\n        },\n\n        /**\n         * Returns whether this node has no links attached.\n         */\n        isIsolated: function () {\n            return Utils.isEmpty(this.links);\n        },\n\n        /**\n         * Gets or sets the bounding rectangle of this node.\n         * This should be considered as runtime data, the property is not hotlinked to a SVG item.\n         */\n        bounds: function (r) {\n            if (!Utils.isDefined(r)) {\n                return new diagram.Rect(this.x, this.y, this.width, this.height);\n            }\n\n            this.x = r.x;\n            this.y = r.y;\n            this.width = r.width;\n            this.height = r.height;\n        },\n\n        /**\n         * Returns whether there is at least one link with the given (complementary) node. This can be either an\n         * incoming or outgoing link.\n         */\n        isLinkedTo: function (node) {\n            var that = this;\n            return Utils.any(that.links, function (link) {\n                return link.getComplement(that) === node;\n            });\n        },\n\n        /**\n         * Gets the children of this node, defined as the adjacent nodes with a link from this node to the adjacent one.\n         * @returns {Array}\n         */\n        getChildren: function () {\n            if (this.outgoing.length === 0) {\n                return [];\n            }\n            var children = [];\n            for (var i = 0, len = this.outgoing.length; i < len; i++) {\n                var link = this.outgoing[i];\n                children.push(link.getComplement(this));\n            }\n            return children;\n        },\n\n        /**\n         * Gets the parents of this node, defined as the adjacent nodes with a link from the adjacent node to this one.\n         * @returns {Array}\n         */\n        getParents: function () {\n            if (this.incoming.length === 0) {\n                return [];\n            }\n            var parents = [];\n            for (var i = 0, len = this.incoming.length; i < len; i++) {\n                var link = this.incoming[i];\n                parents.push(link.getComplement(this));\n            }\n            return parents;\n        },\n\n        /**\n         * Returns a clone of the Node. Note that the identifier is not cloned since it's a different Node instance.\n         * @returns {Node}\n         */\n        clone: function () {\n            var copy = new Node();\n            if (Utils.isDefined(this.weight)) {\n                copy.weight = this.weight;\n            }\n            if (Utils.isDefined(this.balance)) {\n                copy.balance = this.balance;\n            }\n            if (Utils.isDefined(this.owner)) {\n                copy.owner = this.owner;\n            }\n            copy.associatedShape = this.associatedShape;\n            copy.x = this.x;\n            copy.y = this.y;\n            copy.width = this.width;\n            copy.height = this.height;\n            return copy;\n        },\n\n        /**\n         * Returns whether there is a link from the current node to the given node.\n         */\n        adjacentTo: function (node) {\n            return this.isLinkedTo(node) !== null;\n        },\n\n        /**\n         * Removes the given link from the link collection this node owns.\n         * @param link\n         */\n        removeLink: function (link) {\n            if (link.source === this) {\n                Utils.remove(this.links, link);\n                Utils.remove(this.outgoing, link);\n                link.source = null;\n            }\n\n            if (link.target === this) {\n                Utils.remove(this.links, link);\n                Utils.remove(this.incoming, link);\n                link.target = null;\n            }\n        },\n\n        /**\n         * Returns whether there is a (outgoing) link from the current node to the given one.\n         */\n        hasLinkTo: function (node) {\n            return Utils.any(this.outgoing, function (link) {\n                return link.target === node;\n            });\n        },\n\n        /**\n         * Returns the degree of this node, i.e. the sum of incoming and outgoing links.\n         */\n        degree: function () {\n            return this.links.length;\n        },\n\n        /**\n         * Returns whether this node is either the source or the target of the given link.\n         */\n        incidentWith: function (link) {\n            return contains(this.links, link);\n        },\n\n        /**\n         * Returns the links between this node and the given one.\n         */\n        getLinksWith: function (node) {\n            return Utils.all(this.links, function (link) {\n                return link.getComplement(this) === node;\n            }, this);\n        },\n\n        /**\n         * Returns the nodes (either parent or child) which are linked to the current one.\n         */\n        getNeighbors: function () {\n            var neighbors = [];\n            Utils.forEach(this.incoming, function (e) {\n                neighbors.push(e.getComplement(this));\n            }, this);\n            Utils.forEach(this.outgoing, function (e) {\n                neighbors.push(e.getComplement(this));\n            }, this);\n            return neighbors;\n        }\n    });\n\n    /**\n     * Defines a directed link (edge, connection) of a Graph.\n     */\n    var Link = kendo.Class.extend({\n\n        init: function (source, target, id, connection) {\n            if (Utils.isUndefined(source)) {\n                throw \"The source of the new link is not set.\";\n            }\n            if (Utils.isUndefined(target)) {\n                throw \"The target of the new link is not set.\";\n            }\n            var sourceFound, targetFound;\n            if (Utils.isString(source)) {\n                sourceFound = new Node(source);\n            }\n            else {\n                sourceFound = source;\n            }\n            if (Utils.isString(target)) {\n                targetFound = new Node(target);\n            }\n            else {\n                targetFound = target;\n            }\n\n            this.source = sourceFound;\n            this.target = targetFound;\n            this.source.links.push(this);\n            this.target.links.push(this);\n            this.source.outgoing.push(this);\n            this.target.incoming.push(this);\n            if (Utils.isDefined(id)) {\n                this.id = id;\n            }\n            else {\n                this.id = randomId();\n            }\n            if (Utils.isDefined(connection)) {\n                this.associatedConnection = connection;\n            }\n            else {\n                this.associatedConnection = null;\n            }\n            this.type = \"Link\";\n            this.shortForm = \"Link '\" + this.source.id + \"->\" + this.target.id + \"'\";\n        },\n\n        /**\n         * Returns the complementary node of the given one, if any.\n         */\n        getComplement: function (node) {\n            if (this.source !== node && this.target !== node) {\n                throw \"The given node is not incident with this link.\";\n            }\n            return this.source === node ? this.target : this.source;\n        },\n\n        /**\n         * Returns the overlap of the current link with the given one, if any.\n         */\n        getCommonNode: function (link) {\n            if (this.source === link.source || this.source === link.target) {\n                return this.source;\n            }\n            if (this.target === link.source || this.target === link.target) {\n                return this.target;\n            }\n            return null;\n        },\n\n        /**\n         * Returns whether the current link is bridging the given nodes.\n         */\n        isBridging: function (v1, v2) {\n            return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n        },\n\n        /**\n         * Returns the source and target of this link as a tuple.\n         */\n        getNodes: function () {\n            return [this.source, this.target];\n        },\n\n        /**\n         * Returns whether the given node is either the source or the target of the current link.\n         */\n        incidentWith: function (node) {\n            return this.source === node || this.target === node;\n        },\n\n        /**\n         * Returns whether the given link is a continuation of the current one. This can be both\n         * via an incoming or outgoing link.\n         */\n        adjacentTo: function (link) {\n            return contains(this.source.links, link) || contains(this.target.links, link);\n        },\n\n        /**\n         * Changes the source-node of this link.\n         */\n        changeSource: function (node) {\n            Utils.remove(this.source.links, this);\n            Utils.remove(this.source.outgoing, this);\n\n            node.links.push(this);\n            node.outgoing.push(this);\n\n            this.source = node;\n        },\n\n        /**\n         * Changes the target-node of this link.\n         * @param node\n         */\n        changeTarget: function (node) {\n            Utils.remove(this.target.links, this);\n            Utils.remove(this.target.incoming, this);\n\n            node.links.push(this);\n            node.incoming.push(this);\n\n            this.target = node;\n        },\n\n        /**\n         * Changes both the source and the target nodes of this link.\n         */\n        changesNodes: function (v, w) {\n            if (this.source === v) {\n                this.changeSource(w);\n            }\n            else if (this.target === v) {\n                this.changeTarget(w);\n            }\n        },\n\n        /**\n         * Reverses the direction of this link.\n         */\n        reverse: function () {\n            var oldSource = this.source;\n            var oldTarget = this.target;\n\n            this.source = oldTarget;\n            Utils.remove(oldSource.outgoing, this);\n            this.source.outgoing.push(this);\n\n            this.target = oldSource;\n            Utils.remove(oldTarget.incoming, this);\n            this.target.incoming.push(this);\n            return this;\n        },\n\n        /**\n         * Ensures that the given target defines the endpoint of this link.\n         */\n        directTo: function (target) {\n            if (this.source !== target && this.target !== target) {\n                throw \"The given node is not incident with this link.\";\n            }\n            if (this.target !== target) {\n                this.reverse();\n            }\n        },\n\n        /**\n         * Returns a reversed clone of this link.\n         */\n        createReverseEdge: function () {\n            var r = this.clone();\n            r.reverse();\n            r.reversed = true;\n            return r;\n        },\n\n        /**\n         * Returns a clone of this link.\n         */\n        clone: function () {\n            var clone = new Link(this.source, this.target);\n            return clone;\n        }\n    });\n\n    /*--------------Graph structure---------------------------------*/\n    /**\n     * Defines a directed graph structure.\n     * Note that the incidence structure resides in the nodes through the incoming and outgoing links collection, rahter than\n     * inside the Graph.\n     */\n    var Graph = kendo.Class.extend({\n        init: function (idOrDiagram) {\n            /**\n             * The links or edge collection of this Graph.\n             * @type {Array}\n             */\n            this.links = [];\n            /**\n             * The node or vertex collection of this Graph.\n             * @type {Array}\n             */\n            this.nodes = [];\n            /**\n             * The optional reference to the Diagram on which this Graph is based.\n             * @type {null}\n             */\n            this.diagram = null;\n\n            /**\n             * The root of this Graph. If not set explicitly the first Node with zero incoming links will be taken.\n             * @type {null}\n             * @private\n             */\n            this._root = null;\n            if (Utils.isDefined(idOrDiagram)) {\n                if (Utils.isString(idOrDiagram)) {\n                    this.id = idOrDiagram;\n                }\n                else {\n                    this.diagram = idOrDiagram;\n                    this.id = idOrDiagram.id;\n                }\n            }\n            else {\n                this.id = randomId();\n            }\n\n            /**\n             * The bounds of this graph if the nodes have spatial extension defined.\n             * @type {Rect}\n             */\n            this.bounds = new Rect();\n            // keeps track whether the children & parents have been created\n            this._hasCachedRelationships = false;\n            this.type = \"Graph\";\n        },\n        /**\n         * Caches the relational information of parents and children in the 'parents' and 'children'\n         * properties.\n         * @param forceRebuild If set to true the relational info will be rebuild even if already present.\n         */\n        cacheRelationships: function (forceRebuild) {\n            if (Utils.isUndefined(forceRebuild)) {\n                forceRebuild = false;\n            }\n            if (this._hasCachedRelationships && !forceRebuild) {\n                return;\n            }\n            for (var i = 0, len = this.nodes.length; i < len; i++) {\n                var node = this.nodes[i];\n                node.children = this.getChildren(node);\n                node.parents = this.getParents(node);\n            }\n            this._hasCachedRelationships = true;\n        },\n\n        /**\n         * Assigns tree-levels to the nodes assuming this is a tree graph.\n         * If not connected or not a tree the process will succeed but\n         * will have little meaning.\n         * @param startNode The node from where the level numbering starts, usually the root of the tree.\n         * @param visited The collection of visited nodes.\n         * @param offset The offset or starting counter of the level info.\n         */\n        assignLevels: function (startNode, offset, visited) {\n            if (!startNode) {\n                throw \"Start node not specified.\";\n            }\n            if (Utils.isUndefined(offset)) {\n                offset = 0;\n            }\n            // if not done before, cache the parents and children\n            this.cacheRelationships();\n            if (Utils.isUndefined(visited)) {\n                visited = new Dictionary();\n                Utils.forEach(this.nodes, function (n) {\n                    visited.add(n, false);\n                });\n            }\n            visited.set(startNode, true);\n            startNode.level = offset;\n            var children = startNode.children;\n            for (var i = 0, len = children.length; i < len; i++) {\n                var child = children[i];\n                if (!child || visited.get(child)) {\n                    continue;\n                }\n                this.assignLevels(child, offset + 1, visited);\n            }\n        },\n\n        /**\n         * Gets or set the root of this graph.\n         * If not set explicitly the first Node with zero incoming links will be taken.\n         * @param value\n         * @returns {*}\n         */\n        root: function (value) {\n            if (Utils.isUndefined(value)) {\n                if (!this._root) {\n                    // TODO: better to use the longest path for the most probable root?\n                    var found = Utils.first(this.nodes, function (n) {\n                        return n.incoming.length === 0;\n                    });\n                    if (found) {\n                        return found;\n                    }\n                    return Utils.first(this.nodes);\n                }\n                else {\n                    return this._root;\n                }\n            }\n            else {\n                this._root = value;\n            }\n        },\n\n        /**\n         * Returns the connected components of this graph.\n         * Note that the returned graphs are made up of the nodes and links of this graph, i.e. a pointer to the items of this graph.\n         * If you alter the items of the components you'll alter the original graph and vice versa.\n         * @returns {Array}\n         */\n        getConnectedComponents: function () {\n            this.componentIndex = 0;\n            this.setItemIndices();\n            var componentId = Utils.initArray(this.nodes.length, -1);\n\n            for (var v = 0; v < this.nodes.length; v++) {\n                if (componentId[v] === -1) {\n                    this._collectConnectedNodes(componentId, v);\n                    this.componentIndex++;\n                }\n            }\n\n            var components = [], i;\n            for (i = 0; i < this.componentIndex; ++i) {\n                components[i] = new Graph();\n            }\n            for (i = 0; i < componentId.length; ++i) {\n                var graph = components[componentId[i]];\n                graph.addNodeAndOutgoings(this.nodes[i]);\n            }\n            // sorting the components in decreasing order of node count\n            components.sort(function (a, b) {\n                return b.nodes.length - a.nodes.length;\n            });\n            return components;\n        },\n\n        _collectConnectedNodes: function (setIds, nodeIndex) {\n            setIds[nodeIndex] = this.componentIndex; // part of the current component\n            var node = this.nodes[nodeIndex];\n            Utils.forEach(node.links,\n                function (link) {\n                    var next = link.getComplement(node);\n                    var nextId = next.index;\n                    if (setIds[nextId] === -1) {\n                        this._collectConnectedNodes(setIds, nextId);\n                    }\n                }, this);\n        },\n\n        /**\n         * Calculates the bounds of this Graph if the Nodes have spatial dimensions defined.\n         * @returns {Rect}\n         */\n        calcBounds: function () {\n            if (this.isEmpty()) {\n                this.bounds = new Rect();\n                return this.bounds;\n            }\n            var b = null;\n            for (var i = 0, len = this.nodes.length; i < len; i++) {\n                var node = this.nodes[i];\n                if (!b) {\n                    b = node.bounds();\n                }\n                else {\n                    b = b.union(node.bounds());\n                }\n            }\n            this.bounds = b;\n            return this.bounds;\n        },\n\n        /**\n         * Creates a spanning tree for the current graph.\n         * Important: this will not return a spanning forest if the graph is disconnected.\n         * Prim's algorithm  finds a minimum-cost spanning tree of an edge-weighted, connected, undirected graph;\n         * see http://en.wikipedia.org/wiki/Prim%27s_algorithm .\n         * @param root The root of the spanning tree.\n         * @returns {Graph}\n         */\n        getSpanningTree: function (root) {\n            var tree = new Graph();\n            var map = new Dictionary(), source, target;\n            tree.root = root.clone();\n            tree.root.level = 0;\n            tree.root.id = root.id;\n            map.add(root, tree.root);\n            root.level = 0;\n\n            var visited = [];\n            var remaining = [];\n            tree.nodes.push(tree.root);\n            visited.push(root);\n            remaining.push(root);\n\n            var levelCount = 1;\n            while (remaining.length > 0) {\n                var next = remaining.pop();\n                for (var ni = 0; ni < next.links.length; ni++) {\n                    var link = next.links[ni];\n                    var cn = link.getComplement(next);\n                    if (contains(visited, cn)) {\n                        continue;\n                    }\n\n                    cn.level = next.level + 1;\n                    if (levelCount < cn.level + 1) {\n                        levelCount = cn.level + 1;\n                    }\n                    if (!contains(remaining, cn)) {\n                        remaining.push(cn);\n                    }\n                    if (!contains(visited, cn)) {\n                        visited.push(cn);\n                    }\n                    if (map.containsKey(next)) {\n                        source = map.get(next);\n                    }\n                    else {\n                        source = next.clone();\n                        source.level = next.level;\n                        source.id = next.id;\n                        map.add(next, source);\n                    }\n                    if (map.containsKey(cn)) {\n                        target = map.get(cn);\n                    }\n                    else {\n                        target = cn.clone();\n                        target.level = cn.level;\n                        target.id = cn.id;\n                        map.add(cn, target);\n                    }\n                    var newLink = new Link(source, target);\n                    tree.addLink(newLink);\n                }\n\n            }\n\n            var treeLevels = [];\n            for (var i = 0; i < levelCount; i++) {\n                treeLevels.push([]);\n            }\n\n            Utils.forEach(tree.nodes, function (node) {\n                treeLevels[node.level].push(node);\n            });\n\n            tree.treeLevels = treeLevels;\n            tree.cacheRelationships();\n            return tree;\n        },\n\n        /**\n         * Returns a random node in this graph.\n         * @param excludedNodes The collection of nodes which should not be considered.\n         * @param incidenceLessThan The maximum degree or incidence the random node should have.\n         * @returns {*}\n         */\n        takeRandomNode: function (excludedNodes, incidenceLessThan) {\n            if (Utils.isUndefined(excludedNodes)) {\n                excludedNodes = [];\n            }\n            if (Utils.isUndefined(incidenceLessThan)) {\n                incidenceLessThan = 4;\n            }\n            if (this.nodes.length === 0) {\n                return null;\n            }\n            if (this.nodes.length === 1) {\n                return contains(excludedNodes, this.nodes[0]) ? null : this.nodes[0];\n            }\n            var pool = $.grep(this.nodes, function (node) {\n                return !contains(excludedNodes, node) && node.degree() <= incidenceLessThan;\n            });\n            if (Utils.isEmpty(pool)) {\n                return null;\n            }\n            return pool[Utils.randomInteger(0, pool.length)];\n        },\n\n        /**\n         * Returns whether this is an empty graph.\n         */\n        isEmpty: function () {\n            return Utils.isEmpty(this.nodes);\n        },\n\n        /**\n         * Checks whether the endpoints of the links are all in the nodes collection.\n         */\n        isHealthy: function () {\n            return Utils.all(this.links, function (link) {\n                return contains(this.nodes, link.source) && contains(this.nodes, link.target);\n            }, this);\n        },\n\n        /**\n         * Gets the parents of this node, defined as the adjacent nodes with a link from the adjacent node to this one.\n         * @returns {Array}\n         */\n        getParents: function (n) {\n            if (!this.hasNode(n)) {\n                throw \"The given node is not part of this graph.\";\n            }\n            return n.getParents();\n        },\n\n        /**\n         * Gets the children of this node, defined as the adjacent nodes with a link from this node to the adjacent one.\n         * @returns {Array}\n         */\n        getChildren: function (n) {\n            if (!this.hasNode(n)) {\n                throw \"The given node is not part of this graph.\";\n            }\n            return n.getChildren();\n        },\n\n        /**\n         * Adds a new link to the graph between the given nodes.\n         */\n        addLink: function (sourceOrLink, target, owner) {\n\n            if (Utils.isUndefined(sourceOrLink)) {\n                throw \"The source of the link is not defined.\";\n            }\n            if (Utils.isUndefined(target)) {\n                // can only be undefined if the first one is a Link\n                if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === \"Link\") {\n                    this.addExistingLink(sourceOrLink);\n                    return;\n                }\n                else {\n                    throw \"The target of the link is not defined.\";\n                }\n            }\n\n            var foundSource = this.getNode(sourceOrLink);\n            if (Utils.isUndefined(foundSource)) {\n                foundSource = this.addNode(sourceOrLink);\n            }\n            var foundTarget = this.getNode(target);\n            if (Utils.isUndefined(foundTarget)) {\n                foundTarget = this.addNode(target);\n            }\n\n            var newLink = new Link(foundSource, foundTarget);\n\n            if (Utils.isDefined(owner)) {\n                newLink.owner = owner;\n            }\n\n            /*newLink.source.outgoing.push(newLink);\n             newLink.source.links.push(newLink);\n             newLink.target.incoming.push(newLink);\n             newLink.target.links.push(newLink);*/\n\n            this.links.push(newLink);\n\n            return newLink;\n        },\n\n        /**\n         * Removes all the links in this graph.\n         */\n        removeAllLinks: function () {\n            while (this.links.length > 0) {\n                var link = this.links[0];\n                this.removeLink(link);\n            }\n        },\n\n        /**\n         * Adds the given link to the current graph.\n         */\n        addExistingLink: function (link) {\n\n            if (this.hasLink(link)) {\n                return;\n            }\n            this.links.push(link);\n            if (this.hasNode(link.source.id)) {\n                // priority to the existing node with the id even if other props are different\n                var s = this.getNode(link.source.id);\n                link.changeSource(s);\n            }\n            else {\n                this.addNode(link.source);\n            }\n\n            if (this.hasNode(link.target.id)) {\n                var t = this.getNode(link.target.id);\n                link.changeTarget(t);\n            }\n            else {\n                this.addNode(link.target);\n            }\n\n            /*  if (!link.source.outgoing.contains(link)) {\n             link.source.outgoing.push(link);\n             }\n             if (!link.source.links.contains(link)) {\n             link.source.links.push(link);\n             }\n             if (!link.target.incoming.contains(link)) {\n             link.target.incoming.push(link);\n             }\n             if (!link.target.links.contains(link)) {\n             link.target.links.push(link);\n             }*/\n        },\n\n        /**\n         * Returns whether the given identifier or Link is part of this graph.\n         * @param linkOrId An identifier or a Link object.\n         * @returns {*}\n         */\n        hasLink: function (linkOrId) {\n            if (Utils.isString(linkOrId)) {\n                return Utils.any(this.links, function (link) {\n                    return link.id === linkOrId;\n                });\n            }\n            if (linkOrId.type === \"Link\") {\n                return contains(this.links, linkOrId);\n            }\n            throw \"The given object is neither an identifier nor a Link.\";\n        },\n        /**\n         * Gets the node with the specified Id or null if not part of this graph.\n         */\n        getNode: function (nodeOrId) {\n            if (Utils.isUndefined(nodeOrId)) {\n                throw \"No identifier or Node specified.\";\n            }\n            if (Utils.isString(nodeOrId)) {\n                return Utils.find(this.nodes, function (n) {\n                    return n.id == nodeOrId;\n                });\n            }\n            else {\n                if (this.hasNode(nodeOrId)) {\n                    return nodeOrId;\n                }\n                else {\n                    return null;\n                }\n            }\n        },\n\n        /**\n         * Returns whether the given node or node Id is part of this graph.\n         */\n        hasNode: function (nodeOrId) {\n            if (Utils.isString(nodeOrId)) {\n                return Utils.any(this.nodes, function (n) {\n                    return n.id === nodeOrId;\n                });\n            }\n            if (Utils.isObject(nodeOrId)) {\n                return Utils.any(this.nodes, function (n) {\n                    return n === nodeOrId;\n                });\n            }\n            throw \"The identifier should be a Node or the Id (string) of a node.\";\n        },\n\n        /**\n         * Removes the given node from this graph.\n         * The node can be specified as an object or as an identifier (string).\n         */\n        removeNode: function (nodeOrId) {\n            var n = nodeOrId;\n            if (Utils.isString(nodeOrId)) {\n                n = this.getNode(nodeOrId);\n            }\n\n            if (Utils.isDefined(n)) {\n                var links = n.links;\n                n.links = [];\n                for (var i = 0, len = links.length; i < len; i++) {\n                    var link = links[i];\n                    this.removeLink(link);\n                }\n                Utils.remove(this.nodes, n);\n            }\n            else {\n                throw \"The identifier should be a Node or the Id (string) of a node.\";\n            }\n        },\n\n        /**\n         * Returns whether the given nodes are connected with a least one link independently of the direction.\n         */\n        areConnected: function (n1, n2) {\n            return Utils.any(this.links, function (link) {\n                return link.source == n1 && link.target == n2 || link.source == n2 && link.target == n1;\n            });\n        },\n\n        /**\n         * Removes the given link from this graph.\n         */\n        removeLink: function (link) {\n            /*    if (!this.links.contains(link)) {\n             throw \"The given link is not part of the Graph.\";\n             }\n             */\n            Utils.remove(this.links, link);\n\n            Utils.remove(link.source.outgoing, link);\n            Utils.remove(link.source.links, link);\n            Utils.remove(link.target.incoming, link);\n            Utils.remove(link.target.links, link);\n        },\n\n        /**\n         * Adds a new node to this graph, if not already present.\n         * The node can be an existing Node or the identifier of a new node.\n         * No error is thrown if the node is already there and the existing one is returned.\n         */\n        addNode: function (nodeOrId, layoutRect, owner) {\n\n            var newNode = null;\n\n            if (!Utils.isDefined(nodeOrId)) {\n                throw \"No Node or identifier for a new Node is given.\";\n            }\n\n            if (Utils.isString(nodeOrId)) {\n                if (this.hasNode(nodeOrId)) {\n                    return this.getNode(nodeOrId);\n                }\n                newNode = new Node(nodeOrId);\n            }\n            else {\n                if (this.hasNode(nodeOrId)) {\n                    return this.getNode(nodeOrId);\n                }\n                // todo: ensure that the param is a Node?\n                newNode = nodeOrId;\n            }\n\n            if (Utils.isDefined(layoutRect)) {\n                newNode.bounds(layoutRect);\n            }\n\n            if (Utils.isDefined(owner)) {\n                newNode.owner = owner;\n            }\n            this.nodes.push(newNode);\n            return newNode;\n        },\n\n        /**\n         * Adds the given Node and its outgoing links.\n         */\n        addNodeAndOutgoings: function (node) {\n\n            if (!contains(this.nodes, node)) {\n                this.nodes.push(node);\n            }\n\n            var newLinks = node.outgoing;\n            node.outgoing = [];\n            Utils.forEach(newLinks, function (link) {\n                this.addExistingLink(link);\n            }, this);\n        },\n\n        /**\n         * Sets the 'index' property on the links and nodes of this graph.\n         */\n        setItemIndices: function () {\n            var i;\n            for (i = 0; i < this.nodes.length; ++i) {\n                this.nodes[i].index = i;\n            }\n\n            for (i = 0; i < this.links.length; ++i) {\n                this.links[i].index = i;\n            }\n        },\n\n        /**\n         * Returns a clone of this graph.\n         */\n        clone: function (saveMapping) {\n            var copy = new Graph();\n            var save = Utils.isDefined(saveMapping) && saveMapping === true;\n            if (save) {\n                copy.nodeMap = new Dictionary();\n                copy.linkMap = new Dictionary();\n            }\n            // we need a map even if the saveMapping is not set\n            var map = new Dictionary();\n            Utils.forEach(this.nodes, function (nOriginal) {\n                var nCopy = nOriginal.clone();\n                map.set(nOriginal, nCopy);\n                copy.nodes.push(nCopy);\n\n                if (save) {\n                    copy.nodeMap.set(nCopy, nOriginal);\n                }\n            });\n\n            Utils.forEach(this.links, function (linkOriginal) {\n                if (map.containsKey(linkOriginal.source) && map.containsKey(linkOriginal.target)) {\n                    var linkCopy = copy.addLink(map.get(linkOriginal.source), map.get(linkOriginal.target));\n                    if (save) {\n                        copy.linkMap.set(linkCopy, linkOriginal);\n                    }\n                }\n            });\n\n            return copy;\n        },\n\n        /**\n         * The parsing allows a quick way to create graphs.\n         *  - [\"n1->n2\", \"n2->n3\"]: creates the three nodes and adds the links\n         *  - [\"n1->n2\", {id: \"QSDF\"}, \"n2->n3\"]: same as previous but also performs a deep extend of the link between n1 and n2 with the given object.\n         */\n        linearize: function (addIds) {\n            return Graph.Utils.linearize(this, addIds);\n        },\n\n        /**\n         * Performs a depth-first traversal starting at the given node.\n         * @param startNode a node or id of a node in this graph\n         * @param action\n         */\n        depthFirstTraversal: function (startNode, action) {\n            if (Utils.isUndefined(startNode)) {\n                throw \"You need to supply a starting node.\";\n            }\n            if (Utils.isUndefined(action)) {\n                throw \"You need to supply an action.\";\n            }\n            if (!this.hasNode(startNode)) {\n                throw \"The given start-node is not part of this graph\";\n            }\n            var foundNode = this.getNode(startNode);// case the given one is an Id\n            var visited = [];\n            this._dftIterator(foundNode, action, visited);\n        },\n\n        _dftIterator: function (node, action, visited) {\n\n            action(node);\n            visited.push(node);\n            var children = node.getChildren();\n            for (var i = 0, len = children.length; i < len; i++) {\n                var child = children[i];\n                if (contains(visited, child)) {\n                    continue;\n                }\n                this._dftIterator(child, action, visited);\n            }\n        },\n\n        /**\n         * Performs a breadth-first traversal starting at the given node.\n         * @param startNode a node or id of a node in this graph\n         * @param action\n         */\n        breadthFirstTraversal: function (startNode, action) {\n\n            if (Utils.isUndefined(startNode)) {\n                throw \"You need to supply a starting node.\";\n            }\n            if (Utils.isUndefined(action)) {\n                throw \"You need to supply an action.\";\n            }\n\n            if (!this.hasNode(startNode)) {\n                throw \"The given start-node is not part of this graph\";\n            }\n            var foundNode = this.getNode(startNode);// case the given one is an Id\n            var queue = new Queue();\n            var visited = [];\n            queue.enqueue(foundNode);\n\n            while (queue.length > 0) {\n                var node = queue.dequeue();\n                action(node);\n                visited.push(node);\n                var children = node.getChildren();\n                for (var i = 0, len = children.length; i < len; i++) {\n                    var child = children[i];\n                    if (contains(visited, child) || contains(queue, child)) {\n                        continue;\n                    }\n                    queue.enqueue(child);\n                }\n            }\n        },\n\n        /**\n         * This is the classic Tarjan algorithm for strongly connected components.\n         * See e.g. http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm\n         * @param excludeSingleItems Whether isolated nodes should be excluded from the analysis.\n         * @param node The start node from which the analysis starts.\n         * @param indices  Numbers the nodes consecutively in the order in which they are discovered.\n         * @param lowLinks The smallest index of any node known to be reachable from the node, including the node itself\n         * @param connected The current component.\n         * @param stack The bookkeeping stack of things to visit.\n         * @param index The counter of visited nodes used to assign the indices.\n         * @private\n         */\n        _stronglyConnectedComponents: function (excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n            indices.add(node, index);\n            lowLinks.add(node, index);\n            index++;\n\n            stack.push(node);\n\n            var children = node.getChildren(), next;\n            for (var i = 0, len = children.length; i < len; i++) {\n                next = children[i];\n                if (!indices.containsKey(next)) {\n                    this._stronglyConnectedComponents(excludeSingleItems, next, indices, lowLinks, connected, stack, index);\n                    lowLinks.add(node, Math.min(lowLinks.get(node), lowLinks.get(next)));\n                }\n                else if (contains(stack, next)) {\n                    lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n                }\n            }\n            // If v is a root node, pop the stack and generate a strong component\n            if (lowLinks.get(node) === indices.get(node)) {\n                var component = [];\n                do {\n                    next = stack.pop();\n                    component.push(next);\n                }\n                while (next !== node);\n                if (!excludeSingleItems || (component.length > 1)) {\n                    connected.push(component);\n                }\n            }\n        },\n\n        /**\n         * Returns the cycles found in this graph.\n         * The returned arrays consist of the nodes which are strongly coupled.\n         * @param excludeSingleItems Whether isolated nodes should be excluded.\n         * @returns {Array} The array of cycles found.\n         */\n        findCycles: function (excludeSingleItems) {\n            if (Utils.isUndefined(excludeSingleItems)) {\n                excludeSingleItems = true;\n            }\n            var indices = new Dictionary();\n            var lowLinks = new Dictionary();\n            var connected = [];\n            var stack = [];\n            for (var i = 0, len = this.nodes.length; i < len; i++) {\n                var node = this.nodes[i];\n                if (indices.containsKey(node)) {\n                    continue;\n                }\n                this._stronglyConnectedComponents(excludeSingleItems, node, indices, lowLinks, connected, stack, 0);\n            }\n            return connected;\n        },\n\n        /**\n         * Returns whether this graph is acyclic.\n         * @returns {*}\n         */\n        isAcyclic: function () {\n            return Utils.isEmpty(this.findCycles());\n        },\n\n        /**\n         * Returns whether the given graph is a subgraph of this one.\n         * @param other Another graph instance.\n         */\n        isSubGraph: function (other) {\n            var otherArray = other.linearize();\n            var thisArray = this.linearize();\n            return Utils.all(otherArray, function (s) {\n                return contains(thisArray, s);\n            });\n        },\n\n        /**\n         *  Makes an acyclic graph from the current (connected) one.\n         * * @returns {Array} The reversed links.\n         */\n        makeAcyclic: function () {\n            // if empty or almost empty\n            if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n                return [];\n            }\n            // singular case of just two nodes\n            if (this.nodes.length == 2) {\n                var result = [];\n                if (this.links.length > 1) {\n                    var oneLink = this.links[0];\n                    var oneNode = oneLink.source;\n                    for (var i = 0, len = this.links.length; i < len; i++) {\n                        var link = this.links[i];\n                        if (link.source == oneNode) {\n                            continue;\n                        }\n                        var rev = link.reverse();\n                        result.push(rev);\n                    }\n                }\n                return result;\n            }\n\n            var copy = this.clone(true); // copy.nodeMap tells you the mapping\n            var N = this.nodes.length;\n\n            var intensityCatalog = new Dictionary();\n\n            /**\n             * If there are both incoming and outgoing links this will return the flow intensity (out-in).\n             * Otherwise the node acts as a flow source with N specifying the (equal) intensity.\n             * @param node\n             * @returns {number}\n             */\n            var flowIntensity = function (node) {\n                if (node.outgoing.length === 0) {\n                    return (2 - N);\n                }\n                else if (node.incoming.length === 0) {\n                    return (N - 2);\n                }\n                else {\n                    return node.outgoing.length - node.incoming.length;\n                }\n            };\n\n            /**\n             * Collects the nodes with the same intensity.\n             * @param node\n             * @param intensityCatalog\n             */\n            var catalogEqualIntensity = function (node, intensityCatalog) {\n                var intensity = flowIntensity(node, N);\n                if (!intensityCatalog.containsKey(intensity)) {\n                    intensityCatalog.set(intensity, []);\n                }\n                intensityCatalog.get(intensity).push(node);\n            };\n\n            Utils.forEach(copy.nodes, function (v) {\n                catalogEqualIntensity(v, intensityCatalog);\n            });\n\n            var sourceStack = [];\n            var targetStack = [];\n\n            while (copy.nodes.length > 0) {\n                var source, target, intensity;\n                if (intensityCatalog.containsKey(2 - N)) {\n                    var targets = intensityCatalog.get(2 - N); // nodes without outgoings\n                    while (targets.length > 0) {\n                        target = targets.pop();\n                        for (var li = 0; li < target.links.length; li++) {\n                            var targetLink = target.links[li];\n                            source = targetLink.getComplement(target);\n                            intensity = flowIntensity(source, N);\n                            Utils.remove(intensityCatalog.get(intensity), source);\n                            source.removeLink(targetLink);\n                            catalogEqualIntensity(source, intensityCatalog);\n                        }\n                        Utils.remove(copy.nodes, target);\n                        targetStack.unshift(target);\n                    }\n                }\n\n                // move sources to sourceStack\n                if (intensityCatalog.containsKey(N - 2)) {\n                    var sources = intensityCatalog.get(N - 2); // nodes without incomings\n                    while (sources.length > 0) {\n                        source = sources.pop();\n                        for (var si = 0; si < source.links.length; si++) {\n                            var sourceLink = source.links[si];\n                            target = sourceLink.getComplement(source);\n                            intensity = flowIntensity(target, N);\n                            Utils.remove(intensityCatalog.get(intensity), target);\n                            target.removeLink(sourceLink);\n                            catalogEqualIntensity(target, intensityCatalog);\n                        }\n                        sourceStack.push(source);\n                        Utils.remove(copy.nodes, source);\n                    }\n                }\n\n                if (copy.nodes.length > 0) {\n                    for (var k = N - 3; k > 2 - N; k--) {\n                        if (intensityCatalog.containsKey(k) &&\n                            intensityCatalog.get(k).length > 0) {\n                            var maxdiff = intensityCatalog.get(k);\n                            var v = maxdiff.pop();\n                            for (var ri = 0; ri < v.links.length; ri++) {\n                                var ril = v.links[ri];\n                                var u = ril.getComplement(v);\n                                intensity = flowIntensity(u, N);\n                                Utils.remove(intensityCatalog.get(intensity), u);\n                                u.removeLink(ril);\n                                catalogEqualIntensity(u, intensityCatalog);\n                            }\n                            sourceStack.push(v);\n                            Utils.remove(copy.nodes, v);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            sourceStack = sourceStack.concat(targetStack);\n\n            var vertexOrder = new Dictionary();\n            for (var kk = 0; kk < this.nodes.length; kk++) {\n                vertexOrder.set(copy.nodeMap.get(sourceStack[kk]), kk);\n            }\n\n            var reversedEdges = [];\n            Utils.forEach(this.links, function (link) {\n                if (vertexOrder.get(link.source) > vertexOrder.get(link.target)) {\n                    link.reverse();\n                    reversedEdges.push(link);\n                }\n            });\n            return reversedEdges;\n        }\n    });\n\n    /**\n     * A collection of predefined graphs for demo and testing purposes.\n     */\n    Graph.Predefined = {\n        /**\n         * Eight-shapes graph all connected in a cycle.\n         * @returns {*}\n         * @constructor\n         */\n        EightGraph: function () {\n            return Graph.Utils.parse([ \"1->2\", \"2->3\", \"3->4\", \"4->1\", \"3->5\", \"5->6\", \"6->7\", \"7->3\"]);\n        },\n\n        /**\n         * Creates a typical mindmap diagram.\n         * @returns {*}\n         * @constructor\n         */\n        Mindmap: function () {\n            return Graph.Utils.parse([\"0->1\", \"0->2\", \"0->3\", \"0->4\", \"0->5\", \"1->6\", \"1->7\", \"7->8\", \"2->9\", \"9->10\", \"9->11\", \"3->12\",\n                \"12->13\", \"13->14\", \"4->15\", \"4->16\", \"15->17\", \"15->18\", \"18->19\", \"18->20\", \"14->21\", \"14->22\", \"5->23\", \"23->24\", \"23->25\", \"6->26\"]);\n        },\n\n        /**\n         * Three nodes connected in a cycle.\n         * @returns {*}\n         * @constructor\n         */\n        ThreeGraph: function () {\n            return Graph.Utils.parse([ \"1->2\", \"2->3\", \"3->1\"]);\n        },\n\n        /**\n         * A tree with each node having two children.\n         * @param levels How many levels the binary tree should have.\n         * @returns {diagram.Graph}\n         * @constructor\n         */\n        BinaryTree: function (levels) {\n            if (Utils.isUndefined(levels)) {\n                levels = 5;\n            }\n            return Graph.Utils.createBalancedTree(levels, 2);\n        },\n\n        /**\n         * A linear graph (discrete line segment).\n         * @param length How many segments (the node count is hence (length+1)).\n         * @returns {diagram.Graph}\n         * @constructor\n         */\n        Linear: function (length) {\n            if (Utils.isUndefined(length)) {\n                length = 10;\n            }\n            return Graph.Utils.createBalancedTree(length, 1);\n        },\n\n        /**\n         * A standard tree-graph with the specified levels and children (siblings) count.\n         * Note that for a balanced tree of level N and sibling count s, counting the root as level zero:\n         *  - NodeCount = (1-s^(N+1))/(1-s)]\n         *  - LinkCount = s.(1-s^N)/(1-s)\n         * @param levels How many levels the tree should have.\n         * @param siblingsCount How many siblings each level should have.\n         * @returns {diagram.Graph}\n         * @constructor\n         */\n        Tree: function (levels, siblingsCount) {\n            return Graph.Utils.createBalancedTree(levels, siblingsCount);\n        },\n\n        /**\n         * Creates a forest.\n         * Note that for a balanced forest of level N, sibling count s and tree count t, counting the root as level zero:\n         *  - NodeCount = t.(1-s^(N+1))/(1-s)]\n         *  - LinkCount = t.s.(1-s^N)/(1-s)\n         * @param levels How many levels the tree should have.\n         * @param siblingsCount How many siblings each level should have.\n         * @param trees The amount of trees the forest should have.\n         * @returns {diagram.Graph}\n         * @constructor\n         */\n        Forest: function (levels, siblingsCount, trees) {\n            return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n        },\n\n        /**\n         * A workflow-like graph with cycles.\n         * @returns {*}\n         * @constructor\n         */\n        Workflow: function () {\n            return Graph.Utils.parse(\n                [\"0->1\", \"1->2\", \"2->3\", \"1->4\", \"4->3\", \"3->5\", \"5->6\", \"6->3\", \"6->7\", \"5->4\"]\n            );\n        },\n\n        /**\n         * A grid graph with the direction of the links avoiding cycles.\n         * Node count: (n+1).(m+1)\n         * Link count: n.(m+1) + m.(n+1)\n         * @param n Horizontal count of grid cells. If zero this will result in a linear graph.\n         * @param m Vertical count of grid cells. If zero this will result in a linear graph.\n         * @constructor\n         */\n        Grid: function (n, m) {\n            var g = new diagram.Graph();\n            if (n <= 0 && m <= 0) {\n                return g;\n            }\n\n            for (var i = 0; i < n + 1; i++) {\n                var previous = null;\n                for (var j = 0; j < m + 1; j++) {\n                    // using x-y coordinates to name the nodes\n                    var node = new Node(i.toString() + \".\" + j.toString());\n                    g.addNode(node);\n                    if (previous) {\n                        g.addLink(previous, node);\n                    }\n                    if (i > 0) {\n                        var left = g.getNode((i - 1).toString() + \".\" + j.toString());\n                        g.addLink(left, node);\n                    }\n                    previous = node;\n                }\n            }\n            return g;\n        }\n\n    };\n\n    /**\n     * Graph generation and other utilities.\n     */\n    Graph.Utils = {\n        /**\n         * The parsing allows a quick way to create graphs.\n         *  - [\"n1->n2\", \"n2->n3\"]: creates the three nodes and adds the links\n         *  - [\"n1->n2\", {id: \"id177\"}, \"n2->n3\"]: same as previous but also performs a deep extend of the link between n1 and n2 with the given object.\n         */\n        parse: function (graphString) {\n\n            var previousLink, graph = new diagram.Graph(), parts = graphString.slice();\n            for (var i = 0, len = parts.length; i < len; i++) {\n                var part = parts[i];\n                if (Utils.isString(part)) // link spec\n                {\n                    if (part.indexOf(\"->\") < 0) {\n                        throw \"The link should be specified as 'a->b'.\";\n                    }\n                    var p = part.split(\"->\");\n                    if (p.length != 2) {\n                        throw \"The link should be specified as 'a->b'.\";\n                    }\n                    previousLink = new Link(p[0], p[1]);\n                    graph.addLink(previousLink);\n                }\n                if (Utils.isObject(part)) {\n                    if (!previousLink) {\n                        throw \"Specification found before Link definition.\";\n                    }\n                    kendo.deepExtend(previousLink, part);\n                }\n            }\n            return graph;\n        },\n\n        /**\n         * Returns a linearized representation of the given Graph.\n         * See also the Graph.Utils.parse method for the inverse operation.\n         */\n        linearize: function (graph, addIds) {\n            if (Utils.isUndefined(graph)) {\n                throw \"Expected an instance of a Graph object in slot one.\";\n            }\n            if (Utils.isUndefined(addIds)) {\n                addIds = false;\n            }\n            var lin = [];\n            for (var i = 0, len = graph.links.length; i < len; i++) {\n                var link = graph.links[i];\n                lin.push(link.source.id + \"->\" + link.target.id);\n                if (addIds) {\n                    lin.push({id: link.id});\n                }\n            }\n            return lin;\n        },\n\n        /**\n         * The method used by the diagram creation to instantiate a shape.\n         * @param kendoDiagram The Kendo diagram where the diagram will be created.\n         * @param p The position at which to place the shape.\n         * @param shapeDefaults Optional Shape options.\n         * @param id Optional identifier of the shape.\n         * @returns {*}\n         * @private\n         */\n        _addShape: function (kendoDiagram, p, id, shapeDefaults) {\n            if (Utils.isUndefined(p)) {\n                p = new diagram.Point(0, 0);\n            }\n\n            if (Utils.isUndefined(id)) {\n                id = randomId();\n            }\n\n            shapeDefaults = kendo.deepExtend({\n                width: 20,\n                height: 20,\n                id: id,\n                radius: 10,\n                fill: \"#778899\",\n                data: \"circle\",\n                undoable: false,\n                x: p.x,\n                y: p.y\n            }, shapeDefaults);\n\n            return kendoDiagram.addShape(shapeDefaults);\n        },\n        /**\n         * The method used by the diagram creation to instantiate a connection.\n         * @param diagram he Kendo diagram where the diagram will be created.\n         * @param from The source shape.\n         * @param to The target shape.\n         * @param options Optional Connection options.\n         * @returns {*}\n         * @private\n         */\n        _addConnection: function (diagram, from, to, options) {\n            return diagram.connect(from, to, options);\n        },\n\n        /**\n         * Creates a diagram from the given Graph.\n         * @param diagram The Kendo diagram where the diagram will be created.\n         * @param graph The graph structure defining the diagram.\n         */\n        createDiagramFromGraph: function (diagram, graph, doLayout, randomSize) {\n\n            if (Utils.isUndefined(diagram)) {\n                throw \"The diagram surface is undefined.\";\n            }\n            if (Utils.isUndefined(graph)) {\n                throw \"No graph specification defined.\";\n            }\n            if (Utils.isUndefined(doLayout)) {\n                doLayout = true;\n            }\n            if (Utils.isUndefined(randomSize)) {\n                randomSize = false;\n            }\n\n            var width = diagram.element.clientWidth || 200;\n            var height = diagram.element.clientHeight || 200;\n            var map = [], node, shape;\n            for (var i = 0, len = graph.nodes.length; i < len; i++) {\n                node = graph.nodes[i];\n                var p = node.position;\n                if (Utils.isUndefined(p)) {\n                    if (Utils.isDefined(node.x) && Utils.isDefined(node.y)) {\n                        p = new Point(node.x, node.y);\n                    }\n                    else {\n                        p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n                    }\n                }\n                var opt = {};\n\n                if (node.id === \"0\") {\n                    /* kendo.deepExtend(opt,\n                     {\n                     fill: \"Orange\",\n                     data: 'circle',\n                     width: 100,\n                     height: 100,\n                     center: new Point(50, 50)\n                     });*/\n                }\n                else if (randomSize) {\n                    kendo.deepExtend(opt, {\n                        width: Math.random() * 150 + 20,\n                        height: Math.random() * 80 + 50,\n                        data: 'rectangle',\n                        fill: {\n                            color: \"#778899\"\n                        }\n                    });\n                }\n\n                shape = this._addShape(diagram, p, node.id, opt);\n                //shape.content(node.id);\n\n                var bounds = shape.bounds();\n                if (Utils.isDefined(bounds)) {\n                    node.x = bounds.x;\n                    node.y = bounds.y;\n                    node.width = bounds.width;\n                    node.height = bounds.height;\n                }\n                map[node.id] = shape;\n            }\n            for (var gli = 0; gli < graph.links.length; gli++) {\n                var link = graph.links[gli];\n                var sourceShape = map[link.source.id];\n                if (Utils.isUndefined(sourceShape)) {\n                    continue;\n                }\n                var targetShape = map[link.target.id];\n                if (Utils.isUndefined(targetShape)) {\n                    continue;\n                }\n                this._addConnection(diagram, sourceShape, targetShape, {id: link.id});\n\n            }\n            if (doLayout) {\n                var l = new diagram.SpringLayout(diagram);\n                l.layoutGraph(graph, {limitToView: false});\n                for (var shi = 0; shi < graph.nodes.length; shi++) {\n                    node = graph.nodes[shi];\n                    shape = map[node.id];\n                    shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n                }\n            }\n        },\n\n        /**\n         * Creates a balanced tree with the specified number of levels and siblings count.\n         * Note that for a balanced tree of level N and sibling count s, counting the root as level zero:\n         *  - NodeCount = (1-s^(N+1))/(1-s)]\n         *  - LinkCount = s.(1-s^N)/(1-s)\n         * @param levels How many levels the tree should have.\n         * @param siblingsCount How many siblings each level should have.\n         * @returns {diagram.Graph}\n         */\n        createBalancedTree: function (levels, siblingsCount) {\n            if (Utils.isUndefined(levels)) {\n                levels = 3;\n            }\n            if (Utils.isUndefined(siblingsCount)) {\n                siblingsCount = 3;\n            }\n\n            var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n            if (levels <= 0 || siblingsCount <= 0) {\n                return g;\n            }\n            var root = new Node((++counter).toString());\n            g.addNode(root);\n            g.root = root;\n            lastAdded.push(root);\n            for (var i = 0; i < levels; i++) {\n                news = [];\n                for (var j = 0; j < lastAdded.length; j++) {\n                    var parent = lastAdded[j];\n                    for (var k = 0; k < siblingsCount; k++) {\n                        var item = new Node((++counter).toString());\n                        g.addLink(parent, item);\n                        news.push(item);\n                    }\n                }\n                lastAdded = news;\n            }\n            return g;\n        },\n\n        /**\n         * Creates a balanced tree with the specified number of levels and siblings count.\n         * Note that for a balanced forest of level N, sibling count s and tree count t, counting the root as level zero:\n         *  - NodeCount = t.(1-s^(N+1))/(1-s)]\n         *  - LinkCount = t.s.(1-s^N)/(1-s)\n         * @param levels How many levels the tree should have.\n         * @param siblingsCount How many siblings each level should have.\n         * @returns {diagram.Graph}\n         * @param treeCount The number of trees the forest should have.\n         */\n        createBalancedForest: function (levels, siblingsCount, treeCount) {\n            if (Utils.isUndefined(levels)) {\n                levels = 3;\n            }\n            if (Utils.isUndefined(siblingsCount)) {\n                siblingsCount = 3;\n            }\n            if (Utils.isUndefined(treeCount)) {\n                treeCount = 5;\n            }\n            var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n            if (levels <= 0 || siblingsCount <= 0 || treeCount <= 0) {\n                return g;\n            }\n\n            for (var t = 0; t < treeCount; t++) {\n                var root = new Node((++counter).toString());\n                g.addNode(root);\n                lastAdded = [root];\n                for (var i = 0; i < levels; i++) {\n                    news = [];\n                    for (var j = 0; j < lastAdded.length; j++) {\n                        var parent = lastAdded[j];\n                        for (var k = 0; k < siblingsCount; k++) {\n                            var item = new Node((++counter).toString());\n                            g.addLink(parent, item);\n                            news.push(item);\n                        }\n                    }\n                    lastAdded = news;\n                }\n            }\n            return g;\n        },\n\n        /**\n         * Creates a random graph (uniform distribution) with the specified amount of nodes.\n         * @param nodeCount The amount of nodes the random graph should have.\n         * @param maxIncidence The maximum allowed degree of the nodes.\n         * @param isTree Whether the return graph should be a tree (default: false).\n         * @returns {diagram.Graph}\n         */\n        createRandomConnectedGraph: function (nodeCount, maxIncidence, isTree) {\n\n            /* Swa's Mathematica export of random Bernoulli graphs\n             gr[n_,p_]:=Module[{g=RandomGraph[BernoulliGraphDistribution[n,p],VertexLabels->\"Name\",DirectedEdges->True]},\n             While[Not[ConnectedGraphQ[g]],g=RandomGraph[BernoulliGraphDistribution[n,p],VertexLabels->\"Name\",DirectedEdges->True]];g];\n             project[a_]:=(\"\\\"\"<>ToString[Part[#,1]]<>\"->\"<>ToString[Part[#,2]]<>\"\\\"\")&     @ a;\n             export[g_]:=project/@ EdgeList[g]\n             g = gr[12,.1]\n             export [g]\n             */\n\n            if (Utils.isUndefined(nodeCount)) {\n                nodeCount = 40;\n            }\n            if (Utils.isUndefined(maxIncidence)) {\n                maxIncidence = 4;\n            }\n            if (Utils.isUndefined(isTree)) {\n                isTree = false;\n            }\n\n            var g = new diagram.Graph(), counter = -1;\n            if (nodeCount <= 0) {\n                return g;\n            }\n\n            var root = new Node((++counter).toString());\n            g.addNode(root);\n            if (nodeCount === 1) {\n                return g;\n            }\n            if (nodeCount > 1) {\n                // random tree\n                for (var i = 1; i < nodeCount; i++) {\n                    var poolNode = g.takeRandomNode([], maxIncidence);\n                    if (!poolNode) {\n                        //failed to find one so the graph will have less nodes than specified\n                        break;\n                    }\n                    var newNode = g.addNode(i.toString());\n                    g.addLink(poolNode, newNode);\n                }\n                if (!isTree && nodeCount > 1) {\n                    var randomAdditions = Utils.randomInteger(1, nodeCount);\n                    for (var ri = 0; ri < randomAdditions; ri++) {\n                        var n1 = g.takeRandomNode([], maxIncidence);\n                        var n2 = g.takeRandomNode([], maxIncidence);\n                        if (n1 && n2 && !g.areConnected(n1, n2)) {\n                            g.addLink(n1, n2);\n                        }\n                    }\n                }\n                return g;\n            }\n        },\n\n        /**\n         * Generates a random diagram.\n         * @param diagram The host diagram.\n         * @param shapeCount The number of shapes the random diagram should contain.\n         * @param maxIncidence The maximum degree the shapes can have.\n         * @param isTree Whether the generated diagram should be a tree\n         * @param layoutType The optional layout type to apply after the diagram is generated.\n         */\n        randomDiagram: function (diagram, shapeCount, maxIncidence, isTree, randomSize) {\n            var g = kendo.dataviz.diagram.Graph.Utils.createRandomConnectedGraph(shapeCount, maxIncidence, isTree);\n            Graph.Utils.createDiagramFromGraph(diagram, g, false, randomSize);\n        }\n    };\n\n    kendo.deepExtend(diagram, {\n        init: function (element) {\n            kendo.init(element, diagram.ui);\n        },\n\n        Point: Point,\n        Intersect: Intersect,\n        Geometry: Geometry,\n        Rect: Rect,\n        Size: Size,\n        RectAlign: RectAlign,\n        Matrix: Matrix,\n        MatrixVector: MatrixVector,\n        normalVariable: normalVariable,\n        randomId: randomId,\n        Dictionary: Dictionary,\n        HashTable: HashTable,\n        Queue: Queue,\n        Set: Set,\n        Node: Node,\n        Link: Link,\n        Graph: Graph,\n        PathDefiner: PathDefiner\n    });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    // Imports ================================================================\n    var kendo = window.kendo,\n        Observable = kendo.Observable,\n        diagram = kendo.dataviz.diagram,\n        Class = kendo.Class,\n        deepExtend = kendo.deepExtend,\n        dataviz = kendo.dataviz,\n        Point = diagram.Point,\n        Rect = diagram.Rect,\n        RectAlign = diagram.RectAlign,\n        Matrix = diagram.Matrix,\n        Utils = diagram.Utils,\n        isUndefined = Utils.isUndefined,\n        isNumber = Utils.isNumber,\n        isString = Utils.isString,\n        MatrixVector = diagram.MatrixVector,\n\n        g = kendo.geometry,\n        d = kendo.drawing,\n\n        defined = kendo.util.defined,\n\n        inArray = $.inArray;\n\n    // Constants ==============================================================\n    var TRANSPARENT = \"transparent\",\n        Markers = {\n            none: \"none\",\n            arrowStart: \"ArrowStart\",\n            filledCircle: \"FilledCircle\",\n            arrowEnd: \"ArrowEnd\"\n        },\n        DEFAULTWIDTH = 100,\n        DEFAULTHEIGHT = 100,\n        FULL_CIRCLE_ANGLE = 360,\n        START = \"start\",\n        END = \"end\",\n        WIDTH = \"width\",\n        HEIGHT = \"height\",\n        X = \"x\",\n        Y = \"y\";\n\n    diagram.Markers = Markers;\n\n    var Scale = Class.extend({\n        init: function (x, y) {\n            this.x = x;\n            this.y = y;\n        },\n        toMatrix: function () {\n            return Matrix.scaling(this.x, this.y);\n        },\n        toString: function () {\n            return kendo.format(\"scale({0},{1})\", this.x, this.y);\n        },\n        invert: function() {\n            return new Scale(1/this.x, 1/this.y);\n        }\n    });\n\n    var Translation = Class.extend({\n        init: function (x, y) {\n            this.x = x;\n            this.y = y;\n        },\n        toMatrixVector: function () {\n            return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n        },\n        toMatrix: function () {\n            return Matrix.translation(this.x, this.y);\n        },\n        toString: function () {\n            return kendo.format(\"translate({0},{1})\", this.x, this.y);\n        },\n        plus: function (delta) {\n            this.x += delta.x;\n            this.y += delta.y;\n        },\n        times: function (factor) {\n            this.x *= factor;\n            this.y *= factor;\n        },\n        length: function () {\n            return Math.sqrt(this.x * this.x + this.y * this.y);\n        },\n        normalize: function () {\n            if (this.Length === 0) {\n                return;\n            }\n            this.times(1 / this.length());\n        },\n        invert: function() {\n            return new Translation(-this.x, -this.y);\n        }\n    });\n\n    var Rotation = Class.extend({\n        init: function (angle, x, y) {\n            this.x = x || 0;\n            this.y = y || 0;\n            this.angle = angle;\n        },\n        toString: function () {\n            if (this.x && this.y) {\n                return kendo.format(\"rotate({0},{1},{2})\", this.angle, this.x, this.y);\n            } else {\n                return kendo.format(\"rotate({0})\", this.angle);\n            }\n        },\n        toMatrix: function () {\n            return Matrix.rotation(this.angle, this.x, this.y); // T*R*T^-1\n        },\n        center: function () {\n            return new Point(this.x, this.y);\n        },\n        invert: function() {\n            return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n        }\n    });\n\n    Rotation.create = function (rotation) {\n        return new Rotation(rotation.angle, rotation.x, rotation.y);\n    };\n\n    Rotation.parse = function (str) {\n        var values = str.slice(1, str.length - 1).split(\",\"),\n            angle = values[0],\n            x = values[1],\n            y = values[2];\n        var rotation = new Rotation(angle, x, y);\n        return rotation;\n    };\n\n    var CompositeTransform = Class.extend({\n        init: function (x, y, scaleX, scaleY, angle, center) {\n            this.translate = new Translation(x, y);\n            if (scaleX !== undefined && scaleY !== undefined) {\n                this.scale = new Scale(scaleX, scaleY);\n            }\n            if (angle !== undefined) {\n                this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n            }\n        },\n        toString: function () {\n            var toString = function (transform) {\n                return transform ? transform.toString() : \"\";\n            };\n\n            return toString(this.translate) +\n                toString(this.rotate) +\n                toString(this.scale);\n        },\n\n        render: function (visual) {\n            visual._transform = this;\n            visual._renderTransform();\n        },\n\n        toMatrix: function () {\n            var m = Matrix.unit();\n\n            if (this.translate) {\n                m = m.times(this.translate.toMatrix());\n            }\n            if (this.rotate) {\n                m = m.times(this.rotate.toMatrix());\n            }\n            if (this.scale) {\n                m = m.times(this.scale.toMatrix());\n            }\n            return m;\n        },\n        invert: function() {\n            var rotate = this.rotate ? this.rotate.invert() : undefined,\n                rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(),\n                scale = this.scale ? this.scale.invert() : undefined,\n                scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n\n            var translatePoint = new Point(-this.translate.x, -this.translate.y);\n            translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n            var translate = new Translation(translatePoint.x, translatePoint.y);\n\n            var transform = new CompositeTransform();\n            transform.translate = translate;\n            transform.rotate = rotate;\n            transform.scale = scale;\n\n            return transform;\n        }\n    });\n\n    var AutoSizeableMixin = {\n        _setScale: function() {\n            var options = this.options;\n            var originWidth = this._originWidth;\n            var originHeight = this._originHeight;\n            var scaleX = options.width / originWidth;\n            var scaleY = options.height / originHeight;\n\n            if (!isNumber(scaleX)) {\n                scaleX = 1;\n            }\n            if (!isNumber(scaleY)) {\n                scaleY = 1;\n            }\n\n            this._transform.scale = new Scale(scaleX, scaleY);\n        },\n\n        _setTranslate: function() {\n            var options = this.options;\n            var x = options.x || 0;\n            var y = options.y || 0;\n            this._transform.translate = new Translation(x, y);\n        },\n\n        _initSize: function() {\n            var options = this.options;\n            var transform = false;\n            if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n                this._measure(true);\n                this._setScale();\n                transform = true;\n            }\n\n            if (defined(options.x) || defined(options.y)) {\n                this._setTranslate();\n                transform = true;\n            }\n\n            if (transform) {\n                this._renderTransform();\n            }\n        },\n\n        _updateSize: function(options) {\n            var update = false;\n\n            if (this.options.autoSize !== false && this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n                update = true;\n                this._measure(true);\n                this._setScale();\n            }\n\n            if (this._diffNumericOptions(options, [X, Y])) {\n                update = true;\n                this._setTranslate();\n            }\n\n            if (update) {\n                this._renderTransform();\n            }\n\n            return update;\n        }\n    };\n\n    var Element = Class.extend({\n        init: function (options) {\n            var element = this;\n            element.options = deepExtend({}, element.options, options);\n            element.id = element.options.id;\n            element._originSize = Rect.empty();\n            element._transform = new CompositeTransform();\n        },\n\n        visible: function (value) {\n            return this.drawingContainer().visible(value);\n        },\n\n        redraw: function (options) {\n            if (options && options.id) {\n                 this.id = options.id;\n            }\n        },\n\n        position: function (x, y) {\n            var options = this.options;\n            if (!defined(x)) {\n               return new Point(options.x, options.y);\n            }\n\n            if (defined(y)) {\n                options.x = x;\n                options.y = y;\n            } else if (x instanceof Point) {\n                options.x = x.x;\n                options.y = x.y;\n            }\n\n            this._transform.translate = new Translation(options.x, options.y);\n            this._renderTransform();\n        },\n\n        rotate: function (angle, center) {\n            if (defined(angle)) {\n                this._transform.rotate = new Rotation(angle, center.x, center.y);\n                this._renderTransform();\n            }\n            return this._transform.rotate || new Rotation(0);\n        },\n\n        drawingContainer: function() {\n            return this.drawingElement;\n        },\n\n        _renderTransform: function () {\n            var matrix = this._transform.toMatrix();\n            this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n        },\n\n        _hover: function () {},\n\n        _diffNumericOptions: diffNumericOptions,\n\n        _measure: function (force) {\n            var rect;\n            if (!this._measured || force) {\n                var box = this._boundingBox() || new g.Rect();\n                var startPoint = box.topLeft();\n                rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n                this._originSize = rect;\n                this._originWidth = rect.width;\n                this._originHeight = rect.height;\n                this._measured = true;\n            } else {\n                rect = this._originSize;\n            }\n            return rect;\n        },\n\n        _boundingBox: function() {\n            return this.drawingElement.rawBBox();\n        }\n    });\n\n    var VisualBase = Element.extend({\n        init: function(options) {\n            Element.fn.init.call(this, options);\n\n            options = this.options;\n            options.fill = normalizeDrawingOptions(options.fill);\n            options.stroke = normalizeDrawingOptions(options.stroke);\n        },\n\n        options: {\n            stroke: {\n                color: \"gray\",\n                width: 1\n            },\n            fill: {\n                color: TRANSPARENT\n            }\n        },\n\n        fill: function(color, opacity) {\n            this._fill({\n                color: getColor(color),\n                opacity: opacity\n            });\n        },\n\n        stroke: function(color, width, opacity) {\n            this._stroke({\n                color: getColor(color),\n                width: width,\n                opacity: opacity\n            });\n        },\n\n        redraw: function (options) {\n            if (options) {\n                var stroke = options.stroke;\n                var fill = options.fill;\n                if (stroke) {\n                    this._stroke(normalizeDrawingOptions(stroke));\n                }\n                if (fill) {\n                    this._fill(normalizeDrawingOptions(fill));\n                }\n\n                Element.fn.redraw.call(this, options);\n            }\n        },\n\n        _hover: function (show) {\n            var drawingElement = this.drawingElement;\n            var options = this.options;\n            var hover = options.hover;\n\n            if (hover && hover.fill) {\n                var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n                drawingElement.fill(fill.color, fill.opacity);\n            }\n        },\n\n        _stroke: function(strokeOptions) {\n            var options = this.options;\n            deepExtend(options, {\n                stroke: strokeOptions\n            });\n\n            strokeOptions = options.stroke;\n\n            var stroke = null;\n            if (strokeOptions.width > 0) {\n                stroke = {\n                    color: strokeOptions.color,\n                    width: strokeOptions.width,\n                    opacity: strokeOptions.opacity,\n                    dashType: strokeOptions.dashType\n                };\n            }\n\n            this.drawingElement.options.set(\"stroke\", stroke);\n        },\n\n        _fill: function(fillOptions) {\n            var options = this.options;\n            deepExtend(options, {\n                fill: fillOptions\n            });\n            var fill = options.fill;\n\n            this.drawingElement.fill(fill.color, fill.opacity);\n        }\n    });\n\n    var TextBlock = VisualBase.extend({\n        init: function (options) {\n            this._textColor(options);\n\n            VisualBase.fn.init.call(this, options);\n\n            this._font();\n            this._initText();\n            this._initSize();\n        },\n\n        options: {\n            fontSize: 15,\n            fontFamily: \"sans-serif\",\n            stroke: {\n                width: 0\n            },\n            fill: {\n                color: \"black\"\n            },\n            autoSize: true\n        },\n\n        _initText: function() {\n            var options = this.options;\n\n            this.drawingElement = new d.Text(defined(options.text) ? options.text : \"\", new g.Point(), {\n                fill: options.fill,\n                font: options.font\n            });\n\n            this._stroke();\n        },\n\n        _textColor: function(options) {\n            if (options && options.color) {\n                deepExtend(options, {\n                    fill: {\n                        color: options.color\n                    }\n                });\n            }\n        },\n\n        _font: function() {\n            var options = this.options;\n            if (options.fontFamily && defined(options.fontSize)) {\n                options.font = options.fontSize + \"px \" + options.fontFamily;\n            } else {\n                delete options.font;\n            }\n        },\n\n        content: function (text) {\n            return this.drawingElement.content(text);\n        },\n\n        redraw: function (options) {\n            if (options) {\n                var sizeChanged = false;\n                var textOptions = this.options;\n\n                this._textColor(options);\n\n                VisualBase.fn.redraw.call(this, options);\n\n                if (options.fontFamily || defined(options.fontSize)) {\n                    deepExtend(textOptions, {\n                        fontFamily: options.fontFamily,\n                        fontSize: options.fontSize\n                    });\n                    this._font();\n                    this.drawingElement.options.set(\"font\", textOptions.font);\n                    sizeChanged = true;\n                }\n\n                if (options.text) {\n                    this.content(options.text);\n                    sizeChanged = true;\n                }\n\n                if (!this._updateSize(options) && sizeChanged) {\n                    this._initSize();\n                }\n            }\n        }\n    });\n\n    deepExtend(TextBlock.fn, AutoSizeableMixin);\n\n    var Rectangle = VisualBase.extend({\n        init: function (options) {\n            VisualBase.fn.init.call(this, options);\n            this._initPath();\n            this._setPosition();\n        },\n\n        _setPosition: function() {\n            var options = this.options;\n            var x = options.x;\n            var y = options.y;\n            if (defined(x) || defined(y)) {\n                this.position(x || 0, y || 0);\n            }\n        },\n\n        redraw: function (options) {\n            if (options) {\n                VisualBase.fn.redraw.call(this, options);\n                if (this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n                    this._drawPath();\n                }\n                if (this._diffNumericOptions(options, [X, Y])) {\n                    this._setPosition();\n                }\n            }\n        },\n\n        _initPath: function() {\n            var options = this.options;\n            var drawingElement = this.drawingElement = new d.Path({\n                fill: options.fill,\n                stroke: options.stroke,\n                closed: true\n            });\n            this._drawPath();\n        },\n\n        _drawPath: function() {\n            var drawingElement = this.drawingElement;\n            var sizeOptions = sizeOptionsOrDefault(this.options);\n            var width = sizeOptions.width;\n            var height = sizeOptions.height;\n\n            drawingElement.segments.elements([\n                createSegment(0, 0),\n                createSegment(width, 0),\n                createSegment(width, height),\n                createSegment(0, height)\n            ]);\n        }\n    });\n\n    var MarkerBase = VisualBase.extend({\n        init: function(options) {\n           VisualBase.fn.init.call(this, options);\n           var anchor = this.options.anchor;\n           this.anchor = new g.Point(anchor.x, anchor.y);\n           this.createElement();\n        },\n\n        options: {\n           stroke: {\n                color: TRANSPARENT,\n                width: 0\n           },\n           fill: {\n                color: \"black\"\n           }\n        },\n\n        _transformToPath: function(point, path) {\n            var transform = path.transform();\n            if (point && transform) {\n                point = point.transformCopy(transform);\n            }\n            return point;\n        },\n\n        redraw: function(options) {\n            if (options) {\n                if (options.position) {\n                    this.options.position = options.position;\n                }\n\n                VisualBase.fn.redraw.call(this, options);\n            }\n        }\n    });\n\n    var CircleMarker = MarkerBase.extend({\n        options: {\n            radius: 4,\n            anchor: {\n                x: 0,\n                y: 0\n            }\n        },\n\n        createElement: function() {\n            var options = this.options;\n            this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n                fill: options.fill,\n                stroke: options.stroke\n            });\n        },\n\n        positionMarker: function(path) {\n            var options = this.options;\n            var position = options.position;\n            var segments = path.segments;\n            var targetSegment;\n            var point;\n\n            if (position == START) {\n                targetSegment = segments[0];\n            } else {\n                targetSegment = segments[segments.length - 1];\n            }\n            if (targetSegment) {\n                point = this._transformToPath(targetSegment.anchor(), path);\n                this.drawingElement.transform(g.transform().translate(point.x, point.y));\n            }\n        }\n    });\n\n    var ArrowMarker = MarkerBase.extend({\n        options: {\n            path: \"M 0 0 L 10 5 L 0 10 L 3 5 z\"           ,\n            anchor: {\n                x: 10,\n                y: 5\n            }\n        },\n\n        createElement: function() {\n            var options = this.options;\n            this.drawingElement = d.Path.parse(options.path, {\n                fill: options.fill,\n                stroke: options.stroke\n            });\n        },\n\n        positionMarker: function(path) {\n            var points = this._linePoints(path);\n            var start = points.start;\n            var end = points.end;\n            var transform = g.transform();\n            if (start) {\n                transform.rotate(lineAngle(start, end), end);\n            }\n\n            if (end) {\n                var anchor = this.anchor;\n                var translate = end.clone().translate(-anchor.x, -anchor.y);\n                transform.translate(translate.x, translate.y);\n            }\n            this.drawingElement.transform(transform);\n        },\n\n        _linePoints: function(path) {\n            var options = this.options;\n            var segments = path.segments;\n            var startPoint, endPoint, targetSegment;\n            if (options.position == START) {\n                targetSegment = segments[0];\n                if (targetSegment) {\n                    endPoint = targetSegment.anchor();\n                    startPoint = targetSegment.controlOut();\n                    var nextSegment = segments[1];\n                    if (!startPoint && nextSegment) {\n                        startPoint = nextSegment.anchor();\n                    }\n                }\n            } else {\n                targetSegment = segments[segments.length - 1];\n                if (targetSegment) {\n                    endPoint = targetSegment.anchor();\n                    startPoint = targetSegment.controlIn();\n                    var prevSegment = segments[segments.length - 2];\n                    if (!startPoint && prevSegment) {\n                        startPoint = prevSegment.anchor();\n                    }\n                }\n            }\n            if (endPoint) {\n                return {\n                    start: this._transformToPath(startPoint, path),\n                    end: this._transformToPath(endPoint, path)\n                };\n            }\n        }\n    });\n\n    var MarkerPathMixin = {\n        _getPath: function(position) {\n            var path = this.drawingElement;\n            if (path instanceof d.MultiPath) {\n                if (position == START) {\n                    path = path.paths[0];\n                } else {\n                    path = path.paths[path.paths.length - 1];\n                }\n            }\n            if (path && path.segments.length) {\n                return path;\n            }\n        },\n\n        _removeMarker: function(position) {\n            var marker = this._markers[position];\n            if (marker) {\n                this.drawingContainer().remove(marker.drawingElement);\n                delete this._markers[position];\n            }\n        },\n\n        _createMarkers: function() {\n            var options = this.options;\n            var startCap = options.startCap;\n            var endCap = options.endCap;\n            this._markers = {};\n            this._markers[START] = this._createMarker(startCap, START);\n            this._markers[END] = this._createMarker(endCap, END);\n        },\n\n        _createMarker: function(type, position) {\n            var path = this._getPath(position);\n            var markerType, marker;\n            if (!path) {\n                this._removeMarker(position);\n                return;\n            }\n\n            if (type == Markers.filledCircle) {\n                markerType = CircleMarker;\n            } else if (type == Markers.arrowStart || type == Markers.arrowEnd){\n                markerType = ArrowMarker;\n            } else {\n                this._removeMarker(position);\n            }\n            if (markerType) {\n                marker = new markerType({\n                    position: position\n                });\n                marker.positionMarker(path);\n                this.drawingContainer().append(marker.drawingElement);\n\n                return marker;\n            }\n        },\n\n        _positionMarker : function(position) {\n            var marker = this._markers[position];\n\n            if (marker) {\n                var path = this._getPath(position);\n                if (path) {\n                    marker.positionMarker(path);\n                } else {\n                    this._removeMarker(position);\n                }\n            }\n        },\n\n        _capMap: {\n            start: \"startCap\",\n            end: \"endCap\"\n        },\n\n        _redrawMarker: function(pathChange, position, options) {\n            var pathOptions = this.options;\n            var cap = this._capMap[position];\n            var optionsCap = options[cap];\n            var created = false;\n            if (optionsCap && pathOptions[cap] != optionsCap) {\n                pathOptions[cap] = optionsCap;\n                this._removeMarker(position);\n                this._markers[position] = this._createMarker(optionsCap, position);\n                created  = true;\n            } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n                this._markers[position] = this._createMarker(pathOptions[cap], position);\n                created = true;\n            }\n            return created;\n        },\n\n        _redrawMarkers: function (pathChange, options) {\n            if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n                this._positionMarker(START);\n            }\n            if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n                this._positionMarker(END);\n            }\n        }\n    };\n\n    var Path = VisualBase.extend({\n        init: function (options) {\n            VisualBase.fn.init.call(this, options);\n            this.container = new d.Group();\n            this._createElements();\n            this._initSize();\n        },\n\n        options: {\n            autoSize: true\n        },\n\n        drawingContainer: function() {\n            return this.container;\n        },\n\n        data: function (value) {\n            var options = this.options;\n            if (value) {\n                if (options.data != value) {\n                   options.data = value;\n                   this._setData(value);\n                   this._initSize();\n                   this._redrawMarkers(true, {});\n                }\n            } else {\n                return options.data;\n            }\n        },\n\n        redraw: function (options) {\n            if (options) {\n                VisualBase.fn.redraw.call(this, options);\n\n                var pathOptions = this.options;\n                var data = options.data;\n\n                if (defined(data) && pathOptions.data != data) {\n                    pathOptions.data = data;\n                    this._setData(data);\n                    if (!this._updateSize(options)) {\n                        this._initSize();\n                    }\n                    this._redrawMarkers(true, options);\n                } else {\n                    this._updateSize(options);\n                    this._redrawMarkers(false, options);\n                }\n            }\n        },\n\n        _createElements: function() {\n            var options = this.options;\n\n            this.drawingElement = d.Path.parse(options.data || \"\", {\n                fill: options.fill,\n                stroke: options.stroke\n            });\n            this.container.append(this.drawingElement);\n            this._createMarkers();\n        },\n\n        _setData: function(data) {\n            var drawingElement = this.drawingElement;\n            var multipath = d.Path.parse(data || \"\");\n            var paths = multipath.paths.slice(0);\n            multipath.paths.elements([]);\n            drawingElement.paths.elements(paths);\n        }\n    });\n\n    deepExtend(Path.fn, AutoSizeableMixin);\n    deepExtend(Path.fn, MarkerPathMixin);\n\n    var Line = VisualBase.extend({\n        init: function (options) {\n            VisualBase.fn.init.call(this, options);\n            this.container = new d.Group();\n            this._initPath();\n            this._createMarkers();\n        },\n\n        drawingContainer: function() {\n            return this.container;\n        },\n\n        redraw: function (options) {\n            if (options) {\n                options = options || {};\n                var from = options.from;\n                var to = options.to;\n                if (from) {\n                    this.options.from = from;\n                }\n\n                if (to) {\n                    this.options.to = to;\n                }\n\n                if (from || to) {\n                    this._drawPath();\n                    this._redrawMarkers(true, options);\n                } else {\n                    this._redrawMarkers(false, options);\n                }\n\n                VisualBase.fn.redraw.call(this, options);\n            }\n        },\n\n        _initPath: function() {\n            var options = this.options;\n            var drawingElement = this.drawingElement = new d.Path({\n                fill: options.fill,\n                stroke: options.stroke\n            });\n            this._drawPath();\n            this.container.append(drawingElement);\n        },\n\n        _drawPath: function() {\n            var options = this.options;\n            var drawingElement = this.drawingElement;\n            var from = options.from || new Point();\n            var to = options.to || new Point();\n\n            drawingElement.segments.elements([\n                createSegment(from.x, from.y),\n                createSegment(to.x, to.y)\n            ]);\n        }\n    });\n\n    deepExtend(Line.fn, MarkerPathMixin);\n\n    var Polyline = VisualBase.extend({\n        init: function (options) {\n            VisualBase.fn.init.call(this, options);\n            this.container = new d.Group();\n            this._initPath();\n            this._createMarkers();\n        },\n\n        drawingContainer: function() {\n            return this.container;\n        },\n\n        points: function (points) {\n            var options = this.options;\n            if (points) {\n                options.points = points;\n                this._updatePath();\n            } else {\n                return options.points;\n            }\n        },\n\n        redraw: function (options) {\n            if (options) {\n                var points = options.points;\n                VisualBase.fn.redraw.call(this, options);\n\n                if (points && this._pointsDiffer(points)) {\n                    this.points(points);\n                    this._redrawMarkers(true, options);\n                } else {\n                    this._redrawMarkers(false, options);\n                }\n            }\n        },\n\n        _initPath: function() {\n            var options = this.options;\n            this.drawingElement = new d.Path({\n                fill: options.fill,\n                stroke: options.stroke\n            });\n\n            this.container.append(this.drawingElement);\n\n            if (options.points) {\n                this._updatePath();\n            }\n        },\n\n        _pointsDiffer: function(points) {\n            var currentPoints = this.options.points;\n            var differ = currentPoints.length !== points.length;\n            if (!differ) {\n                for (var i = 0; i < points.length; i++) {\n                    if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n                        differ = true;\n                        break;\n                    }\n                }\n            }\n\n            return differ;\n        },\n\n        _updatePath: function() {\n            var drawingElement = this.drawingElement;\n            var options = this.options;\n            var points = options.points;\n            var segments = [];\n            var point;\n            for (var i = 0; i < points.length; i++) {\n                point = points[i];\n                segments.push(createSegment(point.x, point.y));\n            }\n\n            drawingElement.segments.elements(segments);\n        },\n\n        options: {\n            points: []\n        }\n    });\n\n    deepExtend(Polyline.fn, MarkerPathMixin);\n\n    var Image = Element.extend({\n        init: function (options) {\n            Element.fn.init.call(this, options);\n\n            this._initImage();\n        },\n\n        redraw: function (options) {\n            if (options) {\n                if (options.source) {\n                    this.drawingElement.src(options.source);\n                }\n\n                if (this._diffNumericOptions(options, [WIDTH, HEIGHT, X, Y])) {\n                    this.drawingElement.rect(this._rect());\n                }\n\n                Element.fn.redraw.call(this, options);\n            }\n        },\n\n        _initImage: function() {\n            var options = this.options;\n            var rect = this._rect();\n\n            this.drawingElement = new d.Image(options.source, rect, {});\n        },\n\n        _rect: function() {\n            var sizeOptions = sizeOptionsOrDefault(this.options);\n            var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n            var size = new g.Size(sizeOptions.width, sizeOptions.height);\n\n            return new g.Rect(origin, size);\n        }\n    });\n\n    var Group = Element.extend({\n        init: function (options) {\n            this.children = [];\n            Element.fn.init.call(this, options);\n            this.drawingElement = new d.Group();\n            this._initSize();\n        },\n\n        options: {\n            autoSize: false\n        },\n\n        append: function (visual) {\n            this.drawingElement.append(visual.drawingContainer());\n            this.children.push(visual);\n            this._childrenChange = true;\n        },\n\n        remove: function (visual) {\n            if (this._remove(visual)) {\n                this._childrenChange = true;\n            }\n        },\n\n        _remove: function(visual) {\n            var index = inArray(visual, this.children);\n            if (index >= 0) {\n                this.drawingElement.removeAt(index);\n                this.children.splice(index, 1);\n                return true;\n            }\n        },\n\n        clear: function () {\n            this.drawingElement.clear();\n            this.children = [];\n            this._childrenChange = true;\n        },\n\n        toFront: function (visuals) {\n            var visual;\n\n            for (var i = 0; i < visuals.length; i++) {\n                visual = visuals[i];\n                if (this._remove(visual)) {\n                    this.append(visual);\n                }\n            }\n        },\n        //TO DO: add drawing group support for moving and inserting children\n        toBack: function (visuals) {\n            this._reorderChildren(visuals, 0);\n        },\n\n        toIndex: function (visuals, indices) {\n            this._reorderChildren(visuals, indices);\n        },\n\n        _reorderChildren: function(visuals, indices) {\n            var group = this.drawingElement;\n            var drawingChildren = group.children.slice(0);\n            var children = this.children;\n            var fixedPosition = isNumber(indices);\n            var i, index, toIndex, drawingElement, visual;\n\n            for (i = 0; i < visuals.length; i++) {\n                visual = visuals[i];\n                drawingElement = visual.drawingContainer();\n\n                index = inArray(visual, children);\n                if (index >= 0) {\n                    drawingChildren.splice(index, 1);\n                    children.splice(index, 1);\n\n                    toIndex = fixedPosition ? indices : indices[i];\n\n                    drawingChildren.splice(toIndex, 0, drawingElement);\n                    children.splice(toIndex, 0, visual);\n                }\n            }\n            group.clear();\n            group.append.apply(group, drawingChildren);\n        },\n\n        redraw: function (options) {\n            if (options) {\n                if (this._childrenChange) {\n                    this._childrenChange = false;\n                    if (!this._updateSize(options)) {\n                        this._initSize();\n                    }\n                } else {\n                    this._updateSize(options);\n                }\n\n                Element.fn.redraw.call(this, options);\n            }\n        },\n\n        _boundingBox: function() {\n            var children = this.children;\n            var boundingBox;\n            var visual, childBoundingBox;\n            for (var i = 0; i < children.length; i++) {\n                visual = children[i];\n                if (visual.visible() && visual._includeInBBox !== false) {\n                    childBoundingBox = visual.drawingContainer().clippedBBox(null);\n                    if (childBoundingBox) {\n                        if (boundingBox) {\n                            boundingBox = Rect.union(boundingBox, childBoundingBox);\n                        } else {\n                            boundingBox = childBoundingBox;\n                        }\n                    }\n                }\n            }\n\n            return boundingBox;\n        }\n    });\n\n    deepExtend(Group.fn, AutoSizeableMixin);\n\n    var Circle = VisualBase.extend({\n        init: function (options) {\n            VisualBase.fn.init.call(this, options);\n            this._initCircle();\n            this._initSize();\n        },\n\n        redraw: function (options) {\n            if (options) {\n                var circleOptions = this.options;\n\n                if (options.center) {\n                    deepExtend(circleOptions, {\n                        center: options.center\n                    });\n                    this._center.move(circleOptions.center.x, circleOptions.center.y);\n                }\n\n                if (this._diffNumericOptions(options, [\"radius\"])) {\n                    this._circle.setRadius(circleOptions.radius);\n                }\n\n                this._updateSize(options);\n\n                VisualBase.fn.redraw.call(this, options);\n            }\n        },\n\n        _initCircle: function() {\n            var options = this.options;\n            var width = options.width;\n            var height = options.height;\n            var radius = options.radius;\n            if (!defined(radius)) {\n                if (!defined(width)) {\n                    width = height;\n                }\n                if (!defined(height)) {\n                    height = width;\n                }\n                options.radius = radius = Math.min(width, height) / 2;\n            }\n\n            var center = options.center || {x: radius, y: radius};\n            this._center = new g.Point(center.x, center.y);\n            this._circle = new g.Circle(this._center, radius);\n            this.drawingElement = new d.Circle(this._circle, {\n                fill: options.fill,\n                stroke: options.stroke\n            });\n        }\n    });\n    deepExtend(Circle.fn, AutoSizeableMixin);\n\n    var Canvas = Class.extend({\n        init: function (element, options) {\n            options = options || {};\n            this.element = element;\n            this.surface = d.Surface.create(element, options);\n            if (kendo.isFunction(this.surface.translate)) {\n                this.translate = this._translate;\n            }\n\n            this.drawingElement = new d.Group();\n            this._viewBox = new Rect(0, 0, options.width, options.height);\n            this.size(this._viewBox);\n        },\n\n        bounds: function () {\n            var box = this.drawingElement.clippedBBox();\n            return new Rect(0, 0, box.width(), box.height());\n        },\n\n        size: function (size) {\n            var viewBox = this._viewBox;\n            if (defined(size)) {\n                viewBox.width = size.width;\n                viewBox.height = size.height;\n                this.surface.setSize(size);\n            }\n            return {\n                width: viewBox.width,\n                height: viewBox.height\n            };\n        },\n\n        _translate: function (x, y) {\n            var viewBox = this._viewBox;\n            if (defined(x) && defined(y)) {\n                viewBox.x = x;\n                viewBox.y = y;\n                this.surface.translate({x: x, y: y});\n            }\n            return {\n                x: viewBox.x,\n                y: viewBox.y\n            };\n        },\n\n        draw: function() {\n            this.surface.draw(this.drawingElement);\n        },\n\n        append: function (visual) {\n            this.drawingElement.append(visual.drawingContainer());\n            return this;\n        },\n\n        remove: function (visual) {\n            this.drawingElement.remove(visual.drawingContainer());\n        },\n\n        insertBefore: function (visual, beforeVisual) {\n\n        },\n\n        clear: function () {\n            this.drawingElement.clear();\n        },\n\n        destroy: function(clearHtml) {\n            this.surface.destroy();\n            if(clearHtml) {\n                $(this.element).remove();\n            }\n        }\n    });\n\n    // Helper functions ===========================================\n\n    function sizeOptionsOrDefault(options) {\n        return {\n            x: options.x || 0,\n            y: options.y || 0,\n            width: options.width || 0,\n            height: options.height || 0\n        };\n    }\n\n    function normalizeDrawingOptions(options) {\n        if (options) {\n            var drawingOptions = options;\n\n            if (isString(drawingOptions)) {\n                drawingOptions = {\n                    color: drawingOptions\n                };\n            }\n\n            if (drawingOptions.color) {\n                drawingOptions.color = getColor(drawingOptions.color);\n            }\n            return drawingOptions;\n        }\n    }\n\n    function getColor(value) {\n        var color;\n        if (value != TRANSPARENT) {\n            color = new d.Color(value).toHex();\n        } else {\n            color = value;\n        }\n        return color;\n    }\n\n    function lineAngle(p1, p2) {\n        var xDiff = p2.x - p1.x;\n        var yDiff = p2.y - p1.y;\n        var angle = kendo.util.deg(Math.atan2(yDiff, xDiff));\n        return angle;\n    }\n\n    function diffNumericOptions(options, fields) {\n        var elementOptions = this.options;\n        var hasChanges = false;\n        var value, field;\n        for (var i = 0; i < fields.length; i++) {\n            field = fields[i];\n            value = options[field];\n            if (isNumber(value) && elementOptions[field] !== value) {\n                elementOptions[field] = value;\n                hasChanges = true;\n            }\n        }\n\n        return hasChanges;\n    }\n\n    function createSegment(x, y) {\n        return new d.Segment(new g.Point(x, y));\n    }\n\n    // Exports ================================================================\n    kendo.deepExtend(diagram, {\n        init: function (element) {\n            kendo.init(element, diagram.ui);\n        },\n        diffNumericOptions: diffNumericOptions,\n        Element: Element,\n        Scale: Scale,\n        Translation: Translation,\n        Rotation: Rotation,\n        Circle: Circle,\n        Group: Group,\n        Rectangle: Rectangle,\n        Canvas: Canvas,\n        Path: Path,\n        Line: Line,\n        MarkerBase: MarkerBase,\n        ArrowMarker: ArrowMarker,\n        CircleMarker: CircleMarker,\n        Polyline: Polyline,\n        CompositeTransform: CompositeTransform,\n        TextBlock: TextBlock,\n        Image: Image,\n        VisualBase: VisualBase\n    });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n        // Imports ================================================================\n        var kendo = window.kendo,\n            dataviz = kendo.dataviz,\n            diagram = dataviz.diagram,\n            Class = kendo.Class,\n            Group = diagram.Group,\n            TextBlock = diagram.TextBlock,\n            Rect = diagram.Rect,\n            Rectangle = diagram.Rectangle,\n            Utils = diagram.Utils,\n            isUndefined = Utils.isUndefined,\n            Point = diagram.Point,\n            Circle = diagram.Circle,\n            Path = diagram.Path,\n            Ticker = diagram.Ticker,\n            deepExtend = kendo.deepExtend,\n            Movable = kendo.ui.Movable,\n            browser = kendo.support.browser,\n            defined = kendo.util.defined,\n            proxy = $.proxy;\n\n        // Constants ==============================================================\n        var Cursors = {\n                arrow: \"default\",\n                grip: \"pointer\",\n                cross: \"pointer\",\n                add: \"pointer\",\n                move: \"move\",\n                select: \"pointer\",\n                south: \"s-resize\",\n                east: \"e-resize\",\n                west: \"w-resize\",\n                north: \"n-resize\",\n                rowresize: \"row-resize\",\n                colresize: \"col-resize\"\n            },\n            HITTESTDISTANCE = 10,\n            AUTO = \"Auto\",\n            TOP = \"Top\",\n            RIGHT = \"Right\",\n            LEFT = \"Left\",\n            BOTTOM = \"Bottom\",\n            DEFAULTCONNECTORNAMES = [TOP, RIGHT, BOTTOM, LEFT, AUTO],\n            ITEMROTATE = \"itemRotate\",\n            ITEMBOUNDSCHANGE = \"itemBoundsChange\",\n            MOUSE_ENTER = \"mouseEnter\",\n            MOUSE_LEAVE = \"mouseLeave\",\n            ZOOM_START = \"zoomStart\",\n            ZOOM_END = \"zoomEnd\",\n            SCROLL_MIN = -20000,\n            SCROLL_MAX = 20000,\n            FRICTION = 0.90,\n            FRICTION_MOBILE = 0.93,\n            VELOCITY_MULTIPLIER = 5,\n            TRANSPARENT = \"transparent\",\n            PAN = \"pan\";\n\n        diagram.Cursors = Cursors;\n\n        function selectSingle(item, meta) {\n            if (item.isSelected) {\n                if (meta.ctrlKey) {\n                    item.select(false);\n                }\n            } else {\n                item.diagram.select(item, {addToSelection: meta.ctrlKey});\n            }\n        }\n\n        var PositionAdapter = kendo.Class.extend({\n            init: function (layoutState) {\n                this.layoutState = layoutState;\n                this.diagram = layoutState.diagram;\n            },\n            initState: function () {\n                this.froms = [];\n                this.tos = [];\n                this.subjects = [];\n                function pusher(id, bounds) {\n                    var shape = this.diagram.getShapeById(id);\n                    if (shape) {\n                        this.subjects.push(shape);\n                        this.froms.push(shape.bounds().topLeft());\n                        this.tos.push(bounds.topLeft());\n                    }\n                }\n\n                this.layoutState.nodeMap.forEach(pusher, this);\n            },\n            update: function (tick) {\n                if (this.subjects.length <= 0) {\n                    return;\n                }\n                for (var i = 0; i < this.subjects.length; i++) {\n                    //todo: define a Lerp function instead\n                    this.subjects[i].position(\n                        new Point(this.froms[i].x + (this.tos[i].x - this.froms[i].x) * tick, this.froms[i].y + (this.tos[i].y - this.froms[i].y) * tick)\n                    );\n                }\n            }\n        });\n\n        var LayoutUndoUnit = Class.extend({\n            init: function (initialState, finalState, animate) {\n                if (isUndefined(animate)) {\n                    this.animate = false;\n                }\n                else {\n                    this.animate = animate;\n                }\n                this._initialState = initialState;\n                this._finalState = finalState;\n                this.title = \"Diagram layout\";\n            },\n            undo: function () {\n                this.setState(this._initialState);\n            },\n            redo: function () {\n                this.setState(this._finalState);\n            },\n            setState: function (state) {\n                var diagram = state.diagram;\n                if (this.animate) {\n                    state.linkMap.forEach(\n                        function (id, points) {\n                            var conn = diagram.getShapeById(id);\n                            conn.visible(false);\n                            if (conn) {\n                                conn.points(points);\n                            }\n                        }\n                    );\n                    var ticker = new Ticker();\n                    ticker.addAdapter(new PositionAdapter(state));\n                    ticker.onComplete(function () {\n                        state.linkMap.forEach(\n                            function (id) {\n                                var conn = diagram.getShapeById(id);\n                                conn.visible(true);\n                            }\n                        );\n                    });\n                    ticker.play();\n                }\n                else {\n                    state.nodeMap.forEach(function (id, bounds) {\n                        var shape = diagram.getShapeById(id);\n                        if (shape) {\n                            shape.position(bounds.topLeft());\n                        }\n                    });\n                    state.linkMap.forEach(\n                        function (id, points) {\n                            var conn = diagram.getShapeById(id);\n                            if (conn) {\n                                conn.points(points);\n                            }\n                        }\n                    );\n                }\n            }\n        });\n\n        var CompositeUnit = Class.extend({\n            init: function (unit) {\n                this.units = [];\n                this.title = \"Composite unit\";\n                if (unit !== undefined) {\n                    this.units.push(unit);\n                }\n            },\n            add: function (undoUnit) {\n                this.units.push(undoUnit);\n            },\n            undo: function () {\n                for (var i = 0; i < this.units.length; i++) {\n                    this.units[i].undo();\n                }\n            },\n            redo: function () {\n                for (var i = 0; i < this.units.length; i++) {\n                    this.units[i].redo();\n                }\n            }\n        });\n\n        var ConnectionEditUnit = Class.extend({\n            init: function (item, redoSource, redoTarget) {\n                this.item = item;\n                this._redoSource = redoSource;\n                this._redoTarget = redoTarget;\n                if (defined(redoSource)) {\n                    this._undoSource = item.source();\n                }\n\n                if (defined(redoTarget)) {\n                    this._undoTarget = item.target();\n                }\n                this.title = \"Connection Editing\";\n            },\n            undo: function () {\n                if (this._undoSource !== undefined) {\n                    this.item._updateConnector(this._undoSource, \"source\");\n                }\n\n                if (this._undoTarget !== undefined) {\n                    this.item._updateConnector(this._undoTarget, \"target\");\n                }\n\n                this.item.updateModel();\n            },\n            redo: function () {\n                if (this._redoSource !== undefined) {\n                    this.item._updateConnector(this._redoSource, \"source\");\n                }\n\n                if (this._redoTarget !== undefined) {\n                    this.item._updateConnector(this._redoTarget, \"target\");\n                }\n\n                this.item.updateModel();\n            }\n        });\n\n        var ConnectionEditUndoUnit = Class.extend({\n            init: function (item, undoSource, undoTarget) {\n                this.item = item;\n                this._undoSource = undoSource;\n                this._undoTarget = undoTarget;\n                this._redoSource = item.source();\n                this._redoTarget = item.target();\n                this.title = \"Connection Editing\";\n            },\n            undo: function () {\n                this.item._updateConnector(this._undoSource, \"source\");\n                this.item._updateConnector(this._undoTarget, \"target\");\n                this.item.updateModel();\n            },\n            redo: function () {\n                this.item._updateConnector(this._redoSource, \"source\");\n                this.item._updateConnector(this._redoTarget, \"target\");\n                this.item.updateModel();\n            }\n        });\n\n        var DeleteConnectionUnit = Class.extend({\n            init: function (connection) {\n                this.connection = connection;\n                this.diagram = connection.diagram;\n                this.targetConnector = connection.targetConnector;\n                this.title = \"Delete connection\";\n            },\n            undo: function () {\n                this.diagram._addConnection(this.connection, false);\n            },\n            redo: function () {\n                this.diagram.remove(this.connection, false);\n            }\n        });\n\n        var DeleteShapeUnit = Class.extend({\n            init: function (shape) {\n                this.shape = shape;\n                this.diagram = shape.diagram;\n                this.title = \"Deletion\";\n            },\n            undo: function () {\n                this.diagram._addShape(this.shape, { undoable: false });\n                this.shape.select(false);\n            },\n            redo: function () {\n                this.shape.select(false);\n                this.diagram.remove(this.shape, false);\n            }\n        });\n        /**\n         * Holds the undoredo state when performing a rotation, translation or scaling. The adorner is optional.\n         * @type {*}\n         */\n        var TransformUnit = Class.extend({\n            init: function (shapes, undoStates, adorner) {\n                this.shapes = shapes;\n                this.undoStates = undoStates;\n                this.title = \"Transformation\";\n                this.redoStates = [];\n                this.adorner = adorner;\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    this.redoStates.push(shape.bounds());\n                }\n            },\n            undo: function () {\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    shape.bounds(this.undoStates[i]);\n                    if (shape.hasOwnProperty(\"layout\")) {\n                        shape.layout(shape, this.redoStates[i], this.undoStates[i]);\n                    }\n                    shape.updateModel();\n                }\n                if (this.adorner) {\n                    this.adorner.refreshBounds();\n                    this.adorner.refresh();\n                }\n            },\n            redo: function () {\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    shape.bounds(this.redoStates[i]);\n                    // the 'layout' property, if implemented, lets the shape itself work out what to do with the new bounds\n                    if (shape.hasOwnProperty(\"layout\")) {\n                        shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n                    }\n                    shape.updateModel();\n                }\n\n                if (this.adorner) {\n                    this.adorner.refreshBounds();\n                    this.adorner.refresh();\n                }\n            }\n        });\n\n        var AddConnectionUnit = Class.extend({\n            init: function (connection, diagram) {\n                this.connection = connection;\n                this.diagram = diagram;\n                this.title = \"New connection\";\n            },\n\n            undo: function () {\n                this.diagram.remove(this.connection, false);\n            },\n\n            redo: function () {\n                this.diagram._addConnection(this.connection, false);\n            }\n        });\n\n        var AddShapeUnit = Class.extend({\n            init: function (shape, diagram) {\n                this.shape = shape;\n                this.diagram = diagram;\n                this.title = \"New shape\";\n            },\n\n            undo: function () {\n                this.diagram.deselect();\n                this.diagram.remove(this.shape, false);\n            },\n\n            redo: function () {\n                this.diagram._addShape(this.shape, false);\n            }\n        });\n\n        var PanUndoUnit = Class.extend({\n            init: function (initialPosition, finalPosition, diagram) {\n                this.initial = initialPosition;\n                this.finalPos = finalPosition;\n                this.diagram = diagram;\n                this.title = \"Pan Unit\";\n            },\n            undo: function () {\n                this.diagram.pan(this.initial);\n            },\n            redo: function () {\n                this.diagram.pan(this.finalPos);\n            }\n        });\n\n        var RotateUnit = Class.extend({\n            init: function (adorner, shapes, undoRotates) {\n                this.shapes = shapes;\n                this.undoRotates = undoRotates;\n                this.title = \"Rotation\";\n                this.redoRotates = [];\n                this.redoAngle = adorner._angle;\n                this.adorner = adorner;\n                this.center = adorner._innerBounds.center();\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    this.redoRotates.push(shape.rotate().angle);\n                }\n            },\n            undo: function () {\n                var i, shape;\n                for (i = 0; i < this.shapes.length; i++) {\n                    shape = this.shapes[i];\n                    shape.rotate(this.undoRotates[i], this.center, false);\n                    if (shape.hasOwnProperty(\"layout\")) {\n                        shape.layout(shape);\n                    }\n                    shape.updateModel();\n                }\n                if (this.adorner) {\n                    this.adorner._initialize();\n                    this.adorner.refresh();\n                }\n            },\n            redo: function () {\n                var i, shape;\n                for (i = 0; i < this.shapes.length; i++) {\n                    shape = this.shapes[i];\n                    shape.rotate(this.redoRotates[i], this.center, false);\n                    if (shape.hasOwnProperty(\"layout\")) {\n                        shape.layout(shape);\n                    }\n                    shape.updateModel();\n                }\n                if (this.adorner) {\n                    this.adorner._initialize();\n                    this.adorner.refresh();\n                }\n            }\n        });\n\n        var ToFrontUnit = Class.extend({\n            init: function (diagram, items, initialIndices) {\n                this.diagram = diagram;\n                this.indices = initialIndices;\n                this.items = items;\n                this.title = \"Rotate Unit\";\n            },\n            undo: function () {\n                this.diagram._toIndex(this.items, this.indices);\n            },\n            redo: function () {\n                this.diagram.toFront(this.items, false);\n            }\n        });\n\n        var ToBackUnit = Class.extend({\n            init: function (diagram, items, initialIndices) {\n                this.diagram = diagram;\n                this.indices = initialIndices;\n                this.items = items;\n                this.title = \"Rotate Unit\";\n            },\n            undo: function () {\n                this.diagram._toIndex(this.items, this.indices);\n            },\n            redo: function () {\n                this.diagram.toBack(this.items, false);\n            }\n        });\n\n        /**\n         * Undo-redo service.\n         */\n        var UndoRedoService = kendo.Observable.extend({\n            init: function (options) {\n                kendo.Observable.fn.init.call(this, options);\n                this.bind(this.events, options);\n                this.stack = [];\n                this.index = 0;\n                this.capacity = 100;\n            },\n\n            events: [\"undone\", \"redone\"],\n\n            /**\n             * Starts the collection of units. Add those with\n             * the addCompositeItem method and call commit. Or cancel to forget about it.\n             */\n            begin: function () {\n                this.composite = new CompositeUnit();\n            },\n\n            /**\n             * Cancels the collection process of unit started with 'begin'.\n             */\n            cancel: function () {\n                this.composite = undefined;\n            },\n\n            /**\n             * Commits a batch of units.\n             */\n            commit: function (execute) {\n                if (this.composite.units.length > 0) {\n                    this._restart(this.composite, execute);\n                }\n                this.composite = undefined;\n            },\n\n            /**\n             * Adds a unit as part of the begin-commit batch.\n             * @param undoUnit\n             */\n            addCompositeItem: function (undoUnit) {\n                if (this.composite) {\n                    this.composite.add(undoUnit);\n                } else {\n                    this.add(undoUnit);\n                }\n            },\n\n            /**\n             * Standard addition of a unit. See also the batch version; begin-addCompositeUnit-commit methods.\n             * @param undoUnit The unit to be added.\n             * @param execute If false, the unit will be added but not executed.\n             */\n            add: function (undoUnit, execute) {\n                this._restart(undoUnit, execute);\n            },\n\n            /**\n             * Returns the number of undoable unit in the stack.\n             * @returns {Number}\n             */\n            count: function () {\n                return this.stack.length;\n            },\n\n            /**\n             * Rollback of the unit on top of the stack.\n             */\n            undo: function () {\n                if (this.index > 0) {\n                    this.index--;\n                    this.stack[this.index].undo();\n                    this.trigger(\"undone\");\n                }\n            },\n\n            /**\n             * Redo of the last undone action.\n             */\n            redo: function () {\n                if (this.stack.length > 0 && this.index < this.stack.length) {\n                    this.stack[this.index].redo();\n                    this.index++;\n                    this.trigger(\"redone\");\n                }\n            },\n\n            _restart: function (composite, execute) {\n                // throw away anything beyond this point if this is a new branch\n                this.stack.splice(this.index, this.stack.length - this.index);\n                this.stack.push(composite);\n                if (execute !== false) {\n                    this.redo();\n                } else {\n                    this.index++;\n                }\n                // check the capacity\n                if (this.stack.length > this.capacity) {\n                    this.stack.splice(0, this.stack.length - this.capacity);\n                    this.index = this.capacity; //points to the end of the stack\n                }\n            },\n\n            /**\n             * Clears the stack.\n             */\n            clear: function () {\n                this.stack = [];\n                this.index = 0;\n            }\n        });\n\n// Tools =========================================\n\n        var EmptyTool = Class.extend({\n            init: function (toolService) {\n                this.toolService = toolService;\n            },\n            start: function () {\n            },\n            move: function () {\n            },\n            end: function () {\n            },\n            tryActivate: function (p, meta) {\n                return false;\n            },\n            getCursor: function () {\n                return Cursors.arrow;\n            }\n        });\n\n        function noMeta(meta) {\n            return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n        }\n\n        function tryActivateSelection(options, meta) {\n            var enabled = options !== false;\n\n            if (options.key && options.key != \"none\") {\n                enabled = meta[options.key + \"Key\"];\n            }\n            return enabled;\n        }\n\n        var ScrollerTool = EmptyTool.extend({\n            init: function (toolService) {\n                var tool = this;\n                var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n                EmptyTool.fn.init.call(tool, toolService);\n\n                var diagram = tool.toolService.diagram,\n                    canvas = diagram.canvas;\n\n                var scroller = diagram.scroller = tool.scroller = $(diagram.scrollable).kendoMobileScroller({\n                    friction: friction,\n                    velocityMultiplier: VELOCITY_MULTIPLIER,\n                    mousewheelScrolling: false,\n                    zoom: false,\n                    scroll: proxy(tool._move, tool)\n                }).data(\"kendoMobileScroller\");\n\n                if (canvas.translate) {\n                    tool.movableCanvas = new Movable(canvas.element);\n                }\n\n                var virtualScroll = function (dimension, min, max) {\n                    dimension.makeVirtual();\n                    dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n                };\n\n                virtualScroll(scroller.dimensions.x);\n                virtualScroll(scroller.dimensions.y);\n                scroller.disable();\n            },\n\n            tryActivate: function (p, meta) {\n                var toolService = this.toolService;\n                var options = toolService.diagram.options.pannable;\n                var enabled = meta.ctrlKey;\n\n                if (defined(options.key)) {\n                    if (!options.key || options.key == \"none\") {\n                        enabled = noMeta(meta);\n                    } else {\n                        enabled = meta[options.key + \"Key\"] && !(meta.ctrlKey && defined(toolService.hoveredItem));\n                    }\n                }\n\n                return  options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n            },\n\n            start: function () {\n                this.scroller.enable();\n            },\n            move: function () {\n            },//the tool itself should not handle the scrolling. Let kendo scroller take care of this part. Check _move\n            _move: function (args) {\n                var tool = this,\n                    diagram = tool.toolService.diagram,\n                    canvas = diagram.canvas,\n                    scrollPos = new Point(args.scrollLeft, args.scrollTop);\n\n                if (canvas.translate) {\n                    diagram._storePan(scrollPos.times(-1));\n                    tool.movableCanvas.moveTo(scrollPos);\n                    canvas.translate(scrollPos.x, scrollPos.y);\n                } else {\n                    scrollPos = scrollPos.plus(diagram._pan.times(-1));\n                }\n\n                diagram.trigger(PAN, {pan: scrollPos});\n            },\n            end: function () {\n                this.scroller.disable();\n            },\n            getCursor: function () {\n                return Cursors.move;\n            }\n        });\n\n        /**\n         * The tool handling the transformations via the adorner.\n         * @type {*}\n         */\n        var PointerTool = Class.extend({\n            init: function (toolService) {\n                this.toolService = toolService;\n            },\n            tryActivate: function (p, meta) {\n                return true; // the pointer tool is last and handles all others requests.\n            },\n            start: function (p, meta) {\n                var toolService = this.toolService,\n                    diagram = toolService.diagram,\n                    hoveredItem = toolService.hoveredItem,\n                    selectable = diagram.options.selectable;\n\n                if (hoveredItem) {\n                    if (tryActivateSelection(selectable, meta)) {\n                        selectSingle(hoveredItem, meta);\n                    }\n                    if (hoveredItem.adorner) { //connection\n                        this.adorner = hoveredItem.adorner;\n                        this.handle = this.adorner._hitTest(p);\n                    }\n                }\n\n                if (!this.handle) {\n                    this.handle = diagram._resizingAdorner._hitTest(p);\n                    if (this.handle) {\n                        this.adorner = diagram._resizingAdorner;\n                    }\n                }\n\n                if (this.adorner) {\n                    this.adorner.start(p);\n                }\n            },\n            move: function (p) {\n                var that = this;\n                if (this.adorner) {\n                    this.adorner.move(that.handle, p);\n                }\n            },\n            end: function (p, meta) {\n                var diagram = this.toolService.diagram,\n                    service = this.toolService,\n                    unit;\n\n                if (this.adorner) {\n                    unit = this.adorner.stop();\n                    if (unit) {\n                        diagram.undoRedoService.add(unit, false);\n                    }\n                }\n                if(service.hoveredItem) {\n                    this.toolService.triggerClick({item: service.hoveredItem, point: p, meta: meta});\n                }\n                this.adorner = undefined;\n                this.handle = undefined;\n            },\n            getCursor: function (p) {\n                return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n            }\n        });\n\n        var SelectionTool = Class.extend({\n            init: function (toolService) {\n                this.toolService = toolService;\n            },\n            tryActivate: function (p, meta) {\n                var toolService = this.toolService;\n                var enabled = tryActivateSelection(toolService.diagram.options.selectable, meta);\n\n                return enabled && !defined(toolService.hoveredItem) && !defined(toolService.hoveredAdorner);\n            },\n            start: function (p) {\n                var diagram = this.toolService.diagram;\n                diagram.deselect();\n                diagram.selector.start(p);\n            },\n            move: function (p) {\n                var diagram = this.toolService.diagram;\n                diagram.selector.move(p);\n            },\n            end: function (p, meta) {\n                var diagram = this.toolService.diagram, hoveredItem = this.toolService.hoveredItem;\n                var rect = diagram.selector.bounds();\n                if ((!hoveredItem || !hoveredItem.isSelected) && !meta.ctrlKey) {\n                    diagram.deselect();\n                }\n                if (!rect.isEmpty()) {\n                    diagram.selectArea(rect);\n                }\n                diagram.selector.end();\n            },\n            getCursor: function () {\n                return Cursors.arrow;\n            }\n        });\n\n        var ConnectionTool = Class.extend({\n            init: function (toolService) {\n                this.toolService = toolService;\n                this.type = \"ConnectionTool\";\n            },\n            tryActivate: function (p, meta) {\n                return this.toolService._hoveredConnector;\n            },\n            start: function (p, meta) {\n                var diagram = this.toolService.diagram,\n                    connector = this.toolService._hoveredConnector,\n                    connection = diagram.connect(connector._c, p);\n\n                this.toolService._connectionManipulation(connection, connector._c.shape, true);\n                this.toolService._removeHover();\n                selectSingle(this.toolService.activeConnection, meta);\n            },\n            move: function (p) {\n                this.toolService.activeConnection.target(p);\n                return true;\n            },\n            end: function () {\n                var nc = this.toolService.activeConnection,\n                    hi = this.toolService.hoveredItem,\n                    connector = this.toolService._hoveredConnector;\n\n                if (connector && connector._c != nc.sourceConnector) {\n                    nc.target(connector._c);\n                } else if (hi) {\n                    nc.target(hi);\n                }\n\n                nc.updateModel(true);\n\n                this.toolService._connectionManipulation();\n            },\n            getCursor: function () {\n                return Cursors.arrow;\n            }\n        });\n\n        var ConnectionEditTool = Class.extend({\n            init: function (toolService) {\n                this.toolService = toolService;\n                this.type = \"ConnectionTool\";\n            },\n\n            tryActivate: function (p, meta) {\n                var toolService = this.toolService,\n                    diagram = toolService.diagram,\n                    selectable =  diagram.options.selectable,\n                    item = toolService.hoveredItem,\n                    isActive = tryActivateSelection(selectable, meta) && item && item.path &&\n                        !(item.isSelected && meta.ctrlKey); // means it is connection\n                if (isActive) {\n                    this._c = item;\n                }\n                return isActive;\n            },\n            start: function (p, meta) {\n                selectSingle(this._c, meta);\n                this.handle = this._c.adorner._hitTest(p);\n                this._c.adorner.start(p);\n            },\n            move: function (p) {\n                this._c.adorner.move(this.handle, p);\n                return true;\n            },\n            end: function (p, meta) {\n                this.toolService.triggerClick({item: this._c, point: p, meta: meta});\n                var unit = this._c.adorner.stop(p);\n                this.toolService.diagram.undoRedoService.add(unit, false);\n            },\n            getCursor: function () {\n                return Cursors.move;\n            }\n        });\n\n        function testKey(key, str) {\n            return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n        }\n\n        /**\n         * The service managing the tools.\n         * @type {*}\n         */\n        var ToolService = Class.extend({\n            init: function (diagram) {\n                this.diagram = diagram;\n                this.tools = [\n                    new ScrollerTool(this),\n                    new ConnectionEditTool(this),\n                    new ConnectionTool(this),\n                    new SelectionTool(this),\n                    new PointerTool(this)\n                ]; // the order matters.\n\n                this.activeTool = undefined;\n            },\n\n            start: function (p, meta) {\n                meta = deepExtend({}, meta);\n                if (this.activeTool) {\n                    this.activeTool.end(p, meta);\n                }\n                this._updateHoveredItem(p);\n                this._activateTool(p, meta);\n                this.activeTool.start(p, meta);\n                this._updateCursor(p);\n                this.diagram.focus();\n                this.startPoint = p;\n                return true;\n            },\n\n            move: function (p, meta) {\n                meta = deepExtend({}, meta);\n                var updateHovered = true;\n                if (this.activeTool) {\n                    updateHovered = this.activeTool.move(p, meta);\n                }\n                if (updateHovered) {\n                    this._updateHoveredItem(p);\n                }\n                this._updateCursor(p);\n                return true;\n            },\n\n            end: function (p, meta) {\n                meta = deepExtend({}, meta);\n                if (this.activeTool) {\n                    this.activeTool.end(p, meta);\n                }\n                this.activeTool = undefined;\n                this._updateCursor(p);\n                return true;\n            },\n\n            keyDown: function (key, meta) {\n                var diagram = this.diagram;\n                meta = deepExtend({ ctrlKey: false, metaKey: false, altKey: false }, meta);\n                if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {// ctrl or option\n                    if (testKey(key, \"a\")) {// A: select all\n                        diagram.selectAll();\n                        diagram._destroyToolBar();\n                        return true;\n                    } else if (testKey(key, \"z\")) {// Z: undo\n                        diagram.undo();\n                        diagram._destroyToolBar();\n                        return true;\n                    } else if (testKey(key, \"y\")) {// y: redo\n                        diagram.redo();\n                        diagram._destroyToolBar();\n                        return true;\n                    } else if (testKey(key, \"c\")) {\n                        diagram.copy();\n                        diagram._destroyToolBar();\n                    } else if (testKey(key, \"x\")) {\n                        diagram.cut();\n                        diagram._destroyToolBar();\n                    } else if (testKey(key, \"v\")) {\n                        diagram.paste();\n                        diagram._destroyToolBar();\n                    } else if (testKey(key, \"l\")) {\n                        diagram.layout();\n                        diagram._destroyToolBar();\n                    } else if (testKey(key, \"d\")) {\n                        diagram._destroyToolBar();\n                        diagram.copy();\n                        diagram.paste();\n                    }\n                } else if (key === 46 || key === 8) {// del: deletion\n                    var toRemove = this.diagram._triggerRemove(diagram.select());\n                    if (toRemove.length) {\n                        this.diagram.remove(toRemove, true);\n                        this.diagram._syncChanges();\n                        this.diagram._destroyToolBar();\n                    }\n\n                    return true;\n                } else if (key === 27) {// ESC: stop any action\n                    this._discardNewConnection();\n                    diagram.deselect();\n                    diagram._destroyToolBar();\n                    return true;\n                }\n\n            },\n            wheel: function (p, meta) {\n                var diagram = this.diagram,\n                    delta = meta.delta,\n                    z = diagram.zoom(),\n                    options = diagram.options,\n                    zoomRate = options.zoomRate,\n                    zoomOptions = { point: p, meta: meta, zoom: z };\n\n                if (diagram.trigger(ZOOM_START, zoomOptions)) {\n                    return;\n                }\n\n                if (delta < 0) {\n                    z += zoomRate;\n                } else {\n                    z -= zoomRate;\n                }\n\n                z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n                zoomOptions.zoom = z;\n\n                diagram.zoom(z, zoomOptions);\n                diagram.trigger(ZOOM_END, zoomOptions);\n\n                return true;\n            },\n            setTool: function (tool, index) {\n                tool.toolService = this;\n                this.tools[index] = tool;\n            },\n            triggerClick: function(data) {\n                if (this.startPoint.equals(data.point)) {\n                    this.diagram.trigger(\"click\", data);\n                }\n\n            },\n            _discardNewConnection: function () {\n                if (this.newConnection) {\n                    this.diagram.remove(this.newConnection);\n                    this.newConnection = undefined;\n                }\n            },\n            _activateTool: function (p, meta) {\n                for (var i = 0; i < this.tools.length; i++) {\n                    var tool = this.tools[i];\n                    if (tool.tryActivate(p, meta)) {\n                        this.activeTool = tool;\n                        break; // activating the first available tool in the loop.\n                    }\n                }\n            },\n            _updateCursor: function (p) {\n                var element = this.diagram.element;\n                var cursor = this.activeTool ? this.activeTool.getCursor(p) : (this.hoveredAdorner ? this.hoveredAdorner._getCursor(p) : (this.hoveredItem ? this.hoveredItem._getCursor(p) : Cursors.arrow));\n\n                element.css({cursor: cursor});\n                // workaround for IE 7 issue in which the elements overflow the container after setting cursor\n                if (browser.msie && browser.version == 7) {\n                    element[0].style.cssText = element[0].style.cssText;\n                }\n            },\n            _connectionManipulation: function (connection, disabledShape, isNew) {\n                this.activeConnection = connection;\n                this.disabledShape = disabledShape;\n                if (isNew) {\n                    this.newConnection = this.activeConnection;\n                } else {\n                    this.newConnection = undefined;\n                }\n            },\n            _updateHoveredItem: function (p) {\n                var hit = this._hitTest(p);\n                var diagram = this.diagram;\n\n                if (hit != this.hoveredItem && (!this.disabledShape || hit != this.disabledShape)) {\n                    if (this.hoveredItem) {\n                        diagram.trigger(MOUSE_LEAVE, { item: this.hoveredItem });\n                        this.hoveredItem._hover(false);\n                    }\n\n                    if (hit && hit.options.enable) {\n                        diagram.trigger(MOUSE_ENTER, { item: hit });\n\n                        this.hoveredItem = hit; // Shape, connection or connector\n                        this.hoveredItem._hover(true);\n                    } else {\n                        this.hoveredItem = undefined;\n                    }\n                }\n            },\n            _removeHover: function () {\n                if (this.hoveredItem) {\n                    this.hoveredItem._hover(false);\n                    this.hoveredItem = undefined;\n                }\n            },\n            _hitTest: function (point) {\n                var hit, d = this.diagram, item, i;\n\n                // connectors\n                if (this._hoveredConnector) {\n                    this._hoveredConnector._hover(false);\n                    this._hoveredConnector = undefined;\n                }\n                if (d._connectorsAdorner._visible) {\n                    hit = d._connectorsAdorner._hitTest(point);\n                    if (hit) {\n                        return hit;\n                    }\n                }\n\n                hit = this.diagram._resizingAdorner._hitTest(point);\n                if (hit) {\n                    this.hoveredAdorner = d._resizingAdorner;\n                    if (hit.x !== 0 || hit.y !== 0) { // hit testing for resizers or rotator, otherwise if (0,0) than pass through.\n                        return;\n                    }\n                    hit = undefined;\n                } else {\n                    this.hoveredAdorner = undefined;\n                }\n\n                if (!this.activeTool || this.activeTool.type !== \"ConnectionTool\") {\n                    var selectedConnections = []; // only the connections should have higher presence because the connection edit point is on top of connector.\n                    // TODO: This should be reworked. The connection adorner should be one for all selected connections and should be hit tested prior the connections and shapes itself.\n                    for (i = 0; i < d._selectedItems.length; i++) {\n                        item = d._selectedItems[i];\n                        if (item instanceof diagram.Connection) {\n                            selectedConnections.push(item);\n                        }\n                    }\n                    hit = this._hitTestItems(selectedConnections, point);\n                }\n                // Shapes | Connectors\n                return hit || this._hitTestItems(d.shapes, point) || this._hitTestItems(d.connections, point);\n            },\n            _hitTestItems: function (array, point) {\n                var i, item, hit;\n                for (i = array.length - 1; i >= 0; i--) {\n                    item = array[i];\n                    hit = item._hitTest(point);\n                    if (hit) {\n                        return hit;\n                    }\n                }\n            }\n        });\n\n// Routing =========================================\n\n        /**\n         * Base class for connection routers.\n         */\n        var ConnectionRouterBase = kendo.Class.extend({\n            init: function () {\n            }\n            /*route: function (connection) {\n             },\n             hitTest: function (p) {\n\n             },\n             getBounds: function () {\n\n             }*/\n        });\n\n        /**\n         * Base class for polyline and cascading routing.\n         */\n        var LinearConnectionRouter = ConnectionRouterBase.extend({\n            init: function (connection) {\n                var that = this;\n                ConnectionRouterBase.fn.init.call(that);\n                this.connection = connection;\n            },\n            /**\n             * Hit testing for polyline paths.\n             */\n            hitTest: function (p) {\n                var rec = this.getBounds().inflate(10);\n                if (!rec.contains(p)) {\n                    return false;\n                }\n                return diagram.Geometry.distanceToPolyline(p, this.connection.allPoints()) < HITTESTDISTANCE;\n            },\n\n            /**\n             * Bounds of a polyline.\n             * @returns {kendo.dataviz.diagram.Rect}\n             */\n            getBounds: function () {\n                var points = this.connection.allPoints(),\n                    s = points[0],\n                    e = points[points.length - 1],\n                    right = Math.max(s.x, e.x),\n                    left = Math.min(s.x, e.x),\n                    top = Math.min(s.y, e.y),\n                    bottom = Math.max(s.y, e.y);\n\n                for (var i = 1; i < points.length - 1; ++i) {\n                    right = Math.max(right, points[i].x);\n                    left = Math.min(left, points[i].x);\n                    top = Math.min(top, points[i].y);\n                    bottom = Math.max(bottom, points[i].y);\n                }\n\n                return new Rect(left, top, right - left, bottom - top);\n            }\n        });\n\n        /**\n         * A simple poly-linear routing which does not alter the intermediate points.\n         * Does hold the underlying hit, bounds....logic.\n         * @type {*|Object|void|extend|Zepto.extend|b.extend}\n         */\n        var PolylineRouter = LinearConnectionRouter.extend({\n            init: function (connection) {\n                var that = this;\n                LinearConnectionRouter.fn.init.call(that);\n                this.connection = connection;\n            },\n            route: function () {\n                // just keep the points as is\n            }\n        });\n\n        var CascadingRouter = LinearConnectionRouter.extend({\n            init: function (connection) {\n                var that = this;\n                LinearConnectionRouter.fn.init.call(that);\n                this.connection = connection;\n            },\n            route: function () {\n                var link = this.connection;\n                var start = this.connection.sourcePoint();\n                var end = this.connection.targetPoint(),\n                    points = [start, start, end, end],\n                    deltaX = end.x - start.x, // can be negative\n                    deltaY = end.y - start.y,\n                    l = points.length,\n                    shiftX,\n                    shiftY,\n                    sourceConnectorName = null,\n                    targetConnectorName = null;\n\n                if (Utils.isDefined(link._resolvedSourceConnector)) {\n                    sourceConnectorName = link._resolvedSourceConnector.options.name;\n                }\n                if (Utils.isDefined(link._resolvedTargetConnector)) {\n                    targetConnectorName = link._resolvedTargetConnector.options.name;\n                }\n                function startHorizontal() {\n                    if (sourceConnectorName !== null) {\n                        if (sourceConnectorName === RIGHT || sourceConnectorName === LEFT) {\n                            return true;\n                        }\n                        if (sourceConnectorName === TOP || sourceConnectorName === BOTTOM) {\n                            return false;\n                        }\n                    }\n                    //fallback for custom connectors\n                    return Math.abs(start.x - end.x) > Math.abs(start.y - end.y);\n                }\n\n                if (sourceConnectorName !== null && targetConnectorName !== null && Utils.contains(DEFAULTCONNECTORNAMES, sourceConnectorName) && Utils.contains(DEFAULTCONNECTORNAMES, targetConnectorName)) {\n                    // custom routing for the default connectors\n                    if (sourceConnectorName === TOP || sourceConnectorName == BOTTOM) {\n                        if (targetConnectorName == TOP || targetConnectorName == BOTTOM) {\n                            this.connection.points([new Point(start.x, start.y + deltaY / 2), new Point(end.x, start.y + deltaY / 2)]);\n                        } else {\n                            this.connection.points([new Point(start.x, start.y + deltaY)]);\n                        }\n                    } else { // LEFT or RIGHT\n                        if (targetConnectorName == LEFT || targetConnectorName == RIGHT) {\n                            this.connection.points([new Point(start.x + deltaX / 2, start.y), new Point(start.x + deltaX / 2, start.y + deltaY)]);\n                        } else {\n                            this.connection.points([new Point(end.x, start.y)]);\n                        }\n                    }\n\n                }\n                else { // general case for custom and floating connectors\n                    this.connection.cascadeStartHorizontal = startHorizontal(this.connection);\n\n                    // note that this is more generic than needed for only two intermediate points.\n                    for (var k = 1; k < l - 1; ++k) {\n                        if (link.cascadeStartHorizontal) {\n                            if (k % 2 !== 0) {\n                                shiftX = deltaX / (l / 2);\n                                shiftY = 0;\n                            }\n                            else {\n                                shiftX = 0;\n                                shiftY = deltaY / ((l - 1) / 2);\n                            }\n                        }\n                        else {\n                            if (k % 2 !== 0) {\n                                shiftX = 0;\n                                shiftY = deltaY / (l / 2);\n                            }\n                            else {\n                                shiftX = deltaX / ((l - 1) / 2);\n                                shiftY = 0;\n                            }\n                        }\n                        points[k] = new Point(points[k - 1].x + shiftX, points[k - 1].y + shiftY);\n                    }\n                    // need to fix the wrong 1.5 factor of the last intermediate point\n                    k--;\n                    if ((link.cascadeStartHorizontal && (k % 2 !== 0)) || (!link.cascadeStartHorizontal && (k % 2 === 0))) {\n                        points[l - 2] = new Point(points[l - 1].x, points[l - 2].y);\n                    }\n                    else {\n                        points[l - 2] = new Point(points[l - 2].x, points[l - 1].y);\n                    }\n\n                    this.connection.points([points[1], points[2]]);\n                }\n            }\n\n        });\n\n// Adorners =========================================\n\n        var AdornerBase = Class.extend({\n            init: function (diagram, options) {\n                var that = this;\n                that.diagram = diagram;\n                that.options = deepExtend({}, that.options, options);\n                that.visual = new Group();\n                that.diagram._adorners.push(that);\n            },\n            refresh: function () {\n\n            }\n        });\n\n        var ConnectionEditAdorner = AdornerBase.extend({\n            init: function (connection, options) {\n                var that = this, diagram;\n                that.connection = connection;\n                diagram = that.connection.diagram;\n                that._ts = diagram.toolService;\n                AdornerBase.fn.init.call(that, diagram, options);\n                var sp = that.connection.sourcePoint();\n                var tp = that.connection.targetPoint();\n                that.spVisual = new Circle(deepExtend(that.options.handles, { center: sp }));\n                that.epVisual = new Circle(deepExtend(that.options.handles, { center: tp }));\n                that.visual.append(that.spVisual);\n                that.visual.append(that.epVisual);\n            },\n\n            options: {\n                handles: {}\n            },\n\n            _getCursor: function () {\n                return Cursors.move;\n            },\n\n            start: function (p) {\n                this.handle = this._hitTest(p);\n                this.startPoint = p;\n                this._initialSource = this.connection.source();\n                this._initialTarget = this.connection.target();\n                switch (this.handle) {\n                    case -1:\n                        if (this.connection.targetConnector) {\n                            this._ts._connectionManipulation(this.connection, this.connection.targetConnector.shape);\n                        }\n                        break;\n                    case 1:\n                        if (this.connection.sourceConnector) {\n                            this._ts._connectionManipulation(this.connection, this.connection.sourceConnector.shape);\n                        }\n                        break;\n                }\n            },\n\n            move: function (handle, p) {\n                switch (handle) {\n                    case -1:\n                        this.connection.source(p);\n                        break;\n                    case 1:\n                        this.connection.target(p);\n                        break;\n                    default:\n                        var delta = p.minus(this.startPoint);\n                        this.startPoint = p;\n                        if (!this.connection.sourceConnector) {\n                            this.connection.source(this.connection.sourcePoint().plus(delta));\n                        }\n                        if (!this.connection.targetConnector) {\n                            this.connection.target(this.connection.targetPoint().plus(delta));\n                        }\n                        break;\n                }\n                this.refresh();\n                return true;\n            },\n\n            stop: function (p) {\n                var ts = this.diagram.toolService, item = ts.hoveredItem, target;\n                if (ts._hoveredConnector) {\n                    target = ts._hoveredConnector._c;\n                } else if (item && item instanceof diagram.Shape) {\n                    target = item;\n                } else {\n                    target = p;\n                }\n\n                if (this.handle === -1) {\n                    this.connection.source(target);\n                } else if (this.handle === 1) {\n                    this.connection.target(target);\n                }\n\n                this.connection.updateModel(true);\n\n                this.handle = undefined;\n                this._ts._connectionManipulation();\n                return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n            },\n\n            _hitTest: function (p) {\n                var sp = this.connection.sourcePoint(),\n                    tp = this.connection.targetPoint(),\n                    rx = this.options.handles.width / 2,\n                    ry = this.options.handles.height / 2,\n                    sb = new Rect(sp.x, sp.y).inflate(rx, ry),\n                    tb = new Rect(tp.x, tp.y).inflate(rx, ry);\n\n                return sb.contains(p) ? -1 : (tb.contains(p) ? 1 : 0);\n            },\n\n            refresh: function () {\n                this.spVisual.redraw({ center: this.diagram.modelToLayer(this.connection.sourcePoint()) });\n                this.epVisual.redraw({ center: this.diagram.modelToLayer(this.connection.targetPoint()) });\n            }\n        });\n\n        var ConnectorsAdorner = AdornerBase.extend({\n            init: function (diagram, options) {\n                var that = this;\n                AdornerBase.fn.init.call(that, diagram, options);\n                that._refreshHandler = function (e) {\n                    if (e.item == that.shape) {\n                        that.refresh();\n                    }\n                };\n            },\n\n            show: function (shape) {\n                var that = this, len, i, ctr;\n                that._visible = true;\n                that.shape = shape;\n                that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler);\n                len = shape.connectors.length;\n                that.connectors = [];\n                that.visual.clear();\n                for (i = 0; i < len; i++) {\n                    ctr = new ConnectorVisual(shape.connectors[i]);\n                    that.connectors.push(ctr);\n                    that.visual.append(ctr.visual);\n                }\n                that.visual.visible(true);\n                that.refresh();\n            },\n\n            destroy: function () {\n                var that = this;\n                that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n                that.shape = undefined;\n                that._visible = undefined;\n                that.visual.visible(false);\n            },\n\n            _hitTest: function (p) {\n                var ctr, i;\n                for (i = 0; i < this.connectors.length; i++) {\n                    ctr = this.connectors[i];\n                    if (ctr._hitTest(p)) {\n                        ctr._hover(true);\n                        this.diagram.toolService._hoveredConnector = ctr;\n                        break;\n                    }\n                }\n            },\n\n            refresh: function () {\n                if (this.shape) {\n                    var bounds = this.shape.bounds();\n                        bounds = this.diagram.modelToLayer(bounds);\n                    this.visual.position(bounds.topLeft());\n                    $.each(this.connectors, function () {\n                        this.refresh();\n                    });\n                }\n            }\n        });\n\n        function hitToOppositeSide(hit, bounds) {\n            var result;\n\n            if (hit.x == -1 && hit.y == -1) {\n                result = bounds.bottomRight();\n            } else if (hit.x == 1 && hit.y == 1) {\n                result = bounds.topLeft();\n            } else if (hit.x == -1 && hit.y == 1) {\n                result = bounds.topRight();\n            } else if (hit.x == 1 && hit.y == -1) {\n                result = bounds.bottomLeft();\n            } else if (hit.x === 0 && hit.y == -1) {\n                result = bounds.bottom();\n            } else if (hit.x === 0 && hit.y == 1) {\n                result = bounds.top();\n            } else if (hit.x == 1 && hit.y === 0) {\n                result = bounds.left();\n            } else if (hit.x == -1 && hit.y === 0) {\n                result = bounds.right();\n            }\n\n            return result;\n        }\n\n        var ResizingAdorner = AdornerBase.extend({\n            init: function (diagram, options) {\n                var that = this;\n                AdornerBase.fn.init.call(that, diagram, options);\n                that._manipulating = false;\n                that.map = [];\n                that.shapes = [];\n\n                that._initSelection();\n                that._createHandles();\n                that.redraw();\n                that.diagram.bind(\"select\", function (e) {\n                    that._initialize(e.selected);\n                });\n\n                that._refreshHandler = function () {\n                    if (!that._internalChange) {\n                        that.refreshBounds();\n                        that.refresh();\n                    }\n                };\n\n                that._rotatedHandler = function () {\n                    if (that.shapes.length == 1) {\n                        that._angle = that.shapes[0].rotate().angle;\n                    }\n                    that._refreshHandler();\n                };\n\n                that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n                that.refreshBounds();\n                that.refresh();\n            },\n\n            options: {\n                editable: {\n                },\n                selectable: {\n                    stroke: {\n                        color: \"#778899\",\n                        width: 1,\n                        dashType: \"dash\"\n                    },\n                    fill: {\n                        color: TRANSPARENT\n                    }\n                },\n                offset: 10\n            },\n\n            _initSelection: function() {\n                var that = this;\n                var diagram = that.diagram;\n                var selectable = diagram.options.selectable;\n                var options = deepExtend({}, that.options.selectable, selectable);\n                that.rect = new Rectangle(options);\n                that.visual.append(that.rect);\n            },\n\n            _createHandles: function() {\n                var editable = this.options.editable,\n                    handles, item, i, y, x;\n\n                if (editable && editable.resize) {\n                    handles = editable.resize.handles;\n                    for (x = -1; x <= 1; x++) {\n                        for (y = -1; y <= 1; y++) {\n                            if ((x !== 0) || (y !== 0)) { // (0, 0) element, (-1, -1) top-left, (+1, +1) bottom-right\n                                item = new Rectangle(handles);\n                                item.drawingElement._hover = proxy(this._hover, this);\n                                this.map.push({ x: x, y: y, visual: item });\n                                this.visual.append(item);\n                            }\n                        }\n                    }\n                }\n            },\n\n            bounds: function (value) {\n                if (value) {\n                    this._innerBounds = value.clone();\n                    this._bounds = this.diagram.modelToLayer(value).inflate(this.options.offset, this.options.offset);\n                } else {\n                    return this._bounds;\n                }\n            },\n\n            _hitTest: function (p) {\n                var tp = this.diagram.modelToLayer(p),\n                    editable = this.options.editable,\n                    i, hit, handleBounds, handlesCount = this.map.length, handle;\n\n                if (this._angle) {\n                    tp = tp.clone().rotate(this._bounds.center(), this._angle);\n                }\n\n                if (editable && editable.rotate && this._rotationThumbBounds) {\n                    if (this._rotationThumbBounds.contains(tp)) {\n                        return new Point(-1, -2);\n                    }\n                }\n\n                if (editable && editable.resize) {\n                    for (i = 0; i < handlesCount; i++) {\n                        handle = this.map[i];\n                        hit = new Point(handle.x, handle.y);\n                        handleBounds = this._getHandleBounds(hit); //local coordinates\n                        handleBounds.offset(this._bounds.x, this._bounds.y);\n                        if (handleBounds.contains(tp)) {\n                            return hit;\n                        }\n                    }\n                }\n\n                if (this._bounds.contains(tp)) {\n                    return new Point(0, 0);\n                }\n            },\n\n            _getHandleBounds: function (p) {\n                var editable = this.options.editable;\n                if (editable && editable.resize) {\n                    var handles = editable.resize.handles || {},\n                        w = handles.width,\n                        h = handles.height,\n                        r = new Rect(0, 0, w, h);\n\n                    if (p.x < 0) {\n                        r.x = - w / 2;\n                    } else if (p.x === 0) {\n                        r.x = Math.floor(this._bounds.width / 2) - w / 2;\n                    } else if (p.x > 0) {\n                        r.x = this._bounds.width + 1.0 - w / 2;\n                    } if (p.y < 0) {\n                        r.y = - h / 2;\n                    } else if (p.y === 0) {\n                        r.y = Math.floor(this._bounds.height / 2) - h / 2;\n                    } else if (p.y > 0) {\n                        r.y = this._bounds.height + 1.0 - h / 2;\n                    }\n\n                    return r;\n                }\n            },\n\n            _getCursor: function (point) {\n                var hit = this._hitTest(point);\n                if (hit && (hit.x >= -1) && (hit.x <= 1) && (hit.y >= -1) && (hit.y <= 1) && this.options.editable && this.options.editable.resize) {\n                    var angle = this._angle;\n                    if (angle) {\n                        angle = 360 - angle;\n                        hit.rotate(new Point(0, 0), angle);\n                        hit = new Point(Math.round(hit.x), Math.round(hit.y));\n                    }\n\n                    if (hit.x == -1 && hit.y == -1) {\n                        return \"nw-resize\";\n                    }\n                    if (hit.x == 1 && hit.y == 1) {\n                        return \"se-resize\";\n                    }\n                    if (hit.x == -1 && hit.y == 1) {\n                        return \"sw-resize\";\n                    }\n                    if (hit.x == 1 && hit.y == -1) {\n                        return \"ne-resize\";\n                    }\n                    if (hit.x === 0 && hit.y == -1) {\n                        return \"n-resize\";\n                    }\n                    if (hit.x === 0 && hit.y == 1) {\n                        return \"s-resize\";\n                    }\n                    if (hit.x == 1 && hit.y === 0) {\n                        return \"e-resize\";\n                    }\n                    if (hit.x == -1 && hit.y === 0) {\n                        return \"w-resize\";\n                    }\n                }\n                return this._manipulating ? Cursors.move : Cursors.select;\n            },\n\n            _initialize: function() {\n                var that = this, i, item,\n                    items = that.diagram.select();\n\n                that.shapes = [];\n                for (i = 0; i < items.length; i++) {\n                    item = items[i];\n                    if (item instanceof diagram.Shape) {\n                        that.shapes.push(item);\n                        item._rotationOffset = new Point();\n                    }\n                }\n\n                that._angle = that.shapes.length == 1 ? that.shapes[0].rotate().angle : 0;\n                that._startAngle = that._angle;\n                that._rotates();\n                that._positions();\n                that.refreshBounds();\n                that.refresh();\n                that.redraw();\n            },\n\n            _rotates: function () {\n                var that = this, i, shape;\n                that.initialRotates = [];\n                for (i = 0; i < that.shapes.length; i++) {\n                    shape = that.shapes[i];\n                    that.initialRotates.push(shape.rotate().angle);\n                }\n            },\n\n            _positions: function () {\n                var that = this, i, shape;\n                that.initialStates = [];\n                for (i = 0; i < that.shapes.length; i++) {\n                    shape = that.shapes[i];\n                    that.initialStates.push(shape.bounds());\n                }\n            },\n\n            _hover: function(value, element) {\n                var editable = this.options.editable;\n                if (editable && editable.resize) {\n                    var handleOptions = editable.resize.handles,\n                        hover = handleOptions.hover,\n                        stroke = handleOptions.stroke,\n                        fill = handleOptions.fill;\n\n                    if (value && Utils.isDefined(hover.stroke)) {\n                        stroke = deepExtend({}, stroke, hover.stroke);\n                    }\n\n                    if (value && Utils.isDefined(hover.fill)) {\n                        fill = hover.fill;\n                    }\n                    element.stroke(stroke.color, stroke.width, stroke.opacity);\n                    element.fill(fill.color, fill.opacity);\n                }\n            },\n\n            start: function (p) {\n                this._sp = p;\n                this._cp = p;\n                this._lp = p;\n                this._manipulating = true;\n                this._internalChange = true;\n                this.shapeStates = [];\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    this.shapeStates.push(shape.bounds());\n                }\n            },\n\n            redraw: function () {\n                var that = this, i, handle,\n                    editable = that.options.editable,\n                    resize = editable.resize,\n                    rotate = editable.rotate,\n                    visibleHandles = editable && resize ? true : false,\n                    visibleThumb = editable && rotate ? true : false;\n\n                for (i = 0; i < this.map.length; i++) {\n                    handle = this.map[i];\n                    handle.visual.visible(visibleHandles);\n                }\n\n                if (that.rotationThumb) {\n                    that.rotationThumb.visible(visibleThumb);\n                }\n            },\n\n            angle: function(value) {\n                if (defined(value)) {\n                    this._angle = value;\n                }\n\n                return this._angle;\n            },\n\n            rotate: function() {\n                var center = this._innerBounds.center();\n                var currentAngle = this.angle();\n                this._internalChange = true;\n                for (var i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    currentAngle = (currentAngle + this.initialRotates[i] - this._startAngle) % 360;\n                    shape.rotate(currentAngle, center);\n                }\n                this.refresh();\n            },\n\n            move: function (handle, p) {\n                var delta, dragging,\n                    dtl = new Point(),\n                    dbr = new Point(),\n                    bounds, center, shape,\n                    i, angle, newBounds,\n                    changed = 0, staticPoint,\n                    scaleX, scaleY;\n\n                if (handle.y === -2 && handle.x === -1) {\n                    center = this._innerBounds.center();\n                    this._angle = this._truncateAngle(Utils.findAngle(center, p));\n                    for (i = 0; i < this.shapes.length; i++) {\n                        shape = this.shapes[i];\n                        angle = (this._angle + this.initialRotates[i] - this._startAngle) % 360;\n                        shape.rotate(angle, center);\n                        if (shape.hasOwnProperty(\"layout\")) {\n                            shape.layout(shape);\n                        }\n                        this._rotating = true;\n                    }\n                    this.refresh();\n                } else {\n                    if (this.diagram.options.snap.enabled === true) {\n                        var thr = this._truncateDistance(p.minus(this._lp));\n                        // threshold\n                        if (thr.x === 0 && thr.y === 0) {\n                            this._cp = p;\n                            return;\n                        }\n                        delta = thr;\n                        this._lp = new Point(this._lp.x + thr.x, this._lp.y + thr.y);\n                    } else {\n                        delta = p.minus(this._cp);\n                    }\n\n                    if (handle.x === 0 && handle.y === 0) {\n                        dbr = dtl = delta; // dragging\n                        dragging = true;\n                    } else {\n                        if (this._angle) { // adjust the delta so that resizers resize in the correct direction after rotation.\n                            delta.rotate(new Point(0, 0), this._angle);\n                        }\n                        if (handle.x == -1) {\n                            dtl.x = delta.x;\n                        } else if (handle.x == 1) {\n                            dbr.x = delta.x;\n                        }\n                        if (handle.y == -1) {\n                            dtl.y = delta.y;\n                        } else if (handle.y == 1) {\n                            dbr.y = delta.y;\n                        }\n                    }\n\n                    if (!dragging) {\n                        staticPoint = hitToOppositeSide(handle, this._innerBounds);\n                        scaleX = (this._innerBounds.width + delta.x * handle.x) / this._innerBounds.width;\n                        scaleY = (this._innerBounds.height + delta.y * handle.y) / this._innerBounds.height;\n                    }\n\n                    for (i = 0; i < this.shapes.length; i++) {\n                        shape = this.shapes[i];\n                        bounds = shape.bounds();\n                        if (dragging) {\n                            newBounds = this._displaceBounds(bounds, dtl, dbr, dragging);\n                        } else {\n                            newBounds = bounds.clone();\n                            newBounds.scale(scaleX, scaleY, staticPoint, this._innerBounds.center(), shape.rotate().angle);\n                            var newCenter = newBounds.center(); // fixes the new rotation center.\n                            newCenter.rotate(bounds.center(), -this._angle);\n                            newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n                        }\n                        if (newBounds.width >= shape.options.minWidth && newBounds.height >= shape.options.minHeight) { // if we up-size very small shape\n                            var oldBounds = bounds;\n                            shape.bounds(newBounds);\n                            if (shape.hasOwnProperty(\"layout\")) {\n                                shape.layout(shape, oldBounds, newBounds);\n                            }\n                            shape.rotate(shape.rotate().angle); // forces the rotation to update it's rotation center\n                            changed += 1;\n                        }\n                    }\n\n                    if (changed == i) {\n                        newBounds = this._displaceBounds(this._innerBounds, dtl, dbr, dragging);\n                        this.bounds(newBounds);\n                        this.refresh();\n                    }\n\n                    this._positions();\n                }\n\n                this._cp = p;\n            },\n\n            _truncatePositionToGuides: function (bounds) {\n                if (this.diagram.ruler) {\n                    return this.diagram.ruler.truncatePositionToGuides(bounds);\n                }\n                return bounds;\n            },\n\n            _truncateSizeToGuides: function (bounds) {\n                if (this.diagram.ruler) {\n                    return this.diagram.ruler.truncateSizeToGuides(bounds);\n                }\n                return bounds;\n            },\n\n            _truncateAngle: function (a) {\n                var snapAngle = Math.max(this.diagram.options.snap.angle, 5);\n                return this.diagram.options.snap.enabled === true ? Math.floor((a % 360) / snapAngle) * snapAngle : (a % 360);\n            },\n\n            _truncateDistance: function (d) {\n                if (d instanceof diagram.Point) {\n                    return new diagram.Point(this._truncateDistance(d.x), this._truncateDistance(d.y));\n                } else {\n                    var snapSize = Math.max(this.diagram.options.snap.size, 5);\n                    return this.diagram.options.snap.enabled === true ? Math.floor(d / snapSize) * snapSize : d;\n                }\n            },\n\n            _displaceBounds: function (bounds, dtl, dbr, dragging) {\n                var tl = bounds.topLeft().plus(dtl),\n                    br = bounds.bottomRight().plus(dbr),\n                    newBounds = Rect.fromPoints(tl, br),\n                    newCenter;\n                if (!dragging) {\n                    newCenter = newBounds.center();\n                    newCenter.rotate(bounds.center(), -this._angle);\n                    newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n                }\n                return newBounds;\n            },\n\n            stop: function () {\n                var unit, i, shape;\n                if (this._cp != this._sp) {\n                    if (this._rotating) {\n                        unit = new RotateUnit(this, this.shapes, this.initialRotates);\n                        this._rotating = false;\n                    } else if (this._diffStates()) {\n                        if (this.diagram.ruler) {\n                            for (i = 0; i < this.shapes.length; i++) {\n                                shape = this.shapes[i];\n                                var bounds = shape.bounds();\n                                bounds = this._truncateSizeToGuides(this._truncatePositionToGuides(bounds));\n                                shape.bounds(bounds);\n                                this.refreshBounds();\n                                this.refresh();\n                            }\n                        }\n                        for (i = 0; i < this.shapes.length; i++) {\n                            shape = this.shapes[i];\n                            shape.updateModel();\n                        }\n                        unit = new TransformUnit(this.shapes, this.shapeStates, this);\n                        this.diagram._syncShapeChanges();\n                    }\n                }\n\n                this._manipulating = undefined;\n                this._internalChange = undefined;\n                this._rotating = undefined;\n                return unit;\n            },\n\n            _diffStates: function() {\n                var shapes = this.shapes;\n                var states = this.shapeStates;\n                var bounds;\n                for (var idx = 0; idx < shapes.length; idx++) {\n                    if (!shapes[idx].bounds().equals(states[idx])) {\n                        return true;\n                    }\n                }\n                return false;\n            },\n\n            refreshBounds: function () {\n                var bounds = this.shapes.length == 1 ?\n                    this.shapes[0].bounds().clone() :\n                    this.diagram.boundingBox(this.shapes, true);\n\n                this.bounds(bounds);\n            },\n\n            refresh: function () {\n                var that = this, b, bounds;\n                if (this.shapes.length > 0) {\n                    bounds = this.bounds();\n                    this.visual.visible(true);\n                    this.visual.position(bounds.topLeft());\n                    $.each(this.map, function () {\n                        b = that._getHandleBounds(new Point(this.x, this.y));\n                        this.visual.position(b.topLeft());\n                    });\n                    this.visual.position(bounds.topLeft());\n\n                    var center = new Point(bounds.width / 2, bounds.height / 2);\n                    this.visual.rotate(this._angle, center);\n                    this.rect.redraw({ width: bounds.width, height: bounds.height });\n                    if (this.rotationThumb) {\n                        var thumb = this.options.editable.rotate.thumb;\n                        this._rotationThumbBounds = new Rect(bounds.center().x, bounds.y + thumb.y, 0, 0).inflate(thumb.width);\n                        this.rotationThumb.redraw({ x: bounds.width / 2 - thumb.width / 2 });\n                    }\n                } else {\n                    this.visual.visible(false);\n                }\n            }\n        });\n\n        var Selector = Class.extend({\n            init: function (diagram) {\n                var selectable = diagram.options.selectable;\n                this.options = deepExtend({}, this.options, selectable);\n\n                this.visual = new Rectangle(this.options);\n                this.diagram = diagram;\n            },\n            options: {\n                stroke: {\n                    color: \"#778899\",\n                    width: 1,\n                    dashType: \"dash\"\n                },\n                fill: {\n                    color: TRANSPARENT\n                }\n            },\n            start: function (p) {\n                this._sp = this._ep = p;\n                this.refresh();\n                this.diagram._adorn(this, true);\n            },\n            end: function () {\n                this._sp = this._ep = undefined;\n                this.diagram._adorn(this, false);\n            },\n            bounds: function (value) {\n                if (value) {\n                    this._bounds = value;\n                }\n                return this._bounds;\n            },\n            move: function (p) {\n                this._ep = p;\n                this.refresh();\n            },\n            refresh: function () {\n                if (this._sp) {\n                    var visualBounds = Rect.fromPoints(this.diagram.modelToLayer(this._sp), this.diagram.modelToLayer(this._ep));\n                    this.bounds(Rect.fromPoints(this._sp, this._ep));\n                    this.visual.position(visualBounds.topLeft());\n                    this.visual.redraw({ height: visualBounds.height + 1, width: visualBounds.width + 1 });\n                }\n            }\n        });\n\n        var ConnectorVisual = Class.extend({\n            init: function (connector) {\n                this.options = deepExtend({}, connector.options);\n                this._c = connector;\n                this.visual = new Circle(this.options);\n                this.refresh();\n            },\n            _hover: function (value) {\n                var options = this.options,\n                    hover = options.hover,\n                    stroke = options.stroke,\n                    fill = options.fill;\n\n                if (value && Utils.isDefined(hover.stroke)) {\n                    stroke = deepExtend({}, stroke, hover.stroke);\n                }\n\n                if (value && Utils.isDefined(hover.fill)) {\n                    fill = hover.fill;\n                }\n\n                this.visual.redraw({\n                    stroke: stroke,\n                    fill: fill\n                });\n            },\n            refresh: function () {\n                var p = this._c.shape.diagram.modelToView(this._c.position()),\n                    relative = p.minus(this._c.shape.bounds(\"transformed\").topLeft()),\n                    value = new Rect(p.x, p.y, 0, 0);\n                value.inflate(this.options.width / 2, this.options.height / 2);\n                this._visualBounds = value;\n                this.visual.redraw({ center: new Point(relative.x, relative.y) });\n            },\n            _hitTest: function (p) {\n                var tp = this._c.shape.diagram.modelToView(p);\n                return this._visualBounds.contains(tp);\n            }\n        });\n\n        deepExtend(diagram, {\n            CompositeUnit: CompositeUnit,\n            TransformUnit: TransformUnit,\n            PanUndoUnit: PanUndoUnit,\n            AddShapeUnit: AddShapeUnit,\n            AddConnectionUnit: AddConnectionUnit,\n            DeleteShapeUnit: DeleteShapeUnit,\n            DeleteConnectionUnit: DeleteConnectionUnit,\n            ConnectionEditAdorner: ConnectionEditAdorner,\n            UndoRedoService: UndoRedoService,\n            ResizingAdorner: ResizingAdorner,\n            Selector: Selector,\n            ToolService: ToolService,\n            ConnectorsAdorner: ConnectorsAdorner,\n            LayoutUndoUnit: LayoutUndoUnit,\n            ConnectionEditUnit: ConnectionEditUnit,\n            ToFrontUnit: ToFrontUnit,\n            ToBackUnit: ToBackUnit,\n            ConnectionRouterBase: ConnectionRouterBase,\n            PolylineRouter: PolylineRouter,\n            CascadingRouter: CascadingRouter,\n            SelectionTool: SelectionTool,\n            ScrollerTool: ScrollerTool,\n            PointerTool: PointerTool,\n            ConnectionEditTool: ConnectionEditTool,\n            RotateUnit: RotateUnit\n        });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        diagram = kendo.dataviz.diagram,\n        Graph = diagram.Graph,\n        Node = diagram.Node,\n        Link = diagram.Link,\n        deepExtend = kendo.deepExtend,\n        Size = diagram.Size,\n        Rect = diagram.Rect,\n        Dictionary = diagram.Dictionary,\n        Set = diagram.Set,\n        HyperTree = diagram.Graph,\n        Utils = diagram.Utils,\n        Point = diagram.Point,\n        EPSILON = 1e-06,\n        DEG_TO_RAD = Math.PI / 180,\n        contains = Utils.contains,\n        grep = $.grep;\n\n    /**\n     * Base class for layout algorithms.\n     * @type {*}\n     */\n    var LayoutBase = kendo.Class.extend({\n        defaultOptions: {\n            type: \"Tree\",\n            subtype: \"Down\",\n            roots: null,\n            animate: false,\n            //-------------------------------------------------------------------\n            /**\n             * Force-directed option: whether the motion of the nodes should be limited by the boundaries of the diagram surface.\n             */\n            limitToView: false,\n            /**\n             * Force-directed option: the amount of friction applied to the motion of the nodes.\n             */\n            friction: 0.9,\n            /**\n             * Force-directed option: the optimal distance between nodes (minimum energy).\n             */\n            nodeDistance: 50,\n            /**\n             * Force-directed option: the number of time things are being calculated.\n             */\n            iterations: 300,\n            //-------------------------------------------------------------------\n            /**\n             * Tree option: the separation in one direction (depends on the subtype what direction this is).\n             */\n            horizontalSeparation: 90,\n            /**\n             * Tree option: the separation in the complementary direction (depends on the subtype what direction this is).\n             */\n            verticalSeparation: 50,\n\n            //-------------------------------------------------------------------\n            /**\n             * Tip-over tree option: children-to-parent vertical distance.\n             */\n            underneathVerticalTopOffset: 15,\n            /**\n             * Tip-over tree option: children-to-parent horizontal distance.\n             */\n            underneathHorizontalOffset: 15,\n            /**\n             * Tip-over tree option: leaf-to-next-branch vertical distance.\n             */\n            underneathVerticalSeparation: 15,\n            //-------------------------------------------------------------------\n            /**\n             * Settings object to organize the different components of the diagram in a grid layout structure\n             */\n            grid: {\n                /**\n                 * The width of the grid in which components are arranged. Beyond this width a component will be on the next row.\n                 */\n                width: 1500,\n                /**\n                 * The left offset of the grid.\n                 */\n                offsetX: 50,\n                /**\n                 * The top offset of the grid.\n                 */\n                offsetY: 50,\n                /**\n                 * The horizontal padding within a cell of the grid where a single component resides.\n                 */\n                componentSpacingX: 20,\n                /**\n                 * The vertical padding within a cell of the grid where a single component resides.\n                 */\n                componentSpacingY: 20\n            },\n\n            //-------------------------------------------------------------------\n            /**\n             * Layered option: the separation height/width between the layers.\n             */\n            layerSeparation: 50,\n            /**\n             * Layered option: how many rounds of shifting and fine-tuning.\n             */\n            layeredIterations: 2,\n            /**\n             * Tree-radial option: the angle at which the layout starts.\n             */\n            startRadialAngle: 0,\n            /**\n             * Tree-radial option: the angle at which the layout starts.\n             */\n            endRadialAngle: 360,\n            /**\n             * Tree-radial option: the separation between levels.\n             */\n            radialSeparation: 150,\n            /**\n             * Tree-radial option: the separation between the root and the first level.\n             */\n            radialFirstLevelSeparation: 200,\n            /**\n             * Tree-radial option: whether a virtual roots bing the components in one radial layout.\n             */\n            keepComponentsInOneRadialLayout: false,\n            //-------------------------------------------------------------------\n\n            // TODO: ensure to change this to false when containers are around\n            ignoreContainers: true,\n            layoutContainerChildren: false,\n            ignoreInvisible: true,\n            animateTransitions: false\n        },\n        init: function () {\n        },\n\n        /**\n         * Organizes the components in a grid.\n         * Returns the final set of nodes (not the Graph).\n         * @param components\n         */\n        gridLayoutComponents: function (components) {\n            if (!components) {\n                throw \"No components supplied.\";\n            }\n\n            // calculate and cache the bounds of the components\n            Utils.forEach(components, function (c) {\n                c.calcBounds();\n            });\n\n            // order by decreasing width\n            components.sort(function (a, b) {\n                return b.bounds.width - a.bounds.width;\n            });\n\n            var maxWidth = this.options.grid.width,\n                offsetX = this.options.grid.componentSpacingX,\n                offsetY = this.options.grid.componentSpacingY,\n                height = 0,\n                startX = this.options.grid.offsetX,\n                startY = this.options.grid.offsetY,\n                x = startX,\n                y = startY,\n                i,\n                resultLinkSet = [],\n                resultNodeSet = [];\n\n            while (components.length > 0) {\n                if (x >= maxWidth) {\n                    // start a new row\n                    x = startX;\n                    y += height + offsetY;\n                    // reset the row height\n                    height = 0;\n                }\n                var component = components.pop();\n                this.moveToOffset(component, new Point(x, y));\n                for (i = 0; i < component.nodes.length; i++) {\n                    resultNodeSet.push(component.nodes[i]); // to be returned in the end\n                }\n                for (i = 0; i < component.links.length; i++) {\n                    resultLinkSet.push(component.links[i]);\n                }\n                var boundingRect = component.bounds;\n                var currentHeight = boundingRect.height;\n                if (currentHeight <= 0 || isNaN(currentHeight)) {\n                    currentHeight = 0;\n                }\n                var currentWidth = boundingRect.width;\n                if (currentWidth <= 0 || isNaN(currentWidth)) {\n                    currentWidth = 0;\n                }\n\n                if (currentHeight >= height) {\n                    height = currentHeight;\n                }\n                x += currentWidth + offsetX;\n            }\n\n            return {\n                nodes: resultNodeSet,\n                links: resultLinkSet\n            };\n        },\n\n        moveToOffset: function (component, p) {\n            var i, j,\n                bounds = component.bounds,\n                deltax = p.x - bounds.x,\n                deltay = p.y - bounds.y;\n\n            for (i = 0; i < component.nodes.length; i++) {\n                var node = component.nodes[i];\n                var nodeBounds = node.bounds();\n                if (nodeBounds.width === 0 && nodeBounds.height === 0 && nodeBounds.x === 0 && nodeBounds.y === 0) {\n                    nodeBounds = new Rect(0, 0, 0, 0);\n                }\n                nodeBounds.x += deltax;\n                nodeBounds.y += deltay;\n                node.bounds(nodeBounds);\n            }\n            for (i = 0; i < component.links.length; i++) {\n                var link = component.links[i];\n                if (link.points) {\n                    var newpoints = [];\n                    var points = link.points;\n                    for (j = 0; j < points.length; j++) {\n                        var pt = points[j];\n                        pt.x += deltax;\n                        pt.y += deltay;\n                        newpoints.push(pt);\n                    }\n                    link.points = newpoints;\n                }\n            }\n            this.currentHorizontalOffset += bounds.width + this.options.grid.offsetX;\n            return new Point(deltax, deltay);\n        },\n\n        transferOptions: function (options) {\n\n            // Size options lead to stackoverflow and need special handling\n\n            this.options = kendo.deepExtend({}, this.defaultOptions);\n            if (Utils.isUndefined(options)) {\n                return;\n            }\n\n            this.options = kendo.deepExtend(this.options, options || {});\n        }\n    });\n\n    /**\n     * The data bucket a hypertree holds in its nodes.     *\n     * @type {*}\n     */\n    /* var ContainerGraph = kendo.Class.extend({\n     init: function (diagram) {\n     this.diagram = diagram;\n     this.graph = new Graph(diagram);\n     this.container = null;\n     this.containerNode = null;\n     }\n\n     });*/\n\n    /**\n     * Adapter between the diagram control and the graph representation. It converts shape and connections to nodes and edges taking into the containers and their collapsef state,\n     * the visibility of items and more. If the layoutContainerChildren is true a hypertree is constructed which holds the hierarchy of containers and many conditions are analyzed\n     * to investigate how the effective graph structure looks like and how the layout has to be performed.\n     * @type {*}\n     */\n    var DiagramToHyperTreeAdapter = kendo.Class.extend({\n        init: function (diagram) {\n\n            /**\n             * The mapping to/from the original nodes.\n             * @type {Dictionary}\n             */\n            this.nodeMap = new Dictionary();\n\n            /**\n             * Gets the mapping of a shape to a container in case the shape sits in a collapsed container.\n             * @type {Dictionary}\n             */\n            this.shapeMap = new Dictionary();\n\n            /**\n             * The nodes being mapped.\n             * @type {Dictionary}\n             */\n            this.nodes = [];\n\n            /**\n             * The connections being mapped.\n             * @type {Dictionary}\n             */\n            this.edges = [];\n\n            // the mapping from an edge to all the connections it represents, this can be both because of multiple connections between\n            // two shapes or because a container holds multiple connections to another shape or container.\n            this.edgeMap = new Dictionary();\n\n            /**\n             * The resulting set of Nodes when the analysis has finished.\n             * @type {Array}\n             */\n            this.finalNodes = [];\n\n            /**\n             * The resulting set of Links when the analysis has finished.\n             * @type {Array}\n             */\n            this.finalLinks = [];\n\n            /**\n             * The items being omitted because of multigraph edges.\n             * @type {Array}\n             */\n            this.ignoredConnections = [];\n\n            /**\n             * The items being omitted because of containers, visibility and other factors.\n             * @type {Array}\n             */\n            this.ignoredShapes = [];\n\n            /**\n             * The map from a node to the partition/hypernode in which it sits. This hyperMap is null if 'options.layoutContainerChildren' is false.\n             * @type {Dictionary}\n             */\n            this.hyperMap = new Dictionary();\n\n            /**\n             * The hypertree contains the hierarchy defined by the containers.\n             * It's in essence a Graph of Graphs with a tree structure defined by the hierarchy of containers.\n             * @type {HyperTree}\n             */\n            this.hyperTree = new Graph();\n\n            /**\n             * The resulting graph after conversion. Note that this does not supply the information contained in the\n             * ignored connection and shape collections.\n             * @type {null}\n             */\n            this.finalGraph = null;\n\n            this.diagram = diagram;\n        },\n\n        /**\n         * The hyperTree is used when the 'options.layoutContainerChildren' is true. It contains the hierarchy of containers whereby each node is a ContainerGraph.\n         * This type of node has a Container reference to the container which holds the Graph items. There are three possible situations during the conversion process:\n         *  - Ignore the containers: the container are non-existent and only normal shapes are mapped. If a shape has a connection to a container it will be ignored as well\n         *    since there is no node mapped for the container.\n         *  - Do not ignore the containers and leave the content of the containers untouched: the top-level elements are being mapped and the children within a container are not altered.\n         *  - Do not ignore the containers and organize the content of the containers as well: the hypertree is constructed and there is a partitioning of all nodes and connections into the hypertree.\n         *    The only reason a connection or node is not being mapped might be due to the visibility, which includes the visibility change through a collapsed parent container.\n         * @param options\n         */\n        convert: function (options) {\n\n            if (Utils.isUndefined(this.diagram)) {\n                throw \"No diagram to convert.\";\n            }\n\n            this.options = kendo.deepExtend({\n                    ignoreInvisible: true,\n                    ignoreContainers: true,\n                    layoutContainerChildren: false\n                },\n                options || {}\n            );\n\n            this.clear();\n            // create the nodes which participate effectively in the graph analysis\n            this._renormalizeShapes();\n\n            // recreate the incoming and outgoing collections of each and every node\n            this._renormalizeConnections();\n\n            // export the resulting graph\n            this.finalNodes = new Dictionary(this.nodes);\n            this.finalLinks = new Dictionary(this.edges);\n\n            this.finalGraph = new Graph();\n            this.finalNodes.forEach(function (n) {\n                this.finalGraph.addNode(n);\n            }, this);\n            this.finalLinks.forEach(function (l) {\n                this.finalGraph.addExistingLink(l);\n            }, this);\n            return this.finalGraph;\n        },\n\n        /**\n         * Maps the specified connection to an edge of the graph deduced from the given diagram.\n         * @param connection\n         * @returns {*}\n         */\n        mapConnection: function (connection) {\n            return this.edgeMap.first(function (edge) {\n                return contains(this.edgeMap.get(edge), connection);\n            });\n        },\n\n        /**\n         * Maps the specified shape to a node of the graph deduced from the given diagram.\n         * @param shape\n         * @returns {*}\n         */\n        mapShape: function (shape) {\n            var keys = this.nodeMap.keys();\n            for (var i = 0, len = keys.length; i < len; i++) {\n                var key = keys[i];\n                if (contains(this.nodeMap.get(key), shape)) {\n                    return key;\n                }\n            }\n        },\n\n        /**\n         * Gets the edge, if any, between the given nodes.\n         * @param a\n         * @param b\n         */\n        getEdge: function (a, b) {\n            return Utils.first(a.links, function (link) {\n                return link.getComplement(a) === b;\n            });\n        },\n\n        /**\n         * Clears all the collections used by the conversion process.\n         */\n        clear: function () {\n            this.finalGraph = null;\n            this.hyperTree = (!this.options.ignoreContainers && this.options.layoutContainerChildren) ? new HyperTree() : null;\n            this.hyperMap = (!this.options.ignoreContainers && this.options.layoutContainerChildren) ? new Dictionary() : null;\n            this.nodeMap = new Dictionary();\n            this.shapeMap = new Dictionary();\n            this.nodes = [];\n            this.edges = [];\n            this.edgeMap = new Dictionary();\n            this.ignoredConnections = [];\n            this.ignoredShapes = [];\n            this.finalNodes = [];\n            this.finalLinks = [];\n        },\n\n        /**\n         * The path from a given ContainerGraph to the root (container).\n         * @param containerGraph\n         * @returns {Array}\n         */\n        listToRoot: function (containerGraph) {\n            var list = [];\n            var s = containerGraph.container;\n            if (!s) {\n                return list;\n            }\n            list.push(s);\n            while (s.parentContainer) {\n                s = s.parentContainer;\n                list.push(s);\n            }\n            list.reverse();\n            return list;\n        },\n\n        firstNonIgnorableContainer: function (shape) {\n\n            if (shape.isContainer && !this._isIgnorableItem(shape)) {\n                return shape;\n            }\n            return !shape.parentContainer ? null : this.firstNonIgnorableContainer(shape.parentContainer);\n        },\n        isContainerConnection: function (a, b) {\n            if (a.isContainer && this.isDescendantOf(a, b)) {\n                return true;\n            }\n            return b.isContainer && this.isDescendantOf(b, a);\n        },\n\n        /**\n         * Returns true if the given shape is a direct child or a nested container child of the given container.\n         * If the given container and shape are the same this will return false since a shape cannot be its own child.\n         * @param scope\n         * @param a\n         * @returns {boolean}\n         */\n        isDescendantOf: function (scope, a) {\n            if (!scope.isContainer) {\n                throw \"Expecting a container.\";\n            }\n            if (scope === a) {\n                return false;\n            }\n            if (contains(scope.children, a)) {\n                return true;\n            }\n            var containers = [];\n            for (var i = 0, len = scope.children.length; i < len; i++) {\n                var c = scope.children[i];\n                if (c.isContainer && this.isDescendantOf(c, a)) {\n                    containers.push(c);\n                }\n            }\n\n            return containers.length > 0;\n        },\n        isIgnorableItem: function (shape) {\n            if (this.options.ignoreInvisible) {\n                if (shape.isCollapsed && this._isVisible(shape)) {\n                    return false;\n                }\n                if (!shape.isCollapsed && this._isVisible(shape)) {\n                    return false;\n                }\n                return true;\n            }\n            else {\n                return shape.isCollapsed && !this._isTop(shape);\n            }\n        },\n\n        /**\n         *  Determines whether the shape is or needs to be mapped to another shape. This occurs essentially when the shape sits in\n         * a collapsed container hierarchy and an external connection needs a node endpoint. This node then corresponds to the mapped shape and is\n         * necessarily a container in the parent hierarchy of the shape.\n         * @param shape\n         */\n        isShapeMapped: function (shape) {\n            return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n        },\n\n        leastCommonAncestor: function (a, b) {\n            if (!a) {\n                throw \"Parameter should not be null.\";\n            }\n            if (!b) {\n                throw \"Parameter should not be null.\";\n            }\n\n            if (!this.hyperTree) {\n                throw \"No hypertree available.\";\n            }\n            var al = this.listToRoot(a);\n            var bl = this.listToRoot(b);\n            var found = null;\n            if (Utils.isEmpty(al) || Utils.isEmpty(bl)) {\n                return this.hyperTree.root.data;\n            }\n            var xa = al[0];\n            var xb = bl[0];\n            var i = 0;\n            while (xa === xb) {\n                found = al[i];\n                i++;\n                if (i >= al.length || i >= bl.length) {\n                    break;\n                }\n                xa = al[i];\n                xb = bl[i];\n            }\n            if (!found) {\n                return this.hyperTree.root.data;\n            }\n            else {\n                return grep(this.hyperTree.nodes, function (n) {\n                    return  n.data.container === found;\n                });\n            }\n        },\n        /**\n         * Determines whether the specified item is a top-level shape or container.\n         * @param item\n         * @returns {boolean}\n         * @private\n         */\n        _isTop: function (item) {\n            return !item.parentContainer;\n        },\n\n        /**\n         * Determines iteratively (by walking up the container stack) whether the specified shape is visible.\n         * This does NOT tell whether the item is not visible due to an explicit Visibility change or due to a collapse state.\n         * @param shape\n         * @returns {*}\n         * @private\n         */\n        _isVisible: function (shape) {\n\n            if (!shape.visible()) {\n                return false;\n            }\n            return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n        },\n\n        _isCollapsed: function (shape) {\n\n            if (shape.isContainer && shape.isCollapsed) {\n                return true;\n            }\n            return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n        },\n\n        /**\n         * First part of the graph creation; analyzing the shapes and containers and deciding whether they should be mapped to a Node.\n         * @private\n         */\n        _renormalizeShapes: function () {\n            // add the nodes, the adjacency structure will be reconstructed later on\n            if (this.options.ignoreContainers) {\n                for (var i = 0, len = this.diagram.shapes.length; i < len; i++) {\n                    var shape = this.diagram.shapes[i];\n\n                    // if not visible (and ignoring the invisible ones) or a container we skip\n                    if ((this.options.ignoreInvisible && !this._isVisible(shape)) || shape.isContainer) {\n                        this.ignoredShapes.push(shape);\n                        continue;\n                    }\n                    var node = new Node(shape.id, shape);\n                    node.isVirtual = false;\n\n                    // the mapping will always contain singletons and the hyperTree will be null\n                    this.nodeMap.add(node, [shape]);\n                    this.nodes.push(node);\n                }\n            }\n            else {\n                throw \"Containers are not supported yet, but stay tuned.\";\n            }\n        },\n\n        /**\n         * Second part of the graph creation; analyzing the connections and deciding whether they should be mapped to an edge.\n         * @private\n         */\n        _renormalizeConnections: function () {\n            if (this.diagram.connections.length === 0) {\n                return;\n            }\n            for (var i = 0, len = this.diagram.connections.length; i < len; i++) {\n                var conn = this.diagram.connections[i];\n\n                if (this.isIgnorableItem(conn)) {\n                    this.ignoredConnections.push(conn);\n                    continue;\n                }\n\n                var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n                var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n\n                // no layout for floating connections\n                if (!source || !sink) {\n                    this.ignoredConnections.push(conn);\n                    continue;\n                }\n\n                if (contains(this.ignoredShapes, source) && !this.shapeMap.containsKey(source)) {\n                    this.ignoredConnections.push(conn);\n                    continue;\n                }\n                if (contains(this.ignoredShapes, sink) && !this.shapeMap.containsKey(sink)) {\n                    this.ignoredConnections.push(conn);\n                    continue;\n                }\n\n                // if the endpoint sits in a collapsed container we need the container rather than the shape itself\n                if (this.shapeMap.containsKey(source)) {\n                    source = this.shapeMap[source];\n                }\n                if (this.shapeMap.containsKey(sink)) {\n                    sink = this.shapeMap[sink];\n                }\n\n                var sourceNode = this.mapShape(source);\n                var sinkNode = this.mapShape(sink);\n                if ((sourceNode === sinkNode) || this.areConnectedAlready(sourceNode, sinkNode)) {\n                    this.ignoredConnections.push(conn);\n                    continue;\n                }\n\n                if (sourceNode === null || sinkNode === null) {\n                    throw \"A shape was not mapped to a node.\";\n                }\n                if (this.options.ignoreContainers) {\n                    // much like a floating connection here since at least one end is attached to a container\n                    if (sourceNode.isVirtual || sinkNode.isVirtual) {\n                        this.ignoredConnections.push(conn);\n                        continue;\n                    }\n                    var newEdge = new Link(sourceNode, sinkNode, conn.id, conn);\n\n                    this.edgeMap.add(newEdge, [conn]);\n                    this.edges.push(newEdge);\n                }\n                else {\n                    throw \"Containers are not supported yet, but stay tuned.\";\n                }\n            }\n        },\n\n        areConnectedAlready: function (n, m) {\n            return Utils.any(this.edges, function (l) {\n                return l.source === n && l.target === m || l.source === m && l.target === n;\n            });\n        }\n\n        /**\n         * Depth-first traversal of the given container.\n         * @param container\n         * @param action\n         * @param includeStart\n         * @private\n         */\n        /* _visitContainer: function (container, action, includeStart) {\n\n         *//*if (container == null) throw new ArgumentNullException(\"container\");\n         if (action == null) throw new ArgumentNullException(\"action\");\n         if (includeStart) action(container);\n         if (container.children.isEmpty()) return;\n         foreach(\n         var item\n         in\n         container.children.OfType < IShape > ()\n         )\n         {\n         var childContainer = item\n         as\n         IContainerShape;\n         if (childContainer != null) this.VisitContainer(childContainer, action);\n         else action(item);\n         }*//*\n         }*/\n\n\n    });\n\n    /**\n     * The classic spring-embedder (aka force-directed, Fruchterman-Rheingold, barycentric) algorithm.\n     * http://en.wikipedia.org/wiki/Force-directed_graph_drawing\n     *  - Chapter 12 of Tamassia et al. \"Handbook of graph drawing and visualization\".\n     *  - Kobourov on preprint arXiv; http://arxiv.org/pdf/1201.3011.pdf\n     *  - Fruchterman and Rheingold in SOFTWARE-PRACTICE AND EXPERIENCE, VOL. 21(1 1), 1129-1164 (NOVEMBER 1991)\n     * @type {*}\n     */\n    var SpringLayout = LayoutBase.extend({\n        init: function (diagram) {\n            var that = this;\n            LayoutBase.fn.init.call(that);\n            if (Utils.isUndefined(diagram)) {\n                throw \"Diagram is not specified.\";\n            }\n            this.diagram = diagram;\n        },\n\n        layout: function (options) {\n\n            this.transferOptions(options);\n\n            var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n            var graph = adapter.convert(options);\n            if (graph.isEmpty()) {\n                return;\n            }\n            // split into connected components\n            var components = graph.getConnectedComponents();\n            if (Utils.isEmpty(components)) {\n                return;\n            }\n            for (var i = 0; i < components.length; i++) {\n                var component = components[i];\n                this.layoutGraph(component, options);\n            }\n            var finalNodeSet = this.gridLayoutComponents(components);\n            return new diagram.LayoutState(this.diagram, finalNodeSet);\n        },\n\n        layoutGraph: function (graph, options) {\n\n            if (Utils.isDefined(options)) {\n                this.transferOptions(options);\n            }\n            this.graph = graph;\n\n            var initialTemperature = this.options.nodeDistance * 9;\n            this.temperature = initialTemperature;\n\n            var guessBounds = this._expectedBounds();\n            this.width = guessBounds.width;\n            this.height = guessBounds.height;\n\n            for (var step = 0; step < this.options.iterations; step++) {\n                this.refineStage = step >= this.options.iterations * 5 / 6;\n                this.tick();\n                // exponential cooldown\n                this.temperature = this.refineStage ?\n                    initialTemperature / 30 :\n                    initialTemperature * (1 - step / (2 * this.options.iterations ));\n            }\n        },\n\n        /**\n         * Single iteration of the simulation.\n         */\n        tick: function () {\n            var i;\n            // collect the repulsive forces on each node\n            for (i = 0; i < this.graph.nodes.length; i++) {\n                this._repulsion(this.graph.nodes[i]);\n            }\n\n            // collect the attractive forces on each node\n            for (i = 0; i < this.graph.links.length; i++) {\n                this._attraction(this.graph.links[i]);\n            }\n            // update the positions\n            for (i = 0; i < this.graph.nodes.length; i++) {\n                var node = this.graph.nodes[i];\n                var offset = Math.sqrt(node.dx * node.dx + node.dy * node.dy);\n                if (offset === 0) {\n                    return;\n                }\n                node.x += Math.min(offset, this.temperature) * node.dx / offset;\n                node.y += Math.min(offset, this.temperature) * node.dy / offset;\n                if (this.options.limitToView) {\n                    node.x = Math.min(this.width, Math.max(node.width / 2, node.x));\n                    node.y = Math.min(this.height, Math.max(node.height / 2, node.y));\n                }\n            }\n        },\n\n        /**\n         * Shakes the node away from its current position to escape the deadlock.\n         * @param node A Node.\n         * @private\n         */\n        _shake: function (node) {\n            // just a simple polar neighborhood\n            var rho = Math.random() * this.options.nodeDistance / 4;\n            var alpha = Math.random() * 2 * Math.PI;\n            node.x += rho * Math.cos(alpha);\n            node.y -= rho * Math.sin(alpha);\n        },\n\n        /**\n         * The typical Coulomb-Newton force law F=k/r^2\n         * @remark This only works in dimensions less than three.\n         * @param d\n         * @param n A Node.\n         * @param m Another Node.\n         * @returns {number}\n         * @private\n         */\n        _InverseSquareForce: function (d, n, m) {\n            var force;\n            if (!this.refineStage) {\n                force = Math.pow(d, 2) / Math.pow(this.options.nodeDistance, 2);\n            }\n            else {\n                var deltax = n.x - m.x;\n                var deltay = n.y - m.y;\n\n                var wn = n.width / 2;\n                var hn = n.height / 2;\n                var wm = m.width / 2;\n                var hm = m.height / 2;\n\n                force = (Math.pow(deltax, 2) / Math.pow(wn + wm + this.options.nodeDistance, 2)) + (Math.pow(deltay, 2) / Math.pow(hn + hm + this.options.nodeDistance, 2));\n            }\n            return force * 4 / 3;\n        },\n\n        /**\n         * The typical Hooke force law F=kr^2\n         * @param d\n         * @param n\n         * @param m\n         * @returns {number}\n         * @private\n         */\n        _SquareForce: function (d, n, m) {\n            return 1 / this._InverseSquareForce(d, n, m);\n        },\n\n        _repulsion: function (n) {\n            n.dx = 0;\n            n.dy = 0;\n            Utils.forEach(this.graph.nodes, function (m) {\n                if (m === n) {\n                    return;\n                }\n                while (n.x === m.x && n.y === m.y) {\n                    this._shake(m);\n                }\n                var vx = n.x - m.x;\n                var vy = n.y - m.y;\n                var distance = Math.sqrt(vx * vx + vy * vy);\n                var r = this._SquareForce(distance, n, m) * 2;\n                n.dx += (vx / distance) * r;\n                n.dy += (vy / distance) * r;\n            }, this);\n        },\n        _attraction: function (link) {\n            var t = link.target;\n            var s = link.source;\n            if (s === t) {\n                // loops induce endless shakes\n                return;\n            }\n            while (s.x === t.x && s.y === t.y) {\n                this._shake(t);\n            }\n\n            var vx = s.x - t.x;\n            var vy = s.y - t.y;\n            var distance = Math.sqrt(vx * vx + vy * vy);\n\n            var a = this._InverseSquareForce(distance, s, t) * 5;\n            var dx = (vx / distance) * a;\n            var dy = (vy / distance) * a;\n            t.dx += dx;\n            t.dy += dy;\n            s.dx -= dx;\n            s.dy -= dy;\n        },\n\n        /**\n         * Calculates the expected bounds after layout.\n         * @returns {*}\n         * @private\n         */\n        _expectedBounds: function () {\n\n            var size, N = this.graph.nodes.length, /*golden ration optimal?*/ ratio = 1.5, multiplier = 4;\n            if (N === 0) {\n                return size;\n            }\n            size = Utils.fold(this.graph.nodes, function (s, node) {\n                var area = node.width * node.height;\n                if (area > 0) {\n                    s += Math.sqrt(area);\n                    return s;\n                }\n                return 0;\n            }, 0, this);\n            var av = size / N;\n            var squareSize = av * Math.ceil(Math.sqrt(N));\n            var width = squareSize * Math.sqrt(ratio);\n            var height = squareSize / Math.sqrt(ratio);\n            return { width: width * multiplier, height: height * multiplier };\n        }\n\n    });\n\n    var TreeLayoutProcessor = kendo.Class.extend({\n\n        init: function (options) {\n            this.center = null;\n            this.options = options;\n        },\n        layout: function (treeGraph, root) {\n            this.graph = treeGraph;\n            if (!this.graph.nodes || this.graph.nodes.length === 0) {\n                return;\n            }\n\n            if (!contains(this.graph.nodes, root)) {\n                throw \"The given root is not in the graph.\";\n            }\n\n            this.center = root;\n            this.graph.cacheRelationships();\n            /* var nonull = this.graph.nodes.where(function (n) {\n             return n.associatedShape != null;\n             });*/\n\n            // transfer the rects\n            /*nonull.forEach(function (n) {\n             n.Location = n.associatedShape.Position;\n             n.NodeSize = n.associatedShape.ActualBounds.ToSize();\n             }\n\n             );*/\n\n            // caching the children\n            /* nonull.forEach(function (n) {\n             n.children = n.getChildren();\n             });*/\n\n            this.layoutSwitch();\n\n            // apply the layout to the actual visuals\n            // nonull.ForEach(n => n.associatedShape.Position = n.Location);\n        },\n\n        layoutLeft: function (left) {\n            this.setChildrenDirection(this.center, \"Left\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            var h = 0, w = 0, y, i, node;\n            for (i = 0; i < left.length; i++) {\n                node = left[i];\n                node.TreeDirection = \"Left\";\n                var s = this.measure(node, Size.Empty);\n                w = Math.max(w, s.Width);\n                h += s.height + this.options.verticalSeparation;\n            }\n\n            h -= this.options.verticalSeparation;\n            var x = this.center.x - this.options.horizontalSeparation;\n            y = this.center.y + ((this.center.height - h) / 2);\n            for (i = 0; i < left.length; i++) {\n                node = left[i];\n                var p = new Point(x - node.Size.width, y);\n\n                this.arrange(node, p);\n                y += node.Size.height + this.options.verticalSeparation;\n            }\n        },\n\n        layoutRight: function (right) {\n            this.setChildrenDirection(this.center, \"Right\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            var h = 0, w = 0, y, i, node;\n            for (i = 0; i < right.length; i++) {\n                node = right[i];\n                node.TreeDirection = \"Right\";\n                var s = this.measure(node, Size.Empty);\n                w = Math.max(w, s.Width);\n                h += s.height + this.options.verticalSeparation;\n            }\n\n            h -= this.options.verticalSeparation;\n            var x = this.center.x + this.options.horizontalSeparation + this.center.width;\n            y = this.center.y + ((this.center.height - h) / 2);\n            for (i = 0; i < right.length; i++) {\n                node = right[i];\n                var p = new Point(x, y);\n                this.arrange(node, p);\n                y += node.Size.height + this.options.verticalSeparation;\n            }\n        },\n\n        layoutUp: function (up) {\n            this.setChildrenDirection(this.center, \"Up\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            var w = 0, y, node, i;\n            for (i = 0; i < up.length; i++) {\n                node = up[i];\n                node.TreeDirection = \"Up\";\n                var s = this.measure(node, Size.Empty);\n                w += s.width + this.options.horizontalSeparation;\n            }\n\n            w -= this.options.horizontalSeparation;\n            var x = this.center.x + (this.center.width / 2) - (w / 2);\n\n            // y = this.center.y -verticalSeparation -this.center.height/2 - h;\n            for (i = 0; i < up.length; i++) {\n                node = up[i];\n                y = this.center.y - this.options.verticalSeparation - node.Size.height;\n                var p = new Point(x, y);\n                this.arrange(node, p);\n                x += node.Size.width + this.options.horizontalSeparation;\n            }\n        },\n\n        layoutDown: function (down) {\n            var node, i;\n            this.setChildrenDirection(this.center, \"Down\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            var w = 0, y;\n            for (i = 0; i < down.length; i++) {\n                node = down[i];\n                node.treeDirection = \"Down\";\n                var s = this.measure(node, Size.Empty);\n                w += s.width + this.options.horizontalSeparation;\n            }\n\n            w -= this.options.horizontalSeparation;\n            var x = this.center.x + (this.center.width / 2) - (w / 2);\n            y = this.center.y + this.options.verticalSeparation + this.center.height;\n            for (i = 0; i < down.length; i++) {\n                node = down[i];\n                var p = new Point(x, y);\n                this.arrange(node, p);\n                x += node.Size.width + this.options.horizontalSeparation;\n            }\n        },\n\n        layoutRadialTree: function () {\n            // var rmax = children.Aggregate(0D, (current, node) => Math.max(node.SectorAngle, current));\n            this.setChildrenDirection(this.center, \"Radial\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            this.previousRoot = null;\n            var startAngle = this.options.startRadialAngle * DEG_TO_RAD;\n            var endAngle = this.options.endRadialAngle * DEG_TO_RAD;\n            if (endAngle <= startAngle) {\n                throw \"Final angle should not be less than the start angle.\";\n            }\n\n            this.maxDepth = 0;\n            this.origin = new Point(this.center.x, this.center.y);\n            this.calculateAngularWidth(this.center, 0);\n\n            // perform the layout\n            if (this.maxDepth > 0) {\n                this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n            }\n\n            // update properties of the root node\n            this.center.Angle = endAngle - startAngle;\n        },\n\n        tipOverTree: function (down, startFromLevel) {\n            if (Utils.isUndefined(startFromLevel)) {\n                startFromLevel = 0;\n            }\n\n            this.setChildrenDirection(this.center, \"Down\", false);\n            this.setChildrenLayout(this.center, \"Default\", false);\n            this.setChildrenLayout(this.center, \"Underneath\", false, startFromLevel);\n            var w = 0, y, node, i;\n            for (i = 0; i < down.length; i++) {\n                node = down[i];\n\n                // if (node.IsSpecial) continue;\n                node.TreeDirection = \"Down\";\n                var s = this.measure(node, Size.Empty);\n                w += s.width + this.options.horizontalSeparation;\n            }\n\n            w -= this.options.horizontalSeparation;\n\n            // putting the root in the center with respect to the whole diagram is not a nice result, let's put it with respect to the first level only\n            w -= down[down.length - 1].width;\n            w += down[down.length - 1].associatedShape.bounds().width;\n\n            var x = this.center.x + (this.center.width / 2) - (w / 2);\n            y = this.center.y + this.options.verticalSeparation + this.center.height;\n            for (i = 0; i < down.length; i++) {\n                node = down[i];\n                // if (node.IsSpecial) continue;\n                var p = new Point(x, y);\n                this.arrange(node, p);\n                x += node.Size.width + this.options.horizontalSeparation;\n            }\n\n            /*//let's place the special node, assuming there is only one\n             if (down.Count(n => n.IsSpecial) > 0)\n             {\n             var special = (from n in down where n.IsSpecial select n).First();\n             if (special.Children.Count > 0)\n             throw new DiagramException(\"The 'special' element should not have children.\");\n             special.Data.Location = new Point(Center.Data.Location.X + Center.AssociatedShape.BoundingRectangle.Width + this.options.HorizontalSeparation, Center.Data.Location.Y);\n             }*/\n        },\n        calculateAngularWidth: function (n, d) {\n            if (d > this.maxDepth) {\n                this.maxDepth = d;\n            }\n\n            var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt((w * w) + (h * h)) / d;\n\n            if (n.children.length > 0) {\n                // eventually with n.IsExpanded\n                for (var i = 0, len = n.children.length; i < len; i++) {\n                    var child = n.children[i];\n                    aw += this.calculateAngularWidth(child, d + 1);\n                }\n                aw = Math.max(diameter, aw);\n            }\n            else {\n                aw = diameter;\n            }\n\n            n.sectorAngle = aw;\n            return aw;\n        },\n        sortChildren: function (n) {\n            var basevalue = 0, i;\n\n            // update basevalue angle for node ordering\n            if (n.parents.length > 1) {\n                throw \"Node is not part of a tree.\";\n            }\n            var p = n.parents[0];\n            if (p) {\n                var pl = new Point(p.x, p.y);\n                var nl = new Point(n.x, n.y);\n                basevalue = this.normalizeAngle(Math.atan2(pl.y - nl.y, pl.x - nl.x));\n            }\n\n            var count = n.children.length;\n            if (count === 0) {\n                return null;\n            }\n\n            var angle = [];\n            var idx = [];\n\n            for (i = 0; i < count; ++i) {\n                var c = n.children[i];\n                var l = new Point(c.x, c.y);\n                idx[i] = i;\n                angle[i] = this.normalizeAngle(-basevalue + Math.atan2(l.y - l.y, l.x - l.x));\n            }\n\n            Utils.bisort(angle, idx);\n            var col = []; // list of nodes\n            var children = n.children;\n            for (i = 0; i < count; ++i) {\n                col.push(children[idx[i]]);\n            }\n\n            return col;\n        },\n\n        normalizeAngle: function (angle) {\n            while (angle > Math.PI * 2) {\n                angle -= 2 * Math.PI;\n            }\n            while (angle < 0) {\n                angle += Math.PI * 2;\n            }\n            return angle;\n        },\n        radialLayout: function (node, radius, startAngle, endAngle) {\n            var deltaTheta = endAngle - startAngle;\n            var deltaThetaHalf = deltaTheta / 2.0;\n            var parentSector = node.sectorAngle;\n            var fraction = 0;\n            var sorted = this.sortChildren(node);\n            for (var i = 0, len = sorted.length; i < len; i++) {\n                var childNode = sorted[i];\n                var cp = childNode;\n                var childAngleFraction = cp.sectorAngle / parentSector;\n                if (childNode.children.length > 0) {\n                    this.radialLayout(childNode,\n                        radius + this.options.radialSeparation,\n                        startAngle + (fraction * deltaTheta),\n                        startAngle + ((fraction + childAngleFraction) * deltaTheta));\n                }\n\n                this.setPolarLocation(childNode, radius, startAngle + (fraction * deltaTheta) + (childAngleFraction * deltaThetaHalf));\n                cp.angle = childAngleFraction * deltaTheta;\n                fraction += childAngleFraction;\n            }\n        },\n        setPolarLocation: function (node, radius, angle) {\n            node.x = this.origin.x + (radius * Math.cos(angle));\n            node.y = this.origin.y + (radius * Math.sin(angle));\n            node.BoundingRectangle = new Rect(node.x, node.y, node.width, node.height);\n        },\n\n        /**\n         * Sets the children direction recursively.\n         * @param node\n         * @param direction\n         * @param includeStart\n         */\n        setChildrenDirection: function (node, direction, includeStart) {\n            var rootDirection = node.treeDirection;\n            this.graph.depthFirstTraversal(node, function (n) {\n                n.treeDirection = direction;\n            });\n            if (!includeStart) {\n                node.treeDirection = rootDirection;\n            }\n        },\n\n        /**\n         * Sets the children layout recursively.\n         * @param node\n         * @param layout\n         * @param includeStart\n         * @param startFromLevel\n         */\n        setChildrenLayout: function (node, layout, includeStart, startFromLevel) {\n            if (Utils.isUndefined(startFromLevel)) {\n                startFromLevel = 0;\n            }\n            var rootLayout = node.childrenLayout;\n            if (startFromLevel > 0) {\n                // assign levels to the Node.Level property\n                this.graph.assignLevels(node);\n\n                // assign the layout on the condition that the level is at least the 'startFromLevel'\n                this.graph.depthFirstTraversal(\n                    node, function (s) {\n                        if (s.level >= startFromLevel + 1) {\n                            s.childrenLayout = layout;\n                        }\n                    }\n                );\n            }\n            else {\n                this.graph.depthFirstTraversal(node, function (s) {\n                    s.childrenLayout = layout;\n                });\n\n                // if the start should not be affected we put the state back\n                if (!includeStart) {\n                    node.childrenLayout = rootLayout;\n                }\n            }\n        },\n\n        /**\n         * Returns the actual size of the node. The given size is the allowed space wherein the node can lay out itself.\n         * @param node\n         * @param givenSize\n         * @returns {Size}\n         */\n        measure: function (node, givenSize) {\n            var w = 0, h = 0, s;\n            var result = new Size(0, 0);\n            if (!node) {\n                throw \"\";\n            }\n            var b = node.associatedShape.bounds();\n            var shapeWidth = b.width;\n            var shapeHeight = b.height;\n            if (node.parents.length !== 1) {\n                throw \"Node not in a spanning tree.\";\n            }\n\n            var parent = node.parents[0];\n            if (node.treeDirection === \"Undefined\") {\n                node.treeDirection = parent.treeDirection;\n            }\n\n            if (Utils.isEmpty(node.children)) {\n                result = new Size(\n                    Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth,\n                    Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n            }\n            else if (node.children.length === 1) {\n                switch (node.treeDirection) {\n                    case \"Radial\":\n                        s = this.measure(node.children[0], givenSize); // child size\n                        w = shapeWidth + (this.options.radialSeparation * Math.cos(node.AngleToParent)) + s.width;\n                        h = shapeHeight + Math.abs(this.options.radialSeparation * Math.sin(node.AngleToParent)) + s.height;\n                        break;\n                    case \"Left\":\n                    case \"Right\":\n                        switch (node.childrenLayout) {\n\n                            case \"TopAlignedWithParent\":\n                                break;\n\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                s = this.measure(node.children[0], givenSize);\n                                w = shapeWidth + s.width + this.options.underneathHorizontalOffset;\n                                h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n                                break;\n\n                            case \"Default\":\n                                s = this.measure(node.children[0], givenSize);\n                                w = shapeWidth + this.options.horizontalSeparation + s.width;\n                                h = Math.max(shapeHeight, s.height);\n                                break;\n\n                            default:\n                                throw \"Unhandled TreeDirection in the Radial layout measuring.\";\n                        }\n                        break;\n                    case \"Up\":\n                    case \"Down\":\n                        switch (node.childrenLayout) {\n\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                s = this.measure(node.children[0], givenSize);\n                                w = Math.max(shapeWidth, s.width + this.options.underneathHorizontalOffset);\n                                h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n                                break;\n\n                            case \"Default\":\n                                s = this.measure(node.children[0], givenSize);\n                                h = shapeHeight + this.options.verticalSeparation + s.height;\n                                w = Math.max(shapeWidth, s.width);\n                                break;\n\n                            default:\n                                throw \"Unhandled TreeDirection in the Down layout measuring.\";\n                        }\n                        break;\n                    default:\n                        throw \"Unhandled TreeDirection in the layout measuring.\";\n                }\n\n                result = new Size(w, h);\n            }\n            else {\n                var i, childNode;\n                switch (node.treeDirection) {\n                    case \"Left\":\n                    case \"Right\":\n                        switch (node.childrenLayout) {\n\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                w = shapeWidth;\n                                h = shapeHeight + this.options.underneathVerticalTopOffset;\n                                for (i = 0; i < node.children.length; i++) {\n                                    childNode = node.children[i];\n                                    s = this.measure(childNode, givenSize);\n                                    w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n                                    h += s.height + this.options.underneathVerticalSeparation;\n                                }\n\n                                h -= this.options.underneathVerticalSeparation;\n                                break;\n\n                            case \"Default\":\n                                w = shapeWidth;\n                                h = 0;\n                                for (i = 0; i < node.children.length; i++) {\n                                    childNode = node.children[i];\n                                    s = this.measure(childNode, givenSize);\n                                    w = Math.max(w, shapeWidth + this.options.horizontalSeparation + s.width);\n                                    h += s.height + this.options.verticalSeparation;\n                                }\n                                h -= this.options.verticalSeparation;\n                                break;\n\n                            default:\n                                throw \"Unhandled TreeDirection in the Right layout measuring.\";\n                        }\n\n                        break;\n                    case \"Up\":\n                    case \"Down\":\n\n                        switch (node.childrenLayout) {\n\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                w = shapeWidth;\n                                h = shapeHeight + this.options.underneathVerticalTopOffset;\n                                for (i = 0; i < node.children.length; i++) {\n                                    childNode = node.children[i];\n                                    s = this.measure(childNode, givenSize);\n                                    w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n                                    h += s.height + this.options.underneathVerticalSeparation;\n                                }\n\n                                h -= this.options.underneathVerticalSeparation;\n                                break;\n\n                            case \"Default\":\n                                w = 0;\n                                h = 0;\n                                for (i = 0; i < node.children.length; i++) {\n                                    childNode = node.children[i];\n                                    s = this.measure(childNode, givenSize);\n                                    w += s.width + this.options.horizontalSeparation;\n                                    h = Math.max(h, s.height + this.options.verticalSeparation + shapeHeight);\n                                }\n\n                                w -= this.options.horizontalSeparation;\n                                break;\n\n                            default:\n                                throw \"Unhandled TreeDirection in the Down layout measuring.\";\n                        }\n\n                        break;\n                    default:\n                        throw \"Unhandled TreeDirection in the layout measuring.\";\n                }\n\n                result = new Size(w, h);\n            }\n\n            node.SectorAngle = Math.sqrt((w * w / 4) + (h * h / 4));\n            node.Size = result;\n            return result;\n        },\n        arrange: function (n, p) {\n            var i, pp, child, node, childrenwidth, b = n.associatedShape.bounds();\n            var shapeWidth = b.width;\n            var shapeHeight = b.height;\n            if (Utils.isEmpty(n.children)) {\n                n.x = p.x;\n                n.y = p.y;\n                n.BoundingRectangle = new Rect(p.x, p.y, shapeWidth, shapeHeight);\n            }\n            else {\n                var x, y;\n                var selfLocation;\n                switch (n.treeDirection) {\n                    case \"Left\":\n                        switch (n.childrenLayout) {\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                selfLocation = p;\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n                                for (i = 0; i < node.children.length; i++) {\n                                    node = node.children[i];\n                                    x = selfLocation.x - node.associatedShape.width - this.options.underneathHorizontalOffset;\n                                    pp = new Point(x, y);\n                                    this.arrange(node, pp);\n                                    y += node.Size.height + this.options.underneathVerticalSeparation;\n                                }\n                                break;\n\n                            case \"Default\":\n                                selfLocation = new Point(p.x + n.Size.width - shapeWidth, p.y + ((n.Size.height - shapeHeight) / 2));\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                x = selfLocation.x - this.options.horizontalSeparation; // alignment of children\n                                y = p.y;\n                                for (i = 0; i < n.children.length; i++) {\n                                    node = n.children[i];\n                                    pp = new Point(x - node.Size.width, y);\n                                    this.arrange(node, pp);\n                                    y += node.Size.height + this.options.verticalSeparation;\n                                }\n                                break;\n\n                            default:\n                                throw   \"Unsupported TreeDirection\";\n                        }\n\n                        break;\n                    case \"Right\":\n                        switch (n.childrenLayout) {\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n\n                            case \"Underneath\":\n                                selfLocation = p;\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                x = p.x + shapeWidth + this.options.underneathHorizontalOffset;\n\n                                // alignment of children left-underneath the parent\n                                y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n                                for (i = 0; i < n.children.length; i++) {\n                                    node = n.children[i];\n                                    pp = new Point(x, y);\n                                    this.arrange(node, pp);\n                                    y += node.Size.height + this.options.underneathVerticalSeparation;\n                                }\n\n                                break;\n\n                            case \"Default\":\n                                selfLocation = new Point(p.x, p.y + ((n.Size.height - shapeHeight) / 2));\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                x = p.x + shapeWidth + this.options.horizontalSeparation; // alignment of children\n                                y = p.y;\n                                for (i = 0; i < n.children.length; i++) {\n                                    node = n.children[i];\n                                    pp = new Point(x, y);\n                                    this.arrange(node, pp);\n                                    y += node.Size.height + this.options.verticalSeparation;\n                                }\n                                break;\n\n                            default:\n                                throw   \"Unsupported TreeDirection\";\n                        }\n\n                        break;\n                    case \"Up\":\n                        selfLocation = new Point(p.x + ((n.Size.width - shapeWidth) / 2), p.y + n.Size.height - shapeHeight);\n                        n.x = selfLocation.x;\n                        n.y = selfLocation.y;\n                        n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                        if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n                            childrenwidth = 0;\n                            // means there is an aberration due to the oversized Element with respect to the children\n                            for (i = 0; i < n.children.length; i++) {\n                                child = n.children[i];\n                                childrenwidth += child.Size.width + this.options.horizontalSeparation;\n                            }\n                            childrenwidth -= this.options.horizontalSeparation;\n                            x = p.x + ((shapeWidth - childrenwidth) / 2);\n                        }\n                        else {\n                            x = p.x;\n                        }\n\n                        for (i = 0; i < n.children.length; i++) {\n                            node = n.children[i];\n                            y = selfLocation.y - this.options.verticalSeparation - node.Size.height;\n                            pp = new Point(x, y);\n                            this.arrange(node, pp);\n                            x += node.Size.width + this.options.horizontalSeparation;\n                        }\n                        break;\n\n                    case \"Down\":\n\n                        switch (n.childrenLayout) {\n                            case \"TopAlignedWithParent\":\n                            case \"BottomAlignedWithParent\":\n                                break;\n                            case \"Underneath\":\n                                selfLocation = p;\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                x = p.x + this.options.underneathHorizontalOffset; // alignment of children left-underneath the parent\n                                y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n                                for (i = 0; i < n.children.length; i++) {\n                                    node = n.children[i];\n                                    pp = new Point(x, y);\n                                    this.arrange(node, pp);\n                                    y += node.Size.height + this.options.underneathVerticalSeparation;\n                                }\n                                break;\n\n                            case    \"Default\":\n                                selfLocation = new Point(p.x + ((n.Size.width - shapeWidth) / 2), p.y);\n                                n.x = selfLocation.x;\n                                n.y = selfLocation.y;\n                                n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n                                if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n                                    childrenwidth = 0;\n                                    // means there is an aberration due to the oversized Element with respect to the children\n                                    for (i = 0; i < n.children.length; i++) {\n                                        child = n.children[i];\n                                        childrenwidth += child.Size.width + this.options.horizontalSeparation;\n                                    }\n\n                                    childrenwidth -= this.options.horizontalSeparation;\n                                    x = p.x + ((shapeWidth - childrenwidth) / 2);\n                                }\n                                else {\n                                    x = p.x;\n                                }\n\n                                for (i = 0; i < n.children.length; i++) {\n                                    node = n.children[i];\n                                    y = selfLocation.y + this.options.verticalSeparation + shapeHeight;\n                                    pp = new Point(x, y);\n                                    this.arrange(node, pp);\n                                    x += node.Size.width + this.options.horizontalSeparation;\n                                }\n                                break;\n\n                            default:\n                                throw   \"Unsupported TreeDirection\";\n                        }\n                        break;\n\n                    case \"None\":\n                        break;\n\n                    default:\n                        throw   \"Unsupported TreeDirection\";\n                }\n            }\n        },\n        layoutSwitch: function () {\n            if (!this.center) {\n                return;\n            }\n\n            if (Utils.isEmpty(this.center.children)) {\n                return;\n            }\n\n            var type = this.options.subtype;\n            if (Utils.isUndefined(type)) {\n                type = \"Down\";\n            }\n            var single, male, female, leftcount;\n            var children = this.center.children;\n            switch (type.toLowerCase()) {\n                case \"radial\":\n                case \"radialtree\":\n                    this.layoutRadialTree();\n                    break;\n\n                case \"mindmaphorizontal\":\n                case \"mindmap\":\n                    single = this.center.children;\n\n                    if (this.center.children.length === 1) {\n                        this.layoutRight(single);\n                    }\n                    else {\n                        // odd number will give one more at the right\n                        leftcount = children.length / 2;\n                        male = grep(this.center.children, function (n) {\n                            return Utils.indexOf(children, n) < leftcount;\n                        });\n                        female = grep(this.center.children, function (n) {\n                            return Utils.indexOf(children, n) >= leftcount;\n                        });\n\n                        this.layoutLeft(male);\n                        this.layoutRight(female);\n                    }\n                    break;\n\n                case \"mindmapvertical\":\n                    single = this.center.children;\n\n                    if (this.center.children.length === 1) {\n                        this.layoutDown(single);\n                    }\n                    else {\n                        // odd number will give one more at the right\n                        leftcount = children.length / 2;\n                        male = grep(this.center.children, function (n) {\n                            return Utils.indexOf(children, n) < leftcount;\n                        });\n                        female = grep(this.center.children, function (n) {\n                            return Utils.indexOf(children, n) >= leftcount;\n                        });\n                        this.layoutUp(male);\n                        this.layoutDown(female);\n                    }\n                    break;\n\n                case \"right\":\n                    this.layoutRight(this.center.children);\n                    break;\n\n                case \"left\":\n                    this.layoutLeft(this.center.children);\n                    break;\n\n                case \"up\":\n                case \"bottom\":\n                    this.layoutUp(this.center.children);\n                    break;\n\n                case \"down\":\n                case \"top\":\n                    this.layoutDown(this.center.children);\n                    break;\n\n                case \"tipover\":\n                case \"tipovertree\":\n                    if (this.options.tipOverTreeStartLevel < 0) {\n                        throw  \"The tip-over level should be a positive integer.\";\n                    }\n                    this.tipOverTree(this.center.children, this.options.tipOverTreeStartLevel);\n                    break;\n\n                case \"undefined\":\n                case \"none\":\n                    break;\n            }\n        }\n    });\n\n    /**\n     * The various tree layout algorithms.\n     * @type {*}\n     */\n    var TreeLayout = LayoutBase.extend({\n        init: function (diagram) {\n            var that = this;\n            LayoutBase.fn.init.call(that);\n            if (Utils.isUndefined(diagram)) {\n                throw \"No diagram specified.\";\n            }\n            this.diagram = diagram;\n        },\n\n        /**\n         * Arranges the diagram in a tree-layout with the specified options and tree subtype.\n         */\n        layout: function (options) {\n\n            this.transferOptions(options);\n\n            // transform the diagram into a Graph\n            var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n\n            /**\n             * The Graph reduction from the given diagram.\n             * @type {*}\n             */\n            this.graph = adapter.convert();\n\n            var finalNodeSet = this.layoutComponents();\n\n            // note that the graph contains the original data and\n            // the components are another instance of nodes referring to the same set of shapes\n            return new diagram.LayoutState(this.diagram, finalNodeSet);\n        },\n\n        layoutComponents: function () {\n            if (this.graph.isEmpty()) {\n                return;\n            }\n\n            // split into connected components\n            var components = this.graph.getConnectedComponents();\n            if (Utils.isEmpty(components)) {\n                return;\n            }\n\n            var layout = new TreeLayoutProcessor(this.options);\n            var trees = [];\n            // find a spanning tree for each component\n            for (var i = 0; i < components.length; i++) {\n                var component = components[i];\n\n                var treeGraph = this.getTree(component);\n                if (!treeGraph) {\n                    throw \"Failed to find a spanning tree for the component.\";\n                }\n                var root = treeGraph.root;\n                var tree = treeGraph.tree;\n                layout.layout(tree, root);\n\n                trees.push(tree);\n            }\n\n            return this.gridLayoutComponents(trees);\n\n        },\n\n        /**\n         * Gets a spanning tree (and root) for the given graph.\n         * Ensure that the given graph is connected!\n         * @param graph\n         * @returns {*} A literal object consisting of the found root and the spanning tree.\n         */\n        getTree: function (graph) {\n            var root = null;\n            if (this.options.roots && this.options.roots.length > 0) {\n                for (var i = 0, len = graph.nodes.length; i < len; i++) {\n                    var node = graph.nodes[i];\n                    for (var j = 0; j < this.options.roots.length; j++) {\n                        var givenRootShape = this.options.roots[j];\n                        if (givenRootShape === node.associatedShape) {\n                            root = node;\n                            break;\n                        }\n                    }\n                }\n            }\n            if (!root) {\n                // finds the most probable root on the basis of the longest path in the component\n                root = graph.root();\n                // should not happen really\n                if (!root) {\n                    throw \"Unable to find a root for the tree.\";\n                }\n            }\n            return this.getTreeForRoot(graph, root);\n        },\n\n        getTreeForRoot: function (graph, root) {\n\n            var tree = graph.getSpanningTree(root);\n            if (Utils.isUndefined(tree) || tree.isEmpty()) {\n                return null;\n            }\n            return {\n                tree: tree,\n                root: tree.root\n            };\n        }\n\n    });\n\n    /**\n     * The Sugiyama aka layered layout algorithm.\n     * @type {*}\n     */\n    var LayeredLayout = LayoutBase.extend({\n        init: function (diagram) {\n            var that = this;\n            LayoutBase.fn.init.call(that);\n            if (Utils.isUndefined(diagram)) {\n                throw \"Diagram is not specified.\";\n            }\n            this.diagram = diagram;\n        },\n\n        layout: function (options) {\n\n            this.transferOptions(options);\n\n            var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n            var graph = adapter.convert(options);\n            if (graph.isEmpty()) {\n                return;\n            }\n            // split into connected components\n            var components = graph.getConnectedComponents();\n            if (Utils.isEmpty(components)) {\n                return;\n            }\n            for (var i = 0; i < components.length; i++) {\n                var component = components[i];\n                this.layoutGraph(component, options);\n            }\n            var finalNodeSet = this.gridLayoutComponents(components);\n            return new diagram.LayoutState(this.diagram, finalNodeSet);\n\n        },\n\n        /**\n         * Initializes the runtime data properties of the layout.\n         * @private\n         */\n        _initRuntimeProperties: function () {\n            for (var k = 0; k < this.graph.nodes.length; k++) {\n                var node = this.graph.nodes[k];\n                node.layer = -1;\n                node.downstreamLinkCount = 0;\n                node.upstreamLinkCount = 0;\n\n                node.isVirtual = false;\n\n                node.uBaryCenter = 0.0;\n                node.dBaryCenter = 0.0;\n\n                node.upstreamPriority = 0;\n                node.downstreamPriority = 0;\n\n                node.gridPosition = 0;\n            }\n        },\n        _prepare: function (graph) {\n            var current = [], i, l, link;\n            for (l = 0; l < graph.links.length; l++) {\n                // of many dummies have been inserted to make things work\n                graph.links[l].depthOfDumminess = 0;\n            }\n\n            // defines a mapping of a node to the layer index\n            var layerMap = new Dictionary();\n\n            Utils.forEach(graph.nodes, function (node) {\n                if (node.incoming.length === 0) {\n                    layerMap.set(node, 0);\n                    current.push(node);\n                }\n            });\n\n            while (current.length > 0) {\n                var next = current.shift();\n                for (i = 0; i < next.outgoing.length; i++) {\n                    link = next.outgoing[i];\n                    var target = link.target;\n\n                    if (layerMap.containsKey(target)) {\n                        layerMap.set(target, Math.max(layerMap.get(next) + 1, layerMap.get(target)));\n                    } else {\n                        layerMap.set(target, layerMap.get(next) + 1);\n                    }\n\n                    if (!contains(current, target)) {\n                        current.push(target);\n                    }\n                }\n            }\n\n            // the node count in the map defines how many layers w'll need\n            var layerCount = 0;\n            layerMap.forEachValue(function (nodecount) {\n                layerCount = Math.max(layerCount, nodecount);\n            });\n\n            var sortedNodes = [];\n            Utils.addRange(sortedNodes, layerMap.keys());\n            sortedNodes.sort(function (o1, o2) {\n                var o1layer = layerMap.get(o1);\n                var o2layer = layerMap.get(o2);\n                return Utils.sign(o2layer - o1layer);\n            });\n\n            for (var n = 0; n < sortedNodes.length; ++n) {\n                var node = sortedNodes[n];\n                var minLayer = Number.MAX_VALUE;\n\n                if (node.outgoing.length === 0) {\n                    continue;\n                }\n\n                for (l = 0; l < node.outgoing.length; ++l) {\n                    link = node.outgoing[l];\n                    minLayer = Math.min(minLayer, layerMap.get(link.target));\n                }\n\n                if (minLayer > 1) {\n                    layerMap.set(node, minLayer - 1);\n                }\n            }\n\n            this.layers = [];\n            for (i = 0; i < layerCount + 1; i++) {\n                this.layers.push([]);\n            }\n\n            layerMap.forEach(function (node, layer) {\n                node.layer = layer;\n                this.layers[layer].push(node);\n            }, this);\n\n            // set initial grid positions\n            for (l = 0; l < this.layers.length; l++) {\n                var layer = this.layers[l];\n                for (i = 0; i < layer.length; i++) {\n                    layer[i].gridPosition = i;\n                }\n            }\n        },\n\n        /**\n         * Performs the layout of a single component.\n         */\n        layoutGraph: function (graph, options) {\n            if (Utils.isUndefined(graph)) {\n                throw \"No graph given or graph analysis of the diagram failed.\";\n            }\n            if (Utils.isDefined(options)) {\n                this.transferOptions(options);\n            }\n            this.graph = graph;\n\n            // sets unique indices on the nodes\n            graph.setItemIndices();\n\n            // ensures no cycles present for this layout\n            var reversedEdges = graph.makeAcyclic();\n\n            // define the runtime props being used by the layout algorithm\n            this._initRuntimeProperties();\n\n            this._prepare(graph, options);\n\n            this._dummify();\n\n            this._optimizeCrossings();\n\n            this._swapPairs();\n\n            this.arrangeNodes();\n\n            this._moveThingsAround();\n\n            this._dedummify();\n\n            // re-reverse the links which were switched earlier\n            Utils.forEach(reversedEdges, function (e) {\n                if (e.points) {\n                    e.points.reverse();\n                }\n            });\n        },\n\n        setMinDist: function (m, n, minDist) {\n            var l = m.layer;\n            var i = m.layerIndex;\n            this.minDistances[l][i] = minDist;\n        },\n\n        getMinDist: function (m, n) {\n            var dist = 0,\n                i1 = m.layerIndex,\n                i2 = n.layerIndex,\n                l = m.layer,\n                min = Math.min(i1, i2),\n                max = Math.max(i1, i2);\n            // use Sum()?\n            for (var k = min; k < max; ++k) {\n                dist += this.minDistances[l][k];\n            }\n            return dist;\n        },\n\n        placeLeftToRight: function (leftClasses) {\n            var leftPos = new Dictionary(), n, node;\n            for (var c = 0; c < this.layers.length; ++c) {\n                var classNodes = leftClasses[c];\n                if (!classNodes) {\n                    continue;\n                }\n\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    if (!leftPos.containsKey(node)) {\n                        this.placeLeft(node, leftPos, c);\n                    }\n                }\n\n                // adjust class\n                var d = Number.POSITIVE_INFINITY;\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    var rightSibling = this.rightSibling(node);\n                    if (rightSibling && this.nodeLeftClass.get(rightSibling) !== c) {\n                        d = Math.min(d, leftPos.get(rightSibling) - leftPos.get(node) - this.getMinDist(node, rightSibling));\n                    }\n                }\n                if (d === Number.POSITIVE_INFINITY) {\n                    var D = [];\n                    for (n = 0; n < classNodes.length; n++) {\n                        node = classNodes[n];\n                        var neighbors = [];\n                        Utils.addRange(neighbors, this.upNodes.get(node));\n                        Utils.addRange(neighbors, this.downNodes.get(node));\n\n                        for (var e = 0; e < neighbors.length; e++) {\n                            var neighbor = neighbors[e];\n                            if (this.nodeLeftClass.get(neighbor) < c) {\n                                D.push(leftPos.get(neighbor) - leftPos.get(node));\n                            }\n                        }\n                    }\n                    D.sort();\n                    if (D.length === 0) {\n                        d = 0;\n                    }\n                    else if (D.length % 2 === 1) {\n                        d = D[this.intDiv(D.length, 2)];\n                    }\n                    else {\n                        d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n                    }\n                }\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    leftPos.set(node, leftPos.get(node) + d);\n                }\n            }\n            return leftPos;\n        },\n\n        placeRightToLeft: function (rightClasses) {\n            var rightPos = new Dictionary(), n, node;\n            for (var c = 0; c < this.layers.length; ++c) {\n                var classNodes = rightClasses[c];\n                if (!classNodes) {\n                    continue;\n                }\n\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    if (!rightPos.containsKey(node)) {\n                        this.placeRight(node, rightPos, c);\n                    }\n                }\n\n                // adjust class\n                var d = Number.NEGATIVE_INFINITY;\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    var leftSibling = this.leftSibling(node);\n                    if (leftSibling && this.nodeRightClass.get(leftSibling) !== c) {\n                        d = Math.max(d, rightPos.get(leftSibling) - rightPos.get(node) + this.getMinDist(leftSibling, node));\n                    }\n                }\n                if (d === Number.NEGATIVE_INFINITY) {\n                    var D = [];\n                    for (n = 0; n < classNodes.length; n++) {\n                        node = classNodes[n];\n                        var neighbors = [];\n                        Utils.addRange(neighbors, this.upNodes.get(node));\n                        Utils.addRange(neighbors, this.downNodes.get(node));\n\n                        for (var e = 0; e < neighbors.length; e++) {\n                            var neighbor = neighbors[e];\n                            if (this.nodeRightClass.get(neighbor) < c) {\n                                D.push(rightPos.get(node) - rightPos.get(neighbor));\n                            }\n                        }\n                    }\n                    D.sort();\n                    if (D.length === 0) {\n                        d = 0;\n                    }\n                    else if (D.length % 2 === 1) {\n                        d = D[this.intDiv(D.length, 2)];\n                    }\n                    else {\n                        d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n                    }\n                }\n                for (n = 0; n < classNodes.length; n++) {\n                    node = classNodes[n];\n                    rightPos.set(node, rightPos.get(node) + d);\n                }\n            }\n            return rightPos;\n        },\n\n        _getLeftWing: function () {\n            var leftWing = { value: null };\n            var result = this.computeClasses(leftWing, 1);\n            this.nodeLeftClass = leftWing.value;\n            return result;\n        },\n\n        _getRightWing: function () {\n            var rightWing = { value: null };\n            var result = this.computeClasses(rightWing, -1);\n            this.nodeRightClass = rightWing.value;\n            return result;\n        },\n\n        computeClasses: function (wingPair, d) {\n            var currentWing = 0,\n                wing = wingPair.value = new Dictionary();\n\n            for (var l = 0; l < this.layers.length; ++l) {\n                currentWing = l;\n\n                var layer = this.layers[l];\n                for (var n = d === 1 ? 0 : layer.length - 1; 0 <= n && n < layer.length; n += d) {\n                    var node = layer[n];\n                    if (!wing.containsKey(node)) {\n                        wing.set(node, currentWing);\n                        if (node.isVirtual) {\n                            var ndsinl = this._nodesInLink(node);\n                            for (var kk = 0; kk < ndsinl.length; kk++) {\n                                var vnode = ndsinl[kk];\n                                wing.set(vnode, currentWing);\n                            }\n                        }\n                    }\n                    else {\n                        currentWing = wing.get(node);\n                    }\n                }\n            }\n\n            var wings = [];\n            for (var i = 0; i < this.layers.length; i++) {\n                wings.push(null);\n            }\n            wing.forEach(function (node, classIndex) {\n                if (wings[classIndex] === null) {\n                    wings[classIndex] = [];\n                }\n                wings[classIndex].push(node);\n            });\n\n            return wings;\n        },\n        _isVerticalLayout: function () {\n            return this.options.subtype.toLowerCase() === \"up\" || this.options.subtype.toLowerCase() === \"down\" || this.options.subtype.toLowerCase() === \"vertical\";\n        },\n\n        _isHorizontalLayout: function () {\n            return this.options.subtype.toLowerCase() === \"right\" || this.options.subtype.toLowerCase() === \"left\" || this.options.subtype.toLowerCase() === \"horizontal\";\n        },\n        _isIncreasingLayout: function () {\n            // meaning that the visiting of the layers goes in the natural order of increasing layer index\n            return this.options.subtype.toLowerCase() === \"right\" || this.options.subtype.toLowerCase() === \"down\";\n        },\n        _moveThingsAround: function () {\n            var i, l, node, layer, n, w;\n            // sort the layers by their grid position\n            for (l = 0; l < this.layers.length; ++l) {\n                layer = this.layers[l];\n                layer.sort(this._gridPositionComparer);\n            }\n\n            this.minDistances = [];\n            for (l = 0; l < this.layers.length; ++l) {\n                layer = this.layers[l];\n                this.minDistances[l] = [];\n                for (n = 0; n < layer.length; ++n) {\n                    node = layer[n];\n                    node.layerIndex = n;\n                    this.minDistances[l][n] = this.options.nodeDistance;\n                    if (n < layer.length - 1) {\n                        if (this._isVerticalLayout()) {\n                            this.minDistances[l][n] += (node.width + layer[n + 1].width) / 2;\n                        }\n                        else {\n                            this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n                        }\n                    }\n                }\n            }\n\n            this.downNodes = new Dictionary();\n            this.upNodes = new Dictionary();\n            Utils.forEach(this.graph.nodes, function (node) {\n                this.downNodes.set(node, []);\n                this.upNodes.set(node, []);\n            }, this);\n            Utils.forEach(this.graph.links, function (link) {\n                var origin = link.source;\n                var dest = link.target;\n                var down = null, up = null;\n                if (origin.layer > dest.layer) {\n                    down = link.source;\n                    up = link.target;\n                }\n                else {\n                    up = link.source;\n                    down = link.target;\n                }\n                this.downNodes.get(up).push(down);\n                this.upNodes.get(down).push(up);\n            }, this);\n            this.downNodes.forEachValue(function (list) {\n                list.sort(this._gridPositionComparer);\n            }, this);\n            this.upNodes.forEachValue(function (list) {\n                list.sort(this._gridPositionComparer);\n            }, this);\n\n            for (l = 0; l < this.layers.length - 1; ++l) {\n                layer = this.layers[l];\n                for (w = 0; w < layer.length - 1; w++) {\n                    var currentNode = layer[w];\n                    if (!currentNode.isVirtual) {\n                        continue;\n                    }\n\n                    var currDown = this.downNodes.get(currentNode)[0];\n                    if (!currDown.isVirtual) {\n                        continue;\n                    }\n\n                    for (n = w + 1; n < layer.length; ++n) {\n                        node = layer[n];\n                        if (!node.isVirtual) {\n                            continue;\n                        }\n\n                        var downNode = this.downNodes.get(node)[0];\n                        if (!downNode.isVirtual) {\n                            continue;\n                        }\n\n                        if (currDown.gridPosition > downNode.gridPosition) {\n                            var pos = currDown.gridPosition;\n                            currDown.gridPosition = downNode.gridPosition;\n                            downNode.gridPosition = pos;\n                            var i1 = currDown.layerIndex;\n                            var i2 = downNode.layerIndex;\n                            this.layers[l + 1][i1] = downNode;\n                            this.layers[l + 1][i2] = currDown;\n                            currDown.layerIndex = i2;\n                            downNode.layerIndex = i1;\n                        }\n                    }\n                }\n            }\n\n\n            var leftClasses = this._getLeftWing();\n            var rightClasses = this._getRightWing();\n\n\n            var leftPos = this.placeLeftToRight(leftClasses);\n            var rightPos = this.placeRightToLeft(rightClasses);\n            var x = new Dictionary();\n            Utils.forEach(this.graph.nodes, function (node) {\n                x.set(node, (leftPos.get(node) + rightPos.get(node)) / 2);\n            });\n\n\n            var order = new Dictionary();\n            var placed = new Dictionary();\n            for (l = 0; l < this.layers.length; ++l) {\n                layer = this.layers[l];\n                var sequenceStart = -1, sequenceEnd = -1;\n                for (n = 0; n < layer.length; ++n) {\n                    node = layer[n];\n                    order.set(node, 0);\n                    placed.set(node, false);\n                    if (node.isVirtual) {\n                        if (sequenceStart === -1) {\n                            sequenceStart = n;\n                        }\n                        else if (sequenceStart === n - 1) {\n                            sequenceStart = n;\n                        }\n                        else {\n                            sequenceEnd = n;\n                            order.set(layer[sequenceStart], 0);\n                            if (x.get(node) - x.get(layer[sequenceStart]) === this.getMinDist(layer[sequenceStart], node)) {\n                                placed.set(layer[sequenceStart], true);\n                            }\n                            else {\n                                placed.set(layer[sequenceStart], false);\n                            }\n                            sequenceStart = n;\n                        }\n                    }\n                }\n            }\n            var directions = [1, -1];\n            Utils.forEach(directions, function (d) {\n                var start = d === 1 ? 0 : this.layers.length - 1;\n                for (var l = start; 0 <= l && l < this.layers.length; l += d) {\n                    var layer = this.layers[l];\n                    var virtualStartIndex = this._firstVirtualNode(layer);\n                    var virtualStart = null;\n                    var sequence = null;\n                    if (virtualStartIndex !== -1) {\n                        virtualStart = layer[virtualStartIndex];\n                        sequence = [];\n                        for (i = 0; i < virtualStartIndex; i++) {\n                            sequence.push(layer[i]);\n                        }\n                    }\n                    else {\n                        virtualStart = null;\n                        sequence = layer;\n                    }\n                    if (sequence.length > 0) {\n                        this._sequencer(x, null, virtualStart, d, sequence);\n                        for (i = 0; i < sequence.length - 1; ++i) {\n                            this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n                        }\n                        if (virtualStart) {\n                            this.setMinDist(sequence[sequence.length - 1], virtualStart, x.get(virtualStart) - x.get(sequence[sequence.length - 1]));\n                        }\n                    }\n\n                    while (virtualStart) {\n                        var virtualEnd = this.nextVirtualNode(layer, virtualStart);\n                        if (!virtualEnd) {\n                            virtualStartIndex = virtualStart.layerIndex;\n                            sequence = [];\n                            for (i = virtualStartIndex + 1; i < layer.length; i++) {\n                                sequence.push(layer[i]);\n                            }\n                            if (sequence.length > 0) {\n                                this._sequencer(x, virtualStart, null, d, sequence);\n                                for (i = 0; i < sequence.length - 1; ++i) {\n                                    this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n                                }\n                                this.setMinDist(virtualStart, sequence[0], x.get(sequence[0]) - x.get(virtualStart));\n                            }\n                        }\n                        else if (order.get(virtualStart) === d) {\n                            virtualStartIndex = virtualStart.layerIndex;\n                            var virtualEndIndex = virtualEnd.layerIndex;\n                            sequence = [];\n                            for (i = virtualStartIndex + 1; i < virtualEndIndex; i++) {\n                                sequence.push(layer[i]);\n                            }\n                            if (sequence.length > 0) {\n                                this._sequencer(x, virtualStart, virtualEnd, d, sequence);\n                            }\n                            placed.set(virtualStart, true);\n                        }\n                        virtualStart = virtualEnd;\n                    }\n                    this.adjustDirections(l, d, order, placed);\n                }\n            }, this);\n\n\n            var fromLayerIndex = this._isIncreasingLayout() ? 0 : this.layers.length - 1;\n            var reachedFinalLayerIndex = function (k, ctx) {\n                if (ctx._isIncreasingLayout()) {\n                    return k < ctx.layers.length;\n                }\n                else {\n                    return k >= 0;\n                }\n            };\n            var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n\n            /**\n             * Calcs the max height of the given layer.\n             */\n            function maximumHeight(layer, ctx) {\n                var height = Number.MIN_VALUE;\n                for (var n = 0; n < layer.length; ++n) {\n                    var node = layer[n];\n                    if (ctx._isVerticalLayout()) {\n                        height = Math.max(height, node.height);\n                    }\n                    else {\n                        height = Math.max(height, node.width);\n                    }\n                }\n                return height;\n            }\n\n            for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n                layer = this.layers[i];\n                var height = maximumHeight(layer, this);\n\n                for (n = 0; n < layer.length; ++n) {\n                    node = layer[n];\n                    if (this._isVerticalLayout()) {\n                        node.x = x.get(node);\n                        node.y = offset + height / 2;\n                    }\n                    else {\n                        node.x = offset + height / 2;\n                        node.y = x.get(node);\n                    }\n                }\n\n                offset += this.options.layerSeparation + height;\n            }\n        },\n\n        adjustDirections: function (l, d, order, placed) {\n            if (l + d < 0 || l + d >= this.layers.length) {\n                return;\n            }\n\n            var prevBridge = null, prevBridgeTarget = null;\n            var layer = this.layers[l + d];\n            for (var n = 0; n < layer.length; ++n) {\n                var nextBridge = layer[n];\n                if (nextBridge.isVirtual) {\n                    var nextBridgeTarget = this.getNeighborOnLayer(nextBridge, l);\n                    if (nextBridgeTarget.isVirtual) {\n                        if (prevBridge) {\n                            var p = placed.get(prevBridgeTarget);\n                            var clayer = this.layers[l];\n                            var i1 = prevBridgeTarget.layerIndex;\n                            var i2 = nextBridgeTarget.layerIndex;\n                            for (var i = i1 + 1; i < i2; ++i) {\n                                if (clayer[i].isVirtual) {\n                                    p = p && placed.get(clayer[i]);\n                                }\n                            }\n                            if (p) {\n                                order.set(prevBridge, d);\n                                var j1 = prevBridge.layerIndex;\n                                var j2 = nextBridge.layerIndex;\n                                for (var j = j1 + 1; j < j2; ++j) {\n                                    if (layer[j].isVirtual) {\n                                        order.set(layer[j], d);\n                                    }\n                                }\n                            }\n                        }\n                        prevBridge = nextBridge;\n                        prevBridgeTarget = nextBridgeTarget;\n                    }\n                }\n            }\n        },\n\n        getNeighborOnLayer: function (node, l) {\n            var neighbor = this.upNodes.get(node)[0];\n            if (neighbor.layer === l) {\n                return neighbor;\n            }\n            neighbor = this.downNodes.get(node)[0];\n            if (neighbor.layer === l) {\n                return neighbor;\n            }\n            return null;\n        },\n\n        _sequencer: function (x, virtualStart, virtualEnd, dir, sequence) {\n            if (sequence.length === 1) {\n                this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n            }\n\n            if (sequence.length > 1) {\n                var r = sequence.length, t = this.intDiv(r, 2);\n                this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(0, t));\n                this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(t));\n                this.combineSequences(x, virtualStart, virtualEnd, dir, sequence);\n            }\n        },\n\n        _sequenceSingle: function (x, virtualStart, virtualEnd, dir, node) {\n            var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n\n            var n = neighbors.length;\n            if (n !== 0) {\n                if (n % 2 === 1) {\n                    x.set(node, x.get(neighbors[this.intDiv(n, 2)]));\n                }\n                else {\n                    x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n                }\n\n                if (virtualStart) {\n                    x.set(node, Math.max(x.get(node), x.get(virtualStart) + this.getMinDist(virtualStart, node)));\n                }\n                if (virtualEnd) {\n                    x.set(node, Math.min(x.get(node), x.get(virtualEnd) - this.getMinDist(node, virtualEnd)));\n                }\n            }\n        },\n\n        combineSequences: function (x, virtualStart, virtualEnd, dir, sequence) {\n            var r = sequence.length, t = this.intDiv(r, 2);\n\n            // collect left changes\n            var leftHeap = [], i, c, n, neighbors, neighbor, pair;\n            for (i = 0; i < t; ++i) {\n                c = 0;\n                neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n                for (n = 0; n < neighbors.length; ++n) {\n                    neighbor = neighbors[n];\n                    if (x.get(neighbor) >= x.get(sequence[i])) {\n                        c++;\n                    }\n                    else {\n                        c--;\n                        leftHeap.push({ k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]), v: 2 });\n                    }\n                }\n                leftHeap.push({ k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]), v: c });\n            }\n            if (virtualStart) {\n                leftHeap.push({ k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]), v: Number.MAX_VALUE });\n            }\n            leftHeap.sort(this._positionDescendingComparer);\n\n            // collect right changes\n            var rightHeap = [];\n            for (i = t; i < r; ++i) {\n                c = 0;\n                neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n                for (n = 0; n < neighbors.length; ++n) {\n                    neighbor = neighbors[n];\n                    if (x.get(neighbor) <= x.get(sequence[i])) {\n                        c++;\n                    }\n                    else {\n                        c--;\n                        rightHeap.push({ k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]), v: 2 });\n                    }\n                }\n                rightHeap.push({ k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]), v: c });\n            }\n            if (virtualEnd) {\n                rightHeap.push({ k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]), v: Number.MAX_VALUE });\n            }\n            rightHeap.sort(this._positionAscendingComparer);\n\n            var leftRes = 0, rightRes = 0;\n            var m = this.getMinDist(sequence[t - 1], sequence[t]);\n            while (x.get(sequence[t]) - x.get(sequence[t - 1]) < m) {\n                if (leftRes < rightRes) {\n                    if (leftHeap.length === 0) {\n                        x.set(sequence[t - 1], x.get(sequence[t]) - m);\n                        break;\n                    }\n                    else {\n                        pair = leftHeap.shift();\n                        leftRes = leftRes + pair.v;\n                        x.set(sequence[t - 1], pair.k);\n                        x.set(sequence[t - 1], Math.max(x.get(sequence[t - 1]), x.get(sequence[t]) - m));\n                    }\n                }\n                else {\n                    if (rightHeap.length === 0) {\n                        x.set(sequence[t], x.get(sequence[t - 1]) + m);\n                        break;\n                    }\n                    else {\n                        pair = rightHeap.shift();\n                        rightRes = rightRes + pair.v;\n                        x.set(sequence[t], pair.k);\n                        x.set(sequence[t], Math.min(x.get(sequence[t]), x.get(sequence[t - 1]) + m));\n                    }\n                }\n            }\n            for (i = t - 2; i >= 0; i--) {\n                x.set(sequence[i], Math.min(x.get(sequence[i]), x.get(sequence[t - 1]) - this.getMinDist(sequence[i], sequence[t - 1])));\n            }\n            for (i = t + 1; i < r; i++) {\n                x.set(sequence[i], Math.max(x.get(sequence[i]), x.get(sequence[t]) + this.getMinDist(sequence[i], sequence[t])));\n            }\n        },\n\n        placeLeft: function (node, leftPos, leftClass) {\n            var pos = Number.NEGATIVE_INFINITY;\n            Utils.forEach(this._getComposite(node), function (v) {\n                var leftSibling = this.leftSibling(v);\n                if (leftSibling && this.nodeLeftClass.get(leftSibling) === this.nodeLeftClass.get(v)) {\n                    if (!leftPos.containsKey(leftSibling)) {\n                        this.placeLeft(leftSibling, leftPos, leftClass);\n                    }\n                    pos = Math.max(pos, leftPos.get(leftSibling) + this.getMinDist(leftSibling, v));\n                }\n            }, this);\n            if (pos === Number.NEGATIVE_INFINITY) {\n                pos = 0;\n            }\n            Utils.forEach(this._getComposite(node), function (v) {\n                leftPos.set(v, pos);\n            });\n        },\n\n        placeRight: function (node, rightPos, rightClass) {\n            var pos = Number.POSITIVE_INFINITY;\n            Utils.forEach(this._getComposite(node), function (v) {\n                var rightSibling = this.rightSibling(v);\n                if (rightSibling && this.nodeRightClass.get(rightSibling) === this.nodeRightClass.get(v)) {\n                    if (!rightPos.containsKey(rightSibling)) {\n                        this.placeRight(rightSibling, rightPos, rightClass);\n                    }\n                    pos = Math.min(pos, rightPos.get(rightSibling) - this.getMinDist(v, rightSibling));\n                }\n            }, this);\n            if (pos === Number.POSITIVE_INFINITY) {\n                pos = 0;\n            }\n            Utils.forEach(this._getComposite(node), function (v) {\n                rightPos.set(v, pos);\n            });\n        },\n\n        leftSibling: function (node) {\n            var layer = this.layers[node.layer],\n                layerIndex = node.layerIndex;\n            return layerIndex === 0 ? null : layer[layerIndex - 1];\n        },\n\n        rightSibling: function (node) {\n            var layer = this.layers[node.layer];\n            var layerIndex = node.layerIndex;\n            return layerIndex === layer.length - 1 ? null : layer[layerIndex + 1];\n\n        },\n\n        _getComposite: function (node) {\n            return node.isVirtual ? this._nodesInLink(node) : [node];\n        },\n\n        arrangeNodes: function () {\n            var i, l, ni, layer, node;\n            // Initialize node's base priority\n            for (l = 0; l < this.layers.length; l++) {\n                layer = this.layers[l];\n\n                for (ni = 0; ni < layer.length; ni++) {\n                    node = layer[ni];\n                    node.upstreamPriority = node.upstreamLinkCount;\n                    node.downstreamPriority = node.downstreamLinkCount;\n                }\n            }\n\n            // Layout is invoked after MinimizeCrossings\n            // so we may assume node's barycenters are initially correct\n\n            var maxLayoutIterations = 2;\n            for (var it = 0; it < maxLayoutIterations; it++) {\n                for (i = this.layers.length - 1; i >= 1; i--) {\n                    this.layoutLayer(false, i);\n                }\n\n                for (i = 0; i < this.layers.length - 1; i++) {\n                    this.layoutLayer(true, i);\n                }\n            }\n\n            // Offset the whole structure so that there are no gridPositions < 0\n            var gridPos = Number.MAX_VALUE;\n            for (l = 0; l < this.layers.length; l++) {\n                layer = this.layers[l];\n\n                for (ni = 0; ni < layer.length; ni++) {\n                    node = layer[ni];\n                    gridPos = Math.min(gridPos, node.gridPosition);\n                }\n            }\n\n            if (gridPos < 0) {\n                for (l = 0; l < this.layers.length; l++) {\n                    layer = this.layers[l];\n\n                    for (ni = 0; ni < layer.length; ni++) {\n                        node = layer[ni];\n                        node.gridPosition = node.gridPosition - gridPos;\n                    }\n                }\n            }\n        },\n\n        /// <summary>\n        /// Layout of a single layer.\n        /// </summary>\n        /// <param name=\"layerIndex\">The layer to organize.</param>\n        /// <param name=\"movingDownwards\">If set to <c>true</c> we move down in the layer stack.</param>\n        /// <seealso cref=\"OptimizeCrossings()\"/>\n        layoutLayer: function (down, layer) {\n            var iconsidered;\n            var considered;\n\n            if (down) {\n                considered = this.layers[iconsidered = layer + 1];\n            }\n            else {\n                considered = this.layers[iconsidered = layer - 1];\n            }\n\n            // list containing the nodes in the considered layer sorted by priority\n            var sorted = [];\n            for (var n = 0; n < considered.length; n++) {\n                sorted.push(considered[n]);\n            }\n            sorted.sort(function (n1, n2) {\n                var n1Priority = (n1.upstreamPriority + n1.downstreamPriority) / 2;\n                var n2Priority = (n2.upstreamPriority + n2.downstreamPriority) / 2;\n\n                if (Math.abs(n1Priority - n2Priority) < 0.0001) {\n                    return 0;\n                }\n                if (n1Priority < n2Priority) {\n                    return 1;\n                }\n                return -1;\n            });\n\n            // each node strives for its barycenter; high priority nodes start first\n            Utils.forEach(sorted, function (node) {\n                var nodeGridPos = node.gridPosition;\n                var nodeBaryCenter = this.calcBaryCenter(node);\n                var nodePriority = (node.upstreamPriority + node.downstreamPriority) / 2;\n\n                if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n                    // This node is exactly at its barycenter -> perfect\n                    return;\n                }\n\n                if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n                    // This node is close enough to the barycenter -> should work\n                    return;\n                }\n\n                if (nodeGridPos < nodeBaryCenter) {\n                    // Try to move the node to the right in an\n                    // attempt to reach its barycenter\n                    while (nodeGridPos < nodeBaryCenter) {\n                        if (!this.moveRight(node, considered, nodePriority)) {\n                            break;\n                        }\n\n                        nodeGridPos = node.gridPosition;\n                    }\n                }\n                else {\n                    // Try to move the node to the left in an\n                    // attempt to reach its barycenter\n                    while (nodeGridPos > nodeBaryCenter) {\n                        if (!this.moveLeft(node, considered, nodePriority)) {\n                            break;\n                        }\n\n                        nodeGridPos = node.gridPosition;\n                    }\n                }\n            }, this);\n\n            // after the layer has been rearranged we need to recalculate the barycenters\n            // of the nodes in the surrounding layers\n            if (iconsidered > 0) {\n                this.calcDownData(iconsidered - 1);\n            }\n            if (iconsidered < this.layers.length - 1) {\n                this.calcUpData(iconsidered + 1);\n            }\n        },\n\n        /// <summary>\n        /// Moves the node to the right and returns <c>true</c> if this was possible.\n        /// </summary>\n        /// <param name=\"node\">The node.</param>\n        /// <param name=\"layer\">The layer.</param>\n        /// <returns>Returns <c>true</c> if the shift was possible, otherwise <c>false</c>.</returns>\n        moveRight: function (node, layer, priority) {\n            var index = Utils.indexOf(layer, node);\n            if (index === layer.length - 1) {\n                // this is the last node in the layer, so we can move to the right without troubles\n                node.gridPosition = node.gridPosition + 0.5;\n                return true;\n            }\n\n            var rightNode = layer[index + 1];\n            var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n\n            // check if there is space between the right and the current node\n            if (rightNode.gridPosition > node.gridPosition + 1) {\n                node.gridPosition = node.gridPosition + 0.5;\n                return true;\n            }\n\n            // we have reached a node with higher priority; no movement is allowed\n            if (rightNodePriority > priority ||\n                Math.abs(rightNodePriority - priority) < 0.0001) {\n                return false;\n            }\n\n            // the right node has lower priority - try to move it\n            if (this.moveRight(rightNode, layer, priority)) {\n                node.gridPosition = node.gridPosition + 0.5;\n                return true;\n            }\n\n            return false;\n        },\n\n        /// <summary>\n        /// Moves the node to the left and returns <c>true</c> if this was possible.\n        /// </summary>\n        /// <param name=\"node\">The node.</param>\n        /// <param name=\"layer\">The layer.</param>\n        /// <returns>Returns <c>true</c> if the shift was possible, otherwise <c>false</c>.</returns>\n        moveLeft: function (node, layer, priority) {\n            var index = Utils.indexOf(layer, node);\n            if (index === 0) {\n                // this is the last node in the layer, so we can move to the left without troubles\n                node.gridPosition = node.gridPosition - 0.5;\n                return true;\n            }\n\n            var leftNode = layer[index - 1];\n            var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n\n            // check if there is space between the left and the current node\n            if (leftNode.gridPosition < node.gridPosition - 1) {\n                node.gridPosition = node.gridPosition - 0.5;\n                return true;\n            }\n\n            // we have reached a node with higher priority; no movement is allowed\n            if (leftNodePriority > priority ||\n                Math.abs(leftNodePriority - priority) < 0.0001) {\n                return false;\n            }\n\n            // The left node has lower priority - try to move it\n            if (this.moveLeft(leftNode, layer, priority)) {\n                node.gridPosition = node.gridPosition - 0.5;\n                return true;\n            }\n\n            return false;\n        },\n\n        mapVirtualNode: function (node, link) {\n            this.nodeToLinkMap.set(node, link);\n            if (!this.linkToNodeMap.containsKey(link)) {\n                this.linkToNodeMap.set(link, []);\n            }\n            this.linkToNodeMap.get(link).push(node);\n        },\n\n        _nodesInLink: function (node) {\n            return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n        },\n\n        /// <summary>\n        /// Inserts dummy nodes to break long links.\n        /// </summary>\n        _dummify: function () {\n            this.linkToNodeMap = new Dictionary();\n            this.nodeToLinkMap = new Dictionary();\n\n            var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n            for (l = 0; l < links.length; l++) {\n                var link = links[l];\n                var o = link.source;\n                var d = link.target;\n\n                var oLayer = o.layer;\n                var dLayer = d.layer;\n                var oPos = o.gridPosition;\n                var dPos = d.gridPosition;\n\n                var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n\n                var p = o;\n                if (oLayer - dLayer > 1) {\n                    for (i = oLayer - 1; i > dLayer; i--) {\n                        newNode = new Node();\n                        newNode.x = o.x;\n                        newNode.y = o.y;\n                        newNode.width = o.width / 100;\n                        newNode.height = o.height / 100;\n\n                        layer = this.layers[i];\n                        pos = (i - dLayer) * step + oPos;\n                        if (pos > layer.length) {\n                            pos = layer.length;\n                        }\n\n                        // check if origin and dest are both last\n                        if (oPos >= this.layers[oLayer].length - 1 &&\n                            dPos >= this.layers[dLayer].length - 1) {\n                            pos = layer.length;\n                        }\n\n                        // check if origin and destination are both first\n                        else if (oPos === 0 && dPos === 0) {\n                            pos = 0;\n                        }\n\n                        newNode.layer = i;\n                        newNode.uBaryCenter = 0.0;\n                        newNode.dBaryCenter = 0.0;\n                        newNode.upstreamLinkCount = 0;\n                        newNode.downstreamLinkCount = 0;\n                        newNode.gridPosition = pos;\n                        newNode.isVirtual = true;\n\n                        Utils.insert(layer, newNode, pos);\n\n                        // translate rightwards nodes' positions\n                        for (r = pos + 1; r < layer.length; r++) {\n                            node = layer[r];\n                            node.gridPosition = node.gridPosition + 1;\n                        }\n\n                        newLink = new Link(p, newNode);\n                        newLink.depthOfDumminess = 0;\n                        p = newNode;\n\n                        // add the new node and the new link to the graph\n                        this.graph.nodes.push(newNode);\n                        this.graph.addLink(newLink);\n\n                        newNode.index = this.graph.nodes.length - 1;\n                        this.mapVirtualNode(newNode, link);\n                    }\n\n                    // set the origin of the real arrow to the last dummy\n                    link.changeSource(p);\n                    link.depthOfDumminess = oLayer - dLayer - 1;\n                }\n\n                if (oLayer - dLayer < -1) {\n                    for (i = oLayer + 1; i < dLayer; i++) {\n                        newNode = new Node();\n                        newNode.x = o.x;\n                        newNode.y = o.y;\n                        newNode.width = o.width / 100;\n                        newNode.height = o.height / 100;\n\n                        layer = this.layers[i];\n                        pos = (i - oLayer) * step + oPos;\n                        if (pos > layer.length) {\n                            pos = layer.length;\n                        }\n\n                        // check if origin and dest are both last\n                        if (oPos >= this.layers[oLayer].length - 1 &&\n                            dPos >= this.layers[dLayer].length - 1) {\n                            pos = layer.length;\n                        }\n\n                        // check if origin and destination are both first\n                        else if (oPos === 0 && dPos === 0) {\n                            pos = 0;\n                        }\n\n                        newNode.layer = i;\n                        newNode.uBaryCenter = 0.0;\n                        newNode.dBaryCenter = 0.0;\n                        newNode.upstreamLinkCount = 0;\n                        newNode.downstreamLinkCount = 0;\n                        newNode.gridPosition = pos;\n                        newNode.isVirtual = true;\n\n                        pos &= pos; // truncates to int\n                        Utils.insert(layer, newNode, pos);\n\n                        // translate rightwards nodes' positions\n                        for (r = pos + 1; r < layer.length; r++) {\n                            node = layer[r];\n                            node.gridPosition = node.gridPosition + 1;\n                        }\n\n                        newLink = new Link(p, newNode);\n                        newLink.depthOfDumminess = 0;\n                        p = newNode;\n\n                        // add the new node and the new link to the graph\n                        this.graph.nodes.push(newNode);\n                        this.graph.addLink(newLink);\n\n                        newNode.index = this.graph.nodes.length - 1;\n                        this.mapVirtualNode(newNode, link);\n                    }\n\n                    // Set the origin of the real arrow to the last dummy\n                    link.changeSource(p);\n                    link.depthOfDumminess = dLayer - oLayer - 1;\n                }\n            }\n        },\n\n        /// <summary>\n        /// Removes the dummy nodes inserted earlier to break long links.\n        /// </summary>\n        /// <remarks>The virtual nodes are effectively turned into intermediate connection points.</remarks>\n        _dedummify: function () {\n            var dedum = true;\n            while (dedum) {\n                dedum = false;\n\n                for (var l = 0; l < this.graph.links.length; l++) {\n                    var link = this.graph.links[l];\n                    if (link.depthOfDumminess === 0) {\n                        continue;\n                    }\n\n                    var points = [];\n\n                    // add points in reverse order\n                    points.unshift({ x: link.target.x, y: link.target.y });\n                    points.unshift({ x: link.source.x, y: link.source.y });\n\n                    // _dedummify the link\n                    var temp = link;\n                    var depthOfDumminess = link.depthOfDumminess;\n                    for (var d = 0; d < depthOfDumminess; d++) {\n                        var node = temp.source;\n                        var prevLink = node.incoming[0];\n\n                        points.unshift({ x: prevLink.source.x, y: prevLink.source.y });\n\n                        temp = prevLink;\n                    }\n\n                    // restore the original link origin\n                    link.changeSource(temp.source);\n\n                    // reset dummification flag\n                    link.depthOfDumminess = 0;\n\n                    // note that we only need the intermediate points, floating links have been dropped in the analysis\n                    if (points.length > 2) {\n                        // first and last are the endpoints\n                        points.splice(0, 1);\n                        points.splice(points.length - 1);\n                        link.points = points;\n                    }\n                    else {\n                        link.points = [];\n                    }\n\n                    // we are not going to delete the dummy elements;\n                    // they won't be needed anymore anyway.\n\n                    dedum = true;\n                    break;\n                }\n            }\n        },\n\n        /// <summary>\n        /// Optimizes/reduces the crossings between the layers by turning the crossing problem into a (combinatorial) number ordering problem.\n        /// </summary>\n        _optimizeCrossings: function () {\n            var moves = -1, i;\n            var maxIterations = 3;\n            var iter = 0;\n\n            while (moves !== 0) {\n                if (iter++ > maxIterations) {\n                    break;\n                }\n\n                moves = 0;\n\n                for (i = this.layers.length - 1; i >= 1; i--) {\n                    moves += this.optimizeLayerCrossings(false, i);\n                }\n\n                for (i = 0; i < this.layers.length - 1; i++) {\n                    moves += this.optimizeLayerCrossings(true, i);\n                }\n            }\n        },\n\n        calcUpData: function (layer) {\n            if (layer === 0) {\n                return;\n            }\n\n            var considered = this.layers[layer], i, l, link;\n            var upLayer = new Set();\n            var temp = this.layers[layer - 1];\n            for (i = 0; i < temp.length; i++) {\n                upLayer.add(temp[i]);\n            }\n\n            for (i = 0; i < considered.length; i++) {\n                var node = considered[i];\n\n                // calculate barycenter\n                var sum = 0;\n                var total = 0;\n\n                for (l = 0; l < node.incoming.length; l++) {\n                    link = node.incoming[l];\n                    if (upLayer.contains(link.source)) {\n                        total++;\n                        sum += link.source.gridPosition;\n                    }\n                }\n\n                for (l = 0; l < node.outgoing.length; l++) {\n                    link = node.outgoing[l];\n                    if (upLayer.contains(link.target)) {\n                        total++;\n                        sum += link.target.gridPosition;\n                    }\n                }\n\n                if (total > 0) {\n                    node.uBaryCenter = sum / total;\n                    node.upstreamLinkCount = total;\n                }\n                else {\n                    node.uBaryCenter = i;\n                    node.upstreamLinkCount = 0;\n                }\n            }\n        },\n\n        calcDownData: function (layer) {\n            if (layer === this.layers.length - 1) {\n                return;\n            }\n\n            var considered = this.layers[layer], i , l, link;\n            var downLayer = new Set();\n            var temp = this.layers[layer + 1];\n            for (i = 0; i < temp.length; i++) {\n                downLayer.add(temp[i]);\n            }\n\n            for (i = 0; i < considered.length; i++) {\n                var node = considered[i];\n\n                // calculate barycenter\n                var sum = 0;\n                var total = 0;\n\n                for (l = 0; l < node.incoming.length; l++) {\n                    link = node.incoming[l];\n                    if (downLayer.contains(link.source)) {\n                        total++;\n                        sum += link.source.gridPosition;\n                    }\n                }\n\n                for (l = 0; l < node.outgoing.length; l++) {\n                    link = node.outgoing[l];\n                    if (downLayer.contains(link.target)) {\n                        total++;\n                        sum += link.target.gridPosition;\n                    }\n                }\n\n                if (total > 0) {\n                    node.dBaryCenter = sum / total;\n                    node.downstreamLinkCount = total;\n                }\n                else {\n                    node.dBaryCenter = i;\n                    node.downstreamLinkCount = 0;\n                }\n            }\n        },\n\n        /// <summary>\n        /// Optimizes the crossings.\n        /// </summary>\n        /// <remarks>The big trick here is the usage of weights or values attached to connected nodes which turn a problem of crossing links\n        /// to an a problem of ordering numbers.</remarks>\n        /// <param name=\"layerIndex\">The layer index.</param>\n        /// <param name=\"movingDownwards\">If set to <c>true</c> we move down in the layer stack.</param>\n        /// <returns>The number of nodes having moved, i.e. the number of crossings reduced.</returns>\n        optimizeLayerCrossings: function (down, layer) {\n            var iconsidered;\n            var considered;\n\n            if (down) {\n                considered = this.layers[iconsidered = layer + 1];\n            }\n            else {\n                considered = this.layers[iconsidered = layer - 1];\n            }\n\n            // remember what it was\n            var presorted = considered.slice(0);\n\n            // calculate barycenters for all nodes in the considered layer\n            if (down) {\n                this.calcUpData(iconsidered);\n            }\n            else {\n                this.calcDownData(iconsidered);\n            }\n\n            var that = this;\n            // sort nodes within this layer according to the barycenters\n            considered.sort(function(n1, n2) {\n                var n1BaryCenter = that.calcBaryCenter(n1),\n                    n2BaryCenter = that.calcBaryCenter(n2);\n                if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n                    // in case of coinciding barycenters compare by the count of in/out links\n                    if (n1.degree() === n2.degree()) {\n                        return that.compareByIndex(n1, n2);\n                    }\n                    else if (n1.degree() < n2.degree()) {\n                        return 1;\n                    }\n                    return -1;\n                }\n                var compareValue = (n2BaryCenter - n1BaryCenter) * 1000;\n                if (compareValue > 0) {\n                    return -1;\n                }\n                else if (compareValue < 0) {\n                    return 1;\n                }\n                return that.compareByIndex(n1, n2);\n            });\n\n            // count relocations\n            var i, moves = 0;\n            for (i = 0; i < considered.length; i++) {\n                if (considered[i] !== presorted[i]) {\n                    moves++;\n                }\n            }\n\n            if (moves > 0) {\n                // now that the boxes have been arranged, update their grid positions\n                var inode = 0;\n                for (i = 0; i < considered.length; i++) {\n                    var node = considered[i];\n                    node.gridPosition = inode++;\n                }\n            }\n\n            return moves;\n        },\n\n        /// <summary>\n        /// Swaps a pair of nodes in a layer.\n        /// </summary>\n        /// <param name=\"layerIndex\">Index of the layer.</param>\n        /// <param name=\"n\">The Nth node in the layer.</param>\n        _swapPairs: function () {\n            var maxIterations = this.options.layeredIterations;\n            var iter = 0;\n\n            while (true) {\n                if (iter++ > maxIterations) {\n                    break;\n                }\n\n                var downwards = (iter % 4 <= 1);\n                var secondPass = (iter % 4 === 1);\n\n                for (var l = (downwards ? 0 : this.layers.length - 1);\n                     downwards ? l <= this.layers.length - 1 : l >= 0; l += (downwards ? 1 : -1)) {\n                    var layer = this.layers[l];\n                    var hasSwapped = false;\n\n                    // there is no need to recalculate crossings if they were calculated\n                    // on the previous step and nothing has changed\n                    var calcCrossings = true;\n                    var memCrossings = 0;\n\n                    for (var n = 0; n < layer.length - 1; n++) {\n                        // count crossings\n                        var up = 0;\n                        var down = 0;\n                        var crossBefore = 0;\n\n                        if (calcCrossings) {\n                            if (l !== 0) {\n                                up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n                            }\n                            if (l !== this.layers.length - 1) {\n                                down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n                            }\n                            if (downwards) {\n                                up *= 2;\n                            }\n                            else {\n                                down *= 2;\n                            }\n\n                            crossBefore = up + down;\n                        }\n                        else {\n                            crossBefore = memCrossings;\n                        }\n\n                        if (crossBefore === 0) {\n                            continue;\n                        }\n\n                        // Swap nodes\n                        var node1 = layer[n];\n                        var node2 = layer[n + 1];\n\n                        var node1GridPos = node1.gridPosition;\n                        var node2GridPos = node2.gridPosition;\n                        layer[n] = node2;\n                        layer[n + 1] = node1;\n                        node1.gridPosition = node2GridPos;\n                        node2.gridPosition = node1GridPos;\n\n                        // count crossings again and if worse than before, restore swapping\n                        up = 0;\n                        if (l !== 0) {\n                            up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n                        }\n                        down = 0;\n                        if (l !== this.layers.length - 1) {\n                            down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n                        }\n                        if (downwards) {\n                            up *= 2;\n                        }\n                        else {\n                            down *= 2;\n                        }\n                        var crossAfter = up + down;\n\n                        var revert = false;\n                        if (secondPass) {\n                            revert = crossAfter >= crossBefore;\n                        }\n                        else {\n                            revert = crossAfter > crossBefore;\n                        }\n\n                        if (revert) {\n                            node1 = layer[n];\n                            node2 = layer[n + 1];\n\n                            node1GridPos = node1.gridPosition;\n                            node2GridPos = node2.gridPosition;\n                            layer[n] = node2;\n                            layer[n + 1] = node1;\n                            node1.gridPosition = node2GridPos;\n                            node2.gridPosition = node1GridPos;\n\n                            // nothing has changed, remember the crossings so that\n                            // they are not calculated again on the next step\n                            memCrossings = crossBefore;\n                            calcCrossings = false;\n                        }\n                        else {\n                            hasSwapped = true;\n                            calcCrossings = true;\n                        }\n                    }\n\n                    if (hasSwapped) {\n                        if (l !== this.layers.length - 1) {\n                            this.calcUpData(l + 1);\n                        }\n                        if (l !== 0) {\n                            this.calcDownData(l - 1);\n                        }\n                    }\n                }\n            }\n        },\n\n        /// <summary>\n        /// Counts the number of links crossing between two layers.\n        /// </summary>\n        /// <param name=\"layerIndex1\">The layer index.</param>\n        /// <param name=\"layerIndex2\">Another layer index.</param>\n        /// <returns></returns>\n        countLinksCrossingBetweenTwoLayers: function (ulayer, dlayer) {\n            var i, crossings = 0;\n\n            var upperLayer = new Set();\n            var temp1 = this.layers[ulayer];\n            for (i = 0; i < temp1.length; i++) {\n                upperLayer.add(temp1[i]);\n            }\n\n            var lowerLayer = new Set();\n            var temp2 = this.layers[dlayer];\n            for (i = 0; i < temp2.length; i++) {\n                lowerLayer.add(temp2[i]);\n            }\n\n            // collect the links located between the layers\n            var dlinks = new Set();\n            var links = [];\n            var temp = [];\n\n            upperLayer.forEach(function (node) {\n                //throw \"\";\n                Utils.addRange(temp, node.incoming);\n                Utils.addRange(temp, node.outgoing);\n            });\n\n            for (var ti = 0; ti < temp.length; ti++) {\n                var link = temp[ti];\n\n                if (upperLayer.contains(link.source) &&\n                    lowerLayer.contains(link.target)) {\n                    dlinks.add(link);\n                    links.push(link);\n                }\n                else if (lowerLayer.contains(link.source) &&\n                    upperLayer.contains(link.target)) {\n                    links.push(link);\n                }\n            }\n\n            for (var l1 = 0; l1 < links.length; l1++) {\n                var link1 = links[l1];\n                for (var l2 = 0; l2 < links.length; l2++) {\n                    if (l1 === l2) {\n                        continue;\n                    }\n\n                    var link2 = links[l2];\n\n                    var n11, n12;\n                    var n21, n22;\n\n                    if (dlinks.contains(link1)) {\n                        n11 = link1.source;\n                        n12 = link1.target;\n                    }\n                    else {\n                        n11 = link1.target;\n                        n12 = link1.source;\n                    }\n\n                    if (dlinks.contains(link2)) {\n                        n21 = link2.source;\n                        n22 = link2.target;\n                    }\n                    else {\n                        n21 = link2.target;\n                        n22 = link2.source;\n                    }\n\n                    var n11gp = n11.gridPosition;\n                    var n12gp = n12.gridPosition;\n                    var n21gp = n21.gridPosition;\n                    var n22gp = n22.gridPosition;\n\n                    if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n                        crossings++;\n                    }\n                }\n            }\n\n            return crossings / 2;\n        },\n\n        calcBaryCenter: function (node) {\n            var upstreamLinkCount = node.upstreamLinkCount;\n            var downstreamLinkCount = node.downstreamLinkCount;\n            var uBaryCenter = node.uBaryCenter;\n            var dBaryCenter = node.dBaryCenter;\n\n            if (upstreamLinkCount > 0 && downstreamLinkCount > 0) {\n                return (uBaryCenter + dBaryCenter) / 2;\n            }\n            if (upstreamLinkCount > 0) {\n                return uBaryCenter;\n            }\n            if (downstreamLinkCount > 0) {\n                return dBaryCenter;\n            }\n\n            return 0;\n        },\n\n        _gridPositionComparer: function (x, y) {\n            if (x.gridPosition < y.gridPosition) {\n                return -1;\n            }\n            if (x.gridPosition > y.gridPosition) {\n                return 1;\n            }\n            return 0;\n        },\n\n        _positionAscendingComparer: function (x, y) {\n            return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n        },\n\n        _positionDescendingComparer: function (x, y) {\n            return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n        },\n\n        _firstVirtualNode: function (layer) {\n            for (var c = 0; c < layer.length; c++) {\n                if (layer[c].isVirtual) {\n                    return c;\n                }\n            }\n            return -1;\n        },\n\n        compareByIndex: function (o1, o2) {\n            var i1 = o1.index;\n            var i2 = o2.index;\n\n            if (i1 < i2) {\n                return 1;\n            }\n\n            if (i1 > i2) {\n                return -1;\n            }\n\n            return 0;\n        },\n\n        intDiv: function (numerator, denominator) {\n            return (numerator - numerator % denominator) / denominator;\n        },\n\n        nextVirtualNode: function (layer, node) {\n            var nodeIndex = node.layerIndex;\n            for (var i = nodeIndex + 1; i < layer.length; ++i) {\n                if (layer[i].isVirtual) {\n                    return layer[i];\n                }\n            }\n            return null;\n        }\n\n    });\n\n    /**\n     * Captures the state of a diagram; node positions, link points and so on.\n     * @type {*}\n     */\n    var LayoutState = kendo.Class.extend({\n        init: function (diagram, graphOrNodes) {\n            if (Utils.isUndefined(diagram)) {\n                throw \"No diagram given\";\n            }\n            this.diagram = diagram;\n            this.nodeMap = new Dictionary();\n            this.linkMap = new Dictionary();\n            this.capture(graphOrNodes ? graphOrNodes : diagram);\n        },\n\n        /**\n         * Will capture either\n         * - the state of the shapes and the intermediate points of the connections in the diagram\n         * - the bounds of the nodes contained in the Graph together with the intermediate points of the links in the Graph\n         * - the bounds of the nodes in the Array<Node>\n         * - the links points and node bounds in the literal object\n         * @param diagramOrGraphOrNodes\n         */\n        capture: function (diagramOrGraphOrNodes) {\n            var node,\n                nodes,\n                shape,\n                i,\n                conn,\n                link,\n                links;\n\n            if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n\n                for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n                    node = diagramOrGraphOrNodes.nodes[i];\n                    shape = node.associatedShape;\n                    //shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n                    this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n                }\n                for (i = 0; i < diagramOrGraphOrNodes.links.length; i++) {\n                    link = diagramOrGraphOrNodes.links[i];\n                    conn = link.associatedConnection;\n                    this.linkMap.set(conn.visual.id, link.points());\n                }\n            }\n            else if (diagramOrGraphOrNodes instanceof Array) {\n                nodes = diagramOrGraphOrNodes;\n                for (i = 0; i < nodes.length; i++) {\n                    node = nodes[i];\n                    shape = node.associatedShape;\n                    if (shape) {\n                        this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n                    }\n                }\n            }\n            else if (diagramOrGraphOrNodes.hasOwnProperty(\"links\") && diagramOrGraphOrNodes.hasOwnProperty(\"nodes\")) {\n                nodes = diagramOrGraphOrNodes.nodes;\n                links = diagramOrGraphOrNodes.links;\n                for (i = 0; i < nodes.length; i++) {\n                    node = nodes[i];\n                    shape = node.associatedShape;\n                    if (shape) {\n                        this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n                    }\n                }\n                for (i = 0; i < links.length; i++) {\n                    link = links[i];\n                    conn = link.associatedConnection;\n                    if (conn) {\n                        this.linkMap.set(conn.visual.id, link.points);\n                    }\n                }\n            }\n            else { // capture the diagram\n                var shapes = this.diagram.shapes;\n                var connections = this.diagram.connections;\n                for (i = 0; i < shapes.length; i++) {\n                    shape = shapes[i];\n                    this.nodeMap.set(shape.visual.id, shape.bounds());\n                }\n                for (i = 0; i < connections.length; i++) {\n                    conn = connections[i];\n                    this.linkMap.set(conn.visual.id, conn.points());\n                }\n            }\n        }\n    });\n\n    deepExtend(diagram, {\n        init: function (element) {\n            kendo.init(element, diagram.ui);\n        },\n        SpringLayout: SpringLayout,\n        TreeLayout: TreeLayout,\n        GraphAdapter: DiagramToHyperTreeAdapter,\n        LayeredLayout: LayeredLayout,\n        LayoutBase: LayoutBase,\n        LayoutState: LayoutState\n    });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n        // Imports ================================================================\n        var dataviz = kendo.dataviz,\n            draw = kendo.drawing,\n            geom = kendo.geometry,\n            diagram = dataviz.diagram,\n            Widget = kendo.ui.Widget,\n            Class = kendo.Class,\n            proxy = $.proxy,\n            deepExtend = kendo.deepExtend,\n            extend = $.extend,\n            HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n            Canvas = diagram.Canvas,\n            Group = diagram.Group,\n            Visual = diagram.Visual,\n            Rectangle = diagram.Rectangle,\n            Circle = diagram.Circle,\n            CompositeTransform = diagram.CompositeTransform,\n            Rect = diagram.Rect,\n            Path = diagram.Path,\n            DeleteShapeUnit = diagram.DeleteShapeUnit,\n            DeleteConnectionUnit = diagram.DeleteConnectionUnit,\n            TextBlock = diagram.TextBlock,\n            Image = diagram.Image,\n            Point = diagram.Point,\n            Intersect = diagram.Intersect,\n            ConnectionEditAdorner = diagram.ConnectionEditAdorner,\n            UndoRedoService = diagram.UndoRedoService,\n            ToolService = diagram.ToolService,\n            Selector = diagram.Selector,\n            ResizingAdorner = diagram.ResizingAdorner,\n            ConnectorsAdorner = diagram.ConnectorsAdorner,\n            Cursors = diagram.Cursors,\n            Utils = diagram.Utils,\n            Observable = kendo.Observable,\n            Ticker = diagram.Ticker,\n            ToBackUnit = diagram.ToBackUnit,\n            ToFrontUnit = diagram.ToFrontUnit,\n            Dictionary = diagram.Dictionary,\n            PolylineRouter = diagram.PolylineRouter,\n            CascadingRouter = diagram.CascadingRouter,\n            isUndefined = Utils.isUndefined,\n            isDefined = Utils.isDefined,\n            defined = kendo.util.defined,\n            isArray = $.isArray,\n            isFunction = kendo.isFunction,\n            isString = Utils.isString,\n            isPlainObject = $.isPlainObject,\n\n            math = Math;\n\n        // Constants ==============================================================\n        var NS = \".kendoDiagram\",\n            CASCADING = \"cascading\",\n            POLYLINE = \"polyline\",\n            ITEMBOUNDSCHANGE = \"itemBoundsChange\",\n            CHANGE = \"change\",\n            CLICK = \"click\",\n            MOUSE_ENTER = \"mouseEnter\",\n            MOUSE_LEAVE = \"mouseLeave\",\n            ERROR = \"error\",\n            AUTO = \"Auto\",\n            TOP = \"Top\",\n            RIGHT = \"Right\",\n            LEFT = \"Left\",\n            BOTTOM = \"Bottom\",\n            MAXINT = 9007199254740992,\n            SELECT = \"select\",\n            ITEMROTATE = \"itemRotate\",\n            PAN = \"pan\",\n            ZOOM_START = \"zoomStart\",\n            ZOOM_END = \"zoomEnd\",\n            CONNECTION_CSS = \"k-connection\",\n            SHAPE_CSS = \"k-shape\",\n            SINGLE = \"single\",\n            NONE = \"none\",\n            MULTIPLE = \"multiple\",\n            DEFAULT_CANVAS_WIDTH = 600,\n            DEFAULT_CANVAS_HEIGHT = 600,\n            DEFAULT_SHAPE_TYPE = \"rectangle\",\n            DEFAULT_SHAPE_WIDTH = 100,\n            DEFAULT_SHAPE_HEIGHT = 100,\n            DEFAULT_SHAPE_MINWIDTH = 20,\n            DEFAULT_SHAPE_MINHEIGHT = 20,\n            DEFAULT_SHAPE_POSITION = 0,\n            DEFAULT_SHAPE_BACKGROUND = \"SteelBlue\",\n            DEFAULT_CONNECTION_BACKGROUND = \"Yellow\",\n            DEFAULT_CONNECTOR_SIZE = 8,\n            DEFAULT_HOVER_COLOR = \"#70CAFF\",\n            MAX_VALUE = Number.MAX_VALUE,\n            MIN_VALUE = -Number.MAX_VALUE,\n            ALL = \"all\",\n            ABSOLUTE = \"absolute\",\n            TRANSFORMED = \"transformed\",\n            ROTATED = \"rotated\",\n            TRANSPARENT = \"transparent\",\n            WIDTH = \"width\",\n            HEIGHT = \"height\",\n            X = \"x\",\n            Y = \"y\",\n            MOUSEWHEEL_NS = \"DOMMouseScroll\" + NS + \" mousewheel\" + NS,\n            MOBILE_ZOOM_RATE = 0.05,\n            MOBILE_PAN_DISTANCE = 5,\n            BUTTON_TEMPLATE = '<a class=\"k-button k-button-icontext #=className#\" href=\"\\\\#\"><span class=\"#=iconClass# #=imageClass#\"></span>#=text#</a>';\n\n        diagram.DefaultConnectors = [{\n            name: TOP,\n            description: \"Top Connector\"\n        }, {\n            name: RIGHT,\n            description: \"Right Connector\"\n        }, {\n            name: BOTTOM,\n            description: \"Bottom Connector\"\n        }, {\n            name: LEFT,\n            Description: \"Left Connector\"\n        }, {\n            name: AUTO,\n            Description: \"Auto Connector\",\n            position: function (shape) {\n                return shape.getPosition(\"center\");\n            }\n        }];\n\n        var defaultButtons = {\n            cancel: {\n                text: \"Cancel\",\n                imageClass: \"k-cancel\",\n                className: \"k-diagram-cancel\",\n                iconClass: \"k-icon\"\n            },\n            update: {\n                text: \"Update\",\n                imageClass: \"k-update\",\n                className: \"k-diagram-update\",\n                iconClass: \"k-icon\"\n            }\n        };\n\n        diagram.shapeDefaults = function(extra) {\n            var defaults = {\n                type: DEFAULT_SHAPE_TYPE,\n                path: \"\",\n                autoSize: true,\n                visual: null,\n                x: DEFAULT_SHAPE_POSITION,\n                y: DEFAULT_SHAPE_POSITION,\n                minWidth: DEFAULT_SHAPE_MINWIDTH,\n                minHeight: DEFAULT_SHAPE_MINHEIGHT,\n                width: DEFAULT_SHAPE_WIDTH,\n                height: DEFAULT_SHAPE_HEIGHT,\n                hover: {},\n                editable: {\n                    connect: true,\n                    tools: []\n                },\n                connectors: diagram.DefaultConnectors,\n                rotation: {\n                    angle: 0\n                }\n            };\n\n            Utils.simpleExtend(defaults, extra);\n\n            return defaults;\n        };\n\n        function mwDelta(e) {\n            var origEvent = e.originalEvent,\n                delta = 0;\n\n            if (origEvent.wheelDelta) {\n                delta = -origEvent.wheelDelta / 40;\n                delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n            } else if (origEvent.detail) {\n                delta = origEvent.detail;\n            }\n\n            return delta;\n        }\n\n        function isAutoConnector(connector) {\n            return connector.options.name.toLowerCase() === AUTO.toLowerCase();\n        }\n\n        function resolveConnectors(connection) {\n            var minDist = MAXINT,\n                sourcePoint, targetPoint,\n                source = connection.source(),\n                target = connection.target(),\n                autoSourceShape,\n                autoTargetShape,\n                sourceConnector,\n                preferred = [0, 2, 3, 1, 4],\n                k;\n            if (source instanceof Point) {\n                sourcePoint = source;\n            } else if (source instanceof Connector) {\n                if (isAutoConnector(source)) {\n                    autoSourceShape = source.shape;\n                } else {\n                    connection._resolvedSourceConnector = source;\n                    sourcePoint = source.position();\n                }\n            }\n\n            if (target instanceof Point) {\n                targetPoint = target;\n            } else if (target instanceof Connector) {\n                if (isAutoConnector(target)) {\n                    autoTargetShape = target.shape;\n                } else {\n                    connection._resolvedTargetConnector = target;\n                    targetPoint = target.position();\n                }\n            }\n\n            if (sourcePoint) {\n                if (autoTargetShape) {\n                    connection._resolvedTargetConnector = closestConnector(sourcePoint, autoTargetShape);\n                }\n            } else if (autoSourceShape) {\n                if (targetPoint) {\n                    connection._resolvedSourceConnector = closestConnector(targetPoint, autoSourceShape);\n                } else if (autoTargetShape) {\n                    for (var i = 0; i < autoSourceShape.connectors.length; i++) {\n                        if (autoSourceShape.connectors.length == 5) // presuming this means the default connectors\n                        {\n                            // will emphasize the vertical or horizontal direction, which matters when using the cascading router and distances which are equal for multiple connectors.\n                            k = preferred[i];\n                        } else {\n                            k = i;\n                        }\n                        sourceConnector = autoSourceShape.connectors[k];\n                        if (!isAutoConnector(sourceConnector)) {\n                            var currentSourcePoint = sourceConnector.position(),\n                                currentTargetConnector = closestConnector(currentSourcePoint, autoTargetShape);\n                            var dist = math.round(currentTargetConnector.position().distanceTo(currentSourcePoint)); // rounding prevents some not needed connectors switching.\n                            if (dist < minDist) {\n                                minDist = dist;\n                                connection._resolvedSourceConnector = sourceConnector;\n                                connection._resolvedTargetConnector = currentTargetConnector;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        function closestConnector(point, shape) {\n            var minimumDistance = MAXINT, resCtr, ctrs = shape.connectors;\n            for (var i = 0; i < ctrs.length; i++) {\n                var ctr = ctrs[i];\n                if (!isAutoConnector(ctr)) {\n                    var dist = point.distanceTo(ctr.position());\n                    if (dist < minimumDistance) {\n                        minimumDistance = dist;\n                        resCtr = ctr;\n                    }\n                }\n            }\n            return resCtr;\n        }\n\n        function indicesOfItems(group, visuals) {\n            var i, indices = [], visual;\n            var children = group.drawingContainer().children;\n            var length = children.length;\n            for (i = 0; i < visuals.length; i++) {\n                visual = visuals[i];\n                for (var j = 0; j < length; j++) {\n                    if (children[j] == visual.drawingContainer()) {\n                        indices.push(j);\n                        break;\n                    }\n                }\n            }\n            return indices;\n        }\n\n        function deserializeConnector(diagram, value) {\n            var point = Point.parse(value), ctr;\n            if (point) {\n                return point;\n            }\n            ctr = Connector.parse(diagram, value);\n            if (ctr) {\n                return ctr;\n            }\n        }\n\n        var DiagramElement = Observable.extend({\n            init: function (options) {\n                var that = this;\n                that.dataItem = (options || {}).dataItem;\n                Observable.fn.init.call(that);\n                that.options = deepExtend({ id: diagram.randomId() }, that.options, options);\n                that.isSelected = false;\n                that.visual = new Group({\n                    id: that.options.id,\n                    autoSize: that.options.autoSize\n                });\n                that._template();\n            },\n\n            options: {\n                hover: {},\n                cursor: Cursors.grip,\n                content: {\n                    align: \"center middle\"\n                },\n                selectable: true,\n                serializable: true,\n                enable: true\n            },\n\n            _getCursor: function (point) {\n                if (this.adorner) {\n                    return this.adorner._getCursor(point);\n                }\n                return this.options.cursor;\n            },\n\n            visible: function (value) {\n                if (isUndefined(value)) {\n                    return this.visual.visible();\n                } else {\n                    this.visual.visible(value);\n                }\n            },\n\n            bounds: function () {\n            },\n\n            refresh: function () {\n                this.visual.redraw();\n            },\n\n            position: function (point) {\n                this.options.x = point.x;\n                this.options.y = point.y;\n                this.visual.position(point);\n            },\n\n            toString: function () {\n                return this.options.id;\n            },\n\n            serialize: function () {\n                // the options json object describes the shape perfectly. So this object can serve as shape serialization.\n                var json = deepExtend({}, {options: this.options});\n                if (this.dataItem) {\n                    json.dataItem = this.dataItem.toString();\n                }\n                return json;\n            },\n\n            _content: function (content) {\n                if (content !== undefined) {\n                    var options = this.options;\n                    var bounds = this.bounds();\n\n                    if (diagram.Utils.isString(content)) {\n                        options.content.text = content;\n                    } else {\n                        deepExtend(options.content, content);\n                    }\n\n                    var contentOptions = options.content;\n                    var contentVisual = this._contentVisual;\n\n                    if (!contentVisual && contentOptions.text) {\n                        this._contentVisual = new TextBlock(contentOptions);\n                        this._contentVisual._includeInBBox = false;\n                        this.visual.append(this._contentVisual);\n                    } else if (contentVisual) {\n                        contentVisual.redraw(contentOptions);\n                    }\n                }\n\n                return this.options.content.text;\n            },\n\n            _hitTest: function (point) {\n                var bounds = this.bounds();\n                return this.visible() && bounds.contains(point) && this.options.enable;\n            },\n\n            _template: function () {\n                var that = this;\n                if (that.options.content.template) {\n                    var data = that.dataItem || {},\n                        elementTemplate = kendo.template(that.options.content.template, {\n                            paramName: \"dataItem\"\n                        });\n\n                    that.options.content.text = elementTemplate(data);\n                }\n            },\n\n            _canSelect: function () {\n                return this.options.selectable !== false;\n            },\n\n            toJSON: function() {\n                return {\n                    id: this.options.id\n                };\n            }\n        });\n\n        var Connector = Class.extend({\n            init: function (shape, options) {\n                this.options = deepExtend({}, this.options, options);\n                this.connections = [];\n                this.shape = shape;\n            },\n            options: {\n                width: 7,\n                height: 7,\n                fill: {\n                    color: DEFAULT_CONNECTION_BACKGROUND\n                },\n                hover: {}\n            },\n            position: function () {\n                if (this.options.position) {\n                    return this.options.position(this.shape);\n                } else {\n                    return this.shape.getPosition(this.options.name);\n                }\n            },\n            toJSON: function () {\n                return {\n                    shapeId: this.shape.toString(),\n                    connector: this.options.name\n                };\n            }\n        });\n\n        Connector.parse = function (diagram, str) {\n            var tempStr = str.split(\":\"),\n                id = tempStr[0],\n                name = tempStr[1] || AUTO;\n\n            for (var i = 0; i < diagram.shapes.length; i++) {\n                var shape = diagram.shapes[i];\n                if (shape.options.id == id) {\n                    return shape.getConnector(name.trim());\n                }\n            }\n        };\n\n        var Shape = DiagramElement.extend({\n            init: function (options, diagram) {\n                var that = this;\n                DiagramElement.fn.init.call(that, options);\n                this.diagram = diagram;\n                this.updateOptionsFromModel();\n                options = that.options;\n                that.connectors = [];\n                that.type = options.type;\n                that.shapeVisual = Shape.createShapeVisual(that.options);\n                that.visual.append(this.shapeVisual);\n                that.updateBounds();\n                that.content(that.content());\n\n                // TODO: Swa added for phase 2; included here already because the GraphAdapter takes it into account\n                that._createConnectors();\n                that.parentContainer = null;\n                that.isContainer = false;\n                that.isCollapsed = false;\n                that.id = that.visual.id;\n\n                if (options.hasOwnProperty(\"layout\") && options.layout !== undefined) {\n                    // pass the defined shape layout, it overtakes the default resizing\n                    that.layout = options.layout.bind(options);\n                }\n            },\n\n            options: diagram.shapeDefaults(),\n\n            _setOptionsFromModel: function(model) {\n                var modelOptions = filterShapeDataItem(model || this.dataItem);\n                this.options = deepExtend({}, this.options, modelOptions);\n\n                this.redrawVisual();\n                if (this.options.content) {\n                    this._template();\n                    this.content(this.options.content);\n                }\n            },\n\n            updateOptionsFromModel: function(model, field) {\n                if (this.diagram && this.diagram._isEditable) {\n                    var modelOptions = filterShapeDataItem(model || this.dataItem);\n\n                    if (model && field) {\n                        if (!dataviz.inArray(field, [\"x\", \"y\", \"width\", \"height\"])) {\n                            if (this.options.visual) {\n                                this.redrawVisual();\n                            } else if (modelOptions.type) {\n                                this.options = deepExtend({}, this.options, modelOptions);\n                                this.redrawVisual();\n                            }\n\n                            if (this.options.content) {\n                                this._template();\n                                this.content(this.options.content);\n                            }\n                        } else {\n                            var bounds = this.bounds();\n                            bounds[field] = model[field];\n                            this.bounds(bounds);\n                        }\n                    } else {\n                        this.options = deepExtend({}, this.options, modelOptions);\n                    }\n                }\n            },\n\n            redrawVisual: function() {\n                this.visual.clear();\n                this._contentVisual = null;\n                this.options.dataItem = this.dataItem;\n                this.shapeVisual = Shape.createShapeVisual(this.options);\n                this.visual.append(this.shapeVisual);\n                this.updateBounds();\n            },\n\n            updateModel: function(syncChanges) {\n                var diagram = this.diagram;\n                if (diagram && diagram._isEditable) {\n                    var bounds = this._bounds;\n                    var model;\n                    if (this.dataItem) {\n                        model = diagram.dataSource.getByUid(this.dataItem.uid);\n                    }\n\n                    if (model) {\n                        diagram._suspendModelRefresh();\n                        if (defined(model.x) && bounds.x !== model.x) {\n                            model.set(\"x\", bounds.x);\n                        }\n\n                        if (defined(model.y) && bounds.y !== model.y) {\n                            model.set(\"y\", bounds.y);\n                        }\n\n                        if (defined(model.width) && bounds.width !== model.width) {\n                            model.set(\"width\", bounds.width);\n                        }\n\n                        if (defined(model.height) && bounds.height !== model.height) {\n                            model.set(\"height\", bounds.height);\n                        }\n\n                        this.dataItem = model;\n                        diagram._resumeModelRefresh();\n\n                        if (syncChanges) {\n                            diagram._syncShapeChanges();\n                        }\n                    }\n                }\n            },\n\n            updateBounds: function() {\n                var bounds = this.visual._measure(true);\n                var options = this.options;\n                this.bounds(new Rect(options.x, options.y, bounds.width, bounds.height));\n                this._rotate();\n                this._alignContent();\n            },\n\n            content: function(content) {\n                var result = this._content(content);\n\n                this._alignContent();\n\n                return result;\n            },\n\n            _alignContent: function() {\n                var contentOptions = this.options.content || {};\n                var contentVisual = this._contentVisual;\n                if (contentVisual && contentOptions.align) {\n                    var containerRect = this.visual._measure();\n                    var aligner = new diagram.RectAlign(containerRect);\n                    var contentBounds = contentVisual.drawingElement.bbox(null);\n\n                    var contentRect = new Rect(0, 0, contentBounds.width(), contentBounds.height());\n                    var alignedBounds = aligner.align(contentRect, contentOptions.align);\n\n                    contentVisual.position(alignedBounds.topLeft());\n                }\n            },\n\n            _createConnectors: function() {\n                var options = this.options,\n                    length = options.connectors.length,\n                    connectorDefaults = options.connectorDefaults,\n                    connector, i;\n\n                for (i = 0; i < length; i++) {\n                    connector = new Connector(\n                        this, deepExtend({},\n                            connectorDefaults,\n                            options.connectors[i]\n                        )\n                    );\n                    this.connectors.push(connector);\n                }\n            },\n\n            bounds: function (value) {\n                var bounds;\n\n                if (value) {\n                    if (isString(value)) {\n                        switch (value) {\n                            case TRANSFORMED :\n                                bounds = this._transformedBounds();\n                                break;\n                            case ABSOLUTE :\n                                bounds = this._transformedBounds();\n                                var pan = this.diagram._pan;\n                                bounds.x += pan.x;\n                                bounds.y += pan.y;\n                                break;\n                            case ROTATED :\n                                bounds = this._rotatedBounds();\n                                break;\n                            default:\n                                bounds = this._bounds;\n                        }\n                    } else {\n                        this._setBounds(value);\n                        this.refreshConnections();\n                        this._triggerBoundsChange();\n                    }\n                } else {\n                    bounds = this._bounds;\n                }\n\n                return bounds;\n            },\n\n            _setBounds: function(rect) {\n                var options = this.options;\n                var topLeft = rect.topLeft();\n                var x = options.x = topLeft.x;\n                var y = options.y = topLeft.y;\n                var width = options.width = math.max(rect.width, options.minWidth);\n                var height = options.height = math.max(rect.height, options.minHeight);\n\n                this._bounds = new Rect(x, y, width, height);\n\n                this.visual.redraw({\n                    x: x,\n                    y: y,\n                    width: width,\n                    height: height\n                });\n            },\n\n            position: function (point) {\n                if (point) {\n                    this.bounds(new Rect(point.x, point.y, this._bounds.width, this._bounds.height));\n                } else {\n                    return this._bounds.topLeft();\n                }\n            },\n            /**\n             * Returns a clone of this shape.\n             * @returns {Shape}\n             */\n            clone: function () {\n                var json = this.serialize();\n\n                json.options.id = diagram.randomId();\n\n                if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n                    json.options.dataItem = cloneDataItem(this.dataItem);\n                }\n\n                return new Shape(json.options);\n            },\n\n            select: function (value) {\n                var diagram = this.diagram, selected, deselected;\n                if (isUndefined(value)) {\n                    value = true;\n                }\n\n                if (this._canSelect()) {\n                    if (this.isSelected != value) {\n                        selected = [];\n                        deselected = [];\n                        this.isSelected = value;\n                        if (this.isSelected) {\n                            diagram._selectedItems.push(this);\n                            selected.push(this);\n                        } else {\n                            Utils.remove(diagram._selectedItems, this);\n                            deselected.push(this);\n                        }\n\n                        if (!diagram._internalSelection) {\n                            diagram._selectionChanged(selected, deselected);\n                        }\n\n                        return true;\n                    }\n                }\n            },\n\n            rotate: function (angle, center, undoable) { // we assume the center is always the center of the shape.\n                var rotate = this.visual.rotate();\n                if (angle !== undefined) {\n                    if (undoable !== false && this.diagram && this.diagram.undoRedoService && angle !== rotate.angle) {\n                        this.diagram.undoRedoService.add(\n                            new diagram.RotateUnit(this.diagram._resizingAdorner, [this], [rotate.angle]), false);\n                    }\n\n                    var b = this.bounds(),\n                        sc = new Point(b.width / 2, b.height / 2),\n                        deltaAngle,\n                        newPosition;\n\n                    if (center) {\n                        deltaAngle = angle - rotate.angle;\n                        newPosition = b.center().rotate(center, 360 - deltaAngle).minus(sc);\n                        this._rotationOffset = this._rotationOffset.plus(newPosition.minus(b.topLeft()));\n                        this.position(newPosition);\n                    }\n\n                    this.visual.rotate(angle, sc);\n                    this.options.rotation.angle = angle;\n\n                    if (this.diagram && this.diagram._connectorsAdorner) {\n                        this.diagram._connectorsAdorner.refresh();\n                    }\n\n                    this.refreshConnections();\n\n                    if (this.diagram) {\n                        this.diagram.trigger(ITEMROTATE, { item: this });\n                    }\n                }\n\n                return rotate;\n            },\n\n            connections: function (type) { // in, out, undefined = both\n                var result = [], i, j, con, cons, ctr;\n\n                for (i = 0; i < this.connectors.length; i++) {\n                    ctr = this.connectors[i];\n                    cons = ctr.connections;\n                    for (j = 0, cons; j < cons.length; j++) {\n                        con = cons[j];\n                        if (type == \"out\") {\n                            var source = con.source();\n                            if (source.shape && source.shape == this) {\n                                result.push(con);\n                            }\n                        } else if (type == \"in\") {\n                            var target = con.target();\n                            if (target.shape && target.shape == this) {\n                                result.push(con);\n                            }\n                        } else {\n                            result.push(con);\n                        }\n                    }\n                }\n\n                return result;\n            },\n\n            refreshConnections: function () {\n                $.each(this.connections(), function () {\n                    this.refresh();\n                });\n            },\n            /**\n             * Gets a connector of this shape either by the connector's supposed name or\n             * via a Point in which case the closest connector will be returned.\n             * @param nameOrPoint The name of a Connector or a Point.\n             * @returns {Connector}\n             */\n            getConnector: function (nameOrPoint) {\n                var i, ctr;\n                if (isString(nameOrPoint)) {\n                    nameOrPoint = nameOrPoint.toLocaleLowerCase();\n                    for (i = 0; i < this.connectors.length; i++) {\n                        ctr = this.connectors[i];\n                        if (ctr.options.name.toLocaleLowerCase() == nameOrPoint) {\n                            return ctr;\n                        }\n                    }\n                } else if (nameOrPoint instanceof Point) {\n                    return closestConnector(nameOrPoint, this);\n                } else {\n                    return this.connectors.length ? this.connectors[0] : null;\n                }\n            },\n\n            getPosition: function (side) {\n                var b = this.bounds(),\n                    fnName = side.charAt(0).toLowerCase() + side.slice(1);\n\n                if (isFunction(b[fnName])) {\n                    return this._transformPoint(b[fnName]());\n                }\n\n                return b.center();\n            },\n\n            redraw: function (options) {\n                if (options) {\n                    var shapeOptions = this.options;\n                    var boundsChange;\n\n                    this.shapeVisual.redraw(this._visualOptions(options));\n\n                    if (this._diffNumericOptions(options, [WIDTH, HEIGHT, X, Y])) {\n                        this.bounds(new Rect(shapeOptions.x, shapeOptions.y, shapeOptions.width, shapeOptions.height));\n                        boundsChange = true;\n                    }\n\n                    shapeOptions = deepExtend(shapeOptions, options);\n\n                    if  (options.rotation || boundsChange) {\n                        this._rotate();\n                    }\n\n                    if (shapeOptions.content) {\n                        this.content(shapeOptions.content);\n                    }\n                }\n            },\n\n            _diffNumericOptions: diagram.diffNumericOptions,\n\n            _visualOptions: function(options) {\n                return {\n                    data: options.path,\n                    source: options.source,\n                    hover: options.hover,\n                    fill: options.fill,\n                    stroke: options.stroke,\n                    startCap: options.startCap,\n                    endCap: options.endCap\n                };\n            },\n\n            _triggerBoundsChange: function () {\n                if (this.diagram) {\n                    this.diagram.trigger(ITEMBOUNDSCHANGE, {item: this, bounds: this._bounds.clone()}); // the trigger modifies the arguments internally.\n                }\n            },\n\n            _transformPoint: function (point) {\n                var rotate = this.rotate(),\n                    bounds = this.bounds(),\n                    tl = bounds.topLeft();\n\n                if (rotate.angle) {\n                    point.rotate(rotate.center().plus(tl), 360 - rotate.angle);\n                }\n\n                return point;\n            },\n\n            _transformedBounds: function () {\n                var bounds = this.bounds(),\n                    tl = bounds.topLeft(),\n                    br = bounds.bottomRight();\n\n                return Rect.fromPoints(this.diagram.modelToView(tl), this.diagram.modelToView(br));\n            },\n\n            _rotatedBounds: function () {\n                var bounds = this.bounds().rotatedBounds(this.rotate().angle),\n                    tl = bounds.topLeft(),\n                    br = bounds.bottomRight();\n\n                return Rect.fromPoints(tl, br);\n            },\n\n            _rotate: function () {\n                var rotation = this.options.rotation;\n\n                if (rotation && rotation.angle) {\n                    this.rotate(rotation.angle);\n                }\n\n                this._rotationOffset = new Point();\n            },\n\n            _hover: function (value) {\n                var options = this.options,\n                    hover = options.hover,\n                    stroke = options.stroke,\n                    fill = options.fill;\n\n                if (value && isDefined(hover.stroke)) {\n                    stroke = deepExtend({}, stroke, hover.stroke);\n                }\n\n                if (value && isDefined(hover.fill)) {\n                    fill = hover.fill;\n                }\n\n                this.shapeVisual.redraw({\n                    stroke: stroke,\n                    fill: fill\n                });\n\n                if (options.editable && options.editable.connect) {\n                    this.diagram._showConnectors(this, value);\n                }\n            },\n\n            _hitTest: function (value) {\n                if (this.visible()) {\n                    var bounds = this.bounds(), rotatedPoint,\n                        angle = this.rotate().angle;\n\n                    if (value.isEmpty && !value.isEmpty()) { // rect selection\n                        return Intersect.rects(value, bounds, angle ? angle : 0);\n                    } else { // point\n                        rotatedPoint = value.clone().rotate(bounds.center(), angle); // cloning is important because rotate modifies the point inline.\n                        if (bounds.contains(rotatedPoint)) {\n                            return this;\n                        }\n                    }\n                }\n            },\n            toJSON: function() {\n                return {\n                    shapeId: this.options.id\n                };\n            }\n        });\n\n        Shape.createShapeVisual = function(options) {\n            var diagram = options.diagram;\n            delete options.diagram; // avoid stackoverflow and reassign later on again\n            var shapeDefaults = deepExtend({}, options, { x: 0, y: 0 });\n            var visualTemplate = shapeDefaults.visual; // Shape visual should not have position in its parent group.\n            var type = (shapeDefaults.type + \"\").toLocaleLowerCase();\n            var shapeVisual;\n\n            if (isFunction(visualTemplate)) { // custom template\n                shapeVisual = visualTemplate.call(this, shapeDefaults);\n            } else if (shapeDefaults.path) {\n                shapeDefaults.data = shapeDefaults.path;\n                shapeVisual = new Path(shapeDefaults);\n                translateToOrigin(shapeVisual);\n            } else if (type == \"rectangle\"){\n                shapeVisual = new Rectangle(shapeDefaults);\n            } else if (type == \"circle\") {\n                shapeVisual = new Circle(shapeDefaults);\n            } else if (type == \"text\") {\n                shapeVisual = new TextBlock(shapeDefaults);\n            } else if (type == \"image\") {\n                shapeVisual = new Image(shapeDefaults);\n            } else {\n                shapeVisual = new Path(shapeDefaults);\n            }\n\n            return shapeVisual;\n        };\n\n        function translateToOrigin(visual) {\n            var bbox = visual.drawingContainer().clippedBBox(null);\n            if (bbox.origin.x !== 0 || bbox.origin.y !== 0) {\n                visual.position(-bbox.origin.x, -bbox.origin.y);\n            }\n        }\n\n        /**\n         * The visual link between two Shapes through the intermediate of Connectors.\n         */\n        var Connection = DiagramElement.extend({\n            init: function (from, to, options) {\n                var that = this;\n                DiagramElement.fn.init.call(that, options);\n                this.updateOptionsFromModel();\n                this._initRouter();\n                that.path = new diagram.Polyline(that.options);\n                that.path.fill(TRANSPARENT);\n                that.visual.append(that.path);\n                that._sourcePoint = that._targetPoint = new Point();\n                that.source(from);\n                that.target(to);\n                that.content(that.options.content);\n                that.definers = [];\n                if (defined(options) && options.points) {\n                    that.points(options.points);\n                }\n                that.refresh();\n            },\n\n            options: {\n                hover: {\n                    stroke: {}\n                },\n                startCap: NONE,\n                endCap: NONE,\n                points: [],\n                selectable: true\n            },\n\n            _setOptionsFromModel: function(model) {\n                this.updateOptionsFromModel(model || this.dataItem);\n            },\n\n            updateOptionsFromModel: function(model) {\n                if (this.diagram && this.diagram._isEditable) {\n                    var dataMap = this.diagram._dataMap;\n                    var options = filterConnectionDataItem(model || this.dataItem);\n\n                    if (model) {\n                        if (defined(options.from)) {\n                            this.source(dataMap[options.from]);\n                        } else if (defined(options.fromX) && defined(options.fromY)) {\n                            this.source(new Point(options.fromX, options.fromY));\n                        }\n\n                        if (defined(options.to)) {\n                            this.target(dataMap[options.to]);\n                        } else if (defined(options.toX) && defined(options.toY)) {\n                            this.target(new Point(options.toX, options.toY));\n                        }\n\n                        this.dataItem = model;\n\n                        this._template();\n                        this.redraw(this.options);\n                    } else {\n                        this.options = deepExtend({}, options, this.options);\n                    }\n                }\n            },\n\n            updateModel: function(syncChanges) {\n                if (this.diagram && this.diagram._isEditable) {\n                    if (this.diagram.connectionsDataSource) {\n                        var model = this.diagram.connectionsDataSource.getByUid(this.dataItem.uid);\n                        if (model) {\n                            this.diagram._suspendModelRefresh();\n                            if (defined(this.options.fromX) && this.options.fromX !== null) {\n                                model.set(\"from\", null);\n                                model.set(\"fromX\", this.options.fromX);\n                                model.set(\"fromY\", this.options.fromY);\n                            } else  {\n                                model.set(\"from\", this.options.from);\n                                model.set(\"fromX\", null);\n                                model.set(\"fromY\", null);\n                            }\n\n                            if (defined(this.options.toX) && this.options.toX !== null) {\n                                model.set(\"to\", null);\n                                model.set(\"toX\", this.options.toX);\n                                model.set(\"toY\", this.options.toY);\n                            } else {\n                                model.set(\"to\", this.options.to);\n                                model.set(\"toX\", null);\n                                model.set(\"toY\", null);\n                            }\n\n                            this.dataItem = model;\n                            this.diagram._resumeModelRefresh();\n\n                            if (syncChanges) {\n                                this.diagram._syncConnectionChanges();\n                            }\n                        }\n                    }\n                }\n            },\n\n            /**\n             * Gets the Point where the source of the connection resides.\n             * If the endpoint in Auto-connector the location of the resolved connector will be returned.\n             * If the endpoint is floating the location of the endpoint is returned.\n             */\n            sourcePoint: function () {\n                return this._resolvedSourceConnector ? this._resolvedSourceConnector.position() : this._sourcePoint;\n            },\n\n            /**\n             * Gets or sets the Point where the source of the connection resides.\n             * @param source The source of this connection. Can be a Point, Shape, Connector.\n             * @param undoable Whether the change or assignment should be undoable.\n             */\n            source: function (source, undoable) {\n                var dataItem;\n                if (isDefined(source)) {\n                    if (undoable && this.diagram) {\n                        this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, source));\n                    }\n                    if (source !== undefined) {\n                        this.from = source;\n                    }\n                    if (source === null) { // detach\n                        if (this.sourceConnector) {\n                            this._sourcePoint = this._resolvedSourceConnector.position();\n                            this._clearSourceConnector();\n                            this._setFromOptions(null, this._sourcePoint);\n                        }\n                    } else if (source instanceof Connector) {\n                        dataItem = source.shape.dataItem;\n                        if (dataItem) {\n                            this._setFromOptions(dataItem.id);\n                        }\n                        this.sourceConnector = source;\n                        this.sourceConnector.connections.push(this);\n                    } else if (source instanceof Point) {\n                        this._setFromOptions(null, source);\n                        this._sourcePoint = source;\n                        if (this.sourceConnector) {\n                            this._clearSourceConnector();\n                        }\n\n                    } else if (source instanceof Shape) {\n                        dataItem = source.dataItem;\n                        if (dataItem) {\n                            this._setFromOptions(dataItem.id);\n                        }\n                        this.sourceConnector = source.getConnector(AUTO);// source.getConnector(this.targetPoint());\n                        this.sourceConnector.connections.push(this);\n                    }\n\n                    this.refresh();\n\n                }\n                return this.sourceConnector ? this.sourceConnector : this._sourcePoint;\n            },\n\n            _setFromOptions: function(from, fromPoint) {\n                this.options.from = from;\n                if (fromPoint)  {\n                    this.options.fromX = fromPoint.x;\n                    this.options.fromY = fromPoint.y;\n                } else {\n                    this.options.fromX = null;\n                    this.options.fromY = null;\n                }\n            },\n\n            /**\n             * Gets or sets the PathDefiner of the sourcePoint.\n             * The left part of this definer is always null since it defines the source tangent.\n             * @param value\n             * @returns {*}\n             */\n            sourceDefiner: function (value) {\n                if (value) {\n                    if (value instanceof diagram.PathDefiner) {\n                        value.left = null;\n                        this._sourceDefiner = value;\n                        this.source(value.point); // refresh implicit here\n                    } else {\n                        throw \"The sourceDefiner needs to be a PathDefiner.\";\n                    }\n                } else {\n                    if (!this._sourceDefiner) {\n                        this._sourceDefiner = new diagram.PathDefiner(this.sourcePoint(), null, null);\n                    }\n                    return this._sourceDefiner;\n                }\n            },\n\n            /**\n             * Gets  the Point where the target of the connection resides.\n             */\n            targetPoint: function () {\n                return this._resolvedTargetConnector ? this._resolvedTargetConnector.position() : this._targetPoint;\n            },\n            /**\n             * Gets or sets the Point where the target of the connection resides.\n             * @param target The target of this connection. Can be a Point, Shape, Connector.\n             * @param undoable  Whether the change or assignment should be undoable.\n             */\n            target: function (target, undoable) {\n                var dataItem;\n                if (isDefined(target)) {\n                    if (undoable && this.diagram) {\n                        this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, undefined, target));\n                    }\n\n                    if (target !== undefined) {\n                        this.to = target;\n                    }\n\n                    if (target === null) { // detach\n                        if (this.targetConnector) {\n                            this._targetPoint = this._resolvedTargetConnector.position();\n                            this._clearTargetConnector();\n                            this._setToOptions(null, this._targetPoint);\n                        }\n                    } else if (target instanceof Connector) {\n                        dataItem = target.shape.dataItem;\n                        if (dataItem) {\n                            this._setToOptions(dataItem.id);\n                        }\n                        this.targetConnector = target;\n                        this.targetConnector.connections.push(this);\n                    } else if (target instanceof Point) {\n                        this._setToOptions(null, target);\n                        this._targetPoint = target;\n                        if (this.targetConnector) {\n                            this._clearTargetConnector();\n                        }\n                    } else if (target instanceof Shape) {\n                        dataItem = target.dataItem;\n                        if (dataItem) {\n                            this._setToOptions(dataItem.id);\n                        }\n                        this.targetConnector = target.getConnector(AUTO);// target.getConnector(this.sourcePoint());\n                        this.targetConnector.connections.push(this);\n                    }\n\n\n                    this.refresh();\n                }\n                return this.targetConnector ? this.targetConnector : this._targetPoint;\n            },\n\n            _setToOptions: function(to, toPoint) {\n                this.options.to = to;\n                if (toPoint)  {\n                    this.options.toX = toPoint.x;\n                    this.options.toY = toPoint.y;\n                } else {\n                    this.options.toX = null;\n                    this.options.toY = null;\n                }\n            },\n\n            /**\n             * Gets or sets the PathDefiner of the targetPoint.\n             * The right part of this definer is always null since it defines the target tangent.\n             * @param value\n             * @returns {*}\n             */\n            targetDefiner: function (value) {\n                if (value) {\n                    if (value instanceof diagram.PathDefiner) {\n                        value.right = null;\n                        this._targetDefiner = value;\n                        this.target(value.point); // refresh implicit here\n                    } else {\n                        throw \"The sourceDefiner needs to be a PathDefiner.\";\n                    }\n                } else {\n                    if (!this._targetDefiner) {\n                        this._targetDefiner = new diagram.PathDefiner(this.targetPoint(), null, null);\n                    }\n                    return this._targetDefiner;\n                }\n            },\n\n            _updateConnectors: function() {\n                this._updateConnector(this.source(), \"source\");\n                this._updateConnector(this.target(), \"target\");\n            },\n\n            _updateConnector: function(instance, name) {\n                var that = this;\n                var diagram = that.diagram;\n                if (instance instanceof Connector && !diagram.getShapeById(instance.shape.id)) {\n                    var dataItem = instance.shape.dataItem;\n                    var connectorName = instance.options.name;\n                    var setNewTarget = function() {\n                        var shape = diagram._dataMap[dataItem.id];\n                        instance = shape.getConnector(connectorName);\n                        that[name](instance, false);\n                        that.updateModel();\n                    };\n                    if (diagram._dataMap[dataItem.id]) {\n                       setNewTarget();\n                    } else {\n                        var inactiveItem = diagram._inactiveShapeItems.getByUid(dataItem.uid);\n                        if (inactiveItem) {\n                            diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(setNewTarget));\n                        }\n                    }\n                } else if (instance !== that[name]()) {\n                    that[name](instance, false);\n                }\n            },\n\n            content: function(content) {\n                return this._content(content);\n            },\n\n            /**\n             * Selects or unselects this connections.\n             * @param value True to select, false to unselect.\n             */\n            select: function (value) {\n                var diagram = this.diagram, selected, deselected;\n                if (this._canSelect()) {\n                    if (this.isSelected !== value) {\n                        this.isSelected = value;\n                        selected = [];\n                        deselected = [];\n                        if (this.isSelected) {\n                            this.adorner = new ConnectionEditAdorner(this, this.options.selection);\n                            diagram._adorn(this.adorner, true);\n                            diagram._selectedItems.push(this);\n                            selected.push(this);\n                        } else {\n                            if (this.adorner) {\n                                diagram._adorn(this.adorner, false);\n                                Utils.remove(diagram._selectedItems, this);\n                                this.adorner = undefined;\n                                deselected.push(this);\n                            }\n                        }\n                        this.refresh();\n                        if (!diagram._internalSelection) {\n                            diagram._selectionChanged(selected, deselected);\n                        }\n                        return true;\n                    }\n                }\n            },\n            /**\n             * Gets or sets the bounds of this connection.\n             * @param value A Rect object.\n             * @remark This is automatically set in the refresh().\n             * @returns {Rect}\n             */\n            bounds: function (value) {\n                if (value && !isString(value)) {\n                    this._bounds = value;\n                } else {\n                    return this._bounds;\n                }\n            },\n            /**\n             * Gets or sets the connection type (see ConnectionType enumeration).\n             * @param value A ConnectionType value.\n             * @returns {ConnectionType}\n             */\n            type: function (value) {\n                var options = this.options;\n                if (value) {\n                    if (value !== options.type) {\n                        options.type = value;\n                        this._initRouter();\n                        this.refresh();\n                    }\n                } else {\n                    return options.type;\n                }\n            },\n\n            _initRouter: function() {\n                var type = (this.options.type || \"\").toLowerCase();\n                if (type == CASCADING) {\n                    this._router = new CascadingRouter(this);\n                } else {\n                    this._router = new PolylineRouter(this);\n                }\n            },\n            /**\n             * Gets or sets the collection of *intermediate* points.\n             * The 'allPoints()' property will return all the points.\n             * The 'definers' property returns the definers of the intermediate points.\n             * The 'sourceDefiner' and 'targetDefiner' return the definers of the endpoints.\n             * @param value\n             */\n            points: function (value) {\n                if (value) {\n                    this.definers = [];\n                    for (var i = 0; i < value.length; i++) {\n                        var definition = value[i];\n                        if (definition instanceof diagram.Point) {\n                            this.definers.push(new diagram.PathDefiner(definition));\n                        } else if (definition.hasOwnProperty(\"x\") && definition.hasOwnProperty(\"y\")) { // e.g. Clipboard does not preserve the Point definition and tunred into an Object\n                            this.definers.push(new diagram.PathDefiner(new Point(definition.x, definition.y)));\n                        } else {\n                            throw \"A Connection point needs to be a Point or an object with x and y properties.\";\n                        }\n                    }\n\n                } else {\n                    var pts = [];\n                    if (isDefined(this.definers)) {\n                        for (var k = 0; k < this.definers.length; k++) {\n                            pts.push(this.definers[k].point);\n                        }\n                    }\n                    return pts;\n                }\n            },\n            /**\n             * Gets all the points of this connection. This is the combination of the sourcePoint, the points and the targetPoint.\n             * @returns {Array}\n             */\n            allPoints: function () {\n                var pts = [this.sourcePoint()];\n                if (this.definers) {\n                    for (var k = 0; k < this.definers.length; k++) {\n                        pts.push(this.definers[k].point);\n                    }\n                }\n                pts.push(this.targetPoint());\n                return pts;\n            },\n            refresh: function () {\n                resolveConnectors(this);\n                var globalSourcePoint = this.sourcePoint(), globalSinkPoint = this.targetPoint(),\n                    boundsTopLeft, localSourcePoint, localSinkPoint, middle;\n\n                this._refreshPath();\n\n                boundsTopLeft = this._bounds.topLeft();\n                localSourcePoint = globalSourcePoint.minus(boundsTopLeft);\n                localSinkPoint = globalSinkPoint.minus(boundsTopLeft);\n                if (this._contentVisual) {\n                    middle = Point.fn.middleOf(localSourcePoint, localSinkPoint);\n                    this._contentVisual.position(new Point(middle.x + boundsTopLeft.x, middle.y + boundsTopLeft.y));\n                }\n\n                if (this.adorner) {\n                    this.adorner.refresh();\n                }\n            },\n\n            redraw: function (options) {\n                if (options) {\n                    this.options = deepExtend({}, this.options, options);\n\n                    var points = this.options.points;\n\n                    if ((options && options.content) || options.text) {\n                        this.content(options.content);\n                    }\n\n                    if (defined(points) && points.length > 0) {\n                        this.points(points);\n                        this._refreshPath();\n                    }\n                    this.path.redraw({\n                        fill: options.fill,\n                        stroke: options.stroke,\n                        startCap: options.startCap,\n                        endCap: options.endCap\n                    });\n                }\n            },\n            /**\n             * Returns a clone of this connection.\n             * @returns {Connection}\n             */\n            clone: function () {\n                var json = this.serialize();\n\n                if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n                    json.options.dataItem = cloneDataItem(this.dataItem);\n                }\n\n                return new Connection(this.from, this.to, json.options);\n            },\n            /**\n             * Returns a serialized connection in json format. Consist of the options and the dataItem.\n             * @returns {Connection}\n             */\n            serialize: function () {\n                var from = this.from.toJSON ? this.from.toJSON : this.from.toString(),\n                    to = this.to.toJSON ? this.to.toJSON : this.to.toString();\n\n                var json = deepExtend({}, {\n                    options: this.options,\n                    from: from,\n                    to: to\n                });\n\n                if (defined(this.dataItem)) {\n                    json.dataItem = this.dataItem.toString();\n                }\n\n                json.options.points = this.points();\n                return json;\n            },\n\n            /**\n             * Returns whether the given Point or Rect hits this connection.\n             * @param value\n             * @returns {Connection}\n             * @private\n             */\n            _hitTest: function (value) {\n                if (this.visible()) {\n                    var p = new Point(value.x, value.y), from = this.sourcePoint(), to = this.targetPoint();\n                    if (value.isEmpty && !value.isEmpty() && value.contains(from) && value.contains(to)) {\n                        return this;\n                    }\n                    if (this._router.hitTest(p)) {\n                        return this;\n                    }\n                }\n            },\n\n            _hover: function (value) {\n                var color = (this.options.stroke || {}).color;\n\n                if (value && isDefined(this.options.hover.stroke.color)) {\n                    color = this.options.hover.stroke.color;\n                }\n\n                this.path.redraw({\n                    stroke: {\n                        color: color\n                    }\n                });\n            },\n\n            _refreshPath: function () {\n                if (!defined(this.path)) {\n                    return;\n                }\n                this._drawPath();\n                this.bounds(this._router.getBounds());\n            },\n\n            _drawPath: function () {\n                if (this._router) {\n                    this._router.route(); // sets the intermediate points\n                }\n                var source = this.sourcePoint();\n                var target = this.targetPoint();\n                var points = this.points();\n\n                this.path.redraw({\n                    points: [source].concat(points, [target])\n                });\n            },\n\n            _clearSourceConnector: function () {\n                Utils.remove(this.sourceConnector.connections, this);\n                this.sourceConnector = undefined;\n                this._resolvedSourceConnector = undefined;\n            },\n            _clearTargetConnector: function () {\n                Utils.remove(this.targetConnector.connections, this);\n                this.targetConnector = undefined;\n                this._resolvedTargetConnector = undefined;\n            }\n        });\n\n        var Diagram = Widget.extend({\n            init: function (element, userOptions) {\n                var that = this;\n\n                kendo.destroy(element);\n                Widget.fn.init.call(that, element, userOptions);\n\n                that._initTheme();\n                that._initElements();\n                that._extendLayoutOptions(that.options);\n                that._initShapeDefaults();\n\n                that._initCanvas();\n\n                that.mainLayer = new Group({\n                    id: \"main-layer\"\n                });\n                that.canvas.append(that.mainLayer);\n\n                that._pan = new Point();\n                that._adorners = [];\n                that.adornerLayer = new Group({\n                    id: \"adorner-layer\"\n                });\n                that.canvas.append(that.adornerLayer);\n\n                that._createHandlers();\n\n                that._initialize();\n                that._fetchFreshData();\n                that._createGlobalToolBar();\n                that._resizingAdorner = new ResizingAdorner(that, { editable: that.options.editable });\n                that._connectorsAdorner = new ConnectorsAdorner(that);\n\n                that._adorn(that._resizingAdorner, true);\n                that._adorn(that._connectorsAdorner, true);\n\n                that.selector = new Selector(that);\n                // TODO: We may consider using real Clipboard API once is supported by the standard.\n                that._clipboard = [];\n\n                if (that.options.layout) {\n                    that.layout(that.options.layout);\n                }\n                that.pauseMouseHandlers = false;\n\n                that._createShapes();\n                that._createConnections();\n                that.zoom(that.options.zoom);\n\n                that.canvas.draw();\n            },\n\n            options: {\n                name: \"Diagram\",\n                theme: \"default\",\n                layout: \"\",\n                zoomRate: 0.1,\n                zoom: 1,\n                zoomMin: 0,\n                zoomMax: 2,\n                dataSource: {},\n                draggable: true,\n                template: \"\",\n                autoBind: true,\n                editable: {\n                    rotate: {},\n                    resize: {},\n                    text: true,\n                    tools: []\n                },\n                pannable: {\n                    key: \"ctrl\"\n                },\n                selectable: {\n                    key: \"none\"\n                },\n                tooltip: { enabled: true, format: \"{0}\" },\n                copy: {\n                    enabled: true,\n                    offsetX: 20,\n                    offsetY: 20\n                },\n                snap: {\n                    enabled: true,\n                    size: 10,\n                    angle: 10\n                },\n                shapeDefaults: diagram.shapeDefaults({ undoable: true }),\n                connectionDefaults: {\n                    editable: {\n                        tools: []\n                    }\n                },\n                shapes: [],\n                connections: []\n            },\n\n            events: [\n                ZOOM_END,\n                ZOOM_START,\n                PAN, SELECT,\n                ITEMROTATE,\n                ITEMBOUNDSCHANGE,\n                CHANGE,\n                CLICK,\n                MOUSE_ENTER,\n                MOUSE_LEAVE,\n                \"toolBarClick\",\n                \"save\",\n                \"cancel\",\n                \"edit\",\n                \"remove\",\n                \"add\",\n                \"dataBound\"\n            ],\n\n            _createGlobalToolBar: function() {\n                var tools = this.options.editable.tools;\n                if (this._isEditable && tools.length === 0) {\n                    tools = [\"createShape\", \"undo\", \"redo\", \"rotateClockwise\", \"rotateAnticlockwise\"];\n                }\n\n                if (tools && tools.length) {\n                    this.toolBar = new DiagramToolBar(this, {\n                        tools: tools || {},\n                        click: proxy(this._toolBarClick, this),\n                        modal: false\n                    });\n\n                    this.toolBar.element.css({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        width: this.element.width(),\n                        textAlign: \"left\"\n                    });\n\n                    this.element.append(this.toolBar.element);\n                }\n            },\n\n            createShape: function() {\n                var that = this;\n                if (((this.editor && this.editor.end()) || !this.editor) &&\n                    !this.trigger(\"add\", { shape: {} })) {\n                    var view = this.dataSource.view() || [];\n                    var index = view.length;\n                    var model = this.dataSource.insert(index, {});\n                    that.editModel(model, \"shape\");\n                }\n            },\n\n            createConnection: function() {\n                if (((this.editor && this.editor.end()) || !this.editor) &&\n                    !this.trigger(\"add\", { connection: {} })) {\n                    var view = this.connectionsDataSource.view() || [];\n                    var index = view.length;\n                    var model = this.connectionsDataSource.insert(index, {});\n                    var connection = this._connectionsDataMap[model.uid];\n                    this.edit(connection);\n                }\n            },\n\n            editModel: function(dataItem, editorType) {\n                this.cancelEdit();\n                var editors, template;\n                var editable = this.options.editable;\n\n                if (editorType == \"shape\") {\n                    editors = editable.shapeEditors;\n                    template = editable.shapeTemplate;\n                } else if (editorType == \"connection\") {\n                    var connectionSelectorHandler = proxy(connectionSelector, this);\n                    editors = deepExtend({}, { from: connectionSelectorHandler, to: connectionSelectorHandler }, editable.connectionEditors);\n                    template = editable.connectionTemplate;\n                } else {\n                    return;\n                }\n\n                this.editor = new PopupEditor(this.element, {\n                    update: proxy(this._update, this),\n                    cancel: proxy(this._cancel, this),\n                    model: dataItem,\n                    type: editorType,\n                    target: this,\n                    editors: editors,\n                    template: template\n                });\n\n                this.trigger(\"edit\", this._editArgs());\n            },\n\n            edit: function(item) {\n                if (item.dataItem) {\n                    var editorType = item instanceof Shape ? \"shape\" : \"connection\";\n                    this.editModel(item.dataItem, editorType);\n                }\n            },\n\n            cancelEdit: function() {\n                if (this.editor) {\n                    this._getEditDataSource().cancelChanges(this.editor.model);\n\n                    this._destroyEditor();\n                }\n            },\n\n            saveEdit: function() {\n                if (this.editor && this.editor.end() &&\n                    !this.trigger(\"save\", this._editArgs())) {\n                    this._getEditDataSource().sync();\n                }\n            },\n\n            _update: function() {\n                if (this.editor && this.editor.end() &&\n                    !this.trigger(\"save\", this._editArgs())) {\n                    this._getEditDataSource().sync();\n                    this._destroyEditor();\n                }\n            },\n\n            _cancel: function() {\n                if (this.editor && !this.trigger(\"cancel\", this._editArgs())) {\n                    var model = this.editor.model;\n                    this._getEditDataSource().cancelChanges(model);\n                    var element = this._connectionsDataMap[model.uid] || this._dataMap[model.id];\n                    if (element) {\n                        element._setOptionsFromModel(model);\n                    }\n                    this._destroyEditor();\n                }\n            },\n\n            _getEditDataSource: function() {\n                return this.editor.options.type === \"shape\" ? this.dataSource : this.connectionsDataSource;\n            },\n\n            _editArgs: function() {\n                var result = { container: this.editor.element };\n                result[this.editor.options.type] = this.editor.model;\n                return result;\n            },\n\n            _destroyEditor: function() {\n                if (this.editor) {\n                    this.editor.close();\n                    this.editor = null;\n                }\n            },\n\n            _initElements: function() {\n                this.wrapper = this.element.empty()\n                    .css(\"position\", \"relative\")\n                    .attr(\"tabindex\", 0)\n                    .addClass(\"k-widget k-diagram\");\n\n\n                this.scrollable = $(\"<div />\").appendTo(this.element);\n            },\n\n            _initShapeDefaults: function() {\n                var options = this.options;\n                if (options.editable === false) {\n                    deepExtend(options.shapeDefaults, {\n                        editable: {\n                            connect: false\n                        }\n                    });\n                }\n            },\n\n            _initCanvas: function() {\n                var canvasContainer = $(\"<div class='k-layer'></div>\").appendTo(this.scrollable)[0];\n                var viewPort = this.viewport();\n                this.canvas = new Canvas(canvasContainer, {\n                    width: viewPort.width || DEFAULT_CANVAS_WIDTH,\n                    height: viewPort.height || DEFAULT_CANVAS_HEIGHT\n                });\n            },\n\n            _createHandlers: function () {\n                var that = this;\n                var element = that.element;\n\n                element.on(MOUSEWHEEL_NS, proxy(that._wheel, that));\n                if (!kendo.support.touch && !kendo.support.mobileOS) {\n                    that.toolService = new ToolService(that);\n                    this.scroller.wrapper\n                        .on(\"mousemove\" + NS, proxy(that._mouseMove, that))\n                        .on(\"mouseup\" + NS, proxy(that._mouseUp, that))\n                        .on(\"mousedown\" + NS, proxy(that._mouseDown, that))\n                        .on(\"mouseover\" + NS, proxy(that._mouseover, that))\n                        .on(\"mouseout\" + NS, proxy(that._mouseout, that));\n\n                    element.on(\"keydown\" + NS, proxy(that._keydown, that));\n                } else {\n                    that._userEvents = new kendo.UserEvents(element, {\n                        multiTouch: true,\n                        tap: proxy(that._tap, that)\n                    });\n\n                    that._userEvents.bind([\"gesturestart\", \"gesturechange\", \"gestureend\"], {\n                        gesturestart: proxy(that._gestureStart, that),\n                        gesturechange: proxy(that._gestureChange, that),\n                        gestureend: proxy(that._gestureEnd, that)\n                    });\n                    that.toolService = new ToolService(that);\n                    if (that.options.pannable !== false)  {\n                        that.scroller.enable();\n                    }\n                }\n\n                this._syncHandler = proxy(that._syncChanges, that);\n                that._resizeHandler = proxy(that.resize, that);\n                kendo.onResize(that._resizeHandler);\n                this.bind(ZOOM_START, proxy(that._destroyToolBar, that));\n                this.bind(PAN, proxy(that._destroyToolBar, that));\n            },\n\n            _tap: function(e) {\n                var toolService = this.toolService;\n                var p = this._caculateMobilePosition(e);\n                toolService._updateHoveredItem(p);\n                if (toolService.hoveredItem) {\n                    var item = toolService.hoveredItem;\n                    if (this.options.selectable !== false) {\n                        this._destroyToolBar();\n                        if (item.isSelected) {\n                            item.select(false);\n                        } else {\n                            this.select(item, { addToSelection: true });\n                        }\n                        this._createToolBar();\n                    }\n                    this.trigger(\"click\", {\n                        item: item,\n                        point: p\n                    });\n                }\n            },\n\n            _caculateMobilePosition: function(e) {\n                return this.documentToModel(\n                    Point(e.x.location, e.y.location)\n                );\n            },\n\n            _gestureStart: function(e) {\n                this._destroyToolBar();\n                this.scroller.disable();\n                var initialCenter = this.documentToModel(new Point(e.center.x, e.center.y));\n                var eventArgs = {\n                    point: initialCenter,\n                    zoom: this.zoom()\n                };\n\n                if (this.trigger(ZOOM_START, eventArgs)) {\n                    return;\n                }\n\n                this._gesture = e;\n                this._initialCenter = initialCenter;\n            },\n\n            _gestureChange: function(e) {\n                var previousGesture = this._gesture;\n                var initialCenter = this._initialCenter;\n                var center = this.documentToView(new Point(e.center.x, e.center.y));\n                var scaleDelta = e.distance / previousGesture.distance;\n                var zoom = this._zoom;\n                var updateZoom = false;\n\n                if (math.abs(scaleDelta - 1) >= MOBILE_ZOOM_RATE) {\n                    this._zoom = zoom = this._getValidZoom(zoom * scaleDelta);\n                    this.options.zoom = zoom;\n                    this._gesture = e;\n                    updateZoom = true;\n                }\n\n                var zoomedPoint = initialCenter.times(zoom);\n                var pan = center.minus(zoomedPoint);\n                if (updateZoom || this._pan.distanceTo(pan) >= MOBILE_PAN_DISTANCE) {\n                    this._panTransform(pan);\n                    this._updateAdorners();\n                }\n\n                e.preventDefault();\n            },\n\n            _gestureEnd: function() {\n                if (this.options.pannable !== false)  {\n                    this.scroller.enable();\n                }\n                this.trigger(ZOOM_END, {\n                    point: this._initialCenter,\n                    zoom: this.zoom()\n                });\n            },\n\n            _resize: function(size) {\n                if (this.canvas) {\n                    this.canvas.size(size);\n                }\n\n                if (this.toolBar) {\n                    this.toolBar._toolBar.element.width(this.element.width());\n                }\n            },\n\n            _mouseover: function(e) {\n                var node = e.target._kendoNode;\n                if (node && node.srcElement._hover) {\n                    node.srcElement._hover(true, node.srcElement);\n                }\n            },\n\n            _mouseout: function(e) {\n                var node = e.target._kendoNode;\n                if (node && node.srcElement._hover) {\n                    node.srcElement._hover(false, node.srcElement);\n                }\n            },\n\n            _initTheme: function() {\n                var that = this,\n                    themes = dataviz.ui.themes || {},\n                    themeName = ((that.options || {}).theme || \"\").toLowerCase(),\n                    themeOptions = (themes[themeName] || {}).diagram;\n\n                that.options = deepExtend({}, themeOptions, that.options);\n            },\n\n            _createShapes: function() {\n                var that = this,\n                    options = that.options,\n                    shapes = options.shapes,\n                    shape, i;\n\n                for (i = 0; i < shapes.length; i++) {\n                    shape = shapes[i];\n                    that.addShape(shape);\n                }\n            },\n\n            _createConnections: function() {\n                var diagram = this,\n                    options = diagram.options,\n                    defaults = options.connectionDefaults,\n                    connections = options.connections,\n                    conn, source, target, i;\n\n                for(i = 0; i < connections.length; i++) {\n                    conn = connections[i];\n                    source = diagram._findConnectionShape(conn.from);\n                    target = diagram._findConnectionShape(conn.to);\n\n                    diagram.connect(source, target, deepExtend({}, defaults, conn));\n                }\n            },\n\n            _findConnectionShape: function(options) {\n                var diagram = this,\n                    shapeId = isString(options) ? options : options.shapeId;\n\n                var shape = diagram.getShapeById(shapeId);\n\n                return shape.getConnector(options.connector || AUTO);\n            },\n\n            destroy: function () {\n                var that = this;\n                Widget.fn.destroy.call(that);\n\n                if (this._userEvents) {\n                    this._userEvents.destroy();\n                }\n\n                kendo.unbindResize(that._resizeHandler);\n\n                that.clear();\n                that.element.off(NS);\n                that.scroller.wrapper.off(NS);\n                that.canvas.destroy(true);\n                that.canvas = undefined;\n\n                that._destroyEditor();\n                that.destroyScroller();\n                that._destroyGlobalToolBar();\n                that._destroyToolBar();\n            },\n\n            destroyScroller: function () {\n                var scroller = this.scroller;\n\n                if (!scroller) {\n                    return;\n                }\n\n                scroller.destroy();\n                scroller.element.remove();\n                this.scroller = null;\n            },\n\n            save: function () {\n                var json = {}, i;\n\n                json.shapes = [];\n                json.connections = [];\n\n                for (i = 0; i < this.shapes.length; i++) {\n                    var shape = this.shapes[i];\n                    if (shape.options.serializable) {\n                        json.shapes.push(shape.options);\n                    }\n                }\n\n                for (i = 0; i < this.connections.length; i++) {\n                    var con = this.connections[i];\n                    var conOptions = deepExtend({}, con.options, { from: con.from.toJSON(), to: con.to.toJSON() });\n                    json.connections.push(conOptions);\n                }\n\n                return json;\n            },\n\n            focus: function() {\n                if (!this.element.is(kendo._activeElement())) {\n                    var element = this.element,\n                        scrollContainer = element[0],\n                        containers = [],\n                        offsets = [],\n                        documentElement = document.documentElement,\n                        i;\n\n                    do {\n                        scrollContainer = scrollContainer.parentNode;\n\n                        if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n                            containers.push(scrollContainer);\n                            offsets.push(scrollContainer.scrollTop);\n                        }\n                    } while (scrollContainer != documentElement);\n\n                    element.focus();\n\n                    for (i = 0; i < containers.length; i++) {\n                        containers[i].scrollTop = offsets[i];\n                    }\n                }\n            },\n\n            load: function(options) {\n                this.clear();\n\n                this.setOptions(options);\n                this._createShapes();\n                this._createConnections();\n            },\n\n            setOptions: function(options) {\n                deepExtend(this.options, options);\n            },\n\n            clear: function () {\n                var that = this;\n\n                that.select(false);\n                that.mainLayer.clear();\n                that._initialize();\n            },\n            /**\n             * Connects two items.\n             * @param source Shape, Connector, Point.\n             * @param target Shape, Connector, Point.\n             * @param options Connection options that will be passed to the newly created connection.\n             * @returns The newly created connection.\n             */\n            connect: function (source, target, options) {\n                var connection;\n                if (this.connectionsDataSource && this._isEditable) {\n                    var dataItem = this.connectionsDataSource.add({});\n                    connection = this._connectionsDataMap[dataItem.uid];\n                    connection.source(source);\n                    connection.target(target);\n                    connection.redraw(options);\n                    connection.updateModel();\n                } else {\n                    connection = new Connection(source, target,\n                        deepExtend({ }, this.options.connectionDefaults, options));\n\n                    this.addConnection(connection);\n                }\n\n                return connection;\n            },\n            /**\n             * Determines whether the the two items are connected.\n             * @param source Shape, Connector, Point.\n             * @param target Shape, Connector, Point.\n             * @returns true if the two items are connected.\n             */\n            connected: function (source, target) {\n                for (var i = 0; i < this.connections.length; i++) {\n                    var c = this.connections[i];\n                    if (c.from == source && c.to == target) {\n                        return true;\n                    }\n                }\n\n                return false;\n            },\n            /**\n             * Adds connection to the diagram.\n             * @param connection Connection.\n             * @param undoable Boolean.\n             * @returns The newly created connection.\n             */\n            addConnection: function (connection, undoable) {\n                if (undoable !== false) {\n                    this.undoRedoService.add(\n                        new diagram.AddConnectionUnit(connection, this), false);\n                }\n\n                connection.diagram = this;\n                this.mainLayer.append(connection.visual);\n                this.connections.push(connection);\n                connection.updateOptionsFromModel();\n\n                return connection;\n            },\n\n            _addConnection: function (connection, undoable) {\n                var newConnection, newItem, dataItem;\n                if (this.connectionsDataSource && this._isEditable) {\n                    newItem = cloneDataItem(connection.dataItem);\n                    dataItem = this.connectionsDataSource.add(newItem);\n                    newConnection = this._connectionsDataMap[dataItem.uid];\n                    newConnection.redraw(connection.options);\n                    newConnection._updateConnector(connection.source(), \"source\");\n                    newConnection._updateConnector(connection.target(), \"target\");\n                } else {\n                    newConnection = this.addConnection(connection, undoable);\n                    newConnection.source(connection.source());\n                    newConnection.target(connection.target());\n                }\n\n                return newConnection;\n            },\n\n            /**\n             * Adds shape to the diagram.\n             * @param item Shape, Point. If point is passed it will be created new Shape and positioned at that point.\n             * @param options. The options to be passed to the newly created Shape.\n             * @returns The newly created shape.\n             */\n            addShape: function(item, options) {\n                var shape,\n                    shapeDefaults = this.options.shapeDefaults;\n\n                if (item instanceof Shape) {\n                    shapeDefaults = deepExtend({}, shapeDefaults, options);\n                    item.redraw(options);\n                    shape = item;\n                } else if (!(item instanceof kendo.Class)) {\n                    shapeDefaults = deepExtend({}, shapeDefaults, item || {});\n                    shape = new Shape(shapeDefaults);\n                } else {\n                    return;\n                }\n\n                if (shapeDefaults.undoable) {\n                    this.undoRedoService.add(new diagram.AddShapeUnit(shape, this), false);\n                }\n\n                this.shapes.push(shape);\n                shape.diagram = this;\n                this.mainLayer.append(shape.visual);\n\n                this.trigger(CHANGE, {\n                    added: [shape],\n                    removed: []\n                });\n\n                // for shapes which have their own internal layout mechanism\n                if (shape.hasOwnProperty(\"layout\")) {\n                    shape.layout(shape);\n                }\n\n                return shape;\n            },\n\n            _addShape: function(shape, options) {\n                var that = this;\n                var newItem, dataItem;\n                if (this.dataSource && this._isEditable) {\n                    newItem = cloneDataItem(shape.dataItem);\n                    if (!this.trigger(\"add\", { shape: newItem })) {\n                        dataItem = this.dataSource.add(newItem);\n                        var updateShape = function() {\n                            var element = that._dataMap[dataItem.id];\n                            element.redraw(shape.options);\n                        };\n                        var inactiveItem = this._inactiveShapeItems.getByUid(dataItem.uid);\n                        shape.dataItem = dataItem;\n                        shape.updateModel();\n                        if (inactiveItem) {\n                            inactiveItem.onActivate(updateShape);\n                        } else {\n                            updateShape();\n                        }\n                        return that._dataMap[dataItem.id];\n                    }\n                } else {\n                    return this.addShape(shape, options);\n                }\n            },\n            /**\n             * Removes items (or single item) from the diagram.\n             * @param items DiagramElement, Array of Items.\n             * @param undoable.\n             */\n\n           remove: function(items, undoable) {\n                if (!isArray(items)) {\n                    items = [items];\n                }\n                var elements = splitDiagramElements(items);\n                var shapes = elements.shapes;\n                var connections = elements.connections;\n                var i;\n\n                if (!defined(undoable)) {\n                    undoable = true;\n                }\n\n                if (undoable) {\n                    this.undoRedoService.begin();\n                }\n\n                this._suspendModelRefresh();\n                for (i = shapes.length - 1; i >= 0; i--) {\n                   this._removeItem(shapes[i], undoable, connections);\n                }\n\n                for (i = connections.length - 1; i >= 0; i--) {\n                    this._removeItem(connections[i], undoable);\n                }\n\n                this._resumeModelRefresh();\n\n                if (undoable) {\n                    this.undoRedoService.commit(false);\n                }\n\n                this.trigger(CHANGE, {\n                    added: [],\n                    removed: items\n                });\n            },\n\n            _removeShapeDataItem: function(item) {\n                if (this._isEditable) {\n                    this.dataSource.remove(item.dataItem);\n                    delete this._dataMap[item.dataItem.id];\n                }\n            },\n\n            _removeConnectionDataItem: function(item) {\n                if (this._isEditable) {\n                    this.connectionsDataSource.remove(item.dataItem);\n                    delete this._connectionsDataMap[item.dataItem.uid];\n                }\n            },\n\n            _triggerRemove: function(items){\n                if (this._isEditable) {\n                    var toRemove = [];\n                    var item, args;\n\n                    for (var idx = 0; idx < items.length; idx++) {\n                        item = items[idx];\n                        if (item instanceof Shape) {\n                            args = { shape: item.dataItem };\n                        } else {\n                            args = { connection: item.dataItem };\n                        }\n                        if (!this.trigger(\"remove\", args)) {\n                            toRemove.push(item);\n                        }\n                    }\n                    return toRemove;\n                } else {\n                    return items;\n                }\n            },\n\n            /**\n             * Executes the next undoable action on top of the undo stack if any.\n             */\n            undo: function () {\n                this.undoRedoService.undo();\n            },\n            /**\n             * Executes the previous undoable action on top of the redo stack if any.\n             */\n            redo: function () {\n                this.undoRedoService.redo();\n            },\n            /**\n             * Selects items on the basis of the given input or returns the current selection if none.\n             * @param itemsOrRect DiagramElement, Array of elements, \"All\", false or Rect. A value 'false' will deselect everything.\n             * @param options\n             * @returns {Array}\n             */\n            select: function (item, options) {\n                if (isDefined(item)) {\n                    options = deepExtend({ addToSelection: false }, options);\n\n                    var addToSelection = options.addToSelection,\n                        items = [],\n                        selected = [],\n                        i, element;\n\n                    if (!addToSelection) {\n                        this.deselect();\n                    }\n\n                    this._internalSelection = true;\n\n                    if (item instanceof Array) {\n                        items = item;\n                    } else if (item instanceof DiagramElement) {\n                        items = [ item ];\n                    }\n\n                    for (i = 0; i < items.length; i++) {\n                        element = items[i];\n                        if (element.select(true)) {\n                            selected.push(element);\n                        }\n                    }\n\n                    this._selectionChanged(selected, []);\n\n                    this._internalSelection = false;\n                } else {\n                    return this._selectedItems;\n                }\n            },\n\n            selectAll: function() {\n                this.select(this.shapes.concat(this.connections));\n            },\n\n            selectArea: function(rect) {\n                var i, items, item;\n                this._internalSelection = true;\n                var selected = [];\n                if (rect instanceof Rect) {\n                    items = this.shapes.concat(this.connections);\n                    for (i = 0; i < items.length; i++) {\n                        item = items[i];\n                        if ((!rect || item._hitTest(rect)) && item.options.enable) {\n                            if (item.select(true)) {\n                                selected.push(item);\n                            }\n                        }\n                    }\n                }\n\n                this._selectionChanged(selected, []);\n                this._internalSelection = false;\n            },\n\n            deselect: function(item) {\n                this._internalSelection = true;\n                var deselected = [],\n                    items = [],\n                    element, i;\n\n                if (item instanceof Array) {\n                    items = item;\n                } else if (item instanceof DiagramElement) {\n                    items.push(item);\n                } else if (!isDefined(item)) {\n                    items = this._selectedItems.slice(0);\n                }\n\n                for (i = 0; i < items.length; i++) {\n                    element = items[i];\n                    if (element.select(false)) {\n                        deselected.push(element);\n                    }\n                }\n\n                this._selectionChanged([], deselected);\n                this._internalSelection = false;\n            },\n            /**\n             * Brings to front the passed items.\n             * @param items DiagramElement, Array of Items.\n             * @param undoable. By default the action is undoable.\n             */\n            toFront: function (items, undoable) {\n                if (!items) {\n                    items = this._selectedItems.slice();\n                }\n\n                var result = this._getDiagramItems(items), indices;\n                if (!defined(undoable) || undoable) {\n                    indices = indicesOfItems(this.mainLayer, result.visuals);\n                    var unit = new ToFrontUnit(this, items, indices);\n                    this.undoRedoService.add(unit);\n                } else {\n                    this.mainLayer.toFront(result.visuals);\n                    this._fixOrdering(result, true);\n                }\n            },\n            /**\n             * Sends to back the passed items.\n             * @param items DiagramElement, Array of Items.\n             * @param undoable. By default the action is undoable.\n             */\n            toBack: function (items, undoable) {\n                if (!items) {\n                    items = this._selectedItems.slice();\n                }\n\n                var result = this._getDiagramItems(items), indices;\n                if (!defined(undoable) || undoable) {\n                    indices = indicesOfItems(this.mainLayer, result.visuals);\n                    var unit = new ToBackUnit(this, items, indices);\n                    this.undoRedoService.add(unit);\n                } else {\n                    this.mainLayer.toBack(result.visuals);\n                    this._fixOrdering(result, false);\n                }\n            },\n            /**\n             * Bring into view the passed item(s) or rectangle.\n             * @param items DiagramElement, Array of Items, Rect.\n             * @param options. align - controls the position of the calculated rectangle relative to the viewport.\n             * \"Center middle\" will position the items in the center. animate - controls if the pan should be animated.\n             */\n            bringIntoView: function (item, options) { // jQuery|Item|Array|Rect\n                var viewport = this.viewport();\n                var aligner = new diagram.RectAlign(viewport);\n                var current, rect, original, newPan;\n\n                if (viewport.width === 0 || viewport.height === 0) {\n                    return;\n                }\n\n                options = deepExtend({animate: false, align: \"center middle\"}, options);\n                if (options.align == \"none\") {\n                    options.align = \"center middle\";\n                }\n\n                if (item instanceof DiagramElement) {\n                    rect = item.bounds(TRANSFORMED);\n                } else if (isArray(item)) {\n                    rect = this.boundingBox(item);\n                } else if (item instanceof Rect) {\n                    rect = item.clone();\n                }\n\n                original = rect.clone();\n\n                rect.zoom(this._zoom);\n                this._storePan(new Point());\n\n                if (rect.width > viewport.width || rect.height > viewport.height) {\n                    this._zoom = this._getValidZoom(math.min(viewport.width / original.width, viewport.height / original.height));\n                    rect = original.clone().zoom(this._zoom);\n                }\n\n                this._zoomMainLayer();\n\n                current = rect.clone();\n                aligner.align(rect, options.align);\n\n                newPan = rect.topLeft().minus(current.topLeft());\n                this.pan(newPan.times(-1), options.animate);\n            },\n\n            alignShapes: function (direction) {\n                if (isUndefined(direction)) {\n                    direction = \"Left\";\n                }\n                var items = this.select(),\n                    val,\n                    item,\n                    i;\n\n                if (items.length === 0) {\n                    return;\n                }\n\n                switch (direction.toLowerCase()) {\n                    case \"left\":\n                    case \"top\":\n                        val = MAX_VALUE;\n                        break;\n                    case \"right\":\n                    case \"bottom\":\n                        val = MIN_VALUE;\n                        break;\n                }\n\n                for (i = 0; i < items.length; i++) {\n                    item = items[i];\n                    if (item instanceof Shape) {\n                        switch (direction.toLowerCase()) {\n                            case \"left\":\n                                val = math.min(val, item.options.x);\n                                break;\n                            case \"top\":\n                                val = math.min(val, item.options.y);\n                                break;\n                            case \"right\":\n                                val = math.max(val, item.options.x);\n                                break;\n                            case \"bottom\":\n                                val = math.max(val, item.options.y);\n                                break;\n                        }\n                    }\n                }\n                var undoStates = [];\n                var shapes = [];\n                for (i = 0; i < items.length; i++) {\n                    item = items[i];\n                    if (item instanceof Shape) {\n                        shapes.push(item);\n                        undoStates.push(item.bounds());\n                        switch (direction.toLowerCase()) {\n                            case \"left\":\n                            case \"right\":\n                                item.position(new Point(val, item.options.y));\n                                break;\n                            case \"top\":\n                            case \"bottom\":\n                                item.position(new Point(item.options.x, val));\n                                break;\n                        }\n                    }\n                }\n                var unit = new diagram.TransformUnit(shapes, undoStates);\n                this.undoRedoService.add(unit, false);\n            },\n\n            zoom: function (zoom, options) {\n                if (zoom) {\n                    var staticPoint = options ? options.point : new diagram.Point(0, 0);\n                    // var meta = options ? options.meta : 0;\n                    zoom = this._zoom = this._getValidZoom(zoom);\n\n                    if (!isUndefined(staticPoint)) {//Viewpoint vector is constant\n                        staticPoint = new diagram.Point(math.round(staticPoint.x), math.round(staticPoint.y));\n                        var zoomedPoint = staticPoint.times(zoom);\n                        var viewportVector = this.modelToView(staticPoint);\n                        var raw = viewportVector.minus(zoomedPoint);//pan + zoomed point = viewpoint vector\n                        this._storePan(new diagram.Point(math.round(raw.x), math.round(raw.y)));\n                    }\n\n                    if (options) {\n                        options.zoom = zoom;\n                    }\n\n                    this._panTransform();\n\n                    this._updateAdorners();\n                }\n\n                return this._zoom;\n            },\n\n            _getPan: function(pan) {\n                var canvas = this.canvas;\n                if (!canvas.translate) {\n                    pan = pan.plus(this._pan);\n                }\n                return pan;\n            },\n\n            pan: function (pan, animate) {\n                if (pan instanceof Point) {\n                    var that = this;\n                    var scroller = that.scroller;\n                    pan = that._getPan(pan);\n                    pan = pan.times(-1);\n\n                    if (animate) {\n                        scroller.animatedScrollTo(pan.x, pan.y, function() {\n                            that._updateAdorners();\n                        });\n                    } else {\n                        scroller.scrollTo(pan.x, pan.y);\n                        that._updateAdorners();\n                    }\n                }\n            },\n\n            viewport: function () {\n                var element = this.element;\n\n                return new Rect(0, 0, element.width(), element.height());\n            },\n            copy: function () {\n                if (this.options.copy.enabled) {\n                    this._clipboard = [];\n                    this._copyOffset = 1;\n                    for (var i = 0; i < this._selectedItems.length; i++) {\n                        var item = this._selectedItems[i];\n                        this._clipboard.push(item);\n                    }\n                }\n            },\n            cut: function () {\n                if (this.options.copy.enabled) {\n                    this._clipboard = [];\n                    this._copyOffset = 0;\n                    for (var i = 0; i < this._selectedItems.length; i++) {\n                        var item = this._selectedItems[i];\n                        this._clipboard.push(item);\n                    }\n                    this.remove(this._clipboard, true);\n                }\n            },\n\n            paste: function () {\n                if (this._clipboard.length > 0) {\n                    var item, copied, i;\n                    var mapping = {};\n                    var elements = splitDiagramElements(this._clipboard);\n                    var connections = elements.connections;\n                    var shapes = elements.shapes;\n                    var offset = {\n                        x: this._copyOffset * this.options.copy.offsetX,\n                        y: this._copyOffset * this.options.copy.offsetY\n                    };\n                    this.deselect();\n                    // first the shapes\n                    for (i = 0; i < shapes.length; i++) {\n                        item = shapes[i];\n                        copied = item.clone();\n                        mapping[item.id] = copied;\n                        copied.position(new Point(item.options.x + offset.x, item.options.y + offset.y));\n                        copied.diagram = this;\n                        copied = this._addShape(copied);\n                        if (copied) {\n                            copied.select();\n                        }\n                    }\n                    // then the connections\n                    for (i = 0; i < connections.length; i++) {\n                        item = connections[i];\n                        copied = this._addConnection(item.clone());\n                        if (copied) {\n                            this._updateCopiedConnection(copied, item, \"source\", mapping, offset);\n                            this._updateCopiedConnection(copied, item, \"target\", mapping, offset);\n\n                            copied.select(true);\n                            copied.updateModel();\n                        }\n                    }\n\n                    this._syncChanges();\n\n                    this._copyOffset += 1;\n                }\n            },\n\n            _updateCopiedConnection: function(connection, sourceConnection, connectorName, mapping, offset) {\n                var onActivate, inactiveItem, targetShape;\n                var target = sourceConnection[connectorName]();\n                var diagram = this;\n                if (target instanceof Connector && mapping[target.shape.id]) {\n                    targetShape = mapping[target.shape.id];\n                    if (diagram.getShapeById(targetShape.id)) {\n                        connection[connectorName](targetShape.getConnector(target.options.name));\n                    } else {\n                        inactiveItem = diagram._inactiveShapeItems.getByUid(targetShape.dataItem.uid);\n                        if (inactiveItem) {\n                            onActivate = function(item) {\n                                targetShape = diagram._dataMap[item.id];\n                                connection[connectorName](targetShape.getConnector(target.options.name));\n                                connection.updateModel();\n                            };\n                            diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(onActivate));\n                        }\n                    }\n                } else {\n                    connection[connectorName](new Point(sourceConnection[connectorName + \"Point\"]().x + offset.x, sourceConnection[connectorName + \"Point\"]().y + offset.y));\n                }\n            },\n            /**\n             * Gets the bounding rectangle of the given items.\n             * @param items DiagramElement, Array of elements.\n             * @param origin Boolean. Pass 'true' if you need to get the bounding box of the shapes without their rotation offset.\n             * @returns {Rect}\n             */\n            boundingBox: function (items, origin) {\n                var rect = Rect.empty(), temp,\n                    di = isDefined(items) ? this._getDiagramItems(items) : {shapes: this.shapes};\n                if (di.shapes.length > 0) {\n                    var item = di.shapes[0];\n                    rect = item.bounds(ROTATED);\n                    for (var i = 1; i < di.shapes.length; i++) {\n                        item = di.shapes[i];\n                        temp = item.bounds(ROTATED);\n                        if (origin === true) {\n                            temp.x -= item._rotationOffset.x;\n                            temp.y -= item._rotationOffset.y;\n                        }\n                        rect = rect.union(temp);\n                    }\n                }\n                return rect;\n            },\n            documentToView: function(point) {\n                var containerOffset = this.element.offset();\n\n                return new Point(point.x - containerOffset.left, point.y - containerOffset.top);\n            },\n            viewToDocument: function(point) {\n                var containerOffset = this.element.offset();\n\n                return new Point(point.x + containerOffset.left, point.y + containerOffset.top);\n            },\n            viewToModel: function(point) {\n                return this._transformWithMatrix(point, this._matrixInvert);\n            },\n            modelToView: function(point) {\n                return this._transformWithMatrix(point, this._matrix);\n            },\n            modelToLayer: function(point) {\n                return this._transformWithMatrix(point, this._layerMatrix);\n            },\n            layerToModel: function(point) {\n                return this._transformWithMatrix(point, this._layerMatrixInvert);\n            },\n            documentToModel: function(point) {\n                var viewPoint = this.documentToView(point);\n                if (!this.canvas.translate) {\n                    viewPoint.x = viewPoint.x + this.scroller.scrollLeft;\n                    viewPoint.y = viewPoint.y + this.scroller.scrollTop;\n                }\n                return this.viewToModel(viewPoint);\n            },\n            modelToDocument: function(point) {\n                return this.viewToDocument(this.modelToView(point));\n            },\n            _transformWithMatrix: function(point, matrix) {\n                var result = point;\n                if (point instanceof Point) {\n                    if (matrix) {\n                        result = matrix.apply(point);\n                    }\n                }\n                else {\n                    var tl = this._transformWithMatrix(point.topLeft(), matrix),\n                        br = this._transformWithMatrix(point.bottomRight(), matrix);\n                    result = Rect.fromPoints(tl, br);\n                }\n                return result;\n            },\n\n            setDataSource: function(dataSource) {\n                this.options.dataSource = dataSource;\n                this._dataSource();\n                if (this.options.autoBind) {\n                    this.dataSource.fetch();\n                }\n            },\n\n            setConnectionsDataSource: function(dataSource) {\n                this.options.connectionsDataSource = dataSource;\n                this._connectionDataSource();\n                if (this.options.autoBind) {\n                    this.connectionsDataSource.fetch();\n                }\n            },\n\n            /**\n             * Performs a diagram layout of the given type.\n             * @param layoutType The layout algorithm to be applied (TreeLayout, LayeredLayout, SpringLayout).\n             * @param options Layout-specific options.\n             */\n            layout: function (options) {\n                this.isLayouting = true;\n                // TODO: raise layout event?\n                var type;\n                if(isUndefined(options)) {\n                    options = this.options.layout;\n                }\n                if (isUndefined(options) || isUndefined(options.type)) {\n                    type = \"Tree\";\n                }\n                else {\n                    type = options.type;\n                }\n                var l;\n                switch (type.toLowerCase()) {\n                    case \"tree\":\n                        l = new diagram.TreeLayout(this);\n                        break;\n\n                    case \"layered\":\n                        l = new diagram.LayeredLayout(this);\n                        break;\n\n                    case \"forcedirected\":\n                    case \"force\":\n                    case \"spring\":\n                    case \"springembedder\":\n                        l = new diagram.SpringLayout(this);\n                        break;\n                    default:\n                        throw \"Layout algorithm '\" + type + \"' is not supported.\";\n                }\n                var initialState = new diagram.LayoutState(this);\n                var finalState = l.layout(options);\n                if (finalState) {\n                    var unit = new diagram.LayoutUndoUnit(initialState, finalState, options ? options.animate : null);\n                    this.undoRedoService.add(unit);\n                }\n                this.isLayouting = false;\n            },\n            /**\n             * Gets a shape on the basis of its identifier.\n             * @param id (string) the identifier of a shape.\n             * @returns {Shape}\n             */\n            getShapeById: function (id) {\n                var found;\n                found = Utils.first(this.shapes, function (s) {\n                    return s.visual.id === id;\n                });\n                if (found) {\n                    return found;\n                }\n                found = Utils.first(this.connections, function (c) {\n                    return c.visual.id === id;\n                });\n                return found;\n            },\n\n            _extendLayoutOptions: function(options) {\n                if(options.layout) {\n                    options.layout = deepExtend(diagram.LayoutBase.fn.defaultOptions || {}, options.layout);\n                }\n            },\n\n            _selectionChanged: function (selected, deselected) {\n                if (selected.length || deselected.length) {\n                    this.trigger(SELECT, { selected: selected, deselected: deselected });\n                }\n            },\n            _getValidZoom: function (zoom) {\n                return math.min(math.max(zoom, this.options.zoomMin), this.options.zoomMax);\n            },\n            _panTransform: function (pos) {\n                var diagram = this,\n                    pan = pos || diagram._pan;\n\n                if (diagram.canvas.translate) {\n                    diagram.scroller.scrollTo(pan.x, pan.y);\n                    diagram._zoomMainLayer();\n                } else {\n                    diagram._storePan(pan);\n                    diagram._transformMainLayer();\n                }\n            },\n\n            _finishPan: function () {\n                this.trigger(PAN, {total: this._pan, delta: Number.NaN});\n            },\n            _storePan: function (pan) {\n                this._pan = pan;\n                this._storeViewMatrix();\n            },\n            _zoomMainLayer: function () {\n                var zoom = this._zoom;\n\n                var transform = new CompositeTransform(0, 0, zoom, zoom);\n                transform.render(this.mainLayer);\n                this._storeLayerMatrix(transform);\n                this._storeViewMatrix();\n            },\n            _transformMainLayer: function () {\n                var pan = this._pan,\n                    zoom = this._zoom;\n\n                var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n                transform.render(this.mainLayer);\n                this._storeLayerMatrix(transform);\n                this._storeViewMatrix();\n            },\n            _storeLayerMatrix: function(canvasTransform) {\n                this._layerMatrix = canvasTransform.toMatrix();\n                this._layerMatrixInvert = canvasTransform.invert().toMatrix();\n            },\n            _storeViewMatrix: function() {\n                var pan = this._pan,\n                    zoom = this._zoom;\n\n                var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n                this._matrix = transform.toMatrix();\n                this._matrixInvert = transform.invert().toMatrix();\n            },\n            _toIndex: function (items, indices) {\n                var result = this._getDiagramItems(items);\n                this.mainLayer.toIndex(result.visuals, indices);\n                this._fixOrdering(result, false);\n            },\n            _fixOrdering: function (result, toFront) {\n                var shapePos = toFront ? this.shapes.length - 1 : 0,\n                    conPos = toFront ? this.connections.length - 1 : 0,\n                    i, item;\n                for (i = 0; i < result.shapes.length; i++) {\n                    item = result.shapes[i];\n                    Utils.remove(this.shapes, item);\n                    Utils.insert(this.shapes, item, shapePos);\n                }\n                for (i = 0; i < result.cons.length; i++) {\n                    item = result.cons[i];\n                    Utils.remove(this.connections, item);\n                    Utils.insert(this.connections, item, conPos);\n                }\n            },\n            _getDiagramItems: function (items) {\n                var i, result = {}, args = items;\n                result.visuals = [];\n                result.shapes = [];\n                result.cons = [];\n\n                if (!items) {\n                    args = this._selectedItems.slice();\n                } else if (!isArray(items)) {\n                    args = [items];\n                }\n\n                for (i = 0; i < args.length; i++) {\n                    var item = args[i];\n                    if (item instanceof Shape) {\n                        result.shapes.push(item);\n                        result.visuals.push(item.visual);\n                    } else if (item instanceof Connection) {\n                        result.cons.push(item);\n                        result.visuals.push(item.visual);\n                    }\n                }\n\n                return result;\n            },\n\n            _removeItem: function (item, undoable, removedConnections) {\n                item.select(false);\n                if (item instanceof Shape) {\n                    this._removeShapeDataItem(item);\n                    this._removeShape(item, undoable, removedConnections);\n                } else if (item instanceof Connection) {\n                    this._removeConnectionDataItem(item);\n                    this._removeConnection(item, undoable);\n                }\n\n                this.mainLayer.remove(item.visual);\n            },\n\n            _removeShape: function (shape, undoable, removedConnections) {\n                var i, connection, connector,\n                    sources = [], targets = [];\n                this.toolService._removeHover();\n\n                if (undoable) {\n                    this.undoRedoService.addCompositeItem(new DeleteShapeUnit(shape));\n                }\n                Utils.remove(this.shapes, shape);\n\n                for (i = 0; i < shape.connectors.length; i++) {\n                    connector = shape.connectors[i];\n                    for (var j = 0; j < connector.connections.length; j++) {\n                        connection = connector.connections[j];\n                        if (!removedConnections || !dataviz.inArray(connection, removedConnections)) {\n                            if (connection.sourceConnector == connector) {\n                                sources.push(connection);\n                            } else if (connection.targetConnector == connector) {\n                                targets.push(connection);\n                            }\n                        }\n                    }\n                }\n\n                for (i = 0; i < sources.length; i++) {\n                    sources[i].source(null, undoable);\n                    sources[i].updateModel();\n                }\n                for (i = 0; i < targets.length; i++) {\n                    targets[i].target(null, undoable);\n                    targets[i].updateModel();\n                }\n            },\n\n            _removeConnection: function (connection, undoable) {\n                if (connection.sourceConnector) {\n                    Utils.remove(connection.sourceConnector.connections, connection);\n                }\n                if (connection.targetConnector) {\n                    Utils.remove(connection.targetConnector.connections, connection);\n                }\n                if (undoable) {\n                    this.undoRedoService.addCompositeItem(new DeleteConnectionUnit(connection));\n                }\n\n                Utils.remove(this.connections, connection);\n            },\n\n            _removeDataItems: function(items, recursive) {\n                var item, children, shape, idx;\n                items = isArray(items) ? items : [items];\n\n                while (items.length) {\n                    item = items.shift();\n                    shape = this._dataMap[item.uid];\n                    if (shape) {\n                        this._removeShapeConnections(shape);\n                        this._removeItem(shape, false);\n                        delete this._dataMap[item.uid];\n                        if (recursive && item.hasChildren && item.loaded()) {\n                            children = item.children.data();\n                            for (idx = 0; idx < children.length; idx++) {\n                                items.push(children[idx]);\n                            }\n                        }\n                    }\n                }\n            },\n\n            _removeShapeConnections: function(shape) {\n                var connections = shape.connections();\n                var idx;\n\n                if (connections) {\n                    for (idx = 0; idx < connections.length; idx++) {\n                        this._removeItem(connections[idx], false);\n                    }\n                }\n            },\n\n            _addDataItem: function(dataItem, undoable) {\n                if (!defined(dataItem)) {\n                    return;\n                }\n\n                var shape = this._dataMap[dataItem.id];\n                if (shape) {\n                    return shape;\n                }\n\n                var options = deepExtend({}, this.options.shapeDefaults);\n                options.dataItem = dataItem;\n                shape = new Shape(options, this);\n                this.addShape(shape, { undoable: undoable !== false });\n                this._dataMap[dataItem.id] = shape;\n                return shape;\n            },\n\n            _addDataItemByUid: function(dataItem) {\n                if (!defined(dataItem)) {\n                    return;\n                }\n\n                var shape = this._dataMap[dataItem.uid];\n                if (shape) {\n                    return shape;\n                }\n\n                var options = deepExtend({}, this.options.shapeDefaults);\n                options.dataItem = dataItem;\n                shape = new Shape(options, this);\n                this.addShape(shape);\n                this._dataMap[dataItem.uid] = shape;\n                return shape;\n            },\n\n            _addDataItems: function(items, parent) {\n                var item, idx, shape, parentShape, connection;\n                for (idx = 0; idx < items.length; idx++) {\n                    item = items[idx];\n                    shape = this._addDataItemByUid(item);\n                    parentShape = this._addDataItemByUid(parent);\n                    if (parentShape && !this.connected(parentShape, shape)) { // check if connected to not duplicate connections.\n                        connection = this.connect(parentShape, shape);\n                        connection.type(CASCADING);\n                    }\n                }\n            },\n\n            _refreshSource: function (e) {\n                var that = this,\n                    node = e.node,\n                    action = e.action,\n                    items = e.items,\n                    options = that.options,\n                    idx;\n\n                if (e.field) {\n                    return;\n                }\n\n                if (action == \"remove\") {\n                    this._removeDataItems(e.items, true);\n                } else {\n                    if (!action && !node) {\n                         that.clear();\n                    }\n\n                    this._addDataItems(items, node);\n\n                    for (idx = 0; idx < items.length; idx++) {\n                        items[idx].load();\n                    }\n                }\n\n                if (options.layout) {\n                    that.layout(options.layout);\n                }\n            },\n\n            _mouseDown: function (e) {\n                var p = this._calculatePosition(e);\n                if (e.which == 1 && this.toolService.start(p, this._meta(e))) {\n                    this._destroyToolBar();\n                    e.preventDefault();\n                }\n            },\n\n            _addItem: function (item) {\n                if (item instanceof Shape) {\n                    this.addShape(item);\n                } else if (item instanceof Connection) {\n                    this.addConnection(item);\n                }\n            },\n\n            _mouseUp: function (e) {\n                var p = this._calculatePosition(e);\n                if (e.which == 1 && this.toolService.end(p, this._meta(e))) {\n                    this._createToolBar();\n                    e.preventDefault();\n                }\n            },\n\n            _createToolBar: function() {\n                var diagram = this.toolService.diagram;\n\n                if (!this.singleToolBar && diagram.select().length === 1) {\n                    var element = diagram.select()[0];\n                    if (element) {\n                        var tools = element.options.editable.tools;\n                        if (this._isEditable && tools.length === 0) {\n                            if (element instanceof Shape) {\n                                tools = [\"edit\", \"rotateClockwise\", \"rotateAnticlockwise\", \"delete\"];\n                            } else if (element instanceof Connection) {\n                                tools = [\"edit\", \"delete\"];\n                            }\n                        }\n\n                        if (tools && tools.length) {\n                            var padding = 20;\n                            var point;\n                            this.singleToolBar = new DiagramToolBar(diagram, {\n                                tools: tools,\n                                click: proxy(this._toolBarClick, this),\n                                modal: true\n                            });\n                            var toolBarElement = this.singleToolBar.element;\n                            var popupWidth = this.singleToolBar._popup.element.outerWidth();\n                            var popupHeight = this.singleToolBar._popup.element.outerHeight();\n                            if (element instanceof Shape) {\n                                var shapeBounds = this.modelToView(element.bounds(ROTATED));\n                                point = Point(shapeBounds.x, shapeBounds.y).minus(Point(\n                                    (popupWidth - shapeBounds.width) / 2,\n                                    popupHeight + padding));\n                            } else if (element instanceof Connection) {\n                                var connectionBounds = this.modelToView(element.bounds());\n\n                                point = Point(connectionBounds.x, connectionBounds.y)\n                                    .minus(Point(\n                                        (popupWidth - connectionBounds.width - 20) / 2,\n                                        popupHeight + padding\n                                    ));\n                            }\n\n                            if (point) {\n                                if (!this.canvas.translate) {\n                                    point = point.minus(Point(this.scroller.scrollLeft, this.scroller.scrollTop));\n                                }\n                                point = this.viewToDocument(point);\n                                point = Point(math.max(point.x, 0), math.max(point.y, 0));\n                                this.singleToolBar.showAt(point);\n                            } else {\n                                this._destroyToolBar();\n                            }\n                        }\n                    }\n                }\n            },\n\n            _toolBarClick: function(e) {\n                this.trigger(\"toolBarClick\", e);\n                this._destroyToolBar();\n            },\n\n            _mouseMove: function (e) {\n                if (this.pauseMouseHandlers) {\n                    return;\n                }\n                var p = this._calculatePosition(e);\n                if ((e.which === 0 || e.which == 1)&& this.toolService.move(p, this._meta(e))) {\n                    e.preventDefault();\n                }\n            },\n\n            _keydown: function (e) {\n                if (this.toolService.keyDown(e.keyCode, this._meta(e))) {\n                    e.preventDefault();\n                }\n            },\n\n            _wheel: function (e) {\n                var delta = mwDelta(e),\n                    p = this._calculatePosition(e),\n                    meta = deepExtend(this._meta(e), { delta: delta });\n\n                if (this.toolService.wheel(p, meta)) {\n                    e.preventDefault();\n                }\n            },\n\n            _meta: function (e) {\n                return { ctrlKey: e.ctrlKey, metaKey: e.metaKey, altKey: e.altKey, shiftKey: e.shiftKey };\n            },\n\n            _calculatePosition: function (e) {\n                var pointEvent = (e.pageX === undefined ? e.originalEvent : e),\n                    point = new Point(pointEvent.pageX, pointEvent.pageY),\n                    offset = this.documentToModel(point);\n\n                return offset;\n            },\n\n            _normalizePointZoom: function (point) {\n                return point.times(1 / this.zoom());\n            },\n\n            _initialize: function () {\n                this.shapes = [];\n                this._selectedItems = [];\n                this.connections = [];\n                this._dataMap = {};\n                this._connectionsDataMap = {};\n                this._inactiveShapeItems = new InactiveItemsCollection();\n                this._deferredConnectionUpdates = [];\n                this.undoRedoService = new UndoRedoService({\n                    undone: this._syncHandler,\n                    redone: this._syncHandler\n                });\n                this.id = diagram.randomId();\n            },\n\n            _fetchFreshData: function () {\n                var that = this;\n                that._dataSource();\n\n                if (that._isEditable) {\n                    that._connectionDataSource();\n                }\n\n                if (that.options.autoBind) {\n                    if (that._isEditable) {\n                        that._preventRefresh = true;\n                        that._preventConnectionsRefresh = true;\n\n                        var promises = $.map([\n                            that.dataSource,\n                            that.connectionsDataSource\n                        ],\n                        function(dataSource) {\n                            return dataSource.fetch();\n                        });\n\n                        $.when.apply(null, promises)\n                            .done(function() {\n                                that._preventRefresh = false;\n                                that._preventConnectionsRefresh = false;\n                                that.refresh();\n                            });\n                    } else {\n                        that.dataSource.fetch();\n                    }\n                }\n            },\n\n            _dataSource: function() {\n                if (defined(this.options.connectionsDataSource)) {\n                    this._isEditable = true;\n                    var dsOptions = this.options.dataSource || {};\n                    var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n\n                    if (this.dataSource && this._shapesRefreshHandler) {\n                        this.dataSource\n                            .unbind(\"change\", this._shapesRefreshHandler)\n                            .unbind(\"error\", this._shapesErrorHandler);\n                    } else {\n                        this._shapesRefreshHandler = proxy(this._refreshShapes, this);\n                        this._shapesErrorHandler = proxy(this._error, this);\n                    }\n\n                    this.dataSource = kendo.data.DataSource.create(ds)\n                        .bind(\"change\", this._shapesRefreshHandler)\n                        .bind(\"error\", this._shapesErrorHandler);\n                } else {\n                    this._treeDataSource();\n                    this._isEditable = false;\n                }\n            },\n\n            _connectionDataSource: function() {\n                var dsOptions = this.options.connectionsDataSource;\n                if (dsOptions) {\n                    var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n\n                    if (this.connectionsDataSource && this._connectionsRefreshHandler) {\n                        this.connectionsDataSource\n                            .unbind(\"change\", this._connectionsRefreshHandler)\n                            .unbind(\"error\", this._connectionsErrorHandler);\n                    } else {\n                        this._connectionsRefreshHandler = proxy(this._refreshConnections, this);\n                        this._connectionsErrorHandler = proxy(this._error, this);\n                    }\n\n                    this.connectionsDataSource = kendo.data.DataSource.create(ds)\n                        .bind(\"change\", this._connectionsRefreshHandler)\n                        .bind(\"error\", this._connectionsErrorHandler);\n                }\n            },\n\n            _refreshShapes: function(e) {\n                if (e.action === \"remove\") {\n                    if (this._shouldRefresh()) {\n                        this._removeShapes(e.items);\n                    }\n                } else if (e.action === \"itemchange\") {\n                    if (this._shouldRefresh()) {\n                        this._updateShapes(e.items, e.field);\n                    }\n                } else if (e.action === \"add\") {\n                    this._inactiveShapeItems.add(e.items);\n                } else if (e.action === \"sync\") {\n                    this._syncShapes(e.items);\n                } else {\n                    this.refresh();\n                }\n            },\n\n            _shouldRefresh: function() {\n                return !this._suspended;\n            },\n\n            _suspendModelRefresh: function() {\n                this._suspended = (this._suspended || 0) + 1;\n            },\n\n            _resumeModelRefresh: function() {\n                this._suspended = math.max((this._suspended || 0) - 1, 0);\n            },\n\n            refresh: function() {\n                if (this._preventRefresh) {\n                    return;\n                }\n\n                this.trigger(\"dataBound\");\n                this.clear();\n                this._addShapes(this.dataSource.view());\n                if (this.connectionsDataSource) {\n                    this._addConnections(this.connectionsDataSource.view(), false);\n                }\n\n                if (this.options.layout) {\n                    this.layout(this.options.layout);\n                }\n            },\n\n            refreshConnections: function() {\n                if (this._preventConnectionsRefresh) {\n                    return;\n                }\n\n                this.trigger(\"dataBound\");\n\n                this._addConnections(this.connectionsDataSource.view(), false);\n\n                if (this.options.layout) {\n                    this.layout(this.options.layout);\n                }\n            },\n\n            _removeShapes: function(items) {\n                var dataMap = this._dataMap;\n                var item, i;\n                for (i = 0; i < items.length; i++) {\n                    item = items[i];\n                    if (dataMap[item.id]) {\n                        this.remove(dataMap[item.id], false);\n                        dataMap[item.id] = null;\n                    }\n                }\n            },\n\n            _syncShapes: function(items) {\n                var diagram = this;\n                var inactiveItems = diagram._inactiveShapeItems;\n                inactiveItems.forEach(function(inactiveItem) {\n                    var dataItem = inactiveItem.dataItem;\n                    if (!dataItem.isNew()) {\n                        diagram._addDataItem(dataItem);\n                        inactiveItem.activate();\n                        inactiveItems.remove(dataItem);\n                    }\n                });\n            },\n\n            _updateShapes: function(items, field) {\n                for (var i = 0; i < items.length; i++) {\n                    var dataItem = items[i];\n\n                    var shape = this._dataMap[dataItem.id];\n                    if (shape) {\n                        shape.updateOptionsFromModel(dataItem, field);\n                    }\n                }\n            },\n\n            _addShapes: function(dataItems) {\n                for (var i = 0; i < dataItems.length; i++) {\n                    this._addDataItem(dataItems[i], false);\n                }\n            },\n\n            _refreshConnections: function(e) {\n                if (e.action === \"remove\") {\n                    if (this._shouldRefresh()) {\n                        this._removeConnections(e.items);\n                    }\n                } else if (e.action === \"add\") {\n                    this._addConnections(e.items);\n                } else if (e.action === \"sync\") {\n                    //TO DO: include logic to update the connections with different values returned from the server.\n                } else if (e.action === \"itemchange\") {\n                    if (this._shouldRefresh()) {\n                        this._updateConnections(e.items);\n                    }\n                } else {\n                    this.refreshConnections();\n                }\n            },\n\n            _removeConnections: function(items) {\n                for (var i = 0; i < items.length; i++) {\n                    this.remove(this._connectionsDataMap[items[i].uid], false);\n                    this._connectionsDataMap[items[i].uid] = null;\n                }\n            },\n\n            _updateConnections: function(items) {\n                for (var i = 0; i < items.length; i++) {\n                    var dataItem = items[i];\n\n                    var connection = this._connectionsDataMap[dataItem.uid];\n                    connection.updateOptionsFromModel(dataItem);\n\n                    var from = this._validateConnector(dataItem.from);\n                    if (from) {\n                        connection.source(from);\n                    }\n\n                    var to = this._validateConnector(dataItem.to);\n                    if (to) {\n                        connection.target(to);\n                    }\n                }\n            },\n\n            _addConnections: function(connections, undoable) {\n                var length = connections.length;\n\n                for (var i = 0; i < length; i++) {\n                    var dataItem = connections[i];\n                    this._addConnectionDataItem(dataItem, undoable);\n                }\n            },\n\n            _addConnectionDataItem: function(dataItem, undoable) {\n                if (!this._connectionsDataMap[dataItem.uid]) {\n                    var from = this._validateConnector(dataItem.from);\n                    if (!defined(from) || from === null) {\n                        from = new Point(dataItem.fromX, dataItem.fromY);\n                    }\n\n                    var to = this._validateConnector(dataItem.to);\n                    if (!defined(to) || to === null) {\n                        to = new Point(dataItem.toX, dataItem.toY);\n                    }\n\n                    if (defined(from) && defined(to)) {\n                        var options = deepExtend({}, this.options.connectionDefaults);\n                        options.dataItem = dataItem;\n                        var connection = new Connection(from, to, options);\n                        connection.type(options.type || CASCADING);\n                        this._connectionsDataMap[dataItem.uid] = connection;\n                        this.addConnection(connection, undoable);\n                    }\n                }\n            },\n\n            _validateConnector: function(value) {\n                var connector;\n\n                if (defined(value) && value !== null) {\n                    connector = this._dataMap[value];\n                }\n\n                return connector;\n            },\n\n            _treeDataSource: function () {\n                var that = this,\n                    options = that.options,\n                    dataSource = options.dataSource;\n\n                dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n                if (!dataSource.fields) {\n                    dataSource.fields = [\n                        { field: \"text\" },\n                        { field: \"url\" },\n                        { field: \"spriteCssClass\" },\n                        { field: \"imageUrl\" }\n                    ];\n                }\n                if (that.dataSource && that._refreshHandler) {\n                    that._unbindDataSource();\n                }\n\n                that._refreshHandler = proxy(that._refreshSource, that);\n                that._errorHandler = proxy(that._error, that);\n\n                that.dataSource = HierarchicalDataSource.create(dataSource)\n                    .bind(CHANGE, that._refreshHandler)\n                    .bind(ERROR, that._errorHandler);\n            },\n\n            _unbindDataSource: function () {\n                var that = this;\n\n                that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(ERROR, that._errorHandler);\n            },\n            _error: function () {\n            },\n            _adorn: function (adorner, isActive) {\n                if (isActive !== undefined && adorner) {\n                    if (isActive) {\n                        this._adorners.push(adorner);\n                        this.adornerLayer.append(adorner.visual);\n                    }\n                    else {\n                        Utils.remove(this._adorners, adorner);\n                        this.adornerLayer.remove(adorner.visual);\n                    }\n                }\n            },\n\n            _showConnectors: function (shape, value) {\n                if (value) {\n                    this._connectorsAdorner.show(shape);\n                } else {\n                    this._connectorsAdorner.destroy();\n                }\n            },\n\n            _updateAdorners: function() {\n                var adorners = this._adorners;\n\n                for(var i = 0; i < adorners.length; i++) {\n                    var adorner = adorners[i];\n\n                    if (adorner.refreshBounds) {\n                        adorner.refreshBounds();\n                    }\n                    adorner.refresh();\n                }\n            },\n\n            _refresh: function () {\n                for (var i = 0; i < this.connections.length; i++) {\n                    this.connections[i].refresh();\n                }\n            },\n\n            _destroyToolBar: function() {\n                if (this.singleToolBar) {\n                    this.singleToolBar.hide();\n                    this.singleToolBar.destroy();\n                    this.singleToolBar = null;\n                }\n            },\n\n            _destroyGlobalToolBar: function() {\n                if (this.toolBar) {\n                    this.toolBar.hide();\n                    this.toolBar.destroy();\n                    this.toolBar = null;\n                }\n            },\n\n            exportDOMVisual: function() {\n                var viewBox = this.canvas._viewBox;\n                var scrollOffset = geom.transform().translate(\n                    -viewBox.x, -viewBox.y\n                );\n\n                var viewRect = new geom.Rect(\n                    [0, 0], [viewBox.width, viewBox.height]\n                );\n                var clipPath = draw.Path.fromRect(viewRect);\n\n                var wrap = new draw.Group({\n                    transform: scrollOffset,\n                    clip: clipPath\n                });\n\n                var root = this.canvas.drawingElement.children[0];\n                wrap.children.push(root);\n                return wrap;\n            },\n\n            exportVisual: function() {\n                var scale = geom.transform().scale(1 / this._zoom);\n                var wrap = new draw.Group({\n                    transform: scale\n                });\n\n                var root = this.canvas.drawingElement.children[0];\n                wrap.children.push(root);\n\n                return wrap;\n            },\n\n            _syncChanges: function() {\n                this._syncShapeChanges();\n                this._syncConnectionChanges();\n            },\n\n            _syncShapeChanges: function() {\n                if (this.dataSource && this._isEditable) {\n                    this.dataSource.sync();\n                }\n            },\n\n            _syncConnectionChanges: function() {\n                var that = this;\n                if (that.connectionsDataSource && that._isEditable) {\n                    $.when.apply($, that._deferredConnectionUpdates).then(function() {\n                        that.connectionsDataSource.sync();\n                    });\n                    that.deferredConnectionUpdates = [];\n                }\n            }\n        });\n\n        dataviz.ExportMixin.extend(Diagram.fn, true);\n\n        if (kendo.PDFMixin) {\n            kendo.PDFMixin.extend(Diagram.fn);\n        }\n\n        function filterShapeDataItem(dataItem) {\n            var result = {};\n\n            dataItem = dataItem || {};\n\n            if (defined(dataItem.text) && dataItem.text !== null) {\n                result.text = dataItem.text;\n            }\n\n            if (defined(dataItem.x) && dataItem.x !== null) {\n                result.x = dataItem.x;\n            }\n\n            if (defined(dataItem.y) && dataItem.y !== null) {\n                result.y = dataItem.y;\n            }\n\n            if (defined(dataItem.width) && dataItem.width !== null) {\n                result.width = dataItem.width;\n            }\n\n            if (defined(dataItem.height) && dataItem.height !== null) {\n                result.height = dataItem.height;\n            }\n\n            if (defined(dataItem.type) && dataItem.type !== null) {\n                result.type = dataItem.type;\n            }\n\n            return result;\n        }\n\n        function filterConnectionDataItem(dataItem) {\n            var result = {};\n\n            dataItem = dataItem || {};\n\n            if (defined(dataItem.text) && dataItem.text !== null) {\n                result.content = dataItem.text;\n            }\n\n            if (defined(dataItem.type) && dataItem.type !== null) {\n                result.type = dataItem.type;\n            }\n\n            if (defined(dataItem.from) && dataItem.from !== null) {\n                result.from = dataItem.from;\n            }\n\n            if (defined(dataItem.fromX) && dataItem.fromX !== null) {\n                result.fromX = dataItem.fromX;\n            }\n\n            if (defined(dataItem.fromY) && dataItem.fromY !== null) {\n                result.fromY = dataItem.fromY;\n            }\n\n            if (defined(dataItem.to) && dataItem.to !== null) {\n                result.to = dataItem.to;\n            }\n\n            if (defined(dataItem.toX) && dataItem.toX !== null) {\n                result.toX = dataItem.toX;\n            }\n\n            if (defined(dataItem.toY) && dataItem.toY !== null) {\n                result.toY = dataItem.toY;\n            }\n\n            return result;\n        }\n\n        function isNumber(val) {\n            return typeof val === \"number\" && !isNaN(val);\n        }\n\n        var DiagramToolBar = kendo.Observable.extend({\n            init: function(diagram, options) {\n                kendo.Observable.fn.init.call(this);\n                this.diagram = diagram;\n                this.options = deepExtend({}, this.options, options);\n                this._tools = [];\n                this.createToolBar();\n                this.createTools();\n                this.appendTools();\n\n                if (this.options.modal) {\n                    this.createPopup();\n                }\n\n                this.bind(this.events, options);\n            },\n\n            events: [\"click\"],\n\n            createPopup: function() {\n                this.container = $(\"<div/>\").append(this.element);\n                this._popup = this.container.kendoPopup({}).getKendoPopup();\n            },\n\n            appendTools: function() {\n                for (var i = 0; i < this._tools.length; i++) {\n                    var tool = this._tools[i];\n                    if (tool.buttons && tool.buttons.length || !defined(tool.buttons)) {\n                        this._toolBar.add(tool);\n                    }\n                }\n            },\n\n            createToolBar: function() {\n                this.element = $(\"<div/>\");\n                this._toolBar = this.element\n                    .kendoToolBar({\n                        click: proxy(this.click, this),\n                        resizable: false\n                    }).getKendoToolBar();\n\n                this.element.css(\"border\", \"none\");\n            },\n\n            createTools: function() {\n                for (var i = 0; i < this.options.tools.length; i++) {\n                    this.createTool(this.options.tools[i]);\n                }\n            },\n\n            createTool: function(tool) {\n                var toolName;\n                if (isPlainObject(tool)) {\n                    if (tool.name) {\n                        toolName = tool.name + \"Tool\";\n                        if (this[toolName]) {\n                            this[toolName](tool);\n                        }\n                    } else if (tool.template) {\n                        this._toolBar.add({\n                            template: tool.template\n                        });\n                    }\n                } else {\n                    toolName = tool + \"Tool\";\n                    if (this[toolName]) {\n                        this[toolName]({});\n                    }\n                }\n            },\n\n            showAt: function(point) {\n                if (this._popup) {\n                    this._popup.open(point.x, point.y);\n                }\n            },\n\n            hide: function() {\n                if (this._popup) {\n                    this._popup.close();\n                }\n            },\n\n            newGroup: function() {\n                return {\n                    type: \"buttonGroup\",\n                    buttons: []\n                };\n            },\n\n            editTool: function() {\n                this._tools.push({\n                    spriteCssClass: \"k-icon k-i-pencil\",\n                    showText: \"overflow\",\n                    type: \"button\",\n                    text: \"Edit\",\n                    attributes: this._setAttributes({ action: \"edit\" })\n                });\n            },\n\n            deleteTool: function() {\n                this._tools.push({\n                    spriteCssClass: \"k-icon k-i-close\",\n                    showText: \"overflow\",\n                    type: \"button\",\n                    text: \"Delete\",\n                    attributes: this._setAttributes({ action: \"delete\" })\n                });\n            },\n\n            rotateAnticlockwiseTool: function(options) {\n                this._appendGroup(\"rotate\");\n                this._rotateGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-rotateccw\",\n                    showText: \"overflow\",\n                    text: \"RotateAnticlockwise\",\n                    group: \"rotate\",\n                    attributes: this._setAttributes({ action: \"rotateAnticlockwise\", step: options.step })\n                });\n            },\n\n            rotateClockwiseTool: function(options) {\n                this._appendGroup(\"rotate\");\n                this._rotateGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-rotatecw\",\n                    attributes: this._setAttributes({ action: \"rotateClockwise\", step: options.step }),\n                    showText: \"overflow\",\n                    text: \"RotateClockwise\",\n                    group: \"rotate\"\n                });\n            },\n\n            createShapeTool: function() {\n                this._appendGroup(\"create\");\n                this._createGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-shape\",\n                    showText: \"overflow\",\n                    text: \"CreateShape\",\n                    group: \"create\",\n                    attributes: this._setAttributes({ action: \"createShape\" })\n                });\n            },\n\n            createConnectionTool: function() {\n                this._appendGroup(\"create\");\n                this._createGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-connector\",\n                    showText: \"overflow\",\n                    text: \"CreateConnection\",\n                    group: \"create\",\n                    attributes: this._setAttributes({ action: \"createConnection\" })\n                });\n            },\n\n            undoTool: function() {\n                this._appendGroup(\"history\");\n                this._historyGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-undo\",\n                    showText: \"overflow\",\n                    text: \"Undo\",\n                    group: \"history\",\n                    attributes: this._setAttributes({ action: \"undo\" })\n                });\n            },\n\n            redoTool: function() {\n                this._appendGroup(\"history\");\n                this._historyGroup.buttons.push({\n                    spriteCssClass: \"k-icon k-i-redo\",\n                    showText: \"overflow\",\n                    text: \"Redo\",\n                    group: \"history\",\n                    attributes: this._setAttributes({ action: \"redo\" })\n                });\n            },\n\n            _appendGroup: function(name) {\n                var prop = \"_\" + name + \"Group\";\n                if (!this[prop]) {\n                    this[prop] = this.newGroup();\n                    this._tools.push(this[prop]);\n                }\n            },\n\n            _setAttributes: function(attributes) {\n                var attr = {};\n\n                if (attributes.action) {\n                    attr[kendo.attr(\"action\")] = attributes.action;\n                }\n\n                if (attributes.step) {\n                    attr[kendo.attr(\"step\")] = attributes.step;\n                }\n\n                return attr;\n            },\n\n            _getAttributes: function(element) {\n                var attr = {};\n\n                var action = element.attr(kendo.attr(\"action\"));\n                if (action) {\n                    attr.action = action;\n                }\n\n                var step = element.attr(kendo.attr(\"step\"));\n                if (step) {\n                    attr.step = step;\n                }\n\n                return attr;\n            },\n\n            click: function(e) {\n                var attributes = this._getAttributes($(e.target));\n                var action = attributes.action;\n\n                if (action) {\n                    this[action](attributes);\n                }\n\n                this.trigger(\"click\", this.eventData(action));\n            },\n\n            eventData: function(action) {\n                var element = this.selectedElements(),\n                    shapes = [], connections = [];\n\n                if (element instanceof Shape) {\n                    shapes.push(element);\n                } else {\n                    connections.push(element);\n                }\n\n                return {\n                    shapes: shapes,\n                    connections: connections,\n                    action: action\n                };\n            },\n\n            \"delete\": function() {\n                var diagram = this.diagram;\n                var toRemove = diagram._triggerRemove(this.selectedElements());\n                if (toRemove.length) {\n                    this.diagram.remove(toRemove, true);\n                    this.diagram._syncChanges();\n                }\n            },\n\n            edit: function() {\n                this.diagram.edit(this.selectedElements()[0]);\n            },\n\n            rotateClockwise: function(options) {\n                var elements = this.selectedElements();\n                var angle = parseFloat(options.step || 90);\n                this._rotate(angle);\n            },\n\n            rotateAnticlockwise: function(options) {\n                var elements = this.selectedElements();\n                var angle = parseFloat(options.step || 90);\n                this._rotate(-angle);\n            },\n\n            _rotate: function(angle) {\n                var adorner = this.diagram._resizingAdorner;\n                adorner.angle(adorner.angle() + angle);\n                adorner.rotate();\n            },\n\n            selectedElements: function() {\n                return this.diagram.select();\n            },\n\n            createShape: function() {\n                this.diagram.createShape();\n            },\n\n            createConnection: function() {\n                this.diagram.createConnection();\n            },\n\n            undo: function() {\n                this.diagram.undo();\n            },\n\n            redo: function() {\n                this.diagram.redo();\n            },\n\n            destroy: function() {\n                this.diagram = null;\n                this.element = null;\n                this.options = null;\n\n                if (this._toolBar) {\n                    this._toolBar.destroy();\n                }\n\n                if (this._popup) {\n                    this._popup.destroy();\n                }\n            }\n        });\n\n        var Editor = kendo.Observable.extend({\n            init: function(element, options) {\n                kendo.Observable.fn.init.call(this);\n\n                this.options = extend(true, {}, this.options, options);\n                this.element = element;\n                this.model = this.options.model;\n                this.fields = this._getFields();\n                this._initContainer();\n                this.createEditable();\n            },\n\n            options: {\n                editors: {}\n            },\n\n            _initContainer: function() {\n                this.wrapper = this.element;\n            },\n\n            createEditable: function() {\n                var options = this.options;\n\n                this.editable = new kendo.ui.Editable(this.wrapper, {\n                    fields: this.fields,\n                    target: options.target,\n                    clearContainer: false,\n                    model: this.model\n                });\n            },\n\n            _isEditable: function(field) {\n                return this.model.editable && this.model.editable(field);\n            },\n\n            _getFields: function() {\n                var fields = [];\n                var modelFields = this.model.fields;\n\n                for (var field in modelFields) {\n                    var result = {};\n                    if (this._isEditable(field)) {\n                        var editor = this.options.editors[field];\n                        if (editor) {\n                            result.editor = editor;\n                        }\n                        result.field = field;\n                        fields.push(result);\n                    }\n                }\n\n                return fields;\n            },\n\n            end: function() {\n                return this.editable.end();\n            },\n\n            destroy: function() {\n                this.editable.destroy();\n                this.editable.element.find(\"[\" + kendo.attr(\"container-for\") + \"]\").empty();\n                this.model = this.wrapper = this.element = this.columns = this.editable = null;\n            }\n        });\n\n        var PopupEditor = Editor.extend({\n            init: function(element, options) {\n                Editor.fn.init.call(this, element, options);\n                this.bind(this.events, this.options);\n\n                this.open();\n            },\n\n            events: [ \"update\", \"cancel\" ],\n\n            options: {\n                window: {\n                    modal: true,\n                    resizable: false,\n                    draggable: true,\n                    title: \"Edit\",\n                    visible: false\n                }\n            },\n\n            _initContainer: function() {\n                var that = this;\n                this.wrapper = $('<div class=\"k-popup-edit-form\"/>')\n                    .attr(kendo.attr(\"uid\"), this.model.uid);\n\n                var formContent = \"\";\n\n                if (this.options.template) {\n                    formContent += this._renderTemplate();\n                    this.fields = [];\n                } else {\n                    formContent += this._renderFields();\n                }\n\n                formContent += this._renderButtons();\n\n                this.wrapper.append(\n                    $('<div class=\"k-edit-form-container\"/>').append(formContent));\n\n                this.window = new kendo.ui.Window(this.wrapper, this.options.window);\n                this.window.bind(\"close\", function(e) {\n                    //The bellow line is required due to: draggable window in IE, change event will be triggered while the window is closing\n                    if (e.userTriggered) {\n                        e.sender.element.focus();\n                        that._cancelClick(e);\n                    }\n                });\n\n                this._attachButtonEvents();\n            },\n\n            _renderTemplate: function() {\n                var template = this.options.template;\n\n                if (typeof template === \"string\") {\n                    template = window.unescape(template);\n                }\n\n                template = kendo.template(template)(this.model);\n\n                return template;\n            },\n\n            _renderFields: function() {\n                var form = \"\";\n                for (var i = 0; i < this.fields.length; i++) {\n                    var field = this.fields[i];\n\n                    form += '<div class=\"k-edit-label\"><label for=\"' + field.field + '\">' + (field.field || \"\") + '</label></div>';\n\n                    if (this._isEditable(field.field)) {\n                        form += '<div ' + kendo.attr(\"container-for\") + '=\"' + field.field +\n                        '\" class=\"k-edit-field\"></div>';\n                    }\n                }\n\n                return form;\n            },\n\n            _renderButtons: function() {\n                var form = '<div class=\"k-edit-buttons k-state-default\">';\n                form += this._createButton(\"update\");\n                form += this._createButton(\"cancel\");\n                form += '</div>';\n                return form;\n            },\n\n            _createButton: function(name) {\n                return kendo.template(BUTTON_TEMPLATE)(defaultButtons[name]);\n            },\n\n            _attachButtonEvents: function() {\n                this._cancelClickHandler = proxy(this._cancelClick, this);\n                this.window.element.on(CLICK + NS, \"a.k-diagram-cancel\", this._cancelClickHandler);\n\n                this._updateClickHandler = proxy(this._updateClick, this);\n                this.window.element.on(CLICK + NS, \"a.k-diagram-update\", this._updateClickHandler);\n            },\n\n            _updateClick: function(e) {\n                e.preventDefault();\n                this.trigger(\"update\");\n            },\n\n            _cancelClick: function (e) {\n                e.preventDefault();\n                this.trigger(\"cancel\");\n            },\n\n            open: function() {\n                this.window.center().open();\n            },\n\n            close: function() {\n                this.window.bind(\"deactivate\", proxy(this.destroy, this)).close();\n            },\n\n            destroy: function() {\n                this.window.close().destroy();\n                this.window.element.off(CLICK + NS, \"a.k-diagram-cancel\", this._cancelClickHandler);\n                this.window.element.off(CLICK + NS, \"a.k-diagram-update\", this._updateClickHandler);\n                this._cancelClickHandler = null;\n                this._editUpdateClickHandler = null;\n                this.window = null;\n                Editor.fn.destroy.call(this);\n            }\n        });\n\n        function connectionSelector(container, options) {\n            var type = options.model.fields[options.field];\n            var model = this.dataSource.reader.model;\n            if (model) {\n                var textField = model.fn.fields.text ? \"text\": model.idField;\n                $(\"<input name='\" + options.field + \"' />\")\n                    .appendTo(container).kendoDropDownList({\n                        dataValueField: model.idField,\n                        dataTextField: textField,\n                        dataSource: this.dataSource.data().toJSON(),\n                        optionLabel: \" \",\n                        valuePrimitive: true\n                    });\n            }\n        }\n\n        function InactiveItem(dataItem) {\n            this.dataItem = dataItem;\n            this.callbacks = [];\n        }\n\n        InactiveItem.fn = InactiveItem.prototype = {\n            onActivate: function(callback) {\n                var deffered = $.Deferred();\n                this.callbacks.push({\n                    callback: callback,\n                    deferred: deffered\n                });\n                return deffered;\n            },\n\n            activate: function() {\n                var callbacks = this.callbacks;\n                var item;\n                for (var idx = 0; idx < callbacks.length; idx++) {\n                    item = this.callbacks[idx];\n                    item.callback(this.dataItem);\n                    item.deferred.resolve();\n                }\n                this.callbacks = [];\n            }\n        };\n\n        function InactiveItemsCollection() {\n            this.items = {};\n        }\n\n        InactiveItemsCollection.fn = InactiveItemsCollection.prototype = {\n            add: function(items) {\n                for(var idx = 0; idx < items.length; idx++) {\n                    this.items[items[idx].uid] = new InactiveItem(items[idx]);\n                }\n            },\n\n            forEach: function(callback){\n                for (var uid in this.items) {\n                    callback(this.items[uid]);\n                }\n            },\n\n            getByUid: function(uid) {\n                return this.items[uid];\n            },\n\n            remove: function(item) {\n                delete this.items[item.uid];\n            }\n        };\n\n        function cloneDataItem(dataItem) {\n            var result = dataItem;\n            if (dataItem instanceof kendo.data.Model) {\n                result = dataItem.toJSON();\n                result[dataItem.idField] = dataItem._defaultId;\n            }\n            return result;\n        }\n\n        function splitDiagramElements(elements) {\n            var connections = [];\n            var shapes = [];\n            var element, idx;\n            for (idx = 0; idx < elements.length; idx++) {\n                element = elements[idx];\n                if (element instanceof Shape) {\n                    shapes.push(element);\n                } else {\n                    connections.push(element);\n                }\n            }\n            return {\n                shapes: shapes,\n                connections: connections\n            };\n        }\n\n        dataviz.ui.plugin(Diagram);\n\n        deepExtend(diagram, {\n            Shape: Shape,\n            Connection: Connection,\n            Connector: Connector,\n            DiagramToolBar: DiagramToolBar\n        });\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var math = Math,\n\n        proxy = $.proxy,\n\n        kendo = window.kendo,\n        Class = kendo.Class,\n        Widget = kendo.ui.Widget,\n        template = kendo.template,\n        deepExtend = kendo.deepExtend,\n        HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n        getter = kendo.getter,\n\n        dataviz = kendo.dataviz;\n\n    var NS = \".kendoTreeMap\",\n        CHANGE = \"change\",\n        DATA_BOUND = \"dataBound\",\n        ITEM_CREATED = \"itemCreated\",\n        MAX_VALUE = Number.MAX_VALUE,\n        MIN_VALUE = -Number.MAX_VALUE,\n        MOUSEOVER_NS = \"mouseover\" + NS,\n        MOUSELEAVE_NS = \"mouseleave\" + NS,\n        UNDEFINED = \"undefined\";\n\n    var TreeMap = Widget.extend({\n        init: function(element, options) {\n            kendo.destroy(element);\n            $(element).empty();\n\n            Widget.fn.init.call(this, element, options);\n\n            this._initTheme(this.options);\n\n            this.element.addClass(\"k-widget k-treemap\");\n\n            this._setLayout();\n\n            this._originalOptions = deepExtend({}, this.options);\n\n            this._initDataSource();\n\n            this._attachEvents();\n\n            kendo.notify(this, dataviz.ui);\n        },\n\n        options: {\n            name: \"TreeMap\",\n            theme: \"default\",\n            autoBind: true,\n            textField: \"text\",\n            valueField: \"value\",\n            colorField: \"color\"\n        },\n\n        events: [DATA_BOUND, ITEM_CREATED],\n\n        _initTheme: function(options) {\n            var that = this,\n                themes = dataviz.ui.themes || {},\n                themeName = ((options || {}).theme || \"\").toLowerCase(),\n                themeOptions = (themes[themeName] || {}).treeMap;\n\n            that.options = deepExtend({}, themeOptions, options);\n        },\n\n        _attachEvents: function() {\n            this.element\n                .on(MOUSEOVER_NS, proxy(this._mouseover, this))\n                .on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n        },\n\n        _setLayout: function() {\n            if (this.options.type === \"horizontal\") {\n                this._layout = new SliceAndDice(false);\n                this._view = new SliceAndDiceView(this, this.options);\n            } else if (this.options.type === \"vertical\") {\n                this._layout = new SliceAndDice(true);\n                this._view = new SliceAndDiceView(this, this.options);\n            } else {\n                this._layout = new Squarified();\n                this._view = new SquarifiedView(this, this.options);\n            }\n        },\n\n        _initDataSource: function() {\n            var that = this,\n                options = that.options,\n                dataSource = options.dataSource;\n\n            that._dataChangeHandler = proxy(that._onDataChange, that);\n\n            that.dataSource = HierarchicalDataSource\n                .create(dataSource)\n                .bind(CHANGE, that._dataChangeHandler);\n\n            if (dataSource) {\n                if (that.options.autoBind) {\n                    that.dataSource.fetch();\n                }\n            }\n        },\n\n        setDataSource: function(dataSource) {\n            var that = this;\n            that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n            that.dataSource = dataSource\n                    .bind(CHANGE, that._dataChangeHandler);\n\n            if (dataSource) {\n                if (that.options.autoBind) {\n                    that.dataSource.fetch();\n                }\n            }\n        },\n\n        _onDataChange: function(e) {\n            var node = e.node;\n            var items = e.items;\n            var options = this.options;\n            var item, i, colors;\n\n            if (!node) {\n                this.element.empty();\n                item = this._wrapItem(items[0]);\n                this._layout.createRoot(\n                    item,\n                    this.element.outerWidth(),\n                    this.element.outerHeight(),\n                    this.options.type === \"vertical\"\n                );\n                this._view.createRoot(item);\n                // Reference of the root\n                this._root = item;\n            } else {\n                if (items.length) {\n                    var root = this._getByUid(node.uid);\n                    root.children = [];\n\n                    if (!defined(root.minColor) && !defined(root.maxColor)) {\n                        colors = options.colors || [];\n                    } else {\n                        colors = colorsByLength(root.minColor, root.maxColor, items.length) || [];\n                    }\n\n                    for (i = 0; i < items.length; i++) {\n                        item = items[i];\n                        root.children.push(this._wrapItem(item));\n                    }\n\n                    var htmlSize = this._view.htmlSize(root);\n                    this._layout.compute(root.children, root.coord, htmlSize);\n\n                    for (i = 0; i < root.children.length; i++) {\n                        item = root.children[i];\n                        if (!defined(item.color)) {\n                            if (typeof(colors[0]) === \"string\") {\n                                item.color = colors[i % colors.length];\n                            } else {\n                                var currentColors = colors[i % colors.length];\n                                if (currentColors) {\n                                    item.color = currentColors[0];\n                                    item.minColor = currentColors[0];\n                                    item.maxColor = currentColors[1];\n                                }\n                            }\n                        }\n                    }\n\n                    this._view.render(root);\n                }\n            }\n\n            for (i = 0; i < items.length; i++) {\n                items[i].load();\n            }\n\n            if (node) {\n                this.trigger(DATA_BOUND, {\n                    node: node\n                });\n            }\n        },\n\n        _contentSize: function(root) {\n            this.view.renderHeight(root);\n        },\n\n        _wrapItem: function(item) {\n            var wrap = {};\n\n            if (defined(this.options.valueField)) {\n                wrap.value = getField(this.options.valueField, item);\n            }\n\n            if (defined(this.options.colorField)) {\n                wrap.color = getField(this.options.colorField, item);\n            }\n\n            if (defined(this.options.textField)) {\n                wrap.text = getField(this.options.textField, item);\n            }\n\n            wrap.level = item.level();\n\n            wrap.dataItem = item;\n\n            return wrap;\n        },\n\n        _getByUid: function(uid) {\n            var items = [this._root];\n            var item;\n\n            while (items.length) {\n                item = items.pop();\n                if (item.dataItem.uid === uid) {\n                    return item;\n                }\n\n                if (item.children) {\n                    items = items.concat(item.children);\n                }\n            }\n        },\n\n        dataItem: function(node) {\n            var uid = $(node).attr(kendo.attr(\"uid\")),\n                dataSource = this.dataSource;\n\n            return dataSource && dataSource.getByUid(uid);\n        },\n\n        findByUid: function(uid) {\n            return this.element.find(\".k-treemap-tile[\" + kendo.attr(\"uid\") + \"='\" + uid + \"']\");\n        },\n\n        _mouseover: function(e) {\n            var target = $(e.target);\n            if (target.hasClass(\"k-leaf\")) {\n                this._removeActiveState();\n                target\n                    .removeClass(\"k-state-hover\")\n                    .addClass(\"k-state-hover\");\n            }\n        },\n\n        _removeActiveState: function() {\n            this.element\n                .find(\".k-state-hover\")\n                .removeClass(\"k-state-hover\");\n        },\n\n        _mouseleave: function() {\n            this._removeActiveState();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.element.off(NS);\n\n            if (this.dataSource) {\n                this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n            }\n\n            this._root = null;\n\n            kendo.destroy(this.element);\n        },\n\n        items: function() {\n            return $();\n        },\n\n        getSize: function() {\n            return kendo.dimensions(this.element);\n        },\n\n        _resize: function() {\n            this.dataSource.fetch();\n        },\n\n        setOptions: function(options) {\n            var dataSource = options.dataSource;\n\n            options.dataSource = undefined;\n            this._originalOptions = deepExtend(this._originalOptions, options);\n            this.options = deepExtend({}, this._originalOptions);\n            this._setLayout();\n            this._initTheme(this.options);\n\n            Widget.fn._setEvents.call(this, options);\n\n            if (dataSource) {\n                this.setDataSource(HierarchicalDataSource.create(dataSource));\n            }\n\n            if (this.options.autoBind) {\n                this.dataSource.fetch();\n            }\n        }\n    });\n\n    var Squarified = Class.extend({\n        createRoot: function(root, width, height) {\n            root.coord = {\n                width: width,\n                height: height,\n                top: 0,\n                left: 0\n            };\n        },\n\n        leaf: function(tree) {\n            return !tree.children;\n        },\n\n        layoutChildren: function(items, coord) {\n            var parentArea = coord.width * coord.height;\n            var totalArea = 0,\n                itemsArea = [],\n                i;\n\n            for (i = 0; i < items.length; i++) {\n                itemsArea[i] = parseFloat(items[i].value);\n                totalArea += itemsArea[i];\n            }\n\n            for (i = 0; i < itemsArea.length; i++) {\n                items[i].area = parentArea * itemsArea[i] / totalArea;\n            }\n\n            var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n\n            items = new kendo.data.Query(items)._sortForGrouping(\"value\", \"desc\");\n            var firstElement = [items[0]];\n            var tail = items.slice(1);\n            this.squarify(tail, firstElement, minimumSideValue, coord);\n        },\n\n        squarify: function(tail, initElement, width, coord) {\n            this.computeDim(tail, initElement, width, coord);\n        },\n\n        computeDim: function(tail, initElement, width, coord) {\n            if (tail.length + initElement.length == 1) {\n                var element = tail.length == 1 ? tail : initElement;\n                this.layoutLast(element, width, coord);\n                return;\n            }\n\n            if (tail.length >= 2 && initElement.length === 0) {\n                initElement = [tail[0]];\n                tail = tail.slice(1);\n            }\n\n            if (tail.length === 0) {\n                if (initElement.length > 0) {\n                    this.layoutRow(initElement, width, coord);\n                }\n                return;\n            }\n\n            var firstElement = tail[0];\n\n            if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n                this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n            } else {\n                var newCoords = this.layoutRow(initElement, width, coord);\n                this.computeDim(tail, [], newCoords.dim, newCoords);\n            }\n        },\n\n        layoutLast: function(items, w, coord) {\n            items[0].coord = coord;\n        },\n\n        layoutRow: function(items, width, coord) {\n            if (this.layoutHorizontal()) {\n                return this.layoutV(items, width, coord);\n            } else {\n                return this.layoutH(items, width, coord);\n            }\n        },\n\n        orientation: \"h\",\n\n        layoutVertical: function() {\n            return this.orientation === \"v\";\n        },\n\n        layoutHorizontal: function() {\n            return this.orientation === \"h\";\n        },\n\n        layoutChange: function() {\n            this.orientation = this.layoutVertical() ? \"h\" : \"v\";\n        },\n\n        worstAspectRatio: function(items, width) {\n            if (!items || items.length === 0) {\n                return MAX_VALUE;\n            }\n\n            var areaSum = 0,\n                maxArea = 0,\n                minArea = MAX_VALUE;\n\n            for (var i = 0; i < items.length; i++) {\n                var area = items[i].area;\n                areaSum += area;\n                minArea = (minArea < area) ? minArea : area;\n                maxArea = (maxArea > area) ? maxArea : area;\n            }\n\n            return math.max(\n                (width * width * maxArea) / (areaSum * areaSum),\n                (areaSum * areaSum) / (width * width * minArea)\n            );\n        },\n\n        compute: function(children, rootCoord, htmlSize) {\n            if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n                this.layoutChange();\n            }\n\n            if (children && children.length > 0) {\n                var newRootCoord = {\n                    width: rootCoord.width,\n                    height: rootCoord.height - htmlSize.text,\n                    top: 0,\n                    left: 0\n                };\n\n                this.layoutChildren(children, newRootCoord);\n            }\n        },\n\n        layoutV: function(items, width, coord) {\n            var totalArea = this._totalArea(items),\n                top =  0;\n\n            width = round(totalArea / width);\n\n            for (var i = 0; i < items.length; i++) {\n                var height = round(items[i].area / width);\n                items[i].coord = {\n                    height: height,\n                    width: width,\n                    top: coord.top + top,\n                    left: coord.left\n                };\n\n                top += height;\n            }\n\n            var ans = {\n                height: coord.height,\n                width: coord.width - width,\n                top: coord.top,\n                left: coord.left + width\n            };\n\n            ans.dim = math.min(ans.width, ans.height);\n\n            if (ans.dim != ans.height) {\n                this.layoutChange();\n            }\n\n            return ans;\n        },\n\n        layoutH: function(items, width, coord) {\n            var totalArea = this._totalArea(items);\n\n            var height = round(totalArea / width),\n                top = coord.top,\n                left = 0;\n\n            for (var i=0; i<items.length; i++) {\n                items[i].coord = {\n                    height: height,\n                    width: round(items[i].area / height),\n                    top: top,\n                    left: coord.left + left\n                };\n                left += items[i].coord.width;\n            }\n\n            var ans = {\n                height: coord.height - height,\n                width: coord.width,\n                top: coord.top + height,\n                left: coord.left\n            };\n\n            ans.dim = math.min(ans.width, ans.height);\n\n            if (ans.dim != ans.width) {\n                this.layoutChange();\n            }\n\n            return ans;\n        },\n\n        _totalArea: function(items) {\n            var total = 0;\n\n            for (var i = 0; i < items.length; i++) {\n                total += items[i].area;\n            }\n\n            return total;\n        }\n    });\n\n    var SquarifiedView = Class.extend({\n        init: function(treeMap, options) {\n            this.options = deepExtend({}, this.options, options);\n            this.treeMap = treeMap;\n            this.element = $(treeMap.element);\n\n            this.offset = 0;\n        },\n\n        htmlSize: function(root) {\n            var rootElement = this._getByUid(root.dataItem.uid);\n            var htmlSize = {\n                text: 0\n            };\n\n            if (root.children) {\n                this._clean(rootElement);\n\n                var text = this._getText(root);\n                if (text) {\n                    var title = this._createTitle(root);\n                    rootElement.append(title);\n\n                    htmlSize.text = title.height();\n                }\n\n                rootElement.append(this._createWrap());\n\n                this.offset = (rootElement.outerWidth() - rootElement.innerWidth()) / 2;\n            }\n\n            return htmlSize;\n        },\n\n        _getByUid: function(uid) {\n            return this.element.find(\".k-treemap-tile[\" + kendo.attr(\"uid\") + \"='\" + uid + \"']\");\n        },\n\n        render: function(root) {\n            var rootElement = this._getByUid(root.dataItem.uid);\n            var children = root.children;\n            if (children) {\n                var rootWrap = rootElement.find(\".k-treemap-wrap\");\n\n                for (var i = 0; i < children.length; i++) {\n                    var leaf = children[i];\n                    var htmlElement = this._createLeaf(leaf);\n                    rootWrap.append(htmlElement);\n                    this.treeMap.trigger(ITEM_CREATED, {\n                        element: htmlElement\n                    });\n                }\n            }\n        },\n\n        createRoot: function(root) {\n            var htmlElement = this._createLeaf(root);\n            this.element.append(htmlElement);\n\n            this.treeMap.trigger(ITEM_CREATED, {\n                element: htmlElement\n            });\n        },\n\n        _clean: function(root) {\n            root.css(\"background-color\", \"\");\n            root.removeClass(\"k-leaf\");\n            root.removeClass(\"k-inverse\");\n            root.empty();\n        },\n\n        _createLeaf: function(item) {\n            return this._createTile(item)\n                    .css(\"background-color\", item.color)\n                    .addClass(\"k-leaf\")\n                    .toggleClass(\n                        \"k-inverse\",\n                        this._tileColorBrightness(item) > 180\n                    )\n                    .append($(\"<div></div>\")\n                    .html(this._getText(item)));\n        },\n\n        _createTile: function(item) {\n            var newCoord = {\n                width: item.coord.width,\n                height: item.coord.height,\n                left: item.coord.left,\n                top: item.coord.top\n            };\n\n            if (newCoord.left && this.offset) {\n                newCoord.width += this.offset * 2;\n            } else {\n                newCoord.width += this.offset;\n            }\n\n            if (newCoord.top) {\n                newCoord.height += this.offset * 2;\n            } else {\n                newCoord.height += this.offset;\n            }\n\n            var tile = $(\"<div class='k-treemap-tile'></div>\")\n                .css({\n                    width: newCoord.width,\n                    height: newCoord.height,\n                    left: newCoord.left,\n                    top: newCoord.top\n                });\n\n            if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n                tile.attr(kendo.attr(\"uid\"), item.dataItem.uid);\n            }\n\n            return tile;\n        },\n\n        _getText: function(item) {\n            var text = item.text;\n\n            if (this.options.template) {\n                text = this._renderTemplate(item);\n            }\n\n            return text;\n        },\n\n        _renderTemplate: function(item) {\n            var titleTemplate = template(this.options.template);\n            return titleTemplate({\n                dataItem: item.dataItem,\n                text: item.text\n            });\n        },\n\n        _createTitle: function(item) {\n            return $(\"<div class='k-treemap-title'></div>\")\n                    .append($(\"<div></div>\").html(this._getText(item)));\n        },\n\n        _createWrap: function() {\n            return $(\"<div class='k-treemap-wrap'></div>\");\n        },\n\n        _tileColorBrightness: function(item) {\n            return colorBrightness(item.color);\n        }\n    });\n\n    var SliceAndDice = Class.extend({\n        createRoot: function(root, width, height, vertical) {\n            root.coord = {\n                width: width,\n                height: height,\n                top: 0,\n                left: 0\n            };\n            root.vertical = vertical;\n        },\n\n        init: function(vertical) {\n            this.vertical = vertical;\n            this.quotient = vertical ? 1 : 0;\n        },\n\n        compute: function(children, rootCoord, htmlSize) {\n            if (children.length > 0) {\n                var width = rootCoord.width;\n                var height = rootCoord.height;\n\n                if (this.vertical) {\n                    height -= htmlSize.text;\n                } else {\n                    width -= htmlSize.text;\n                }\n\n                var newRootCoord = {\n                    width: width,\n                    height: height,\n                    top: 0,\n                    left: 0\n                };\n\n                this.layoutChildren(children, newRootCoord);\n            }\n        },\n\n        layoutChildren: function(items, coord) {\n            var parentArea = coord.width * coord.height;\n            var totalArea = 0;\n            var itemsArea = [];\n            var i;\n\n            for (i = 0; i < items.length; i++) {\n                var item = items[i];\n                itemsArea[i] = parseFloat(items[i].value);\n                totalArea += itemsArea[i];\n                item.vertical = this.vertical;\n            }\n\n            for (i = 0; i < itemsArea.length; i++) {\n                items[i].area = parentArea * itemsArea[i] / totalArea;\n            }\n\n            items = new kendo.data.Query(items)._sortForGrouping(\"value\", \"desc\");\n\n            this.sliceAndDice(items, coord);\n        },\n\n        sliceAndDice: function(items, coord) {\n            var totalArea = this._totalArea(items);\n            if (items[0].level % 2 === this.quotient) {\n                this.layoutHorizontal(items, coord, totalArea);\n            } else {\n                this.layoutVertical(items, coord, totalArea);\n            }\n        },\n\n        layoutHorizontal: function(items, coord, totalArea) {\n            var left = 0;\n\n            for (var i = 0; i < items.length; i++) {\n                var item = items[i];\n                var width = item.area / (totalArea / coord.width);\n                item.coord = {\n                    height: coord.height,\n                    width: width,\n                    top: coord.top,\n                    left: coord.left + left\n                };\n\n                left += width;\n            }\n        },\n\n        layoutVertical: function(items, coord, totalArea) {\n            var top = 0;\n\n            for (var i = 0; i < items.length; i++) {\n                var item = items[i];\n                var height = item.area / (totalArea / coord.height);\n                item.coord = {\n                    height: height,\n                    width: coord.width,\n                    top: coord.top + top,\n                    left: coord.left\n                };\n\n                top += height;\n            }\n        },\n\n        _totalArea: function(items) {\n            var total = 0;\n\n            for (var i = 0; i < items.length; i++) {\n                total += items[i].area;\n            }\n\n            return total;\n        }\n    });\n\n    var SliceAndDiceView = SquarifiedView.extend({\n        htmlSize: function(root) {\n            var rootElement = this._getByUid(root.dataItem.uid);\n            var htmlSize = {\n                text: 0,\n                offset: 0\n            };\n\n            if (root.children) {\n                this._clean(rootElement);\n\n                var text = this._getText(root);\n                if (text) {\n                    var title = this._createTitle(root);\n                    rootElement.append(title);\n\n                    if (root.vertical) {\n                        htmlSize.text = title.height();\n                    } else {\n                        htmlSize.text = title.width();\n                    }\n                }\n\n                rootElement.append(this._createWrap());\n\n                this.offset = (rootElement.outerWidth() - rootElement.innerWidth()) / 2;\n            }\n\n            return htmlSize;\n        },\n\n        _createTitle: function(item) {\n            var title;\n            if (item.vertical) {\n                title = $(\"<div class='k-treemap-title'></div>\");\n            } else {\n                title = $(\"<div class='k-treemap-title-vertical'></div>\");\n            }\n\n            return title.append($(\"<div></div>\").html(this._getText(item)));\n        }\n    });\n\n    function valueOrDefault(value, defaultValue) {\n        return defined(value) ? value : defaultValue;\n    }\n\n    function getField(field, row) {\n        if (row === null) {\n            return row;\n        }\n\n        var get = getter(field, true);\n        return get(row);\n    }\n\n    function defined(value) {\n        return typeof value !== UNDEFINED;\n    }\n\n    function colorsByLength(min, max, length) {\n        var minRGBtoDecimal = rgbToDecimal(min);\n        var maxRGBtoDecimal = rgbToDecimal(max);\n        var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n        var colors = [];\n\n        colors.push(min);\n\n        for (var i = 0; i < length; i++) {\n            var rgbColor = {\n                r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n                g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n                b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n            };\n            colors.push(buildColorFromRGB(rgbColor));\n        }\n\n        colors.push(max);\n\n        return colors;\n    }\n\n    function colorByIndex(min, max, index, length, isDarker) {\n        var minColor = math.min(math.abs(min), math.abs(max));\n        var maxColor = math.max(math.abs(min), math.abs(max));\n        var step = (maxColor - minColor) / (length + 1);\n        var currentStep = step * (index + 1);\n        var color;\n\n        if (isDarker) {\n            color = minColor + currentStep;\n        } else {\n            color = maxColor - currentStep;\n        }\n\n        return color;\n    }\n\n    function buildColorFromRGB(color) {\n        return \"#\" + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n    }\n\n    function rgbToDecimal(color) {\n        color = color.replace(\"#\", \"\");\n        var rgbColor = colorToRGB(color);\n\n        return {\n            r: rgbToHex(rgbColor.r),\n            g: rgbToHex(rgbColor.g),\n            b: rgbToHex(rgbColor.b)\n        };\n    }\n\n    function decimalToRgb(number) {\n        var result = math.round(number).toString(16).toUpperCase();\n\n        if (result.length === 1) {\n            result = \"0\" + result;\n        }\n\n        return result;\n    }\n\n    function colorToRGB(color) {\n        var colorLength = color.length;\n        var rgbColor = {};\n        if (colorLength === 3) {\n            rgbColor.r = color[0];\n            rgbColor.g = color[1];\n            rgbColor.b = color[2];\n        } else {\n            rgbColor.r = color.substring(0, 2);\n            rgbColor.g = color.substring(2, 4);\n            rgbColor.b = color.substring(4, 6);\n        }\n\n        return rgbColor;\n    }\n\n    function rgbToHex(rgb) {\n        return parseInt(rgb.toString(16), 16);\n    }\n\n    function colorBrightness(color) {\n        var brightness = 0;\n        if (color) {\n            color = rgbToDecimal(color);\n            brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n        }\n\n        return brightness;\n    }\n\n    function round(value) {\n        var power = math.pow(10, 4);\n        return math.round(value * power) / power;\n    }\n\n    dataviz.ui.plugin(TreeMap);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Shim = ui.Shim,\n        Widget = ui.Widget,\n        BEFORE_OPEN = \"beforeOpen\",\n        OPEN = \"open\",\n        CLOSE = \"close\",\n        INIT = \"init\",\n        WRAP = '<div class=\"km-modalview-wrapper\" />';\n\n    var ModalView = ui.View.extend({\n        init: function(element, options) {\n            var that = this, width, height;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._id();\n            that._wrap();\n            that._shim();\n\n            if (!this.options.$angular) {\n                that._layout();\n                that._scroller();\n                that._model();\n            }\n\n            that.element.css(\"display\", \"\");\n\n            that.trigger(INIT);\n        },\n\n        events: [\n            INIT,\n            BEFORE_OPEN,\n            OPEN,\n            CLOSE\n        ],\n\n        options: {\n            name: \"ModalView\",\n            modal: true,\n            width: null,\n            height: null\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.shim.destroy();\n        },\n\n        open: function(target) {\n            var that = this;\n            that.target = $(target);\n            that.shim.show();\n\n            that._invokeNgController();\n\n            // necessary for the mobile view interface\n            that.trigger(\"show\", { view: that });\n        },\n\n        // Interface implementation, called from the pane click handlers\n        openFor: function(target) {\n            if (!this.trigger(BEFORE_OPEN, { target: target })) {\n                this.open(target);\n                this.trigger(OPEN, { target: target });\n            }\n        },\n\n        close: function() {\n            if (this.element.is(\":visible\") && !this.trigger(CLOSE)) {\n                this.shim.hide();\n            }\n        },\n\n        _wrap: function() {\n            var that = this,\n                element = that.element,\n                options = that.options,\n                width, height;\n\n            width = element[0].style.width || \"auto\";\n            height = element[0].style.height || \"auto\";\n\n            element.addClass(\"km-modalview\").wrap(WRAP);\n\n            that.wrapper = element.parent().css({\n                width: options.width || width || 300,\n                height: options.height || height || 300\n            }).addClass(height == \"auto\" ? \" km-auto-height\" : \"\");\n\n            element.css({ width: \"\", height: \"\" });\n        },\n\n        _shim: function() {\n            var that = this;\n\n            that.shim = new Shim(that.wrapper, {\n                modal: that.options.modal,\n                position: \"center center\",\n                align: \"center center\",\n                effect: \"fade:in\",\n                className: \"km-modalview-root\",\n                hide: function(e) {\n                    if (that.trigger(CLOSE)) {\n                        e.preventDefault();\n                    }\n                }\n            });\n        }\n    });\n\n    ui.plugin(ModalView);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        os = kendo.support.mobileOS,\n        Transition = kendo.effects.Transition,\n        roleSelector = kendo.roleSelector,\n        AXIS = \"x\",\n        ui = mobile.ui,\n        SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode),\n        BEFORE_SHOW = \"beforeShow\",\n        INIT = \"init\",\n        SHOW = \"show\",\n        HIDE = \"hide\",\n        AFTER_HIDE = \"afterHide\",\n        NULL_VIEW = { enable: $.noop };\n\n    var Drawer = ui.View.extend({\n        init: function(element, options) {\n            // move the drawer to the top, in order to hide it\n            $(element).parent().prepend(element);\n\n            mobile.ui.Widget.fn.init.call(this, element, options);\n\n            if (!this.options.$angular) {\n                this._layout();\n                this._scroller();\n            }\n\n            this._model();\n\n            var pane = this.element.closest(roleSelector(\"pane\")).data(\"kendoMobilePane\"),\n                userEvents;\n\n            if (pane) {\n                this.pane = pane;\n                this.pane.bind(\"viewShow\", function(e) {\n                    drawer._viewShow(e);\n                });\n\n                this.pane.bind(\"sameViewRequested\", function() {\n                    drawer.hide();\n                });\n\n                userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n                    filter: roleSelector(\"view splitview\"),\n                    allowSelection: true\n                });\n\n            } else {\n                this.currentView = NULL_VIEW;\n                var container = $(this.options.container);\n\n                if (!container) {\n                    throw new Error(\"The drawer needs a container configuration option set.\");\n                }\n\n                userEvents = this.userEvents = new kendo.UserEvents(container, { allowSelection: true });\n                this._attachTransition(container);\n            }\n\n            var drawer = this;\n\n            var hide = function(e) {\n                if (drawer.visible) {\n                    drawer.hide();\n                    e.preventDefault();\n                }\n            };\n\n            if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n                userEvents.bind(\"press\", function(e) { drawer.transition.cancel(); });\n                userEvents.bind(\"start\", function(e) { drawer._start(e); });\n                userEvents.bind(\"move\", function(e) { drawer._update(e); });\n                userEvents.bind(\"end\", function(e) { drawer._end(e); });\n                userEvents.bind(\"tap\", hide);\n            } else {\n                userEvents.bind(\"press\", hide);\n            }\n\n            this.leftPositioned = this.options.position === \"left\";\n\n            this.visible = false;\n\n            this.element.hide().addClass(\"km-drawer\").addClass(this.leftPositioned ? \"km-left-drawer\" : \"km-right-drawer\");\n            this.trigger(INIT);\n        },\n\n        options: {\n            name: \"Drawer\",\n            position: \"left\",\n            views: [],\n            swipeToOpenViews: [],\n            swipeToOpen: true,\n            title: \"\",\n            container: null\n        },\n\n        events: [\n            BEFORE_SHOW,\n            HIDE,\n            AFTER_HIDE,\n            INIT,\n            SHOW\n        ],\n\n        show: function() {\n            if (this._activate()) {\n                this._show();\n            }\n        },\n\n        hide: function() {\n            if (!this.currentView) {\n                return;\n            }\n\n            this.currentView.enable();\n\n            Drawer.current = null;\n            this._moveViewTo(0);\n            this.trigger(HIDE, { view: this });\n        },\n\n        // Alias in order to support popover/modalview etc. interface\n        openFor: function() {\n            if (this.visible) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        },\n\n        destroy: function() {\n            ui.View.fn.destroy.call(this);\n            this.userEvents.destroy();\n        },\n\n        _activate: function() {\n            if (this.visible) {\n                return true;\n            }\n\n            var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n\n            if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n                return false;\n            }\n\n            this._setAsCurrent();\n            this.element.show();\n\n            this.trigger(SHOW, { view: this });\n            this._invokeNgController();\n            return true;\n        },\n\n        _currentViewIncludedIn: function(views) {\n            if (!this.pane || !views.length) {\n                return true;\n            }\n\n            var view = this.pane.view();\n            return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr(\"id\"), views) > -1;\n        },\n\n        _show: function() {\n            this.currentView.enable(false);\n\n            this.visible = true;\n            var offset = this.element.width();\n\n            if (!this.leftPositioned) {\n                offset = -offset;\n            }\n\n            this._moveViewTo(offset);\n        },\n\n        _setAsCurrent: function() {\n            if (Drawer.last !== this) {\n                if (Drawer.last) {\n                    Drawer.last.element.hide();\n                }\n                this.element.show();\n            }\n\n            Drawer.last = this;\n            Drawer.current = this;\n        },\n\n        _moveViewTo: function(offset) {\n            this.userEvents.cancel();\n            this.transition.moveTo({ location: offset, duration: 400, ease: Transition.easeOutExpo });\n        },\n\n        _viewShow: function(e) {\n            if (this.currentView) {\n                this.currentView.enable();\n            }\n\n            if (this.currentView === e.view) {\n                this.hide();\n                return;\n            }\n\n            this.currentView = e.view;\n            this._attachTransition(e.view.element);\n        },\n\n        _attachTransition: function(element) {\n            var that = this,\n                movable = this.movable,\n                currentOffset = movable && movable.x;\n\n\n            if (this.transition) {\n                this.transition.cancel();\n                this.movable.moveAxis(\"x\", 0);\n            }\n\n            movable = this.movable = new kendo.ui.Movable(element);\n\n            this.transition = new Transition({\n                axis: AXIS,\n                movable: this.movable,\n                onEnd: function() {\n                    if (movable[AXIS] === 0) {\n                        element[0].style.cssText = \"\";\n                        that.element.hide();\n                        that.trigger(AFTER_HIDE);\n                        that.visible = false;\n                    }\n                }\n            });\n\n            if (currentOffset) {\n                element.addClass(\"k-fx-hidden\");\n                kendo.animationFrame(function() {\n                    element.removeClass(\"k-fx-hidden\");\n                    that.movable.moveAxis(AXIS, currentOffset);\n                    that.hide();\n                });\n            }\n        },\n\n        _start: function(e) {\n            var userEvents = e.sender;\n\n            // ignore non-horizontal swipes\n            if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n                userEvents.cancel();\n                return;\n            }\n\n            var leftPositioned = this.leftPositioned,\n                visible = this.visible,\n                canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current,\n                canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current,\n                leftSwipe = e.x.velocity < 0;\n\n            if ((canMoveLeft && leftSwipe) || (canMoveRight && !leftSwipe)) {\n                if (this._activate()) {\n                    userEvents.capture();\n                    return;\n                }\n            }\n\n            userEvents.cancel();\n        },\n\n        _update: function(e) {\n            var movable = this.movable,\n                newPosition = movable.x + e.x.delta,\n                limitedPosition;\n\n            if (this.leftPositioned) {\n                limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n            } else {\n                limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n            }\n\n            this.movable.moveAxis(AXIS, limitedPosition);\n            e.event.preventDefault();\n            e.event.stopPropagation();\n        },\n\n        _end: function(e) {\n            var velocity = e.x.velocity,\n                pastHalf = Math.abs(this.movable.x) > this.element.width() / 2,\n                velocityThreshold = 0.8,\n                shouldShow;\n\n            if (this.leftPositioned) {\n                shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n            } else {\n                shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n            }\n\n            if(shouldShow) {\n                this._show();\n            } else {\n                this.hide();\n            }\n        }\n    });\n\n    ui.plugin(Drawer);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Widget = ui.Widget,\n        EXPANED_PANE_SHIM = \"<div class='km-expanded-pane-shim' />\",\n        View = ui.View;\n\n    var SplitView = View.extend({\n        init: function(element, options) {\n            var that = this,\n            pane, modalViews;\n\n            Widget.fn.init.call(that, element, options);\n            element = that.element;\n\n            $.extend(that, options);\n\n            that._id();\n\n            if (!that.options.$angular) {\n                that._layout();\n                that._overlay();\n            } else {\n                that._overlay();\n            }\n\n            that._style();\n\n            modalViews = element.children(that._locate(\"modalview\"));\n\n            if (!that.options.$angular) {\n                kendo.mobile.init(modalViews);\n            } else {\n                modalViews.each(function(idx, element) {\n                    kendo.compileMobileDirective($(element));\n                });\n            }\n\n            that.panes = [];\n            that._paramsHistory = [];\n\n            if (!that.options.$angular) {\n                that.content.children(kendo.roleSelector(\"pane\")).each(function() {\n                    pane = kendo.initWidget(this, {}, ui.roles);\n                    that.panes.push(pane);\n                });\n            } else {\n                that.element.children(kendo.directiveSelector(\"pane\")).each(function() {\n                    pane = kendo.compileMobileDirective($(this));\n                    that.panes.push(pane);\n                });\n            }\n\n            that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n\n            that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n                tap: function() {\n                    that.collapsePanes();\n                }\n            });\n        },\n\n        _locate: function(selectors) {\n            return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n        },\n\n        options: {\n            name: \"SplitView\",\n            style: \"horizontal\"\n        },\n\n        expandPanes: function() {\n            this.element.addClass(\"km-expanded-splitview\");\n        },\n\n        collapsePanes: function() {\n            this.element.removeClass(\"km-expanded-splitview\");\n        },\n\n        // Implement view interface\n        _layout: function() {\n            var that = this,\n                element = that.element;\n\n            that.transition = kendo.attrValue(element, \"transition\");\n            kendo.mobile.ui.View.prototype._layout.call(this);\n            kendo.mobile.init(this.header.add(this.footer));\n            that.element.addClass(\"km-splitview\");\n            that.content.addClass(\"km-split-content\");\n        },\n\n        _style: function () {\n            var style = this.options.style,\n                element = this.element,\n                styles;\n\n            if (style) {\n                styles = style.split(\" \");\n                $.each(styles, function () {\n                    element.addClass(\"km-split-\" + this);\n                });\n            }\n        },\n\n        showStart: function() {\n            var that = this;\n            that.element.css(\"display\", \"\");\n\n            if (!that.inited) {\n                that.inited = true;\n                $.each(that.panes, function() {\n                    if (this.options.initial) {\n                        this.navigateToInitial();\n                    } else {\n                        this.navigate(\"\");\n                    }\n                });\n                that.trigger(\"init\", {view: that});\n            }\n\n            that.trigger(\"show\", {view: that});\n        }\n    });\n\n    ui.plugin(SplitView);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        support = kendo.support,\n        Widget = mobile.ui.Widget,\n        Pane = mobile.ui.Pane,\n\n        DEFAULT_OS = \"ios7\",\n        OS = support.mobileOS,\n        BERRYPHONEGAP = OS.device == \"blackberry\" && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode,\n        VERTICAL = \"km-vertical\",\n        CHROME =  OS.browser === \"chrome\",\n        BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME),\n        INITIALLY_HORIZONTAL = (Math.abs(window.orientation) / 90 == 1),\n        HORIZONTAL = \"km-horizontal\",\n\n        MOBILE_PLATFORMS = {\n            ios7: { ios: true, browser: \"default\", device: \"iphone\", flatVersion: \"700\", majorVersion: \"7\", minorVersion: \"0.0\", name: \"ios\", tablet: false },\n            ios: { ios: true, browser: \"default\", device: \"iphone\", flatVersion: \"612\", majorVersion: \"6\", minorVersion: \"1.2\", name: \"ios\", tablet: false },\n            android: { android: true, browser: \"default\", device: \"android\", flatVersion: \"442\", majorVersion: \"4\", minorVersion: \"4.2\", name: \"android\", tablet: false },\n            blackberry: { blackberry: true, browser: \"default\", device: \"blackberry\", flatVersion: \"710\", majorVersion: \"7\", minorVersion: \"1.0\", name: \"blackberry\", tablet: false },\n            meego: { meego: true, browser: \"default\", device: \"meego\", flatVersion: \"850\", majorVersion: \"8\", minorVersion: \"5.0\", name: \"meego\", tablet: false },\n            wp: { wp: true, browser: \"default\", device: \"wp\", flatVersion: \"800\", majorVersion: \"8\", minorVersion: \"0.0\", name: \"wp\", tablet: false }\n        },\n\n        viewportTemplate = kendo.template('<meta content=\"initial-scale=1.0, maximum-scale=1.0, user-scalable=no#=data.height#\" name=\"viewport\" />', {usedWithBlock: false}),\n        systemMeta = kendo.template('<meta name=\"apple-mobile-web-app-capable\" content=\"#= data.webAppCapable === false ? \\'no\\' : \\'yes\\' #\" /> ' +\n                     '<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"#=data.statusBarStyle#\" /> ' +\n                     '<meta name=\"msapplication-tap-highlight\" content=\"no\" /> ', {usedWithBlock: false}),\n        clipTemplate = kendo.template('<style>.km-view { clip: rect(0 #= data.width #px #= data.height #px 0); }</style>', {usedWithBlock: false}),\n        ENABLE_CLIP = OS.android && OS.browser != \"chrome\" || OS.blackberry,\n        viewportMeta = viewportTemplate({ height: \"\" }),\n\n        iconMeta = kendo.template('<link rel=\"apple-touch-icon' + (OS.android ? '-precomposed' : '') + '\" # if(data.size) { # sizes=\"#=data.size#\" #}# href=\"#=data.icon#\" />', {usedWithBlock: false}),\n\n        HIDEBAR = (OS.device == \"iphone\" || OS.device == \"ipod\") && OS.majorVersion < 7,\n        SUPPORT_SWIPE_TO_GO_BACK = (OS.device == \"iphone\" || OS.device == \"ipod\") && OS.majorVersion >= 7,\n        HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? \"none\" : null,\n        BARCOMPENSATION = OS.browser == \"mobilesafari\" ? 60 : 0,\n        STATUS_BAR_HEIGHT = 20,\n        WINDOW = $(window),\n        SCREEN = window.screen,\n        HEAD = $(\"head\"),\n\n        // mobile app events\n        INIT = \"init\",\n        proxy = $.proxy;\n\n    function osCssClass(os, options) {\n        var classes = [];\n\n        if (OS) {\n            classes.push(\"km-on-\" + OS.name);\n        }\n\n        if (os.skin) {\n            classes.push(\"km-\" + os.skin);\n        } else {\n            if (os.name == \"ios\" && os.majorVersion > 6) {\n                classes.push(\"km-ios7\");\n            } else {\n                classes.push(\"km-\" + os.name);\n            }\n        }\n        if ((os.name == \"ios\" && os.majorVersion < 7) || os.name != \"ios\") {\n            classes.push(\"km-\" + os.name + os.majorVersion);\n        }\n        classes.push(\"km-\" + os.majorVersion);\n        classes.push(\"km-m\" + (os.minorVersion ? os.minorVersion[0] : 0));\n\n        if (os.variant && ((os.skin && os.skin === os.name) || !os.skin || os.setDefaultPlatform === false)) {\n            classes.push(\"km-\" + (os.skin ? os.skin : os.name) + \"-\" + os.variant);\n        }\n\n        if (os.cordova) {\n            classes.push(\"km-cordova\");\n        }\n        if (os.appMode) {\n            classes.push(\"km-app\");\n        } else {\n            classes.push(\"km-web\");\n        }\n\n        if (options && options.statusBarStyle) {\n            classes.push(\"km-\" + options.statusBarStyle + \"-status-bar\");\n        }\n\n        return classes.join(\" \");\n    }\n\n    function wp8Background(os) {\n        return 'km-wp-' + (os.noVariantSet ?\n                            (parseInt($(\"<div style='background: Background' />\").css(\"background-color\").split(\",\")[1], 10) === 0 ? 'dark' : 'light') :\n                            os.variant + \" km-wp-\" + os.variant + \"-force\");\n    }\n\n    function isOrientationHorizontal(element) {\n        return OS.wp ? element.css(\"animation-name\") == \"-kendo-landscape\" : (Math.abs(window.orientation) / 90 == 1);\n    }\n\n    function getOrientationClass(element) {\n        return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n    }\n\n    function setMinimumHeight(pane) {\n        pane.parent().addBack()\n               .css(\"min-height\", window.innerHeight);\n    }\n\n    function applyViewportHeight() {\n        $(\"meta[name=viewport]\").remove();\n        HEAD.append(viewportTemplate({\n            height: \", width=device-width\" +  // width=device-width was removed for iOS6, but this should stay for BB PhoneGap.\n                        (isOrientationHorizontal() ?\n                            \", height=\" + window.innerHeight + \"px\"  :\n                            (support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700) ?\n                                \", height=\" + window.innerWidth + \"px\" :\n                                \", height=device-height\")\n        }));\n    }\n\n    var Application = Widget.extend({\n        init: function(element, options) {\n            // global reference to current application\n            mobile.application = this;\n            $($.proxy(this, 'bootstrap', element, options));\n        },\n\n        bootstrap: function(element, options) {\n            element = $(element);\n\n            if (!element[0]) {\n                element = $(document.body);\n            }\n\n            Widget.fn.init.call(this, element, options);\n            this.element.removeAttr(\"data-\" + kendo.ns + \"role\");\n\n            this._setupPlatform();\n            this._attachMeta();\n            this._setupElementClass();\n            this._attachHideBarHandlers();\n            var paneOptions = $.extend({}, this.options);\n            delete paneOptions.name;\n\n            var that = this,\n                startHistory = function() {\n                    that.pane = new Pane(that.element, paneOptions);\n                    that.pane.navigateToInitial();\n\n                    if (that.options.updateDocumentTitle) {\n                        that._setupDocumentTitle();\n                    }\n\n                    that._startHistory();\n                    that.trigger(INIT);\n                };\n\n            if (this.options.$angular) {\n                setTimeout(startHistory);\n            } else {\n                startHistory();\n            }\n        },\n\n        options: {\n            name: \"Application\",\n            hideAddressBar: true,\n            browserHistory: true,\n            historyTransition: HISTORY_TRANSITION,\n            modelScope: window,\n            statusBarStyle: \"black\",\n            transition: \"\",\n            platform: null,\n            skin: null,\n            updateDocumentTitle: true,\n            useNativeScrolling: false\n        },\n\n        events: [\n            INIT\n        ],\n\n        navigate: function(url, transition) {\n            this.pane.navigate(url, transition);\n        },\n\n        replace: function(url, transition) {\n            this.pane.replace(url, transition);\n        },\n\n        scroller: function() {\n            return this.view().scroller;\n        },\n\n        hideLoading: function() {\n            if (this.pane) {\n                this.pane.hideLoading();\n            } else {\n                throw new Error(\"The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.\");\n            }\n        },\n\n        showLoading: function() {\n            if (this.pane) {\n                this.pane.showLoading();\n            } else {\n                throw new Error(\"The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.\");\n            }\n        },\n\n        changeLoadingMessage: function(message) {\n            if (this.pane) {\n                this.pane.changeLoadingMessage(message);\n            } else {\n                throw new Error(\"The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.\");\n            }\n        },\n\n        view: function() {\n            return this.pane.view();\n        },\n\n        skin: function(skin) {\n            var that = this;\n\n            if (!arguments.length) {\n                return that.options.skin;\n            }\n\n            that.options.skin = skin || \"\";\n            that.element[0].className = \"km-pane\";\n            that._setupPlatform();\n            that._setupElementClass();\n\n            return that.options.skin;\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.pane.destroy();\n            this.router.destroy();\n        },\n\n        _setupPlatform: function() {\n            var that = this,\n                platform = that.options.platform,\n                skin = that.options.skin,\n                split = [],\n                os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n\n            if (platform) {\n                os.setDefaultPlatform = true;\n                if (typeof platform === \"string\") {\n                    split = platform.split(\"-\");\n                    os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n                } else {\n                    os = platform;\n                }\n            }\n\n            if (skin) {\n                split = skin.split(\"-\");\n                if (!OS) {\n                    os.setDefaultPlatform = false;\n                }\n                os = $.extend({}, os, { skin: split[0], variant: split[1] });\n            }\n\n            if (!os.variant) {\n                os.noVariantSet = true;\n                os.variant = \"dark\";\n            }\n\n            that.os = os;\n\n            that.osCssClass = osCssClass(that.os, that.options);\n\n            if (os.name == \"wp\") {\n                if (!that.refreshBackgroundColorProxy) {\n                    that.refreshBackgroundColorProxy = $.proxy(function () {\n                        if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n                            that.element.removeClass(\"km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force\").addClass(wp8Background(that.os));\n                        }\n                    }, that);\n                }\n\n                $(document).off(\"visibilitychange\", that.refreshBackgroundColorProxy);\n                $(document).off(\"resume\", that.refreshBackgroundColorProxy);\n\n                if (!os.skin) {\n                    that.element.parent().css(\"overflow\", \"hidden\");\n\n                    $(document).on(\"visibilitychange\", that.refreshBackgroundColorProxy); // Restore theme on browser focus (using the Visibility API).\n                    $(document).on(\"resume\", that.refreshBackgroundColorProxy); // PhoneGap fires resume.\n\n                    that.refreshBackgroundColorProxy();\n                }\n            }\n        },\n\n        _startHistory: function() {\n            if (this.options.browserHistory) {\n                this.router = new kendo.Router({ pushState: this.options.pushState, root: this.options.root, hashBang: this.options.hashBang });\n                this.pane.bindToRouter(this.router);\n                this.router.start();\n            } else {\n                if (!this.options.initial) {\n                    this.pane.navigate(\"\");\n                }\n            }\n        },\n\n        _resizeToScreenHeight: function() {\n            var includeStatusBar = $(\"meta[name=apple-mobile-web-app-status-bar-style]\").attr(\"content\").match(/black-translucent|hidden/),\n                element = this.element,\n                height;\n\n            if (CHROME) {\n                height = window.innerHeight;\n            } else {\n                if (isOrientationHorizontal(element)) {\n                    if (includeStatusBar) {\n                        if (INITIALLY_HORIZONTAL) {\n                            height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n                        } else {\n                            height = SCREEN.availWidth;\n                        }\n                    } else {\n                        if (INITIALLY_HORIZONTAL) {\n                            height = SCREEN.availWidth;\n                        } else {\n                            height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n                        }\n                    }\n                } else {\n                    if (includeStatusBar) {\n                        if (INITIALLY_HORIZONTAL) {\n                            height = SCREEN.availHeight;\n                        } else {\n                            height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n                        }\n                    } else {\n                        if (INITIALLY_HORIZONTAL) {\n                            height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n                        } else {\n                            height = SCREEN.availHeight;\n                        }\n                    }\n                }\n            }\n\n            element.height(height);\n        },\n\n        _setupElementClass: function() {\n            var that = this, size,\n                element = that.element;\n\n            element.parent().addClass(\"km-root km-\" + (that.os.tablet ? \"tablet\" : \"phone\"));\n            element.addClass(that.osCssClass + \" \" + getOrientationClass(element));\n            if (this.options.useNativeScrolling) {\n                element.parent().addClass(\"km-native-scrolling\");\n            }\n\n            if (CHROME) {\n                element.addClass(\"km-ios-chrome\");\n            }\n\n            if (support.wpDevicePixelRatio) {\n                element.parent().css(\"font-size\", support.wpDevicePixelRatio + \"em\");\n            }\n\n            if (BERRYPHONEGAP) {\n                applyViewportHeight();\n            }\n            if (that.options.useNativeScrolling) {\n                element.parent().addClass(\"km-native-scrolling\");\n            } else if (ENABLE_CLIP) {\n                size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n                $(clipTemplate({ width: size, height: size })).appendTo(HEAD);\n            }\n\n            if (BROKEN_WEBVIEW_RESIZE) {\n                that._resizeToScreenHeight();\n            }\n\n            kendo.onResize(function() {\n                element\n                    .removeClass(\"km-horizontal km-vertical\")\n                    .addClass(getOrientationClass(element));\n\n                if (that.options.useNativeScrolling) {\n                    setMinimumHeight(element);\n                }\n\n                if (BROKEN_WEBVIEW_RESIZE) {\n                    that._resizeToScreenHeight();\n                }\n\n                if (BERRYPHONEGAP) {\n                    applyViewportHeight();\n                }\n\n                kendo.resize(element);\n            });\n        },\n\n        _clearExistingMeta: function() {\n            HEAD.find(\"meta\")\n                .filter(\"[name|='apple-mobile-web-app'],[name|='msapplication-tap'],[name='viewport']\")\n                .remove();\n        },\n\n        _attachMeta: function() {\n            var options = this.options,\n                icon = options.icon, size;\n\n            this._clearExistingMeta();\n\n            if (!BERRYPHONEGAP) {\n                HEAD.prepend(viewportMeta);\n            }\n\n            HEAD.prepend(systemMeta(options));\n\n            if (icon) {\n                if (typeof icon === \"string\") {\n                    icon = { \"\" : icon };\n                }\n\n                for(size in icon) {\n                    HEAD.prepend(iconMeta({ icon: icon[size], size: size }));\n                }\n            }\n\n            if (options.useNativeScrolling) {\n                setMinimumHeight(this.element);\n            }\n        },\n\n        _attachHideBarHandlers: function() {\n            var that = this,\n                hideBar = proxy(that, \"_hideBar\");\n\n            if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n                return;\n            }\n\n            that._initialHeight = {};\n\n            WINDOW.on(\"load\", hideBar);\n\n            kendo.onResize(function() {\n                setTimeout(window.scrollTo, 0, 0, 1);\n            });\n        },\n\n        _setupDocumentTitle: function() {\n            var that = this,\n                defaultTitle = document.title;\n\n            that.pane.bind(\"viewShow\", function(e) {\n                var title = e.view.title;\n                document.title = title !== undefined ? title : defaultTitle;\n            });\n        },\n\n        _hideBar: function() {\n            var that = this,\n                element = that.element;\n\n            element.height(kendo.support.transforms.css + \"calc(100% + \" + BARCOMPENSATION + \"px)\");\n            $(window).trigger(kendo.support.resize);\n        }\n    });\n\n    kendo.mobile.Application = Application;\n    kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        Widget = ui.Widget,\n        support = kendo.support,\n        os = support.mobileOS,\n        ANDROID3UP = os.android && os.flatVersion >= 300,\n        CLICK = \"click\",\n        DISABLED = \"disabled\",\n        DISABLEDSTATE = \"km-state-disabled\";\n\n    function highlightButton(widget, event, highlight) {\n        $(event.target).closest(\".km-button,.km-detail\").toggleClass(\"km-state-active\", highlight);\n\n        if (ANDROID3UP && widget.deactivateTimeoutID) {\n            clearTimeout(widget.deactivateTimeoutID);\n            widget.deactivateTimeoutID = 0;\n        }\n    }\n\n    function createBadge(value) {\n        return $('<span class=\"km-badge\">' + value + '</span>');\n    }\n\n    var Button = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that._wrap();\n            that._style();\n\n            that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n            that.enable(that.options.enable);\n\n            that._userEvents = new kendo.UserEvents(that.element, {\n                press: function(e) { that._activate(e); },\n                tap: function(e) { that._release(e); },\n                release: function(e) { highlightButton(that, e, false); }\n            });\n\n            if (ANDROID3UP) {\n                that.element.on(\"move\", function(e) { that._timeoutDeactivate(e); });\n            }\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this._userEvents.destroy();\n        },\n\n        events: [\n            CLICK\n        ],\n\n        options: {\n            name: \"Button\",\n            icon: \"\",\n            style: \"\",\n            badge: \"\",\n            enable: true\n        },\n\n        badge: function (value) {\n            var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n\n            if (value || value === 0) {\n                badge.html(value);\n                return this;\n            }\n\n            if (value === false) {\n                badge.empty().remove();\n                this.badgeElement = false;\n                return this;\n            }\n\n            return badge.html();\n        },\n\n        enable: function(enable) {\n            var element = this.element;\n\n            if(typeof enable == \"undefined\") {\n                enable = true;\n            }\n\n            this.options.enable = enable;\n\n            if(enable) {\n                element.removeAttr(DISABLED);\n            } else {\n                element.attr(DISABLED, DISABLED);\n            }\n\n            element.toggleClass(DISABLEDSTATE, !enable);\n        },\n\n        _timeoutDeactivate: function(e) {\n            if (!this.deactivateTimeoutID) {\n                this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n            }\n        },\n\n        _activate: function(e) {\n            var activeElement = document.activeElement,\n                nodeName = activeElement ? activeElement.nodeName : \"\";\n\n            if(this.options.enable) {\n                highlightButton(this, e, true);\n\n                if (nodeName == \"INPUT\" || nodeName == \"TEXTAREA\") {\n                    activeElement.blur(); // Hide device keyboard\n                }\n            }\n        },\n\n        _release: function(e) {\n            var that = this;\n\n            if (e.which > 1) {\n                return;\n            }\n\n            if(!that.options.enable) {\n                e.preventDefault();\n                return;\n            }\n\n            if (that.trigger(CLICK, {target: $(e.target), button: that.element})) {\n                e.preventDefault();\n            }\n        },\n\n        _style: function() {\n            var style = this.options.style,\n                element = this.element,\n                styles;\n\n            if (style) {\n                styles = style.split(\" \");\n                $.each(styles, function() {\n                    element.addClass(\"km-\" + this);\n                });\n            }\n        },\n\n        _wrap: function() {\n            var that = this,\n                icon = that.options.icon,\n                badge = that.options.badge,\n                iconSpan = '<span class=\"km-icon km-' + icon,\n                element = that.element.addClass(\"km-button\"),\n                span = element.children(\"span:not(.km-icon)\").addClass(\"km-text\"),\n                image = element.find(\"img\").addClass(\"km-image\");\n\n            if (!span[0] && element.html()) {\n                span = element.wrapInner('<span class=\"km-text\" />').children(\"span.km-text\");\n            }\n\n            if (!image[0] && icon) {\n                if (!span[0]) {\n                    iconSpan += \" km-notext\";\n                }\n                that.iconElement = element.prepend($(iconSpan + '\" />'));\n            }\n\n            if (badge || badge === 0) {\n                that.badgeElement = createBadge(badge).appendTo(element);\n            }\n        }\n    });\n\n    var BackButton = Button.extend({\n        options: {\n            name: \"BackButton\",\n            style: \"back\"\n        },\n\n        init: function(element, options) {\n            var that = this;\n            Button.fn.init.call(that, element, options);\n\n            if (typeof that.element.attr(\"href\") === \"undefined\") {\n                that.element.attr(\"href\", \"#:back\");\n            }\n        }\n    });\n\n    var DetailButton = Button.extend({\n        options: {\n            name: \"DetailButton\",\n            style: \"\"\n        },\n\n        init: function(element, options) {\n            Button.fn.init.call(this, element, options);\n        },\n\n        _style: function() {\n            var style = this.options.style + \" detail\",\n                element = this.element;\n\n            if (style) {\n                var styles = style.split(\" \");\n                $.each(styles, function() {\n                    element.addClass(\"km-\" + this);\n                });\n            }\n        },\n\n        _wrap: function() {\n            var that = this,\n                icon = that.options.icon,\n                iconSpan = '<span class=\"km-icon km-' + icon,\n                element = that.element,\n                span = element.children(\"span\"),\n                image = element.find(\"img\").addClass(\"km-image\");\n\n            if (!image[0] && icon) {\n                if (!span[0]) {\n                    iconSpan += \" km-notext\";\n                }\n                element.prepend($(iconSpan + '\" />'));\n            }\n        }\n\n    });\n\n    ui.plugin(Button);\n    ui.plugin(BackButton);\n    ui.plugin(DetailButton);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Widget = ui.Widget,\n        ACTIVE = \"km-state-active\",\n        DISABLE = \"km-state-disabled\",\n        SELECT = \"select\",\n        SELECTOR = \"li:not(.\" + ACTIVE +\")\";\n\n    function createBadge(value) {\n        return $('<span class=\"km-badge\">' + value + '</span>');\n    }\n\n    var ButtonGroup = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            that.element.addClass(\"km-buttongroup\").find(\"li\").each(that._button);\n\n            that.element.on(that.options.selectOn, SELECTOR, \"_select\");\n\n            that._enable = true;\n            that.select(that.options.index);\n\n            if(!that.options.enable) {\n                that._enable = false;\n                that.wrapper.addClass(DISABLE);\n            }\n        },\n\n        events: [\n            SELECT\n        ],\n\n        options: {\n            name: \"ButtonGroup\",\n            selectOn: \"down\",\n            index: -1,\n            enable: true\n        },\n\n        current: function() {\n            return this.element.find(\".\" + ACTIVE);\n        },\n\n        select: function (li) {\n            var that = this,\n                index = -1;\n\n            if (li === undefined || li === -1 || !that._enable || $(li).is(\".\" + DISABLE)) {\n                return;\n            }\n\n            that.current().removeClass(ACTIVE);\n\n            if (typeof li === \"number\") {\n                index = li;\n                li = $(that.element[0].children[li]);\n            } else if (li.nodeType) {\n                li = $(li);\n                index = li.index();\n            }\n\n            li.addClass(ACTIVE);\n            that.selectedIndex = index;\n        },\n\n        badge: function(item, value) {\n            var buttongroup = this.element, badge;\n\n            if (!isNaN(item)) {\n                item = buttongroup.children().get(item);\n            }\n\n            item = buttongroup.find(item);\n            badge = $(item.children(\".km-badge\")[0] || createBadge(value).appendTo(item));\n\n            if (value || value === 0) {\n                badge.html(value);\n                return this;\n            }\n\n            if (value === false) {\n                badge.empty().remove();\n                return this;\n            }\n\n            return badge.html();\n        },\n\n        enable: function(enable) {\n            var wrapper = this.wrapper;\n\n            if(typeof enable == \"undefined\") {\n                enable = true;\n            }\n\n            if(enable) {\n                wrapper.removeClass(DISABLE);\n            } else {\n                wrapper.addClass(DISABLE);\n            }\n\n            this._enable = this.options.enable = enable;\n        },\n\n        _button: function() {\n            var button = $(this).addClass(\"km-button\"),\n                icon = kendo.attrValue(button, \"icon\"),\n                badge = kendo.attrValue(button, \"badge\"),\n                span = button.children(\"span\"),\n                image = button.find(\"img\").addClass(\"km-image\");\n\n            if (!span[0]) {\n                span = button.wrapInner(\"<span/>\").children(\"span\");\n            }\n\n            span.addClass(\"km-text\");\n\n            if (!image[0] && icon) {\n                button.prepend($('<span class=\"km-icon km-' + icon + '\"/>'));\n            }\n\n            if (badge || badge === 0) {\n                createBadge(badge).appendTo(button);\n            }\n        },\n\n        _select: function(e) {\n            if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n                return;\n            }\n\n            this.select(e.currentTarget);\n            this.trigger(SELECT, { index: this.selectedIndex });\n        }\n    });\n\n    ui.plugin(ButtonGroup);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        Node = window.Node,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        DataSource = kendo.data.DataSource,\n        Widget = ui.DataBoundWidget,\n        ITEM_SELECTOR = \".km-list > li, > li:not(.km-group-container)\",\n        HIGHLIGHT_SELECTOR = \".km-listview-link, .km-listview-label\",\n        ICON_SELECTOR = \"[\" + kendo.attr(\"icon\") + \"]\",\n        proxy = $.proxy,\n        attrValue = kendo.attrValue,\n        GROUP_CLASS = \"km-group-title\",\n        ACTIVE_CLASS = \"km-state-active\",\n        GROUP_WRAPPER = '<div class=\"' + GROUP_CLASS + '\"><div class=\"km-text\"></div></div>',\n        GROUP_TEMPLATE = kendo.template('<li><div class=\"' + GROUP_CLASS + '\"><div class=\"km-text\">#= this.headerTemplate(data) #</div></div><ul>#= kendo.render(this.template, data.items)#</ul></li>'),\n        WRAPPER = '<div class=\"km-listview-wrapper\" />',\n        SEARCH_TEMPLATE = kendo.template('<form class=\"km-filter-form\"><div class=\"km-filter-wrap\"><input type=\"search\" placeholder=\"#=placeholder#\"/><a href=\"\\\\#\" class=\"km-filter-reset\" title=\"Clear\"><span class=\"km-icon km-clear\"></span><span class=\"km-text\">Clear</span></a></div></form>'),\n        NS = \".kendoMobileListView\",\n        STYLED = \"styled\",\n        DATABOUND = \"dataBound\",\n        DATABINDING = \"dataBinding\",\n        ITEM_CHANGE = \"itemChange\",\n        CLICK = \"click\",\n        CHANGE = \"change\",\n        PROGRESS = \"progress\",\n        FUNCTION = \"function\",\n\n        whitespaceRegExp = /^\\s+$/,\n        buttonRegExp = /button/;\n\n    function whitespace() {\n        return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n    }\n\n    function addIcon(item, icon) {\n        if (icon && !item[0].querySelector(\".km-icon\")) {\n            item.prepend('<span class=\"km-icon km-' + icon + '\"/>');\n        }\n    }\n\n    function enhanceItem(item) {\n        addIcon(item, attrValue(item, \"icon\"));\n        addIcon(item, attrValue(item.children(ICON_SELECTOR), \"icon\"));\n    }\n\n    function enhanceLinkItem(item) {\n        var parent = item.parent(),\n            itemAndDetailButtons = item.add(parent.children(kendo.roleSelector(\"detailbutton\"))),\n            otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n\n        if (otherNodes.length) {\n            return;\n        }\n\n        item.addClass(\"km-listview-link\")\n            .attr(kendo.attr(\"role\"), \"listview-link\");\n\n        addIcon(item, attrValue(parent, \"icon\"));\n        addIcon(item, attrValue(item, \"icon\"));\n    }\n\n    function enhanceCheckBoxItem(label) {\n        if (!label[0].querySelector(\"input[type=checkbox],input[type=radio]\")) {\n            return;\n        }\n\n        var item = label.parent();\n\n        if (item.contents().not(label).not(function() { return this.nodeType == 3; })[0]) {\n            return;\n        }\n\n        label.addClass(\"km-listview-label\");\n\n        label.children(\"[type=checkbox],[type=radio]\").addClass(\"km-widget km-icon km-check\");\n    }\n\n    function putAt(element, top) {\n        $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n    }\n\n    var HeaderFixer = kendo.Class.extend({\n        init: function(listView) {\n            var scroller = listView.scroller();\n\n            if (!scroller) {\n                return;\n            }\n\n            this.options = listView.options;\n            this.element = listView.element;\n            this.scroller = listView.scroller();\n            this._shouldFixHeaders();\n\n            var headerFixer = this;\n\n            var cacheHeaders = function() {\n                headerFixer._cacheHeaders();\n            };\n\n            listView.bind(\"resize\", cacheHeaders);\n\n            listView.bind(STYLED, cacheHeaders);\n            listView.bind(DATABOUND, cacheHeaders);\n\n            scroller.bind(\"scroll\", function(e) {\n                headerFixer._fixHeader(e);\n            });\n        },\n\n        _fixHeader: function(e) {\n            if (!this.fixedHeaders) {\n                return;\n            }\n\n            var i = 0,\n                scroller = this.scroller,\n                headers = this.headers,\n                scrollTop = e.scrollTop,\n                headerPair,\n                offset,\n                header;\n\n            do {\n                headerPair = headers[i++];\n                if (!headerPair) {\n                    header = $(\"<div />\");\n                    break;\n                }\n                offset = headerPair.offset;\n                header = headerPair.header;\n            } while (offset + 1 > scrollTop);\n\n            if (this.currentHeader != i) {\n                scroller.fixedContainer.html(header.clone());\n                this.currentHeader = i;\n            }\n        },\n\n        _shouldFixHeaders: function() {\n            this.fixedHeaders = this.options.type === \"group\" && this.options.fixedHeaders;\n        },\n\n        _cacheHeaders: function() {\n            this._shouldFixHeaders();\n\n            if (!this.fixedHeaders) {\n                return;\n            }\n\n            var headers = [], offset = this.scroller.scrollTop;\n\n            this.element.find(\".\" + GROUP_CLASS).each(function(_, header) {\n                header = $(header);\n                headers.unshift({\n                    offset: header.position().top + offset,\n                    header: header\n                });\n            });\n\n            this.headers = headers;\n            this._fixHeader({ scrollTop: offset });\n        }\n    });\n\n    var DEFAULT_PULL_PARAMETERS = function() {\n        return { page: 1 };\n    };\n\n    var RefreshHandler = kendo.Class.extend({\n        init: function(listView) {\n            var handler = this,\n                options = listView.options,\n                scroller = listView.scroller(),\n                pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n\n            this.listView = listView;\n            this.scroller = scroller;\n\n            listView.bind(\"_dataSource\", function(e) {\n                handler.setDataSource(e.dataSource);\n            });\n\n            scroller.setOptions({\n                pullToRefresh: true,\n                pull: function() {\n                    if (!handler._pulled) {\n                        handler._pulled = true;\n                        handler.dataSource.read(pullParameters.call(listView, handler._first));\n                    }\n                },\n                messages: {\n                    pullTemplate: options.messages.pullTemplate,\n                    releaseTemplate: options.messages.releaseTemplate,\n                    refreshTemplate: options.messages.refreshTemplate\n                }\n            });\n        },\n\n        setDataSource: function(dataSource) {\n            var handler = this;\n\n            this._first = dataSource.view()[0];\n            this.dataSource = dataSource;\n\n            dataSource.bind(\"change\", function() {\n                handler._change();\n            });\n\n            dataSource.bind(\"error\", function() {\n                handler._change();\n            });\n        },\n\n        _change: function() {\n            var scroller = this.scroller,\n                dataSource = this.dataSource;\n\n            if (this._pulled) {\n                scroller.pullHandled();\n            }\n\n            if (this._pulled || !this._first) {\n                var view = dataSource.view();\n\n                if (view[0]) {\n                    this._first = view[0];\n                }\n            }\n\n            this._pulled = false;\n        }\n    });\n\n    var VirtualList = kendo.Observable.extend({\n        init: function(options) {\n            var list = this;\n\n            kendo.Observable.fn.init.call(list);\n\n            list.buffer = options.buffer;\n            list.height = options.height;\n            list.item = options.item;\n            list.items = [];\n            list.footer = options.footer;\n\n            list.buffer.bind(\"reset\", function() {\n                list.refresh();\n            });\n\n        },\n\n        refresh: function() {\n            var buffer = this.buffer,\n                items = this.items,\n                endReached = false;\n\n            while(items.length) {\n                items.pop().destroy();\n            }\n\n            this.offset = buffer.offset;\n\n            var itemConstructor = this.item,\n                prevItem,\n                item;\n\n            for (var idx = 0; idx < buffer.viewSize; idx ++) {\n                if (idx === buffer.total()) {\n                    endReached = true;\n                    break;\n                }\n                item = itemConstructor(this.content(this.offset + items.length));\n                item.below(prevItem);\n                prevItem = item;\n                items.push(item);\n            }\n\n            this.itemCount = items.length;\n\n            this.trigger(\"reset\");\n\n            this._resize();\n\n            if (endReached) {\n                this.trigger(\"endReached\");\n            }\n        },\n\n        totalHeight: function() {\n            if (!this.items[0]) {\n                return 0;\n            }\n\n            var list = this,\n                items = list.items,\n                top = items[0].top,\n                bottom = items[items.length - 1].bottom,\n                averageItemHeight = (bottom - top) / list.itemCount,\n                remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n\n            return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n        },\n\n        batchUpdate: function(top) {\n            var height = this.height(),\n                items = this.items,\n                item,\n                initialOffset = this.offset;\n\n            if (!items[0]) {\n                return;\n            }\n\n            if (this.lastDirection) { // scrolling up\n                while(items[items.length - 1].bottom > top + height * 2) {\n                    if (this.offset === 0) {\n                        break;\n                    }\n\n                    this.offset --;\n                    item = items.pop();\n                    item.update(this.content(this.offset));\n                    item.above(items[0]);\n                    items.unshift(item);\n                }\n            } else { // scrolling down\n                while (items[0].top < top - height) {\n                    var nextIndex = this.offset + this.itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n                    if (nextIndex === this.buffer.total()) {\n                        this.trigger(\"endReached\");\n                        break;\n                    }\n\n                    if (nextIndex === this.buffer.length) {\n                        break;\n                    }\n\n                    item = items.shift();\n                    item.update(this.content(this.offset + this.itemCount));\n                    item.below(items[items.length - 1]);\n                    items.push(item);\n                    this.offset ++;\n                }\n            }\n\n            if (initialOffset !== this.offset) {\n                this._resize();\n            }\n        },\n\n        update: function(top) {\n            var list = this,\n                items = this.items,\n                item,\n                firstItem,\n                lastItem,\n                height = this.height(),\n                itemCount = this.itemCount,\n                padding = height / 2,\n                up = (this.lastTop || 0) > top,\n                topBorder = top - padding,\n                bottomBorder = top + height + padding;\n\n            if (!items[0]) {\n                return;\n            }\n\n            this.lastTop = top;\n            this.lastDirection = up;\n\n            if (up) { // scrolling up\n               if (items[0].top > topBorder &&  // needs reorder\n                   items[items.length - 1].bottom > bottomBorder + padding && // enough padding below\n                   this.offset > 0 // we are not at the top\n                  )\n               {\n                    this.offset --;\n                    item = items.pop();\n                    firstItem = items[0];\n                    item.update(this.content(this.offset));\n                    items.unshift(item);\n\n                    item.above(firstItem);\n                    list._resize();\n               }\n            } else { // scrolling down\n                if (\n                    items[items.length - 1].bottom < bottomBorder && // needs reorder\n                    items[0].top < topBorder - padding // enough padding above\n                )\n                {\n                    var nextIndex = this.offset + itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n                    if (nextIndex === this.buffer.total()) {\n                        this.trigger(\"endReached\");\n                    } else if (nextIndex !== this.buffer.length) {\n                        item = items.shift();\n                        lastItem = items[items.length - 1];\n                        items.push(item);\n                        item.update(this.content(this.offset + this.itemCount));\n                        list.offset ++;\n\n                        item.below(lastItem);\n                        list._resize();\n                    }\n                }\n            }\n        },\n\n        content: function(index) {\n            return this.buffer.at(index);\n        },\n\n        destroy: function() {\n            this.unbind();\n        },\n\n        _resize: function() {\n            var items = this.items,\n                top = 0,\n                bottom = 0,\n                firstItem = items[0],\n                lastItem = items[items.length - 1];\n\n            if (firstItem) {\n                top = firstItem.top;\n                bottom = lastItem.bottom;\n            }\n\n            this.trigger(\"resize\", { top: top, bottom: bottom });\n\n            if (this.footer) {\n                this.footer.below(lastItem);\n            }\n        }\n    });\n\n    // export for testing purposes\n    kendo.mobile.ui.VirtualList = VirtualList;\n\n    var VirtualListViewItem = kendo.Class.extend({\n        init: function(listView, dataItem) {\n            var element = listView.append([dataItem], true)[0],\n                height = element.offsetHeight;\n\n            $.extend(this, {\n                top: 0,\n                element: element,\n                listView: listView,\n                height: height,\n                bottom: height\n            });\n        },\n\n        update: function(dataItem) {\n            this.element = this.listView.setDataItem(this.element, dataItem);\n        },\n\n        above: function(item) {\n            if (item) {\n                this.height = this.element.offsetHeight;\n                this.top = item.top - this.height;\n                this.bottom = item.top;\n                putAt(this.element, this.top);\n            }\n        },\n\n        below: function(item) {\n            if (item) {\n                this.height = this.element.offsetHeight;\n                this.top = item.bottom;\n                this.bottom = this.top + this.height;\n                putAt(this.element, this.top);\n            }\n        },\n\n        destroy: function() {\n            kendo.destroy(this.element);\n            $(this.element).remove();\n        }\n    });\n\n    var LOAD_ICON = '<div><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>';\n    var VirtualListViewLoadingIndicator = kendo.Class.extend({\n        init: function(listView) {\n            this.element = $('<li class=\"km-load-more km-scroller-refresh\" style=\"display: none\"></li>').appendTo(listView.element);\n            this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n        },\n\n        enable: function() {\n            this.element.show();\n            this.height = this.element.outerHeight(true);\n        },\n\n        disable: function() {\n            this.element.hide();\n            this.height = 0;\n        },\n\n        below: function(item) {\n            if (item) {\n                this.top = item.bottom;\n                this.bottom = this.height + this.top;\n                putAt(this.element, this.top);\n            }\n        }\n    });\n\n    var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n        init: function(listView, buffer) {\n\n            this._loadIcon = $(LOAD_ICON).hide();\n            this._loadButton = $('<a class=\"km-load\">' + listView.options.messages.loadMoreText + '</a>').hide();\n            this.element = $('<li class=\"km-load-more\" style=\"display: none\"></li>').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n\n            var loadMore = this;\n\n            this._loadButton.kendoMobileButton().data(\"kendoMobileButton\").bind(\"click\", function() {\n                loadMore._hideShowButton();\n                buffer.next();\n            });\n\n            buffer.bind(\"resize\", function() {\n                loadMore._showLoadButton();\n            });\n\n            this.height = this.element.outerHeight(true);\n            this.disable();\n        },\n\n        _hideShowButton: function() {\n            this._loadButton.hide();\n            this.element.addClass(\"km-scroller-refresh\");\n            this._loadIcon.css('display', 'block');\n        },\n\n        _showLoadButton: function() {\n            this._loadButton.show();\n            this.element.removeClass(\"km-scroller-refresh\");\n            this._loadIcon.hide();\n        }\n    });\n\n    var VirtualListViewItemBinder = kendo.Class.extend({\n        init: function(listView) {\n            var binder = this;\n\n            this.chromeHeight = listView.wrapper.children().not(listView.element).outerHeight() || 0;\n            this.listView = listView;\n            this.scroller = listView.scroller();\n            this.options = listView.options;\n\n            listView.bind(\"_dataSource\", function(e) {\n                binder.setDataSource(e.dataSource, e.empty);\n            });\n\n            listView.bind(\"resize\", function() {\n                if (!binder.list.items.length) {\n                    return;\n                }\n\n                binder.scroller.reset();\n                binder.buffer.range(0);\n                binder.list.refresh();\n            });\n\n            this.scroller.makeVirtual();\n\n            this.scroller.bind(\"scroll\", function(e) {\n                binder.list.update(e.scrollTop);\n            });\n\n            this.scroller.bind(\"scrollEnd\", function(e) {\n                binder.list.batchUpdate(e.scrollTop);\n            });\n        },\n\n        destroy: function() {\n            this.list.unbind();\n            this.buffer.unbind();\n        },\n\n        setDataSource: function(dataSource, empty) {\n            var binder = this,\n                options = this.options,\n                listView = this.listView,\n                scroller = listView.scroller(),\n                pressToLoadMore = options.loadMore,\n                pageSize,\n                buffer,\n                footer;\n\n            this.dataSource = dataSource;\n\n            pageSize = dataSource.pageSize() || options.virtualViewSize;\n\n            if (!pageSize && !empty) {\n                throw new Error(\"the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.\");\n            }\n\n            if (this.buffer) {\n                this.buffer.destroy();\n            }\n\n            buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n\n            if (pressToLoadMore) {\n                footer = new VirtualListViewPressToLoadMore(listView, buffer);\n            } else {\n                footer = new VirtualListViewLoadingIndicator(listView);\n            }\n\n            if (this.list) {\n                this.list.destroy();\n            }\n\n            var list = new VirtualList({\n                buffer: buffer,\n                footer: footer,\n                item: function(dataItem) { return new VirtualListViewItem(listView, dataItem); },\n                height: function() { return scroller.height(); }\n            });\n\n            list.bind(\"resize\", function() {\n                binder.updateScrollerSize();\n                listView.updateSize();\n            });\n\n            list.bind(\"reset\", function() {\n                binder.footer.enable();\n            });\n\n            list.bind(\"endReached\", function() {\n                footer.disable();\n                binder.updateScrollerSize();\n            });\n\n            buffer.bind(\"expand\", function() {\n                list.lastDirection = false; // expand down\n                list.batchUpdate(scroller.scrollTop);\n            });\n\n            $.extend(this, {\n                buffer: buffer,\n                scroller: scroller,\n                list: list,\n                footer: footer\n            });\n        },\n\n        updateScrollerSize: function() {\n            this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n        },\n\n        refresh: function() {\n            this.list.refresh();\n        },\n\n        reset: function() {\n            this.buffer.range(0);\n            this.list.refresh();\n        }\n    });\n\n    var ListViewItemBinder = kendo.Class.extend({\n        init: function(listView) {\n            var binder = this;\n            this.listView = listView;\n            this.options = listView.options;\n\n            var itemBinder = this;\n\n            this._refreshHandler = function(e) {\n                itemBinder.refresh(e);\n            };\n\n            this._progressHandler = function() {\n                listView.showLoading();\n            };\n\n            listView.bind(\"_dataSource\", function(e) {\n                binder.setDataSource(e.dataSource);\n            });\n        },\n\n        destroy: function() {\n            this._unbindDataSource();\n        },\n\n        reset: function() { },\n\n        refresh: function(e) {\n            var action = e && e.action,\n                dataItems = e && e.items,\n                listView = this.listView,\n                dataSource = this.dataSource,\n                prependOnRefresh = this.options.appendOnRefresh,\n                view = dataSource.view(),\n                groups = dataSource.group(),\n                groupedMode = groups && groups[0],\n                item;\n\n            if (action === \"itemchange\") {\n                item = listView.findByDataItem(dataItems)[0];\n                if (item) {\n                    listView.setDataItem(item, dataItems[0]);\n                }\n                return;\n            }\n\n            var removedItems, addedItems, addedDataItems;\n            var adding = (action === \"add\" && !groupedMode) || (prependOnRefresh && !listView._filter);\n            var removing = action === \"remove\" && !groupedMode;\n\n            if (adding) {\n                // no need to unbind anything\n                removedItems = [];\n            } else if (removing) {\n                // unbind the items about to be removed;\n                removedItems = listView.findByDataItem(dataItems);\n            }\n\n            if (listView.trigger(DATABINDING, { action: action || \"rebind\", items: dataItems, removedItems: removedItems, index: e && e.index })) {\n                if (this._shouldShowLoading()) {\n                    listView.hideLoading();\n                }\n                return;\n            }\n\n            if (action === \"add\" && !groupedMode) {\n                var index = view.indexOf(dataItems[0]);\n                if (index > -1) {\n                    addedItems = listView.insertAt(dataItems, index);\n                    addedDataItems = dataItems;\n                }\n            } else if (action === \"remove\" && !groupedMode) {\n                addedItems = [];\n                listView.remove(dataItems);\n            } else if (groupedMode) {\n                listView.replaceGrouped(view);\n            }\n            else if (prependOnRefresh && !listView._filter) {\n                addedItems = listView.prepend(view);\n                addedDataItems = view;\n            }\n            else {\n                listView.replace(view);\n            }\n\n            if (this._shouldShowLoading()) {\n                listView.hideLoading();\n            }\n\n            listView.trigger(DATABOUND, { ns: ui, addedItems: addedItems, addedDataItems: addedDataItems });\n        },\n\n        setDataSource: function(dataSource) {\n            if (this.dataSource) {\n                this._unbindDataSource();\n            }\n\n            this.dataSource = dataSource;\n            dataSource.bind(CHANGE, this._refreshHandler);\n\n            if (this._shouldShowLoading()) {\n                this.dataSource.bind(PROGRESS, this._progressHandler);\n            }\n        },\n\n        _unbindDataSource: function() {\n            this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n        },\n\n        _shouldShowLoading: function() {\n            var options = this.options;\n            return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n        }\n    });\n\n    var ListViewFilter = kendo.Class.extend({\n        init: function(listView) {\n            var filter = this,\n                filterable = listView.options.filterable,\n                events = \"change paste\";\n\n            this.listView = listView;\n            this.options = filterable;\n\n            listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || \"Search...\" }));\n\n            if (filterable.autoFilter !== false) {\n                events += \" keyup\";\n            }\n\n            this.element = listView.wrapper.find(\".km-search-form\");\n\n            this.searchInput = listView.wrapper.find(\"input[type=search]\")\n                .closest(\"form\").on(\"submit\" + NS, function(e) {\n                    e.preventDefault();\n                })\n                .end()\n                .on(\"focus\" + NS, function() {\n                    filter._oldFilter = filter.searchInput.val();\n                })\n                .on(events.split(\" \").join(NS + \" \") + NS, proxy(this._filterChange, this));\n\n            this.clearButton = listView.wrapper.find(\".km-filter-reset\")\n                .on(CLICK, proxy(this, \"_clearFilter\"))\n                .hide();\n        },\n\n        _search: function(expr) {\n            this._filter = true;\n            this.clearButton[expr ? \"show\" : \"hide\"]();\n            this.listView.dataSource.filter(expr);\n        },\n\n        _filterChange: function(e) {\n            var filter = this;\n            if (e.type == \"paste\" && this.options.autoFilter !== false) {\n                setTimeout(function() {\n                    filter._applyFilter();\n                }, 1);\n            } else {\n                this._applyFilter();\n            }\n        },\n\n        _applyFilter: function() {\n            var options = this.options,\n                value = this.searchInput.val(),\n                expr = value.length ? {\n                    field: options.field,\n                    operator: options.operator || \"startsWith\",\n                    ignoreCase: options.ignoreCase,\n                    value: value\n                } : null;\n\n            if (value === this._oldFilter) {\n                return;\n            }\n\n            this._oldFilter = value;\n            this._search(expr);\n        },\n\n        _clearFilter: function(e) {\n            this.searchInput.val(\"\");\n            this._search(null);\n\n            e.preventDefault();\n        }\n    });\n\n    var ListView = Widget.extend({\n        init: function(element, options) {\n            var listView = this;\n\n            Widget.fn.init.call(this, element, options);\n\n            element = this.element;\n\n            options = this.options;\n\n            // support for legacy typo in configuration options: scrollTreshold -> scrollThreshold.\n            if (options.scrollTreshold) {\n                options.scrollThreshold = options.scrollTreshold;\n            }\n\n            element\n                .on(\"down\", HIGHLIGHT_SELECTOR, \"_highlight\")\n                .on(\"move up cancel\", HIGHLIGHT_SELECTOR, \"_dim\");\n\n            this._userEvents = new kendo.UserEvents(element, {\n                filter: ITEM_SELECTOR,\n                allowSelection: true,\n                tap: function(e) {\n                    listView._click(e);\n                }\n            });\n\n            // HACK!!! to negate the ms touch action from the user events.\n            element.css(\"-ms-touch-action\", \"auto\");\n\n            element.wrap(WRAPPER);\n\n            this.wrapper = this.element.parent();\n\n            this._headerFixer = new HeaderFixer(this);\n\n            this._itemsCache = {};\n            this._templates();\n\n            this.virtual = options.endlessScroll || options.loadMore;\n\n            this._style();\n\n            if (this.options.filterable) {\n                this._filter = new ListViewFilter(this);\n            }\n\n            if (this.virtual) {\n                this._itemBinder = new VirtualListViewItemBinder(this);\n            } else {\n                this._itemBinder = new ListViewItemBinder(this);\n            }\n\n            if (this.options.pullToRefresh) {\n                this._pullToRefreshHandler = new RefreshHandler(this);\n            }\n\n            this.setDataSource(options.dataSource);\n\n            this._enhanceItems(this.items());\n\n            kendo.notify(this, ui);\n        },\n\n        events: [\n            CLICK,\n            DATABINDING,\n            DATABOUND,\n            ITEM_CHANGE\n        ],\n\n        options: {\n            name: \"ListView\",\n            style: \"\",\n            type: \"flat\",\n            autoBind: true,\n            fixedHeaders: false,\n            template: \"#:data#\",\n            headerTemplate: '<span class=\"km-text\">#:value#</span>',\n            appendOnRefresh: false,\n            loadMore: false,\n            endlessScroll: false,\n            scrollThreshold: 30,\n            pullToRefresh: false,\n            messages: {\n                loadMoreText: \"Press to load more\",\n                pullTemplate: \"Pull to refresh\",\n                releaseTemplate: \"Release to refresh\",\n                refreshTemplate: \"Refreshing\"\n            },\n            pullOffset: 140,\n            filterable: false,\n            virtualViewSize: null\n        },\n\n        refresh: function() {\n            this._itemBinder.refresh();\n        },\n\n        reset: function() {\n            this._itemBinder.reset();\n        },\n\n        setDataSource: function(dataSource) {\n            // the listView should have a ready datasource for MVVM to function properly. But an empty datasource should not empty the element\n            var emptyDataSource = !dataSource;\n            this.dataSource = DataSource.create(dataSource);\n\n            this.trigger(\"_dataSource\", { dataSource: this.dataSource, empty: emptyDataSource });\n\n            if (this.options.autoBind && !emptyDataSource) {\n                this.items().remove();\n                this.dataSource.fetch();\n            }\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            kendo.destroy(this.element);\n            this._userEvents.destroy();\n            if (this._itemBinder) {\n                this._itemBinder.destroy();\n            }\n\n            this.element.unwrap();\n            delete this.element;\n            delete this.wrapper;\n            delete this._userEvents;\n        },\n\n        items: function() {\n            if (this.options.type === \"group\") {\n                return this.element.find(\".km-list\").children();\n            } else {\n                return this.element.children().not('.km-load-more');\n            }\n        },\n\n        scroller: function() {\n            if (!this._scrollerInstance) {\n                this._scrollerInstance = this.element.closest(\".km-scroll-wrapper\").data(\"kendoMobileScroller\");\n            }\n\n            return this._scrollerInstance;\n        },\n\n        showLoading: function() {\n            var view = this.view();\n            if (view && view.loader) {\n                view.loader.show();\n            }\n        },\n\n        hideLoading: function() {\n            var view = this.view();\n            if (view && view.loader) {\n                view.loader.hide();\n            }\n        },\n\n        insertAt: function(dataItems, index, triggerChange) {\n            var listView = this;\n            return listView._renderItems(dataItems, function(items) {\n                if (index === 0) {\n                    listView.element.prepend(items);\n                }\n                else if (index === -1) {\n                    listView.element.append(items);\n                } else {\n                    listView.items().eq(index - 1).after(items);\n                }\n\n                if (triggerChange) {\n                    for (var i = 0; i < items.length; i ++) {\n                        listView.trigger(ITEM_CHANGE, { item: items.eq(i), data: dataItems[i], ns: ui });\n                    }\n                }\n            });\n        },\n\n        append: function(dataItems, triggerChange) {\n            return this.insertAt(dataItems, -1, triggerChange);\n        },\n\n        prepend: function(dataItems, triggerChange) {\n            return this.insertAt(dataItems, 0, triggerChange);\n        },\n\n        replace: function(dataItems) {\n            this.options.type = \"flat\";\n            this._angularItems(\"cleanup\");\n            this.element.empty();\n            this._style();\n            return this.insertAt(dataItems, 0);\n        },\n\n        replaceGrouped: function(groups) {\n            this.options.type = \"group\";\n            this._angularItems(\"cleanup\");\n            this.element.empty();\n            var items = $(kendo.render(this.groupTemplate, groups));\n\n            this._enhanceItems(items.children(\"ul\").children(\"li\"));\n            this.element.append(items);\n            mobile.init(items);\n            this._style();\n            this._angularItems(\"compile\");\n        },\n\n        remove: function(dataItems) {\n            var items = this.findByDataItem(dataItems);\n            this.angular(\"cleanup\", function(){\n                return { elements: items };\n            });\n            kendo.destroy(items);\n            items.remove();\n        },\n\n        findByDataItem: function(dataItems) {\n            var selectors = [];\n\n            for (var idx = 0, length = dataItems.length; idx < length; idx ++) {\n                selectors[idx] = \"[data-\" + kendo.ns + \"uid=\" + dataItems[idx].uid + \"]\";\n            }\n\n            return this.element.find(selectors.join(\",\"));\n        },\n\n        // item is a DOM element, not jQuery object.\n        setDataItem: function(item, dataItem) {\n            var listView = this,\n                replaceItem = function(items) {\n                    var newItem = $(items[0]);\n                    kendo.destroy(item);\n                    $(item).replaceWith(newItem);\n                    listView.trigger(ITEM_CHANGE, { item: newItem, data: dataItem, ns: ui });\n                };\n\n            return this._renderItems([dataItem], replaceItem)[0];\n        },\n\n        updateSize: function() {\n            this._size = this.getSize();\n        },\n\n        _renderItems: function(dataItems, callback) {\n            var items = $(kendo.render(this.template, dataItems));\n\n            this.angular(\"compile\", function(){\n                return {\n                    elements: items,\n                    data: dataItems.map(function(data){\n                        return { dataItem: data };\n                    })\n                };\n            });\n\n            callback(items);\n            mobile.init(items);\n            this._enhanceItems(items);\n\n            return items;\n        },\n\n        _dim: function(e) {\n            this._toggle(e, false);\n        },\n\n        _highlight: function(e) {\n            this._toggle(e, true);\n        },\n\n        _toggle: function(e, highlight) {\n            if (e.which > 1) {\n                return;\n            }\n\n            var clicked = $(e.currentTarget),\n                item = clicked.parent(),\n                role = attrValue(clicked, \"role\") || \"\",\n                plainItem = (!role.match(buttonRegExp)),\n                prevented = e.isDefaultPrevented();\n\n            if (plainItem) {\n                item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n            }\n        },\n\n        _templates: function() {\n            var template = this.options.template,\n                headerTemplate = this.options.headerTemplate,\n                dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"',\n                templateProxy = {},\n                groupTemplateProxy = {};\n\n            if (typeof template === FUNCTION) {\n                templateProxy.template = template;\n                template = \"#=this.template(data)#\";\n            }\n\n            this.template = proxy(kendo.template(\"<li\" + dataIDAttribute + \">\" + template + \"</li>\"), templateProxy);\n\n            groupTemplateProxy.template = this.template;\n\n            if (typeof headerTemplate === FUNCTION) {\n                groupTemplateProxy._headerTemplate = headerTemplate;\n                headerTemplate = \"#=this._headerTemplate(data)#\";\n            }\n\n            groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n\n            this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n        },\n\n        _click: function(e) {\n            if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n                return;\n            }\n\n            var dataItem,\n                item = e.target,\n                target = $(e.event.target),\n                buttonElement = target.closest(kendo.roleSelector(\"button\", \"detailbutton\", \"backbutton\")),\n                button = kendo.widgetInstance(buttonElement, ui),\n                id = item.attr(kendo.attr(\"uid\"));\n\n            if (id) {\n                dataItem = this.dataSource.getByUid(id);\n            }\n\n            if (this.trigger(CLICK, {target: target, item: item, dataItem: dataItem, button: button})) {\n                e.preventDefault();\n            }\n        },\n\n        _styleGroups: function() {\n            var rootItems = this.element.children();\n\n            rootItems.children(\"ul\").addClass(\"km-list\");\n\n            rootItems.each(function() {\n                var li = $(this),\n                    groupHeader = li.contents().first();\n\n                li.addClass(\"km-group-container\");\n                if (!groupHeader.is(\"ul\") && !groupHeader.is(\"div.\" + GROUP_CLASS)) {\n                    groupHeader.wrap(GROUP_WRAPPER);\n                }\n            });\n        },\n\n        _style: function() {\n            var options = this.options,\n                grouped = options.type === \"group\",\n                element = this.element,\n                inset = options.style === \"inset\";\n\n            element.addClass(\"km-listview\")\n                .toggleClass(\"km-list\", !grouped)\n                .toggleClass(\"km-virtual-list\", this.virtual)\n                .toggleClass(\"km-listinset\", !grouped && inset)\n                .toggleClass(\"km-listgroup\", grouped && !inset)\n                .toggleClass(\"km-listgroupinset\", grouped && inset);\n\n            if (!element.parents(\".km-listview\")[0]) {\n                element.closest(\".km-content\").toggleClass(\"km-insetcontent\", inset); // iOS has white background when the list is not inset.\n            }\n\n            if (grouped) {\n                this._styleGroups();\n            }\n\n            this.trigger(STYLED);\n        },\n\n        _enhanceItems: function(items) {\n            items.each(function() {\n                var item = $(this),\n                    child,\n                    enhanced = false;\n\n                item.children().each(function() {\n                    child = $(this);\n                    if (child.is(\"a\")) {\n                        enhanceLinkItem(child);\n                        enhanced = true;\n                    } else if (child.is(\"label\")) {\n                        enhanceCheckBoxItem(child);\n                        enhanced = true;\n                    }\n                });\n\n                if (!enhanced) {\n                    enhanceItem(item);\n                }\n            });\n        }\n    });\n\n    ui.plugin(ListView);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        Widget = ui.Widget;\n\n    function createContainer(align, element) {\n        var items = element.find(\"[\" + kendo.attr(\"align\") + \"=\" + align + \"]\");\n\n        if (items[0]) {\n            return $('<div class=\"km-' + align + 'item\" />').append(items).prependTo(element);\n        }\n    }\n\n    function toggleTitle(centerElement) {\n        var siblings = centerElement.siblings(),\n            noTitle = !!centerElement.children(\"ul\")[0],\n            showTitle = (!!siblings[0] && $.trim(centerElement.text()) === \"\"),\n            android = kendo.mobile.application && kendo.mobile.application.element.is(\".km-android\");\n\n        centerElement.prevAll().toggleClass(\"km-absolute\", noTitle);\n        centerElement.toggleClass(\"km-show-title\", showTitle);\n        centerElement.toggleClass(\"km-fill-title\", showTitle && !$.trim(centerElement.html()));\n        centerElement.toggleClass(\"km-no-title\", noTitle);\n        centerElement.toggleClass(\"km-hide-title\", android && !siblings.children().is(\":visible\"));\n    }\n\n    var NavBar = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n\n            that.container().bind(\"show\", $.proxy(this, \"refresh\"));\n\n            element.addClass(\"km-navbar\").wrapInner($('<div class=\"km-view-title km-show-title\" />'));\n            that.leftElement = createContainer(\"left\", element);\n            that.rightElement = createContainer(\"right\", element);\n            that.centerElement = element.find(\".km-view-title\");\n        },\n\n        options: {\n            name: \"NavBar\"\n        },\n\n        title: function(value) {\n            this.element.find(kendo.roleSelector(\"view-title\")).text(value);\n            toggleTitle(this.centerElement);\n        },\n\n        refresh: function(e) {\n            var view = e.view;\n            if (view.options.title) {\n                this.title(view.options.title);\n            } else {\n                toggleTitle(this.centerElement);\n            }\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            kendo.destroy(this.element);\n        }\n    });\n\n    ui.plugin(NavBar);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        ui = mobile.ui,\n        proxy = $.proxy,\n        Transition = kendo.effects.Transition,\n        Pane = kendo.ui.Pane,\n        PaneDimensions = kendo.ui.PaneDimensions,\n        Widget = ui.DataBoundWidget,\n        DataSource = kendo.data.DataSource,\n        Buffer = kendo.data.Buffer,\n        BatchBuffer = kendo.data.BatchBuffer,\n\n        // Math\n        math = Math,\n        abs  = math.abs,\n        ceil = math.ceil,\n        round = math.round,\n        max = math.max,\n        min = math.min,\n        floor = math.floor,\n\n        CHANGE = \"change\",\n        CHANGING = \"changing\",\n        REFRESH = \"refresh\",\n        CURRENT_PAGE_CLASS = \"km-current-page\",\n        VIRTUAL_PAGE_CLASS = \"km-virtual-page\",\n        FUNCTION = \"function\",\n        ITEM_CHANGE = \"itemChange\",\n        CLEANUP = \"cleanup\",\n\n        VIRTUAL_PAGE_COUNT = 3,\n        LEFT_PAGE = -1,\n        CETER_PAGE = 0,\n        RIGHT_PAGE = 1,\n\n        LEFT_SWIPE = -1,\n        NUDGE = 0,\n        RIGHT_SWIPE = 1;\n\n    var Pager = kendo.Class.extend({\n        init: function(scrollView) {\n            var that = this,\n                element = $(\"<ol class='km-pages'/>\");\n\n            scrollView.element.append(element);\n\n            this._changeProxy = proxy(that, \"_change\");\n            this._refreshProxy = proxy(that, \"_refresh\");\n            scrollView.bind(CHANGE, this._changeProxy);\n            scrollView.bind(REFRESH, this._refreshProxy);\n\n            $.extend(that, { element: element, scrollView: scrollView });\n        },\n\n        items: function() {\n            return this.element.children();\n        },\n\n        _refresh: function(e) {\n            var pageHTML = \"\";\n\n            for (var idx = 0; idx < e.pageCount; idx ++) {\n                pageHTML += \"<li/>\";\n            }\n\n            this.element.html(pageHTML);\n            this.items().eq(e.page).addClass(CURRENT_PAGE_CLASS);\n        },\n\n        _change: function(e) {\n            this.items().removeClass(CURRENT_PAGE_CLASS).eq(e.page).addClass(CURRENT_PAGE_CLASS);\n        },\n\n        destroy: function() {\n            this.scrollView.unbind(CHANGE, this._changeProxy);\n            this.scrollView.unbind(REFRESH, this._refreshProxy);\n            this.element.remove();\n        }\n    });\n\n    kendo.mobile.ui.ScrollViewPager = Pager;\n\n    var TRANSITION_END = \"transitionEnd\",\n        DRAG_START = \"dragStart\",\n        DRAG_END = \"dragEnd\";\n\n    var ElasticPane = kendo.Observable.extend({\n        init: function(element, options) {\n            var that = this;\n\n            kendo.Observable.fn.init.call(this);\n\n            this.element = element;\n            this.container = element.parent();\n\n            var movable,\n                transition,\n                userEvents,\n                dimensions,\n                dimension,\n                pane;\n\n            movable = new kendo.ui.Movable(that.element);\n\n            transition = new Transition({\n                axis: \"x\",\n                movable: movable,\n                onEnd: function() {\n                    that.trigger(TRANSITION_END);\n                }\n            });\n\n            userEvents = new kendo.UserEvents(element, {\n                start: function(e) {\n                    if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n                        userEvents.capture();\n                    } else {\n                        userEvents.cancel();\n                    }\n\n                    that.trigger(DRAG_START, e);\n                    transition.cancel();\n                },\n                allowSelection: true,\n                end: function(e) {\n                    that.trigger(DRAG_END, e);\n                }\n            });\n\n            dimensions = new PaneDimensions({\n                element: that.element,\n                container: that.container\n            });\n\n            dimension = dimensions.x;\n\n            dimension.bind(CHANGE, function() {\n                that.trigger(CHANGE);\n            });\n\n            pane = new Pane({\n                dimensions: dimensions,\n                userEvents: userEvents,\n                movable: movable,\n                elastic: true\n            });\n\n            $.extend(that, {\n                duration: options && options.duration || 1,\n                movable: movable,\n                transition: transition,\n                userEvents: userEvents,\n                dimensions: dimensions,\n                dimension: dimension,\n                pane: pane\n            });\n\n            this.bind([TRANSITION_END, DRAG_START, DRAG_END, CHANGE], options);\n        },\n\n        size: function() {\n            return { width: this.dimensions.x.getSize(), height: this.dimensions.y.getSize() };\n        },\n\n        total: function() {\n            return this.dimension.getTotal();\n        },\n\n        offset: function() {\n            return -this.movable.x;\n        },\n\n        updateDimension: function() {\n            this.dimension.update(true);\n        },\n\n        refresh: function() {\n            this.dimensions.refresh();\n        },\n\n        moveTo: function(offset) {\n            this.movable.moveAxis(\"x\", -offset);\n        },\n\n        transitionTo: function(offset, ease, instant) {\n            if (instant) {\n                this.moveTo(-offset);\n            } else {\n                this.transition.moveTo({ location: offset, duration: this.duration, ease: ease });\n            }\n        }\n    });\n\n    kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n\n    var ScrollViewContent = kendo.Observable.extend({\n        init: function(element, pane, options) {\n            var that = this;\n\n            kendo.Observable.fn.init.call(this);\n            that.element = element;\n            that.pane = pane;\n            that._getPages();\n            this.page = 0;\n            this.pageSize = options.pageSize || 1;\n            this.contentHeight = options.contentHeight;\n            this.enablePager = options.enablePager;\n        },\n\n        scrollTo: function(page, instant) {\n            this.page = page;\n            this.pane.transitionTo(- page * this.pane.size().width, Transition.easeOutExpo, instant);\n        },\n\n        paneMoved: function(swipeType, bounce, callback, /*internal*/ instant) {\n            var that = this,\n                pane = that.pane,\n                width = pane.size().width * that.pageSize,\n                approx = round,\n                ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo,\n                snap,\n                nextPage;\n\n            if (swipeType === LEFT_SWIPE) {\n                approx = ceil;\n            } else if (swipeType === RIGHT_SWIPE) {\n                approx = floor;\n            }\n\n            nextPage = approx(pane.offset() / width);\n\n            snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n\n            if (nextPage != that.page) {\n                if (callback && callback({ currentPage: that.page, nextPage: nextPage })) {\n                    snap = -that.page * pane.size().width;\n                }\n            }\n\n            pane.transitionTo(snap, ease, instant);\n        },\n\n        updatePage: function() {\n            var pane = this.pane,\n                page = round(pane.offset() / pane.size().width);\n\n            if (page != this.page) {\n                this.page = page;\n                return true;\n            }\n\n            return false;\n        },\n\n        forcePageUpdate: function() {\n            return this.updatePage();\n        },\n\n        resizeTo: function(size) {\n            var pane = this.pane,\n                width = size.width;\n\n            this.pageElements.width(width);\n\n            if (this.contentHeight === \"100%\") {\n                var containerHeight = this.element.parent().height();\n\n                if (this.enablePager === true) {\n                    var pager = this.element.parent().find(\"ol.km-pages\");\n                    if (pager.length) {\n                        containerHeight -= pager.outerHeight(true);\n                    }\n                }\n\n                this.element.css(\"height\", containerHeight);\n                this.pageElements.css(\"height\", containerHeight);\n            }\n\n            // re-read pane dimension after the pageElements have been resized.\n            pane.updateDimension();\n\n            if (!this._paged) {\n                this.page = floor(pane.offset() / width);\n            }\n\n            this.scrollTo(this.page, true);\n\n            this.pageCount = ceil(pane.total() / width);\n            this.minSnap = - (this.pageCount - 1) * width;\n            this.maxSnap = 0;\n        },\n\n        _getPages: function() {\n            this.pageElements = this.element.find(kendo.roleSelector(\"page\"));\n            this._paged = this.pageElements.length > 0;\n        }\n    });\n\n    kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n\n    var VirtualScrollViewContent = kendo.Observable.extend({\n        init: function(element, pane, options) {\n            var that = this;\n\n            kendo.Observable.fn.init.call(this);\n\n            that.element = element;\n            that.pane = pane;\n            that.options = options;\n            that._templates();\n            that.page = options.page || 0;\n            that.pages = [];\n            that._initPages();\n            that.resizeTo(that.pane.size());\n\n            that.pane.dimension.forceEnabled();\n        },\n\n        setDataSource: function(dataSource) {\n            this.dataSource = DataSource.create(dataSource);\n            this._buffer();\n            this._pendingPageRefresh = false;\n            this._pendingWidgetRefresh = false;\n        },\n\n        _viewShow: function() {\n            var that = this;\n            if (that._pendingWidgetRefresh) {\n                setTimeout(function() {\n                    that._resetPages();\n                }, 0);\n                that._pendingWidgetRefresh = false;\n            }\n        },\n\n        _buffer: function() {\n            var itemsPerPage = this.options.itemsPerPage;\n\n            if (this.buffer) {\n                this.buffer.destroy();\n            }\n\n            if (itemsPerPage > 1) {\n                this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n            } else {\n                this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n            }\n\n            this._resizeProxy = proxy(this, \"_onResize\");\n            this._resetProxy = proxy(this, \"_onReset\");\n            this._endReachedProxy = proxy(this, \"_onEndReached\");\n\n            this.buffer.bind({\n                \"resize\": this._resizeProxy,\n                \"reset\": this._resetProxy,\n                \"endreached\": this._endReachedProxy\n            });\n        },\n\n        _templates: function() {\n            var template = this.options.template,\n                emptyTemplate = this.options.emptyTemplate,\n                templateProxy = {},\n                emptyTemplateProxy = {};\n\n            if (typeof template === FUNCTION) {\n                templateProxy.template = template;\n                template = \"#=this.template(data)#\";\n            }\n\n            this.template = proxy(kendo.template(template), templateProxy);\n\n            if (typeof emptyTemplate === FUNCTION) {\n                emptyTemplateProxy.emptyTemplate = emptyTemplate;\n                emptyTemplate = \"#=this.emptyTemplate(data)#\";\n            }\n\n            this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n        },\n\n        _initPages: function() {\n            var pages = this.pages,\n                element = this.element,\n                page;\n\n            for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n                page = new Page(element);\n                pages.push(page);\n            }\n\n            this.pane.updateDimension();\n        },\n\n        resizeTo: function(size) {\n            var pages = this.pages,\n                pane = this.pane;\n\n            for (var i = 0; i < pages.length; i++) {\n                pages[i].setWidth(size.width);\n            }\n\n            if (this.options.contentHeight === \"auto\") {\n                this.element.css(\"height\", this.pages[1].element.height());\n            }\n\n            else if (this.options.contentHeight === \"100%\") {\n                var containerHeight = this.element.parent().height();\n\n                if (this.options.enablePager === true) {\n                    var pager = this.element.parent().find(\"ol.km-pages\");\n                    if (pager.length) {\n                        containerHeight -= pager.outerHeight(true);\n                    }\n                }\n\n                this.element.css(\"height\", containerHeight);\n                pages[0].element.css(\"height\", containerHeight);\n                pages[1].element.css(\"height\", containerHeight);\n                pages[2].element.css(\"height\", containerHeight);\n            }\n\n            pane.updateDimension();\n\n            this._repositionPages();\n\n            this.width = size.width;\n        },\n\n        scrollTo: function(page) {\n            var buffer = this.buffer,\n                dataItem;\n\n            buffer.syncDataSource();\n            dataItem = buffer.at(page);\n\n            if (!dataItem) {\n                return;\n            }\n\n            this._updatePagesContent(page);\n\n            this.page = page;\n        },\n\n        paneMoved: function(swipeType, bounce, callback, /*internal*/ instant) {\n            var that = this,\n                pane = that.pane,\n                width = pane.size().width,\n                offset = pane.offset(),\n                thresholdPassed = Math.abs(offset) >= width / 3,\n                ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition. easeOutExpo,\n                isEndReached = that.page + 2 > that.buffer.total(),\n                nextPage,\n                delta = 0;\n\n            if (swipeType === RIGHT_SWIPE) {\n                if (that.page !== 0) {\n                    delta = -1; //backward\n                }\n            } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n                delta = 1; //forward\n            } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n                delta = 1; //forward\n            } else if (offset < 0 && thresholdPassed) {\n                if (that.page !== 0) {\n                    delta = -1; //backward\n                }\n            }\n\n            nextPage = that.page;\n            if (delta) {\n                nextPage = (delta > 0) ? nextPage + 1 : nextPage - 1;\n            }\n\n            if (callback && callback({ currentPage: that.page, nextPage: nextPage })) {\n                delta = 0;\n            }\n\n            if (delta === 0) {\n                that._cancelMove(ease, instant);\n            } else if (delta === -1) {\n                that._moveBackward(instant);\n            } else if (delta === 1) {\n                that._moveForward(instant);\n            }\n        },\n\n        updatePage: function() {\n            var pages = this.pages;\n\n            if (this.pane.offset() === 0) {\n                return false;\n            }\n\n            if (this.pane.offset() > 0) {\n                pages.push(this.pages.shift());//forward\n                this.page++;\n                this.setPageContent(pages[2], this.page + 1);\n            } else {\n                pages.unshift(this.pages.pop()); //back\n                this.page--;\n                this.setPageContent(pages[0], this.page - 1);\n            }\n\n            this._repositionPages();\n\n            this._resetMovable();\n\n            return true;\n        },\n\n        forcePageUpdate: function() {\n            var offset = this.pane.offset(),\n                threshold  = this.pane.size().width * 3/4;\n\n            if (abs(offset) > threshold) {\n                return this.updatePage();\n            }\n\n            return false;\n        },\n\n        _resetMovable: function() {\n            this.pane.moveTo(0);\n        },\n\n        _moveForward: function(instant) {\n            this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n        },\n\n        _moveBackward: function(instant) {\n            this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n        },\n\n        _cancelMove: function(ease, /*internal*/ instant) {\n            this.pane.transitionTo(0, ease, instant);\n        },\n\n        _resetPages: function() {\n            this.page = this.options.page || 0;\n\n            this._updatePagesContent(this.page);\n            this._repositionPages();\n\n            this.trigger(\"reset\");\n        },\n\n        _onResize: function() {\n            this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n\n            if (this._pendingPageRefresh) {\n                this._updatePagesContent(this.page);\n                this._pendingPageRefresh = false;\n            }\n\n            this.trigger(\"resize\");\n        },\n\n        _onReset: function() {\n            this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n            this._resetPages();\n        },\n\n        _onEndReached: function() {\n            this._pendingPageRefresh = true;\n        },\n\n        _repositionPages: function() {\n            var pages = this.pages;\n\n            pages[0].position(LEFT_PAGE);\n            pages[1].position(CETER_PAGE);\n            pages[2].position(RIGHT_PAGE);\n        },\n\n        _updatePagesContent: function(offset) {\n            var pages = this.pages,\n                currentPage = offset || 0;\n\n            this.setPageContent(pages[0], currentPage - 1);\n            this.setPageContent(pages[1], currentPage);\n            this.setPageContent(pages[2], currentPage + 1);\n        },\n\n        setPageContent: function(page, index) {\n            var buffer = this.buffer,\n                template = this.template,\n                emptyTemplate = this.emptyTemplate,\n                view = null;\n\n            if (index >= 0) {\n                view = buffer.at(index);\n                if ($.isArray(view) && !view.length) {\n                    view = null;\n                }\n            }\n\n            this.trigger(CLEANUP, { item: page.element });\n\n            if (view !== null) {\n                page.content(template(view));\n            } else {\n                page.content(emptyTemplate({}));\n            }\n\n            kendo.mobile.init(page.element);\n            this.trigger(ITEM_CHANGE, { item: page.element, data: view, ns: kendo.mobile.ui });\n\n        }\n    });\n\n    kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n\n    var Page = kendo.Class.extend({\n        init: function(container) {\n            this.element = $(\"<div class='\" + VIRTUAL_PAGE_CLASS + \"'></div>\");\n            this.width = container.width();\n            this.element.width(this.width);\n            container.append(this.element);\n        },\n\n        content: function(theContent) {\n            this.element.html(theContent);\n        },\n\n        position: function(position) { //position can be -1, 0, 1\n            this.element.css(\"transform\", \"translate3d(\" + this.width * position + \"px, 0, 0)\");\n        },\n\n        setWidth: function(width) {\n            this.width = width;\n            this.element.width(width);\n        }\n    });\n\n    kendo.mobile.ui.VirtualPage = Page;\n\n    var ScrollView = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n            element = that.element;\n\n            kendo.stripWhitespace(element[0]);\n\n            element\n                .wrapInner(\"<div/>\")\n                .addClass(\"km-scrollview\");\n\n            if (this.options.enablePager) {\n                this.pager = new Pager(this);\n            }\n\n            that.inner = element.children().first();\n            that.page = 0;\n            that.inner.css(\"height\", options.contentHeight);\n\n            that.pane = new ElasticPane(that.inner, {\n                duration: this.options.duration,\n                transitionEnd: proxy(this, \"_transitionEnd\"),\n                dragStart: proxy(this, \"_dragStart\"),\n                dragEnd: proxy(this, \"_dragEnd\"),\n                change: proxy(this, REFRESH)\n            });\n\n            that.bind(\"resize\", function() {\n                that.pane.refresh();\n            });\n\n            that.page = options.page;\n\n            var empty = this.inner.children().length === 0;\n\n            var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n\n            content.page = that.page;\n\n            content.bind(\"reset\", function() {\n                that._syncWithContent();\n                that.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n            });\n\n            content.bind(\"resize\", function() {\n                that.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n            });\n\n            content.bind(ITEM_CHANGE, function(e) {\n                that.trigger(ITEM_CHANGE, e);\n\n                that.angular(\"compile\", function() {\n                    return { elements: e.item, data: [ { dataItem: e.data } ] };\n                });\n            });\n\n            content.bind(CLEANUP, function(e) {\n                that.angular(\"cleanup\", function() {\n                    return { elements: e.item };\n                });\n            });\n\n            that._content = content;\n            that.setDataSource(options.dataSource);\n\n            var mobileContainer = that.container();\n\n            if (mobileContainer.nullObject) {\n                that.viewInit();\n                that.viewShow();\n            } else {\n                mobileContainer.bind(\"show\", proxy(this, \"viewShow\")).bind(\"init\", proxy(this, \"viewInit\"));\n            }\n        },\n\n        options: {\n            name: \"ScrollView\",\n            page: 0,\n            duration: 400,\n            velocityThreshold: 0.8,\n            contentHeight: \"auto\",\n            pageSize: 1,\n            itemsPerPage: 1,\n            bounceVelocityThreshold: 1.6,\n            enablePager: true,\n            autoBind: true,\n            template: \"\",\n            emptyTemplate: \"\"\n        },\n\n        events: [\n            CHANGING,\n            CHANGE,\n            REFRESH\n        ],\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            kendo.destroy(this.element);\n        },\n\n        viewInit: function() {\n            if (this.options.autoBind) {\n                this._content.scrollTo(this._content.page, true);\n            }\n        },\n\n        viewShow: function() {\n            this.pane.refresh();\n        },\n\n        refresh: function() {\n            var content = this._content;\n\n            content.resizeTo(this.pane.size());\n            this.page = content.page;\n            this.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n        },\n\n        content: function(html) {\n           this.element.children().first().html(html);\n           this._content._getPages();\n           this.pane.refresh();\n        },\n\n        value: function(item) {\n            var dataSource = this.dataSource;\n\n            if (item) {\n                this.scrollTo(dataSource.indexOf(item), true);\n            } else {\n                return dataSource.at(this.page);\n            }\n        },\n\n        scrollTo: function(page, instant) {\n            this._content.scrollTo(page, instant);\n            this._syncWithContent();\n        },\n\n        prev: function() {\n            var that = this,\n                prevPage = that.page - 1;\n\n            if (that._content instanceof VirtualScrollViewContent) {\n                that._content.paneMoved(RIGHT_SWIPE, undefined, function(eventData) {\n                    return that.trigger(CHANGING, eventData);\n                });\n            } else if (prevPage > -1) {\n                that.scrollTo(prevPage);\n            }\n        },\n\n        next: function() {\n            var that = this,\n                nextPage = that.page + 1;\n\n            if (that._content instanceof VirtualScrollViewContent) {\n                that._content.paneMoved(LEFT_SWIPE, undefined, function(eventData) {\n                    return that.trigger(CHANGING, eventData);\n                });\n            } else if (nextPage < that._content.pageCount) {\n                that.scrollTo(nextPage);\n            }\n        },\n\n        setDataSource: function(dataSource) {\n            if (!(this._content instanceof VirtualScrollViewContent)) {\n                return;\n            }\n            // the scrollview should have a ready datasource for MVVM to function properly. But an empty datasource should not empty the element\n            var emptyDataSource = !dataSource;\n            this.dataSource = DataSource.create(dataSource);\n\n            this._content.setDataSource(this.dataSource);\n\n            if (this.options.autoBind && !emptyDataSource) {\n                // this.items().remove();\n                this.dataSource.fetch();\n            }\n        },\n\n        items: function() {\n            return this.element.find(\".\" + VIRTUAL_PAGE_CLASS);\n        },\n\n        _syncWithContent: function() {\n            var pages = this._content.pages,\n                buffer = this._content.buffer,\n                data,\n                element;\n\n            this.page = this._content.page;\n\n            data = buffer ? buffer.at(this.page) : undefined;\n            if (!(data instanceof Array)) {\n                data = [data];\n            }\n            element = pages ? pages[1].element : undefined;\n\n            this.trigger(CHANGE, { page: this.page, element: element, data: data });\n        },\n\n        _dragStart: function() {\n            if (this._content.forcePageUpdate()) {\n                this._syncWithContent();\n            }\n        },\n\n        _dragEnd: function(e) {\n            var that = this,\n                velocity = e.x.velocity,\n                velocityThreshold = this.options.velocityThreshold,\n                swipeType = NUDGE,\n                bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n\n            if (velocity > velocityThreshold) {\n                swipeType = RIGHT_SWIPE;\n            } else if (velocity < -velocityThreshold) {\n                swipeType = LEFT_SWIPE;\n            }\n\n            this._content.paneMoved(swipeType, bounce, function(eventData) {\n                return that.trigger(CHANGING, eventData);\n            });\n        },\n\n        _transitionEnd: function() {\n            if (this._content.updatePage()) {\n                this._syncWithContent();\n            }\n        }\n    });\n\n    ui.plugin(ScrollView);\n\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Widget = ui.Widget,\n        support = kendo.support,\n        CHANGE = \"change\",\n        SWITCHON = \"km-switch-on\",\n        SWITCHOFF = \"km-switch-off\",\n        MARGINLEFT = \"margin-left\",\n        ACTIVE_STATE = \"km-state-active\",\n        DISABLED_STATE = \"km-state-disabled\",\n        DISABLED = \"disabled\",\n        TRANSFORMSTYLE = support.transitions.css + \"transform\",\n        proxy = $.proxy;\n\n    function limitValue(value, minLimit, maxLimit) {\n        return Math.max(minLimit, Math.min(maxLimit, value));\n    }\n\n    var SWITCH_MARKUP = '<span class=\"km-switch km-widget\">\\\n        <span class=\"km-switch-wrapper\"><span class=\"km-switch-background\"></span></span> \\\n        <span class=\"km-switch-container\"><span class=\"km-switch-handle\" > \\\n            <span class=\"km-switch-label-on\">{0}</span> \\\n            <span class=\"km-switch-label-off\">{1}</span> \\\n        </span> \\\n    </span>';\n\n    var Switch = Widget.extend({\n        init: function(element, options) {\n            var that = this, checked;\n\n            Widget.fn.init.call(that, element, options);\n\n            options = that.options;\n\n            that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n            that.handle = that.wrapper.find(\".km-switch-handle\");\n            that.background = that.wrapper.find(\".km-switch-background\");\n            that.wrapper.insertBefore(that.element).prepend(that.element);\n\n            that._drag();\n\n            that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n\n            that.constrain = 0;\n            that.snapPoint = 0;\n\n            element = that.element[0];\n            element.type = \"checkbox\";\n            that._animateBackground = true;\n\n            checked = that.options.checked;\n\n            if (checked === null) {\n                checked = element.checked;\n            }\n\n            that.check(checked);\n\n            that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n            that.enable(that.options.enable);\n\n            that.refresh();\n            kendo.notify(that, kendo.mobile.ui);\n        },\n\n        refresh: function() {\n            var that = this,\n                handleWidth = that.handle.outerWidth(true);\n\n            that.width = that.wrapper.width();\n\n            that.constrain  = that.width - handleWidth;\n            that.snapPoint = that.constrain / 2;\n\n            if (typeof that.origin != \"number\") {\n                that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n            }\n\n            that.background.data(\"origin\", that.origin);\n\n            that.check(that.element[0].checked);\n        },\n\n        events: [\n            CHANGE\n        ],\n\n        options: {\n            name: \"Switch\",\n            onLabel: \"on\",\n            offLabel: \"off\",\n            checked: null,\n            enable: true\n        },\n\n        check: function(check) {\n            var that = this,\n                element = that.element[0];\n\n            if (check === undefined) {\n                return element.checked;\n            }\n\n            that._position(check ? that.constrain : 0);\n            element.checked = check;\n            that.wrapper\n                .toggleClass(SWITCHON, check)\n                .toggleClass(SWITCHOFF, !check);\n        },\n\n        // alias for check, NG support\n        value: function() {\n            return this.check.apply(this, arguments);\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            this.userEvents.destroy();\n        },\n\n        toggle: function() {\n            var that = this;\n\n            that.check(!that.element[0].checked);\n        },\n\n        enable: function(enable) {\n            var element = this.element,\n                wrapper = this.wrapper;\n\n            if(typeof enable == \"undefined\") {\n                enable = true;\n            }\n\n            this.options.enable = enable;\n\n            if(enable) {\n                element.removeAttr(DISABLED);\n            } else {\n                element.attr(DISABLED, DISABLED);\n            }\n\n            wrapper.toggleClass(DISABLED_STATE, !enable);\n        },\n\n        _resize: function() {\n            this.refresh();\n        },\n\n        _move: function(e) {\n            var that = this;\n            e.preventDefault();\n            that._position(limitValue(that.position + e.x.delta, 0, that.width - that.handle.outerWidth(true)));\n        },\n\n        _position: function(position) {\n            var that = this;\n\n            that.position = position;\n            that.handle.css(TRANSFORMSTYLE, \"translatex(\" + position + \"px)\");\n\n            if (that._animateBackground) {\n                that.background.css(MARGINLEFT, that.origin + position);\n            }\n        },\n\n        _start: function() {\n            if(!this.options.enable) {\n                this.userEvents.cancel();\n            } else {\n                this.userEvents.capture();\n                this.handle.addClass(ACTIVE_STATE);\n            }\n        },\n\n        _stop: function() {\n            var that = this;\n\n            that.handle.removeClass(ACTIVE_STATE);\n            that._toggle(that.position > that.snapPoint);\n        },\n\n        _toggle: function (checked) {\n            var that = this,\n                handle = that.handle,\n                element = that.element[0],\n                value = element.checked,\n                duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200,\n                distance;\n\n            that.wrapper\n                .toggleClass(SWITCHON, checked)\n                .toggleClass(SWITCHOFF, !checked);\n\n            that.position = distance = checked * that.constrain;\n\n            if (that._animateBackground) {\n                that.background\n                    .kendoStop(true, true)\n                    .kendoAnimate({ effects: \"slideMargin\", offset: distance, reset: true, reverse: !checked, axis: \"left\", duration: duration });\n            }\n\n            handle\n                .kendoStop(true, true)\n                .kendoAnimate({\n                    effects: \"slideTo\",\n                    duration: duration,\n                    offset: distance + \"px,0\",\n                    reset: true,\n                    complete: function () {\n                        if (value !== checked) {\n                            element.checked = checked;\n                            that.trigger(CHANGE, { checked: checked });\n                        }\n                    }\n                });\n        },\n\n        _drag: function() {\n            var that = this;\n\n            that.userEvents = new kendo.UserEvents(that.wrapper, {\n                tap: function() {\n                    if(that.options.enable) {\n                        that._toggle(!that.element[0].checked);\n                    }\n                },\n                start: proxy(that._start, that),\n                move: proxy(that._move, that),\n                end: proxy(that._stop, that)\n            });\n        }\n    });\n\n    ui.plugin(Switch);\n})(window.kendo.jQuery);\n\n\n\n\n\n(function($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.mobile.ui,\n        Widget = ui.Widget,\n        ACTIVE_STATE_CLASS = \"km-state-active\",\n        SELECT = \"select\";\n\n    function createBadge(value) {\n        return $('<span class=\"km-badge\">' + value + '</span>');\n    }\n\n    var TabStrip = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n\n            Widget.fn.init.call(that, element, options);\n            that.container().bind(\"show\", $.proxy(this, \"refresh\"));\n\n            that.element\n               .addClass(\"km-tabstrip\")\n               .find(\"a\").each(that._buildButton)\n               .eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n\n            that.element.on(\"down\", \"a\", \"_release\");\n        },\n\n        events: [\n            SELECT\n        ],\n\n        switchTo: function(url) {\n            var tabs = this.element.find('a'),\n                tab,\n                path,\n                idx = 0,\n                length = tabs.length;\n\n            if(isNaN(url)) {\n                for (; idx < length; idx ++) {\n                    tab = tabs[idx];\n                    path = tab.href.replace(/(\\#.+)(\\?.+)$/, \"$1\"); // remove the fragment query string - http://www.foo.com?foo#bar**?baz=qux**\n\n                    if (path.indexOf(url, path.length - url.length) !== -1) {\n                        this._setActiveItem($(tab));\n                        return true;\n                    }\n                }\n            } else {\n                this._setActiveItem(tabs.eq(url));\n                return true;\n            }\n\n            return false;\n        },\n\n        switchByFullUrl: function(url) {\n            var tab;\n\n            tab = this.element.find(\"a[href$='\" + url + \"']\");\n            this._setActiveItem(tab);\n        },\n\n        clear: function() {\n            this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n        },\n\n        currentItem: function() {\n            return this.element.children(\".\" + ACTIVE_STATE_CLASS);\n        },\n\n        badge: function(item, value) {\n            var tabstrip = this.element, badge;\n\n            if (!isNaN(item)) {\n                item = tabstrip.children().get(item);\n            }\n\n            item = tabstrip.find(item);\n            badge = $(item.find(\".km-badge\")[0] || createBadge(value).insertAfter(item.children(\".km-icon\")));\n\n            if (value || value === 0) {\n                badge.html(value);\n                return this;\n            }\n\n            if (value === false) {\n                badge.empty().remove();\n                return this;\n            }\n\n            return badge.html();\n        },\n\n        _release: function(e) {\n            if (e.which > 1) {\n                return;\n            }\n\n            var that = this,\n                item = $(e.currentTarget);\n\n            if (item[0] === that.currentItem()[0]) {\n                return;\n            }\n\n            if (that.trigger(SELECT, {item: item})) {\n                e.preventDefault();\n            } else {\n                that._setActiveItem(item);\n            }\n        },\n\n        _setActiveItem: function(item) {\n            if (!item[0]) {\n                return;\n            }\n            this.clear();\n            item.addClass(ACTIVE_STATE_CLASS);\n        },\n\n        _buildButton: function() {\n            var button = $(this),\n                icon = kendo.attrValue(button, \"icon\"),\n                badge = kendo.attrValue(button, \"badge\"),\n                image = button.find(\"img\"),\n                iconSpan = $('<span class=\"km-icon\"/>');\n\n            button\n                .addClass(\"km-button\")\n                .attr(kendo.attr(\"role\"), \"tab\")\n                    .contents().not(image)\n                    .wrapAll('<span class=\"km-text\"/>');\n\n            if (image[0]) {\n                image.addClass(\"km-image\").prependTo(button);\n            } else {\n                button.prepend(iconSpan);\n                if (icon) {\n                    iconSpan.addClass(\"km-\" + icon);\n                    if (badge || badge === 0) {\n                        createBadge(badge).insertAfter(iconSpan);\n                    }\n                }\n            }\n        },\n\n        refresh: function(e) {\n            var url = e.view.element.attr(kendo.attr(\"url\"));\n            if (!this.switchTo(e.view.id) && url) {\n                this.switchTo(url);\n            }\n        },\n\n        options: {\n            name: \"TabStrip\",\n            selectedIndex: 0,\n            enable: true\n        }\n    });\n\n    ui.plugin(TabStrip);\n})(window.kendo.jQuery);\n\n\n\n\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/KendoUI/2014.3.1411/kendo.aspnetmvc.js",
    "content": "/*\n* Kendo UI v2014.3.1411 (http://www.telerik.com/kendo-ui)\n* Copyright 2015 Telerik AD. All rights reserved.\n*\n* Kendo UI commercial licenses may be obtained at\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\n*/\n(function(f, define){\n    define([ \"./kendo.data\", \"./kendo.combobox\", \"./kendo.dropdownlist\", \"./kendo.multiselect\", \"./kendo.validator\" ], f);\n})(function(){\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        escapeQuoteRegExp = /'/ig,\n        extend = $.extend,\n        isArray = $.isArray,\n        isPlainObject = $.isPlainObject,\n        POINT = \".\";\n\n    function parameterMap(options, operation, encode, stringifyDates) {\n       var result = {};\n\n       if (options.sort) {\n           result[this.options.prefix + \"sort\"] = $.map(options.sort, function(sort) {\n               return sort.field + \"-\" + sort.dir;\n           }).join(\"~\");\n\n           delete options.sort;\n       } else {\n           result[this.options.prefix + \"sort\"] = \"\";\n       }\n\n       if (options.page) {\n           result[this.options.prefix + \"page\"] = options.page;\n\n           delete options.page;\n       }\n\n       if (options.pageSize) {\n           result[this.options.prefix + \"pageSize\"] = options.pageSize;\n\n           delete options.pageSize;\n       }\n\n       if (options.group) {\n            result[this.options.prefix + \"group\"] = $.map(options.group, function(group) {\n               return group.field + \"-\" + group.dir;\n           }).join(\"~\");\n\n           delete options.group;\n       } else {\n            result[this.options.prefix + \"group\"] = \"\";\n       }\n\n       if (options.aggregate) {\n           result[this.options.prefix + \"aggregate\"] =  $.map(options.aggregate, function(aggregate) {\n               return aggregate.field + \"-\" + aggregate.aggregate;\n           }).join(\"~\");\n\n           delete options.aggregate;\n       }\n\n       if (options.filter) {\n           result[this.options.prefix + \"filter\"] = serializeFilter(options.filter, encode);\n\n           delete options.filter;\n       } else {\n           result[this.options.prefix + \"filter\"] = \"\";\n           delete options.filter;\n       }\n\n       delete options.take;\n       delete options.skip;\n\n       serializeItem(result, options, \"\", stringifyDates);\n\n       return result;\n    }\n\n    function convertNumber(value){\n        var separator = kendo.culture().numberFormat[POINT];\n        value = value.toString().replace(POINT, separator);\n\n        return value;\n    }\n\n    function convert(value, stringifyDates) {\n        if (value instanceof Date) {\n            if (stringifyDates) {\n                value = kendo.stringify(value).replace(/\"/g, \"\");\n            } else {\n                value = kendo.format(\"{0:G}\", value);\n            }\n        } else if (typeof value === \"number\") {\n            value = convertNumber(value);\n        }\n\n        return value;\n    }\n\n    function serialize(result, value, data, key, prefix, stringifyDates) {\n        if (isArray(value)) {\n            serializeArray(result, value, prefix, stringifyDates);\n        } else if (isPlainObject(value)) {\n            serializeItem(result, value, prefix, stringifyDates);\n        } else {\n            if (result[prefix] === undefined) {\n                result[prefix] = data[key]  = convert(value, stringifyDates);\n            }\n        }\n    }\n\n    function serializeItem(result, data, prefix, stringifyDates) {\n        for (var key in data) {\n            var valuePrefix = prefix ? prefix + \".\" + key : key,\n                value = data[key];\n            serialize(result, value, data, key, valuePrefix, stringifyDates);\n        }\n    }\n\n    function serializeArray(result, data, prefix, stringifyDates) {\n        for (var sourceIndex = 0, destinationIndex = 0; sourceIndex < data.length; sourceIndex++) {\n            var value = data[sourceIndex],\n                key = \"[\" + destinationIndex + \"]\",\n                valuePrefix = prefix + key;\n            serialize(result, value, data, key, valuePrefix, stringifyDates);\n\n            destinationIndex++;\n        }\n    }\n\n    function serializeFilter(filter, encode) {\n       if (filter.filters) {\n           return $.map(filter.filters, function(f) {\n               var hasChildren = f.filters && f.filters.length > 1,\n                   result = serializeFilter(f, encode);\n\n               if (result && hasChildren) {\n                   result = \"(\" + result + \")\";\n               }\n\n               return result;\n           }).join(\"~\" + filter.logic + \"~\");\n       }\n\n       if (filter.field) {\n           return filter.field + \"~\" + filter.operator + \"~\" + encodeFilterValue(filter.value, encode);\n       } else {\n           return undefined;\n       }\n    }\n\n    function encodeFilterValue(value, encode) {\n       if (typeof value === \"string\") {\n           if (value.indexOf('Date(') > -1) {\n               value = new Date(parseInt(value.replace(/^\\/Date\\((.*?)\\)\\/$/, '$1'), 10));\n           } else {\n               value = value.replace(escapeQuoteRegExp, \"''\");\n\n               if (encode) {\n                   value = encodeURIComponent(value);\n               }\n\n               return \"'\" + value + \"'\";\n           }\n       }\n\n       if (value && value.getTime) {\n           return \"datetime'\" + kendo.format(\"{0:yyyy-MM-ddTHH-mm-ss}\", value) + \"'\";\n       }\n       return value;\n    }\n\n    function translateGroup(group) {\n       return {\n           value: typeof group.Key !== \"undefined\" ? group.Key : group.value,\n           field: group.Member || group.field,\n           hasSubgroups: group.HasSubgroups || group.hasSubgroups || false,\n           aggregates: translateAggregate(group.Aggregates || group.aggregates),\n           items: group.HasSubgroups ? $.map(group.Items || group.items, translateGroup) : (group.Items || group.items)\n       };\n    }\n\n    function translateAggregateResults(aggregate) {\n       var obj = {};\n           obj[aggregate.AggregateMethodName.toLowerCase()] = aggregate.Value;\n\n       return obj;\n    }\n\n    function translateAggregate(aggregates) {\n        var functionResult = {},\n            key,\n            functionName,\n            aggregate;\n\n        for (key in aggregates) {\n            functionResult = {};\n            aggregate = aggregates[key];\n\n            for (functionName in aggregate) {\n               functionResult[functionName.toLowerCase()] = aggregate[functionName];\n            }\n\n            aggregates[key] = functionResult;\n        }\n\n        return aggregates;\n    }\n\n    function convertAggregates(aggregates) {\n        var idx, length, aggregate;\n        var result = {};\n\n        for (idx = 0, length = aggregates.length; idx < length; idx++) {\n            aggregate = aggregates[idx];\n            result[aggregate.Member] = extend(true, result[aggregate.Member], translateAggregateResults(aggregate));\n        }\n\n        return result;\n    }\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"aspnetmvc-ajax\": {\n                groups: function(data) {\n                    return $.map(this._dataAccessFunction(data), translateGroup);\n                },\n                aggregates: function(data) {\n                    data = data.d || data;\n                    var aggregates = data.AggregateResults || [];\n\n                    if (!$.isArray(aggregates)) {\n                        for (var key in aggregates) {\n                            aggregates[key] = convertAggregates(aggregates[key]);\n                        }\n\n                        return aggregates;\n                    }\n\n                    return convertAggregates(aggregates);\n                }\n            }\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"aspnetmvc-ajax\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    var that = this,\n                        stringifyDates = (options || {}).stringifyDates;\n\n                    kendo.data.RemoteTransport.fn.init.call(this,\n                        extend(true, {}, this.options, options, {\n                            parameterMap: function(options, operation) {\n                                return parameterMap.call(that, options, operation, false, stringifyDates);\n                            }\n                        })\n                    );\n                },\n                read: function(options) {\n                    var data = this.options.data,\n                        url = this.options.read.url;\n\n                    if (isPlainObject(data)) {\n                        if (url) {\n                            this.options.data = null;\n                        }\n\n                        if (!data.Data.length && url) {\n                            kendo.data.RemoteTransport.fn.read.call(this, options);\n                        } else {\n                            options.success(data);\n                        }\n                    } else {\n                        kendo.data.RemoteTransport.fn.read.call(this, options);\n                    }\n                },\n                options: {\n                    read: {\n                        type: \"POST\"\n                    },\n                    update: {\n                        type: \"POST\"\n                    },\n                    create: {\n                        type: \"POST\"\n                    },\n                    destroy: {\n                        type: \"POST\"\n                    },\n                    parameterMap: parameterMap,\n                    prefix: \"\"\n                }\n            })\n        }\n    });\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"webapi\": kendo.data.schemas[\"aspnetmvc-ajax\"]\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"webapi\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    var that = this;\n                    var stringifyDates = (options || {}).stringifyDates;\n\n                    if (options.update) {\n                        var updateUrl = typeof options.update === \"string\" ? options.update : options.update.url;\n\n                        options.update = extend(options.update, {url: function (data) {\n                            return kendo.format(updateUrl, data[options.idField]);\n                        }});\n                    }\n\n                    if (options.destroy) {\n                        var destroyUrl = typeof options.destroy === \"string\" ? options.destroy : options.destroy.url;\n\n                        options.destroy = extend(options.destroy, {url: function (data) {\n                            return kendo.format(destroyUrl, data[options.idField]);\n                        }});\n                    }\n\n                    if(options.create && typeof options.create === \"string\") {\n                        options.create = {\n                            url: options.create\n                        };\n                    }\n\n                    kendo.data.RemoteTransport.fn.init.call(this,\n                        extend(true, {}, this.options, options, {\n                            parameterMap: function(options, operation) {\n                                return parameterMap.call(that, options, operation, false, stringifyDates);\n                            }\n                        })\n                    );\n                },\n                read: function(options) {\n                    var data = this.options.data,\n                        url = this.options.read.url;\n\n                    if (isPlainObject(data)) {\n                        if (url) {\n                            this.options.data = null;\n                        }\n\n                        if (!data.Data.length && url) {\n                            kendo.data.RemoteTransport.fn.read.call(this, options);\n                        } else {\n                            options.success(data);\n                        }\n                    } else {\n                        kendo.data.RemoteTransport.fn.read.call(this, options);\n                    }\n                },\n                options: {\n                    read: {\n                        type: \"GET\"\n                    },\n                    update: {\n                        type: \"PUT\"\n                    },\n                    create: {\n                        type: \"POST\"\n                    },\n                    destroy: {\n                        type: \"DELETE\"\n                    },\n                    parameterMap: parameterMap,\n                    prefix: \"\"\n                }\n            })\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"aspnetmvc-server\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    var that = this;\n\n                    kendo.data.RemoteTransport.fn.init.call(this,\n                        extend(options, {\n                            parameterMap: function(options, operation) {\n                                return parameterMap.call(that, options, operation, true);\n                            }\n                        }\n                    ));\n                },\n                read: function(options) {\n                    var url,\n                        prefix = this.options.prefix,\n                        params = [prefix + \"sort\",\n                            prefix + \"page\",\n                            prefix + \"pageSize\",\n                            prefix + \"group\",\n                            prefix + \"aggregate\",\n                            prefix + \"filter\"],\n                        regExp = new RegExp(\"(\" + params.join('|') + \")=[^&]*&?\", \"g\"),\n                        query;\n\n                    query = location.search.replace(regExp, \"\").replace(\"?\", \"\");\n\n                    if (query.length && !(/&$/.test(query))) {\n                        query += \"&\";\n                    }\n\n                    options = this.setup(options, \"read\");\n\n                    url = options.url;\n\n                    if (url.indexOf(\"?\") >= 0) {\n                        query = query.replace(/(.*?=.*?)&/g, function(match){\n                            if(url.indexOf(match.substr(0, match.indexOf(\"=\"))) >= 0){\n                               return \"\";\n                            }\n                            return match;\n                        });\n                        url += \"&\" + query;\n                    } else {\n                        url += \"?\" + query;\n                    }\n\n                    url += $.map(options.data, function(value, key) {\n                        return key + \"=\" + value;\n                    }).join(\"&\");\n\n                    location.href = url;\n                }\n            })\n        }\n    });\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui;\n\n    if (ui && ui.ComboBox) {\n        ui.ComboBox.requestData = function (selector) {\n            var combobox = $(selector).data(\"kendoComboBox\"),\n                filters = combobox.dataSource.filter(),\n                value = combobox.input.val();\n\n            if (!filters) {\n                value = \"\";\n            }\n\n            return { text: value };\n        };\n    }\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui;\n\n    if (ui && ui.DropDownList) {\n        ui.DropDownList.requestData = function (selector) {\n            var dropdownlist = $(selector).data(\"kendoDropDownList\"),\n                filters = dropdownlist.dataSource.filter(),\n                filterInput = dropdownlist.filterInput,\n                value = filterInput ? filterInput.val() : \"\";\n\n            if (!filters) {\n                value = \"\";\n            }\n\n            return { text: value };\n        };\n    }\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui;\n\n    if (ui && ui.MultiSelect) {\n        ui.MultiSelect.requestData = function (selector) {\n            var multiselect = $(selector).data(\"kendoMultiSelect\");\n            var text = multiselect.input.val();\n            \n            return { text: text !== multiselect.options.placeholder ? text : \"\" };\n        };\n    }\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var kendo = window.kendo,\n        ui = kendo.ui,\n        extend = $.extend,\n        isFunction = $.isFunction;\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"imagebrowser-aspnetmvc\": {\n                data: function(data) {\n                    return data || [];\n                },\n                model: {\n                    id: \"name\",\n                    fields: {\n                        name: { field: \"Name\" },\n                        size: { field: \"Size\" },\n                        type: { field: \"EntryType\", parse: function(value) {  return value == 0 ? \"f\" : \"d\" } }\n                    }\n                }\n            }\n        }\n    });\n\n    extend(true, kendo.data, {\n        schemas: {\n            \"filebrowser-aspnetmvc\": kendo.data.schemas[\"imagebrowser-aspnetmvc\"]\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"imagebrowser-aspnetmvc\": kendo.data.RemoteTransport.extend({\n                init: function(options) {\n                    kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n                },\n                _call: function(type, options) {\n                    options.data = $.extend({}, options.data, { path: this.options.path() });\n\n                    if (isFunction(this.options[type])) {\n                        this.options[type].call(this, options);\n                    } else {\n                        kendo.data.RemoteTransport.fn[type].call(this, options);\n                    }\n                },\n                read: function(options) {\n                    this._call(\"read\", options);\n                },\n                create: function(options) {\n                    this._call(\"create\", options);\n                },\n                destroy: function(options) {\n                    this._call(\"destroy\", options);\n                },\n                update: function() {\n                    //updates are handled by the upload\n                },\n                options: {\n                    read: {\n                        type: \"POST\"\n                    },\n                    update: {\n                        type: \"POST\"\n                    },\n                    create: {\n                        type: \"POST\"\n                    },\n                    destroy: {\n                        type: \"POST\"\n                    },\n                    parameterMap: function(options, type) {\n                        if (type != \"read\") {\n                            options.EntryType = options.EntryType === \"f\" ? 0 : 1;\n                        }\n                        return options;\n                    }\n                }\n            })\n        }\n    });\n\n    extend(true, kendo.data, {\n        transports: {\n            \"filebrowser-aspnetmvc\": kendo.data.transports[\"imagebrowser-aspnetmvc\"]\n        }\n    });\n\n})(window.kendo.jQuery);\n\n(function ($, undefined) {\n    var nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g;\n\n    function generateMessages() {\n        var name,\n            messages = {};\n\n        for (name in validationRules) {\n            messages[\"mvc\" + name] = createMessage(name);\n        }\n        return messages;\n    }\n\n    function generateRules() {\n         var name,\n             rules = {};\n\n         for (name in validationRules) {\n             rules[\"mvc\" + name] = createRule(name);\n        }\n        return rules;\n    }\n\n    function extractParams(input, ruleName) {\n        var params = {},\n            index,\n            data = input.data(),\n            length = ruleName.length,\n            rule,\n            key;\n\n        for (key in data) {\n            rule = key.toLowerCase();\n            index = rule.indexOf(ruleName);\n            if (index > -1) {\n                rule = rule.substring(index + length, key.length);\n                if (rule) {\n                    params[rule] = data[key];\n                }\n            }\n        }\n        return params;\n    }\n\n    function rulesFromData(metadata) {\n        var idx,\n            length,\n            fields = metadata.Fields || [],\n            rules = {};\n\n        for (idx = 0, length = fields.length; idx < length; idx++) {\n            $.extend(true, rules, rulesForField(fields[idx]));\n        }\n        return rules;\n    }\n\n    function rulesForField(field) {\n        var rules = {},\n            messages = {},\n            fieldName = field.FieldName,\n            fieldRules = field.ValidationRules,\n            validationType,\n            validationParams,\n            idx,\n            length;\n\n        for (idx = 0, length = fieldRules.length; idx < length; idx++) {\n            validationType = fieldRules[idx].ValidationType;\n            validationParams = fieldRules[idx].ValidationParameters;\n\n            rules[fieldName + validationType] = createMetaRule(fieldName, validationType, validationParams);\n\n            messages[fieldName + validationType] = createMetaMessage(fieldRules[idx].ErrorMessage);\n        }\n        return { rules: rules, messages: messages };\n    }\n\n    function createMessage(rule) {\n        return function (input) {\n            return input.attr(\"data-val-\" + rule);\n        };\n    }\n\n    function createRule(ruleName) {\n        return function (input) {\n            if (input.filter(\"[data-val-\" + ruleName + \"]\").length) {\n                return validationRules[ruleName](input, extractParams(input, ruleName));\n            }\n            return true;\n        };\n    }\n\n    function createMetaMessage(message) {\n        return function() { return message; };\n    }\n\n    function createMetaRule(fieldName, type, params) {\n        return function (input) {\n            if (input.filter(\"[name=\" + fieldName + \"]\").length) {\n                return validationRules[type](input, params);\n            }\n            return true;\n        };\n    }\n\n    function patternMatcher(value, pattern) {\n        if (typeof pattern === \"string\") {\n            pattern = new RegExp('^(?:' + pattern + ')$');\n        }\n        return pattern.test(value);\n    }\n\n    var validationRules = {\n        required: function (input) {\n            var value = input.val(),\n                checkbox = input.filter(\"[type=checkbox]\"),\n                name;\n\n            if (checkbox.length) {\n                name = checkbox[0].name.replace(nameSpecialCharRegExp, \"\\\\$1\");\n                var hiddenSelector = \"input:hidden[name='\" + name + \"']\";\n                var hidden = checkbox.next(hiddenSelector);\n\n                if (!hidden.length) {\n                    hidden = checkbox.next(\"label.k-checkbox-label\").next(hiddenSelector);\n                }\n\n                if (hidden.length) {\n                    value = hidden.val();\n                } else {\n                    value = input.attr(\"checked\") === \"checked\";\n                }\n            }\n\n            return !(value === \"\" || !value);\n        },\n        number: function (input) {\n            return input.val() === \"\" || input.val() == null || kendo.parseFloat(input.val()) !== null;\n        },\n        regex: function (input, params) {\n            if (input.val() !== \"\") {\n                return patternMatcher(input.val(), params.pattern);\n            }\n            return true;\n        },\n        range: function(input, params) {\n            if (input.val() !== \"\") {\n                return this.min(input, params) && this.max(input, params);\n            }\n            return true;\n        },\n        min: function(input, params) {\n            var min = parseFloat(params.min) || 0,\n                val = kendo.parseFloat(input.val());\n\n            return min <= val;\n        },\n        max: function(input, params) {\n            var max = parseFloat(params.max) || 0,\n                val = kendo.parseFloat(input.val());\n\n            return val <= max;\n        },\n        date: function(input) {\n            return input.val() === \"\" || kendo.parseDate(input.val()) !== null;\n        },\n        length: function(input, params) {\n            if (input.val() !== \"\") {\n                var len = $.trim(input.val()).length;\n                return (!params.min || len >= (params.min || 0)) && (!params.max || len <= (params.max || 0));\n            }\n            return true;\n        }\n    };\n\n    $.extend(true, kendo.ui.validator, {\n        rules: generateRules(),\n        messages: generateMessages(),\n        messageLocators: {\n            mvcLocator: {\n                locate: function (element, fieldName) {\n                    fieldName = fieldName.replace(nameSpecialCharRegExp, \"\\\\$1\");\n                    return element.find(\".field-validation-valid[data-valmsg-for='\" + fieldName + \"'], .field-validation-error[data-valmsg-for='\" + fieldName + \"']\");\n                },\n                decorate: function (message, fieldName) {\n                    message.addClass(\"field-validation-error\").attr(\"data-valmsg-for\", fieldName || \"\");\n                }\n            },\n            mvcMetadataLocator: {\n                locate: function (element, fieldName) {\n                    fieldName = fieldName.replace(nameSpecialCharRegExp, \"\\\\$1\");\n                    return element.find(\"#\" + fieldName + \"_validationMessage.field-validation-valid\");\n                },\n                decorate: function (message, fieldName) {\n                    message.addClass(\"field-validation-error\").attr(\"id\", fieldName + \"_validationMessage\");\n                }\n            }\n        },\n        ruleResolvers: {\n            mvcMetaDataResolver: {\n                resolve: function (element) {\n                    var metadata = window.mvcClientValidationMetadata || [];\n\n                    if (metadata.length) {\n                        element = $(element);\n                        for (var idx = 0; idx < metadata.length; idx++) {\n                            if (metadata[idx].FormId == element.attr(\"id\")) {\n                                return rulesFromData(metadata[idx]);\n                            }\n                        }\n                    }\n                    return {};\n                }\n            }\n        }\n    });\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/_references.js",
    "content": "﻿/// <reference path=\"jquery-2.1.4.js\" />\r\n/// <reference path=\"bootstrap.js\" />\r\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/bootstrap.js",
    "content": "/**\n* bootstrap.js v3.0.0 by @fat and @mdo\n* Copyright 2013 Twitter Inc.\n* http://www.apache.org/licenses/LICENSE-2.0\n*/\nif (!jQuery) { throw new Error(\"Bootstrap requires jQuery\") }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      'WebkitTransition' : 'webkitTransitionEnd'\n    , 'MozTransition'    : 'transitionend'\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\n    , 'transition'       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false, $el = this\n    $(this).one($.support.transition.end, function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      $parent.trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one($.support.transition.end, removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.alert\n\n  $.fn.alert = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element = $(element)\n    this.options  = $.extend({}, Button.DEFAULTS, options)\n  }\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (!data.resetText) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] || this.options[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout(function () {\n      state == 'loadingText' ?\n        $el.addClass(d).attr(d, d) :\n        $el.removeClass(d).removeAttr(d);\n    }, 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n        .prop('checked', !this.$element.hasClass('active'))\n        .trigger('change')\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n    }\n\n    this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  var old = $.fn.button\n\n  $.fn.button = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    $btn.button('toggle')\n    e.preventDefault()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#carousel\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter', $.proxy(this.pause, this))\n      .on('mouseleave', $.proxy(this.cycle, this))\n  }\n\n  Carousel.DEFAULTS = {\n    interval: 5000\n  , pause: 'hover'\n  , wrap: true\n  }\n\n  Carousel.prototype.cycle =  function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getActiveIndex = function () {\n    this.$active = this.$element.find('.item.active')\n    this.$items  = this.$active.parent().children()\n\n    return this.$items.index(this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getActiveIndex()\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n    if ($next.hasClass('active')) return\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid', function () {\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n        $nextIndicator && $nextIndicator.addClass('active')\n      })\n    }\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one($.support.transition.end, function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\n        })\n        .emulateTransitionEnd(600)\n    } else {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid')\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.carousel\n\n  $.fn.carousel = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var $this   = $(this), href\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    $target.carousel(options)\n\n    if (slideIndex = $this.attr('data-slide-to')) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      $carousel.carousel($carousel.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#collapse\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      actives.collapse('hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')\n      [dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('in')\n        [dimension]('auto')\n      this.transitioning = 0\n      this.$element.trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n      [dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element\n      [dimension](this.$element[dimension]())\n      [0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.collapse\n\n  $.fn.collapse = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n    var $this   = $(this), href\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    $target.collapse(option)\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#dropdowns\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=dropdown]'\n  var Dropdown = function (element) {\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown')\n\n      $this.focus()\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).focus()\n      return $this.click()\n    }\n\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index=0\n\n    $items.eq(index).focus()\n  }\n\n  function clearMenus() {\n    $(backdrop).remove()\n    $(toggle).each(function (e) {\n      var $parent = getParent($(this))\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('dropdown')\n\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#modals\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options   = options\n    this.$element  = $(element)\n    this.$backdrop =\n    this.isShown   = null\n\n    if (this.options.remote) this.$element.load(this.options.remote)\n  }\n\n  Modal.DEFAULTS = {\n      backdrop: true\n    , keyboard: true\n    , show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.escape()\n\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(document.body) // don't move modals dom position\n      }\n\n      that.$element.show()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one($.support.transition.end, function () {\n            that.$element.focus().trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.focus().trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.focus()\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.removeBackdrop()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that    = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(document.body)\n\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      $.support.transition && this.$element.hasClass('fade')?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.modal\n\n  $.fn.modal = function (option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    e.preventDefault()\n\n    $target\n      .modal(option, this)\n      .one('hide', function () {\n        $this.is(':visible') && $this.focus()\n      })\n  })\n\n  $(document)\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.DEFAULTS = {\n    animation: true\n  , placement: 'top'\n  , selector: false\n  , template: '<div class=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>'\n  , trigger: 'hover focus'\n  , title: ''\n  , delay: 0\n  , html: false\n  , container: false\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled  = true\n    this.type     = type\n    this.$element = $(element)\n    this.options  = this.getOptions(options)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay\n      , hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.'+ this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      var $tip = this.tip()\n\n      this.setContent()\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var $parent = this.$element.parent()\n\n        var orgPlacement = placement\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\n\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n      this.$element.trigger('shown.bs.' + this.type)\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\n    var replace\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    $tip\n      .offset(offset)\n      .addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      replace = true\n      offset.top = offset.top + height - actualHeight\n    }\n\n    if (/bottom|top/.test(placement)) {\n      var delta = 0\n\n      if (offset.left < 0) {\n        delta       = offset.left * -2\n        offset.left = 0\n\n        $tip.offset(offset)\n\n        actualWidth  = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n      }\n\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n    } else {\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\n    }\n\n    if (replace) $tip.offset(offset)\n  }\n\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one($.support.transition.end, complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.$element.trigger('hidden.bs.' + this.type)\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function () {\n    var el = this.$element[0]\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n      width: el.offsetWidth\n    , height: el.offsetHeight\n    }, this.$element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.tip = function () {\n    return this.$tip = this.$tip || $(this.options.template)\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#popovers\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right'\n  , trigger: 'click'\n  , content: ''\n  , template: '<div class=\"popover\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.popover\n\n  $.fn.popover = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#scrollspy\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var href\n    var process  = $.proxy(this.process, this)\n\n    this.$element       = $(element).is('body') ? $(window) : $(element)\n    this.$body          = $('body')\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n      || '') + ' .nav li > a'\n    this.offsets        = $([])\n    this.targets        = $([])\n    this.activeTarget   = null\n\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n    this.offsets = $([])\n    this.targets = $([])\n\n    var self     = this\n    var $targets = this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#\\w/.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate( targets[i] )\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parents('.active')\n      .removeClass('active')\n\n    var selector = this.selector\n      + '[data-target=\"' + target + '\"],'\n      + this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length)  {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      $spy.scrollspy($spy.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tabs\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.parent('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab'\n      , relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one($.support.transition.end, next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  var old = $.fn.tab\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    $(this).tab('show')\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#affix\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n    this.$window = $(window)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element = $(element)\n    this.affixed  =\n    this.unpin    = null\n\n    this.checkPosition()\n  }\n\n  Affix.RESET = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$window.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin) this.$element.css('top', '')\n\n    this.affixed = affix\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.affix\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      $spy.affix(data)\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/global.js",
    "content": "﻿$(document).ready(function () {\n    kendo.culture(\"en-GB\");\n\n    if (getCookie(\"cookies-notification\") != \"ok\") {\n        $(\"#cookies-notification\").show();\n    }\n\n    $(\"#cookies-notification-button\").click(function () {\n        $(\"#cookies-notification\").hide();\n        setCookie(\"cookies-notification\", \"ok\", 3650);\n        return false;\n    });\n});\n\nfunction CreateExportToExcelButton(elementId) {\n    elementId = typeof elementId !== 'undefined' ? elementId : \"DataGrid\";\n    CreateKendoSubmitParamsButton(\"export\", elementId);\n}\n\nfunction CreateKendoSubmitParamsButton(buttonId, elementId) {\n    elementId = typeof elementId !== 'undefined' ? elementId : \"DataGrid\";\n    var grid = $('#' + elementId).data('kendoGrid');\n    // ask the parameterMap to create the request object for you\n    var requestObject = (new kendo.data.transports[\"aspnetmvc-server\"]({ prefix: \"\" }))\n    .options.parameterMap({\n        page: grid.dataSource.page(),\n        sort: grid.dataSource.sort(),\n        filter: grid.dataSource.filter()\n    });\n\n    // Get the export link as jQuery object\n    var $exportLink = $('#' + buttonId);\n\n    // Get its 'href' attribute - the URL where it would navigate to\n    var href = $exportLink.attr('href');\n\n    // Update the 'page' parameter with the grid's current page\n    href = href.replace(/page=([^&]*)/, 'page=' + requestObject.page || '~');\n\n    // Update the 'sort' parameter with the grid's current sort descriptor\n    href = href.replace(/sort=([^&]*)/, 'sort=' + requestObject.sort || '~');\n\n    // Update the 'pageSize' parameter with the grid's current pageSize\n    href = href.replace(/pageSize=([^&]*)/, 'pageSize=' + grid.dataSource._pageSize);\n\n    //update filter descriptor with the filters applied\n\n    href = href.replace(/filter=([^&]*)/, 'filter=' + (requestObject.filter || '~'));\n\n    // Update the 'href' attribute\n    $exportLink.attr('href', href);\n}\n\nfunction setCookie(cname, cvalue, exdays) {\n    var d = new Date();\n    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\n    var expires = \"expires=\" + d.toGMTString();\n    document.cookie = cname + \"=\" + cvalue + \"; \" + expires;\n}\n\nfunction getCookie(cname) {\n    var name = cname + \"=\";\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n        var c = ca[i].trim();\n        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);\n    }\n    return \"\";\n}\n\nfunction calculateRemainingTimeOnClient(condownTimerContainerId, remainingTimeFormat, remainingTimeOnServerInMilliseconds) {\n    $('#' + condownTimerContainerId).prepend(remainingTimeFormat);\n    var remainingTimeOnServer;\n    if (typeof stringValue) {\n        remainingTimeOnServer = parseInt(remainingTimeOnServerInMilliseconds);\n    }\n    else {\n        remainingTimeOnServer = remainingTimeOnServerInMillisecond;\n    }\n    var currentTimeOnClient = new Date();\n    var remainingTimeOnClient = currentTimeOnClient;\n    remainingTimeOnClient.setTime(currentTimeOnClient.getTime() + remainingTimeOnServer);\n    var timer = new countdownTimer({\n        year: remainingTimeOnClient.getFullYear(),\n        month: remainingTimeOnClient.getMonth(),\n        day: remainingTimeOnClient.getDate(),\n        hour: remainingTimeOnClient.getHours(),\n        minute: remainingTimeOnClient.getMinutes(),\n        second: remainingTimeOnClient.getSeconds()\n    });\n\n    timer.start();\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery-2.1.4.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <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>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <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>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <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>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <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>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <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>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <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>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <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>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <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>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <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>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <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>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <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>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <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>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <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>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <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>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <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>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <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>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <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>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <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>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <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>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <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>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <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>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <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>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <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>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <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>\n    ///   <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>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <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>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery-2.1.4.js",
    "content": "/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-04-28T16:01Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.0-pre\n * http://sizzlejs.com/\n *\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-12-16\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\tnodeType = context.nodeType;\n\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\tif ( !seed && documentIsHTML ) {\n\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType !== 1 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\tparent = doc.defaultView;\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Support tests\n\t---------------------------------------------------------------------- */\n\tdocumentIsHTML = !isXML( doc );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\f]' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// We once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android<4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android<4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Support: Firefox, Chrome, Safari\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optimization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tif ( elem.ownerDocument.defaultView.opener ) {\n\t\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t\t}\n\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\t\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// Swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur(),\n\t\t\t\t// break the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// 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\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// Toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = window.location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// Support: BlackBerry 5, iOS 3 (original iPhone)\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Support: Safari<7+, Chrome<37+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery.unobtrusive-ajax.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n** Unobtrusive Ajax support library for jQuery\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global window: false, jQuery: false */\n\n(function ($) {\n    var data_click = \"unobtrusiveAjaxClick\",\n        data_target = \"unobtrusiveAjaxClickTarget\",\n        data_validation = \"unobtrusiveValidation\";\n\n    function getFunction(code, argNames) {\n        var fn = window, parts = (code || \"\").split(\".\");\n        while (fn && parts.length) {\n            fn = fn[parts.shift()];\n        }\n        if (typeof (fn) === \"function\") {\n            return fn;\n        }\n        argNames.push(code);\n        return Function.constructor.apply(null, argNames);\n    }\n\n    function isMethodProxySafe(method) {\n        return method === \"GET\" || method === \"POST\";\n    }\n\n    function asyncOnBeforeSend(xhr, method) {\n        if (!isMethodProxySafe(method)) {\n            xhr.setRequestHeader(\"X-HTTP-Method-Override\", method);\n        }\n    }\n\n    function asyncOnSuccess(element, data, contentType) {\n        var mode;\n\n        if (contentType.indexOf(\"application/x-javascript\") !== -1) {  // jQuery already executes JavaScript for us\n            return;\n        }\n\n        mode = (element.getAttribute(\"data-ajax-mode\") || \"\").toUpperCase();\n        $(element.getAttribute(\"data-ajax-update\")).each(function (i, update) {\n            var top;\n\n            switch (mode) {\n            case \"BEFORE\":\n                top = update.firstChild;\n                $(\"<div />\").html(data).contents().each(function () {\n                    update.insertBefore(this, top);\n                });\n                break;\n            case \"AFTER\":\n                $(\"<div />\").html(data).contents().each(function () {\n                    update.appendChild(this);\n                });\n                break;\n            case \"REPLACE-WITH\":\n                $(update).replaceWith(data);\n                break;\n            default:\n                $(update).html(data);\n                break;\n            }\n        });\n    }\n\n    function asyncRequest(element, options) {\n        var confirm, loading, method, duration;\n\n        confirm = element.getAttribute(\"data-ajax-confirm\");\n        if (confirm && !window.confirm(confirm)) {\n            return;\n        }\n\n        loading = $(element.getAttribute(\"data-ajax-loading\"));\n        duration = parseInt(element.getAttribute(\"data-ajax-loading-duration\"), 10) || 0;\n\n        $.extend(options, {\n            type: element.getAttribute(\"data-ajax-method\") || undefined,\n            url: element.getAttribute(\"data-ajax-url\") || undefined,\n            cache: !!element.getAttribute(\"data-ajax-cache\"),\n            beforeSend: function (xhr) {\n                var result;\n                asyncOnBeforeSend(xhr, method);\n                result = getFunction(element.getAttribute(\"data-ajax-begin\"), [\"xhr\"]).apply(element, arguments);\n                if (result !== false) {\n                    loading.show(duration);\n                }\n                return result;\n            },\n            complete: function () {\n                loading.hide(duration);\n                getFunction(element.getAttribute(\"data-ajax-complete\"), [\"xhr\", \"status\"]).apply(element, arguments);\n            },\n            success: function (data, status, xhr) {\n                asyncOnSuccess(element, data, xhr.getResponseHeader(\"Content-Type\") || \"text/html\");\n                getFunction(element.getAttribute(\"data-ajax-success\"), [\"data\", \"status\", \"xhr\"]).apply(element, arguments);\n            },\n            error: function () {\n                getFunction(element.getAttribute(\"data-ajax-failure\"), [\"xhr\", \"status\", \"error\"]).apply(element, arguments);\n            }\n        });\n\n        options.data.push({ name: \"X-Requested-With\", value: \"XMLHttpRequest\" });\n\n        method = options.type.toUpperCase();\n        if (!isMethodProxySafe(method)) {\n            options.type = \"POST\";\n            options.data.push({ name: \"X-HTTP-Method-Override\", value: method });\n        }\n\n        $.ajax(options);\n    }\n\n    function validate(form) {\n        var validationInfo = $(form).data(data_validation);\n        return !validationInfo || !validationInfo.validate || validationInfo.validate();\n    }\n\n    $(document).on(\"click\", \"a[data-ajax=true]\", function (evt) {\n        evt.preventDefault();\n        asyncRequest(this, {\n            url: this.href,\n            type: \"GET\",\n            data: []\n        });\n    });\n\n    $(document).on(\"click\", \"form[data-ajax=true] input[type=image]\", function (evt) {\n        var name = evt.target.name,\n            target = $(evt.target),\n            form = $(target.parents(\"form\")[0]),\n            offset = target.offset();\n\n        form.data(data_click, [\n            { name: name + \".x\", value: Math.round(evt.pageX - offset.left) },\n            { name: name + \".y\", value: Math.round(evt.pageY - offset.top) }\n        ]);\n\n        setTimeout(function () {\n            form.removeData(data_click);\n        }, 0);\n    });\n\n    $(document).on(\"click\", \"form[data-ajax=true] :submit\", function (evt) {\n        var name = evt.currentTarget.name,\n            target = $(evt.target),\n            form = $(target.parents(\"form\")[0]);\n\n        form.data(data_click, name ? [{ name: name, value: evt.currentTarget.value }] : []);\n        form.data(data_target, target);\n\n        setTimeout(function () {\n            form.removeData(data_click);\n            form.removeData(data_target);\n        }, 0);\n    });\n\n    $(document).on(\"submit\", \"form[data-ajax=true]\", function (evt) {\n        var clickInfo = $(this).data(data_click) || [],\n            clickTarget = $(this).data(data_target),\n            isCancel = clickTarget && clickTarget.hasClass(\"cancel\");\n        evt.preventDefault();\n        if (!isCancel && !validate(this)) {\n            return;\n        }\n        asyncRequest(this, {\n            url: this.action,\n            type: this.method || \"GET\",\n            data: clickInfo.concat($(this).serializeArray())\n        });\n    });\n}(jQuery));"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery.validate-vsdoc.js",
    "content": "﻿/*\n* This file has been commented to support Visual Studio Intellisense.\n* You should not use this file at runtime inside the browser--it is only\n* intended to be used only for design-time IntelliSense.  Please use the\n* standard jQuery library for all production use.\n*\n* Comment version: 1.14.0\n*/\n\n/*\n* Note: While Microsoft is not the author of this file, Microsoft is\n* offering you a license subject to the terms of the Microsoft Software\n* License Terms for Microsoft ASP.NET Model View Controller 3.\n* Microsoft reserves all other rights. The notices below are provided\n* for informational purposes only and are not the license terms under\n* which Microsoft distributed this file.\n*\n* jQuery Validation Plugin - v1.14.0 - 2/4/2013\n* https://github.com/jzaefferer/jquery-validation\n* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT\n*\n*/\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\t\t/// <summary>\n\t\t/// Validates the selected form. This method sets up event handlers for submit, focus,\n\t\t/// keyup, blur and click to trigger validation of the entire form or individual\n\t\t/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,\n\t\t/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.\n\t\t/// </summary>\n\t\t/// <param name=\"options\" type=\"Object\">\n\t\t/// A set of key/value pairs that configure the validate. All options are optional.\n\t\t/// </param>\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\toptions && options.debug && window.console && console.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\t\t\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator); \n\t\t\n\t\tif ( validator.settings.onsubmit ) {\n\t\t\n\t\t\t// allow suppresing validation by adding a cancel class to the submit button\n\t\t\tthis.find(\"input, button\").filter(\".cancel\").click(function() {\n\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t});\n\t\t\t\n\t\t\t// when a submitHandler is used, capture the submitting button\n\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\tthis.find(\"input, button\").filter(\":submit\").click(function() {\n\t\t\t\t\tvalidator.submitButton = this;\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug )\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\n\t\t\t\tfunction handle() {\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\tvar hidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\t/// <summary>\n\t\t/// Checks if the selected form is valid or if all selected elements are valid.\n\t\t/// validate() needs to be called on the form before checking it using this method.\n\t\t/// </summary>\n\t\t/// <returns type=\"Boolean\" />\n\n        if ( $(this[0]).is('form')) {\n            return this.validate().form();\n        } else {\n            var valid = true;\n            var validator = $(this[0].form).validate();\n            this.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n            });\n            return valid;\n        }\n    },\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\t/// <summary>\n\t\t/// Remove the specified attributes from the first matched element and return them.\n\t\t/// </summary>\n\t\t/// <param name=\"attributes\" type=\"String\">\n\t\t/// A space-seperated list of attribute names to remove.\n\t\t/// </param>\n\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\t/// <summary>\n\t\t/// Return the validations rules for the first selected element.\n\t\t/// </summary>\n\t\t/// <param name=\"command\" type=\"String\">\n\t\t/// Can be either \"add\" or \"remove\".\n\t\t/// </param>\n\t\t/// <param name=\"argument\" type=\"\">\n\t\t/// A list of rules to add or remove.\n\t\t/// </param>\n\n\t\tvar element = this[0];\n\t\t\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages)\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\t\t\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\t/// <summary>\n\t/// Replaces {n} placeholders with arguments.\n\t/// One or more arguments can be passed, in addition to the string template itself, to insert\n\t/// into the string.\n\t/// </summary>\n\t/// <param name=\"source\" type=\"String\">\n\t/// The string to format.\n\t/// </param>\n\t/// <param name=\"params\" type=\"String\">\n\t/// The first argument to insert, or an array of Strings to insert\n\t/// </param>\n\t/// <returns type=\"String\" />\n\n\tif ( arguments.length == 1 ) \n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\tif ( arguments.length > 2 && params.constructor != Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor != Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\t\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: [],\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element) {\n\t\t\tthis.lastActive = element;\n\t\t\t\t\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tthis.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element) {\n\t\t\tif ( element.name in this.submitted || element == this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted )\n\t\t\t\tthis.element(element);\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted)\n\t\t\t\tthis.element(element.parentNode);\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t/// <summary>\n\t\t/// Modify default settings for validation.\n\t\t/// Accepts everything that Plugins/Validation/validate accepts.\n\t\t/// </summary>\n\t\t/// <param name=\"settings\" type=\"Options\">\n\t\t/// Options to set as default.\n\t\t/// </param>\n\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\taccept: \"Please enter a value with a valid extension.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\t\n\tautoCreateRanges: false,\n\t\n\tprototype: {\n\t\t\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\t\t\t\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\t\t\t\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tvalidator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, :password, :file, select, textarea\", \"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\":radio, :checkbox, select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler)\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\t/// <summary>\n\t\t\t/// Validates the form, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as a normal submit event, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid())\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\t\t\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid(); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\t/// <summary>\n\t\t\t/// Validates a single element, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as validation on blur or keyup, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"element\" type=\"Selector\">\n\t\t\t/// An element to validate, must be inside the validated form.\n\t\t\t/// </param>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\telement = this.clean( element );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element );\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\t/// <summary>\n\t\t\t/// Show the specified messages.\n\t\t\t/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"errors\" type=\"Object\">\n\t\t\t/// One or more key/value pairs of input names and messages.\n\t\t\t/// </param>\n\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.settings.showErrors\n\t\t\t\t? this.settings.showErrors.call( this, this.errorMap, this.errorList )\n\t\t\t\t: this.defaultShowErrors();\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\t/// <summary>\n\t\t\t/// Resets the controlled form.\n\t\t\t/// Resets input fields to their original value (requires form plugin), removes classes\n\t\t\t/// indicating invalid elements and hides error messages.\n\t\t\t/// </summary>\n\n\t\t\tif ( $.fn.resetForm )\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass );\n\t\t},\n\t\t\n\t\tnumberOfInvalids: function() {\n\t\t\t/// <summary>\n\t\t\t/// Returns the number of invalid fields.\n\t\t\t/// This depends on the internal validator state. It covers all fields only after\n\t\t\t/// validating the complete form (on submit or via $(\"form\").valid()). After validating\n\t\t\t/// a single element, only that element is counted. Most useful in combination with the\n\t\t\t/// invalidHandler-option.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Number\" />\n\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\t\t\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj )\n\t\t\t\tcount++;\n\t\t\treturn count;\n\t\t},\n\t\t\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\t\t\n\t\tvalid: function() {\n\t\t\treturn this.size() == 0;\n\t\t},\n\t\t\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\t\t\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name == lastActive.name;\n\t\t\t}).length == 1 && lastActive;\n\t\t},\n\t\t\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\t\t\t\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved\n\t\t\treturn $([]).add(this.currentForm.elements)\n\t\t\t.filter(\":input\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\t!this.name && validator.settings.debug && window.console && console.error( \"%o has no name assigned\", this);\n\t\t\t\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) )\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t\t\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\t\t\n\t\terrors: function() {\n\t\t\treturn $( this.settings.errorElement + \".\" + this.settings.errorClass, this.errorContext );\n\t\t},\n\t\t\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\t\t\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\t\t\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\t\n\t\tcheck: function( element ) {\n\t\t\telement = this.clean( element );\n\t\t\t\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t    element = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\t\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tfor (var method in rules) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\t\t\t\t\tvar result = $.validator.methods[method].call( this, element.value.replace(/\\r/g, \"\"), element, rule.parameters );\n\t\t\t\t\t\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result == \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\t\t\t\t\t\n\t\t\t\t\tif ( result == \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthis.settings.debug && window.console && console.log(\"exception occured when checking element \" + element.id\n\t\t\t\t\t\t + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch)\n\t\t\t\treturn;\n\t\t\tif ( this.objectLength(rules) )\n\t\t\t\tthis.successList.push(element);\n\t\t\treturn true;\n\t\t},\n\t\t\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tvar meta = this.settings.meta\n\t\t\t\t? $(element).metadata()[this.settings.meta]\n\t\t\t\t: $(element).metadata();\n\t\t\t\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\t\t\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor == String\n\t\t\t\t? m\n\t\t\t\t: m[method]);\n\t\t},\n\t\t\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined)\n\t\t\t\t\treturn arguments[i];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\t\t\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message == \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\t\t\t\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\t\t\t\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\t\t\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper )\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\treturn toToggle;\n\t\t},\n\t\t\n\t\tdefaultShowErrors: function() {\n\t\t\tfor ( var i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tthis.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( var i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\t\t\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\t\t\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\t\t\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass().addClass( this.settings.errorClass );\n\t\t\t\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tlabel.attr(\"generated\") && label.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length )\n\t\t\t\t\tthis.settings.errorPlacement\n\t\t\t\t\t\t? this.settings.errorPlacement(label, $(element) )\n\t\t\t\t\t\t: label.insertAfter(element);\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\ttypeof this.settings.success == \"string\"\n\t\t\t\t\t? label.addClass( this.settings.success )\n\t\t\t\t\t: this.settings.success( label );\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\t\t\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n    \t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') == name;\n\t\t\t});\n\t\t},\n\t\t\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn /radio|checkbox/i.test(element.type);\n\t\t},\n\t\t\n\t\tfindByName: function( name ) {\n\t\t\t// select by name and filter by form for performance over form.find(\"[name=...]\")\n\t\t\tvar form = this.currentForm;\n\t\t\treturn $(document.getElementsByName(name)).map(function(index, element) {\n\t\t\t\treturn element.form == form && element.name == name && element  || null;\n\t\t\t});\n\t\t},\n\t\t\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) )\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\t\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param]\n\t\t\t\t? this.dependTypes[typeof param](param, element)\n\t\t\t\t: true;\n\t\t},\n\t\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\t\t\n\t\toptional: function(element) {\n\t\t\treturn !$.validator.methods.required.call(this, $.trim(element.value), element) && \"dependency-mismatch\";\n\t\t},\n\t\t\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\t\t\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0)\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\t\t\n\t},\n\t\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tdateDE: {dateDE: true},\n\t\tnumber: {number: true},\n\t\tnumberDE: {numberDE: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\t\n\taddClassRules: function(className, rules) {\n\t\t/// <summary>\n\t\t/// Add a compound class method - useful to refactor common combinations of rules into a single\n\t\t/// class.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the class rule to add\n\t\t/// </param>\n\t\t/// <param name=\"rules\" type=\"Options\">\n\t\t/// The compound rules\n\t\t/// </param>\n\n\t\tclassName.constructor == String ?\n\t\t\tthis.classRuleSettings[className] = rules :\n\t\t\t$.extend(this.classRuleSettings, className);\n\t},\n\t\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tclasses && $.each(classes.split(' '), function() {\n\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t}\n\t\t});\n\t\treturn rules;\n\t},\n\t\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value = $element.attr(method);\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) return {};\n\t\t\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\t\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\t\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\t\t\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\t\t\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data == \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\t\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t/// <summary>\n\t\t/// Add a custom validation method. It must consist of a name (must be a legal javascript \n\t\t/// identifier), a javascript based function and a default string message.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the method, used to identify and referencing it, must be a valid javascript\n\t\t/// identifier\n\t\t/// </param>\n\t\t/// <param name=\"method\" type=\"Function\">\n\t\t/// The actual method implementation, returning true if an element is valid\n\t\t/// </param>\n\t\t/// <param name=\"message\" type=\"String\" optional=\"true\">\n\t\t/// (Optional) The default message to display for this method. Can be a function created by \n\t\t/// jQuery.validator.format(value). When undefined, an already existing message is used \n\t\t/// (handy for localization), otherwise the field-specific messages have to be defined.\n\t\t/// </param>\n\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\tcase 'input':\n\t\t\t\tif ( this.checkable(element) )\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\tdefault:\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t}\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] )\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\t\t\t\n\t\t\tparam = typeof param == \"string\" && {url:param} || param; \n\t\t\t\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n        \n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t// accept only digits and dashes\n\t\t\tif (/[^0-9-]+/.test(value))\n\t\t\t\treturn false;\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tvar nDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9)\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) == 0;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/accept\n\t\taccept: function(value, element, param) {\n\t\t\tparam = typeof param == \"string\" ? param.replace(/,/g, '|') : \"png|jpe?g|gif\";\n\t\t\treturn this.optional(element) || value.match(new RegExp(\".(\" + param + \")$\", \"i\")); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param).unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t$(element).valid();\n\t\t\t});\n\t\t\treturn value == target.val();\n\t\t}\n\t\t\n\t}\n\t\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n})(jQuery);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() \n;(function($) {\n\tvar pendingRequests = {};\n\t\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t    var port = settings.port;\n\t\t    if (settings.mode == \"abort\") {\n\t\t\t    if ( pendingRequests[port] ) {\n\t\t\t\t    pendingRequests[port].abort();\n\t\t\t    }\t\t\t\tpendingRequests[port] = xhr;\n\t\t    }\n\t    });\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode == \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\n\t\t\t    return (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t    }\n\t\t    return ajax.apply(this, arguments);\n\t    };\n    }\n})(jQuery);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target \n;(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\t\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\targuments[0] = $.event.fix(e);\n\t\t\t\t\targuments[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t};\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.14.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2015 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend($.fn, {\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t});\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\t\t\t\t// remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param });\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\treturn !!$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t});\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox']\", delegate)\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on(\"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tresult = true;\n\n\t\t\tthis.lastElement = checkElement;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\tresult = this.check( checkElement ) !== false;\n\t\t\t\tif ( result ) {\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add aria-invalid status for screen readers\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\n\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[ name ],\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar i, elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements.removeClass( this.settings.errorClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ this.name ] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar val,\n\t\t\t\t$element = $( element ),\n\t\t\t\ttype = element.type;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter(\":checked\").val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\n\t\t\t}\n\n\t\t\tval = $element.val();\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[ method ],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t});\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\t\t\tif ( error.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\t\t\t\t// create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\]|\\$)/g, \"\\\\$1\");\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName( element ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// aria-describedby should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t},\n\n\t\t// cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t});\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/creditcard-method/\n\t\t// based on http://en.wikipedia.org/wiki/Luhn_algorithm\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false,\n\t\t\t\tn, cDigit;\n\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\n\n\t\t\t// Basing min and max length on\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\n\t\t\t\tcDigit = value.charAt( n );\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn ( nCheck % 10 ) === 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.off( \".validate-equalTo\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue( element ),\n\t\t\t\tvalidator, data;\n\n\t\t\tif (!this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n});\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = xhr;\n\t\t}\n\t});\n} else {\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\treturn pendingRequests[port];\n\t\t}\n\t\treturn ajax.apply(this, arguments);\n\t};\n}\n\n}));"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Scripts/jquery.validate.unobtrusive.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n        if (container) {\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this),\n            key = '__jquery_unobtrusive_validation_form_reset';\n        if ($form.data(key)) {\n            return;\n        }\n        // Set a flag that indicates we're currently resetting the form.\n        $form.data(key, true);\n        try {\n            $form.data(\"validator\").resetForm();\n        } finally {\n            $form.removeData(key);\n        }\n\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n                .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            }\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                                  .addBack()\n                                  .filter(\"form\")\n                                  .add($selector.find(\"form\"))\n                                  .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\n                // For checkboxes and radio buttons, only pick up values from checked fields.\n                if (field.is(\":checkbox\")) {\n                    return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\n                }\n                else if (field.is(\":radio\")) {\n                    return field.filter(\":checked\").val() || '';\n                }\n                return field.val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n}(jQuery));"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Startup.cs",
    "content": "﻿[assembly: Microsoft.Owin.OwinStartup(typeof(OJS.Web.Startup))]\n\nnamespace OJS.Web\n{\n    using Owin;\n\n    public partial class Startup\n    {\n        public void Configuration(IAppBuilder app)\n        {\n            this.ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/ChangeEmailViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class ChangeEmailViewModel\n    {\n        [StringLength(\n            GlobalConstants.PasswordMaxLength,\n            MinimumLength = GlobalConstants.PasswordMinLength,\n            ErrorMessageResourceName = \"Password_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Password_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Password\", ResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        public string Password { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Email_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.EmailAddress)]\n        [Display(\n            Name = \"Email\",\n            ResourceType = typeof(Resource))]\n        [EmailAddress(\n            ErrorMessage = null,\n            ErrorMessageResourceName = \"Email_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string Email { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Email_confirmation_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.EmailAddress)]\n        [Display(\n            Name = \"Email_confirm\",\n            ResourceType = typeof(Resource))]\n        [EmailAddress(\n            ErrorMessage = null,\n            ErrorMessageResourceName = \"Email_confirmation_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Compare(\n            \"Email\",\n            ErrorMessageResourceName = \"Email_confirmation_invalid\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string EmailConfirmation { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/ChangeUsernameViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class ChangeUsernameViewModel\n    {\n        [StringLength(\n            GlobalConstants.UserNameMaxLength,\n            MinimumLength = GlobalConstants.UserNameMinLength,\n            ErrorMessageResourceName = \"Username_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Username_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n            Name = \"Username\",\n            ResourceType = typeof(Resource))]\n        [RegularExpression(\n            GlobalConstants.UserNameRegEx,\n            ErrorMessageResourceName = \"Username_regex_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string Username { get; set; }\n\n        [Compare(\n            \"Username\",\n            ErrorMessageResourceName = \"Username_confirmation_incorrect\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n            Name = \"Username_confirmation\",\n            ResourceType = typeof(Resource))]\n        public string UsernameConfirmation { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/ExternalLoginConfirmationViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class ExternalLoginConfirmationViewModel\n    {\n        [StringLength(\n                GlobalConstants.UserNameMaxLength,\n                MinimumLength = GlobalConstants.UserNameMinLength,\n                ErrorMessageResourceName = \"Username_validation\",\n                ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n                ErrorMessageResourceName = \"Username_required\",\n                ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n                Name = \"Username\",\n                ResourceType = typeof(Resource))]\n        [RegularExpression(\n                GlobalConstants.UserNameRegEx,\n                ErrorMessageResourceName = \"Username_regex_validation\",\n                ErrorMessageResourceType = typeof(Resource))]\n        public string UserName { get; set; }\n\n        [Required]\n        [DataType(DataType.EmailAddress)]\n        public string Email { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/ForgottenPasswordViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class ForgottenPasswordViewModel\n    {\n        [Required(\n            ErrorMessageResourceName = \"Enter_new_password_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n            Name = \"Password\",\n            ResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        public string Password { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Enter_new_password_confirmation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n            Name = \"Password_confirm\",\n            ResourceType = typeof(Resource))]\n        [Compare(\n            \"Password\",\n            ErrorMessageResourceName = \"New_password_confirm_password_not_matching_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        public string PasswordConfirmation { get; set; }\n\n        public Guid Token { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/LoginViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class LoginViewModel\n    {\n        [Required(\n                ErrorMessageResourceName = \"Username_required\",\n                ErrorMessageResourceType = typeof(Resource))]\n        [Display(\n                Name = \"Username\",\n                ResourceType = typeof(Resource))]\n        public string UserName { get; set; }\n\n        [Required(\n                ErrorMessageResourceName = \"Enter_password\",\n                ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        [Display(\n                Name = \"Password\",\n                ResourceType = typeof(Resource))]\n        public string Password { get; set; }\n\n        [Display(\n                Name = \"Remember_me\",\n                ResourceType = typeof(Resource))]\n        public bool RememberMe { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/ManageUserViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class ManageUserViewModel\n    {\n        [Required(\n            ErrorMessageResourceName = \"Enter_password_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        [Display(\n            Name = \"Current_password\",\n            ResourceType = typeof(Resource))]\n        public string OldPassword { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Enter_new_password_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.PasswordMaxLength,\n            MinimumLength = GlobalConstants.PasswordMinLength,\n            ErrorMessageResourceName = \"Password_length_validation_message\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New_password\", ResourceType = typeof(Resource))]\n        public string NewPassword { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Enter_new_password_confirmation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        [Display(\n            Name = \"New_password_confirmation\",\n            ResourceType = typeof(Resource))]\n        [Compare(\n            \"NewPassword\",\n            ErrorMessageResourceName = \"New_password_confirm_password_not_matching_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string ConfirmPassword { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Account/RegisterViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Account\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Account.AccountViewModels;\n\n    public class RegisterViewModel\n    {\n        [StringLength(\n            GlobalConstants.UserNameMaxLength,\n            MinimumLength = GlobalConstants.UserNameMinLength,\n            ErrorMessageResourceName = \"Username_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Username_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Username\", ResourceType = typeof(Resource))]\n        [RegularExpression(\n            GlobalConstants.UserNameRegEx,\n            ErrorMessageResourceName = \"Username_regex_validation\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string UserName { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Enter_password\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            GlobalConstants.PasswordMaxLength,\n            MinimumLength = GlobalConstants.PasswordMinLength,\n            ErrorMessageResourceName = \"Password_length_validation_message\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.Password)]\n        [Display(\n            Name = \"Password\",\n            ResourceType = typeof(Resource))]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(\n            Name = \"Password_confirm\",\n            ResourceType = typeof(Resource))]\n        [Compare(\n            \"Password\",\n            ErrorMessageResourceName = \"Passwords_dont_match\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string ConfirmPassword { get; set; }\n\n        [Required(\n            ErrorMessageResourceName = \"Email_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [DataType(DataType.EmailAddress)]\n        [EmailAddress(\n            ErrorMessage = null,\n            ErrorMessageResourceName = \"Email_invalid\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [Display(Name = \"Email\", ResourceType = typeof(Resource))]\n        public string Email { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/CategoryMenuItemViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Extensions;\n    using OJS.Data.Models;\n\n    public class CategoryMenuItemViewModel\n    {\n        public static Expression<Func<ContestCategory, CategoryMenuItemViewModel>> FromCategory\n        {\n            get\n            {\n                return category => new CategoryMenuItemViewModel\n                {\n                    Id = category.Id,\n                    Name = category.Name,\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public string NameUrl => this.Name.ToUrl();\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Feedback/FeedbackViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Feedback\n{\n    using System.ComponentModel.DataAnnotations;\n\n    using OJS.Common;\n\n    using Resource = Resources.Feedback.ViewModels.FeedbackViewModels;\n\n    public class FeedbackViewModel\n    {\n        public string Name { get; set; }\n\n        [DataType(DataType.EmailAddress)]\n        [Display(\n            Name = \"Email\",\n            ResourceType = typeof(Resource))]\n        [EmailAddress(\n            ErrorMessage = null,\n            ErrorMessageResourceName = \"Invalid_email\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string Email { get; set; }\n\n        [UIHint(\"MultilineText\")]\n        [Display(\n            Name = \"Content\",\n            ResourceType = typeof(Resource))]\n        [Required(\n            ErrorMessageResourceName = \"Content_required\",\n            ErrorMessageResourceType = typeof(Resource))]\n        [StringLength(\n            int.MaxValue,\n            MinimumLength = GlobalConstants.FeedbackContentMinLength,\n            ErrorMessageResourceName = \"Content_too_short\",\n            ErrorMessageResourceType = typeof(Resource))]\n        public string Content { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Home/Index/HomeContestViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Home.Index\n{\n    using System;\n    using System.Linq.Expressions;\n    using OJS.Data.Models;\n\n    public class HomeContestViewModel\n    {\n        public static Expression<Func<Contest, HomeContestViewModel>> FromContest\n        {\n            get\n            {\n                return contest => new HomeContestViewModel\n                {\n                    Id = contest.Id,\n                    Name = contest.Name,\n                    StartTime = contest.StartTime,\n                    EndTime = contest.EndTime,\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public DateTime? StartTime { get; set; }\n\n        public DateTime? EndTime { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Home/Index/IndexViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Home.Index\n{\n    using System.Collections.Generic;\n\n    public class IndexViewModel\n    {\n        public IEnumerable<HomeContestViewModel> ActiveContests { get; set; }\n\n        public IEnumerable<HomeContestViewModel> PastContests { get; set; }\n\n        public IEnumerable<HomeContestViewModel> FutureContests { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/News/AllNewsViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.News\n{\n    using System.Collections.Generic;\n\n    public class AllNewsViewModel\n    {\n        public IEnumerable<NewsViewModel> AllNews { get; set; }\n\n        public int CurrentPage { get; set; }\n\n        public int PageSize { get; set; }\n\n        public int AllPages { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/News/NewsViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.News\n{\n    using System;\n    using System.Linq.Expressions;\n    using NewsModel = OJS.Data.Models.News;\n\n    public class NewsViewModel\n    {\n        public static Expression<Func<NewsModel, NewsViewModel>> FromNews\n        {\n            get\n            {\n                return news => new NewsViewModel\n                {\n                    Id = news.Id,\n                    Title = news.Title,\n                    Author = news.Author,\n                    Source = news.Source,\n                    TimeCreated = news.CreatedOn\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Title { get; set; }\n\n        public string Author { get; set; }\n\n        public string Source { get; set; }\n\n        public DateTime TimeCreated { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/News/SelectedNewsViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.News\n{\n    using System;\n    using System.Linq.Expressions;\n    using NewsModel = OJS.Data.Models.News;\n\n    public class SelectedNewsViewModel\n    {\n        public static Expression<Func<NewsModel, SelectedNewsViewModel>> FromNews\n        {\n            get\n            {\n                return news => new SelectedNewsViewModel\n                {\n                    Id = news.Id,\n                    Title = news.Title,\n                    Author = news.Author,\n                    Source = news.Source,\n                    TimeCreated = news.CreatedOn,\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Title { get; set; }\n\n        public string Author { get; set; }\n\n        public string Source { get; set; }\n\n        public DateTime TimeCreated { get; set; }\n\n        public string Content { get; set; }\n\n        public int PreviousId { get; set; }\n\n        public int NextId { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Search/SearchResultGroupViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Search\n{\n    using System.Collections.Generic;\n\n    using OJS.Common;\n    using OJS.Web.Common;\n\n    public class SearchResultGroupViewModel\n    {\n        private const int MinimumTermLength = GlobalConstants.MinimumSearchTermLength;\n\n        private string searchTerm;\n\n        public SearchResultGroupViewModel(string searchTerm)\n        {\n            this.SearchTerm = searchTerm;\n            this.SearchResults = new Dictionary<SearchResultType, IEnumerable<SearchResultViewModel>>();\n        }\n\n        public string SearchTerm\n        {\n            get\n            {\n                return this.searchTerm;\n            }\n\n            set\n            {\n                this.searchTerm = value?.Trim();\n            }\n        }\n\n        public bool IsSearchTermValid => !string.IsNullOrWhiteSpace(this.searchTerm) && this.searchTerm.Length >= MinimumTermLength;\n\n        public int MinimumSearchTermLength => MinimumTermLength;\n\n        public IDictionary<SearchResultType, IEnumerable<SearchResultViewModel>> SearchResults { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Search/SearchResultViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Search\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n\n    public class SearchResultViewModel\n    {\n        public static Expression<Func<Problem, SearchResultViewModel>> FromProblem\n        {\n            get\n            {\n                return problem => new SearchResultViewModel\n                {\n                    Id = problem.Id,\n                    Name = problem.Name,\n                    ParentId = problem.ContestId,\n                    ParentName = problem.Contest.Name\n                };\n            }\n        }\n\n        public static Expression<Func<Contest, SearchResultViewModel>> FromContest\n        {\n            get\n            {\n                return contest => new SearchResultViewModel\n                {\n                    Id = contest.Id,\n                    Name = contest.Name,\n                    ParentId = contest.CategoryId,\n                    ParentName = contest.Category.Name\n                };\n            }\n        }\n\n        public static Expression<Func<UserProfile, SearchResultViewModel>> FromUser\n        {\n            get\n            {\n                return user => new SearchResultViewModel\n                {\n                    Name = user.UserName\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public string Name { get; set; }\n\n        public int? ParentId { get; set; }\n\n        public string ParentName { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Shared/PaginationViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Shared\n{\n    public class PaginationViewModel\n    {\n        public int CurrentPage { get; set; }\n\n        public int AllPages { get; set; }\n\n        public string Url { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/Submission/SubmissionViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.Submission\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Linq.Expressions;\n\n    using OJS.Data.Models;\n    using OJS.Web.ViewModels.TestRun;\n\n    public class SubmissionViewModel\n    {\n        public static Expression<Func<Submission, SubmissionViewModel>> FromSubmission\n        {\n            get\n            {\n                return submission => new SubmissionViewModel\n                {\n                    Id = submission.Id,\n                    SubmitedOn = submission.CreatedOn,\n                    ProblemId = submission.ProblemId,\n                    ProblemName = submission.Problem.Name,\n                    ProblemMaximumPoints = submission.Problem.MaximumPoints,\n                    Contest = submission.Problem.Contest.Name,\n                    ParticipantId = submission.ParticipantId,\n                    ParticipantName = submission.Participant.User.UserName,\n                    SubmissionType = submission.SubmissionType.Name,\n                    Processed = submission.Processed,\n                    Points = submission.Points,\n                    IsCompiledSuccessfully = submission.IsCompiledSuccessfully,\n                    TestResults = submission.TestRuns.AsQueryable().Where(x => !x.Test.IsTrialTest).Select(TestRunViewModel.FromTestRun)\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public int? ParticipantId { get; set; }\n\n        public string ParticipantName { get; set; }\n\n        public DateTime SubmitedOn { get; set; }\n\n        public int? ProblemId { get; set; }\n\n        public string ProblemName { get; set; }\n\n        public int ProblemMaximumPoints { get; set; }\n\n        public string Contest { get; set; }\n\n        public string ProgrammingLanguage { get; set; }\n\n        public bool IsCompiledSuccessfully { get; set; }\n\n        public IEnumerable<TestRunViewModel> TestResults { get; set; }\n\n        public bool Processed { get; set; }\n\n        public int Points { get; set; }\n\n        public bool HasFullPoints => this.Points == this.ProblemMaximumPoints;\n\n        public int MaxUsedTime\n        {\n            get\n            {\n                return this.TestResults.Any() ? this.TestResults.Select(x => x.TimeUsed).Max() : 0;\n            }\n        }\n\n        public long MaxUsedMemory\n        {\n            get\n            {\n                return this.TestResults.Any() ? this.TestResults.Select(x => x.MemoryUsed).Max() : 0;\n            }\n        }\n\n        public string SubmissionType { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/ViewModels/TestRun/TestRunViewModel.cs",
    "content": "﻿namespace OJS.Web.ViewModels.TestRun\n{\n    using System;\n    using System.Linq.Expressions;\n\n    using OJS.Common.Models;\n    using OJS.Data.Models;\n\n    public class TestRunViewModel\n    {\n        public static Expression<Func<TestRun, TestRunViewModel>> FromTestRun\n        {\n            get\n            {\n                return testRun => new TestRunViewModel\n                {\n                    Id = testRun.Id,\n                    ExecutionResult = testRun.ResultType,\n                    MemoryUsed = testRun.MemoryUsed,\n                    TimeUsed = testRun.TimeUsed,\n                    ExecutionComment = testRun.ExecutionComment,\n                    IsTrialTest = testRun.Test.IsTrialTest\n                };\n            }\n        }\n\n        public int Id { get; set; }\n\n        public int TimeUsed { get; set; }\n\n        public long MemoryUsed { get; set; }\n\n        public TestRunResultType ExecutionResult { get; set; }\n\n        public string ExecutionComment { get; set; }\n\n        public bool IsTrialTest { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ChangeEmail.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.ChangeEmailViewModel\n\n@{\n    ViewBag.Title = Resources.Account.Views.ChangeEmailView.Title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li>@Html.ActionLink(\"Профил\", GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\" })</li>\n    <li>@Html.ActionLink(\"Настройки\", GlobalConstants.Index, new { controller = \"Settings\", area = \"Users\" })</li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h3>@ViewBag.Title</h3>\n\n@using (Html.BeginForm())\n{\n    <div class=\"row\">\n        <div class=\"row\">\n            <div class=\"col-xs-4 text-right\">\n                @Html.LabelFor(m => m.Password, new { @class = \"text-primary loud\" })\n            </div>\n            <div class=\"col-xs-7\">\n                @Html.EditorFor(m => m.Password)\n                @Html.ValidationMessageFor(m => m.Password)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"col-xs-4 text-right\">\n                @Html.LabelFor(m => m.Email, new { @class = \"text-primary loud\" })\n            </div>\n            <div class=\"col-xs-7\">\n                @Html.EditorFor(m => m.Email)\n                @Html.ValidationMessageFor(m => m.Email)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"col-xs-4 text-right\">\n                @Html.LabelFor(m => m.EmailConfirmation, new { @class = \"text-primary loud\" })\n            </div>\n            <div class=\"col-xs-7\">\n                @Html.EditorFor(m => m.EmailConfirmation)\n                @Html.ValidationMessageFor(m => m.EmailConfirmation)\n            </div>\n        </div>\n        <br />\n        <div class=\"row\">\n            <div class=\"col-xs-4 text-right\">\n                @Html.ActionLink(\n                Resources.Account.Views.ChangeEmailView.Cancel,\n                GlobalConstants.Index,\n                new { controller = \"Settings\", area = \"Users\" },\n                new { @class = \"btn btn-primary\" })\n            </div>\n            <div class=\"col-md-7 text-left\">\n                <button class=\"btn btn-success\" type=\"submit\">@Resources.Account.Views.ChangeEmailView.Save</button>\n            </div>\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ChangePassword.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.ForgottenPasswordViewModel\n\n@using Resource = Resources.Account.Views.ChangePasswordView\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<h2>@Resource.Title</h2>\n\n@Html.ValidationSummary()\n\n@using (Html.BeginForm(\"ChangePassword\", \"Account\"))\n{\n    @Html.HiddenFor(x => x.Token)\n    <div class=\"row\">\n        <div class=\"form-group\">\n            @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n            <div class=\"col-md-4\">\n                @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n                <div class=\"col-md-4\">\n                    @Html.ValidationMessageFor(x => x.Password)\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"form-group\">\n            @Html.LabelFor(m => m.PasswordConfirmation, new { @class = \"col-md-2 control-label\" })\n            <div class=\"col-md-4\">\n                @Html.PasswordFor(m => m.PasswordConfirmation, new { @class = \"form-control\" })\n            </div>\n            <div class=\"col-md-4\">\n                @Html.ValidationMessageFor(x => x.PasswordConfirmation)\n            </div>\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-6\">\n            <input type=\"submit\" value=\"@Resource.Submit\" class=\"pull-right btn btn-default\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ChangeUsername.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.ChangeUsernameViewModel\n\n@{\n    ViewBag.Title = \"Change username\";\n}\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"row\">\n    <div class=\"col-md-5\">\n        @using (Html.BeginForm())\n        {\n            @Html.AntiForgeryToken()\n            @Html.ValidationSummary()\n            <div class=\"form-group row\">\n                @Html.LabelFor(m => m.Username, new { @class = \"col-md-6 control-label\" })\n                <div class=\"col-md-6\">\n                    @Html.TextBoxFor(m => m.Username, new { @class = \"form-control\" })\n                </div>\n            </div>\n            <div class=\"form-group row\">\n                @Html.LabelFor(m => m.UsernameConfirmation, new { @class = \"col-md-6 control-label\" })\n                <div class=\"col-md-6\">\n                    @Html.TextBoxFor(m => m.UsernameConfirmation, new { @class = \"form-control\" })\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <input type=\"submit\" class=\"btn btn-default pull-right\" value=\"@Resources.Account.Views.ChangeUsernameView.Update\" />\n                </div>\n            </div>\n        }\n    </div>\n</div>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ExternalLoginConfirmation.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.ExternalLoginConfirmationViewModel\n@using Resource = Resources.Account.Views.ExternalLoginConfirmation\n\n@{\n    ViewBag.Title = Resource.Register;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h2>@ViewBag.Title</h2>\n\n@if (ViewBag.LoginProvider != null)\n{\n    <h3>@string.Format(Resource.Link_account, ViewBag.LoginProvider)</h3>\n}\n\n@Html.ValidationSummary()\n\n@using (Html.BeginForm(\n                    \"ExternalLoginConfirmation\",\n                    \"Account\",\n                    new { ViewBag.ReturnUrl },\n                    FormMethod.Post,\n                    new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <hr />\n    @Html.HiddenFor(x => x.Email)\n    @Html.ValidationSummary(true)\n    if (ViewBag.LoginProvider != null)\n    {\n        <p class=\"text-info\">\n            @Resource.Successfully_logged_in <strong>@ViewBag.LoginProvider</strong>.\n            @Resource.Enter_username_and_register\n        </p>\n    }\n\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.UserName, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-5\">\n            @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n            @Html.ValidationMessageFor(m => m.UserName)\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-5\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"@Resource.Register\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ExternalLoginFailure.cshtml",
    "content": "﻿@using Resource = Resources.Account.Views.ExternalLoginFailure\n\n@{\n    ViewBag.Title = Resource.Error;\n}\n\n<h2>@ViewBag.Title.</h2>\n<h3 class=\"text-error\">@Resource.Unsuccessful_login</h3>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/ForgottenPassword.cshtml",
    "content": "﻿@using Resource = Resources.Account.Views.ForgottenPassword\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h2>@ViewBag.Title</h2>\n\n@using (Html.BeginForm(\"ForgottenPassword\", \"Account\", null, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    <div class=\"row\">\n        <div class=\"form-group\">\n            @Html.Label(\"emailOrUsername\", Resource.Label, new { @class = \"control-label col-md-2\" })\n            <div class=\"col-md-4\">\n                @Html.TextBox(\"emailOrUsername\", null, new { @class = \"form-control\" })\n                @Html.ValidationMessage(\"emailOrUsername\")\n            </div>\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-6\">\n            <input class=\"pull-right btn btn-default\" type=\"submit\" value=\"@Resource.Submit\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/Login.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.LoginViewModel\n\n@using Resource = Resources.Account.Views.Login\n\n@{\n    ViewBag.Title = Resource.Log_in;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h2>@ViewBag.Title</h2>\n\n<div class=\"row\">\n    <div class=\"col-md-8\">\n        <section id=\"loginForm\">\n            @using (Html.BeginForm(\"Login\", \"Account\", new { ViewBag.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n            {\n                @Html.AntiForgeryToken()\n                <h4>@Resource.Login_using_username_and_password</h4>\n                <hr class=\"col-md-8\"/>\n                <div class=\"clearfix\"></div>\n                @Html.ValidationSummary(true)\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.UserName, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-6\">\n                        @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.UserName)\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-6\">\n                        @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.Password)\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <div class=\"checkbox\">\n                            @Html.CheckBoxFor(m => m.RememberMe)\n                            @Html.LabelFor(m => m.RememberMe)\n                        </div>\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <input type=\"submit\" value=\"@Resource.Log_in\" class=\"btn btn-default\" />\n                    </div>\n                </div>\n                <p>\n                    @Html.ActionLink(Resource.Register, \"Register\") @Resource.If_not_already_registered\n                </p>\n                <p>\n                    @Html.ActionLink(Resource.Forgotten_password, \"ForgottenPassword\")\n                </p>\n            }\n        </section>\n    </div>\n    <div class=\"col-md-4\">\n        <section id=\"socialLoginForm\">\n            @Html.Partial(\"_ExternalLoginsListPartial\", new { Action = \"ExternalLogin\", ViewBag.ReturnUrl })\n        </section>\n    </div>\n</div>\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/Manage.cshtml",
    "content": "﻿@using Resource = Resources.Account.Views.Manage\n\n@{\n    ViewBag.Title = Resource.Change_password;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li>@Html.ActionLink(\"Профил\", GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\"})</li>\n    <li>@Html.ActionLink(\"Настройки\", GlobalConstants.Index, new { controller = \"Settings\", area = \"Users\" })</li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h2>@ViewBag.Title</h2>\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        @(ViewBag.HasLocalPassword ? Html.Partial(\"_ChangePasswordPartial\") : Html.Partial(\"_SetPasswordPartial\"))\n\n        <section id=\"externalLogins\">\n            @Html.Action(\"RemoveAccountList\")\n            @*@Html.Partial(\"_ExternalLoginsListPartial\", new { Action = \"LinkLogin\", ReturnUrl = ViewBag.ReturnUrl })*@\n        </section>\n    </div>\n</div>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/Register.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.RegisterViewModel\n@using Resource = Resources.Account.Views.Register\n\n@{\n    ViewBag.Title = Resource.Register_title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<div class=\"row\">\n    @using (Html.BeginForm(\"Register\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n    {\n        @Html.AntiForgeryToken()\n        @Html.ValidationSummary()\n        <div class=\"col-md-5\">\n            <h4>@ViewBag.Title</h4>\n            <hr />\n            <div class=\"form-group\">\n                <div class=\"pull-left col-sm-4 col-xs-12\">\n                    @Html.LabelFor(m => m.UserName)\n                </div>\n                <div class=\"pull-right col-sm-8 col-xs-12\">\n                    @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"pull-left col-sm-4 col-xs-12\">\n                    @Html.LabelFor(m => m.Password, new { @class = \"\" })\n                </div>\n                <div class=\"pull-right col-sm-8 col-xs-12\">\n                    @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"pull-left col-sm-4 col-xs-12\">\n                    @Html.LabelFor(m => m.ConfirmPassword)\n                </div>\n                <div class=\"pull-right col-sm-8 col-xs-12\">\n                    @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"pull-left col-sm-4 col-xs-12\">\n                    @Html.LabelFor(m => m.Email)\n                </div>\n                <div class=\"pull-right col-sm-8 col-xs-12\">\n                    @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n                </div>\n            </div>\n\n            <div class=\"captcha-container editor-field pull-right small-margin-top\">\n                @Html.Raw(Html.GenerateCaptcha())\n            </div>\n            <div class=\"clearfix\"></div>\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-10\">\n                    <input type=\"submit\" class=\"btn btn-default small-margin-top\" value=\"@Resource.Register_button\" />\n                </div>\n            </div>\n        </div>\n    }\n    <div class=\"col-md-offset-1 col-md-4\">\n        <section id=\"socialLoginForm\">\n            @Html.Partial(\"_ExternalLoginsListPartial\", new { Action = \"ExternalLogin\", ViewBag.ReturnUrl })\n        </section>\n    </div>\n</div>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/_ChangePasswordPartial.cshtml",
    "content": "﻿@using Microsoft.AspNet.Identity\n@using Resource = Resources.Account.Views.Partial.ChangePassword\n\n@model OJS.Web.ViewModels.Account.ManageUserViewModel\n\n<p>@Resource.Currently_logged_in_as <strong>@User.Identity.GetUserName()</strong>.</p>\n\n@using (Html.BeginForm(\"Manage\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <hr />\n    @Html.ValidationSummary()\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.OldPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-4\">\n            @Html.PasswordFor(m => m.OldPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-4\">\n            @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-4\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" value=\"@Resource.Change_password\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/_ExternalLoginsListPartial.cshtml",
    "content": "﻿@using Microsoft.Owin.Security\n@using Resource = Resources.Account.Views.Partial.ExternalLoginsList\n\n<h4>@Resource.Alternate_login_method</h4>\n<hr />\n@{\n    var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();\n    if (!loginProviders.Any())\n    {\n        <div>\n            <p>\n                @Resource.External_login_unavailable\n            </p>\n        </div>\n    }\n    else\n    {\n        string action = Model.Action;\n        string returnUrl = Model.ReturnUrl;\n        using (Html.BeginForm(action, \"Account\", new { ReturnUrl = returnUrl }))\n        {\n            @Html.AntiForgeryToken()\n            <div id=\"socialLoginList\">\n                <p>\n                    @foreach (AuthenticationDescription p in loginProviders)\n                    {\n                        <button type=\"submit\" class=\"btn btn-default\" id=\"@p.AuthenticationType\" name=\"provider\" value=\"@p.AuthenticationType\" title=\"@string.Format(Resource.External_login_message, p.Caption)\">@p.AuthenticationType</button>\n                    }\n                </p>\n            </div>\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/_RemoveAccountPartial.cshtml",
    "content": "﻿@model ICollection<Microsoft.AspNet.Identity.UserLoginInfo>\n@using Resource = Resources.Account.Views.Partial.RemoveAccount\n\n@if (Model.Count > 0)\n{\n    <h4>@Resource.Registered_login_methods</h4>\n    <table class=\"table\">\n        <tbody>\n            @foreach (var account in Model)\n            {\n                <tr>\n                    <td>@account.LoginProvider</td>\n                    <td>\n                        @if (ViewBag.ShowRemoveButton)\n                        {\n                            using (Html.BeginForm(\"Disassociate\", \"Account\"))\n                            {\n                                @Html.AntiForgeryToken()\n                                <div>\n                                    @Html.Hidden(\"loginProvider\", account.LoginProvider)\n                                    @Html.Hidden(\"providerKey\", account.ProviderKey)\n                                    <input type=\"submit\" class=\"btn btn-default\" value=\"@Resource.Remove_login_button\" title=\"@string.Format(Resource.Remove_login_title, account.LoginProvider)\" />\n                                </div>\n                            }\n                        }\n                        else\n                        {\n                            @: &nbsp;\n                        }\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Account/_SetPasswordPartial.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Account.ManageUserViewModel\n@using Resource = Resources.Account.Views.Partial.SetPassword\n\n<p class=\"text-info\">\n    @Resource.No_username_or_password\n</p>\n\n@using (Html.BeginForm(\"Manage\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary()\n    <div class=\"row\">\n        <div class=\"form-group\">\n            @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n            <div class=\"col-md-4\">\n                @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n            </div>\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"form-group\">\n            @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n            <div class=\"col-md-4\">\n                @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n            </div>\n        </div>\n    </div>\n    <div class=\"row\">\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-4\">\n                <input type=\"submit\" value=\"@Resource.Save_password\" class=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Feedback/Index.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Feedback.FeedbackViewModel\n@using Resource = Resources.Feedback.Views.FeedbackIndex\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li class=\"active\">@ViewBag.Title</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n@using (Html.BeginForm())\n{\n    <div class=\"row\">\n        <div class=\"col-md-5\">\n            <div class=\"editor-label\">\n                @Html.LabelFor(m => m.Name)\n            </div>\n            <div class=\"editor-field\">\n                @Html.EditorFor(m => m.Name)\n                @Html.ValidationMessageFor(m => m.Name)\n            </div>\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"col-md-5\">\n            <div class=\"editor-label\">\n                @Html.LabelFor(m => m.Email, \"Email\")\n            </div>\n            <div class=\"editor-field\">\n                @Html.EditorFor(m => m.Email)\n                @Html.ValidationMessageFor(m => m.Email)\n            </div>\n        </div>\n    </div>\n    <br />\n    <div class=\"row\">\n        <div class=\"col-md-5\">\n            <div class=\"editor-label\">\n                @Html.LabelFor(m => m.Content)\n            </div>\n            <div class=\"editor-field\">\n                @Html.EditorFor(m => m.Content)\n                @Html.ValidationMessageFor(m => m.Content)\n            </div>\n            <div class=\"captcha-container editor-field small-margin-top\">\n                <br />\n                @Html.Raw(@Html.GenerateCaptcha())\n                @Html.ValidationMessage(\"Captcha\")\n            </div>\n        </div>\n    </div>\n    <br />\n    <button class=\"btn btn-primary\" type=\"submit\">@Resource.Submit</button>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Feedback/Submitted.cshtml",
    "content": "﻿@using Resource = Resources.Feedback.Views.FeedbackSubmitted\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">@Resource.Home</a></li>\n    <li>@Html.ActionLink(Resource.Feedback, GlobalConstants.Index, \"Feedback\", new { area = string.Empty })</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n\n<div class=\"container\">\n    @Html.ActionLink(Resource.Home, GlobalConstants.Index, \"Home\", new { area = string.Empty }, new { @class = \"btn btn-primary\" })\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Home/Index.cshtml",
    "content": "﻿@using Resource = Resources.Home.Views.Index\n\n@model OJS.Web.ViewModels.Home.Index.IndexViewModel\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<div class=\"jumbotron\">\n    <div class=\"row\">\n        <div class=\"pull-left col-md-6\">\n            <h1>@Resource.Project_title</h1>\n            <p class=\"lead\">@Resource.Project_subtitle</p>\n            @if (Model.ActiveContests.Any())\n            {\n                <div class=\"fb-like\" data-href=\"http://bgcoder.com\" data-send=\"true\" data-width=\"450\" data-show-faces=\"true\" data-colorscheme=\"dark\"></div>\n            }\n        </div>\n        <div class=\"pull-right col-md-6\">\n            @if (Model.ActiveContests.Any())\n            {\n                <h2>@Resource.Active_contests</h2>\n                <table class=\"table table-hover\">\n                    @if (Model.ActiveContests.Count() <= 3)\n                    {\n                        foreach (var contest in Model.ActiveContests)\n                        {\n                            var hoursRemaining = (int)((contest.EndTime.Value - DateTime.Now)).TotalHours;\n                            var minutesRemaining = (contest.EndTime.Value - DateTime.Now).Minutes;\n                            <tr>\n                                <td>\n                                    <a href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\"><strong>@contest.Name</strong></a><br />\n                                    @{\n                            string remainingTimeMessage =\n                                string.Format(Resource.Remaining_time, hoursRemaining, hoursRemaining != 1 ?\n                                    Resource.Hours : Resource.Hour, minutesRemaining);\n                                    }\n                                    <small>@remainingTimeMessage</small>\n                                </td>\n\n                                <td><a class=\"btn btn-primary pull-left\" href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\">@Resource.Participate</a></td>\n                            </tr>\n                        }\n                    }\n                    else\n                    {\n                        foreach (var contest in Model.ActiveContests)\n                        {\n                            <tr>\n                                <td class=\"\">\n                                    <a href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\">@contest.Name</a>\n                                </td>\n                            </tr>\n                        }\n                    }\n                </table>\n            }\n            else\n            {\n                <div class=\"fb-like\" data-href=\"http://www.facebook.com/BGCoder\" data-colorscheme=\"dark\" data-width=\"380\" data-show-faces=\"true\" data-header=\"false\" data-stream=\"false\" data-show-border=\"false\"></div>\n            }\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>@Resource.News</h2>\n        @{Html.RenderAction(\"LatestNews\", \"News\", new { newsCount = 4 });}\n    </div>\n    <div class=\"col-md-4\">\n        <h2>@Resource.Previous_contests</h2>\n        @if (!Model.PastContests.Any())\n        {\n            <p>@Resource.No_previous_contests</p>\n        }\n        else\n        {\n            <table class=\"table table-hover\">\n                @foreach (var contest in Model.PastContests)\n                {\n                    <tr>\n                        <td>\n                            <a href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\">@contest.Name</a>\n                            <p class=\"text-right\">@Resource.Ended: @contest.EndTime.ToString()</p>\n                        </td>\n                    </tr>\n                }\n            </table>\n        }\n        <p class=\"pull-right\"><a class=\"btn btn-default\" href=\"/Contests/\">@Resource.See_more &raquo;</a></p>\n        @if (User.IsAdmin())\n        {\n            <p class=\"pull-left\"><a class=\"btn btn-primary\" href=\"/Administration/Contests\">@Resource.Administration &raquo;</a></p>\n        }\n    </div>\n    <div class=\"col-md-4\">\n        <h2>@Resource.Upcoming_contests</h2>\n        @if (!Model.FutureContests.Any())\n        {\n            <p>@Resource.No_upcoming_contests</p>\n        }\n        else\n        {\n            <table class=\"table table-hover\">\n                @foreach (var contest in Model.FutureContests)\n                {\n                    <tr>\n                        <td>\n                            <a href=\"@ContestsHelper.GetUrl(contest.Id, contest.Name)\">@contest.Name</a>\n                            <p class=\"text-right\">@Resource.Starts: @contest.StartTime.ToString()</p>\n                        </td>\n                    </tr>\n                }\n            </table>\n            <p class=\"pull-right\"><a class=\"btn btn-default\" href=\"/Contests/\">@Resource.See_more &raquo;</a></p>\n        }\n        @if (User.IsAdmin())\n        {\n            <p class=\"pull-left\"><a class=\"btn btn-primary\" href=\"/Administration/Contests\">@Resource.Administration &raquo;</a></p>\n        }\n    </div>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/News/All.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.News.AllNewsViewModel\n@using Resource = Resources.News.Views.All;\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n<h2>@ViewBag.Title</h2>\n\n@if (!Model.AllNews.Any())\n{\n    <p>@Resource.No_news.</p>\n}\nelse\n{\n    <table class=\"table table-hover\">\n        <tr class=\"col-md-12\">\n            <td>\n                <span class=\"col-md-4\">@Resource.News_title</span>\n                <span class=\"col-md-3\">@Resource.Author</span>\n                <span class=\"col-md-3\">@Resource.Source</span>\n                @Resource.Date\n            </td>\n        </tr>\n        @foreach (var news in Model.AllNews)\n        {\n            <tr class=\"col-md-12\">\n                <td class=\"text-primary\">\n                    <span class=\"col-md-4\"><a href=\"/News/Selected/@news.Id\">@news.Title</a></span>\n                    <span class=\"col-md-3\">@news.Author</span>\n                    <span class=\"col-md-3\">@news.Source</span>\n                    @news.TimeCreated.ToString(\"dd/MM/yyyy\")\n                </td>\n            </tr>\n        }\n    </table>\n\n    <div class=\"row text-center\">\n        <div class=\"btn-group\">\n            @{\n    if (Model.CurrentPage <= 1)\n    {\n        <span class=\"btn btn-primary\" disabled=\"disabled\"><<</span>\n                <span class=\"btn btn-primary\" disabled=\"disabled\"><</span>\n    }\n    else\n    {\n        @Html.ActionLink(\"<<\", \"All\", new { id = 1 }, new { @class = \"btn btn-primary\" })\n        @Html.ActionLink(\"<\", \"All\", new { id = Model.CurrentPage - 1 }, new { @class = \"btn btn-primary\" })\n    }\n            }\n\n            @{\n    int startPage = 1;\n    int endPage = Model.AllPages;\n\n    if (Model.AllPages > 10)\n    {\n        if (Model.CurrentPage > 5)\n        {\n            startPage = Model.CurrentPage - 5;\n        }\n\n        if (Model.CurrentPage + 5 < Model.AllPages)\n        {\n            endPage = Model.CurrentPage + 5;\n        }\n    }\n            }\n\n            @{\n    if (Model.CurrentPage - 5 > 1)\n    {\n        <span class=\"btn btn-primary\" disabled=\"disabled\">...</span>\n    }\n            }\n\n            @for (int pageIndex = startPage; pageIndex <= endPage; pageIndex++)\n            {\n                if (pageIndex != Model.CurrentPage)\n                {\n                    @Html.ActionLink(pageIndex.ToString(), \"All\", new { controller = \"News\", area = string.Empty, id = pageIndex }, new { @class = \"btn btn-primary\" })\n                }\n                else\n                {\n                    <span class=\"btn btn-primary\" disabled=\"disabled\">@pageIndex</span>\n                }\n            }\n\n            @{\n    if (Model.CurrentPage + 5 < Model.AllPages)\n    {\n        <span class=\"btn btn-primary\" disabled=\"disabled\">...</span>\n    }\n            }\n\n            @{\n    if (Model.CurrentPage >= Model.AllPages)\n    {\n        <span class=\"btn btn-primary\" disabled=\"disabled\">></span>\n                <span class=\"btn btn-primary\" disabled=\"disabled\">>></span>\n    }\n    else\n    {\n        @Html.ActionLink(\">\", \"All\", new { id = Model.CurrentPage + 1 }, new { @class = \"btn btn-primary\" })\n                @Html.ActionLink(\">>\", \"All\", new { id = Model.AllPages }, new { @class = \"btn btn-primary\" })\n    }\n            }\n\n        </div>\n    </div>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/News/Selected.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.News.SelectedNewsViewModel\n@using Resource = Resources.News.Views.Selected\n\n@{\n    ViewBag.Title = Resource.Title;\n}\n\n@if (Model != null)\n{\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n\n            <h1>@Model.Title</h1>\n            <h4>@Resource.Author: @Model.Author</h4>\n            @if (!string.IsNullOrEmpty(Model.Source))\n            {\n                <h4>@Resource.Source: @Model.Source</h4>\n            }\n            <span>@Model.TimeCreated.ToString(\"dd/MM/yyyy\")</span>\n\n            <br />\n\n            <div>\n                @Html.ActionLink(Resource.Previous, \"Selected\", new { id = Model.PreviousId }, new { @class = \"btn btn-primary pull-left\" })\n                @Html.ActionLink(Resource.Next, \"Selected\", new { id = Model.NextId }, new { @class = \"btn btn-primary pull-right\" })\n            </div>\n            <br />\n            <br />\n            <div class=\"panel-body news-content\">\n                @Html.Raw(Model.Content)\n            </div>\n        </div>\n        <div class=\"col-md-4\">\n            <h2>@Resource.Latest_news</h2>\n            @{Html.RenderAction(\"LatestNews\", new { newsCount = 5 });}\n        </div>\n    </div>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Search/Index.cshtml",
    "content": "﻿@using Resource = Resources.Search.Views.SearchIndex\n\n<div class=\"row\">\n    @using (Html.BeginForm(\"Results\", \"Search\", FormMethod.Get))\n    {\n        <div class=\"col-xs-3 no-padding-right\">\n            <input type=\"text\" class=\"form-control\" name=\"searchTerm\" placeholder=\"@Resource.Placeholder\" />\n        </div>\n        <div class=\"col-xs-1\">\n            <input class=\"btn btn-default\" type=\"submit\" value=\"@Resource.Search\" />\n        </div>\n    }\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Search/Results.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Search.SearchResultGroupViewModel\n@using Resource = Resources.Search.Views.SearchResults;\n\n@{\n    ViewBag.Title = string.Format(Resource.Title, Model.SearchTerm);\n}\n\n\n@if (Model.IsSearchTermValid)\n{\n    <h1>@ViewBag.Title</h1>\n    \n    foreach (var resultGroup in Model.SearchResults)\n    {\n        if (resultGroup.Key == SearchResultType.Problem && resultGroup.Value.Any())\n        {\n            int problemCounter = 0;\n            <div class=\"row\">\n                <h4 class=\"col-lg-12\">@Resource.Problems: </h4>\n                <hr />\n                @foreach (var problemResult in resultGroup.Value)\n                {\n                    <div class=\"col-lg-3 well\">\n                        <div><span class=\"text-white\">@problemResult.Name</span> @Resource.From_contest </div>\n                        <a href=\"@ContestsHelper.GetUrl(problemResult.ParentId.Value, problemResult.ParentName)\">\n                            @problemResult.ParentName\n                        </a>\n                    </div>\n                    {\n                        problemCounter++;\n                        if (problemCounter % 4 == 0)\n                        {\n                            @:</div><div class=\"row\">\n                        }\n                    }\n                }\n            </div>\n        }\n\n        if (resultGroup.Key == SearchResultType.Contest && resultGroup.Value.Any())\n        {\n            int contestCounter = 0;\n            <div class=\"row\">\n                <h4 class=\"col-lg-12\">@Resource.Contests: </h4>\n                <hr />\n                @foreach (var contestResult in resultGroup.Value)\n                {\n                    <div class=\"col-lg-3 well\">\n                        <a href=\"@ContestsHelper.GetUrl(contestResult.Id, contestResult.Name)\">\n                            @contestResult.Name\n                        </a>\n                    </div>\n                    {\n                        contestCounter++;\n                        if (contestCounter % 4 == 0)\n                        {\n                            @:</div><div class=\"row\">\n                        }\n                    }\n                }\n            </div>\n        }\n\n        if (resultGroup.Key == SearchResultType.User && resultGroup.Value.Any())\n        {\n            int userCounter = 0;\n            <div class=\"row\">\n                <h4 class=\"col-lg-12\">@Resource.Users: </h4>\n                <hr />\n                @foreach (var userResult in resultGroup.Value)\n                {\n                    <div class=\"col-lg-3 well\">\n                        @Html.ActionLink(userResult.Name, GlobalConstants.Index, new { controller = \"Profile\", area = \"Users\", id = userResult.Name })\n                    </div>\n                    {\n                        userCounter++;\n                        if (userCounter % 4 == 0)\n                        {\n                            @:</div><div class=\"row\">\n                        }\n                    }\n                }\n            </div>\n        }\n    }\n} else {\n    <p class=\"lead text-warning\">@string.Format(Resource.Search_term_too_short, Model.MinimumSearchTermLength)</p>\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Currency.cshtml",
    "content": "@model decimal?\n\n@(Html.Kendo().CurrencyTextBoxFor(m => m)      \n      .HtmlAttributes(new {style=\"width:100%\"})\n      .Min(0)\n)\n\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Date.cshtml",
    "content": "@model DateTime?\n\n@(Html.Kendo().DatePickerFor(m => m))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/DateTime.cshtml",
    "content": "@model DateTime?\n\n@(Html.Kendo().DateTimePickerFor(m => m))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/EmailAddress.cshtml",
    "content": "﻿@model object\n\n@Html.TextBoxFor(m => m, new { type = \"email\", @class = \"k-textbox\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/GridForeignKey.cshtml",
    "content": "﻿@model object\n           \n@(\n Html.Kendo().DropDownListFor(m => m)        \n        .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName(\"\") + \"_Data\"])\n)\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Integer.cshtml",
    "content": "@model int?\n\n@(Html.Kendo().IntegerTextBoxFor(m => m)\n      .HtmlAttributes(new { style = \"width:100%\" })\n      .Min(int.MinValue)\n      .Max(int.MaxValue)\n)"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/MultilineText.cshtml",
    "content": "﻿@model object\n\n@Html.TextAreaFor(x => x, new { @class = \"form-control\", rows = \"8\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Number.cshtml",
    "content": "@model double?\n\n@(Html.Kendo().NumericTextBoxFor(m => m)\n      .HtmlAttributes(new { style = \"width:100%\" })\n)"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Password.cshtml",
    "content": "﻿@model object\n\n@Html.PasswordFor(m => m, new { @class = \"k-textbox\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/QuestionViewModel.cshtml",
    "content": "﻿@using OJS.Common.Models\n@model OJS.Web.Areas.Contests.ViewModels.Contests.QuestionViewModel\n\n@using Resource = Resources.Areas.Contests.Views.CompeteRegister;\n\n<div class=\"form-group\">\n    @Html.HiddenFor(x => x.QuestionId)\n    <div class=\"editor-label\">\n        @Html.Label(Model.Question, Html.ValueFor(x => x.Question))\n    </div>\n    <div class=\"editor-field\">\n        @{\n            var htmlAttributes = new\n            {\n                @class = \"form-control\",\n                data_val_regex_pattern = !string.IsNullOrWhiteSpace(Model.RegularExpression) ? Model.RegularExpression : \".*\",\n                data_val_regex = \"Invalid answer format\"\n            };\n        }\n\n        @switch (Model.Type)\n        {\n            case ContestQuestionType.Default:\n                @Html.TextBoxFor(x => x.Answer, htmlAttributes)\n                break;\n            case ContestQuestionType.DropDown:\n            @Html.DropDownListFor(x => x.Answer, Model.DropDownItems, @Resource.Select_dropdown_answer, new { @class = \"form-control\" })\n                break;\n            case ContestQuestionType.TextBox:\n            @Html.TextBoxFor(x => x.Answer, htmlAttributes)\n                break;\n            case ContestQuestionType.MultiLineTextBox:\n            @Html.TextAreaFor(x => x.Answer, htmlAttributes)\n                break;\n            default:\n            @Html.TextBoxFor(x => x.Answer, htmlAttributes)\n                break;\n        }\n        @Html.ValidationMessageFor(x => x.Answer)\n    </div>\n</div>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/String.cshtml",
    "content": "﻿@model object\n\n@Html.TextBoxFor(model => model, new { @class = \"k-textbox\" })"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/EditorTemplates/Time.cshtml",
    "content": "@model DateTime?\n           \n@(Html.Kendo().TimePickerFor(m => m))"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/Error.cshtml",
    "content": "﻿@model HandleErrorInfo\n\n@{\n    ViewBag.Title = \"Error\";\n}\n\n<hgroup>\n    <h1 class=\"text-error\">An error occurred while processing your request.</h1>\n    <h2 class=\"text-error\">@Model.Exception.Message</h2>\n</hgroup>\n\n<pre>@Model.Exception.ToString()</pre>\n@{\n    var exception = Model.Exception.InnerException;\n}\n@while (exception != null)\n{\n    <h3>@exception.Message</h3>\n    <pre>@exception.ToString()</pre>\n    exception = exception.InnerException;\n}\n\n<p>Controller name: @Model.ControllerName</p>\n<p>Action name: @Model.ActionName</p>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/_AdvancedSubmissionsGridPartial.cshtml",
    "content": "﻿@using Resource = Resources.Submissions.Views.Partial.AdvancedSubmissionsGridPartial;\n@model string\n\n@(Html.Kendo().Grid<OJS.Web.ViewModels.Submission.SubmissionViewModel>()\n    .Name(\"Submissions\")\n    .Columns(columns =>\n        {\n            columns.Bound(s => s.Id).Title(\"№\");\n            if (Model == null)\n            {\n                columns.Bound(s => s.SubmitedOn).Title(Resource.Sent_from).ClientTemplate(\n                    \"<div>\" +\n                        \"<strong><a href=\\\"/Users/#: ParticipantName #\\\">#: ParticipantName #</a></strong>\" +\n                    \"</div>\" +\n                    \"<div>\" +\n                        \"<small><span>#: kendo.toString(SubmitedOn, \\\"G\\\") #</span></small>\" +\n                    \"</div>\"\n                );\n            }\n            else\n            {\n                columns.Bound(s => s.SubmitedOn).Title(Resource.Sent_on).ClientTemplate(                \n                    \"<div>\" +\n                        \"<span>#: kendo.toString(SubmitedOn, \\\"G\\\") #</span>\" +\n                    \"</div>\"\n                );\n            }\n            \n            columns.Bound(s => s.ProblemName).Title(Resource.Task).ClientTemplate(\n                    \"<div>\" +\n                        \"<strong class=\\\"text-primary\\\">#: ProblemName #</strong>\" +\n                    \"</div>\" +\n                    \"<div>\" +\n                        \"<small>#: Contest #</small>\" +\n                    \"</div>\"\n                );\n            columns.Bound(s => s.Points).Title(Resource.Result).ClientTemplate(\n                        \"<div>\" +\n                        \"#= testResult(TestResults, Points, ProblemMaximumPoints, MaxUsedMemory, MaxUsedTime, Processed, IsCompiledSuccessfully, SubmissionType) #\" +\n                    \"</div>\"\n                ).Width(\"25%\");\n            if (User.IsAdmin())\n            {\n                columns.Bound(s => s.Id).Title(Resource.Admin).ClientTemplate(@\"\n                    <div class='text-center'>\n                        <a href='/Contests/Submissions/View/#:Id#'><span class='glyphicon glyphicon-align-justify text-primary' title='View'></span></a>\n                        <a href='/Administration/Submissions/Update/#:Id#'><span class='glyphicon glyphicon-pencil text-primary' title='Edit'></span></a>\n                        <a href='/Administration/Submissions/Delete/#:Id#'><span class='glyphicon glyphicon-remove text-primary' title='Delete'></span></a>\n                        <a href='/Administration/Tests/Problem/#:ProblemId#'><span class='glyphicon glyphicon-list-alt text-primary' title='Tests'></span></a>\n                        <a href='/Administration/Submissions/Retest/#:Id#'><span class='glyphicon glyphicon-refresh text-primary' title='Retest'></span></a>\n                    </div>\");\n            }\n        }\n    )\n    .Events(ev => ev.DataBound(\"dataBound\"))\n    .DataSource(dataSource => dataSource\n        .Ajax()\n        .ServerOperation(true)\n        .Batch(false)\n        .Model(model => model.Id(x => x.Id))\n        .Sort(sort => sort.Add(x => x.SubmitedOn).Descending())\n        .Read(read => read.Type(HttpVerbs.Post).Action(\"ReadSubmissions\", \"Submissions\", new { userId = Model, area = \"\" }))\n        .PageSize(25)\n    )\n    .Pageable(page => page.ButtonCount(10).Refresh(true))\n)\n\n<script>\n    function dataBound() {\n        var page = this.dataSource.page() - 1;\n        var pageSize = this.dataSource.pageSize();\n\n        var counter = 1;\n        $(this.wrapper).find(\".indexColumn\").each(function() {\n            var index = (pageSize * page) + counter;\n            $(this).html(index);\n            counter++;\n        });\n    }\n</script>\n\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/_LatestNews.cshtml",
    "content": "﻿@model IEnumerable<OJS.Web.ViewModels.News.SelectedNewsViewModel>\n@using Resource = Resources.News.Views.LatestNews           \n\n<div>\n    @if (!Model.Any())\n    {\n        <p>@Resource.No_news.</p>\n    }\n    else\n    {\n        <table class=\"table table-hover\">\n            @foreach (var news in Model)\n            {\n                <tr>\n                    <td class=\"text-left\">\n                        <a href=\"/News/Selected/@news.Id\">@news.Title</a>\n                        <p class=\"text-right\">@news.TimeCreated.ToString(\"dd/MM/yyyy\")</p>\n                    </td>\n                </tr>\n            }\n        </table>\n        <p class=\"pull-right\"><a class=\"btn btn-default\" href=\"/News/All\">@Resource.See_more &raquo;</a></p>\n    }\n    @if (User.IsAdmin())\n    {\n        <p class=\"pull-left\"><a class=\"btn btn-primary\" href=\"/Administration/News\">@Resource.Administration &raquo;</a></p>\n    }\n</div>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/_Layout.cshtml",
    "content": "﻿@using OJS.Web.ViewModels\r\n@using Resource = Resources.Views.Shared.Layout;\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>@ViewBag.Title - BGCoder.com</title>\r\n    <meta name=\"description\" content=\"Online system for programming competitions\" />\r\n    @Styles.Render(\"~/Content/bootstrap/bootstrap\", \"~/Content/KendoUI/kendo\", \"~/Content/css\")\r\n    @RenderSection(\"styles\", required: false)\r\n    @Scripts.Render(\"~/bundles/jquery\", \"~/bundles/kendo\", \"~/bundles/global\")\r\n</head>\r\n<body>\r\n    <!-- Google Analytics -->\r\n    <script>\r\n        (function (i, s, o, g, r, a, m) {\r\n            i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\r\n                (i[r].q = i[r].q || []).push(arguments);\r\n            }, i[r].l = 1 * new Date(); a = s.createElement(o),\r\n            m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m);\r\n        })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\r\n        ga('create', 'UA-27957494-1', 'bgcoder.com');\r\n        ga('send', 'pageview');\r\n    </script>\r\n\r\n    <!-- Facebook -->\r\n    <div id=\"fb-root\"></div>\r\n    <script>\r\n        (function (d, s, id) {\r\n            var fjs = d.getElementsByTagName(s)[0];\r\n            if (d.getElementById(id)) return;\r\n            var js = d.createElement(s); js.id = id;\r\n            js.src = \"//connect.facebook.net/en_US/all.js#xfbml=1&appId=140725269459425\";\r\n            fjs.parentNode.insertBefore(js, fjs);\r\n        }(document, 'script', 'facebook-jssdk'));\r\n    </script>\r\n\r\n    <!-- Header -->\r\n    <div class=\"navbar navbar-inverse\">\r\n        <div class=\"container\">\r\n            <div class=\"navbar-header\">\r\n                <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\r\n                    <span class=\"icon-bar\"></span>\r\n                    <span class=\"icon-bar\"></span>\r\n                    <span class=\"icon-bar\"></span>\r\n                </button>\r\n                <a href=\"/\" class=\"navbar-brand\">BGCoder.com</a>\r\n            </div>\r\n            <div class=\"navbar-collapse collapse\">\r\n                <ul class=\"nav navbar-nav\">\r\n                    <li><a href=\"/\">@Resource.Home</a></li>\r\n                    <li class=\"dropdown\">\r\n                        <a href=\"/Contests\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n                            @Resource.Contests\r\n                            <strong class=\"caret\"></strong>\r\n                        </a>\r\n                        <ul class=\"dropdown-menu\">\r\n                            @foreach (CategoryMenuItemViewModel category in ViewBag.MainCategories)\r\n                            {\r\n                                <li><a href=\"@string.Format(\"/Contests/#!/List/ByCategory/{0}/{1}\", category.Id, category.NameUrl)\">@category.Name</a></li>\r\n                            }\r\n                            <li class=\"divider\"></li>\r\n                            <li><a href=\"/Contests\">@Resource.All</a></li>\r\n                        </ul>\r\n                    </li>\r\n                    <li><a href=\"/Submissions\">@Resource.Submissions</a></li>\r\n                    <li><a href=\"/Feedback\">@Resource.Feedback</a></li>\r\n                    @if (User.IsAdmin())\r\n                    {\r\n                        <li class=\"dropdown\">\r\n                            <a href=\"/Administration/Navigation\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n                                @Resource.Administration\r\n                                <strong class=\"caret\"></strong>\r\n                            </a>\r\n                            <ul class=\"dropdown-menu\">\r\n                                <li class=\"dropdown-header\">@Resource.Contests</li>\r\n                                <li>@Html.ActionLink(Resource.Contests, GlobalConstants.Index, \"Contests\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Categories, GlobalConstants.Index, \"ContestCategories\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Category_hierarchy, \"Hierarchy\", \"ContestCategories\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Participants, GlobalConstants.Index, \"Participants\", new { area = \"Administration\" }, null)</li>\r\n                                <li class=\"divider\"></li>\r\n                                <li class=\"dropdown-header\">@Resource.Problems</li>\r\n                                <li>@Html.ActionLink(Resource.Problems, GlobalConstants.Index, \"Problems\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Test_files, GlobalConstants.Index, \"Tests\", new { area = \"Administration\" }, null)</li>\r\n                                <li class=\"divider\"></li>\r\n                                <li class=\"dropdown-header\">@Resource.Users</li>\r\n                                <li>@Html.ActionLink(Resource.Users, GlobalConstants.Index, \"Users\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Submissions, GlobalConstants.Index, \"Submissions\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Roles, GlobalConstants.Index, \"Roles\", new { area = \"Administration\" }, null)</li>\r\n                                <li class=\"divider\"></li>\r\n                                <li class=\"dropdown-header\">@Resource.Other</li>\r\n                                <li>@Html.ActionLink(Resource.News, GlobalConstants.Index, \"News\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Feedback, GlobalConstants.Index, \"Feedback\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Checkers, GlobalConstants.Index, \"Checkers\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.SubmissionTypes, GlobalConstants.Index, \"SubmissionTypes\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.Settings, GlobalConstants.Index, \"Settings\", new { area = \"Administration\" }, null)</li>\r\n                                <li class=\"divider\"></li>\r\n                                <li class=\"dropdown-header\">Anti-cheat</li>\r\n                                <li>@Html.ActionLink(Resource.IpUsage, \"ByIP\", \"AntiCheat\", new { area = \"Administration\" }, null)</li>\r\n                                <li>@Html.ActionLink(Resource.SubmissionSimilarity, \"BySubmissionSimilarity\", \"AntiCheat\", new { area = \"Administration\" }, null)</li>\r\n                                <li class=\"divider\"></li>\r\n                                <li class=\"dropdown-header\">Debugging</li>\r\n                                <li><a href=\"/Glimpse.axd\">Glimpse</a></li>\r\n                                <li class=\"divider\"></li>\r\n                                <li>@Html.ActionLink(Resource.All_administrations, GlobalConstants.Index, \"Navigation\", new { area = \"Administration\" }, null)</li>\r\n                            </ul>\r\n                        </li>\r\n                    }\r\n                </ul>\r\n                @Html.Partial(\"_LoginPartial\")\r\n                <div class=\"col-md-3 hidden-sm navbar-left search-form\">\r\n                    <form class=\"navbar-form\" role=\"search\" action=\"/Search/Results\">\r\n                        <div class=\"input-group\">\r\n                            <input type=\"text\" class=\"form-control search-box\" placeholder=@Resource.Search name=\"searchTerm\" id=\"searchTerm\">\r\n                            <div class=\"input-group-btn\">\r\n                                <button class=\"btn btn-default btn-search\" type=\"submit\"><i class=\"glyphicon glyphicon-search\"></i></button>\r\n                            </div>\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div class=\"col-sm-1 hidden-lg hidden-md hidden-xs btn btn-search-small navbar-left\">\r\n                    <a href=\"/Search/\" class=\"btn btn-default btn-search\"><i class=\"glyphicon glyphicon-search\"></i></a>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Page content -->\r\n    <div class=\"container\">\r\n        @if (ViewBag.SystemMessages != null)\r\n        {\r\n            foreach (var message in (SystemMessageCollection)ViewBag.SystemMessages)\r\n            {\r\n                string messageClass = \"alert alert-success\";\r\n                switch (message.Type)\r\n                {\r\n                    case SystemMessageType.Informational:\r\n                        messageClass = \"alert alert-info\";\r\n                        break;\r\n                    case SystemMessageType.Success:\r\n                        messageClass = \"alert alert-success\";\r\n                        break;\r\n                    case SystemMessageType.Warning:\r\n                        messageClass = \"alert alert-warning\";\r\n                        break;\r\n                    case SystemMessageType.Error:\r\n                        messageClass = \"alert alert-danger\";\r\n                        break;\r\n                }\r\n\r\n                @:<div class=\"@messageClass\"><strong>@Html.Raw(message.Content)</strong></div>\r\n        }\r\n        }\r\n\r\n        @RenderBody()\r\n        <hr />\r\n        <footer>\r\n            <p>&copy; 2011-@DateTime.Now.Year - @Global.SystemName @Global.SystemVersion - running on Windows. <a href=\"https://github.com/NikolayIT/OpenJudgeSystem\" target=\"_blank\">@Resource.Open_source_project</a></p>\r\n        </footer>\r\n    </div>\r\n\r\n    <!-- Cookie usage notification -->\r\n    <div id=\"cookies-notification\">\r\n        @Html.Raw(Resource.Cookies_notification)\r\n        <a id=\"cookies-notification-button\" href=\"#\">@Resource.Cookies_notification_OK</a>\r\n    </div>\r\n\r\n    <!-- JavaScripts -->\r\n    @Scripts.Render(\"~/bundles/bootstrap\")\r\n    @RenderSection(\"scripts\", required: false)\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/_LoginPartial.cshtml",
    "content": "﻿@using Resource = Resources.Views.Shared.LoginPartial\n\n@if (Request.IsAuthenticated)\n{\n    using (Html.BeginForm(\"LogOff\", \"Account\", new { area = string.Empty }, FormMethod.Post, new { id = \"logoutForm\", @class = \"navbar-right\" }))\n    {\n        @Html.AntiForgeryToken()\n\n        <ul class=\"nav navbar-nav navbar-right\">\n            <li>\n                @{  \n                    var welcomeMessage = string.Format(\"{0}, {1}!\", Resource.Welcome_message, User.Identity.Name);\n                }\n                @Html.ActionLink(welcomeMessage, GlobalConstants.Index, \"Profile\", new { area = \"Users\" }, new { title = Resource.Settings, @class = \"text-primary\" })\n            </li>\n            <li><a href=\"javascript:document.getElementById('logoutForm').submit()\">@Resource.Log_out</a></li>\n        </ul>\n    }\n}\nelse\n{\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li>@Html.ActionLink(Resource.Register, \"Register\", \"Account\", new { area = string.Empty }, htmlAttributes: new { id = \"registerLink\" })</li>\n        <li>@Html.ActionLink(Resource.Log_in, \"Login\", \"Account\", new { area = string.Empty }, htmlAttributes: new { id = \"loginLink\" })</li>\n    </ul>\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Shared/_Pagination.cshtml",
    "content": "﻿@model OJS.Web.ViewModels.Shared.PaginationViewModel\n\n<ul class=\"pagination\">\n    @if (Model.CurrentPage == 1)\n    {\n        <li class=\"disabled\"><a href=\"#\">&laquo;</a></li>\n    }\n    else\n    {\n        <li><a href=\"@(Model.Url + (Model.CurrentPage - 1))\">&laquo;</a></li>\n    }\n    @for (int i = 1; i <= Model.AllPages; i++)\n    {\n        <li><a href=\"@(Model.Url + i)\">@i</a></li>\n    }\n    @if (Model.CurrentPage == Model.AllPages)\n    {\n        <li class=\"disabled\"><a href=\"#\">&raquo;</a></li>\n    }\n    else\n    {\n        <li><a href=\"@(Model.Url + (Model.CurrentPage + 1))\">&raquo;</a></li>\n    }\n</ul>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Submissions/AdvancedSubmissions.cshtml",
    "content": "﻿@using Resource = Resources.Submissions.Views.AdvancedSubmissions;\n@model OJS.Web.ViewModels.Submission.SubmissionViewModel\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n<script src=\"/Scripts/Helpers/test-results.js\"></script>\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">Решения</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n\n@{\n    Html.RenderPartial(\"_AdvancedSubmissionsGridPartial\");\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Submissions/BasicSubmissions.cshtml",
    "content": "﻿@using OJS.Common.Models\n@using Resource = Resources.Submissions.Views.BasicSubmissions;\n@model IList<OJS.Web.ViewModels.Submission.SubmissionViewModel>\n\n@{\n    ViewBag.Title = Resource.Page_title;\n}\n\n<ol class=\"breadcrumb\">\n    <li><a href=\"/\">Начало</a></li>\n    <li class=\"active\">Решения</li>\n</ol>\n\n<h1>@ViewBag.Title</h1>\n<table class=\"table table-striped table-hover\"> @* TODO: Vertical center rows *@\n    <thead>\n        <tr>\n            <th class=\"col-md-1 text-primary\">\n                №\n            </th>\n            <th class=\"col-md-4 text-primary\">\n                @Resource.Sent_from\n            </th>\n            <th class=\"col-md-3 text-primary\">\n                @Resource.Task\n            </th>\n            <th class=\"col-md-4 text-primary\">\n                @Resource.Result\n            </th>\n        </tr>\n    </thead>\n    <tbody>\n        @for (int i = 0; i < Model.Count(); i++)\n        {\n            <tr>\n                <td>\n                    <strong>@Model[i].Id</strong>\n                </td>\n                <td>\n                    <div>\n                        <strong><a href=\"/Users/@Model[i].ParticipantName\">@Model[i].ParticipantName</a></strong>\n                    </div>\n                    <div>\n                        <small><span>@Model[i].SubmitedOn</span></small>\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <strong class=\"text-primary\">@Model[i].ProblemName</strong>\n                    </div>\n                    <div>\n                        <small>@Model[i].Contest</small>\n                    </div>\n                </td>\n                <td>\n                        <div>\n                        @{\n                            var tests = Model[i].TestResults.ToList();\n\n                            if (!Model[i].Processed)\n                            {\n                                <span class=\"glyphicon glyphicon-time text-primary\" title=\"Loading...\"></span>\n                                <strong class=\"text-primary\"> @Resource.Processing</strong>\n                            }\n                            else if (!Model[i].IsCompiledSuccessfully)\n                            {\n                                <span class=\"glyphicon glyphicon-remove text-danger\" title=\"Compilation failed\"></span>\n                                <strong class=\"text-danger\"> @Resource.Failed_compilcation</strong>\n                            }\n                            else\n                            {\n                                <div>\n                                    <strong class=\"text-primary\">@Model[i].Points / @Model[i].ProblemMaximumPoints</strong>\n                                    <small>@string.Format(\"{0:F2} MB\", Model[i].MaxUsedMemory / 1024.0 / 1024.0) | @string.Format(\"{0:F3} sec.\", (decimal)Model[i].MaxUsedTime / 1000) | @Model[i].SubmissionType</small>\n                                </div>\n                                for (int j = 0; j < tests.Count; j++)\n                                {\n                                    if (tests[j].IsTrialTest)\n                                    {\n                                        continue;\n                                    }\n                    \n                                    switch (tests[j].ExecutionResult)\n                                    {\n                                        case TestRunResultType.CorrectAnswer:<span class=\"glyphicon glyphicon-ok text-success\" title=\"Correct answer\"></span>break;\n                                        case TestRunResultType.WrongAnswer:<span class=\"glyphicon glyphicon-remove text-danger\" title=\"Wrong answer\"></span>break;\n                                        case TestRunResultType.TimeLimit:<span class=\"glyphicon glyphicon-time text-danger\" title=\"Time limit\"></span>break;\n                                        case TestRunResultType.MemoryLimit:<span class=\"glyphicon glyphicon-hdd text-danger\" title=\"Memory limit\"></span>break;\n                                        case TestRunResultType.RunTimeError:<span class=\"glyphicon glyphicon-asterisk text-danger\" title=\"Run-time error\"></span>break;\n                                    }\n                                }\n                            }\n\n                        }\n                    </div>\n                </td>\n            </tr>\n        }\n    </tbody>\n</table>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <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\">\n      <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\" />\n      <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\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"OJS.Common\"/>\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <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\">\n      <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\" />\n      <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\" />\n    </sectionGroup>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    \n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><section name=\"glimpse\" type=\"Glimpse.Core.Configuration.Section, Glimpse.Core\" /></configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=.;Initial Catalog=OnlineJudgeSystem;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"3.0.0.0\" />\n    <add key=\"webpages:Enabled\" value=\"false\" />\n    <add key=\"PreserveLoginUrl\" value=\"true\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n    <add key=\"ReCaptchaPrivateKey\" value=\"6Lfd0OkSAAAAAJrZPuMyAUDAxDcpxNnjFyDgoAzp\" />\n    <add key=\"ReCaptchaPublicKey\" value=\"6Lfd0OkSAAAAAKktM6Su5pz-58FdClVDFvo4R-2G\" />\n    <add key=\"CSharpCompilerPath\" value=\"C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\csc.exe\" />\n    <add key=\"DotNetDisassemblerPath\" value=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v10.0A\\bin\\NETFX 4.6.1 Tools\\ildasm.exe\" />\n    <add key=\"JavaCompilerPath\" value=\"C:\\Program Files\\Java\\jdk1.8.0_92\\bin\\javac.exe\" />\n    <add key=\"JavaDisassemblerPath\" value=\"C:\\Program Files\\Java\\jdk1.8.0_92\\bin\\javap.exe\" />\n  </appSettings>\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\" />\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"Recaptcha\" />\n        <add namespace=\"Kendo.Mvc.UI\" />\n        <add namespace=\"Resources\" />\n        <add namespace=\"OJS.Web.Common\" />\n        <add namespace=\"OJS.Web.Common.Extensions\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n  <system.web>\n    <customErrors mode=\"Off\" />\n    <machineKey validationKey=\"AutoGenerate,IsolateApps\" decryptionKey=\"AutoGenerate,IsolateApps\" validation=\"SHA1\" decryption=\"Auto\" />\n    <globalization uiCulture=\"auto\" culture=\"en-GB\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" requestValidationMode=\"2.0\" relaxedUrlToFileSystemMapping=\"true\" />\n    <pages>\n      <namespaces>\n        <add namespace=\"System.Web.Helpers\" />\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\" />\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"System.Web.WebPages\" />\n        <add namespace=\"OJS.Web\" />\n      </namespaces>\n    </pages>\n    \n    \n  <!-- Glimpse: This can be commented in to add additional data to the Trace tab when using WebForms\n        <trace writeToDiagnosticsTrace=\"true\" enabled=\"true\" pageOutput=\"false\"/> --><httpModules>\n            <add name=\"Glimpse\" type=\"Glimpse.AspNet.HttpModule, Glimpse.AspNet\" />\n        </httpModules><httpHandlers>\n            <add path=\"glimpse.axd\" verb=\"GET\" type=\"Glimpse.AspNet.HttpHandler, Glimpse.AspNet\" />\n        </httpHandlers></system.web>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages.Razor\" publicKeyToken=\"31BF3856AD364E35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages.Deployment\" publicKeyToken=\"31BF3856AD364E35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Razor\" publicKeyToken=\"31BF3856AD364E35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Ionic.Zip\" publicKeyToken=\"EDBE51AD942A3F5C\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.9.1.8\" newVersion=\"1.9.1.8\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Ionic.Zip\" publicKeyToken=\"edbe51ad942a3f5c\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.9.1.8\" newVersion=\"1.9.1.8\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Ninject\" publicKeyToken=\"c7192dc5380945e7\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.2.0.0\" newVersion=\"3.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages.Deployment\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.0.0\" newVersion=\"2.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework.MappingAPI\" publicKeyToken=\"7ee2e825d201459e\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.9\" newVersion=\"6.1.0.9\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"v11.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <glimpse defaultRuntimePolicy=\"On\" endpointBaseUri=\"~/Glimpse.axd\">\n    <runtimePolicies>\n      <ignoredTypes>\n        <add type=\"Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet\" />\n      </ignoredTypes>\n    </runtimePolicies>\n  <!-- \n          For more information on how to configure Glimpse, please visit http://getglimpse.com/Help/Configuration\n          or access {your site}/Glimpse.axd for even more details and a Configuration Tool to support you. \n      --></glimpse>\n  <system.webServer>\n    <handlers>\n      <add name=\"UrlRoutingHandler\" path=\"/Users/*\" type=\"System.Web.Routing.UrlRoutingHandler\" verb=\"GET\" />\n      \n    <add name=\"Glimpse\" path=\"glimpse.axd\" verb=\"GET\" type=\"Glimpse.AspNet.HttpHandler, Glimpse.AspNet\" preCondition=\"integratedMode\" /></handlers>\n    <staticContent>\n      <remove fileExtension=\".woff\"></remove>\n      <mimeMap fileExtension=\".woff\" mimeType=\"application/x-font-woff\"></mimeMap>\n    </staticContent>\n    <directoryBrowse enabled=\"false\" />\n    <!--<rewrite>\n      <rules>\n        <rule name=\"remove www on http\" stopProcessing=\"true\">\n          <match url=\"(.*)\" />\n          <conditions>\n            <add input=\"{HTTP_HOST}\" pattern=\"^www\\.bgcoder\\.com$\" />\n            <add input=\"{HTTPS}\" pattern=\"Off\" />\n          </conditions>\n          <action type=\"Redirect\" url=\"http://bgcoder.com/{R:1}\" />\n        </rule>\n        <rule name=\"redirect beta\" stopProcessing=\"true\">\n          <match url=\"(.*)\" />\n          <conditions>\n            <add input=\"{HTTP_HOST}\" pattern=\"^beta\\.bgcoder\\.com$\" />\n            <add input=\"{HTTPS}\" pattern=\"Off\" />\n          </conditions>\n          <action type=\"Redirect\" url=\"http://bgcoder.com/{R:1}\" />\n        </rule>\n      </rules>\n    </rewrite>-->\n    \n    \n  <validation validateIntegratedModeConfiguration=\"false\" /><modules>\n            <add name=\"Glimpse\" type=\"Glimpse.AspNet.HttpModule, Glimpse.AspNet\" preCondition=\"integratedMode\" />\n        </modules></system.webServer>\n  <location path=\"Administration\">\n    <system.web>\n      <httpRuntime maxRequestLength=\"1048576\" executionTimeout=\"600\" />\n    </system.web>\n    <system.webServer>\n      <security>\n        <requestFiltering>\n          <requestLimits maxAllowedContentLength=\"1073741824\" />\n        </requestFiltering>\n      </security>\n    </system.webServer>\n  </location>\n</configuration>\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/google95e631afa25e7960.html",
    "content": "google-site-verification: google95e631afa25e7960.html"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net45\" />\n  <package id=\"DotNetZip\" version=\"1.11.0\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"Glimpse\" version=\"1.8.6\" targetFramework=\"net45\" />\n  <package id=\"Glimpse.Ado\" version=\"1.7.3\" targetFramework=\"net45\" />\n  <package id=\"Glimpse.AspNet\" version=\"1.9.2\" targetFramework=\"net45\" />\n  <package id=\"Glimpse.EF6\" version=\"1.6.5\" targetFramework=\"net45\" />\n  <package id=\"Glimpse.Mvc4\" version=\"1.5.3\" targetFramework=\"net45\" />\n  <package id=\"HtmlAgilityPack\" version=\"1.4.9\" targetFramework=\"net45\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"jQuery.Validation\" version=\"1.19.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Ajax\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Validation\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"Ninject\" version=\"3.2.2.0\" targetFramework=\"net45\" />\n  <package id=\"Ninject.MVC5\" version=\"3.2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Ninject.Web.Common\" version=\"3.2.3.0\" targetFramework=\"net45\" />\n  <package id=\"Ninject.Web.Common.WebHost\" version=\"3.2.3.0\" targetFramework=\"net45\" />\n  <package id=\"NPOI\" version=\"2.1.3.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"recaptcha\" version=\"1.0.5.0\" targetFramework=\"net45\" />\n  <package id=\"SharpZipLib\" version=\"1.3.3\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n  <package id=\"Twitter.Bootstrap\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"WebActivatorEx\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web/robots.txt",
    "content": "﻿User-Agent: *\nAllow: /\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Attributes/LogAccessAttribute.cs",
    "content": "﻿namespace OJS.Web.Common.Attributes\n{\n    using System;\n\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class LogAccessAttribute : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Attributes/LoggerFilterAttribute.cs",
    "content": "﻿namespace OJS.Web.Common.Attributes\n{\n    using System.Web.Mvc;\n\n    using Microsoft.AspNet.Identity;\n\n    using OJS.Data;\n    using OJS.Data.Models;\n\n    public class LoggerFilterAttribute : IActionFilter\n    {\n        private readonly IOjsData data;\n\n        public LoggerFilterAttribute(IOjsData data)\n        {\n            this.data = data;\n        }\n\n        public virtual void OnActionExecuting(ActionExecutingContext filterContext)\n        {\n        }\n\n        public virtual void OnActionExecuted(ActionExecutedContext filterContext)\n        {\n            this.LogAction(filterContext);\n        }\n\n        protected virtual void LogAction(ActionExecutedContext filterContext)\n        {\n            string userId = null;\n            if (filterContext.HttpContext.User.Identity.IsAuthenticated)\n            {\n                userId = filterContext.HttpContext.User.Identity.GetUserId();\n            }\n\n            var request = filterContext.RequestContext.HttpContext.Request;\n            this.data.AccessLogs.Add(new AccessLog\n            {\n                IpAddress = request.UserHostAddress,\n                Url = request.RawUrl,\n                UserId = userId,\n                RequestType = request.RequestType,\n                PostParams = request.Form.ToString(),\n            });\n\n            this.data.SaveChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Attributes/OverrideAuthorizeAttribute.cs",
    "content": "﻿namespace OJS.Web.Common.Attributes\n{\n    using System;\n    using System.Web.Mvc;\n    using System.Web.Mvc.Filters;\n\n    public class OverrideAuthorizeAttribute : AuthorizeAttribute, IOverrideFilter\n    {\n        public Type FiltersToOverride\n        {\n            get { return typeof(IAuthorizationFilter); }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/EnumConverter.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Web.Mvc;\n\n    using OJS.Common.Extensions;\n\n    public static class EnumConverter\n    {\n        // Convert enums to SelectListItem (used in MVC and Kendo UI dropdowns)\n        public static IEnumerable<SelectListItem> GetSelectListItems<T>()\n            where T : struct, IConvertible\n        {\n            Type type = typeof(T);\n            if (!type.IsEnum)\n            {\n                throw new ArgumentException(\"T must be of Enum type\");\n            }\n\n            var allTypes = Enum.GetValues(type).Cast<T>().Select(v => new SelectListItem\n            {\n                Text = v.GetLocalizedDescription(),\n                Value = Convert.ChangeType(v, typeof(int)).ToString()\n            });\n\n            return allTypes;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Extensions/PrincipalExtensions.cs",
    "content": "﻿namespace OJS.Web.Common.Extensions\n{\n    using System.Security.Principal;\n\n    using OJS.Common;\n\n    public static class PrincipalExtensions\n    {\n        public static bool IsLoggedIn(this IPrincipal principal)\n        {\n            return principal.Identity.IsAuthenticated;\n        }\n\n        public static bool IsAdmin(this IPrincipal principal)\n        {\n            return principal.IsInRole(GlobalConstants.AdministratorRoleName);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Extensions/TempDataExtentions.cs",
    "content": "﻿namespace OJS.Web.Common.Extensions\n{\n    using System.Web.Mvc;\n\n    using OJS.Common;\n\n    public static class TempDataExtentions\n    {\n        public static void AddDangerMessage(this TempDataDictionary tempData, string message)\n        {\n            tempData.Add(GlobalConstants.DangerMessage, message);\n        }\n\n        public static void AddInfoMessage(this TempDataDictionary tempData, string message)\n        {\n            tempData.Add(GlobalConstants.InfoMessage, message);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Interfaces/IAdministrationViewModel.cs",
    "content": "﻿namespace OJS.Web.Common.Interfaces\n{\n    using System;\n\n    public interface IAdministrationViewModel<T>\n        where T : class\n    {\n        DateTime? CreatedOn { get; set; }\n\n        DateTime? ModifiedOn { get; set; }\n\n        T GetEntityModel(T model = null);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Interfaces/IKendoGridAdministrationController.cs",
    "content": "﻿namespace OJS.Web.Common.Interfaces\n{\n    using System.Collections;\n    using System.Web.Mvc;\n\n    using Kendo.Mvc.UI;\n\n    public interface IKendoGridAdministrationController\n    {\n        IEnumerable GetData();\n\n        object GetById(object id);\n\n        ActionResult Read([DataSourceRequest]DataSourceRequest request);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/OJS.Web.Common.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{2E08E0AF-0E51-47CA-947B-4C66086FA030}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Web.Common</RootNamespace>\n    <AssemblyName>OJS.Web.Common</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Ionic.Zip, Version=1.9.8.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\DotNetZip.1.9.8\\lib\\net20\\Ionic.Zip.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Kendo.Mvc\">\n      <HintPath>..\\..\\External Libraries\\Kendo.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.1.0.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Attributes\\LogAccessAttribute.cs\" />\n    <Compile Include=\"Attributes\\LoggerFilterAttribute.cs\" />\n    <Compile Include=\"Attributes\\OverrideAuthorizeAttribute.cs\" />\n    <Compile Include=\"EnumConverter.cs\" />\n    <Compile Include=\"Extensions\\TempDataExtentions.cs\" />\n    <Compile Include=\"Interfaces\\IKendoGridAdministrationController.cs\" />\n    <Compile Include=\"Interfaces\\IAdministrationViewModel.cs\" />\n    <Compile Include=\"Extensions\\PrincipalExtensions.cs\" />\n    <Compile Include=\"OjsUserManager.cs\" />\n    <Compile Include=\"SearchResultType.cs\" />\n    <Compile Include=\"SystemMessage.cs\" />\n    <Compile Include=\"SystemMessageCollection.cs\" />\n    <Compile Include=\"SystemMessageType.cs\" />\n    <Compile Include=\"ZipFileResult.cs\" />\n    <Compile Include=\"ZippedTestManipulator\\TestsParseResult.cs\" />\n    <Compile Include=\"ZippedTestManipulator\\ZippedTestsManipulator.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\n      <Name>OJS.Data.Contracts</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Models\\OJS.Data.Models.csproj\">\n      <Project>{341ca732-d483-4487-923e-27ed2a6e9a4f}</Project>\n      <Name>OJS.Data.Models</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data\\OJS.Data.csproj\">\n      <Project>{1807194c-9e25-4365-b3be-fe1df627612b}</Project>\n      <Name>OJS.Data</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/OjsUserManager.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    using Microsoft.AspNet.Identity;\n\n    public class OjsUserManager<T> : UserManager<T>\n        where T : IUser\n    {\n        public OjsUserManager(IUserStore<T> userStore)\n            : base(userStore)\n        {\n            // changing the default user validator so that usernames can contain\n            // not only alphanumeric characters\n            this.UserValidator = new UserValidator<T>(this)\n            {\n                AllowOnlyAlphanumericUserNames = false\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Web.Common\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Web.Common\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b11bf9dd-f2da-4d25-a687-5430c6efc16c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/SearchResultType.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    public enum SearchResultType\n    {\n        Problem = 0,\n        Contest = 1,\n        User = 2\n    }\n}"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/SystemMessage.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    public class SystemMessage\n    {\n        public string Content { get; set; }\n\n        public int Importance { get; set; }\n\n        public SystemMessageType Type { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/SystemMessageCollection.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n\n    public class SystemMessageCollection : IEnumerable<SystemMessage>\n    {\n        private readonly IList<SystemMessage> list;\n\n        public SystemMessageCollection()\n        {\n            this.list = new List<SystemMessage>();\n        }\n\n        public void Add(SystemMessage message)\n        {\n            this.list.Add(message);\n        }\n\n        public void Add(string content, SystemMessageType type, int importance)\n        {\n            var message = new SystemMessage { Content = content, Importance = importance, Type = type };\n            this.Add(message);\n        }\n\n        public IEnumerator<SystemMessage> GetEnumerator()\n        {\n            return this.list.OrderByDescending(x => x.Importance).ThenByDescending(x => x.Type).GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return this.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/SystemMessageType.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    public enum SystemMessageType\n    {\n        Informational = 0,\n        Success = 1,\n        Warning = 2,\n        Error = 3,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/ZipFileResult.cs",
    "content": "﻿namespace OJS.Web.Common\n{\n    using System.Web.Mvc;\n\n    using Ionic.Zip;\n\n    using OJS.Common;\n\n    /// <summary>\n    /// A content result which can accepts a DotNetZip ZipFile object to write to the output stream\n    /// As seen on http://whatschrisdoing.com/blog/2010/03/22/asp-net-mvc-and-ionic-zip/\n    /// </summary>\n    public class ZipFileResult : ActionResult\n    {\n        private readonly ZipFile zip;\n\n        private readonly string filename;\n\n        public ZipFileResult(ZipFile zip, string filename)\n        {\n            this.zip = zip;\n            this.filename = filename;\n        }\n\n        public override void ExecuteResult(ControllerContext context)\n        {\n            var response = context.HttpContext.Response;\n\n            response.ContentType = GlobalConstants.ZipMimeType;\n            response.AddHeader(\n                \"Content-Disposition\",\n                \"attachment;\" + (string.IsNullOrEmpty(this.filename) ? string.Empty : \"filename=\" + this.filename));\n\n            this.zip.Save(response.OutputStream);\n\n            response.End();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/ZippedTestManipulator/TestsParseResult.cs",
    "content": "﻿namespace OJS.Web.Common.ZippedTestManipulator\n{\n    using System.Collections.Generic;\n\n    public class TestsParseResult\n    {\n        public TestsParseResult()\n        {\n            this.ZeroInputs = new List<string>();\n            this.ZeroOutputs = new List<string>();\n            this.Inputs = new List<string>();\n            this.Outputs = new List<string>();\n        }\n\n        public List<string> ZeroInputs { get; set; }\n\n        public List<string> ZeroOutputs { get; set; }\n\n        public List<string> Inputs { get; set; }\n\n        public List<string> Outputs { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/ZippedTestManipulator/ZippedTestsManipulator.cs",
    "content": "﻿namespace OJS.Web.Common.ZippedTestManipulator\n{\n    using System;\n    using System.IO;\n    using System.Linq;\n\n    using Ionic.Zip;\n\n    using OJS.Data.Models;\n\n    public class ZippedTestsManipulator\n    {\n        public static TestsParseResult Parse(Stream stream)\n        {\n            var zipFile = ZipFile.Read(stream);\n\n            var result = new TestsParseResult();\n\n            ExcractInAndSolFiles(zipFile, result);\n            ExcractInAndOutFiles(zipFile, result);\n            ExtractTxtFiles(zipFile, result);\n            ExtractIOIFiles(zipFile, result);\n\n            return result;\n        }\n\n        public static void AddTestsToProblem(Problem problem, TestsParseResult tests)\n        {\n            var lastTrialTest = problem.Tests.Where(x => x.IsTrialTest).OrderByDescending(x => x.OrderBy).FirstOrDefault();\n            int zeroTestsOrder = 1;\n\n            if (lastTrialTest != null)\n            {\n                zeroTestsOrder = lastTrialTest.OrderBy + 1;\n            }\n\n            for (int i = 0; i < tests.ZeroInputs.Count; i++)\n            {\n                problem.Tests.Add(new Test\n                {\n                    IsTrialTest = true,\n                    OrderBy = zeroTestsOrder,\n                    Problem = problem,\n                    InputDataAsString = tests.ZeroInputs[i],\n                    OutputDataAsString = tests.ZeroOutputs[i],\n                });\n\n                zeroTestsOrder++;\n            }\n\n            var lastTest = problem.Tests.Where(x => !x.IsTrialTest).OrderByDescending(x => x.OrderBy).FirstOrDefault();\n            int count = 1;\n\n            if (lastTest != null)\n            {\n                count = lastTest.OrderBy + 1;\n            }\n\n            for (int i = 0; i < tests.Inputs.Count; i++)\n            {\n                problem.Tests.Add(new Test\n                {\n                    IsTrialTest = false,\n                    OrderBy = count,\n                    Problem = problem,\n                    InputDataAsString = tests.Inputs[i],\n                    OutputDataAsString = tests.Outputs[i]\n                });\n\n                count++;\n            }\n        }\n\n        public static string ExtractFileFromStream(ZipEntry entry)\n        {\n            var reader = new MemoryStream();\n            entry.Extract(reader);\n            reader = new MemoryStream(reader.ToArray());\n\n            var streamReader = new StreamReader(reader);\n\n            var text = streamReader.ReadToEnd();\n            reader.Dispose();\n            return text;\n        }\n\n        private static void ExcractInAndSolFiles(ZipFile zipFile, TestsParseResult result)\n        {\n            // .in and .sol files\n            if (zipFile.Entries.Any(x => x.FileName.ToLower().Substring(x.FileName.Length - 4, 4) == \".sol\"))\n            {\n                var solOutputs = zipFile.EntriesSorted.Where(x => x.FileName.ToLower().Substring(x.FileName.Length - 4, 4) == \".sol\").ToList();\n\n                foreach (var output in solOutputs)\n                {\n                    if (!zipFile.Entries.Any(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 3) + \"in\")))\n                    {\n                        throw new ArgumentException(\"Невалидно име на входен тест\");\n                    }\n                    else\n                    {\n                        var inputFiles = zipFile.Entries.Where(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 3) + \"in\")).ToList();\n\n                        if (inputFiles.Count > 1)\n                        {\n                            throw new ArgumentException(\"Невалиден брой входни тестове\");\n                        }\n\n                        var input = inputFiles[0];\n\n                        // check zero test\n                        if (input.FileName.ToLower().Substring(input.FileName.Length - 5, 5) == \"00.in\"\n                            && output.FileName.ToLower().Substring(output.FileName.Length - 6, 6) == \"00.sol\")\n                        {\n                            result.ZeroInputs.Add(ExtractFileFromStream(input));\n                            result.ZeroOutputs.Add(ExtractFileFromStream(output));\n                        }\n                        else\n                        {\n                            result.Inputs.Add(ExtractFileFromStream(input));\n                            result.Outputs.Add(ExtractFileFromStream(output));\n                        }\n                    }\n                }\n            }\n        }\n\n        private static void ExcractInAndOutFiles(ZipFile zipFile, TestsParseResult result)\n        {\n            // .in and .out files\n            if (zipFile.Entries.Any(x => x.FileName.ToLower().Substring(x.FileName.Length - 4, 4) == \".out\"))\n            {\n                var outOutputs = zipFile.EntriesSorted.Where(x => x.FileName.ToLower().Substring(x.FileName.Length - 4, 4) == \".out\").ToList();\n\n                foreach (var output in outOutputs)\n                {\n                    if (!zipFile.Entries.Any(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 3) + \"in\")))\n                    {\n                        throw new ArgumentException(\"Невалидно име на входен тест\");\n                    }\n                    else\n                    {\n                        var inputFiles = zipFile.Entries.Where(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 3) + \"in\")).ToList();\n\n                        if (inputFiles.Count > 1)\n                        {\n                            throw new ArgumentException(\"Невалиден брой входни тестове\");\n                        }\n\n                        var input = inputFiles[0];\n\n                        // check zero test\n                        if (input.FileName.ToLower().Substring(input.FileName.LastIndexOf('_') - 2, 2) == \"et\"\n                            && output.FileName.ToLower().Substring(output.FileName.LastIndexOf('_') - 2, 2) == \"et\")\n                        {\n                            result.ZeroInputs.Add(ExtractFileFromStream(input));\n                            result.ZeroOutputs.Add(ExtractFileFromStream(output));\n                        }\n                        else\n                        {\n                            result.Inputs.Add(ExtractFileFromStream(input));\n                            result.Outputs.Add(ExtractFileFromStream(output));\n                        }\n                    }\n                }\n            }\n        }\n\n        private static void ExtractTxtFiles(ZipFile zipFile, TestsParseResult result)\n        {\n            // bgcoder text files\n            if (zipFile.Entries.Any(x => x.FileName.ToLower().Substring(x.FileName.Length - 8, 8) == \".out.txt\"))\n            {\n                var outOutputs = zipFile.EntriesSorted.Where(x => x.FileName.ToLower().Substring(x.FileName.Length - 8, 8) == \".out.txt\").ToList();\n\n                foreach (var output in outOutputs)\n                {\n                    if (!zipFile.Entries.Any(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 7) + \"in.txt\")))\n                    {\n                        throw new ArgumentException(\"Невалидно име на входен тест\");\n                    }\n                    else\n                    {\n                        var inputFiles = zipFile.Entries.Where(x => x.FileName.ToLower().Contains(output.FileName.ToLower().Substring(0, output.FileName.Length - 7) + \"in.txt\")).ToList();\n\n                        if (inputFiles.Count > 1)\n                        {\n                            throw new ArgumentException(\"Невалиден брой входни тестове\");\n                        }\n\n                        var input = inputFiles[0];\n\n                        // check zero test\n                        if (input.FileName.Contains(\".000.\")\n                            && output.FileName.Contains(\".000.\"))\n                        {\n                            result.ZeroInputs.Add(ExtractFileFromStream(input));\n                            result.ZeroOutputs.Add(ExtractFileFromStream(output));\n                        }\n                        else\n                        {\n                            result.Inputs.Add(ExtractFileFromStream(input));\n                            result.Outputs.Add(ExtractFileFromStream(output));\n                        }\n                    }\n                }\n            }\n        }\n\n        private static void ExtractIOIFiles(ZipFile zipFile, TestsParseResult result)\n        {\n            // IOI test files\n            if (zipFile.Entries.Any(x => char.IsNumber(x.FileName[x.FileName.ToLower().LastIndexOf('.') + 1])))\n            {\n                var outOutputs = zipFile.EntriesSorted.Where(x => x.FileName.ToLower().Substring(x.FileName.LastIndexOf('.') - 3, 3) == \"out\").ToList();\n\n                foreach (var output in outOutputs)\n                {\n                    if (!zipFile.Entries.Any(x => x.FileName.ToLower().Contains(\"in\" + x.FileName.ToLower().Substring(x.FileName.ToLower().LastIndexOf('.')))))\n                    {\n                        throw new ArgumentException(\"Невалидно име на входен тест\");\n                    }\n                    else\n                    {\n                        var inputFiles = zipFile.Entries.Where(x => x.FileName.ToLower().Contains(\"in\" + output.FileName.ToLower().Substring(output.FileName.ToLower().LastIndexOf('.')))\n                            && x.FileName.Substring(x.FileName.LastIndexOf('.')) == output.FileName.Substring(output.FileName.LastIndexOf('.'))).ToList();\n\n                        if (inputFiles.Count > 1)\n                        {\n                            throw new ArgumentException(\"Невалиден брой входни тестове\");\n                        }\n\n                        var input = inputFiles[0];\n\n                        result.Inputs.Add(ExtractFileFromStream(input));\n                        result.Outputs.Add(ExtractFileFromStream(output));\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.0.0\" newVersion=\"2.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Razor\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages.Deployment\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework.MappingAPI\" publicKeyToken=\"7ee2e825d201459e\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.9\" newVersion=\"6.1.0.9\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Open Judge System/Web/OJS.Web.Common/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"DotNetZip\" version=\"1.11.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/AgentClient.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System;\n    using System.IO;\n    using System.Net.Sockets;\n\n    using log4net;\n\n    public class AgentClient : IDisposable\n    {\n        private readonly ILog logger;\n        private readonly TcpClient tcpClient;\n\n        private readonly string controllerAddress;\n        private readonly int controllerPort;\n\n        public AgentClient(string controllerAddress, int controllerPort, ILog logger)\n        {\n            this.logger = logger;\n            this.controllerAddress = controllerAddress;\n            this.controllerPort = controllerPort;\n\n            this.tcpClient = new TcpClient();\n        }\n\n        public Stream Stream => this.tcpClient.GetStream();\n\n        public void Start()\n        {\n            this.logger.InfoFormat(\"AgentClient starting with controller located on {0}:{1}...\", this.controllerAddress, this.controllerPort);\n            try\n            {\n                this.tcpClient.Connect(this.controllerAddress, this.controllerPort);\n            }\n            catch (SocketException exception)\n            {\n                this.logger.FatalFormat(\"Unable to connect to the controller. Caught SocketException: {0}\", exception);\n                throw;\n            }\n        }\n\n        public void Stop()\n        {\n            this.tcpClient.Close();\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(true);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                this.Stop();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/AgentCommunicator.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System;\n    using System.IO;\n    using System.Runtime.Serialization;\n\n    using log4net;\n\n    using OJS.Workers.Common.Communication;\n\n    // TODO: Extract communication logic into new class called AgentCommunicator\n    public class AgentCommunicator\n    {\n        private readonly ILog logger;\n        private readonly IFormatter formatter;\n        private readonly IJobWorker jobWorker;\n        private readonly IFileCache fileCache;\n        private readonly Stream stream;\n\n        public AgentCommunicator(Stream stream, IFormatter formatter, IJobWorker jobWorker, IFileCache fileCache, ILog logger)\n        {\n            logger.Info(\"AgentCommunicator initializing...\");\n\n            this.stream = stream;\n            this.formatter = formatter;\n            this.jobWorker = jobWorker;\n            this.fileCache = fileCache;\n            this.logger = logger;\n\n            logger.Info(\"AgentCommunicator initialized.\");\n        }\n\n        /// <summary>\n        /// Start the agent client and wait for tasks from controller.\n        /// This operation is blocking.\n        /// </summary>\n        internal void StartCommunicationLoop()\n        {\n            this.SendSystemInformation();\n\n            this.ReceiveHello();\n\n            // Wait for tasks\n            while (true)\n            {\n                this.NegotiateForTaskExistence();\n                var task = this.GetJob();\n                var jobResult = this.jobWorker.DoJob(task);\n                this.SendJobResult(jobResult);\n            }\n        }\n\n        private void SendJobResult(JobResult jobResult)\n        {\n            var dataObject = new NetworkDataObject\n            {\n                Data = jobResult,\n                Type = NetworkDataObjectType.JobDoneByAgent,\n            };\n\n            this.formatter.Serialize(this.stream, dataObject);\n        }\n\n        private void NegotiateForTaskExistence()\n        {\n            var result = this.formatter.Deserialize(this.stream) as NetworkDataObject;\n            if (result == null || result.Type != NetworkDataObjectType.AskAgentIfHasProblemDetails)\n            {\n                throw new NetworkCommunicationException();\n            }\n\n            var taskKey = result.Data as string;\n            var taskExists = this.fileCache.Contains(taskKey);\n\n            var dataObject = new NetworkDataObject\n            {\n                Data = taskExists,\n                Type = NetworkDataObjectType.AgentHasProblemDetailsInformation,\n            };\n\n            this.formatter.Serialize(this.stream, dataObject);\n        }\n\n        private Job GetJob()\n        {\n            var result = this.formatter.Deserialize(this.stream) as NetworkDataObject;\n            if (result == null || result.Type != NetworkDataObjectType.SendJobForAgent)\n            {\n                throw new NetworkCommunicationException();\n            }\n\n            var task = result.Data as Job;\n\n            return task;\n        }\n\n        private void SendSystemInformation()\n        {\n            try\n            {\n                var dataObject = new NetworkDataObject\n                                     {\n                                         Data = SystemInformation.Collect(),\n                                         Type = NetworkDataObjectType.AgentSendSystemInformation\n                                     };\n\n                this.formatter.Serialize(this.stream, dataObject);\n            }\n            catch (Exception exception)\n            {\n                this.logger.FatalFormat(\n                    \"Unable to send system information to the controller. Caught Exception: {0}\",\n                    exception);\n                throw;\n            }\n        }\n\n        private void ReceiveHello()\n        {\n            try\n            {\n                var result = this.formatter.Deserialize(this.stream) as NetworkDataObject;\n\n                //// TODO: Do something with controller information in result.Data\n\n                if (result == null || result.Type != NetworkDataObjectType.AgentSystemInformationReceived)\n                {\n                    throw new NetworkCommunicationException();\n                }\n            }\n            catch (Exception exception)\n            {\n                this.logger.FatalFormat(\n                    \"Unable to receive system information from the controller. Caught Exception: {0}\",\n                    exception);\n                throw;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/AgentService.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Configuration;\n    using System.Runtime.Serialization.Formatters.Binary;\n    using System.ServiceProcess;\n    using System.Threading;\n    using System.Threading.Tasks;\n\n    using log4net;\n\n    internal class AgentService : ServiceBase\n    {\n        private const int DefaultThreadsCount = 2;\n        private static ILog logger;\n        private readonly List<AgentClient> clients;\n\n        public AgentService()\n        {\n            logger = LogManager.GetLogger(\"AgentService\");\n            logger.Info(\"AgentService initializing...\");\n\n            // TODO: Extract class ConfigurationManager\n            // Read controller address\n            if (ConfigurationManager.AppSettings[\"ControllerAddress\"] == null)\n            {\n                logger.Fatal(\"ControllerAddress setting not found in App.config file!\");\n                throw new Exception(\"ControllerAddress setting not found in App.config file!\");\n            }\n\n            var controllerAddress = ConfigurationManager.AppSettings[\"ControllerAddress\"];\n\n            // Read controller port\n            if (ConfigurationManager.AppSettings[\"ControllerPort\"] == null)\n            {\n                logger.Fatal(\"ControllerPort setting not found in App.config file!\");\n                throw new Exception(\"ControllerPort setting not found in App.config file!\");\n            }\n\n            int controllerPort;\n            if (!int.TryParse(ConfigurationManager.AppSettings[\"ControllerPort\"], out controllerPort))\n            {\n                logger.Fatal(\"ControllerPort setting is not an integer!\");\n                throw new Exception(\"ControllerPort setting is not an integer!\");\n            }\n\n            // Read threads count value\n            int threadsCount;\n            if (ConfigurationManager.AppSettings[\"ThreadsCount\"] != null)\n            {\n                if (!int.TryParse(ConfigurationManager.AppSettings[\"ThreadsCount\"], out threadsCount))\n                {\n                    threadsCount = DefaultThreadsCount;\n                }\n            }\n            else\n            {\n                threadsCount = DefaultThreadsCount;\n            }\n\n            // Create clients\n            this.clients = new List<AgentClient>();\n            for (var i = 1; i <= threadsCount; i++)\n            {\n                var client = new AgentClient(controllerAddress, controllerPort, logger);\n                this.clients.Add(client);\n            }\n\n            logger.Info(\"AgentService initialized.\");\n        }\n\n        protected override void OnStart(string[] args)\n        {\n            logger.Info(\"AgentService starting...\");\n\n            foreach (var agentClient in this.clients)\n            {\n                var client = agentClient;\n                Task.Run(() => StartCommunication(client));\n            }\n\n            logger.Info(\"AgentService started.\");\n        }\n\n        protected override void OnStop()\n        {\n            logger.Info(\"AgentService stopping...\");\n\n            foreach (var agentClient in this.clients)\n            {\n                agentClient.Stop();\n            }\n\n            Thread.Sleep(10 * 1000); // Wait 10 seconds for the client to close connections before exit\n\n            logger.Info(\"AgentService stopped.\");\n        }\n\n        private static void StartCommunication(AgentClient client)\n        {\n            client.Start();\n            var stream = client.Stream;\n            var communicator = new AgentCommunicator(stream, new BinaryFormatter(), new CodeJobWorker(), FileCache.Instance, logger);\n            communicator.StartCommunicationLoop();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/AgentServiceInstaller.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System.ComponentModel;\n    using System.Configuration.Install;\n    using System.ServiceProcess;\n\n    [RunInstaller(true)]\n    public class AgentServiceInstaller : Installer\n    {\n        public AgentServiceInstaller()\n        {\n            var serviceProcessInstaller = new ServiceProcessInstaller\n                                              {\n                                                  Account = ServiceAccount.LocalSystem,\n                                                  Password = null,\n                                                  Username = null\n                                              };\n\n            var serviceInstaller = new ServiceInstaller\n                                       {\n                                           StartType = ServiceStartMode.Automatic,\n                                           DisplayName = \"OJS Agent Service\",\n                                           ServiceName = \"OJS Agent Service\",\n                                           Description =\n                                               \"Executes processes in a sandboxed environment. Tasks are received by a controller and executed by this service.\",\n                                       };\n\n            this.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"log4net\" type=\"log4net.Config.Log4NetConfigurationSectionHandler, log4net\" />\n  </configSections>\n  <appSettings>\n    <add key=\"ControllerAddress\" value=\"127.0.0.1\" />\n    <add key=\"ControllerPort\" value=\"8888\" />\n    <add key=\"ThreadsCount\" value=\"2\" />\n    <add key=\"ClientSettingsProvider.ServiceUri\" value=\"\" />\n  </appSettings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <log4net>\n    <appender name=\"LogFileAppender\" type=\"log4net.Appender.FileAppender\">\n      <param name=\"File\" value=\"OJS.Workers.Agent_Log.txt\" />\n      <param name=\"AppendToFile\" value=\"true\" />\n      <layout type=\"log4net.Layout.PatternLayout\">\n        <param name=\"Header\" value=\"\" />\n        <param name=\"Footer\" value=\"\" />\n        <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %c %m%n\" />\n      </layout>\n    </appender>\n    <root>\n      <level value=\"INFO\" />\n      <appender-ref ref=\"LogFileAppender\" />\n    </root>\n  </log4net>\n  <system.web>\n    <membership defaultProvider=\"ClientAuthenticationMembershipProvider\">\n      <providers>\n        <add name=\"ClientAuthenticationMembershipProvider\" type=\"System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" />\n      </providers>\n    </membership>\n    <roleManager defaultProvider=\"ClientRoleProvider\" enabled=\"true\">\n      <providers>\n        <add name=\"ClientRoleProvider\" type=\"System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" cacheTimeout=\"86400\" />\n      </providers>\n    </roleManager>\n  </system.web>\n</configuration>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/Batch Files/InstallService.bat",
    "content": "NET STOP \"OJS Agent Service\"\nsc delete \"OJS Agent Service\"\ntimeout 10\nCD %~dp0\nC:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil \"..\\OJS.Workers.Agent.exe\"\nNET START \"OJS Agent Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/Batch Files/StopService.bat",
    "content": "NET STOP \"OJS Agent Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/CodeJobWorker.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System;\n\n    using OJS.Workers.Common.Communication;\n\n    public class CodeJobWorker : IJobWorker\n    {\n        public JobResult DoJob(Job job)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/FileCache.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using System;\n    using System.IO;\n\n    public class FileCache : IFileCache\n    {\n        private static FileCache instance;\n        private readonly string cacheFilesPath = Environment.CurrentDirectory + @\"\\Tasks\\\";\n\n        private FileCache()\n        {\n            Directory.CreateDirectory(this.cacheFilesPath);\n        }\n\n        public static FileCache Instance => instance ?? (instance = new FileCache());\n\n        public byte[] this[string key]\n        {\n            get\n            {\n                return File.ReadAllBytes(this.GetCacheLocation(key));\n            }\n\n            set\n            {\n                File.WriteAllBytes(this.GetCacheLocation(key), value);\n            }\n        }\n\n        public bool Contains(string key)\n        {\n            var result = File.Exists(this.GetCacheLocation(key));\n            return result;\n        }\n\n        private string GetCacheLocation(string key)\n        {\n            return $\"{this.cacheFilesPath}{key}.cache\";\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/IFileCache.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    public interface IFileCache\n    {\n        byte[] this[string key] { get; set; }\n\n        bool Contains(string key);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/IJobWorker.cs",
    "content": "﻿namespace OJS.Workers.Agent\n{\n    using OJS.Workers.Common.Communication;\n\n    public interface IJobWorker\n    {\n        JobResult DoJob(Job job);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/OJS.Workers.Agent.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{CE54BB68-B790-47F4-8412-58C2BAC900BD}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Agent</RootNamespace>\n    <AssemblyName>OJS.Workers.Agent</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <PublishUrl>N:\\Virtual Machines\\Shared\\Telerik.OJS.Workers.Agent\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>10</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <PublishWizardCompleted>true</PublishWizardCompleted>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ManifestCertificateThumbprint>5546EE00013552FF7812AC6789FE6077210E8DD4</ManifestCertificateThumbprint>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ManifestKeyFile>Telerik.OJS.Workers.Agent_TemporaryKey.pfx</ManifestKeyFile>\n  </PropertyGroup>\n  <PropertyGroup>\n    <GenerateManifests>true</GenerateManifests>\n  </PropertyGroup>\n  <PropertyGroup>\n    <TargetZone>LocalIntranet</TargetZone>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>Properties\\app.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignManifests>false</SignManifests>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\log4net.2.0.5\\lib\\net45-full\\log4net.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.Install\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Management\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AgentClient.cs\" />\n    <Compile Include=\"AgentCommunicator.cs\" />\n    <Compile Include=\"AgentServiceInstaller.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"AgentService.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"CodeJobWorker.cs\" />\n    <Compile Include=\"IFileCache.cs\" />\n    <Compile Include=\"IJobWorker.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"FileCache.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"Batch Files\\InstallService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Batch Files\\StopService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\app.manifest\" />\n    <None Include=\"OJS.Workers.Agent_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.5\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Checkers\\OJS.Workers.Checkers.csproj\">\n      <Project>{93ec1d66-2ce1-4682-ac09-c8c40178a9ad}</Project>\n      <Name>OJS.Workers.Checkers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\">\n      <Project>{8570183b-9d7a-408d-9ea6-f86f59b05a10}</Project>\n      <Name>OJS.Workers.Compilers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\">\n      <Project>{cda78d62-7210-45ca-b3e5-9f6a5dea5734}</Project>\n      <Name>OJS.Workers.Executors</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/Program.cs",
    "content": "﻿[assembly: log4net.Config.XmlConfigurator(Watch = true)]\n\nnamespace OJS.Workers.Agent\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.ServiceProcess;\n\n    internal static class Program\n    {\n        /// <summary>\n        /// The main entry point for the service.\n        /// </summary>\n        private static void Main()\n        {\n            try\n            {\n                // Explicitly set App.config file location to prevent confusion\n                // ReSharper disable once AssignNullToNotNullAttribute\n                Environment.CurrentDirectory = Path.GetDirectoryName(typeof(Program).Assembly.Location);\n                AppDomain.CurrentDomain.SetData(\"APP_CONFIG_FILE\", \"OJS.Workers.Agent.exe.config\");\n\n                // Run the service\n                var servicesToRun = new ServiceBase[] { new AgentService() };\n                ServiceBase.Run(servicesToRun);\n            }\n            catch (Exception exception)\n            {\n                const string Source = \"OJS.Workers.Agent\";\n                if (!EventLog.SourceExists(Source))\n                {\n                    EventLog.CreateEventSource(Source, \"Application\");\n                }\n\n                EventLog.WriteEntry(Source, exception.ToString(), EventLogEntryType.Error);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Agent\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Agent\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"8fbfb9dd-ebb5-4155-9b4a-893f806ccb74\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/Properties/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<asmv1:assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv1=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv2=\"urn:schemas-microsoft-com:asm.v2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\" />\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n            If you want to change the Windows User Account Control level replace the \n            requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel node will disable file and registry virtualization.\n            If you want to utilize File and Registry Virtualization for backward \n            compatibility then delete the requestedExecutionLevel node.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n      <applicationRequestMinimum>\n        <PermissionSet class=\"System.Security.PermissionSet\" version=\"1\" Unrestricted=\"true\" ID=\"Custom\" SameSite=\"site\" />\n        <defaultAssemblyRequest permissionSetReference=\"Custom\" />\n      </applicationRequestMinimum>\n    </security>\n  </trustInfo>\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of all Windows versions that this application is designed to work with. \n      Windows will automatically select the most compatible environment.-->\n      <!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"></supportedOS>-->\n      <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/>-->\n      <!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"></supportedOS>-->\n      <!-- If your application is designed to work with Windows 8.1, uncomment the following supportedOS node-->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/>-->\n    </application>\n  </compatibility>\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!-- <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>-->\n</asmv1:assembly>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Agent/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"log4net\" version=\"2.0.10\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/CPlusPlusCodeChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using System;\n\n    public class CPlusPlusCodeChecker : Checker\n    {\n        public override Common.CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override void SetParameter(string code)\n        {\n            // Code contains the C/C++ code to compile and run\n            base.SetParameter(code);\n        }\n    }\n}\n\n/*\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n\ntypedef enum {integer, real, string} Type;\n\nint freadline(Type t, FILE *f, char *b, int size)\n{int i;\n char *e;\n b[0]=0;\n fgets(b,size,f);\n for (i=0;i<size&&b[i]&&b[i]!='\\n';i++);\n b[i]=0;\n switch (t)\n {case string:return 1;\n  case integer:{strtol(b,&e,10);\n        return *b&&!*e;\n           }\n  case real:{strtod(b,&e);\n         return *b&&!*e;\n        }\n }\n return 0;\n}\n\ndouble MyAbs(double X)\n{\n    if (X < 0) return -X;\n    else\n      return X;\n}\n\nint eqDoubles(double d1, double d2)\n{double d=MyAbs(d1-d2);\n if (d<=0.001001) return 4;\n if (d<=0.01001) return 3;\n if (d<=0.1001) return 2;\n if (d<=1.001) return 1;\n return 0;\n}\n\nint main(int argc, char *argv[])\n{FILE *f;\n double comp,sol;\n int points=0,linef;\n char buf[32], *e;\n if (!(f = fopen(argv[3], \"r\")))      // solution file\n {printf(\"Cannot open solution.\\n\");\n  return 0;\n }\n if (!freadline(real,f,buf,30))\n {printf(\"Wrong solution file.\\n\");\n  fclose(f);\n  return 0;\n }\n sol=strtod(buf, &e);\n sol=floor(1000*sol+0.5)/1000;\n fclose(f);\n if (!(f = fopen(argv[2], \"r\")))    // competitor file\n {printf(\"0\\nCannot open result.\\n\");\n  fclose(f);\n  return 0;\n }\n linef=freadline(real,f,buf,30);\n fclose(f);\n if (!linef)\n {printf(\"0\\nIncorrect output format.\\n\");\n  return 0;\n }\n if (strchr(buf,0)-strchr(buf,'.')!=4)\n {printf(\"0\\nIncorrect output format.\\n\");\n  return 0;\n }\n comp=strtod(buf, &e);\n comp=floor(1000*comp+0.5)/1000;\n points=eqDoubles(sol,comp);\n printf(\"%d\\n\",points);\n switch (points)\n {case 0:printf(\"Too far away\\n\");break;\n  case 1:printf(\"Precision too low\\n\");break;\n  case 2:printf(\"Low precision\\n\");break;\n  case 3:printf(\"Almost there\\n\");break;\n  case 4:printf(\"Correct\\n\");\n }\n return 0;\n}\n*/"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/CSharpCodeChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using System;\n    using System.CodeDom.Compiler;\n    using System.Linq;\n    using System.Runtime.Caching;\n    using System.Text;\n\n    using Microsoft.CSharp;\n\n    using OJS.Workers.Common;\n\n    public class CSharpCodeChecker : Checker\n    {\n        private const int CacheDays = 7;\n\n        private static readonly TimeSpan CacheDaysSlidingExpiration = TimeSpan.FromDays(CacheDays);\n\n        private readonly ObjectCache compiledCustomCheckersCache;\n\n        private IChecker customChecker;\n\n        public CSharpCodeChecker()\n            : this(MemoryCache.Default)\n        {\n        }\n\n        public CSharpCodeChecker(ObjectCache compiledCustomCheckersCache)\n        {\n            if (compiledCustomCheckersCache == null)\n            {\n                throw new ArgumentNullException(nameof(compiledCustomCheckersCache));\n            }\n\n            this.compiledCustomCheckersCache = compiledCustomCheckersCache;\n        }\n\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            if (this.customChecker == null)\n            {\n                throw new InvalidOperationException(\"Please call SetParameter first with non-null string.\");\n            }\n\n            var result = this.customChecker.Check(inputData, receivedOutput, expectedOutput, isTrialTest);\n            return result;\n        }\n\n        public override void SetParameter(string parameter)\n        {\n            var customCheckerFromCache = this.compiledCustomCheckersCache[parameter] as IChecker;\n            if (customCheckerFromCache != null)\n            {\n                this.customChecker = customCheckerFromCache;\n                return;\n            }\n\n            var codeProvider = new CSharpCodeProvider();\n            var compilerParameters = new CompilerParameters { GenerateInMemory = true, };\n            compilerParameters.ReferencedAssemblies.Add(\"System.dll\");\n            compilerParameters.ReferencedAssemblies.Add(\"System.Core.dll\");\n            compilerParameters.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + \"OJS.Workers.Common.dll\");\n            var compilerResults = codeProvider.CompileAssemblyFromSource(compilerParameters, parameter);\n            if (compilerResults.Errors.HasErrors)\n            {\n                var errorsStringBuilder = new StringBuilder();\n                foreach (CompilerError error in compilerResults.Errors)\n                {\n                    errorsStringBuilder.AppendLine(error.ToString());\n                }\n\n                // TODO: Introduce class CompilerException and throw exception of this type\n                throw new Exception(\n                    string.Format(\n                        \"Could not compile checker!{0}Errors:{0}{1}\",\n                        Environment.NewLine,\n                        errorsStringBuilder));\n            }\n\n            var assembly = compilerResults.CompiledAssembly;\n\n            var types = assembly.GetTypes().Where(x => typeof(IChecker).IsAssignableFrom(x)).ToList();\n            if (types.Count > 1)\n            {\n                throw new Exception(\"More than one implementation of OJS.Workers.Common.IChecker was found!\");\n            }\n\n            var type = types.FirstOrDefault();\n            if (type == null)\n            {\n                throw new Exception(\"Implementation of OJS.Workers.Common.IChecker not found!\");\n            }\n\n            var instance = Activator.CreateInstance(type) as IChecker;\n            if (instance == null)\n            {\n                throw new Exception($\"Cannot create an instance of type {type.FullName}!\");\n            }\n\n            this.compiledCustomCheckersCache.Set(parameter, instance, new CacheItemPolicy { SlidingExpiration = CacheDaysSlidingExpiration });\n            this.customChecker = instance;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/CaseInsensitiveChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using OJS.Workers.Common;\n\n    public class CaseInsensitiveChecker : Checker\n    {\n        public CaseInsensitiveChecker()\n        {\n            this.IgnoreCharCasing = true;\n        }\n\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            var result = this.CheckLineByLine(inputData, receivedOutput, expectedOutput, this.AreEqualCaseInsensitiveLines, isTrialTest);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/Checker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using System;\n    using System.IO;\n    using System.Reflection;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Common;\n\n    public abstract class Checker : IChecker\n    {\n        protected Checker()\n        {\n            this.IgnoreCharCasing = false;\n        }\n\n        protected bool IgnoreCharCasing { get; set; }\n\n        public static IChecker CreateChecker(string assemblyName, string typeName, string parameter)\n        {\n            var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + assemblyName);\n            var type = assembly.GetType(typeName);\n            var checker = (IChecker)Activator.CreateInstance(type);\n\n            if (parameter != null)\n            {\n                checker.SetParameter(parameter);\n            }\n\n            return checker;\n        }\n\n        public abstract CheckerResult Check(\n            string inputData,\n            string receivedOutput,\n            string expectedOutput,\n            bool isTrialTest);\n\n        public virtual void SetParameter(string parameter)\n        {\n            throw new InvalidOperationException(\"This checker doesn't support parameters\");\n        }\n\n        protected CheckerResult CheckLineByLine(\n            string inputData,\n            string receivedOutput,\n            string expectedOutput,\n            Func<string, string, bool> areEqual,\n            bool isTrialTest)\n        {\n            this.NormalizeEndLines(ref receivedOutput);\n            this.NormalizeEndLines(ref expectedOutput);\n\n            var userFileReader = new StringReader(receivedOutput);\n            var correctFileReader = new StringReader(expectedOutput);\n\n            CheckerResultType resultType;\n\n            var adminCheckerDetails = default(CheckerDetails);\n            int lineNumber = 0;\n            using (userFileReader)\n            {\n                using (correctFileReader)\n                {\n                    while (true)\n                    {\n                        string userLine = userFileReader.ReadLine();\n                        string correctLine = correctFileReader.ReadLine();\n\n                        if (userLine == null && correctLine == null)\n                        {\n                            // No more lines in both streams\n                            resultType = CheckerResultType.Ok;\n                            break;\n                        }\n\n                        if (userLine == null || correctLine == null)\n                        {\n                            // One of the two streams is already empty\n                            adminCheckerDetails = this.PrepareAdminCheckerDetailsForInvalidNumberOfLines(\n                                lineNumber,\n                                userLine,\n                                correctLine);\n                            resultType = CheckerResultType.InvalidNumberOfLines;\n                            break;\n                        }\n\n                        if (!areEqual(userLine, correctLine))\n                        {\n                            // Lines are different => wrong answer\n                            adminCheckerDetails = this.PrepareAdminCheckerDetailsForDifferentLines(\n                                lineNumber,\n                                correctLine,\n                                userLine);\n                            resultType = CheckerResultType.WrongAnswer;\n                            break;\n                        }\n\n                        lineNumber++;\n                    }\n                }\n            }\n\n            var checkerDetails = default(CheckerDetails);\n            if (resultType != CheckerResultType.Ok)\n            {\n                checkerDetails = this.PrepareCheckerDetails(receivedOutput, expectedOutput, isTrialTest, adminCheckerDetails);\n            }\n\n            return new CheckerResult\n            {\n                IsCorrect = resultType == CheckerResultType.Ok,\n                ResultType = resultType,\n                CheckerDetails = checkerDetails\n            };\n        }\n\n        protected void NormalizeEndLines(ref string output)\n        {\n            if (!output.EndsWith(\"\\n\"))\n            {\n                output += \"\\n\";\n            }\n        }\n\n        protected bool AreEqualExactLines(string userLine, string correctLine)\n        {\n            return userLine.Equals(correctLine, StringComparison.InvariantCulture);\n        }\n\n        protected bool AreEqualTrimmedLines(string userLine, string correctLine)\n        {\n            return userLine.Trim().Equals(correctLine.Trim(), StringComparison.InvariantCulture);\n        }\n\n        protected bool AreEqualCaseInsensitiveLines(string userLine, string correctLine)\n        {\n            return userLine.ToLower().Equals(correctLine.ToLower(), StringComparison.InvariantCulture);\n        }\n\n        protected virtual CheckerDetails PrepareAdminCheckerDetailsForDifferentLines(\n            int lineNumber,\n            string correctLine,\n            string userLine)\n        {\n            const int FragmentMaxLength = 256;\n\n            var adminCheckerDetails = new CheckerDetails\n            {\n                Comment = string.Format(\"Line {0} is different.\", lineNumber)\n            };\n\n            var firstDifferenceIndex = correctLine.GetFirstDifferenceIndexWith(userLine, this.IgnoreCharCasing);\n\n            if (correctLine != null)\n            {\n                adminCheckerDetails.ExpectedOutputFragment =\n                    PrepareOutputFragment(correctLine, firstDifferenceIndex, FragmentMaxLength);\n            }\n\n            if (userLine != null)\n            {\n                adminCheckerDetails.UserOutputFragment =\n                    PrepareOutputFragment(userLine, firstDifferenceIndex, FragmentMaxLength);\n            }\n\n            return adminCheckerDetails;\n        }\n\n        protected virtual CheckerDetails PrepareAdminCheckerDetailsForInvalidNumberOfLines(\n            int lineNumber,\n            string userLine,\n            string correctLine)\n        {\n            const int FragmentMaxLength = 256;\n\n            var adminCheckerDetails = new CheckerDetails\n            {\n                Comment = string.Format(\"Invalid number of lines on line {0}\", lineNumber)\n            };\n\n            var firstDifferenceIndex = correctLine.GetFirstDifferenceIndexWith(userLine, this.IgnoreCharCasing);\n\n            if (correctLine != null)\n            {\n                adminCheckerDetails.ExpectedOutputFragment =\n                    PrepareOutputFragment(correctLine, firstDifferenceIndex, FragmentMaxLength);\n            }\n\n            if (userLine != null)\n            {\n                adminCheckerDetails.UserOutputFragment =\n                    PrepareOutputFragment(userLine, firstDifferenceIndex, FragmentMaxLength);\n            }\n\n            return adminCheckerDetails;\n        }\n\n        protected virtual CheckerDetails PrepareCheckerDetails(\n            string receivedOutput,\n            string expectedOutput,\n            bool isTrialTest,\n            CheckerDetails adminCheckerDetails)\n        {\n            CheckerDetails checkerDetails;\n            if (isTrialTest)\n            {\n                const int FragmentMaxLength = 4096;\n\n                checkerDetails = default(CheckerDetails);\n\n                var firstDifferenceIndex = expectedOutput.GetFirstDifferenceIndexWith(receivedOutput, this.IgnoreCharCasing);\n\n                if (expectedOutput != null)\n                {\n                    checkerDetails.ExpectedOutputFragment =\n                        PrepareOutputFragment(expectedOutput, firstDifferenceIndex, FragmentMaxLength);\n                }\n\n                if (receivedOutput != null)\n                {\n                    checkerDetails.UserOutputFragment =\n                        PrepareOutputFragment(receivedOutput, firstDifferenceIndex, FragmentMaxLength);\n                }\n            }\n            else\n            {\n                // Test report for admins\n                checkerDetails = adminCheckerDetails;\n            }\n\n            return checkerDetails;\n        }\n\n        private static string PrepareOutputFragment(string output, int firstDifferenceIndex, int fragmentMaxLength)\n        {\n            var fragmentStartIndex = Math.Max(firstDifferenceIndex - (fragmentMaxLength / 2), 0);\n            var fragmentEndIndex = Math.Min(firstDifferenceIndex + (fragmentMaxLength / 2), output.Length);\n\n            var fragment = output.GetStringWithEllipsisBetween(fragmentStartIndex, fragmentEndIndex);\n\n            return fragment;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/ExactChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using OJS.Workers.Common;\n\n    public class ExactChecker : Checker\n    {\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            var result = this.CheckLineByLine(inputData, receivedOutput, expectedOutput, this.AreEqualExactLines, isTrialTest);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/OJS.Workers.Checkers.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{93EC1D66-2CE1-4682-AC09-C8C40178A9AD}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Checkers</RootNamespace>\n    <AssemblyName>OJS.Workers.Checkers</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Checker.cs\" />\n    <Compile Include=\"CaseInsensitiveChecker.cs\" />\n    <Compile Include=\"CPlusPlusCodeChecker.cs\" />\n    <Compile Include=\"CSharpCodeChecker.cs\" />\n    <Compile Include=\"ExactChecker.cs\" />\n    <Compile Include=\"PrecisionChecker.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SortChecker.cs\" />\n    <Compile Include=\"TrimChecker.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/PrecisionChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using System;\n    using System.Globalization;\n\n    using OJS.Workers.Common;\n\n    /// <summary>\n    /// Checks if each line of decimals are equal with certain precision (default is 14).\n    /// </summary>\n    public class PrecisionChecker : Checker\n    {\n        private int precision = 14;\n\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            var result = this.CheckLineByLine(inputData, receivedOutput, expectedOutput, this.AreEqualWithPrecision, isTrialTest);\n            return result;\n        }\n\n        public override void SetParameter(string parameter)\n        {\n            this.precision = int.Parse(parameter, CultureInfo.InvariantCulture);\n        }\n\n        private bool AreEqualWithPrecision(string userLine, string correctLine)\n        {\n            try\n            {\n                userLine = userLine.Replace(',', '.');\n                correctLine = correctLine.Replace(',', '.');\n                decimal userLineInNumber = decimal.Parse(userLine, CultureInfo.InvariantCulture);\n                decimal correctLineInNumber = decimal.Parse(correctLine, CultureInfo.InvariantCulture);\n\n                // TODO: Change with 1.0 / math.pow(10, xxx)\n                decimal precisionEpsilon = 1.0m / (decimal)Math.Pow(10, this.precision);\n\n                return Math.Abs(userLineInNumber - correctLineInNumber) < precisionEpsilon;\n            }\n            catch\n            {\n                return false;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Checkers\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Checkers\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"12eae353-8b35-4c9f-878d-397045788d2c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/SortChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Workers.Common;\n\n    public class SortChecker : Checker\n    {\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            this.NormalizeEndLines(ref receivedOutput);\n            this.NormalizeEndLines(ref expectedOutput);\n\n            var userFileReader = new StringReader(receivedOutput);\n            var correctFileReader = new StringReader(expectedOutput);\n\n            var userLines = new List<string>();\n            var correctLines = new List<string>();\n\n            var resultType = CheckerResultType.Ok;\n\n            var adminCheckerDetails = default(CheckerDetails);\n            var lineNumber = 0;\n            using (userFileReader)\n            {\n                using (correctFileReader)\n                {\n                    var userLine = userFileReader.ReadLine();\n                    var correctLine = correctFileReader.ReadLine();\n\n                    while (userLine != null && correctLine != null)\n                    {\n                        correctLines.Add(correctLine);\n                        userLines.Add(userLine);\n\n                        correctLine = correctFileReader.ReadLine();\n                        userLine = userFileReader.ReadLine();\n\n                        lineNumber++;\n                    }\n\n                    if (userLine != correctLine)\n                    {\n                        // one of the streams still has lines\n                        adminCheckerDetails = this.PrepareAdminCheckerDetailsForInvalidNumberOfLines(lineNumber, userLine, correctLine);\n                        resultType = CheckerResultType.InvalidNumberOfLines;\n                    }\n                }\n            }\n\n            userLines.Sort();\n            correctLines.Sort();\n\n            if (resultType == CheckerResultType.Ok)\n            {\n                for (int i = 0; i < userLines.Count; i++)\n                {\n                    if (!this.AreEqualExactLines(userLines[i], correctLines[i]))\n                    {\n                        adminCheckerDetails = this.PrepareAdminCheckerDetailsForDifferentLines(\n                            i,\n                            correctLines[i],\n                            userLines[i]);\n                        resultType = CheckerResultType.WrongAnswer;\n                        break;\n                    }\n                }\n            }\n\n            var checkerDetails = default(CheckerDetails);\n            if (resultType != CheckerResultType.Ok)\n            {\n                checkerDetails = this.PrepareCheckerDetails(receivedOutput, expectedOutput, isTrialTest, adminCheckerDetails);\n            }\n\n            return new CheckerResult\n            {\n                IsCorrect = resultType == CheckerResultType.Ok,\n                ResultType = resultType,\n                CheckerDetails = checkerDetails\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/TrimChecker.cs",
    "content": "﻿namespace OJS.Workers.Checkers\n{\n    using OJS.Workers.Common;\n\n    public class TrimChecker : Checker\n    {\n        public override CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest)\n        {\n            var result = this.CheckLineByLine(\n                inputData,\n                receivedOutput?.Trim(),\n                expectedOutput?.Trim(),\n                this.AreEqualTrimmedLines,\n                isTrialTest);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Checkers/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/AgentResponseData.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    using System.Collections.Generic;\n\n    public class AgentResponseData\n    {\n        public CompileResult CompileResult { get; set; }\n\n        public ProcessExecutionResult ExecutionResult { get; set; }\n\n        public List<TestResult> TestResults { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/AgentTaskData.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    using System.Collections.Generic;\n\n    public class AgentTaskData\n    {\n        public List<SourceFile> SourceFiles { get; set; }\n\n        public TaskInformation TaskInformation { get; set; }\n\n        public List<Test> Tests { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/SourceFile.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    public class SourceFile\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/TaskInformation.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    public class TaskInformation\n    {\n        public int TimeLimit { get; set; }\n\n        public long MemoryLimit { get; set; }\n\n        public string CheckerDllFile { get; set; }\n\n        public string CheckerClassName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/Test.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    public class Test\n    {\n        public int Id { get; set; }\n\n        public byte[] Input { get; set; }\n\n        public byte[] Output { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Agents/TestResult.cs",
    "content": "﻿namespace OJS.Workers.Common.Agents\n{\n    public class TestResult\n    {\n        public CheckerResult CheckerResult { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/CheckerDetails.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public struct CheckerDetails\n    {\n        public string Comment { get; set; }\n\n        public string ExpectedOutputFragment { get; set; }\n\n        public string UserOutputFragment { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/CheckerResult.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public struct CheckerResult\n    {\n        public bool IsCorrect { get; set; }\n\n        public CheckerResultType ResultType { get; set; }\n\n        /// <summary>\n        /// Gets or sets more detailed information visible only by administrators.\n        /// </summary>\n        public CheckerDetails CheckerDetails { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/CheckerResultType.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    using System;\n\n    [Flags]\n    public enum CheckerResultType\n    {\n        Ok = 0,\n\n        WrongAnswer = 1 << 0,\n\n        InvalidOutputFormat = 1 << 1,\n\n        InvalidNumberOfLines = 1 << 2,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/Job.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    using System;\n\n    [Serializable]\n    public class Job\n    {\n        public bool ContainsTaskData { get; set; }\n\n        public byte[] TaskData { get; set; }\n\n        public byte[] UserSolution { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/JobResult.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    using System;\n\n    [Serializable]\n    public class JobResult\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/NetworkCommunicationException.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    using System;\n\n    [Serializable]\n    public class NetworkCommunicationException : Exception\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/NetworkDataObject.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    using System;\n\n    [Serializable]\n    public class NetworkDataObject\n    {\n        public NetworkDataObjectType Type { get; set; }\n\n        public object Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/NetworkDataObjectType.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    public enum NetworkDataObjectType\n    {\n        AgentSendSystemInformation = 1, // c <-- a\n        AgentSystemInformationReceived = 2, // c --> a\n        AskAgentIfHasProblemDetails = 3, // c --> a\n        AgentHasProblemDetailsInformation = 4, // c <-- a\n        SendJobForAgent = 5, // c --> a\n        JobDoneByAgent = 6, // c <-- a\n        ShutdownAgent = 101, // c --> a\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Communication/SystemInformation.cs",
    "content": "﻿namespace OJS.Workers.Common.Communication\n{\n    using System;\n\n    [Serializable]\n    public class SystemInformation\n    {\n        public bool Is64BitOperatingSystem { get; set; }\n\n        public static SystemInformation Collect()\n        {\n            var information = new SystemInformation { Is64BitOperatingSystem = Environment.Is64BitOperatingSystem };\n            return information;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/CompileResult.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public class CompileResult\n    {\n        public CompileResult(string outputFile)\n            : this(true, null, outputFile)\n        {\n        }\n\n        public CompileResult(bool isCompiledSuccessfully, string compilerComment, string outputFile = null)\n        {\n            this.IsCompiledSuccessfully = isCompiledSuccessfully;\n            this.CompilerComment = compilerComment;\n            this.OutputFile = outputFile;\n        }\n\n        public bool IsCompiledSuccessfully { get; set; }\n\n        public string CompilerComment { get; set; }\n\n        public string OutputFile { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Helpers/JavaCodePreprocessorHelper.cs",
    "content": "﻿namespace OJS.Workers.Common.Helpers\n{\n    using System;\n    using System.IO;\n    using System.Text.RegularExpressions;\n\n    public static class JavaCodePreprocessorHelper\n    {\n        private const string PackageNameRegEx = @\"\\bpackage\\s+[a-zA-Z_][a-zA-Z_.0-9]{0,150}\\s*;\";\n        private const string ClassNameRegEx = @\"public\\s+class\\s+([a-zA-Z_][a-zA-Z_0-9]{0,150})\\s*{\";\n        private const int ClassNameRegExGroup = 1;\n\n        public static string CreateSubmissionFile(string sourceCode, string directory)\n        {\n            // Remove existing packages\n            sourceCode = Regex.Replace(sourceCode, PackageNameRegEx, string.Empty);\n\n            // TODO: Remove the restriction for one public class - a non-public Java class can contain the main method!\n            var classNameMatch = Regex.Match(sourceCode, ClassNameRegEx);\n            if (!classNameMatch.Success)\n            {\n                throw new ArgumentException(\"No valid public class found!\");\n            }\n\n            var className = classNameMatch.Groups[ClassNameRegExGroup].Value;\n            var submissionFilePath = $\"{directory}\\\\{className}\";\n\n            File.WriteAllText(submissionFilePath, sourceCode);\n\n            return submissionFilePath;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/IChecker.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public interface IChecker\n    {\n        CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest);\n\n        void SetParameter(string parameter);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/ICompiler.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public interface ICompiler\n    {\n        /// <summary>\n        /// Compiles given source code to binary code.\n        /// </summary>\n        /// <param name=\"compilerPath\">Path to the compiler</param>\n        /// <param name=\"inputFile\">Source code given as a text file with no extension</param>\n        /// <param name=\"additionalArguments\">Additional compiler arguments</param>\n        /// <returns>Result of compilation</returns>\n        CompileResult Compile(string compilerPath, string inputFile, string additionalArguments);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/IExecutor.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    using System.Collections.Generic;\n\n    public interface IExecutor\n    {\n        ProcessExecutionResult Execute(string fileName, string inputData, int timeLimit, int memoryLimit, IEnumerable<string> executionArguments = null);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/OJS.Workers.Common.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Common</RootNamespace>\n    <AssemblyName>OJS.Workers.Common</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Agents\\AgentTaskData.cs\" />\n    <Compile Include=\"Agents\\AgentResponseData.cs\" />\n    <Compile Include=\"Agents\\TestResult.cs\" />\n    <Compile Include=\"CheckerDetails.cs\" />\n    <Compile Include=\"CheckerResult.cs\" />\n    <Compile Include=\"CheckerResultType.cs\" />\n    <Compile Include=\"Communication\\NetworkCommunicationException.cs\" />\n    <Compile Include=\"Communication\\NetworkDataObject.cs\" />\n    <Compile Include=\"Communication\\NetworkDataObjectType.cs\" />\n    <Compile Include=\"Communication\\SystemInformation.cs\" />\n    <Compile Include=\"Communication\\Job.cs\" />\n    <Compile Include=\"Communication\\JobResult.cs\" />\n    <Compile Include=\"Helpers\\JavaCodePreprocessorHelper.cs\" />\n    <Compile Include=\"ProcessExecutionResult.cs\" />\n    <Compile Include=\"ProcessExecutionResultType.cs\" />\n    <Compile Include=\"IChecker.cs\" />\n    <Compile Include=\"ICompiler.cs\" />\n    <Compile Include=\"IExecutor.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"CompileResult.cs\" />\n    <Compile Include=\"Agents\\TaskInformation.cs\" />\n    <Compile Include=\"Agents\\SourceFile.cs\" />\n    <Compile Include=\"Agents\\Test.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/ProcessExecutionResult.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    using System;\n\n    public class ProcessExecutionResult\n    {\n        public ProcessExecutionResult()\n        {\n            this.ReceivedOutput = string.Empty;\n            this.ErrorOutput = string.Empty;\n            this.ExitCode = 0;\n            this.Type = ProcessExecutionResultType.Success;\n            this.TimeWorked = default(TimeSpan);\n            this.MemoryUsed = 0;\n        }\n\n        public string ReceivedOutput { get; set; }\n\n        public string ErrorOutput { get; set; }\n\n        public int ExitCode { get; set; }\n\n        public ProcessExecutionResultType Type { get; set; }\n\n        public TimeSpan TimeWorked { get; set; }\n\n        public long MemoryUsed { get; set; }\n\n        public TimeSpan PrivilegedProcessorTime { get; set; }\n\n        public TimeSpan UserProcessorTime { get; set; }\n\n        public TimeSpan TotalProcessorTime => this.PrivilegedProcessorTime + this.UserProcessorTime;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/ProcessExecutionResultType.cs",
    "content": "﻿namespace OJS.Workers.Common\n{\n    public enum ProcessExecutionResultType\n    {\n        Success = 0,\n        TimeLimit = 1,\n        MemoryLimit = 2,\n        RunTimeError = 4,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Common\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Common\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"00c9a631-9099-492d-85ea-89c5d8d38dc3\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.1.3149.0\")]\n[assembly: AssemblyFileVersion(\"1.1.3149.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Common/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/CPlusPlusCompiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System.Text;\n\n    public class CPlusPlusCompiler : Compiler\n    {\n        public override string RenameInputFile(string inputFile)\n        {\n            // Add \"cpp\" extension so the compiler will treat the file as C++ code file\n            return inputFile + \".cpp\";\n        }\n\n        public override string BuildCompilerArguments(string inputFile, string outputFile, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            // Input file argument\n            arguments.Append($\"\\\"{inputFile}\\\"\");\n            arguments.Append(' ');\n\n            // Output file argument\n            arguments.Append($\"-o \\\"{outputFile}\\\"\");\n            arguments.Append(' ');\n\n            // Additional compiler arguments\n            arguments.Append(additionalArguments);\n\n            return arguments.ToString().Trim();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/CSharpCompiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System.Text;\n\n    public class CSharpCompiler : Compiler\n    {\n        public override string BuildCompilerArguments(string inputFile, string outputFile, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            // Output file argument\n            arguments.Append($\"/out:\\\"{outputFile}\\\"\");\n            arguments.Append(' ');\n\n            // Input file argument\n            arguments.Append($\"\\\"{inputFile}\\\"\");\n            arguments.Append(' ');\n\n            // Additional compiler arguments\n            arguments.Append(additionalArguments);\n\n            return arguments.ToString().Trim();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/Compiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Text;\n    using System.Threading;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Workers.Common;\n\n    /// <summary>\n    /// Defines the base of the work with compilers algorithm and allow the subclasses to implement some of the algorithm parts.\n    /// </summary>\n    /// <remarks>Template method design pattern is used.</remarks>\n    public abstract class Compiler : ICompiler\n    {\n        public static ICompiler CreateCompiler(CompilerType compilerType)\n        {\n            switch (compilerType)\n            {\n                case CompilerType.None:\n                    return null;\n                case CompilerType.CSharp:\n                    return new CSharpCompiler();\n                case CompilerType.CPlusPlusGcc:\n                    return new CPlusPlusCompiler();\n                case CompilerType.MsBuild:\n                    return new MsBuildCompiler();\n                case CompilerType.Java:\n                    return new JavaCompiler();\n                case CompilerType.JavaZip:\n                    return new JavaZipCompiler();\n                default:\n                    throw new ArgumentException(\"Unsupported compiler.\");\n            }\n        }\n\n        public CompileResult Compile(string compilerPath, string inputFile, string additionalArguments)\n        {\n            if (compilerPath == null)\n            {\n                throw new ArgumentNullException(nameof(compilerPath));\n            }\n\n            if (inputFile == null)\n            {\n                throw new ArgumentNullException(nameof(inputFile));\n            }\n\n            if (!File.Exists(compilerPath))\n            {\n                return new CompileResult(false, $\"Compiler not found! Searched in: {compilerPath}\");\n            }\n\n            if (!File.Exists(inputFile))\n            {\n                return new CompileResult(false, $\"Input file not found! Searched in: {inputFile}\");\n            }\n\n            // Move source file if needed\n            string newInputFilePath = this.RenameInputFile(inputFile);\n            if (newInputFilePath != inputFile)\n            {\n                File.Move(inputFile, newInputFilePath);\n                inputFile = newInputFilePath;\n            }\n\n            // Build compiler arguments\n            var outputFile = this.GetOutputFileName(inputFile);\n            var arguments = this.BuildCompilerArguments(inputFile, outputFile, additionalArguments);\n\n            // Find compiler directory\n            var directoryInfo = new FileInfo(compilerPath).Directory;\n            if (directoryInfo == null)\n            {\n                return new CompileResult(false, $\"Compiler directory is null. Compiler path value: {compilerPath}\");\n            }\n\n            // Prepare process start information\n            var processStartInfo =\n                new ProcessStartInfo(compilerPath)\n                {\n                    RedirectStandardError = true,\n                    RedirectStandardOutput = true,\n                    UseShellExecute = false,\n                    WindowStyle = ProcessWindowStyle.Hidden,\n                    WorkingDirectory = directoryInfo.ToString(),\n                    Arguments = arguments\n                };\n            this.UpdateCompilerProcessStartInfo(processStartInfo);\n\n            // Execute compiler\n            var compilerOutput = ExecuteCompiler(processStartInfo);\n\n            outputFile = this.ChangeOutputFileAfterCompilation(outputFile);\n\n            // Delete input file\n            if (File.Exists(newInputFilePath))\n            {\n                File.Delete(newInputFilePath);\n            }\n\n            // Check results and return CompilerResult instance\n            if (!File.Exists(outputFile) && !compilerOutput.IsSuccessful)\n            {\n                // Compiled file is missing\n                return new CompileResult(false, $\"Compiled file is missing. Compiler output: {compilerOutput.Output}\");\n            }\n\n            if (!string.IsNullOrWhiteSpace(compilerOutput.Output))\n            {\n                // Compile file is ready but the compiler has something on standard error (possibly compile warnings)\n                return new CompileResult(true, compilerOutput.Output, outputFile);\n            }\n\n            // Compilation is ready without warnings\n            return new CompileResult(outputFile);\n        }\n\n        public virtual string RenameInputFile(string inputFile)\n        {\n            return inputFile;\n        }\n\n        public virtual string GetOutputFileName(string inputFileName)\n        {\n            return inputFileName + \".exe\";\n        }\n\n        public virtual string ChangeOutputFileAfterCompilation(string outputFile)\n        {\n            return outputFile;\n        }\n\n        public abstract string BuildCompilerArguments(string inputFile, string outputFile, string additionalArguments);\n\n        public virtual void UpdateCompilerProcessStartInfo(ProcessStartInfo processStartInfo)\n        {\n        }\n\n        private static CompilerOutput ExecuteCompiler(ProcessStartInfo compilerProcessStartInfo)\n        {\n            var outputBuilder = new StringBuilder();\n            var errorOutputBuilder = new StringBuilder();\n            int exitCode;\n\n            using (var outputWaitHandle = new AutoResetEvent(false))\n            {\n                using (var errorWaitHandle = new AutoResetEvent(false))\n                {\n                    using (var process = new Process())\n                    {\n                        process.StartInfo = compilerProcessStartInfo;\n\n                        process.OutputDataReceived += (sender, e) =>\n                        {\n                            if (e.Data == null)\n                            {\n                                outputWaitHandle.Set();\n                            }\n                            else\n                            {\n                                outputBuilder.AppendLine(e.Data);\n                            }\n                        };\n\n                        process.ErrorDataReceived += (sender, e) =>\n                        {\n                            if (e.Data == null)\n                            {\n                                errorWaitHandle.Set();\n                            }\n                            else\n                            {\n                                errorOutputBuilder.AppendLine(e.Data);\n                            }\n                        };\n\n                        var started = process.Start();\n                        if (!started)\n                        {\n                            return new CompilerOutput(1, \"Could not start compiler.\");\n                        }\n\n                        process.BeginOutputReadLine();\n                        process.BeginErrorReadLine();\n\n                        var exited = process.WaitForExit(GlobalConstants.DefaultProcessExitTimeOutMilliseconds);\n                        if (!exited)\n                        {\n                            process.CancelOutputRead();\n                            process.CancelErrorRead();\n\n                            // Double check if the process has exited before killing it\n                            if (!process.HasExited)\n                            {\n                                process.Kill();\n                            }\n\n                            return new CompilerOutput(1, \"Compiler process timed out.\");\n                        }\n\n                        outputWaitHandle.WaitOne(100);\n                        errorWaitHandle.WaitOne(100);\n\n                        exitCode = process.ExitCode;\n                    }\n                }\n            }\n\n            var output = outputBuilder.ToString().Trim();\n            var errorOutput = errorOutputBuilder.ToString().Trim();\n\n            var compilerOutput = $\"{output}{Environment.NewLine}{errorOutput}\".Trim();\n            return new CompilerOutput(exitCode, compilerOutput);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/CompilerOutput.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    public class CompilerOutput\n    {\n        public CompilerOutput(int exitCode, string output)\n        {\n            this.ExitCode = exitCode;\n            this.Output = output;\n        }\n\n        public int ExitCode { get; set; }\n\n        public string Output { get; set; }\n\n        public bool IsSuccessful => this.ExitCode == 0;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/JavaCompiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System;\n    using System.Text;\n\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n\n    public class JavaCompiler : Compiler\n    {\n        private const string JavaCompiledFileExtension = \".class\";\n\n        private static readonly string JavaSourceFileExtension = $\".{CompilerType.Java.GetFileExtension()}\";\n\n        public override string BuildCompilerArguments(string inputFile, string outputFile, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            // Additional compiler arguments\n            arguments.Append(additionalArguments);\n            arguments.Append(' ');\n\n            // Input file argument\n            arguments.Append($\"\\\"{inputFile}\\\"\");\n\n            return arguments.ToString().Trim();\n        }\n\n        public override string RenameInputFile(string inputFile)\n        {\n            if (inputFile.EndsWith(JavaSourceFileExtension, StringComparison.InvariantCultureIgnoreCase))\n            {\n                return inputFile;\n            }\n\n            return $\"{inputFile}{JavaSourceFileExtension}\";\n        }\n\n        public override string GetOutputFileName(string inputFileName)\n        {\n            var indexOfJavaSourceFileExtension =\n                inputFileName.LastIndexOf(JavaSourceFileExtension, StringComparison.InvariantCultureIgnoreCase);\n\n            if (indexOfJavaSourceFileExtension >= 0)\n            {\n                inputFileName = inputFileName.Substring(0, indexOfJavaSourceFileExtension);\n            }\n\n            return $\"{inputFileName}{JavaCompiledFileExtension}\";\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/JavaZipCompiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System;\n    using System.IO;\n    using System.Linq;\n    using System.Text;\n\n    using Ionic.Zip;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n\n    public class JavaZipCompiler : Compiler\n    {\n        private const string JavaCompiledFilesSearchPattern = \"*.class\";\n        private const string JavaSourceFilesSearchPattern = \"*.java\";\n        private const string MainClassFilePathSuffix = \"\\\\Main.class\";\n\n        private readonly string workingDirectory;\n\n        public JavaZipCompiler()\n        {\n            this.workingDirectory = DirectoryHelpers.CreateTempDirectory();\n        }\n\n        ~JavaZipCompiler()\n        {\n            DirectoryHelpers.SafeDeleteDirectory(this.workingDirectory, true);\n        }\n\n        public override string RenameInputFile(string inputFile)\n        {\n            if (inputFile.EndsWith(GlobalConstants.ZipFileExtension, StringComparison.InvariantCultureIgnoreCase))\n            {\n                return inputFile;\n            }\n\n            return $\"{inputFile}{GlobalConstants.ZipFileExtension}\";\n        }\n\n        public override string GetOutputFileName(string inputFileName) => new FileInfo(inputFileName).DirectoryName;\n\n        public override string BuildCompilerArguments(string inputFile, string outputDirectory, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            // Output path argument\n            arguments.Append($\"-d \\\"{outputDirectory}\\\" \");\n\n            // Additional compiler arguments\n            arguments.Append(additionalArguments);\n            arguments.Append(' ');\n\n            UnzipFile(inputFile, this.workingDirectory);\n\n            // Input files arguments\n            var filesToCompile =\n                Directory.GetFiles(this.workingDirectory, JavaSourceFilesSearchPattern, SearchOption.AllDirectories);\n            for (var i = 0; i < filesToCompile.Length; i++)\n            {\n                arguments.Append($\"\\\"{filesToCompile[i]}\\\"\");\n                arguments.Append(' ');\n            }\n\n            return arguments.ToString();\n        }\n\n        public override string ChangeOutputFileAfterCompilation(string outputDirectory)\n        {\n            var compiledFiles =\n                Directory.EnumerateFiles(outputDirectory, JavaCompiledFilesSearchPattern, SearchOption.AllDirectories);\n\n            // TODO: Find the main class after analyzing which source file contains the main method\n            var mainClassFile = compiledFiles\n                .FirstOrDefault(file => file.EndsWith(MainClassFilePathSuffix, StringComparison.InvariantCultureIgnoreCase));\n\n            return mainClassFile;\n        }\n\n        private static void UnzipFile(string fileToUnzip, string outputDirectory)\n        {\n            using (var zipFile = ZipFile.Read(fileToUnzip))\n            {\n                foreach (var entry in zipFile)\n                {\n                    entry.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/MsBuildCompiler.cs",
    "content": "﻿namespace OJS.Workers.Compilers\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Linq;\n    using System.Text;\n\n    using Ionic.Zip;\n\n    using OJS.Common;\n    using OJS.Common.Extensions;\n\n    public class MsBuildCompiler : Compiler\n    {\n        private const string SolutionFileExtension = \".sln\";\n        private const string CsharpProjectFileExtension = \".csproj\";\n        private const string VisualBasicProjectFileExtension = \".vbproj\";\n        private const string AllFilesSearchPattern = \"*.*\";\n        private const string SolutionFilesSearchPattern = \"*.sln\";\n        private const string ExecutableFilesSearchPattern = \"*\" + GlobalConstants.ExecutableFileExtension;\n        private const string NuGetExecutablePath = @\"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\nuget.exe\"; // TODO: move to settings\n        private const int NuGetRestoreProcessExitTimeOutMilliseconds = 2 * GlobalConstants.DefaultProcessExitTimeOutMilliseconds;\n\n        private static readonly Random Rand = new Random();\n\n        private readonly string inputPath;\n        private readonly string outputPath;\n\n        public MsBuildCompiler()\n        {\n            this.inputPath = DirectoryHelpers.CreateTempDirectory();\n            this.outputPath = DirectoryHelpers.CreateTempDirectory();\n        }\n\n        // TODO: delete the temp files manually somehow\n        ~MsBuildCompiler()\n        {\n            if (Directory.Exists(this.inputPath))\n            {\n                try\n                {\n                    Directory.Delete(this.inputPath, true);\n                }\n                catch\n                {\n                }\n            }\n\n            if (Directory.Exists(this.outputPath))\n            {\n                try\n                {\n                    Directory.Delete(this.outputPath, true);\n                }\n                catch\n                {\n                }\n            }\n        }\n\n        public override string RenameInputFile(string inputFile) => $\"{inputFile}{GlobalConstants.ZipFileExtension}\";\n\n        public override string ChangeOutputFileAfterCompilation(string outputFile)\n        {\n            var newOutputFile = Directory\n                .EnumerateFiles(this.outputPath, ExecutableFilesSearchPattern, SearchOption.AllDirectories)\n                .FirstOrDefault();\n            if (newOutputFile == null)\n            {\n                var tempDir = DirectoryHelpers.CreateTempDirectory();\n                Directory.Delete(tempDir);\n                Directory.Move(this.outputPath, tempDir);\n                return tempDir;\n            }\n\n            var tempFile = Path.GetTempFileName() + Rand.Next();\n            var tempExeFile = $\"{tempFile}{GlobalConstants.ExecutableFileExtension}\";\n            File.Move(newOutputFile, tempExeFile);\n            File.Delete(tempFile);\n            return tempExeFile;\n        }\n\n        public override string BuildCompilerArguments(string inputFile, string outputFile, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            UnzipFile(inputFile, this.inputPath);\n            var solutionOrProjectFile = this.FindSolutionOrProjectFile();\n\n            if (string.IsNullOrWhiteSpace(solutionOrProjectFile))\n            {\n                throw new ArgumentException(\n                    \"Input file does not contain a project or solution file.\",\n                    nameof(inputFile));\n            }\n\n            if (solutionOrProjectFile.EndsWith(SolutionFileExtension))\n            {\n                RestoreNugetPackages(solutionOrProjectFile);\n            }\n\n            // Input file argument\n            arguments.Append($\"\\\"{solutionOrProjectFile}\\\" \");\n\n            // Output path argument\n            arguments.Append($\"/p:OutputPath=\\\"{this.outputPath}\\\" \");\n\n            // Disable pre and post build events\n            arguments.Append(\"/p:PreBuildEvent=\\\"\\\" /p:PostBuildEvent=\\\"\\\" \");\n\n            // Additional compiler arguments\n            arguments.Append(additionalArguments);\n\n            return arguments.ToString().Trim();\n        }\n\n        private static void UnzipFile(string fileToUnzip, string outputDirectory)\n        {\n            using (var zipFile = ZipFile.Read(fileToUnzip))\n            {\n                foreach (var entry in zipFile)\n                {\n                    entry.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently);\n                }\n            }\n        }\n\n        private static void RestoreNugetPackages(string solution)\n        {\n            var solutionFileInfo = new FileInfo(solution);\n\n            var processStartInfo = new ProcessStartInfo\n            {\n                WindowStyle = ProcessWindowStyle.Hidden,\n                RedirectStandardError = true,\n                RedirectStandardOutput = true,\n                UseShellExecute = false,\n                WorkingDirectory = solutionFileInfo.DirectoryName,\n                FileName = NuGetExecutablePath,\n                Arguments = $\"restore \\\"{solutionFileInfo.Name}\\\"\"\n            };\n\n            using (var process = Process.Start(processStartInfo))\n            {\n                if (process != null)\n                {\n                    var exited = process.WaitForExit(NuGetRestoreProcessExitTimeOutMilliseconds);\n                    if (!exited)\n                    {\n                        process.Kill();\n                    }\n                }\n            }\n        }\n\n        private string FindSolutionOrProjectFile()\n        {\n            var solutionOrProjectFile = Directory\n                .EnumerateFiles(this.inputPath, SolutionFilesSearchPattern, SearchOption.AllDirectories)\n                .FirstOrDefault();\n\n            if (string.IsNullOrWhiteSpace(solutionOrProjectFile))\n            {\n                solutionOrProjectFile = Directory\n                    .EnumerateFiles(this.inputPath, AllFilesSearchPattern, SearchOption.AllDirectories)\n                    .FirstOrDefault(x =>\n                        x.EndsWith(CsharpProjectFileExtension, StringComparison.OrdinalIgnoreCase) ||\n                        x.EndsWith(VisualBasicProjectFileExtension, StringComparison.OrdinalIgnoreCase));\n            }\n\n            return solutionOrProjectFile;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/OJS.Workers.Compilers.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{8570183B-9D7A-408D-9EA6-F86F59B05A10}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Compilers</RootNamespace>\n    <AssemblyName>OJS.Workers.Compilers</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Ionic.Zip, Version=1.9.8.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\DotNetZip.1.9.8\\lib\\net20\\Ionic.Zip.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Compiler.cs\" />\n    <Compile Include=\"CompilerOutput.cs\" />\n    <Compile Include=\"CPlusPlusCompiler.cs\" />\n    <Compile Include=\"CSharpCompiler.cs\" />\n    <Compile Include=\"JavaCompiler.cs\" />\n    <Compile Include=\"JavaZipCompiler.cs\" />\n    <Compile Include=\"MsBuildCompiler.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Compilers\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Compilers\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"c53fe90a-4591-46d2-bc78-c55f5cc1b57b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Compilers/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"DotNetZip\" version=\"1.11.0\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <configSections>\n    <section name=\"log4net\" type=\"log4net.Config.Log4NetConfigurationSectionHandler, log4net\" />\n  </configSections>\n  <appSettings>\n    <add key=\"Port\" value=\"8888\" />\n  </appSettings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <log4net>\n    <appender name=\"LogFileAppender\" type=\"log4net.Appender.FileAppender\">\n      <param name=\"File\" value=\"OJS.Workers.Controller_Log.txt\" />\n      <param name=\"AppendToFile\" value=\"true\" />\n      <layout type=\"log4net.Layout.PatternLayout\">\n        <param name=\"Header\" value=\"\" />\n        <param name=\"Footer\" value=\"\" />\n        <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %c %m%n\" />\n      </layout>\n    </appender>\n    <root>\n      <level value=\"INFO\" />\n      <appender-ref ref=\"LogFileAppender\" />\n    </root>\n  </log4net>\n</configuration>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/Batch Files/InstallService.bat",
    "content": "NET STOP \"OJS Controller Service\"\nsc delete \"OJS Controller Service\"\ntimeout 10\nCD %~dp0\nC:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil \"..\\OJS.Workers.Controller.exe\"\nNET START \"OJS Controller Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/Batch Files/StopService.bat",
    "content": "NET STOP \"OJS Controller Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/ClientConnectedEventArgs.cs",
    "content": "﻿namespace OJS.Workers.Controller\n{\n    using System;\n    using System.Net.Sockets;\n\n    public class ClientConnectedEventArgs : EventArgs\n    {\n        public ClientConnectedEventArgs(TcpClient client)\n        {\n            this.Client = client;\n        }\n\n        public TcpClient Client { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/ControllerCommunicator.cs",
    "content": "﻿namespace OJS.Workers.Controller\n{\n    using System.IO;\n\n    using log4net;\n\n    public class ControllerCommunicator\n    {\n        private readonly ILog logger;\n        private readonly Stream clientStream;\n\n        public ControllerCommunicator(Stream clientStream, ILog logger)\n        {\n            this.logger = logger;\n            this.logger.Info(\"ControllerCommunicator initializing...\");\n\n            this.clientStream = clientStream;\n\n            this.logger.Info(\"ControllerCommunicator initialized.\");\n        }\n\n        public void Start()\n        {\n            this.logger.Info(\"Start()\");\n        }\n\n        public void Stop()\n        {\n            this.logger.Info(\"Stop()\");\n        }\n    }\n}\n\n/*\nclass Program\n{\n    private static TcpListener tcplistener;\n\n    static void Main()\n    {\n        tcplistener = new TcpListener(IPAddress.Any, 8888);\n        tcplistener.Start();\n        Console.WriteLine(\"Server started!\");\n\n        while (true)\n        {\n            // blocks until a client has connected to the server\n            var client = tcplistener.AcceptTcpClient();\n\n            // create a thread to handle communication with connected client\n            var clientThread = new Thread(HandleClientComm);\n            clientThread.Start(client);\n        }\n    }\n\n    private static void HandleClientComm(object client)\n    {\n        var tcpClient = (TcpClient)client;\n        Console.WriteLine(\"Client {0} connected!\", tcpClient.Client.RemoteEndPoint);\n        var clientStream = tcpClient.GetStream();\n\n        while (true)\n        {\n            try\n            {\n                // blocks until a client sends a message\n                // bytesRead = clientStream.Read(message, 0, 4096);\n                var formatter = new BinaryFormatter();\n                var obj = formatter.Deserialize(clientStream);\n                Console.WriteLine(((Data)obj).Name);\n            }\n            catch\n            {\n                // a socket error has occurred\n                break;\n            }\n\n            // message has successfully been received\n            // var encoder = new ASCIIEncoding();\n            // var bufferingMessage = encoder.GetString(message, 0, bytesRead);\n            // Console.WriteLine(\"Client {0}: {1}\", tcpClient.Client.RemoteEndPoint, bufferingMessage);\n        }\n        Console.WriteLine(\"Client {0} disconnected!\", tcpClient.Client.RemoteEndPoint);\n    }\n}\n */"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/ControllerServer.cs",
    "content": "﻿namespace OJS.Workers.Controller\n{\n    using System.Net;\n    using System.Net.Sockets;\n    using System.Threading;\n\n    using log4net;\n\n    public delegate void ClientConnectedEventHandler(object sender, ClientConnectedEventArgs e);\n\n    public class ControllerServer\n    {\n        private readonly ILog logger;\n        private readonly TcpListener tcpListener;\n        private readonly Thread tcpListenerThread;\n\n        public ControllerServer(int portNumber, ILog logger)\n        {\n            this.logger = logger;\n            this.logger.Info(\"ControllerServer initializing...\");\n\n            this.tcpListener = new TcpListener(IPAddress.Any, portNumber);\n            this.tcpListenerThread = new Thread(this.WaitForConnections);\n\n            this.logger.Info(\"ControllerServer initialized.\");\n        }\n\n        public event ClientConnectedEventHandler OnClientConnected;\n\n        internal void Start()\n        {\n            this.logger.InfoFormat(\"ControllerServer starting on {0}...\", this.tcpListener.LocalEndpoint);\n\n            this.tcpListenerThread.Start();\n\n            this.logger.Info(\"ControllerServer started.\");\n        }\n\n        internal void Stop()\n        {\n            this.logger.Info(\"ControllerServer stopping...\");\n\n            this.tcpListenerThread.Abort();\n            this.tcpListener.Stop();\n\n            this.logger.Info(\"ControllerServer stopped.\");\n        }\n\n        private void WaitForConnections()\n        {\n            while (true)\n            {\n                // blocks until a client has connected to the server\n                var client = this.tcpListener.AcceptTcpClient();\n                this.logger.InfoFormat(\"Client {0} connected!\", client.Client.RemoteEndPoint);\n                this.OnClientConnected(this, new ClientConnectedEventArgs(client));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/ControllerService.cs",
    "content": "﻿namespace OJS.Workers.Controller\n{\n    using System.Configuration;\n    using System.ServiceProcess;\n    using System.Threading;\n\n    using log4net;\n\n    public class ControllerService : ServiceBase\n    {\n        private const int DefaultPort = 8888;\n        private static ILog logger;\n        private readonly ControllerServer server;\n\n        public ControllerService()\n        {\n            logger = LogManager.GetLogger(\"ControllerService\");\n            logger.Info(\"ControllerService initializing...\");\n\n            // Read port value\n            int port;\n            if (ConfigurationManager.AppSettings[\"ControllerPort\"] != null)\n            {\n                if (!int.TryParse(ConfigurationManager.AppSettings[\"ControllerPort\"], out port))\n                {\n                    port = DefaultPort;\n                }\n            }\n            else\n            {\n                port = DefaultPort;\n            }\n\n            // Create server\n            this.server = new ControllerServer(port, logger);\n            this.server.OnClientConnected += this.ServerOnClientConnected;\n\n            logger.Info(\"ControllerService initialized.\");\n        }\n\n        protected override void OnStart(string[] args)\n        {\n            logger.Info(\"ControllerService starting...\");\n\n            this.server.Start();\n\n            logger.Info(\"ControllerService started.\");\n        }\n\n        protected override void OnStop()\n        {\n            logger.Info(\"ControllerService stopping...\");\n\n            this.server.Stop();\n            Thread.Sleep(10 * 1000); // Wait 10 seconds for the server to close connections before exit\n\n            logger.Info(\"ControllerService stopped.\");\n        }\n\n        private void ServerOnClientConnected(object sender, ClientConnectedEventArgs e)\n        {\n            var communicator = new ControllerCommunicator(e.Client.GetStream(), logger);\n            //// communicator.\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/ControllerServiceInstaller.cs",
    "content": "﻿namespace OJS.Workers.Controller\n{\n    using System.ComponentModel;\n    using System.Configuration.Install;\n    using System.ServiceProcess;\n\n    [RunInstaller(true)]\n    public class ControllerServiceInstaller : Installer\n    {\n        public ControllerServiceInstaller()\n        {\n            var serviceProcessInstaller = new ServiceProcessInstaller\n                                              {\n                                                  Account = ServiceAccount.LocalSystem,\n                                                  Password = null,\n                                                  Username = null\n                                              };\n\n            var serviceInstaller = new ServiceInstaller\n                                       {\n                                           StartType = ServiceStartMode.Automatic,\n                                           DisplayName = \"OJS Controller Service\",\n                                           ServiceName = \"OJS Controller Service\",\n                                           Description =\n                                               \"Remotely controls all agents that are connected to the controller. Manages the tasks between agents and act as a load-balancer between them.\",\n                                       };\n\n            this.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/OJS.Workers.Controller.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1D0C9F0C-5A84-453B-BB49-A8CD86FFAE7A}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Controller</RootNamespace>\n    <AssemblyName>OJS.Workers.Controller</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\log4net.2.0.5\\lib\\net45-full\\log4net.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.Install\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ClientConnectedEventArgs.cs\" />\n    <Compile Include=\"ControllerCommunicator.cs\" />\n    <Compile Include=\"ControllerServer.cs\" />\n    <Compile Include=\"ControllerService.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"ControllerServiceInstaller.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"Batch Files\\InstallService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Batch Files\\StopService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/Program.cs",
    "content": "﻿[assembly: log4net.Config.XmlConfigurator(Watch = true)]\n\nnamespace OJS.Workers.Controller\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.ServiceProcess;\n\n    internal static class Program\n    {\n        /// <summary>\n        /// The main entry point for the service.\n        /// </summary>\n        private static void Main()\n        {\n            try\n            {\n                // Explicitly set App.config file location to prevent confusion\n                // ReSharper disable once AssignNullToNotNullAttribute\n                Environment.CurrentDirectory = Path.GetDirectoryName(typeof(Program).Assembly.Location);\n                AppDomain.CurrentDomain.SetData(\"APP_CONFIG_FILE\", \"OJS.Workers.Controller.exe.config\");\n\n                // Run the service\n                var servicesToRun = new ServiceBase[] { new ControllerService() };\n                ServiceBase.Run(servicesToRun);\n            }\n            catch (Exception exception)\n            {\n                const string Source = \"OJS.Workers.Controller\";\n                if (!EventLog.SourceExists(Source))\n                {\n                    EventLog.CreateEventSource(Source, \"Application\");\n                }\n\n                EventLog.WriteEntry(Source, exception.ToString(), EventLogEntryType.Error);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Controller\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Controller\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"09a2e1c0-c897-4df2-9f7d-0512771f8261\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Controller/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"log4net\" version=\"2.0.10\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/CSharpTestRunnerExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.CodeDom.Compiler;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n\n    using Microsoft.CSharp;\n\n    using OJS.Common.Models;\n    using OJS.Workers.Common;\n    using OJS.Workers.Executors;\n\n    public class CSharpTestRunnerExecutionStrategy : ExecutionStrategy\n    {\n        private const string TestRunnerTemplate = @\"namespace LocalDefinedCSharpTestRunner\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Collections.ObjectModel;\n    using System.IO;\n    using System.Linq;\n    using System.Reflection;\n\n    public class LocalCSharpTestRunner\n    {\n        private const string JsonTestsResult = @\"\"{ \"\"\"\"stats\"\"\"\" : { \"\"\"\"passes\"\"\"\": #totalPasses# }, \"\"\"\"passing\"\"\"\": [ #passingTests# ], \"\"\"\"failures\"\"\"\" : [ { \"\"\"\"err\"\"\"\": { \"\"\"\"message\"\"\"\": \"\"\"\"#message#\"\"\"\" } } ] }\"\";\n\n        private class FuncTestResult\n        {\n            public int Index { get; set; }\n\n            public bool Passed { get; set; }\n\n            public string Error { get; set; }\n        }\n\n        private static readonly IReadOnlyCollection<Func<List<Type>, bool>> tests = new ReadOnlyCollection<Func<List<Type>, bool>>(new List<Func<List<Type>, bool>>\n        { \n#allTests#\n        });\n\n        public static void Main()\n        {\n            var currentDirectory = Environment.CurrentDirectory;\n\n            var allTypes = new List<Type>();\n\n            foreach (var file in Directory.GetFiles(currentDirectory).Where(f => f.EndsWith(\"\".dll\"\") || f.EndsWith(\"\".exe\"\")))\n            {\n                var assembly = Assembly.LoadFrom(file);\n                foreach (var type in assembly.GetTypes())\n                {\n                    allTypes.Add(type);\n                }\n\n                var referenced = assembly.GetReferencedAssemblies().Where(r => r.Name != \"\"mscorlib\"\" && r.Name != \"\"System.Core\"\");\n                foreach (var reference in referenced)\n                {\n                    var refAssembly = Assembly.Load(reference);\n                    foreach (var type in refAssembly.GetTypes())\n                    {\n                        allTypes.Add(type);\n                    }\n                }\n            }\n\n            var results = new List<FuncTestResult>();\n            var index = 0;\n            foreach (var test in tests)\n            {\n                var result = false;\n                string error = null;\n                try\n                {\n                    result = test(allTypes);\n                    if (!result)\n                    {\n                        error = \"\"Test failed.\"\";\n                    }\n                }\n                catch (Exception ex)\n                {\n                    error = ex.Message;\n                }\n\n                results.Add(new FuncTestResult { Passed = result, Error = error, Index = index });\n                index++;\n            }\n\n            var jsonResult = JsonTestsResult\n                .Replace(\"\"#totalPasses#\"\", results.Count(t => t.Passed).ToString())\n                .Replace(\"\"#passingTests#\"\", string.Join(\"\",\"\", results.Where(t => t.Passed).Select(t => t.Index).ToList()))\n                .Replace(\"\"#message#\"\", string.Join(\"\", \"\", results.Where(t => t.Error != null).Select(t => t.Error.Replace(\"\"\\\"\"\"\", string.Empty)).ToList()));\n\n            Console.WriteLine(jsonResult);\n        }\n    }\n}\n\";\n\n        private const string TestTemplate = @\"(types) => { #testInput# }\";\n\n        private readonly Func<CompilerType, string> getCompilerPathFunc;\n\n        public CSharpTestRunnerExecutionStrategy(Func<CompilerType, string> getCompilerPathFunc)\n        {\n            this.getCompilerPathFunc = getCompilerPathFunc;\n        }\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var solution = executionContext.FileContent;\n            var result = new ExecutionResult();\n            var compileResult = this.ExecuteCompiling(executionContext, this.getCompilerPathFunc, result);\n            if (!compileResult.IsCompiledSuccessfully)\n            {\n                return result;\n            }\n\n            var outputAssemblyPath = this.PreprocessAndCompileTestRunner(executionContext, compileResult.OutputFile);\n\n            IExecutor executor = new RestrictedProcessExecutor();\n            var processExecutionResult = executor.Execute(outputAssemblyPath, string.Empty, executionContext.TimeLimit, executionContext.MemoryLimit);\n\n            var workingDirectory = compileResult.OutputFile;\n            if (Directory.Exists(workingDirectory))\n            {\n                Directory.Delete(workingDirectory, true);\n            }\n\n            this.ProcessTests(processExecutionResult, executionContext, result);\n            return result;\n        }\n\n        private string PreprocessAndCompileTestRunner(ExecutionContext executionContext, string outputDirectory)\n        {\n            var testStrings = new List<string>();\n            foreach (var test in executionContext.Tests)\n            {\n                testStrings.Add(TestTemplate.Replace(\"#testInput#\", test.Input));\n            }\n\n            var allTests = string.Join(\",\", testStrings);\n\n            var testRunnerCode = TestRunnerTemplate.Replace(\"#allTests#\", allTests);\n            var compiler = new CSharpCodeProvider();\n            var compilerParameters = new CompilerParameters();\n            compilerParameters.ReferencedAssemblies.Add(\"mscorlib.dll\");\n            compilerParameters.ReferencedAssemblies.Add(\"System.dll\");\n            compilerParameters.ReferencedAssemblies.Add(\"System.Core.dll\");\n            compilerParameters.ReferencedAssemblies.AddRange(Directory.GetFiles(outputDirectory).Where(f => f.EndsWith(\".dll\") || f.EndsWith(\".exe\")).ToArray());\n            compilerParameters.GenerateInMemory = false;\n            compilerParameters.GenerateExecutable = true;\n            var compilerResult = compiler.CompileAssemblyFromSource(compilerParameters, testRunnerCode);\n\n            var outputAssemblyPath = outputDirectory + \"\\\\LocalTestRunner.exe\";\n            File.Move(compilerResult.PathToAssembly, outputAssemblyPath);\n\n            return outputAssemblyPath;\n        }\n\n        private void ProcessTests(ProcessExecutionResult processExecutionResult, ExecutionContext executionContext, ExecutionResult result)\n        {\n            var jsonResult = JsonExecutionResult.Parse(processExecutionResult.ReceivedOutput, true, true);\n\n            var index = 0;\n            result.TestResults = new List<TestResult>();\n            foreach (var test in executionContext.Tests)\n            {\n                var testResult = new TestResult\n                {\n                    Id = test.Id,\n                    TimeUsed = (int)processExecutionResult.TimeWorked.TotalMilliseconds,\n                    MemoryUsed = (int)processExecutionResult.MemoryUsed,\n                };\n\n                if (jsonResult.PassingIndexes.Contains(index))\n                {\n                    testResult.ResultType = TestRunResultType.CorrectAnswer;\n                }\n                else\n                {\n                    testResult.ResultType = TestRunResultType.WrongAnswer;\n                    testResult.CheckerDetails = new CheckerDetails { Comment = \"Test failed.\" };\n                }\n\n                result.TestResults.Add(testResult);\n                index++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/CompileExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n\n    using OJS.Common.Models;\n    using OJS.Workers.Common;\n    using OJS.Workers.Executors;\n\n    public class CompileExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private readonly Func<CompilerType, string> getCompilerPathFunc;\n\n        public CompileExecuteAndCheckExecutionStrategy(Func<CompilerType, string> getCompilerPathFunc)\n        {\n            this.getCompilerPathFunc = getCompilerPathFunc;\n        }\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            IExecutor executor = new RestrictedProcessExecutor();\n            var result = this.CompileExecuteAndCheck(executionContext, this.getCompilerPathFunc, executor);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/DoNothingExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System.Collections.Generic;\n\n    public class DoNothingExecutionStrategy : IExecutionStrategy\n    {\n        public ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            return new ExecutionResult\n                       {\n                           CompilerComment = null,\n                           IsCompiledSuccessfully = true,\n                           TestResults = new List<TestResult>(),\n                       };\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/ExecutionContext.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System.Collections.Generic;\n\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n\n    public class ExecutionContext\n    {\n        public int SubmissionId { get; set; }\n\n        public CompilerType CompilerType { get; set; }\n\n        public string AdditionalCompilerArguments { get; set; }\n\n        public string Code => this.FileContent.Decompress();\n\n        public byte[] FileContent { get; set; }\n\n        public string AllowedFileExtensions { get; set; }\n\n        public IEnumerable<TestContext> Tests { get; set; }\n\n        public int TimeLimit { get; set; }\n\n        public int MemoryLimit { get; set; }\n\n        public string CheckerAssemblyName { get; set; }\n\n        public string CheckerTypeName { get; set; }\n\n        public string CheckerParameter { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/ExecutionResult.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System.Collections.Generic;\n\n    public class ExecutionResult\n    {\n        public ExecutionResult()\n        {\n            this.TestResults = new List<TestResult>();\n        }\n\n        public bool IsCompiledSuccessfully { get; set; }\n\n        public string CompilerComment { get; set; }\n\n        public List<TestResult> TestResults { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/ExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.IO;\n\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Common;\n    using OJS.Workers.Compilers;\n\n    public abstract class ExecutionStrategy : IExecutionStrategy\n    {\n        public abstract ExecutionResult Execute(ExecutionContext executionContext);\n\n        protected ExecutionResult CompileExecuteAndCheck(ExecutionContext executionContext, Func<CompilerType, string> getCompilerPathFunc, IExecutor executor)\n        {\n            var result = new ExecutionResult();\n\n            // Compile the file\n            var compilerResult = this.ExecuteCompiling(executionContext, getCompilerPathFunc, result);\n            if (!compilerResult.IsCompiledSuccessfully)\n            {\n                return result;\n            }\n\n            var outputFile = compilerResult.OutputFile;\n\n            // Execute and check each test\n            IChecker checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(outputFile, test.Input, executionContext.TimeLimit, executionContext.MemoryLimit);\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                result.TestResults.Add(testResult);\n            }\n\n            // Clean our mess\n            File.Delete(outputFile);\n\n            return result;\n        }\n\n        protected TestResult ExecuteAndCheckTest(TestContext test, ProcessExecutionResult processExecutionResult, IChecker checker, string receivedOutput)\n        {\n            var testResult = new TestResult\n            {\n                Id = test.Id,\n                TimeUsed = (int)processExecutionResult.TimeWorked.TotalMilliseconds,\n                MemoryUsed = (int)processExecutionResult.MemoryUsed,\n            };\n\n            if (processExecutionResult.Type == ProcessExecutionResultType.RunTimeError)\n            {\n                testResult.ResultType = TestRunResultType.RunTimeError;\n                testResult.ExecutionComment = processExecutionResult.ErrorOutput.MaxLength(2048); // Trimming long error texts\n            }\n            else if (processExecutionResult.Type == ProcessExecutionResultType.TimeLimit)\n            {\n                testResult.ResultType = TestRunResultType.TimeLimit;\n            }\n            else if (processExecutionResult.Type == ProcessExecutionResultType.MemoryLimit)\n            {\n                testResult.ResultType = TestRunResultType.MemoryLimit;\n            }\n            else if (processExecutionResult.Type == ProcessExecutionResultType.Success)\n            {\n                var checkerResult = checker.Check(test.Input, receivedOutput, test.Output, test.IsTrialTest);\n                testResult.ResultType = checkerResult.IsCorrect ? TestRunResultType.CorrectAnswer : TestRunResultType.WrongAnswer;\n\n                // TODO: Do something with checkerResult.ResultType\n                testResult.CheckerDetails = checkerResult.CheckerDetails;\n            }\n            else\n            {\n                throw new ArgumentOutOfRangeException(nameof(processExecutionResult), \"Invalid ProcessExecutionResultType value.\");\n            }\n\n            return testResult;\n        }\n\n        protected CompileResult ExecuteCompiling(ExecutionContext executionContext, Func<CompilerType, string> getCompilerPathFunc, ExecutionResult result)\n        {\n            var submissionFilePath = string.IsNullOrEmpty(executionContext.AllowedFileExtensions)\n                                         ? FileHelpers.SaveStringToTempFile(executionContext.Code)\n                                         : FileHelpers.SaveByteArrayToTempFile(executionContext.FileContent);\n\n            var compilerPath = getCompilerPathFunc(executionContext.CompilerType);\n            var compilerResult = this.Compile(executionContext.CompilerType, compilerPath, executionContext.AdditionalCompilerArguments, submissionFilePath);\n\n            result.IsCompiledSuccessfully = compilerResult.IsCompiledSuccessfully;\n            result.CompilerComment = compilerResult.CompilerComment;\n            return compilerResult;\n        }\n\n        protected CompileResult Compile(CompilerType compilerType, string compilerPath, string compilerArguments, string submissionFilePath)\n        {\n            if (compilerType == CompilerType.None)\n            {\n                return new CompileResult(true, null) { OutputFile = submissionFilePath };\n            }\n\n            if (!File.Exists(compilerPath))\n            {\n                throw new ArgumentException($\"Compiler not found in: {compilerPath}\", nameof(compilerPath));\n            }\n\n            ICompiler compiler = Compiler.CreateCompiler(compilerType);\n            var compilerResult = compiler.Compile(compilerPath, submissionFilePath, compilerArguments);\n\n            if (File.Exists(submissionFilePath))\n            {\n                File.Delete(submissionFilePath);\n            }\n\n            return compilerResult;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/IExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    public interface IExecutionStrategy\n    {\n        ExecutionResult Execute(ExecutionContext executionContext);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/IoJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.IO;\n\n    public class IoJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy : NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy\n    {\n        private string jsdomModulePath;\n        private string jqueryModulePath;\n        private string handlebarsModulePath;\n        private string sinonModulePath;\n        private string sinonChaiModulePath;\n        private string underscoreModulePath;\n\n        public IoJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy(\n            string iojsExecutablePath,\n            string mochaModulePath,\n            string chaiModulePath,\n            string jsdomModulePath,\n            string jqueryModulePath,\n            string handlebarsModulePath,\n            string sinonModulePath,\n            string sinonChaiModulePath,\n            string underscoreModulePath) // TODO: make this modular by getting requires from test\n            : base(iojsExecutablePath, mochaModulePath, chaiModulePath)\n        {\n            if (!Directory.Exists(jsdomModulePath))\n            {\n                throw new ArgumentException($\"jsDom not found in: {jsdomModulePath}\", nameof(jsdomModulePath));\n            }\n\n            if (!Directory.Exists(jqueryModulePath))\n            {\n                throw new ArgumentException($\"jQuery not found in: {jqueryModulePath}\", nameof(jqueryModulePath));\n            }\n\n            if (!Directory.Exists(handlebarsModulePath))\n            {\n                throw new ArgumentException($\"Handlebars not found in: {handlebarsModulePath}\", nameof(handlebarsModulePath));\n            }\n\n            if (!Directory.Exists(sinonModulePath))\n            {\n                throw new ArgumentException($\"Sinon not found in: {sinonModulePath}\", nameof(sinonModulePath));\n            }\n\n            if (!Directory.Exists(sinonChaiModulePath))\n            {\n                throw new ArgumentException($\"Sinon-chai not found in: {sinonChaiModulePath}\", nameof(sinonChaiModulePath));\n            }\n\n            if (!Directory.Exists(underscoreModulePath))\n            {\n                throw new ArgumentException($\"Underscore not found in: {underscoreModulePath}\", nameof(underscoreModulePath));\n            }\n\n            this.jsdomModulePath = this.ProcessModulePath(jsdomModulePath);\n            this.jqueryModulePath = this.ProcessModulePath(jqueryModulePath);\n            this.handlebarsModulePath = this.ProcessModulePath(handlebarsModulePath);\n            this.sinonModulePath = this.ProcessModulePath(sinonModulePath);\n            this.sinonChaiModulePath = this.ProcessModulePath(sinonChaiModulePath);\n            this.underscoreModulePath = this.ProcessModulePath(underscoreModulePath);\n        }\n\n        protected override string JsCodeRequiredModules => base.JsCodeRequiredModules + @\",\n    jsdom = require('\" + this.jsdomModulePath + @\"'),\n    jq = require('\" + this.jqueryModulePath + @\"'),\n    sinon = require('\" + this.sinonModulePath + @\"'),\n    sinonChai = require('\" + this.sinonChaiModulePath + @\"'),\n    _ = require('\" + this.underscoreModulePath + @\"'),\n    handlebars = require('\" + this.handlebarsModulePath + @\"')\";\n\n        protected override string JsCodePreevaulationCode => @\"\nchai.use(sinonChai);\n\ndescribe('TestDOMScope', function() {\n    before(function(done) {\n        jsdom.env({\n            html: '',\n            done: function(errors, window) {\n                global.window = window;\n                global.document = window.document;\n                global.$ = jq(window);\n                global.handlebars = handlebars;\n                Object.keys(window)\n                    .filter(function (prop) {\n                        return prop.toLowerCase().indexOf('html') >= 0;\n                    }).forEach(function (prop) {\n                        global[prop] = window[prop];\n                    });\n                done();\n            }\n        });\n    });\n\n\tit('Test', function(done) {\n\t\tvar content = '';\";\n\n        protected override string JsCodeTemplate => base.JsCodeTemplate\n            .Replace(\"process.removeListener = undefined;\", string.Empty)\n            .Replace(\"setTimeout = undefined;\", string.Empty)\n            .Replace(\"delete setTimeout;\", string.Empty);\n\n        protected override string TestFuncVariables => base.TestFuncVariables + \", 'sinon', '_'\";\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/JavaPreprocessCompileExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Text;\n\n    using OJS.Common.Extensions;\n    using OJS.Common.Models;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Common;\n    using OJS.Workers.Common.Helpers;\n    using OJS.Workers.Executors;\n\n    public class JavaPreprocessCompileExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private const string TimeMeasurementFileName = \"_$time.txt\";\n        private const string SandboxExecutorClassName = \"_$SandboxExecutor\";\n        private const string JavaCompiledFileExtension = \".class\";\n\n        private readonly string javaExecutablePath;\n\n        public JavaPreprocessCompileExecuteAndCheckExecutionStrategy(string javaExecutablePath, Func<CompilerType, string> getCompilerPathFunc)\n        {\n            if (!File.Exists(javaExecutablePath))\n            {\n                throw new ArgumentException($\"Java not found in: {javaExecutablePath}!\", nameof(javaExecutablePath));\n            }\n\n            this.javaExecutablePath = javaExecutablePath;\n            this.WorkingDirectory = DirectoryHelpers.CreateTempDirectory();\n            this.GetCompilerPathFunc = getCompilerPathFunc;\n            this.SandboxExecutorSourceFilePath =\n                $\"{this.WorkingDirectory}\\\\{SandboxExecutorClassName}.{CompilerType.Java.GetFileExtension()}\";\n        }\n\n        ~JavaPreprocessCompileExecuteAndCheckExecutionStrategy()\n        {\n            DirectoryHelpers.SafeDeleteDirectory(this.WorkingDirectory, true);\n        }\n\n        protected string WorkingDirectory { get; }\n\n        protected Func<CompilerType, string> GetCompilerPathFunc { get; }\n\n        protected string SandboxExecutorSourceFilePath { get; }\n\n        private string SandboxExecutorCode => @\"\nimport java.io.File;\nimport java.io.FilePermission;\nimport java.io.FileWriter;\nimport java.lang.reflect.Method;\nimport java.lang.reflect.ReflectPermission;\nimport java.net.NetPermission;\nimport java.security.Permission;\nimport java.util.PropertyPermission;\n\npublic class \" + SandboxExecutorClassName + @\" {\n    private static final String MAIN_METHOD_NAME = \"\"main\"\";\n\n    public static void main(String[] args) throws Throwable {\n        if (args.length == 0) {\n            throw new IllegalArgumentException(\"\"The name of the class to execute not provided!\"\");\n        }\n\n        String className = args[0];\n        Class<?> userClass = Class.forName(className);\n\n        Method mainMethod = userClass.getMethod(MAIN_METHOD_NAME, String[].class);\n\n        FileWriter writer = null;\n        long startTime = 0;\n        try {\n            if (args.length == 2) {\n                String timeFilePath = args[1];\n                writer = new FileWriter(timeFilePath, false);\n            }\n\n            // Set the sandbox security manager\n            _$SandboxSecurityManager securityManager = new _$SandboxSecurityManager();\n            System.setSecurityManager(securityManager);\n\n            startTime = System.nanoTime();\n\n            mainMethod.invoke(userClass, (Object) args);\n        } catch (Throwable throwable) {\n            Throwable cause = throwable.getCause();\n            throw cause == null ? throwable : cause;\n        } finally {\n            if (writer != null) {\n                long endTime = System.nanoTime();\n                writer.write(\"\"\"\" + (endTime - startTime));\n                writer.close();\n            }\n        }\n    }\n}\n\nclass _$SandboxSecurityManager extends SecurityManager {\n    private static final String JAVA_HOME_DIR = System.getProperty(\"\"java.home\"\");\n    private static final String USER_DIR = System.getProperty(\"\"user.dir\"\");\n    private static final String EXECUTING_FILE_PATH = _$SandboxSecurityManager.class.getProtectionDomain().getCodeSource().getLocation().getPath();\n\n    @Override\n    public void checkPermission(Permission permission) {\n        if (permission instanceof PropertyPermission) {\n            // Allow reading system properties\n            return;\n        }\n\n        if (permission instanceof FilePermission) {\n            FilePermission filePermission = (FilePermission) permission;\n            String fileName = filePermission.getName();\n            String filePath = new File(fileName).getPath();\n\n            if (filePermission.getActions().equals(\"\"read\"\") &&\n                    (filePath.startsWith(JAVA_HOME_DIR) ||\n                        filePath.startsWith(USER_DIR) ||\n                        filePath.startsWith(new File(EXECUTING_FILE_PATH).getPath()))) {\n                    // Allow reading Java system directories and user directories\n                    return;\n                }\n            }\n\n        if (permission instanceof NetPermission) {\n            if (permission.getName().equals(\"\"specifyStreamHandler\"\")) {\n                // Allow specifyStreamHandler\n                return;\n            }\n        }\n\n        if (permission instanceof ReflectPermission) {\n            if (permission.getName().equals(\"\"suppressAccessChecks\"\")) {\n                // Allow suppressAccessChecks\n                return;\n            }\n        }\n\n        if (permission instanceof RuntimePermission) {\n            if (permission.getName().equals(\"\"createClassLoader\"\") ||\n                    permission.getName().startsWith(\"\"accessClassInPackage.sun.\"\") ||\n                    permission.getName().equals(\"\"getProtectionDomain\"\") ||\n                    permission.getName().equals(\"\"accessDeclaredMembers\"\")) {\n                // Allow createClassLoader, accessClassInPackage.sun, getProtectionDomain and accessDeclaredMembers\n                return;\n            }\n        }\n\n        throw new SecurityException(\"\"Not allowed: \"\" + permission.getClass().getName());\n    }\n\n    @Override\n    public void checkAccess(Thread thread) {\n        throw new UnsupportedOperationException();\n    }\n}\";\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var result = new ExecutionResult();\n\n            // Copy the sandbox executor source code to a file in the working directory\n            File.WriteAllText(this.SandboxExecutorSourceFilePath, this.SandboxExecutorCode);\n\n            // Create a temp file with the submission code\n            string submissionFilePath;\n            try\n            {\n                submissionFilePath = this.CreateSubmissionFile(executionContext);\n            }\n            catch (ArgumentException exception)\n            {\n                result.IsCompiledSuccessfully = false;\n                result.CompilerComment = exception.Message;\n\n                return result;\n            }\n\n            var compilerResult = this.DoCompile(executionContext, submissionFilePath);\n\n            // Assign compiled result info to the execution result\n            result.IsCompiledSuccessfully = compilerResult.IsCompiledSuccessfully;\n            result.CompilerComment = compilerResult.CompilerComment;\n            if (!result.IsCompiledSuccessfully)\n            {\n                return result;\n            }\n\n            // Prepare execution process arguments and time measurement info\n            var classPathArgument = $\"-classpath \\\"{this.WorkingDirectory}\\\"\";\n\n            var classToExecuteFilePath = compilerResult.OutputFile;\n            var classToExecute = classToExecuteFilePath\n                .Substring(\n                    this.WorkingDirectory.Length + 1,\n                    classToExecuteFilePath.Length - this.WorkingDirectory.Length - JavaCompiledFileExtension.Length - 1)\n                .Replace('\\\\', '.');\n\n            var timeMeasurementFilePath = $\"{this.WorkingDirectory}\\\\{TimeMeasurementFileName}\";\n\n            // Create an executor and a checker\n            var executor = new StandardProcessExecutor();\n            var checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n\n            // Process the submission and check each test\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(\n                    this.javaExecutablePath,\n                    test.Input,\n                    executionContext.TimeLimit * 2, // Java virtual machine takes more time to start up\n                    executionContext.MemoryLimit,\n                    new[] { classPathArgument, SandboxExecutorClassName, classToExecute, $\"\\\"{timeMeasurementFilePath}\\\"\" });\n\n                UpdateExecutionTime(timeMeasurementFilePath, processExecutionResult, executionContext.TimeLimit);\n\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                result.TestResults.Add(testResult);\n            }\n\n            return result;\n        }\n\n        protected virtual string CreateSubmissionFile(ExecutionContext executionContext) =>\n            JavaCodePreprocessorHelper.CreateSubmissionFile(executionContext.Code, this.WorkingDirectory);\n\n        protected virtual CompileResult DoCompile(ExecutionContext executionContext, string submissionFilePath)\n        {\n            var compilerPath = this.GetCompilerPathFunc(executionContext.CompilerType);\n\n            // Compile all source files - sandbox executor and submission file\n            var compilerResult = this.CompileSourceFiles(\n                executionContext.CompilerType,\n                compilerPath,\n                executionContext.AdditionalCompilerArguments,\n                new[] { this.SandboxExecutorSourceFilePath, submissionFilePath });\n\n            return compilerResult;\n        }\n\n        private static void UpdateExecutionTime(string timeMeasurementFilePath, ProcessExecutionResult processExecutionResult, int timeLimit)\n        {\n            if (File.Exists(timeMeasurementFilePath))\n            {\n                long timeInNanoseconds;\n                var timeMeasurementFileContent = File.ReadAllText(timeMeasurementFilePath);\n                if (long.TryParse(timeMeasurementFileContent, out timeInNanoseconds))\n                {\n                    processExecutionResult.TimeWorked = TimeSpan.FromMilliseconds(timeInNanoseconds / 1000000d);\n\n                    if (processExecutionResult.Type == ProcessExecutionResultType.TimeLimit &&\n                        processExecutionResult.TimeWorked.TotalMilliseconds <= timeLimit)\n                    {\n                        // The time from the time measurement file is under the time limit\n                        processExecutionResult.Type = ProcessExecutionResultType.Success;\n                    }\n                    else if (processExecutionResult.Type == ProcessExecutionResultType.Success &&\n                        processExecutionResult.TimeWorked.TotalMilliseconds > timeLimit)\n                    {\n                        processExecutionResult.Type = ProcessExecutionResultType.TimeLimit;\n                    }\n                }\n\n                File.Delete(timeMeasurementFilePath);\n            }\n        }\n\n        private CompileResult CompileSourceFiles(CompilerType compilerType, string compilerPath, string compilerArguments, IEnumerable<string> sourceFilesToCompile)\n        {\n            var compilerResult = new CompileResult(false, null);\n            var compilerCommentBuilder = new StringBuilder();\n\n            foreach (var sourceFile in sourceFilesToCompile)\n            {\n                compilerResult = this.Compile(compilerType, compilerPath, compilerArguments, sourceFile);\n\n                compilerCommentBuilder.AppendLine(compilerResult.CompilerComment);\n\n                if (!compilerResult.IsCompiledSuccessfully)\n                {\n                    break; // The compilation of other files is not necessary\n                }\n            }\n\n            var compilerComment = compilerCommentBuilder.ToString().Trim();\n            compilerResult.CompilerComment = compilerComment.Length > 0 ? compilerComment : null;\n\n            return compilerResult;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/JavaZipFileCompileExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.IO;\n\n    using Ionic.Zip;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Workers.Common;\n\n    public class JavaZipFileCompileExecuteAndCheckExecutionStrategy : JavaPreprocessCompileExecuteAndCheckExecutionStrategy\n    {\n        private const string SubmissionFileName = \"_$submission\";\n\n        public JavaZipFileCompileExecuteAndCheckExecutionStrategy(string javaExecutablePath, Func<CompilerType, string> getCompilerPathFunc)\n            : base(javaExecutablePath, getCompilerPathFunc)\n        {\n        }\n\n        protected override string CreateSubmissionFile(ExecutionContext executionContext)\n        {\n            var trimmedAllowedFileExtensions = executionContext.AllowedFileExtensions?.Trim();\n\n            var allowedFileExtensions = (!trimmedAllowedFileExtensions?.StartsWith(\".\") ?? false)\n                ? $\".{trimmedAllowedFileExtensions}\"\n                : trimmedAllowedFileExtensions;\n\n            if (allowedFileExtensions != GlobalConstants.ZipFileExtension)\n            {\n                throw new ArgumentException(\"Submission file is not a zip file!\");\n            }\n\n            return this.PrepareSubmissionFile(executionContext.FileContent);\n        }\n\n        protected override CompileResult DoCompile(ExecutionContext executionContext, string submissionFilePath)\n        {\n            var compilerPath = this.GetCompilerPathFunc(executionContext.CompilerType);\n\n            // Compile the zip file with user code and sandbox executor\n            var compilerResult = this.Compile(\n                executionContext.CompilerType,\n                compilerPath,\n                executionContext.AdditionalCompilerArguments,\n                submissionFilePath);\n\n            return compilerResult;\n        }\n\n        private string PrepareSubmissionFile(byte[] submissionFileContent)\n        {\n            var submissionFilePath = $\"{this.WorkingDirectory}\\\\{SubmissionFileName}\";\n\n            File.WriteAllBytes(submissionFilePath, submissionFileContent);\n\n            this.AddSandboxExecutorSourceFileToSubmissionZip(submissionFilePath);\n\n            return submissionFilePath;\n        }\n\n        private void AddSandboxExecutorSourceFileToSubmissionZip(string submissionZipFilePath)\n        {\n            using (var zipFile = new ZipFile(submissionZipFilePath))\n            {\n                zipFile.AddFile(this.SandboxExecutorSourceFilePath, string.Empty);\n\n                zipFile.Save();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/JsonExecutionResult.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using Newtonsoft.Json.Linq;\n\n    public class JsonExecutionResult\n    {\n        private const string InvalidJsonReplace = \"]}[},!^@,Invalid,!^@,{]{[\";\n\n        public bool Passed { get; set; }\n\n        public string Error { get; set; }\n\n        public int TotalPasses { get; set; }\n\n        public List<int> PassingIndexes { get; set; }\n\n        public static JsonExecutionResult Parse(string result, bool forceErrorExtracting = false, bool getTestIndexes = false)\n        {\n            JObject jsonTestResult = null;\n            var passed = false;\n            string error = null;\n            var totalPasses = 0;\n\n            try\n            {\n                jsonTestResult = JObject.Parse(result.Trim().Replace(\"/*\", InvalidJsonReplace).Replace(\"*/\", InvalidJsonReplace));\n                totalPasses = (int)jsonTestResult[\"stats\"][\"passes\"];\n                passed = totalPasses == 1;\n            }\n            catch\n            {\n                error = \"Invalid console output!\";\n            }\n\n            var testsIndexes = new List<int>();\n            if (getTestIndexes)\n            {\n                try\n                {\n                    testsIndexes = jsonTestResult[\"passing\"].Values<int>().ToList();\n                }\n                catch\n                {\n                    error = \"Invalid console output!\";\n                }\n            }\n\n            if (!passed || forceErrorExtracting)\n            {\n                try\n                {\n                    error = (string)jsonTestResult[\"failures\"][0][\"err\"][\"message\"];\n                }\n                catch\n                {\n                    error = \"Invalid console output!\";\n                }\n            }\n\n            return new JsonExecutionResult\n            {\n                Passed = passed,\n                Error = error,\n                PassingIndexes = testsIndexes,\n                TotalPasses = totalPasses\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/NodeJsPreprocessExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Common;\n    using OJS.Workers.Executors;\n\n    public class NodeJsPreprocessExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private const string UserInputPlaceholder = \"#userInput#\";\n        private const string RequiredModules = \"#requiredModule#\";\n        private const string PreevaluationPlaceholder = \"#preevaluationCode#\";\n        private const string PostevaluationPlaceholder = \"#postevaluationCode#\";\n        private const string EvaluationPlaceholder = \"#evaluationCode#\";\n\n        public NodeJsPreprocessExecuteAndCheckExecutionStrategy(string nodeJsExecutablePath)\n        {\n            if (!File.Exists(nodeJsExecutablePath))\n            {\n                throw new ArgumentException(\n                    $\"NodeJS not found in: {nodeJsExecutablePath}\", nameof(nodeJsExecutablePath));\n            }\n\n            this.NodeJsExecutablePath = nodeJsExecutablePath;\n        }\n\n        protected string NodeJsExecutablePath { get; private set; }\n\n        protected virtual string JsCodeRequiredModules => @\"\nvar EOL = require('os').EOL\";\n\n        protected virtual string JsCodePreevaulationCode => @\"\nvar content = ''\";\n\n        protected virtual string JsCodePostevaulationCode => string.Empty;\n\n        protected virtual string JsCodeEvaluation => @\"\n    var inputData = content.trim().split(EOL);\n    var result = code.run(inputData);\n    if (result !== undefined) {\n        console.log(result);\n    }\";\n\n        protected virtual string JsCodeTemplate => RequiredModules + @\";\n\nDataView = undefined;\nDTRACE_NET_SERVER_CONNECTION = undefined;\n// DTRACE_NET_STREAM_END = undefined;\nDTRACE_NET_SOCKET_READ = undefined;\nDTRACE_NET_SOCKET_WRITE = undefined;\nDTRACE_HTTP_SERVER_REQUEST = undefined;\nDTRACE_HTTP_SERVER_RESPONSE = undefined;\nDTRACE_HTTP_CLIENT_REQUEST = undefined;\nDTRACE_HTTP_CLIENT_RESPONSE = undefined;\nCOUNTER_NET_SERVER_CONNECTION = undefined;\nCOUNTER_NET_SERVER_CONNECTION_CLOSE = undefined;\nCOUNTER_HTTP_SERVER_REQUEST = undefined;\nCOUNTER_HTTP_SERVER_RESPONSE = undefined;\nCOUNTER_HTTP_CLIENT_REQUEST = undefined;\nCOUNTER_HTTP_CLIENT_RESPONSE = undefined;\nprocess.argv = undefined;\nprocess.versions = undefined;\nprocess.env = { NODE_DEBUG: false };\nprocess.addListener = undefined;\nprocess.EventEmitter = undefined;\nprocess.mainModule = undefined;\nprocess.removeListener = undefined;\nprocess.config = undefined;\n// process.on = undefined;\nprocess.openStdin = undefined;\nprocess.chdir = undefined;\nprocess.cwd = undefined;\nprocess.exit = undefined;\nprocess.umask = undefined;\nGLOBAL = undefined;\nroot = undefined;\nsetTimeout = undefined;\nsetInterval = undefined;\nclearTimeout = undefined;\nclearInterval = undefined;\nsetImmediate = undefined;\nclearImmediate = undefined;\nmodule = undefined;\nrequire = undefined;\nmsg = undefined;\n\ndelete DataView;\ndelete DTRACE_NET_SERVER_CONNECTION;\n// delete DTRACE_NET_STREAM_END;\ndelete DTRACE_NET_SOCKET_READ;\ndelete DTRACE_NET_SOCKET_WRITE;\ndelete DTRACE_HTTP_SERVER_REQUEST;\ndelete DTRACE_HTTP_SERVER_RESPONSE;\ndelete DTRACE_HTTP_CLIENT_REQUEST;\ndelete DTRACE_HTTP_CLIENT_RESPONSE;\ndelete COUNTER_NET_SERVER_CONNECTION;\ndelete COUNTER_NET_SERVER_CONNECTION_CLOSE;\ndelete COUNTER_HTTP_SERVER_REQUEST;\ndelete COUNTER_HTTP_SERVER_RESPONSE;\ndelete COUNTER_HTTP_CLIENT_REQUEST;\ndelete COUNTER_HTTP_CLIENT_RESPONSE;\ndelete process.argv;\ndelete process.exit;\ndelete process.versions;\ndelete GLOBAL;\ndelete root;\ndelete setTimeout;\ndelete setInterval;\ndelete clearTimeout;\ndelete clearInterval;\ndelete setImmediate;\ndelete clearImmediate;\ndelete module;\ndelete require;\ndelete msg;\n\nprocess.exit = function () {};\n\n\" + PreevaluationPlaceholder + @\"\nprocess.stdin.resume();\nprocess.stdin.on('data', function(buf) { content += buf.toString(); });\nprocess.stdin.on('end', function() {\n    \" + EvaluationPlaceholder + @\"\n});\n\n\" + PostevaluationPlaceholder + @\"\n\nvar code = {\n    run: \" + UserInputPlaceholder + @\"\n};\";\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var result = new ExecutionResult();\n\n            // setting the IsCompiledSuccessfully variable to true as in the NodeJS\n            // execution strategy there is no compilation\n            result.IsCompiledSuccessfully = true;\n\n            // Preprocess the user submission\n            var codeToExecute = this.PreprocessJsSubmission(this.JsCodeTemplate, executionContext.Code.Trim(';'));\n\n            // Save the preprocessed submission which is ready for execution\n            var codeSavePath = FileHelpers.SaveStringToTempFile(codeToExecute);\n\n            // Process the submission and check each test\n            IExecutor executor = new RestrictedProcessExecutor();\n            IChecker checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n\n            result.TestResults = this.ProcessTests(executionContext, executor, checker, codeSavePath);\n\n            // Clean up\n            File.Delete(codeSavePath);\n\n            return result;\n        }\n\n        protected virtual List<TestResult> ProcessTests(ExecutionContext executionContext, IExecutor executor, IChecker checker, string codeSavePath)\n        {\n            var testResults = new List<TestResult>();\n\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(this.NodeJsExecutablePath, test.Input, executionContext.TimeLimit, executionContext.MemoryLimit, new[] { codeSavePath });\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                testResults.Add(testResult);\n            }\n\n            return testResults;\n        }\n\n        private string PreprocessJsSubmission(string template, string code)\n        {\n            var processedCode = template\n                .Replace(RequiredModules, this.JsCodeRequiredModules)\n                .Replace(PreevaluationPlaceholder, this.JsCodePreevaulationCode)\n                .Replace(EvaluationPlaceholder, this.JsCodeEvaluation)\n                .Replace(PostevaluationPlaceholder, this.JsCodePostevaulationCode)\n                .Replace(UserInputPlaceholder, code);\n\n            return processedCode;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Workers.Common;\n\n    public class NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy : NodeJsPreprocessExecuteAndCheckExecutionStrategy\n    {\n        private readonly string mochaModulePath;\n        private readonly string chaiModulePath;\n\n        public NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy(string nodeJsExecutablePath, string mochaModulePath, string chaiModulePath)\n            : base(nodeJsExecutablePath)\n        {\n            if (!File.Exists(mochaModulePath))\n            {\n                throw new ArgumentException($\"Mocha not found in: {mochaModulePath}\", nameof(mochaModulePath));\n            }\n\n            if (!Directory.Exists(chaiModulePath))\n            {\n                throw new ArgumentException($\"Chai not found in: {chaiModulePath}\", nameof(chaiModulePath));\n            }\n\n            this.mochaModulePath = mochaModulePath;\n            this.chaiModulePath = this.ProcessModulePath(chaiModulePath);\n        }\n\n        protected override string JsCodeRequiredModules => @\"\nvar chai = require('\" + this.chaiModulePath + @\"'),\n\tassert = chai.assert,\n\texpect = chai.expect,\n\tshould = chai.should()\";\n\n        protected override string JsCodePreevaulationCode => @\"\ndescribe('TestScope', function() {\n\tit('Test', function(done) {\n\t\tvar content = '';\";\n\n        protected override string JsCodeEvaluation => @\"\n    var inputData = content.trim();\n    var result = code.run();\n    if (result == undefined) {\n        result = 'Invalid!';\n    }\n\t\n    var bgCoderConsole = {};      \n    Object.keys(console)\n        .forEach(function (prop) {\n            bgCoderConsole[prop] = console[prop];\n            console[prop] = new Function('');\n        });\n\n\ttestFunc = new Function(\" + this.TestFuncVariables + @\", \"\"var result = this.valueOf();\"\" + inputData);\n    testFunc.call(result, \" + this.TestFuncVariables.Replace(\"'\", string.Empty) + @\");\n\n    Object.keys(bgCoderConsole)\n        .forEach(function (prop) {\n            console[prop] = bgCoderConsole[prop];\n        });\n\n\tdone();\";\n\n        protected override string JsCodePostevaulationCode => @\"\n    });\n});\";\n\n        protected virtual string TestFuncVariables => \"'assert', 'expect', 'should'\";\n\n        protected override List<TestResult> ProcessTests(ExecutionContext executionContext, IExecutor executor, IChecker checker, string codeSavePath)\n        {\n            var testResults = new List<TestResult>();\n\n            var arguments = new List<string>();\n            arguments.Add(this.mochaModulePath);\n            arguments.Add(codeSavePath);\n            arguments.AddRange(executionContext.AdditionalCompilerArguments.Split(' '));\n\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(this.NodeJsExecutablePath, test.Input, executionContext.TimeLimit, executionContext.MemoryLimit, arguments);\n                var mochaResult = JsonExecutionResult.Parse(processExecutionResult.ReceivedOutput);\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, mochaResult.Passed ? \"yes\" : string.Format(\"Unexpected error: {0}\", mochaResult.Error));\n                testResults.Add(testResult);\n            }\n\n            return testResults;\n        }\n\n        protected string ProcessModulePath(string path)\n        {\n            return path.Replace('\\\\', '/');\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/OJS.Workers.ExecutionStrategies.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{69966098-E5B2-46CD-88E9-1F79B245ADE0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.ExecutionStrategies</RootNamespace>\n    <AssemblyName>OJS.Workers.ExecutionStrategies</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Ionic.Zip, Version=1.9.8.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\DotNetZip.1.9.8\\lib\\net20\\Ionic.Zip.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.8.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"CSharpTestRunnerExecutionStrategy.cs\" />\n    <Compile Include=\"DoNothingExecutionStrategy.cs\" />\n    <Compile Include=\"ExecutionStrategy.cs\" />\n    <Compile Include=\"IExecutionStrategy.cs\" />\n    <Compile Include=\"JavaPreprocessCompileExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"JavaZipFileCompileExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"JsonExecutionResult.cs\" />\n    <Compile Include=\"NodeJsPreprocessExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"IoJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy.cs\" />\n    <Compile Include=\"NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy.cs\" />\n    <Compile Include=\"PhpCgiExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"PhpCliExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"CompileExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"ExecutionContext.cs\" />\n    <Compile Include=\"ExecutionResult.cs\" />\n    <Compile Include=\"PythonExecuteAndCheckExecutionStrategy.cs\" />\n    <Compile Include=\"RemoteExecutionStrategy.cs\" />\n    <Compile Include=\"TestContext.cs\" />\n    <Compile Include=\"TestResult.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69b10b02-22cf-47d6-b5f3-8a5ffb7dc771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Checkers\\OJS.Workers.Checkers.csproj\">\n      <Project>{93ec1d66-2ce1-4682-ac09-c8c40178a9ad}</Project>\n      <Name>OJS.Workers.Checkers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\">\n      <Project>{8570183b-9d7a-408d-9ea6-f86f59b05a10}</Project>\n      <Name>OJS.Workers.Compilers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\">\n      <Project>{cda78d62-7210-45ca-b3e5-9f6a5dea5734}</Project>\n      <Name>OJS.Workers.Executors</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/PhpCgiExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Executors;\n\n    public class PhpCgiExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private const string FileToExecuteOption = \"--file\";\n\n        private readonly string phpCgiExecutablePath;\n\n        public PhpCgiExecuteAndCheckExecutionStrategy(string phpCgiExecutablePath)\n        {\n            if (!File.Exists(phpCgiExecutablePath))\n            {\n                throw new ArgumentException($\"PHP CGI not found in: {phpCgiExecutablePath}\", nameof(phpCgiExecutablePath));\n            }\n\n            this.phpCgiExecutablePath = phpCgiExecutablePath;\n        }\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var result = new ExecutionResult();\n\n            // PHP code is not compiled\n            result.IsCompiledSuccessfully = true;\n\n            var codeSavePath = FileHelpers.SaveStringToTempFile(executionContext.Code);\n\n            // Process the submission and check each test\n            var executor = new RestrictedProcessExecutor();\n            var checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n\n            result.TestResults = new List<TestResult>();\n\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(\n                    this.phpCgiExecutablePath,\n                    string.Empty, // Input data is passed as the last execution argument\n                    executionContext.TimeLimit,\n                    executionContext.MemoryLimit,\n                    new[] { FileToExecuteOption, codeSavePath, string.Format(\"\\\"{0}\\\"\", test.Input) });\n\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                result.TestResults.Add(testResult);\n            }\n\n            // Clean up\n            File.Delete(codeSavePath);\n\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/PhpCliExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Executors;\n\n    public class PhpCliExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private readonly string phpCliExecutablePath;\n\n        public PhpCliExecuteAndCheckExecutionStrategy(string phpCliExecutablePath)\n        {\n            if (!File.Exists(phpCliExecutablePath))\n            {\n                throw new ArgumentException($\"PHP CLI not found in: {phpCliExecutablePath}\", nameof(phpCliExecutablePath));\n            }\n\n            this.phpCliExecutablePath = phpCliExecutablePath;\n        }\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var result = new ExecutionResult();\n\n            // PHP code is not compiled\n            result.IsCompiledSuccessfully = true;\n\n            var codeSavePath = FileHelpers.SaveStringToTempFile(executionContext.Code);\n\n            // Process the submission and check each test\n            var executor = new RestrictedProcessExecutor();\n            var checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n\n            result.TestResults = new List<TestResult>();\n\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(\n                    this.phpCliExecutablePath,\n                    test.Input,\n                    executionContext.TimeLimit,\n                    executionContext.MemoryLimit,\n                    new[] { codeSavePath });\n\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                result.TestResults.Add(testResult);\n            }\n\n            // Clean up\n            File.Delete(codeSavePath);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.ExecutionStrategies\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.ExecutionStrategies\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"8e25f16e-f417-4c50-a561-8c618c98f351\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/PythonExecuteAndCheckExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Checkers;\n    using OJS.Workers.Executors;\n\n    public class PythonExecuteAndCheckExecutionStrategy : ExecutionStrategy\n    {\n        private const string PythonIsolatedModeArgument = \"-I\"; // https://docs.python.org/3/using/cmdline.html#cmdoption-I\n        private const string PythonOptimizeAndDiscardDocstringsArgument = \"-OO\"; // https://docs.python.org/3/using/cmdline.html#cmdoption-OO\n\n        private readonly string pythonExecutablePath;\n\n        public PythonExecuteAndCheckExecutionStrategy(string pythonExecutablePath)\n        {\n            if (!File.Exists(pythonExecutablePath))\n            {\n                throw new ArgumentException($\"Python not found in: {pythonExecutablePath}\", nameof(pythonExecutablePath));\n            }\n\n            this.pythonExecutablePath = pythonExecutablePath;\n        }\n\n        public override ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            var result = new ExecutionResult();\n\n            // Python code is not compiled\n            result.IsCompiledSuccessfully = true;\n\n            var codeSavePath = FileHelpers.SaveStringToTempFile(executionContext.Code);\n\n            // Process the submission and check each test\n            var executor = new RestrictedProcessExecutor();\n            var checker = Checker.CreateChecker(executionContext.CheckerAssemblyName, executionContext.CheckerTypeName, executionContext.CheckerParameter);\n\n            result.TestResults = new List<TestResult>();\n\n            foreach (var test in executionContext.Tests)\n            {\n                var processExecutionResult = executor.Execute(\n                    this.pythonExecutablePath,\n                    test.Input,\n                    executionContext.TimeLimit,\n                    executionContext.MemoryLimit,\n                    new[] { PythonIsolatedModeArgument, PythonOptimizeAndDiscardDocstringsArgument, codeSavePath });\n\n                var testResult = this.ExecuteAndCheckTest(test, processExecutionResult, checker, processExecutionResult.ReceivedOutput);\n                result.TestResults.Add(testResult);\n            }\n\n            // Clean up\n            File.Delete(codeSavePath);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/RemoteExecutionStrategy.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using System;\n    using System.IO;\n\n    using Ionic.Zip;\n\n    public class RemoteExecutionStrategy : IExecutionStrategy\n    {\n        public ExecutionResult Execute(ExecutionContext executionContext)\n        {\n            throw new NotImplementedException();\n\n            /*\n            var request = new PayloadSettings\n                              {\n                                  Id = executionContext.SubmissionId,\n                                  TimeLimit = executionContext.TimeLimit,\n                                  MemoryLimit = executionContext.MemoryLimit,\n                                  Payload = this.PreparePayloadFile(executionContext)\n                              };\n\n            var client = new HttpClient();\n            var message = new HttpRequestMessage(HttpMethod.Post, \"http://79.124.67.13:9000/execute\");\n\n            client.SendAsync(message).ContinueWith(\n                (response =>\n                    {\n                        var serializer = new JsonSerializer();\n                        serializer.Deserialize<ServerResponse>(\n                            new JsonReader { FloatParseHandling = FloatParseHandling.Decimal });\n                        // TODO: Deserialize response\n                    }));\n\n            // TODO: Parse response\n             */\n        }\n\n        private byte[] PreparePayloadFile(ExecutionContext executionContext)\n        {\n            var tempFile = Path.GetTempFileName();\n            tempFile += \".zip\"; // TODO: Useless?\n\n            var zip = new ZipFile(tempFile);\n\n            zip.AddEntry(\"userCode.deflate\", executionContext.FileContent);\n\n            zip.AddDirectory(\"tests\");\n            foreach (var test in executionContext.Tests)\n            {\n                zip.AddEntry(string.Format(\"/tests/{0}\", test.Id), test.Input);\n            }\n\n            // TODO: Optimize?\n            var stream = new MemoryStream();\n            zip.Save(stream);\n            stream.Position = 0;\n            var byteArray = stream.ToArray();\n\n            return byteArray;\n        }\n\n        // TODO: Document\n        private class PayloadSettings\n        {\n            public int Id { get; set; }\n\n            public int TimeLimit { get; set; }\n\n            public int MemoryLimit { get; set; }\n\n            public byte[] Payload { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/TestContext.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    public class TestContext\n    {\n        public int Id { get; set; }\n\n        public string Input { get; set; }\n\n        public string Output { get; set; }\n\n        public bool IsTrialTest { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/TestResult.cs",
    "content": "﻿namespace OJS.Workers.ExecutionStrategies\n{\n    using OJS.Common.Models;\n    using OJS.Workers.Common;\n\n    public class TestResult\n    {\n        public int Id { get; set; }\n\n        public TestRunResultType ResultType { get; set; }\n\n        public int TimeUsed { get; set; }\n\n        public int MemoryUsed { get; set; }\n\n        public string ExecutionComment { get; set; }\n\n        public CheckerDetails CheckerDetails { get; set; }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.ExecutionStrategies/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"DotNetZip\" version=\"1.11.0\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/BasicLimitInformation.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// Contains basic limit information for a job object.\n    /// </summary>\n    /// <remarks>\n    /// Processes can still empty their working sets using the SetProcessWorkingSetSize function with (SIZE_T)-1, even when JOB_OBJECT_LIMIT_WORKINGSET is used. However, you cannot use SetProcessWorkingSetSize change the minimum or maximum working set size of a process in a job object.\n    /// The system increments the active process count when you attempt to associate a process with a job. If the limit is exceeded, the system decrements the active process count only when the process terminates and all handles to the process are closed. Therefore, if you have an open handle to a process that has been terminated in such a manner, you cannot associate any new processes until the handle is closed and the active process count is below the limit.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct BasicLimitInformation\n    {\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_PROCESS_TIME, this member is the per-process user-mode execution time limit, in 100-nanosecond ticks. Otherwise, this member is ignored.\n        /// The system periodically checks to determine whether each process associated with the job has accumulated more user-mode time than the set limit. If it has, the process is terminated.\n        /// If the job is nested, the effective limit is the most restrictive limit in the job chain.\n        /// </summary>\n        public long PerProcessUserTimeLimit;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_JOB_TIME, this member is the per-job user-mode execution time limit, in 100-nanosecond ticks. Otherwise, this member is ignored.\n        /// The system adds the current time of the processes associated with the job to this limit. For example, if you set this limit to 1 minute, and the job has a process that has accumulated 5 minutes of user-mode time, the limit actually enforced is 6 minutes.\n        /// The system periodically checks to determine whether the sum of the user-mode execution time for all processes is greater than this end-of-job limit. If it is, the action specified in the EndOfJobTimeAction member of the JOBOBJECT_END_OF_JOB_TIME_INFORMATION structure is carried out. By default, all processes are terminated and the status code is set to ERROR_NOT_ENOUGH_QUOTA.\n        /// To register for notification when this limit is exceeded without terminating processes, use the SetInformationJobObject function with the JobObjectNotificationLimitInformation information class.\n        /// </summary>\n        public long PerJobUserTimeLimit;\n\n        /// <summary>\n        /// The limit flags that are in effect. This member is a bitfield that determines whether other structure members are used.\n        /// </summary>\n        public uint LimitFlags;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_WORKINGSET, this member is the minimum working set size for each process associated with the job. Otherwise, this member is ignored.\n        /// If MaximumWorkingSetSize is nonzero, MinimumWorkingSetSize cannot be zero.\n        /// </summary>\n        public UIntPtr MinimumWorkingSetSize;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_WORKINGSET, this member is the maximum working set size for each process associated with the job. Otherwise, this member is ignored.\n        /// If MinimumWorkingSetSize is nonzero, MaximumWorkingSetSize cannot be zero.\n        /// </summary>\n        public UIntPtr MaximumWorkingSetSize;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_ACTIVE_PROCESS, this member is the active process limit for the job. Otherwise, this member is ignored.\n        /// If you try to associate a process with a job, and this causes the active process count to exceed this limit, the process is terminated and the association fails.\n        /// </summary>\n        public int ActiveProcessLimit;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_AFFINITY, this member is the processor affinity for all processes associated with the job. Otherwise, this member is ignored.\n        /// The affinity must be a subset of the system affinity mask obtained by calling the GetProcessAffinityMask function. The affinity of each thread is set to this value, but threads are free to subsequently set their affinity, as long as it is a subset of the specified affinity mask. Processes cannot set their own affinity mask.\n        /// </summary>\n        public UIntPtr Affinity;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_PRIORITY_CLASS, this member is the priority class for all processes associated with the job. Otherwise, this member is ignored.\n        /// Processes and threads cannot modify their priority class. The calling process must enable the SE_INC_BASE_PRIORITY_NAME privilege.\n        /// </summary>\n        public uint PriorityClass;\n\n        /// <summary>\n        /// If LimitFlags specifies JOB_OBJECT_LIMIT_SCHEDULING_CLASS, this member is the scheduling class for all processes associated with the job. Otherwise, this member is ignored.\n        /// The valid values are 0 to 9. Use 0 for the least favorable scheduling class relative to other threads, and 9 for the most favorable scheduling class relative to other threads. By default, this value is 5. To use a scheduling class greater than 5, the calling process must enable the SE_INC_BASE_PRIORITY_NAME privilege.\n        /// </summary>\n        public uint SchedulingClass;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/BasicUiRestrictions.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// Contains basic user-interface restrictions for a job object.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct BasicUiRestrictions\n    {\n        /// <summary>\n        /// Gets or sets the restriction class for the user interface.\n        /// </summary>\n        public uint UIRestrictionsClass { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/ExtendedLimitInformation.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    [StructLayout(LayoutKind.Sequential)]\n    public struct ExtendedLimitInformation\n    {\n        public BasicLimitInformation BasicLimitInformation;\n        public IoCounters IoInfo;\n        public UIntPtr ProcessMemoryLimit;\n        public UIntPtr JobMemoryLimit;\n        public UIntPtr PeakProcessMemoryUsed;\n        public UIntPtr PeakJobMemoryUsed;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/InfoClass.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    public enum InfoClass\n    {\n        BasicAccountingInformation = 1,\n        BasicLimitInformation = 2,\n        BasicProcessIdList = 3,\n        BasicUiRestrictions = 4,\n        SecurityLimitInformation = 5,  // deprecated\n        EndOfJobTimeInformation = 6,\n        AssociateCompletionPortInformation = 7,\n        BasicAndIoAccountingInformation = 8,\n        ExtendedLimitInformation = 9,\n        JobSetInformation = 10,\n        GroupInformation = 11,\n        NotificationLimitInformation = 12,\n        LimitViolationInformation = 13,\n        GroupInformationEx = 14,\n        CpuRateControlInformation = 15,\n        CompletionFilter = 16,\n        CompletionCounter = 17,\n        Reserved1Information = 18,\n        Reserved2Information = 19,\n        Reserved3Information = 20,\n        Reserved4Information = 21,\n        Reserved5Information = 22,\n        Reserved6Information = 23,\n        Reserved7Information = 24,\n        Reserved8Information = 25,\n        Reserved9Information = 26,\n        MaxJobObjectInfoClass = 27,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/IoCounters.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System.Runtime.InteropServices;\n\n    [StructLayout(LayoutKind.Sequential)]\n    public struct IoCounters\n    {\n        public ulong ReadOperationCount;\n        public ulong WriteOperationCount;\n        public ulong OtherOperationCount;\n        public ulong ReadTransferCount;\n        public ulong WriteTransferCount;\n        public ulong OtherTransferCount;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/JobObject.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n    using System.ComponentModel;\n    using System.Runtime.InteropServices;\n\n    public class JobObject : IDisposable\n    {\n        private IntPtr handle;\n        private bool disposed;\n\n        public JobObject()\n        {\n            var attr = default(SecurityAttributes);\n            this.handle = NativeMethods.CreateJobObject(ref attr, null);\n        }\n\n        ~JobObject()\n        {\n            this.Dispose(false);\n        }\n\n        public void SetExtendedLimitInformation(ExtendedLimitInformation extendedInfo)\n        {\n            var length = Marshal.SizeOf(typeof(ExtendedLimitInformation));\n            var extendedInfoPointer = Marshal.AllocHGlobal(length);\n            Marshal.StructureToPtr(extendedInfo, extendedInfoPointer, false);\n            if (!NativeMethods.SetInformationJobObject(this.handle, InfoClass.ExtendedLimitInformation, extendedInfoPointer, (uint)length))\n            {\n                throw new Win32Exception();\n            }\n        }\n\n        public void SetBasicUiRestrictions(BasicUiRestrictions uiRestrictions)\n        {\n            var length = Marshal.SizeOf(typeof(BasicUiRestrictions));\n            var uiRestrictionsInfoPointer = Marshal.AllocHGlobal(length);\n            Marshal.StructureToPtr(uiRestrictions, uiRestrictionsInfoPointer, false);\n            if (!NativeMethods.SetInformationJobObject(this.handle, InfoClass.BasicUiRestrictions, uiRestrictionsInfoPointer, (uint)length))\n            {\n                throw new Win32Exception();\n            }\n        }\n\n        public ExtendedLimitInformation GetExtendedLimitInformation()\n        {\n            var extendedLimitInformation = default(ExtendedLimitInformation);\n            var length = Marshal.SizeOf(typeof(ExtendedLimitInformation));\n            var extendedLimitInformationInfoPointer = Marshal.AllocHGlobal(length);\n            Marshal.StructureToPtr(extendedLimitInformation, extendedLimitInformationInfoPointer, false);\n            NativeMethods.QueryInformationJobObject(this.handle, InfoClass.ExtendedLimitInformation, out extendedLimitInformationInfoPointer, (uint)length, IntPtr.Zero);\n            return extendedLimitInformation;\n        }\n\n        //// // The peak memory used by any process ever associated with the job.\n        //// IntPtr PeakProcessMemoryUsed\n        //// {\n        ////     get\n        ////     {\n        ////         ExtendedLimitInformation extendedLimitInformation =\n        ////             QueryJobInformation<JOBOBJECT_EXTENDED_LIMIT_INFORMATION, JobObjectExtendedLimitInformation>(_hJob);\n        ////         return System::IntPtr((void*)extendedLimitInformation.PeakProcessMemoryUsed);\n        ////     }\n        //// }\n\n        //// // The peak memory usage of all processes currently associated with the job.\n        //// System::IntPtr JobObject::PeakJobMemoryUsed::get()\n        //// {\n        ////     JOBOBJECT_EXTENDED_LIMIT_INFORMATION extendedLimitInformation =\n        ////         QueryJobInformation<JOBOBJECT_EXTENDED_LIMIT_INFORMATION, JobObjectExtendedLimitInformation>(_hJob);\n        ////     return System::IntPtr((void *)extendedLimitInformation.PeakJobMemoryUsed);\n        //// }\n\n        public void Close()\n        {\n            NativeMethods.CloseHandle(this.handle);\n            this.handle = IntPtr.Zero;\n        }\n\n        public bool AddProcess(IntPtr processHandle)\n        {\n            return NativeMethods.AssignProcessToJobObject(this.handle, processHandle);\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(true);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (this.disposed)\n                {\n                    return;\n                }\n\n                this.Close();\n                this.disposed = true;\n                GC.SuppressFinalize(this);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/LimitFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n\n    /// <summary>\n    /// The limit flags that are in effect. This member is a bitfield that determines whether other structure members are used. Any combination of the following values can be specified.\n    /// <see href=\"http://msdn.microsoft.com/en-us/library/ms684147%28v=vs.85%29.aspx\">More information</see>\n    /// </summary>\n    [Flags]\n    public enum LimitFlags\n    {\n        //// Basic Limits\n\n        /// <summary>\n        /// Causes all processes associated with the job to use the same minimum and maximum working set sizes. The MinimumWorkingSetSize and MaximumWorkingSetSize members contain additional information.\n        /// If the job is nested, the effective working set size is the smallest working set size in the job chain.\n        /// </summary>\n        JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001,\n\n        /// <summary>\n        /// Establishes a user-mode execution time limit for each currently active process and for all future processes associated with the job.\n        /// The PerProcessUserTimeLimit member contains additional information.\n        /// </summary>\n        JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002,\n\n        /// <summary>\n        /// Establishes a user-mode execution time limit for the job. The PerJobUserTimeLimit member contains additional information.\n        /// This flag cannot be used with JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.\n        /// </summary>\n        JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004,\n\n        /// <summary>\n        /// Establishes a maximum number of simultaneously active processes associated with the job. The ActiveProcessLimit member contains additional information.\n        /// </summary>\n        JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008,\n\n        /// <summary>\n        /// Causes all processes associated with the job to use the same processor affinity. The Affinity member contains additional information.\n        /// If the job is nested, the specified processor affinity must be a subset of the effective affinity of the parent job. If the specified affinity a superset of the affinity of the parent job, it is ignored and the affinity of the parent job is used.\n        /// </summary>\n        JOB_OBJECT_LIMIT_AFFINITY = 0x00000010,\n\n        /// <summary>\n        /// Causes all processes associated with the job to use the same priority class. For more information, see Scheduling Priorities. The PriorityClass member contains additional information.\n        /// If the job is nested, the effective priority class is the lowest priority class in the job chain.\n        /// </summary>\n        JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020,\n\n        /// <summary>\n        /// Preserves any job time limits you previously set. As long as this flag is set, you can establish a per-job time limit once, then alter other limits in subsequent calls. This flag cannot be used with JOB_OBJECT_LIMIT_JOB_TIME.\n        /// </summary>\n        JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040,\n\n        /// <summary>\n        /// Causes all processes in the job to use the same scheduling class. The SchedulingClass member contains additional information.\n        /// If the job is nested, the effective scheduling class is the lowest scheduling class in the job chain.\n        /// </summary>\n        JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080,\n\n        //// Extended Limits\n\n        /// <summary>\n        /// Causes all processes associated with the job to limit their committed memory. When a process attempts to commit memory that would exceed the per-process limit, it fails. If the job object is associated with a completion port, a JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT message is sent to the completion port.\n        /// If the job is nested, the effective memory limit is the most restrictive memory limit in the job chain.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// </summary>\n        JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100,\n\n        /// <summary>\n        /// Causes all processes associated with the job to limit the job-wide sum of their committed memory. When a process attempts to commit memory that would exceed the job-wide limit, it fails. If the job object is associated with a completion port, a JOB_OBJECT_MSG_JOB_MEMORY_LIMIT message is sent to the completion port.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// To register for notification when this limit is exceeded while allowing processes to continue to commit memory, use the SetInformationJobObject function with the JobObjectNotificationLimitInformation information class.\n        /// </summary>\n        JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200,\n\n        /// <summary>\n        /// Forces a call to the SetErrorMode function with the SEM_NOGPFAULTERRORBOX flag for each process associated with the job.\n        /// If an exception occurs and the system calls the UnhandledExceptionFilter function, the debugger will be given a chance to act. If there is no debugger, the functions returns EXCEPTION_EXECUTE_HANDLER. Normally, this will cause termination of the process with the exception code as the exit status.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// </summary>\n        JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400,\n\n        /// <summary>\n        /// If any process associated with the job creates a child process using the CREATE_BREAKAWAY_FROM_JOB flag while this limit is in effect, the child process is not associated with the job.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// </summary>\n        JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800,\n\n        /// <summary>\n        /// Allows any process associated with the job to create child processes that are not associated with the job.\n        /// If the job is nested and its immediate job object allows breakaway, the child process breaks away from the immediate job object and from each job in the parent job chain, moving up the hierarchy until it reaches a job that does not permit breakaway. If the immediate job object does not allow breakaway, the child process does not break away even if jobs in its parent job chain allow it.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// </summary>\n        JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000,\n\n        /// <summary>\n        /// Causes all processes associated with the job to terminate when the last handle to the job is closed.\n        /// This limit requires use of a JOBOBJECT_EXTENDED_LIMIT_INFORMATION structure. Its BasicLimitInformation member is a JOBOBJECT_BASIC_LIMIT_INFORMATION structure.\n        /// </summary>\n        JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000,\n\n        /// <summary>\n        /// Allows processes to use a subset of the processor affinity for all processes associated with the job. This value must be combined with JOB_OBJECT_LIMIT_AFFINITY.\n        /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: This flag is supported starting with Windows 7 and Windows Server 2008 R2.\n        /// </summary>\n        JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x00004000,\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/NativeMethods.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    public static class NativeMethods\n    {\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode)]\n        internal static extern IntPtr CreateJobObject([In]ref SecurityAttributes jobAttributes, string name);\n\n        [DllImport(\"kernel32.dll\")]\n        internal static extern bool SetInformationJobObject(\n            IntPtr job,\n            InfoClass infoType,\n            IntPtr jobObjectInfo,\n            uint jobObjectInfoLength);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        internal static extern bool AssignProcessToJobObject(IntPtr job, IntPtr process);\n\n        [DllImport(\"kernel32.dll\")]\n        internal static extern bool QueryInformationJobObject(\n            IntPtr job,\n            InfoClass jobObjectInformationClass,\n            out IntPtr jobObjectInfo,\n            uint jobObjectInfoLength,\n            IntPtr returnLength);\n\n        [DllImport(\"user32.dll\", SetLastError = true)]\n        internal static extern uint GetWindowThreadProcessId(IntPtr windowHandler, out uint processId);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool CloseHandle(IntPtr obj);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/PrepareJobObject.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n\n    internal static class PrepareJobObject\n    {\n        public static ExtendedLimitInformation GetExtendedLimitInformation(int maximumTime, int maximumMemory)\n        {\n            var info = new BasicLimitInformation\n            {\n                LimitFlags =\n                    (int)(LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY\n                     //// The following two flags are causing the process to have unexpected behavior\n                     //// | LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME\n                     //// | LimitFlags.JOB_OBJECT_LIMIT_PROCESS_TIME\n                     | LimitFlags.JOB_OBJECT_LIMIT_ACTIVE_PROCESS\n                     | LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION\n                     | LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE),\n                PerJobUserTimeLimit = maximumTime, // TODO: Remove or rework\n                PerProcessUserTimeLimit = maximumTime,\n                ActiveProcessLimit = 1,\n            };\n\n            var extendedInfo = new ExtendedLimitInformation\n            {\n                BasicLimitInformation = info,\n                JobMemoryLimit = (UIntPtr)maximumMemory,\n                IoInfo =\n                {\n                    ReadTransferCount = 0,\n                    ReadOperationCount = 0,\n                    WriteOperationCount = 0,\n                    WriteTransferCount = 0\n                }\n            };\n\n            return extendedInfo;\n        }\n\n        public static BasicUiRestrictions GetUiRestrictions()\n        {\n            var restrictions = new BasicUiRestrictions\n                                   {\n                                       UIRestrictionsClass =\n                                           (int)(UiRestrictionFlags.JOB_OBJECT_UILIMIT_DESKTOP\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_DISPLAYSETTINGS\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_EXITWINDOWS\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_GLOBALATOMS\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_HANDLES\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_READCLIPBOARD\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS\n                                            | UiRestrictionFlags.JOB_OBJECT_UILIMIT_WRITECLIPBOARD)\n                                   };\n\n            return restrictions;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/SecurityAttributes.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    [StructLayout(LayoutKind.Sequential)]\n    public struct SecurityAttributes\n    {\n        public int Length;\n        public IntPtr SecurityDescriptor;\n        public int InheritHandle;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/SecurityLimitFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    public enum SecurityLimitFlags\n    {\n        /// <summary>\n        /// Prevents any process in the job from using a token that specifies the local administrators group.\n        /// </summary>\n        JOB_OBJECT_SECURITY_NO_ADMIN = 0x00000001,\n\n        /// <summary>\n        /// Prevents any process in the job from using a token that was not created with the CreateRestrictedToken function.\n        /// </summary>\n        JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = 0x00000002,\n\n        /// <summary>\n        /// Forces processes in the job to run under a specific token. Requires a token handle in the JobToken member.\n        /// </summary>\n        JOB_OBJECT_SECURITY_ONLY_TOKEN = 0x00000004,\n\n        /// <summary>\n        /// Applies a filter to the token when a process impersonates a client. Requires at least one of the following members to be set: SidsToDisable, PrivilegesToDelete, or RestrictedSids.\n        /// </summary>\n        JOB_OBJECT_SECURITY_FILTER_TOKENS = 0x00000008,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/SecurityLimitInformation.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System.Runtime.InteropServices;\n\n    [StructLayout(LayoutKind.Sequential)]\n    internal struct SecurityLimitInformation\n    {\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/JobObjects/UiRestrictionFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.JobObjects\n{\n    using System;\n\n    /// <summary>\n    /// The restriction class for the user interface.\n    /// <see href=\"http://msdn.microsoft.com/en-us/library/windows/desktop/ms684152%28v=vs.85%29.aspx\">More information</see>\n    /// </summary>\n    [Flags]\n    public enum UiRestrictionFlags\n    {\n        /// <summary>\n        /// Prevents processes associated with the job from using USER handles owned by processes not associated with the same job.\n        /// </summary>\n        /// <remarks>\n        /// If you specify the JOB_OBJECT_UILIMIT_HANDLES flag, when a process associated with the job broadcasts messages, they are only sent to top-level windows owned by processes associated with the same job. In addition, hooks can be installed only on threads belonging to processes associated with the job.\n        /// </remarks>\n        JOB_OBJECT_UILIMIT_HANDLES = 0x00000001,\n\n        /// <summary>\n        /// Prevents processes associated with the job from reading data from the clipboard.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002,\n\n        /// <summary>\n        /// Prevents processes associated with the job from writing data to the clipboard.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004,\n\n        /// <summary>\n        /// Prevents processes associated with the job from changing system parameters by using the SystemParametersInfo function.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008,\n\n        /// <summary>\n        /// Prevents processes associated with the job from calling the ChangeDisplaySettings function.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010,\n\n        /// <summary>\n        /// Prevents processes associated with the job from accessing global atoms. When this flag is used, each job has its own atom table.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020,\n\n        /// <summary>\n        /// Prevents processes associated with the job from creating desktops and switching desktops using the CreateDesktop and SwitchDesktop functions.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040,\n\n        /// <summary>\n        /// Prevents processes associated with the job from calling the ExitWindows or ExitWindowsEx function.\n        /// </summary>\n        JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/OJS.Workers.Executors.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{CDA78D62-7210-45CA-B3E5-9F6A5DEA5734}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Executors</RootNamespace>\n    <AssemblyName>OJS.Workers.Executors</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\log4net.2.0.5\\lib\\net45-full\\log4net.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"JobObjects\\BasicUiRestrictions.cs\" />\n    <Compile Include=\"JobObjects\\IoCounters.cs\" />\n    <Compile Include=\"JobObjects\\JobObject.cs\" />\n    <Compile Include=\"JobObjects\\BasicLimitInformation.cs\" />\n    <Compile Include=\"JobObjects\\ExtendedLimitInformation.cs\" />\n    <Compile Include=\"JobObjects\\InfoClass.cs\" />\n    <Compile Include=\"JobObjects\\LimitFlags.cs\" />\n    <Compile Include=\"JobObjects\\NativeMethods.cs\" />\n    <Compile Include=\"JobObjects\\SecurityLimitFlags.cs\" />\n    <Compile Include=\"JobObjects\\SecurityLimitInformation.cs\" />\n    <Compile Include=\"JobObjects\\UiRestrictionFlags.cs\" />\n    <Compile Include=\"JobObjects\\SecurityAttributes.cs\" />\n    <Compile Include=\"Process\\CreateProcessFlags.cs\" />\n    <Compile Include=\"Process\\CreateRestrictedTokenFlags.cs\" />\n    <Compile Include=\"Process\\DuplicateOptions.cs\" />\n    <Compile Include=\"Process\\LogonProvider.cs\" />\n    <Compile Include=\"Process\\LogonType.cs\" />\n    <Compile Include=\"Process\\Luid.cs\" />\n    <Compile Include=\"Process\\LuidAndAttributes.cs\" />\n    <Compile Include=\"Process\\NativeMethods.cs\" />\n    <Compile Include=\"Process\\PriorityClass.cs\" />\n    <Compile Include=\"Process\\ProcessInformation.cs\" />\n    <Compile Include=\"Process\\ProcessMemoryCounters.cs\" />\n    <Compile Include=\"Process\\ProcessThreadTimes.cs\" />\n    <Compile Include=\"Process\\ProcessWaitHandle.cs\" />\n    <Compile Include=\"Process\\SafeLocalMemHandle.cs\" />\n    <Compile Include=\"Process\\SafeProcessHandle.cs\" />\n    <Compile Include=\"Process\\SecurityAttributes.cs\" />\n    <Compile Include=\"Process\\SecurityMandatoryLabel.cs\" />\n    <Compile Include=\"Process\\SidAndAttributes.cs\" />\n    <Compile Include=\"Process\\SidIdentifierAuthority.cs\" />\n    <Compile Include=\"Process\\StartupInfo.cs\" />\n    <Compile Include=\"Process\\StartupInfoFlags.cs\" />\n    <Compile Include=\"Process\\TokenInformationClass.cs\" />\n    <Compile Include=\"Process\\TokenMandatoryLabel.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"JobObjects\\PrepareJobObject.cs\" />\n    <Compile Include=\"Process\\RestrictedProcess.cs\" />\n    <Compile Include=\"RestrictedProcessExecutor.cs\" />\n    <Compile Include=\"StandardProcessExecutor.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/CreateProcessFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n\n    /// <summary>\n    /// The following process creation flags are used by the CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, and CreateProcessWithTokenW functions. They can be specified in any combination, except as noted.\n    /// </summary>\n    [Flags]\n    public enum CreateProcessFlags\n    {\n        /// <summary>\n        /// The child processes of a process associated with a job are not associated with the job.\n        /// If the calling process is not associated with a job, this constant has no effect. If the calling process is associated with a job, the job must set the JOB_OBJECT_LIMIT_BREAKAWAY_OK limit.\n        /// </summary>\n        CREATE_BREAKAWAY_FROM_JOB = 0x01000000,\n\n        /// <summary>\n        /// The new process does not inherit the error mode of the calling process. Instead, the new process gets the default error mode.\n        /// This feature is particularly useful for multithreaded shell applications that run with hard errors disabled.\n        /// The default behavior is for the new process to inherit the error mode of the caller. Setting this flag changes that default behavior.\n        /// </summary>\n        CREATE_DEFAULT_ERROR_MODE = 0x04000000,\n\n        /// <summary>\n        /// The new process has a new console, instead of inheriting its parent's console (the default). For more information, see Creation of a Console.\n        /// This flag cannot be used with DETACHED_PROCESS.\n        /// </summary>\n        CREATE_NEW_CONSOLE = 0x00000010,\n\n        /// <summary>\n        /// The new process is the root process of a new process group. The process group includes all processes that are descendants of this root process. The process identifier of the new process group is the same as the process identifier, which is returned in the lpProcessInformation parameter. Process groups are used by the GenerateConsoleCtrlEvent function to enable sending a CTRL+BREAK signal to a group of console processes.\n        /// If this flag is specified, CTRL+C signals will be disabled for all processes within the new process group.\n        /// This flag is ignored if specified with CREATE_NEW_CONSOLE.\n        /// </summary>\n        CREATE_NEW_PROCESS_GROUP = 0x00000200,\n\n        /// <summary>\n        /// The process is a console application that is being run without a console window. Therefore, the console handle for the application is not set.\n        /// This flag is ignored if the application is not a console application, or if it is used with either CREATE_NEW_CONSOLE or DETACHED_PROCESS.\n        /// </summary>\n        CREATE_NO_WINDOW = 0x08000000,\n\n        /// <summary>\n        /// The process is to be run as a protected process. The system restricts access to protected processes and the threads of protected processes. For more information on how processes can interact with protected processes, see Process Security and Access Rights.\n        /// To activate a protected process, the binary must have a special signature. This signature is provided by Microsoft but not currently available for non-Microsoft binaries. There are currently four protected processes: media foundation, audio engine, Windows error reporting, and system. Components that load into these binaries must also be signed. Multimedia companies can leverage the first two protected processes. For more information, see Overview of the Protected Media Path.\n        /// Windows Server 2003 and Windows XP:  This value is not supported.\n        /// </summary>\n        CREATE_PROTECTED_PROCESS = 0x00040000,\n\n        /// <summary>\n        /// Allows the caller to execute a child process that bypasses the process restrictions that would normally be applied automatically to the process.\n        /// </summary>\n        CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000,\n\n        /// <summary>\n        /// This flag is valid only when starting a 16-bit Windows-based application. If set, the new process runs in a private Virtual DOS Machine (VDM). By default, all 16-bit Windows-based applications run as threads in a single, shared VDM. The advantage of running separately is that a crash only terminates the single VDM; any other programs running in distinct VDMs continue to function normally. Also, 16-bit Windows-based applications that are run in separate VDMs have separate input queues. That means that if one application stops responding momentarily, applications in separate VDMs continue to receive input. The disadvantage of running separately is that it takes significantly more memory to do so. You should use this flag only if the user requests that 16-bit applications should run in their own VDM.\n        /// </summary>\n        CREATE_SEPARATE_WOW_VDM = 0x00000800,\n\n        /// <summary>\n        /// The flag is valid only when starting a 16-bit Windows-based application. If the DefaultSeparateVDM switch in the Windows section of WIN.INI is TRUE, this flag overrides the switch. The new process is run in the shared Virtual DOS Machine.\n        /// </summary>\n        CREATE_SHARED_WOW_VDM = 0x00001000,\n\n        /// <summary>\n        /// The primary thread of the new process is created in a suspended state, and does not run until the ResumeThread function is called.\n        /// </summary>\n        CREATE_SUSPENDED = 0x00000004,\n\n        /// <summary>\n        /// If this flag is set, the environment block pointed to by lpEnvironment uses Unicode characters. Otherwise, the environment block uses ANSI characters.\n        /// </summary>\n        CREATE_UNICODE_ENVIRONMENT = 0x00000400,\n\n        /// <summary>\n        /// The calling thread starts and debugs the new process. It can receive all related debug events using the WaitForDebugEvent function.\n        /// </summary>\n        DEBUG_ONLY_THIS_PROCESS = 0x00000002,\n\n        /// <summary>\n        /// The calling thread starts and debugs the new process and all child processes created by the new process. It can receive all related debug events using the WaitForDebugEvent function.\n        /// A process that uses DEBUG_PROCESS becomes the root of a debugging chain. This continues until another process in the chain is created with DEBUG_PROCESS.\n        /// If this flag is combined with DEBUG_ONLY_THIS_PROCESS, the caller debugs only the new process, not any child processes.\n        /// </summary>\n        DEBUG_PROCESS = 0x00000001,\n\n        /// <summary>\n        /// For console processes, the new process does not inherit its parent's console (the default). The new process can call the AllocConsole function at a later time to create a console. For more information, see Creation of a Console.\n        /// This value cannot be used with CREATE_NEW_CONSOLE.\n        /// </summary>\n        DETACHED_PROCESS = 0x00000008,\n\n        /// <summary>\n        /// The process is created with extended startup information; the lpStartupInfo parameter specifies a STARTUPINFOEX structure.\n        /// Windows Server 2003 and Windows XP:  This value is not supported.\n        /// </summary>\n        EXTENDED_STARTUPINFO_PRESENT = 0x00080000,\n\n        /// <summary>\n        /// The process inherits its parent's affinity. If the parent process has threads in more than one processor group, the new process inherits the group-relative affinity of an arbitrary group in use by the parent.\n        /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP:  This value is not supported.\n        /// </summary>\n        INHERIT_PARENT_AFFINITY = 0x00010000\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/CreateRestrictedTokenFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    public enum CreateRestrictedTokenFlags\n    {\n        /// <summary>\n        /// Disables all privileges in the new token except the SeChangeNotifyPrivilege privilege. If this value is specified, the DeletePrivilegeCount and PrivilegesToDelete parameters are ignored.\n        /// </summary>\n        DISABLE_MAX_PRIVILEGE = 0x1,\n\n        /// <summary>\n        /// If this value is used, the system does not check AppLocker rules or apply Software Restriction Policies. For AppLocker, this flag disables checks for all four rule collections: Executable, Windows Installer, Script, and DLL.\n        /// When creating a setup program that must run extracted DLLs during installation, use the flag SAFER_TOKEN_MAKE_INERT in the SaferComputeTokenFromLevel function.\n        /// A token can be queried for existence of this flag by using GetTokenInformation.\n        /// Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP:  On systems with KB2532445 installed, the caller must be running as LocalSystem or TrustedInstaller or the system ignores this flag. For more information, see \"You can circumvent AppLocker rules by using an Office macro on a computer that is running Windows 7 or Windows Server 2008 R2\" in the Help and Support Knowledge Base at http://support.microsoft.com/kb/2532445.\n        /// Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP:  AppLocker is not supported. AppLocker was introduced in Windows 7 and Windows Server 2008 R2.\n        /// </summary>\n        SANDBOX_INERT = 0x2,\n\n        /// <summary>\n        /// The new token is a LUA token.\n        /// Windows Server 2003 and Windows XP:  This value is not supported.\n        /// </summary>\n        LUA_TOKEN = 0x4,\n\n        /// <summary>\n        /// The new token contains restricting SIDs that are considered only when evaluating write access.\n        /// Windows XP with SP2 and later:  The value of this constant is 0x4. For an application to be compatible with Windows XP with SP2 and later operating systems, the application should query the operating system by calling the GetVersionEx function to determine which value should be used.\n        /// Windows Server 2003 and Windows XP with SP1 and earlier:  This value is not supported.\n        /// </summary>\n        WRITE_RESTRICTED = 0x8,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/DuplicateOptions.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n\n    [Flags]\n    public enum DuplicateOptions : uint\n    {\n        /// <summary>\n        /// Closes the source handle. This occurs regardless of any error status returned.\n        /// </summary>\n        DUPLICATE_CLOSE_SOURCE = 0x00000001,\n\n        /// <summary>\n        /// Ignores the dwDesiredAccess parameter. The duplicate handle has the same access as the source handle.\n        /// </summary>\n        DUPLICATE_SAME_ACCESS = 0x00000002,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/LogonProvider.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    public enum LogonProvider\n    {\n        LOGON32_PROVIDER_DEFAULT,\n        LOGON32_PROVIDER_WINNT35,\n        LOGON32_PROVIDER_WINNT40,\n        LOGON32_PROVIDER_WINNT50\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/LogonType.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    public enum LogonType\n    {\n        LOGON32_LOGON_INTERACTIVE = 2,\n        LOGON32_LOGON_NETWORK,\n        LOGON32_LOGON_BATCH,\n        LOGON32_LOGON_SERVICE,\n        LOGON32_LOGON_UNLOCK = 7,\n        LOGON32_LOGON_NETWORK_CLEARTEXT,\n        LOGON32_LOGON_NEW_CREDENTIALS\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/Luid.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// An LUID is a 64-bit value guaranteed to be unique only on the system on which it was generated. The uniqueness of a locally unique identifier (LUID) is guaranteed only until the system is restarted.\n    /// Applications must use functions and structures to manipulate LUID values.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct Luid\n    {\n        public uint LowPart;\n\n        public long HighPart;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/LuidAndAttributes.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// The LUID_AND_ATTRIBUTES structure represents a locally unique identifier (LUID) and its attributes.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct LuidAndAttributes\n    {\n        public Luid Luid;\n\n        public uint Attributes;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/NativeMethods.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Diagnostics.CodeAnalysis;\n    using System.Runtime.ConstrainedExecution;\n    using System.Runtime.InteropServices;\n    using System.Runtime.Versioning;\n\n    using Microsoft.Win32.SafeHandles;\n\n    public static class NativeMethods\n    {\n        public const int SYNCHRONIZE = 0x00100000;\n        public const int PROCESS_TERMINATE = 0x0001;\n        public const int STILL_ACTIVE = 0x00000103;\n\n        public const uint STANDARD_RIGHTS_REQUIRED = 0x000F0000;\n        public const uint STANDARD_RIGHTS_READ = 0x00020000;\n\n        public const uint TOKEN_ASSIGN_PRIMARY = 0x0001;\n        public const uint TOKEN_DUPLICATE = 0x0002;\n        public const uint TOKEN_IMPERSONATE = 0x0004;\n        public const uint TOKEN_QUERY = 0x0008;\n        public const uint TOKEN_QUERY_SOURCE = 0x0010;\n        public const uint TOKEN_ADJUST_PRIVILEGES = 0x0020;\n        public const uint TOKEN_ADJUST_GROUPS = 0x0040;\n        public const uint TOKEN_ADJUST_DEFAULT = 0x0080;\n        public const uint TOKEN_ADJUST_SESSIONID = 0x0100;\n        public const uint TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY;\n        public const uint TOKEN_ALL_ACCESS =\n            STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY\n             | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT\n             | TOKEN_ADJUST_SESSIONID;\n\n        // Group related SID Attributes\n        public const uint SE_GROUP_MANDATORY = 0x00000001;\n        public const uint SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002;\n        public const uint SE_GROUP_ENABLED = 0x00000004;\n        public const uint SE_GROUP_OWNER = 0x00000008;\n        public const uint SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010;\n        public const uint SE_GROUP_INTEGRITY = 0x00000020;\n        public const uint SE_GROUP_INTEGRITY_ENABLED = 0x00000040;\n        public const uint SE_GROUP_LOGON_ID = 0xC0000000;\n        public const uint SE_GROUP_RESOURCE = 0x20000000;\n        public const uint SE_GROUP_VALID_ATTRIBUTES = SE_GROUP_MANDATORY |\n            SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER |\n            SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE |\n            SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED;\n\n        public const int SAFER_SCOPEID_MACHINE = 1;\n        public const int SAFER_SCOPEID_USER = 2;\n\n        public const int SAFER_LEVELID_DISALLOWED = 0x00000;\n        public const int SAFER_LEVELID_UNTRUSTED = 0x1000;\n        public const int SAFER_LEVELID_CONSTRAINED = 0x10000;\n        public const int SAFER_LEVELID_NORMALUSER = 0x20000;\n        public const int SAFER_LEVELID_FULLYTRUSTED = 0x40000;\n\n        public const int SAFER_LEVEL_OPEN = 1;\n\n        [SuppressMessage(\"StyleCop.CSharp.MaintainabilityRules\", \"SA1401:FieldsMustBePrivate\", Justification = \"Reviewed. Suppression is OK here.\")]\n        public static SidIdentifierAuthority SECURITY_MANDATORY_LABEL_AUTHORITY =\n            new SidIdentifierAuthority(new byte[] { 0, 0, 0, 0, 0, 16 });\n\n        [DllImport(\"advapi32.dll\", SetLastError = true, CharSet = CharSet.Unicode)]\n        [System.Security.SuppressUnmanagedCodeSecurityAttribute]\n        [ResourceExposure(ResourceScope.Machine)]\n        internal static extern bool CreateProcessAsUser(\n            IntPtr hToken,\n            string lpApplicationName,\n            string lpCommandLine,\n            SecurityAttributes lpProcessAttributes,\n            SecurityAttributes lpThreadAttributes,\n            bool bInheritHandles,\n            uint dwCreationFlags,\n            IntPtr lpEnvironment,\n            string lpCurrentDirectory,\n            StartupInfo lpStartupInfo,\n            out ProcessInformation lpProcessInformation);\n\n        [DllImport(\"kernel32.dll\")]\n        internal static extern uint ResumeThread(IntPtr hThread);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [ResourceExposure(ResourceScope.Process)]\n        internal static extern bool CreatePipe(\n            out SafeFileHandle hReadPipe,\n            out SafeFileHandle hWritePipe,\n            SecurityAttributes lpPipeAttributes,\n            int nSize);\n\n        [DllImport(\"kernel32.dll\")]\n        internal static extern IntPtr GetCurrentProcess();\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        internal static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Ansi, SetLastError = true, BestFitMapping = false)]\n        [ResourceExposure(ResourceScope.Machine)]\n        internal static extern bool DuplicateHandle(\n            HandleRef hSourceProcessHandle,\n            SafeHandle hSourceHandle,\n            HandleRef hTargetProcess,\n            out SafeFileHandle targetHandle,\n            int dwDesiredAccess,\n            bool bInheritHandle,\n            int dwOptions);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Ansi, SetLastError = true, BestFitMapping = false)]\n        [ResourceExposure(ResourceScope.Machine)]\n        internal static extern bool DuplicateHandle(\n            HandleRef hSourceProcessHandle,\n            SafeHandle hSourceHandle,\n            HandleRef hTargetProcess,\n            out SafeWaitHandle targetHandle,\n            int dwDesiredAccess,\n            bool bInheritHandle,\n            int dwOptions);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool DuplicateHandle(\n            IntPtr hSourceProcessHandle,\n            IntPtr hSourceHandle,\n            IntPtr hTargetProcessHandle,\n            out IntPtr lpTargetHandle,\n            uint dwDesiredAccess,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle,\n            uint dwOptions);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [ResourceExposure(ResourceScope.Machine)]\n        internal static extern bool TerminateProcess(SafeProcessHandle processHandle, int exitCode);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [ResourceExposure(ResourceScope.None)]\n        internal static extern bool GetExitCodeProcess(SafeProcessHandle processHandle, out int exitCode);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [ResourceExposure(ResourceScope.None)]\n        internal static extern bool GetProcessTimes(\n            SafeProcessHandle handle,\n            out long creation,\n            out long exit,\n            out long kernel,\n            out long user);\n\n        /// <summary>\n        /// The function opens the access token associated with a process.\n        /// </summary>\n        /// <param name=\"processHandle\">A handle to the process whose access token is opened.</param>\n        /// <param name=\"desiredAccess\">Specifies an access mask that specifies the requested types of access to the access token.</param>\n        /// <param name=\"tokenHandle\">Outputs a handle that identifies the newly opened access token when the function returns.</param>\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool OpenProcessToken(IntPtr processHandle, uint desiredAccess, out IntPtr tokenHandle);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        internal static extern bool CreateRestrictedToken(\n            IntPtr existingTokenHandle,\n            CreateRestrictedTokenFlags createRestrictedTokenFlags,\n            int disableSidCount,\n            SidAndAttributes[] sidsToDisable,\n            int deletePrivilegeCount,\n            LuidAndAttributes[] privilegesToDelete,\n            int restrictedSidCount,\n            SidAndAttributes[] sidsToRestrict,\n            out IntPtr newTokenHandle);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Unicode, SetLastError = true)]\n        internal static extern bool ConvertStringSidToSid(string StringSid, out IntPtr ptrSid);\n\n        /// <summary>\n        /// The function sets various types of information for a specified\n        /// access token. The information that this function sets replaces\n        /// existing information. The calling process must have appropriate\n        /// access rights to set the information.\n        /// </summary>\n        /// <param name=\"hToken\"> A handle to the access token for which information is to be set.</param>\n        /// <param name=\"tokenInfoClass\">A value from the TOKEN_INFORMATION_CLASS enumerated type that identifies the type of information the function sets.</param>\n        /// <param name=\"pTokenInfo\">A pointer to a buffer that contains the information set in the access token.</param>\n        /// <param name=\"tokenInfoLength\">Specifies the length, in bytes, of the buffer pointed to by TokenInformation.</param>\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool SetTokenInformation(\n            IntPtr hToken,\n            TokenInformationClass tokenInfoClass,\n            IntPtr pTokenInfo,\n            int tokenInfoLength);\n\n        /// <summary>\n        /// The function returns the length, in bytes, of a valid security\n        /// identifier (SID).\n        /// </summary>\n        /// <param name=\"pSid\">A pointer to the SID structure whose length is returned.</param>\n        /// <returns>\n        /// If the SID structure is valid, the return value is the length, in\n        /// bytes, of the SID structure.\n        /// </returns>\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        internal static extern int GetLengthSid(IntPtr pSid);\n\n#pragma warning disable SA1625 // Element documentation must not be copied and pasted\n        /// <summary>\n        /// The AllocateAndInitializeSid function allocates and initializes a\n        /// security identifier (SID) with up to eight subauthorities.\n        /// </summary>\n        /// <param name=\"pIdentifierAuthority\">A reference of a SID_IDENTIFIER_AUTHORITY structure. This structure provides the top-level identifier authority value to set in the SID.</param>\n        /// <param name=\"nSubAuthorityCount\">Specifies the number of subauthorities to place in the SID.</param>\n        /// <param name=\"dwSubAuthority0\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority1\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority2\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority3\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority4\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority5\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority6\">Subauthority value to place in the SID.</param>\n        /// <param name=\"dwSubAuthority7\">Subauthority value to place in the SID.</param>\n        /// <param name=\"pSid\">Outputs the allocated and initialized SID structure.</param>\n        /// <returns>\n        /// If the function succeeds, the return value is true. If the\n        /// function fails, the return value is false. To get extended error\n        /// information, call GetLastError.\n        /// </returns>\n#pragma warning restore SA1625 // Element documentation must not be copied and pasted\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool AllocateAndInitializeSid(\n            ref SidIdentifierAuthority pIdentifierAuthority,\n            byte nSubAuthorityCount,\n            int dwSubAuthority0,\n            int dwSubAuthority1,\n            int dwSubAuthority2,\n            int dwSubAuthority3,\n            int dwSubAuthority4,\n            int dwSubAuthority5,\n            int dwSubAuthority6,\n            int dwSubAuthority7,\n            out IntPtr pSid);\n\n        [DllImport(\"ntdll.dll\", CharSet = CharSet.Auto)]\n        [ResourceExposure(ResourceScope.None)]\n        internal static extern int NtQuerySystemInformation(int query, IntPtr dataPtr, int size, out int returnedSize);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [ResourceExposure(ResourceScope.Machine)]\n        internal static extern SafeProcessHandle OpenProcess(int access, bool inherit, int processId);\n\n        [DllImport(\"psapi.dll\", EntryPoint = \"GetProcessMemoryInfo\")]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        internal static extern bool GetProcessMemoryInfo([In] IntPtr Process, [Out] out ProcessMemoryCounters ppsmemCounters, uint cb);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        internal static extern bool SaferCloseLevel(IntPtr hLevelHandle);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        internal static extern bool SaferCreateLevel(int dwScopeId, int dwLevelId, int OpenFlags, out IntPtr pLevelHandle, IntPtr lpReserved);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        internal static extern bool SaferComputeTokenFromLevel(IntPtr LevelHandle, IntPtr InAccessToken, out IntPtr OutAccessToken, int dwFlags, IntPtr lpReserved);\n\n        [DllImport(\"kernel32.dll\", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]\n        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]\n        [ResourceExposure(ResourceScope.None)]\n        internal static extern bool CloseHandle(IntPtr handle);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Unicode, SetLastError = true)]\n        internal static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);\n\n        // SafeLocalMemHandle\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true, BestFitMapping = false)]\n        internal static extern bool ConvertStringSecurityDescriptorToSecurityDescriptor(string stringSecurityDescriptor, int stringSDRevision, out SafeLocalMemHandle securityDescriptor, IntPtr securityDescriptorSize);\n\n        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]\n        [DllImport(\"kernel32.dll\")]\n        internal static extern IntPtr LocalFree(IntPtr memoryHandler);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/PriorityClass.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n\n    [Flags]\n    public enum PriorityClass\n    {\n        /// <summary>\n        /// Process that has priority above NORMAL_PRIORITY_CLASS but below HIGH_PRIORITY_CLASS.\n        /// </summary>\n        ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000,\n\n        /// <summary>\n        /// Process that has priority above IDLE_PRIORITY_CLASS but below NORMAL_PRIORITY_CLASS.\n        /// </summary>\n        BELOW_NORMAL_PRIORITY_CLASS = 0x00004000,\n\n        /// <summary>\n        /// Process that performs time-critical tasks that must be executed immediately for it to run correctly. The threads of a high-priority class process preempt the threads of normal or idle priority class processes. An example is the Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class CPU-bound application can use nearly all available cycles.\n        /// </summary>\n        HIGH_PRIORITY_CLASS = 0x00000080,\n\n        /// <summary>\n        /// Process whose threads run only when the system is idle and are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle priority class is inherited by child processes.\n        /// </summary>\n        IDLE_PRIORITY_CLASS = 0x00000040,\n\n        /// <summary>\n        /// Process with no special scheduling needs.\n        /// </summary>\n        NORMAL_PRIORITY_CLASS = 0x00000020,\n\n        /// <summary>\n        /// Process that has the highest possible priority. The threads of a real-time priority class process preempt the threads of all other processes, including operating system processes performing important tasks. For example, a real-time process that executes for more than a very brief interval can cause disk caches not to flush or cause the mouse to be unresponsive.\n        /// </summary>\n        REALTIME_PRIORITY_CLASS = 0x00000100,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/ProcessInformation.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// Contains information about a newly created process and its primary thread.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct ProcessInformation\n    {\n        public IntPtr Process;\n        public IntPtr Thread;\n        public int ProcessId;\n        public int ThreadId;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/ProcessMemoryCounters.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    [StructLayout(LayoutKind.Sequential)]\n    public struct ProcessMemoryCounters\n    {\n        public int SizeInBytes;\n        public int PageFaultCount;\n        public IntPtr PeakWorkingSetSize;\n        public IntPtr WorkingSetSize;\n        public IntPtr QuotaPeakPagedPoolUsage;\n        public IntPtr QuotaPagedPoolUsage;\n        public IntPtr QuotaPeakNonPagedPoolUsage;\n        public IntPtr QuotaNonPagedPoolUsage;\n        public IntPtr PagefileUsage;\n        public IntPtr PeakPagefileUsage;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/ProcessThreadTimes.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n\n    internal struct ProcessThreadTimes\n    {\n        public long Create;\n        public long Exit;\n        public long Kernel;\n        public long User;\n\n        public DateTime StartTime => DateTime.FromFileTime(this.Create);\n\n        public DateTime ExitTime => DateTime.FromFileTime(this.Exit);\n\n        public TimeSpan PrivilegedProcessorTime => new TimeSpan(this.Kernel);\n\n        public TimeSpan UserProcessorTime => new TimeSpan(this.User);\n\n        public TimeSpan TotalProcessorTime => new TimeSpan(this.User + this.Kernel);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/ProcessWaitHandle.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System.Runtime.InteropServices;\n    using System.Runtime.Versioning;\n    using System.Threading;\n\n    using Microsoft.Win32.SafeHandles;\n\n    internal class ProcessWaitHandle : WaitHandle\n    {\n        [ResourceExposure(ResourceScope.None)]\n        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]\n        internal ProcessWaitHandle(SafeProcessHandle processHandle)\n        {\n            SafeWaitHandle waitHandle;\n            bool succeeded = NativeMethods.DuplicateHandle(\n                new HandleRef(this, NativeMethods.GetCurrentProcess()),\n                processHandle,\n                new HandleRef(this, NativeMethods.GetCurrentProcess()),\n                out waitHandle,\n                0,\n                false,\n                (int)DuplicateOptions.DUPLICATE_SAME_ACCESS);\n\n            if (!succeeded)\n            {\n                Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());\n            }\n\n            this.SafeWaitHandle = waitHandle;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/RestrictedProcess.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Runtime.InteropServices;\n    using System.Runtime.Versioning;\n    using System.Text;\n\n    using Microsoft.Win32.SafeHandles;\n    using OJS.Workers.Executors.JobObjects;\n\n    public class RestrictedProcess : IDisposable\n    {\n        private readonly SafeProcessHandle safeProcessHandle;\n        private readonly string fileName = string.Empty;\n        private ProcessInformation processInformation;\n        private JobObject jobObject;\n        private int exitCode;\n\n        public RestrictedProcess(string fileName, string workingDirectory, IEnumerable<string> arguments = null, int bufferSize = 4096)\n        {\n            // Initialize fields\n            this.fileName = fileName;\n            this.IsDisposed = false;\n\n            // Prepare startup info and redirect standard IO handles\n            var startupInfo = new StartupInfo();\n            this.RedirectStandardIoHandles(ref startupInfo, bufferSize);\n\n            // Create restricted token\n            var restrictedToken = this.CreateRestrictedToken();\n\n            // Set mandatory label\n            this.SetTokenMandatoryLabel(restrictedToken, SecurityMandatoryLabel.Low);\n\n            var processSecurityAttributes = new SecurityAttributes();\n            var threadSecurityAttributes = new SecurityAttributes();\n            this.processInformation = default(ProcessInformation);\n\n            const uint CreationFlags = (uint)(\n                CreateProcessFlags.CREATE_SUSPENDED |\n                CreateProcessFlags.CREATE_BREAKAWAY_FROM_JOB |\n                CreateProcessFlags.CREATE_UNICODE_ENVIRONMENT |\n                CreateProcessFlags.CREATE_NEW_PROCESS_GROUP |\n                CreateProcessFlags.DETACHED_PROCESS | // http://stackoverflow.com/questions/6371149/what-is-the-difference-between-detach-process-and-create-no-window-process-creat\n                CreateProcessFlags.CREATE_NO_WINDOW) |\n                (uint)ProcessPriorityClass.High;\n\n            string commandLine;\n            if (arguments != null)\n            {\n                var commandLineBuilder = new StringBuilder();\n                commandLineBuilder.AppendFormat(\"\\\"{0}\\\"\", fileName);\n                foreach (var argument in arguments)\n                {\n                    commandLineBuilder.Append(' ');\n                    commandLineBuilder.Append(argument);\n                }\n\n                commandLine = commandLineBuilder.ToString();\n            }\n            else\n            {\n                commandLine = fileName;\n            }\n\n            if (!NativeMethods.CreateProcessAsUser(\n                    restrictedToken,\n                    null,\n                    commandLine,\n                    processSecurityAttributes,\n                    threadSecurityAttributes,\n                    true, // In order to standard input, output and error redirection work, the handles must be inheritable and the CreateProcess() API must specify that inheritable handles are to be inherited by the child process by specifying TRUE in the bInheritHandles parameter.\n                    CreationFlags,\n                    IntPtr.Zero,\n                    workingDirectory,\n                    startupInfo,\n                    out this.processInformation))\n            {\n                throw new Win32Exception();\n            }\n\n            this.safeProcessHandle = new SafeProcessHandle(this.processInformation.Process);\n\n            // This is a very important line! Without disposing the startupInfo handles, reading the standard output (or error) will hang forever.\n            // Same problem described here: http://social.msdn.microsoft.com/Forums/vstudio/en-US/3c25a2e8-b1ea-4fc4-927b-cb865d435147/how-does-processstart-work-in-getting-output\n            startupInfo.Dispose();\n\n            NativeMethods.CloseHandle(restrictedToken);\n        }\n\n        public StreamWriter StandardInput { get; private set; }\n\n        public StreamReader StandardOutput { get; private set; }\n\n        public StreamReader StandardError { get; private set; }\n\n        public int Id => this.processInformation.ProcessId;\n\n        public int MainThreadId => this.processInformation.ThreadId;\n\n        public IntPtr Handle => this.processInformation.Process;\n\n        public IntPtr MainThreadHandle => this.processInformation.Thread;\n\n        public bool HasExited\n        {\n            get\n            {\n                if (this.safeProcessHandle.IsInvalid || this.safeProcessHandle.IsClosed)\n                {\n                    return true;\n                }\n\n                return NativeMethods.GetExitCodeProcess(this.safeProcessHandle, out this.exitCode)\n                       && this.exitCode != NativeMethods.STILL_ACTIVE;\n            }\n        }\n\n        public int ExitCode\n        {\n            get\n            {\n                if (!this.HasExited)\n                {\n                    throw new Exception(\"Process is still active!\");\n                }\n\n                return this.exitCode;\n            }\n        }\n\n        public string ExitCodeAsString => new Win32Exception(this.ExitCode).Message;\n\n        /// <summary>\n        /// Gets the time the process was started.\n        /// </summary>\n        public DateTime StartTime => this.GetProcessTimes().StartTime;\n\n        /// <summary>\n        /// Gets the time that the process exited.\n        /// </summary>\n        public DateTime ExitTime => this.GetProcessTimes().ExitTime;\n\n        /// <summary>\n        /// Gets the amount of time the process has spent running code inside the operating system core.\n        /// </summary>\n        public TimeSpan PrivilegedProcessorTime => this.GetProcessTimes().PrivilegedProcessorTime;\n\n        /// <summary>\n        /// Gets the amount of time the associated process has spent running code inside the application portion of the process (not the operating system core).\n        /// </summary>\n        public TimeSpan UserProcessorTime => this.GetProcessTimes().UserProcessorTime;\n\n        /// <summary>\n        /// Gets the amount of time the associated process has spent utilizing the CPU.\n        /// </summary>\n        public TimeSpan TotalProcessorTime => this.GetProcessTimes().TotalProcessorTime;\n\n        /// <remarks>\n        /// Warning: If two processes with the same name are created, this property may not return correct name!\n        /// </remarks>\n        public string Name\n        {\n            get\n            {\n                var fileNameOnly = new FileInfo(this.fileName).Name;\n                if (this.fileName.EndsWith(\".exe\"))\n                {\n                    return fileNameOnly.Substring(0, fileNameOnly.Length - 4);\n                }\n\n                return fileNameOnly;\n            }\n        }\n\n        public long PeakWorkingSetSize\n        {\n            get\n            {\n                var counters = default(ProcessMemoryCounters);\n                NativeMethods.GetProcessMemoryInfo(this.Handle, out counters, (uint)Marshal.SizeOf(counters));\n                return (int)counters.PeakWorkingSetSize;\n            }\n        }\n\n        public long PeakPagefileUsage\n        {\n            get\n            {\n                var counters = default(ProcessMemoryCounters);\n                NativeMethods.GetProcessMemoryInfo(this.Handle, out counters, (uint)Marshal.SizeOf(counters));\n                return (int)counters.PeakPagefileUsage;\n            }\n        }\n\n        public bool IsDisposed { get; private set; }\n\n        public void Start(int timeLimit, int memoryLimit)\n        {\n            try\n            {\n                this.jobObject = new JobObject();\n                this.jobObject.SetExtendedLimitInformation(PrepareJobObject.GetExtendedLimitInformation(timeLimit * 2, memoryLimit * 2));\n                this.jobObject.SetBasicUiRestrictions(PrepareJobObject.GetUiRestrictions());\n                this.jobObject.AddProcess(this.processInformation.Process);\n\n                NativeMethods.ResumeThread(this.processInformation.Thread);\n            }\n            catch (Win32Exception)\n            {\n                this.Kill();\n                throw;\n            }\n        }\n\n        [ResourceExposure(ResourceScope.Machine)]\n        [ResourceConsumption(ResourceScope.Machine)]\n        public void Kill()\n        {\n            NativeMethods.TerminateProcess(this.safeProcessHandle, -1);\n        }\n\n        public bool WaitForExit(int milliseconds)\n        {\n            var result = NativeMethods.WaitForSingleObject(this.processInformation.Process, (uint)milliseconds);\n            return result != 258; // TODO: Extract as constant and check all cases (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032%28v=vs.85%29.aspx)\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(true);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                this.IsDisposed = true;\n                this.safeProcessHandle.Dispose();\n                NativeMethods.CloseHandle(this.processInformation.Thread);\n                this.jobObject.Dispose();\n\n                // Disposing these object causes \"System.InvalidOperationException: The stream is currently in use by a previous operation on the stream.\"\n                // this.StandardInput.Dispose();\n                // this.StandardOutput.Dispose();\n                // this.StandardError.Dispose();\n            }\n        }\n\n        private void RedirectStandardIoHandles(ref StartupInfo startupInfo, int bufferSize)\n        {\n            // Some of this code is based on System.Diagnostics.Process.StartWithCreateProcess method implementation\n            SafeFileHandle standardInputWritePipeHandle;\n            SafeFileHandle standardOutputReadPipeHandle;\n            SafeFileHandle standardErrorReadPipeHandle;\n\n            // http://support.microsoft.com/kb/190351 (How to spawn console processes with redirected standard handles)\n            // If the dwFlags member is set to STARTF_USESTDHANDLES, then the following STARTUPINFO members specify the standard handles of the child console based process:\n            // HANDLE hStdInput - Standard input handle of the child process.\n            // HANDLE hStdOutput - Standard output handle of the child process.\n            // HANDLE hStdError - Standard error handle of the child process.\n            startupInfo.Flags = (int)StartupInfoFlags.STARTF_USESTDHANDLES;\n            this.CreatePipe(out standardInputWritePipeHandle, out startupInfo.StandardInputHandle, true, bufferSize);\n            this.CreatePipe(out standardOutputReadPipeHandle, out startupInfo.StandardOutputHandle, false, bufferSize);\n            this.CreatePipe(out standardErrorReadPipeHandle, out startupInfo.StandardErrorHandle, false, 4096);\n\n            this.StandardInput = new StreamWriter(new FileStream(standardInputWritePipeHandle, FileAccess.Write, bufferSize, false), Encoding.Default, bufferSize)\n                                     {\n                                         AutoFlush = true\n                                     };\n            this.StandardOutput = new StreamReader(new FileStream(standardOutputReadPipeHandle, FileAccess.Read, bufferSize, false), Encoding.Default, true, bufferSize);\n            this.StandardError = new StreamReader(new FileStream(standardErrorReadPipeHandle, FileAccess.Read, 4096, false), Encoding.Default, true, 4096);\n\n            /*\n             * Child processes that use such C run-time functions as printf() and fprintf() can behave poorly when redirected.\n             * The C run-time functions maintain separate IO buffers. When redirected, these buffers might not be flushed immediately after each IO call.\n             * As a result, the output to the redirection pipe of a printf() call or the input from a getch() call is not flushed immediately and delays, sometimes-infinite delays occur.\n             * This problem is avoided if the child process flushes the IO buffers after each call to a C run-time IO function.\n             * Only the child process can flush its C run-time IO buffers. A process can flush its C run-time IO buffers by calling the fflush() function.\n             */\n        }\n\n        private void CreatePipeWithSecurityAttributes(out SafeFileHandle readPipe, out SafeFileHandle writePipe, SecurityAttributes pipeAttributes, int size)\n        {\n            if (!NativeMethods.CreatePipe(out readPipe, out writePipe, pipeAttributes, size) || readPipe.IsInvalid\n                || writePipe.IsInvalid)\n            {\n                throw new Win32Exception();\n            }\n        }\n\n        // Using synchronous Anonymous pipes for process input/output redirection means we would end up\n        // wasting a worker thread pool thread per pipe instance. Overlapped pipe IO is desirable, since\n        // it will take advantage of the NT IO completion port infrastructure. But we can't really use\n        // Overlapped I/O for process input/output as it would break Console apps (managed Console class\n        // methods such as WriteLine as well as native CRT functions like printf) which are making an\n        // assumption that the console standard handles (obtained via GetStdHandle()) are opened\n        // for synchronous I/O and hence they can work fine with ReadFile/WriteFile synchronously!\n        [ResourceExposure(ResourceScope.None)]\n        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]\n        private void CreatePipe(out SafeFileHandle parentHandle, out SafeFileHandle childHandle, bool parentInputs, int bufferSize)\n        {\n            var securityAttributesParent = new SecurityAttributes { InheritHandle = true };\n\n            SafeFileHandle tempHandle = null;\n            try\n            {\n                if (parentInputs)\n                {\n                    this.CreatePipeWithSecurityAttributes(out childHandle, out tempHandle, securityAttributesParent, bufferSize);\n                }\n                else\n                {\n                    this.CreatePipeWithSecurityAttributes(out tempHandle, out childHandle, securityAttributesParent, bufferSize);\n                }\n\n                // Duplicate the parent handle to be non-inheritable so that the child process\n                // doesn't have access. This is done for correctness sake, exact reason is unclear.\n                // One potential theory is that child process can do something brain dead like\n                // closing the parent end of the pipe and there by getting into a blocking situation\n                // as parent will not be draining the pipe at the other end anymore.\n\n                // Create a duplicate of the output write handle for the std error write handle.\n                // This is necessary in case the child application closes one of its std output handles.\n                if (!NativeMethods.DuplicateHandle(\n                        new HandleRef(this, NativeMethods.GetCurrentProcess()),\n                        tempHandle,\n                        new HandleRef(this, NativeMethods.GetCurrentProcess()),\n                        out parentHandle, // Address of new handle.\n                        0,\n                        false, // Make it un-inheritable.\n                        (int)DuplicateOptions.DUPLICATE_SAME_ACCESS))\n                {\n                    throw new Win32Exception();\n                }\n            }\n            finally\n            {\n                // Close inheritable copies of the handles you do not want to be inherited.\n                if (tempHandle != null && !tempHandle.IsInvalid)\n                {\n                    tempHandle.Close();\n                }\n            }\n        }\n\n        private IntPtr CreateRestrictedToken()\n        {\n            // Open the current process and grab its primary token\n            IntPtr processToken;\n            if (!NativeMethods.OpenProcessToken(\n                    NativeMethods.GetCurrentProcess(),\n                    NativeMethods.TOKEN_DUPLICATE | NativeMethods.TOKEN_ASSIGN_PRIMARY | NativeMethods.TOKEN_QUERY | NativeMethods.TOKEN_ADJUST_DEFAULT,\n                    out processToken))\n            {\n                throw new Win32Exception();\n            }\n\n            // Create the restricted token for the process\n            IntPtr restrictedToken;\n            if (!NativeMethods.CreateRestrictedToken(\n                    processToken,\n                    CreateRestrictedTokenFlags.SANDBOX_INERT, // TODO: DISABLE_MAX_PRIVILEGE ??\n                    0, // Disable SID\n                    null,\n                    0, // Delete privilege\n                    null,\n                    0, // Restricted SID\n                    null,\n                    out restrictedToken))\n            {\n                throw new Win32Exception();\n            }\n\n            // Clean up our mess\n            NativeMethods.CloseHandle(processToken);\n\n            return restrictedToken;\n        }\n\n        private IntPtr CreateRestrictedTokenWithSafer()\n        {\n            IntPtr saferLevel;\n            IntPtr token;\n\n            if (!NativeMethods.SaferCreateLevel(\n                    NativeMethods.SAFER_SCOPEID_USER,\n                    NativeMethods.SAFER_LEVELID_CONSTRAINED,\n                    NativeMethods.SAFER_LEVEL_OPEN,\n                    out saferLevel,\n                    IntPtr.Zero))\n            {\n                throw new Win32Exception();\n            }\n\n            if (!NativeMethods.SaferComputeTokenFromLevel(saferLevel, IntPtr.Zero, out token, 0, IntPtr.Zero))\n            {\n                NativeMethods.SaferCloseLevel(saferLevel);\n                throw new Win32Exception();\n            }\n\n            NativeMethods.SaferCloseLevel(saferLevel);\n\n            return token;\n        }\n\n        private void SetTokenMandatoryLabel(IntPtr token, SecurityMandatoryLabel securityMandatoryLabel)\n        {\n            // Create the low integrity SID.\n            IntPtr integritySid;\n            if (!NativeMethods.AllocateAndInitializeSid(\n                    ref NativeMethods.SECURITY_MANDATORY_LABEL_AUTHORITY,\n                    1,\n                    (int)securityMandatoryLabel,\n                    0,\n                    0,\n                    0,\n                    0,\n                    0,\n                    0,\n                    0,\n                    out integritySid))\n            {\n                throw new Win32Exception();\n            }\n\n            var tokenMandatoryLabel = new TokenMandatoryLabel { Label = default(SidAndAttributes) };\n            tokenMandatoryLabel.Label.Attributes = NativeMethods.SE_GROUP_INTEGRITY;\n            tokenMandatoryLabel.Label.Sid = integritySid;\n            //// Marshal the TOKEN_MANDATORY_LABEL structure to the native memory.\n            var sizeOfTokenMandatoryLabel = Marshal.SizeOf(tokenMandatoryLabel);\n            var tokenInfo = Marshal.AllocHGlobal(sizeOfTokenMandatoryLabel);\n            Marshal.StructureToPtr(tokenMandatoryLabel, tokenInfo, false);\n\n            // Set the integrity level in the access token\n            if (!NativeMethods.SetTokenInformation(\n                    token,\n                    TokenInformationClass.TokenIntegrityLevel,\n                    tokenInfo,\n                    sizeOfTokenMandatoryLabel + NativeMethods.GetLengthSid(integritySid)))\n            {\n                throw new Win32Exception();\n            }\n\n            //// SafeNativeMethods.CloseHandle(integritySid);\n            //// SafeNativeMethods.CloseHandle(tokenInfo);\n        }\n\n        private ProcessThreadTimes GetProcessTimes()\n        {\n            var processTimes = default(ProcessThreadTimes);\n            if (!NativeMethods.GetProcessTimes(\n                    this.safeProcessHandle,\n                    out processTimes.Create,\n                    out processTimes.Exit,\n                    out processTimes.Kernel,\n                    out processTimes.User))\n            {\n                throw new Win32Exception();\n            }\n\n            return processTimes;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SafeLocalMemHandle.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Security;\n    using System.Security.Permissions;\n\n    using Microsoft.Win32.SafeHandles;\n\n    [SuppressUnmanagedCodeSecurity]\n    [HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort = true)]\n    public sealed class SafeLocalMemHandle : SafeHandleZeroOrMinusOneIsInvalid\n    {\n        internal SafeLocalMemHandle()\n            : base(true)\n        {\n        }\n\n        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\n        internal SafeLocalMemHandle(IntPtr existingHandle, bool ownsHandle)\n            : base(ownsHandle)\n        {\n            this.SetHandle(existingHandle);\n        }\n\n        protected override bool ReleaseHandle()\n        {\n            return NativeMethods.LocalFree(this.handle) == IntPtr.Zero;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SafeProcessHandle.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Diagnostics;\n    using System.Security;\n\n    using Microsoft.Win32.SafeHandles;\n\n    [SuppressUnmanagedCodeSecurity]\n    public sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid\n    {\n        private static SafeProcessHandle invalidHandle = new SafeProcessHandle(IntPtr.Zero);\n\n        // Note that OpenProcess returns 0 on failure\n        internal SafeProcessHandle()\n            : base(true)\n        {\n        }\n\n        internal SafeProcessHandle(IntPtr handle)\n            : base(true)\n        {\n            this.SetHandle(handle);\n        }\n\n        internal void InitialSetHandle(IntPtr h)\n        {\n            Debug.Assert(this.IsInvalid, \"Safe handle should only be set once\");\n            this.handle = h;\n        }\n\n        protected override bool ReleaseHandle()\n        {\n            return NativeMethods.CloseHandle(this.handle);\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SecurityAttributes.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Diagnostics.CodeAnalysis;\n    using System.Runtime.InteropServices;\n\n    [SuppressMessage(\"StyleCop.CSharp.MaintainabilityRules\", \"SA1401:FieldsMustBePrivate\", Justification = \"Reviewed. Suppression is OK here.\")]\n    [StructLayout(LayoutKind.Sequential)]\n    public class SecurityAttributes\n    {\n        public int Length = 12;\n\n        public SafeLocalMemHandle SecurityDescriptor = new SafeLocalMemHandle(IntPtr.Zero, false);\n\n        public bool InheritHandle = false;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SecurityMandatoryLabel.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    public enum SecurityMandatoryLabel\n    {\n        /// <summary>\n        /// Processes that are logged on anonymously are automatically designated as Untrusted\n        /// SID: S-1-16-0x0\n        /// </summary>\n        Untrusted = 0x00000000,\n\n        /// <summary>\n        /// The Low integrity level is the level used by default for interaction with the Internet.\n        /// As long as Internet Explorer is run in its default state, Protected Mode, all files and processes associated with it are assigned the Low integrity level.\n        /// Some folders, such as the Temporary Internet Folder, are also assigned the Low integrity level by default.\n        /// SID: S-1-16-0x1000\n        /// </summary>\n        Low = 0x00001000,\n\n        /// <summary>\n        /// Medium is the context that most objects will run in.\n        /// Standard users receive the Medium integrity level, and any object not explicitly designated with a lower or higher integrity level is Medium by default.\n        /// SID: S-1-16-0x2000\n        /// </summary>\n        Medium = 0x00002000,\n\n        /// <summary>\n        /// Administrators are granted the High integrity level.\n        /// This ensures that Administrators are capable of interacting with and modifying objects assigned Medium or Low integrity levels, but can also act on other objects with a High integrity level, which standard users can not do.\n        /// SID: S-1-16-0x3000\n        /// </summary>\n        High = 0x00003000,\n\n        /// <summary>\n        /// As the name implies, the System integrity level is reserved for the system.\n        /// The Windows kernel and core services are granted the System integrity level.\n        /// Being even higher than the High integrity level of Administrators protects these core functions from being affected or compromised even by Administrators.\n        /// SID: S-1-16-0x4000\n        /// </summary>\n        System = 0x00004000,\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SidAndAttributes.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// The structure represents a security identifier (SID) and its attributes. SIDs are used to uniquely identify users or groups.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct SidAndAttributes\n    {\n        public IntPtr Sid;\n\n        public uint Attributes;\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/SidIdentifierAuthority.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// The SidIdentifierAuthority structure represents the top-level authority of a security identifier (SID).\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct SidIdentifierAuthority\n    {\n        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)]\n        public byte[] Value;\n\n        public SidIdentifierAuthority(byte[] value)\n        {\n            this.Value = value;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/StartupInfo.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System;\n    using System.Diagnostics.CodeAnalysis;\n    using System.Runtime.InteropServices;\n\n    using Microsoft.Win32.SafeHandles;\n\n    /// <summary>\n    /// Specifies the window station, desktop, standard handles, and appearance of the main window for a process at creation time.\n    /// </summary>\n    [SuppressMessage(\"StyleCop.CSharp.MaintainabilityRules\", \"SA1401:FieldsMustBePrivate\", Justification = \"Reviewed. Suppression is OK here.\")]\n    [StructLayout(LayoutKind.Sequential)]\n    public class StartupInfo\n    {\n        public int SizeInBytes;\n\n        public IntPtr Reserved = IntPtr.Zero;\n\n        public IntPtr Desktop = IntPtr.Zero;\n\n        public IntPtr Title = IntPtr.Zero;\n\n        public int X = 0;\n\n        public int Y = 0;\n\n        public int XSize = 0;\n\n        public int YSize = 0;\n\n        public int XCountChars = 0;\n\n        public int YCountChars = 0;\n\n        public int FillAttribute = 0;\n\n        public int Flags = 0;\n\n        /// <summary>\n        /// If dwFlags specifies STARTF_USESHOWWINDOW, this member can be any of the values that can be specified in the nCmdShow parameter for the ShowWindow function, except for SW_SHOWDEFAULT. Otherwise, this member is ignored.\n        /// For GUI processes, the first time ShowWindow is called, its nCmdShow parameter is ignored wShowWindow specifies the default value. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT.\n        /// </summary>\n        public short ShowWindow = 0;\n\n        public short Reserved2 = 0;\n\n        public IntPtr Reserved2Pointer = IntPtr.Zero;\n\n        public SafeFileHandle StandardInputHandle = new SafeFileHandle(IntPtr.Zero, false);\n\n        public SafeFileHandle StandardOutputHandle = new SafeFileHandle(IntPtr.Zero, false);\n\n        public SafeFileHandle StandardErrorHandle = new SafeFileHandle(IntPtr.Zero, false);\n\n        public StartupInfo()\n        {\n            this.SizeInBytes = Marshal.SizeOf(this);\n        }\n\n        public void Dispose()\n        {\n            // close the handles created for child process\n            if (this.StandardInputHandle != null && !this.StandardInputHandle.IsInvalid)\n            {\n                this.StandardInputHandle.Close();\n                this.StandardInputHandle = null;\n            }\n\n            if (this.StandardOutputHandle != null && !this.StandardOutputHandle.IsInvalid)\n            {\n                this.StandardOutputHandle.Close();\n                this.StandardOutputHandle = null;\n            }\n\n            if (this.StandardErrorHandle != null && !this.StandardErrorHandle.IsInvalid)\n            {\n                this.StandardErrorHandle.Close();\n                this.StandardErrorHandle = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/StartupInfoFlags.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    public enum StartupInfoFlags\n    {\n        /// <summary>\n        /// Indicates that the cursor is in feedback mode for two seconds after CreateProcess is called. The Working in Background cursor is displayed (see the Pointers tab in the Mouse control panel utility).\n        /// If during those two seconds the process makes the first GUI call, the system gives five more seconds to the process. If during those five seconds the process shows a window, the system gives five more seconds to the process to finish drawing the window.\n        /// The system turns the feedback cursor off after the first call to GetMessage, regardless of whether the process is drawing.\n        /// </summary>\n        STARTF_FORCEONFEEDBACK = 0x00000040,\n\n        /// <summary>\n        /// Indicates that the feedback cursor is forced off while the process is starting. The Normal Select cursor is displayed.\n        /// </summary>\n        STARTF_FORCEOFFFEEDBACK = 0x00000080,\n\n        /// <summary>\n        /// Indicates that any windows created by the process cannot be pinned on the taskbar.\n        /// This flag must be combined with STARTF_TITLEISAPPID.\n        /// </summary>\n        STARTF_PREVENTPINNING = 0x00002000,\n\n        /// <summary>\n        /// Indicates that the process should be run in full-screen mode, rather than in windowed mode.\n        /// This flag is only valid for console applications running on an x86 computer.\n        /// </summary>\n        STARTF_RUNFULLSCREEN = 0x00000020,\n\n        /// <summary>\n        /// The lpTitle member contains an AppUserModelID. This identifier controls how the taskbar and Start menu present the application, and enables it to be associated with the correct shortcuts and Jump Lists. Generally, applications will use the SetCurrentProcessExplicitAppUserModelID and GetCurrentProcessExplicitAppUserModelID functions instead of setting this flag. For more information, see Application User Model IDs.\n        /// If STARTF_PREVENTPINNING is used, application windows cannot be pinned on the taskbar. The use of any AppUserModelID-related window properties by the application overrides this setting for that window only.\n        /// This flag cannot be used with STARTF_TITLEISLINKNAME.\n        /// </summary>\n        STARTF_TITLEISAPPID = 0x00001000,\n\n        /// <summary>\n        /// The lpTitle member contains the path of the shortcut file (.lnk) that the user invoked to start this process. This is typically set by the shell when a .lnk file pointing to the launched application is invoked. Most applications will not need to set this value.\n        /// This flag cannot be used with STARTF_TITLEISAPPID.\n        /// </summary>\n        STARTF_TITLEISLINKNAME = 0x00000800,\n\n        /// <summary>\n        /// The dwXCountChars and dwYCountChars members contain additional information.\n        /// </summary>\n        STARTF_USECOUNTCHARS = 0x00000008,\n\n        /// <summary>\n        /// The dwFillAttribute member contains additional information.\n        /// </summary>\n        STARTF_USEFILLATTRIBUTE = 0x00000010,\n\n        /// <summary>\n        /// The hStdInput member contains additional information.\n        /// This flag cannot be used with STARTF_USESTDHANDLES.\n        /// </summary>\n        STARTF_USEHOTKEY = 0x00000200,\n\n        /// <summary>\n        /// The dwX and dwY members contain additional information.\n        /// </summary>\n        STARTF_USEPOSITION = 0x00000004,\n\n        /// <summary>\n        /// The wShowWindow member contains additional information.\n        /// </summary>\n        STARTF_USESHOWWINDOW = 0x00000001,\n\n        /// <summary>\n        /// The dwXSize and dwYSize members contain additional information.\n        /// </summary>\n        STARTF_USESIZE = 0x00000002,\n\n        /// <summary>\n        /// The hStdInput, hStdOutput, and hStdError members contain additional information.\n        /// If this flag is specified when calling one of the process creation functions, the handles must be inheritable and the function's bInheritHandles parameter must be set to TRUE. For more information, see Handle Inheritance.\n        /// If this flag is specified when calling the GetStartupInfo function, these members are either the handle value specified during process creation or INVALID_HANDLE_VALUE.\n        /// Handles must be closed with CloseHandle when they are no longer needed.\n        /// This flag cannot be used with STARTF_USEHOTKEY.\n        /// </summary>\n        STARTF_USESTDHANDLES = 0x00000100,\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/TokenInformationClass.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    /// <summary>\n    /// The TOKEN_INFORMATION_CLASS enumeration type contains values that specify the type of information being assigned to or retrieved from an access token.\n    /// </summary>\n    public enum TokenInformationClass\n    {\n        /// <summary>\n        /// The buffer receives a TOKEN_USER structure that contains the user account of the token.\n        /// </summary>\n        TokenUser = 1,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_GROUPS structure that contains the group accounts associated with the token.\n        /// </summary>\n        TokenGroups,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_PRIVILEGES structure that contains the privileges of the token.\n        /// </summary>\n        TokenPrivileges,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_OWNER structure that contains the default owner security identifier (SID) for newly created objects.\n        /// </summary>\n        TokenOwner,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_PRIMARY_GROUP structure that contains the default primary group SID for newly created objects.\n        /// </summary>\n        TokenPrimaryGroup,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_DEFAULT_DACL structure that contains the default DACL for newly created objects.\n        /// </summary>\n        TokenDefaultDacl,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_SOURCE structure that contains the source of the token. TOKEN_QUERY_SOURCE access is needed to retrieve this information.\n        /// </summary>\n        TokenSource,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_TYPE value that indicates whether the token is a primary or impersonation token.\n        /// </summary>\n        TokenType,\n\n        /// <summary>\n        /// The buffer receives a SECURITY_IMPERSONATION_LEVEL value that indicates the impersonation level of the token. If the access token is not an impersonation token, the function fails.\n        /// </summary>\n        TokenImpersonationLevel,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_STATISTICS structure that contains various token statistics.\n        /// </summary>\n        TokenStatistics,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_GROUPS structure that contains the list of restricting SIDs in a restricted token.\n        /// </summary>\n        TokenRestrictedSids,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that indicates the Terminal Services session identifier that is associated with the token.\n        /// </summary>\n        TokenSessionId,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_GROUPS_AND_PRIVILEGES structure that contains the user SID, the group accounts, the restricted SIDs, and the authentication ID associated with the token.\n        /// </summary>\n        TokenGroupsAndPrivileges,\n\n        /// <summary>\n        /// Reserved.\n        /// </summary>\n        TokenSessionReference,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that is nonzero if the token includes the SANDBOX_INERT flag.\n        /// </summary>\n        TokenSandBoxInert,\n\n        /// <summary>\n        /// Reserved.\n        /// </summary>\n        TokenAuditPolicy,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_ORIGIN value.\n        /// </summary>\n        TokenOrigin,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_ELEVATION_TYPE value that specifies the elevation level of the token.\n        /// </summary>\n        TokenElevationType,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_LINKED_TOKEN structure that contains a handle to another token that is linked to this token.\n        /// </summary>\n        TokenLinkedToken,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_ELEVATION structure that specifies whether the token is elevated.\n        /// </summary>\n        TokenElevation,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that is nonzero if the token has ever been filtered.\n        /// </summary>\n        TokenHasRestrictions,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_ACCESS_INFORMATION structure that specifies security information contained in the token.\n        /// </summary>\n        TokenAccessInformation,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that is nonzero if virtualization is allowed for the token.\n        /// </summary>\n        TokenVirtualizationAllowed,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that is nonzero if virtualization is enabled for the token.\n        /// </summary>\n        TokenVirtualizationEnabled,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_MANDATORY_LABEL structure that specifies the token's integrity level.\n        /// </summary>\n        TokenIntegrityLevel,\n\n        /// <summary>\n        /// The buffer receives a DWORD value that is nonzero if the token has the UIAccess flag set.\n        /// </summary>\n        TokenUIAccess,\n\n        /// <summary>\n        /// The buffer receives a TOKEN_MANDATORY_POLICY structure that specifies the token's mandatory integrity policy.\n        /// </summary>\n        TokenMandatoryPolicy,\n\n        /// <summary>\n        /// The buffer receives the token's logon security identifier (SID).\n        /// </summary>\n        TokenLogonSid,\n\n        /// <summary>\n        /// The maximum value for this enumeration\n        /// </summary>\n        MaxTokenInfoClass\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Process/TokenMandatoryLabel.cs",
    "content": "﻿namespace OJS.Workers.Executors.Process\n{\n    using System.Runtime.InteropServices;\n\n    /// <summary>\n    /// The structure specifies the mandatory integrity level for a token.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct TokenMandatoryLabel\n    {\n        public SidAndAttributes Label;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Executors\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Executors\")]\n[assembly: AssemblyCopyright(\"Copyright © 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"e407e0a7-c215-4162-8aa0-118f87a129f0\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/RestrictedProcessExecutor.cs",
    "content": "﻿[assembly: log4net.Config.XmlConfigurator(Watch = true)]\n\nnamespace OJS.Workers.Executors\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Threading;\n    using System.Threading.Tasks;\n\n    using log4net;\n\n    using OJS.Workers.Common;\n    using OJS.Workers.Executors.Process;\n\n    public class RestrictedProcessExecutor : IExecutor\n    {\n        private static ILog logger;\n\n        public RestrictedProcessExecutor()\n        {\n            logger = LogManager.GetLogger(typeof(RestrictedProcessExecutor));\n            //// logger.Info(\"Initialized.\");\n        }\n\n        // TODO: double check and maybe change order of parameters\n        public ProcessExecutionResult Execute(string fileName, string inputData, int timeLimit, int memoryLimit, IEnumerable<string> executionArguments = null)\n        {\n            var result = new ProcessExecutionResult { Type = ProcessExecutionResultType.Success };\n            var workingDirectory = new FileInfo(fileName).DirectoryName;\n\n            using (var restrictedProcess = new RestrictedProcess(fileName, workingDirectory, executionArguments, Math.Max(4096, (inputData.Length * 2) + 4)))\n            {\n                // Write to standard input using another thread\n                restrictedProcess.StandardInput.WriteLineAsync(inputData).ContinueWith(\n                    delegate\n                    {\n                        // ReSharper disable once AccessToDisposedClosure\n                        if (!restrictedProcess.IsDisposed)\n                        {\n                            // ReSharper disable once AccessToDisposedClosure\n                            restrictedProcess.StandardInput.FlushAsync().ContinueWith(\n                                delegate\n                                {\n                                    restrictedProcess.StandardInput.Close();\n                                });\n                        }\n                    });\n\n                // Read standard output using another thread to prevent process locking (waiting us to empty the output buffer)\n                var processOutputTask = restrictedProcess.StandardOutput.ReadToEndAsync().ContinueWith(\n                    x =>\n                    {\n                        result.ReceivedOutput = x.Result;\n                    });\n\n                // Read standard error using another thread\n                var errorOutputTask = restrictedProcess.StandardError.ReadToEndAsync().ContinueWith(\n                    x =>\n                    {\n                        result.ErrorOutput = x.Result;\n                    });\n\n                // Read memory consumption every few milliseconds to determine the peak memory usage of the process\n                const int TimeIntervalBetweenTwoMemoryConsumptionRequests = 45;\n                var memoryTaskCancellationToken = new CancellationTokenSource();\n                var memoryTask = Task.Run(\n                    () =>\n                    {\n                        while (true)\n                        {\n                            // ReSharper disable once AccessToDisposedClosure\n                            var peakWorkingSetSize = restrictedProcess.PeakWorkingSetSize;\n\n                            result.MemoryUsed = Math.Max(result.MemoryUsed, peakWorkingSetSize);\n\n                            if (memoryTaskCancellationToken.IsCancellationRequested)\n                            {\n                                return;\n                            }\n\n                            Thread.Sleep(TimeIntervalBetweenTwoMemoryConsumptionRequests);\n                        }\n                    },\n                    memoryTaskCancellationToken.Token);\n\n                // Start the process\n                restrictedProcess.Start(timeLimit, memoryLimit);\n\n                // Wait the process to complete. Kill it after (timeLimit * 1.5) milliseconds if not completed.\n                // We are waiting the process for more than defined time and after this we compare the process time with the real time limit.\n                var exited = restrictedProcess.WaitForExit((int)(timeLimit * 1.5));\n                if (!exited)\n                {\n                    restrictedProcess.Kill();\n                    result.Type = ProcessExecutionResultType.TimeLimit;\n                }\n\n                // Close the memory consumption check thread\n                memoryTaskCancellationToken.Cancel();\n                try\n                {\n                    // To be sure that memory consumption will be evaluated correctly\n                    memoryTask.Wait(TimeIntervalBetweenTwoMemoryConsumptionRequests);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                // Close the task that gets the process error output\n                try\n                {\n                    errorOutputTask.Wait(100);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                // Close the task that gets the process output\n                try\n                {\n                    processOutputTask.Wait(100);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                Debug.Assert(restrictedProcess.HasExited, \"Restricted process didn't exit!\");\n\n                // Report exit code and total process working time\n                result.ExitCode = restrictedProcess.ExitCode;\n                result.TimeWorked = restrictedProcess.ExitTime - restrictedProcess.StartTime;\n                result.PrivilegedProcessorTime = restrictedProcess.PrivilegedProcessorTime;\n                result.UserProcessorTime = restrictedProcess.UserProcessorTime;\n            }\n\n            if (result.TotalProcessorTime.TotalMilliseconds > timeLimit)\n            {\n                result.Type = ProcessExecutionResultType.TimeLimit;\n            }\n\n            if (!string.IsNullOrEmpty(result.ErrorOutput))\n            {\n                result.Type = ProcessExecutionResultType.RunTimeError;\n            }\n\n            if (result.MemoryUsed > memoryLimit)\n            {\n                result.Type = ProcessExecutionResultType.MemoryLimit;\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/StandardProcessExecutor.cs",
    "content": "﻿namespace OJS.Workers.Executors\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Threading;\n    using System.Threading.Tasks;\n\n    using log4net;\n\n    using OJS.Common;\n    using OJS.Workers.Common;\n\n    // TODO: Implement memory constraints\n    public class StandardProcessExecutor : IExecutor\n    {\n        private static ILog logger;\n\n        public StandardProcessExecutor()\n        {\n            logger = LogManager.GetLogger(typeof(StandardProcessExecutor));\n            //// logger.Info(\"Initialized.\");\n        }\n\n        public ProcessExecutionResult Execute(string fileName, string inputData, int timeLimit, int memoryLimit, IEnumerable<string> executionArguments = null)\n        {\n            var result = new ProcessExecutionResult { Type = ProcessExecutionResultType.Success };\n            var workingDirectory = new FileInfo(fileName).DirectoryName;\n\n            var processStartInfo = new ProcessStartInfo(fileName)\n            {\n                Arguments = executionArguments == null ? string.Empty : string.Join(\" \", executionArguments),\n                WindowStyle = ProcessWindowStyle.Hidden,\n                CreateNoWindow = true,\n                ErrorDialog = false,\n                UseShellExecute = false,\n                RedirectStandardError = true,\n                RedirectStandardInput = true,\n                RedirectStandardOutput = true,\n                WorkingDirectory = workingDirectory\n            };\n\n            using (var process = System.Diagnostics.Process.Start(processStartInfo))\n            {\n                if (process == null)\n                {\n                    throw new Exception($\"Could not start process: {fileName}!\");\n                }\n\n                process.PriorityClass = ProcessPriorityClass.High;\n\n                // Write to standard input using another thread\n                process.StandardInput.WriteLineAsync(inputData).ContinueWith(\n                    delegate\n                    {\n                        // ReSharper disable once AccessToDisposedClosure\n                        process.StandardInput.FlushAsync().ContinueWith(\n                            delegate\n                            {\n                                process.StandardInput.Close();\n                            });\n                    });\n\n                // Read standard output using another thread to prevent process locking (waiting us to empty the output buffer)\n                var processOutputTask = process.StandardOutput.ReadToEndAsync().ContinueWith(\n                    x =>\n                    {\n                        result.ReceivedOutput = x.Result;\n                    });\n\n                // Read standard error using another thread\n                var errorOutputTask = process.StandardError.ReadToEndAsync().ContinueWith(\n                    x =>\n                    {\n                        result.ErrorOutput = x.Result;\n                    });\n\n                // Read memory consumption every few milliseconds to determine the peak memory usage of the process\n                const int TimeIntervalBetweenTwoMemoryConsumptionRequests = 45;\n                var memoryTaskCancellationToken = new CancellationTokenSource();\n                var memoryTask = Task.Run(\n                    () =>\n                    {\n                        while (true)\n                        {\n                            // ReSharper disable once AccessToDisposedClosure\n                            if (process.HasExited)\n                            {\n                                return;\n                            }\n\n                            // ReSharper disable once AccessToDisposedClosure\n                            var peakWorkingSetSize = process.PeakWorkingSet64;\n\n                            result.MemoryUsed = Math.Max(result.MemoryUsed, peakWorkingSetSize);\n\n                            if (memoryTaskCancellationToken.IsCancellationRequested)\n                            {\n                                return;\n                            }\n\n                            Thread.Sleep(TimeIntervalBetweenTwoMemoryConsumptionRequests);\n                        }\n                    },\n                    memoryTaskCancellationToken.Token);\n\n                // Wait the process to complete. Kill it after (timeLimit * 1.5) milliseconds if not completed.\n                // We are waiting the process for more than defined time and after this we compare the process time with the real time limit.\n                var exited = process.WaitForExit((int)(timeLimit * 1.5));\n                if (!exited)\n                {\n                    // Double check if the process has exited before killing it\n                    if (!process.HasExited)\n                    {\n                        process.Kill();\n\n                        // Approach: https://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx#Anchor_2\n                        process.WaitForExit(GlobalConstants.DefaultProcessExitTimeOutMilliseconds);\n                    }\n\n                    result.Type = ProcessExecutionResultType.TimeLimit;\n                }\n\n                // Close the memory consumption check thread\n                memoryTaskCancellationToken.Cancel();\n                try\n                {\n                    // To be sure that memory consumption will be evaluated correctly\n                    memoryTask.Wait(TimeIntervalBetweenTwoMemoryConsumptionRequests);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                // Close the task that gets the process error output\n                try\n                {\n                    errorOutputTask.Wait(100);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                // Close the task that gets the process output\n                try\n                {\n                    processOutputTask.Wait(100);\n                }\n                catch (AggregateException ex)\n                {\n                    logger.Warn(\"AggregateException caught.\", ex.InnerException);\n                }\n\n                Debug.Assert(process.HasExited, \"Standard process didn't exit!\");\n\n                // Report exit code and total process working time\n                result.ExitCode = process.ExitCode;\n                result.TimeWorked = process.ExitTime - process.StartTime;\n                result.PrivilegedProcessorTime = process.PrivilegedProcessorTime;\n                result.UserProcessorTime = process.UserProcessorTime;\n            }\n\n            if (result.TotalProcessorTime.TotalMilliseconds > timeLimit)\n            {\n                result.Type = ProcessExecutionResultType.TimeLimit;\n            }\n\n            if (!string.IsNullOrEmpty(result.ErrorOutput))\n            {\n                result.Type = ProcessExecutionResultType.RunTimeError;\n            }\n\n            if (result.MemoryUsed > memoryLimit)\n            {\n                result.Type = ProcessExecutionResultType.MemoryLimit;\n            }\n\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Executors/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"log4net\" version=\"2.0.10\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"log4net\" type=\"log4net.Config.Log4NetConfigurationSectionHandler, log4net\" />\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=.;Initial Catalog=OnlineJudgeSystem;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"CSharpCompilerPath\" value=\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\csc.exe\" />\n    <add key=\"CPlusPlusGccCompilerPath\" value=\"C:\\MinGW\\bin\\g++.exe\" />\n    <add key=\"MsBuildExecutablePath\" value=\"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\MSBuild.exe\" />\n    <add key=\"NuGetExecutablePath\" value=\"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\nuget.exe\" />\n    <add key=\"NodeJsExecutablePath\" value=\"C:\\Program Files\\nodejs\\node.exe\" />\n    <add key=\"MochaModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha\" />\n    <add key=\"ChaiModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\chai\" />\n    <add key=\"IoJsExecutablePath\" value=\"C:\\Program Files\\iojs\\iojs.exe\" />\n    <add key=\"JsDomModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\jsdom\" />\n    <add key=\"JQueryModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\jquery\" />\n    <add key=\"HandlebarsModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\handlebars\" />\n    <add key=\"SinonModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\sinon\" />\n    <add key=\"SinonChaiModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\sinon-chai\" />\n    <add key=\"UnderscoreModulePath\" value=\"C:\\Users\\AcadWebAdmin\\AppData\\Roaming\\npm\\node_modules\\underscore\" />\n    <add key=\"JavaCompilerPath\" value=\"C:\\Program Files\\Java\\jdk1.8.0_66\\bin\\javac.exe\" />\n    <add key=\"JavaExecutablePath\" value=\"C:\\Program Files\\Java\\jdk1.8.0_66\\bin\\java.exe\" />\n    <add key=\"PythonExecutablePath\" value=\"C:\\Program Files\\Python35\\python.exe\" />\n    <add key=\"PhpCgiExecutablePath\" value=\"C:\\Program Files\\PHP\\php-cgi.exe\" />\n    <add key=\"PhpCliExecutablePath\" value=\"C:\\Program Files\\PHP\\php.exe\" />\n    <add key=\"ThreadsCount\" value=\"2\" />\n  </appSettings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <log4net>\n    <appender name=\"LogFileAppender\" type=\"log4net.Appender.FileAppender\">\n      <param name=\"File\" value=\"OJS.Workers.LocalWorker_Log.txt\" />\n      <param name=\"AppendToFile\" value=\"true\" />\n      <layout type=\"log4net.Layout.PatternLayout\">\n        <param name=\"Header\" value=\"\" />\n        <param name=\"Footer\" value=\"\" />\n        <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %c %m%n\" />\n      </layout>\n    </appender>\n    <root>\n      <level value=\"INFO\" />\n      <appender-ref ref=\"LogFileAppender\" />\n    </root>\n  </log4net>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"v11.0\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework.MappingAPI\" publicKeyToken=\"7ee2e825d201459e\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.9\" newVersion=\"6.1.0.9\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/Batch Files/InstallService.bat",
    "content": "NET STOP \"OJS Local Worker Service\"\nsc delete \"OJS Local Worker Service\"\ntimeout 10\nCD %~dp0\nC:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil \"..\\OJS.Workers.LocalWorker.exe\"\nNET START \"OJS Local Worker Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/Batch Files/StopService.bat",
    "content": "NET STOP \"OJS Local Worker Service\"\npause"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/IJob.cs",
    "content": "﻿namespace OJS.Workers.LocalWorker\n{\n    public interface IJob\n    {\n        string Name { get; set; }\n\n        void Start();\n\n        void Stop();\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/LocalWorkerService.cs",
    "content": "﻿namespace OJS.Workers.LocalWorker\n{\n    using System.Collections.Generic;\n    using System.ServiceProcess;\n    using System.Threading;\n\n    using log4net;\n\n    using OJS.Common;\n\n    internal class LocalWorkerService : ServiceBase\n    {\n        private static ILog logger;\n        private readonly IList<Thread> threads;\n        private readonly IList<IJob> jobs;\n\n        public LocalWorkerService()\n        {\n            logger = LogManager.GetLogger(\"LocalWorkerService\");\n            logger.Info(\"LocalWorkerService initializing...\");\n\n            this.threads = new List<Thread>();\n            this.jobs = new List<IJob>();\n            var processingSubmissionIds = new SynchronizedHashtable();\n\n            for (int i = 1; i <= Settings.ThreadsCount; i++)\n            {\n                var job = new SubmissionJob(string.Format(\"Job №{0}\", i), processingSubmissionIds);\n                var thread = new Thread(job.Start) { Name = string.Format(\"Thread №{0}\", i) };\n                this.jobs.Add(job);\n                this.threads.Add(thread);\n            }\n\n            logger.Info(\"LocalWorkerService initialized.\");\n        }\n\n        protected override void OnStart(string[] args)\n        {\n            logger.Info(\"LocalWorkerService starting...\");\n\n            foreach (var thread in this.threads)\n            {\n                logger.InfoFormat(\"Starting {0}...\", thread.Name);\n                thread.Start();\n                logger.InfoFormat(\"{0} started.\", thread.Name);\n                Thread.Sleep(234);\n            }\n\n            logger.Info(\"LocalWorkerService started.\");\n        }\n\n        protected override void OnStop()\n        {\n            logger.Info(\"LocalWorkerService stopping...\");\n\n            foreach (var job in this.jobs)\n            {\n                job.Stop();\n                logger.InfoFormat(\"{0} stopped.\", job.Name);\n            }\n\n            Thread.Sleep(10000);\n\n            foreach (var thread in this.threads)\n            {\n                thread.Abort();\n                logger.InfoFormat(\"{0} aborted.\", thread.Name);\n            }\n\n            logger.Info(\"LocalWorkerService stopped.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/LocalWorkerServiceInstaller.cs",
    "content": "﻿namespace OJS.Workers.LocalWorker\n{\n    using System.ComponentModel;\n    using System.Configuration.Install;\n    using System.ServiceProcess;\n\n    [RunInstaller(true)]\n    public class LocalWorkerServiceInstaller : Installer\n    {\n        public LocalWorkerServiceInstaller()\n        {\n            var serviceProcessInstaller = new ServiceProcessInstaller\n            {\n                Account = ServiceAccount.LocalSystem,\n                Password = null,\n                Username = null\n            };\n\n            var serviceInstaller = new ServiceInstaller\n            {\n                StartType = ServiceStartMode.Automatic,\n                DisplayName = \"OJS Local Worker Service\",\n                ServiceName = \"OJS Local Worker Service\",\n                Description =\n                    \"Evaluates submissions for the Open Judge System and executes processes in a sandboxed environment. Processes are executed on the current machine.\",\n            };\n\n            this.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/OJS.Workers.LocalWorker.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{5D3361F8-F50B-415F-826A-724DCDAA4A89}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.LocalWorker</RootNamespace>\n    <AssemblyName>OJS.Workers.LocalWorker</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\log4net.2.0.5\\lib\\net45-full\\log4net.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.Install\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"IJob.cs\" />\n    <Compile Include=\"LocalWorkerService.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"LocalWorkerServiceInstaller.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Settings.cs\" />\n    <Compile Include=\"SubmissionJob.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"Batch Files\\InstallService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Batch Files\\StopService.bat\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Contracts\\OJS.Data.Contracts.csproj\">\n      <Project>{8c4bf453-24ef-46f3-b947-31505fb905de}</Project>\n      <Name>OJS.Data.Contracts</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data.Models\\OJS.Data.Models.csproj\">\n      <Project>{341ca732-d483-4487-923e-27ed2a6e9a4f}</Project>\n      <Name>OJS.Data.Models</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Data\\OJS.Data\\OJS.Data.csproj\">\n      <Project>{1807194c-9e25-4365-b3be-fe1df627612b}</Project>\n      <Name>OJS.Data</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Checkers\\OJS.Workers.Checkers.csproj\">\n      <Project>{93ec1d66-2ce1-4682-ac09-c8c40178a9ad}</Project>\n      <Name>OJS.Workers.Checkers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7f714d0b-ce81-4dd7-b6b2-62080fe22cd8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\">\n      <Project>{8570183b-9d7a-408d-9ea6-f86f59b05a10}</Project>\n      <Name>OJS.Workers.Compilers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.ExecutionStrategies\\OJS.Workers.ExecutionStrategies.csproj\">\n      <Project>{69966098-E5B2-46CD-88E9-1F79B245ADE0}</Project>\n      <Name>OJS.Workers.ExecutionStrategies</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Executors\\OJS.Workers.Executors.csproj\">\n      <Project>{cda78d62-7210-45ca-b3e5-9f6a5dea5734}</Project>\n      <Name>OJS.Workers.Executors</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/Program.cs",
    "content": "﻿[assembly: log4net.Config.XmlConfigurator(Watch = true)]\n\nnamespace OJS.Workers.LocalWorker\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.ServiceProcess;\n\n    internal static class Program\n    {\n        /// <summary>\n        /// The main entry point for the service.\n        /// </summary>\n        private static void Main()\n        {\n            try\n            {\n                // Explicitly set App.config file location to prevent confusion\n                // ReSharper disable once AssignNullToNotNullAttribute\n                Environment.CurrentDirectory = Path.GetDirectoryName(typeof(Program).Assembly.Location);\n                AppDomain.CurrentDomain.SetData(\"APP_CONFIG_FILE\", \"OJS.Workers.LocalWorker.exe.config\");\n\n                // Run the service\n                var servicesToRun = new ServiceBase[] { new LocalWorkerService() };\n                ServiceBase.Run(servicesToRun);\n            }\n            catch (Exception exception)\n            {\n                const string Source = \"OJS.Workers.LocalWorker\";\n                if (!EventLog.SourceExists(Source))\n                {\n                    EventLog.CreateEventSource(Source, \"Application\");\n                }\n\n                EventLog.WriteEntry(Source, exception.ToString(), EventLogEntryType.Error);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.LocalWorker\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.LocalWorker\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"13e5111e-10f5-4a8d-9c4d-1282bead2c8a\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/Settings.cs",
    "content": "﻿namespace OJS.Workers.LocalWorker\n{\n    using System;\n    using System.Configuration;\n\n    using log4net;\n\n    public static class Settings\n    {\n        private static readonly ILog Logger;\n\n        static Settings()\n        {\n            Logger = LogManager.GetLogger(\"Settings\");\n        }\n\n        public static string CSharpCompilerPath => GetSetting(\"CSharpCompilerPath\");\n\n        public static string CPlusPlusGccCompilerPath => GetSetting(\"CPlusPlusGccCompilerPath\");\n\n        public static string MsBuildExecutablePath => GetSetting(\"MsBuildExecutablePath\");\n\n        public static string NuGetExecutablePath => GetSetting(\"NuGetExecutablePath\");\n\n        public static string NodeJsExecutablePath => GetSetting(\"NodeJsExecutablePath\");\n\n        public static string MochaModulePath => GetSetting(\"MochaModulePath\");\n\n        public static string ChaiModulePath => GetSetting(\"ChaiModulePath\");\n\n        public static string IoJsExecutablePath => GetSetting(\"IoJsExecutablePath\");\n\n        public static string JsDomModulePath => GetSetting(\"JsDomModulePath\");\n\n        public static string JQueryModulePath => GetSetting(\"JQueryModulePath\");\n\n        public static string HandlebarsModulePath => GetSetting(\"HandlebarsModulePath\");\n\n        public static string SinonModulePath => GetSetting(\"SinonModulePath\");\n\n        public static string SinonChaiModulePath => GetSetting(\"SinonChaiModulePath\");\n\n        public static string UnderscoreModulePath => GetSetting(\"UnderscoreModulePath\");\n\n        public static string JavaCompilerPath => GetSetting(\"JavaCompilerPath\");\n\n        public static string JavaExecutablePath => GetSetting(\"JavaExecutablePath\");\n\n        public static string PythonExecutablePath => GetSetting(\"PythonExecutablePath\");\n\n        public static string PhpCgiExecutablePath => GetSetting(\"PhpCgiExecutablePath\");\n\n        public static string PhpCliExecutablePath => GetSetting(\"PhpCliExecutablePath\");\n\n        public static int ThreadsCount => GetSettingOrDefault(\"ThreadsCount\", 2);\n\n        private static string GetSetting(string settingName)\n        {\n            if (ConfigurationManager.AppSettings[settingName] == null)\n            {\n                Logger.FatalFormat(\"{0} setting not found in App.config file!\", settingName);\n                throw new Exception($\"{settingName} setting not found in App.config file!\");\n            }\n\n            return ConfigurationManager.AppSettings[settingName];\n        }\n\n        private static T GetSettingOrDefault<T>(string settingName, T defaultValue)\n        {\n            if (ConfigurationManager.AppSettings[settingName] == null)\n            {\n                return defaultValue;\n            }\n\n            return (T)Convert.ChangeType(ConfigurationManager.AppSettings[settingName], typeof(T));\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/SubmissionJob.cs",
    "content": "﻿namespace OJS.Workers.LocalWorker\n{\n    using System;\n    using System.Linq;\n    using System.Threading;\n\n    using log4net;\n\n    using OJS.Common;\n    using OJS.Common.Models;\n    using OJS.Data;\n    using OJS.Data.Models;\n    using OJS.Workers.ExecutionStrategies;\n\n    using ExecutionContext = OJS.Workers.ExecutionStrategies.ExecutionContext;\n\n    public class SubmissionJob : IJob\n    {\n        private readonly ILog logger;\n\n        private readonly SynchronizedHashtable processingSubmissionIds;\n\n        private bool stopping;\n\n        public SubmissionJob(string name, SynchronizedHashtable processingSubmissionIds)\n        {\n            this.Name = name;\n\n            this.logger = LogManager.GetLogger(name);\n            this.logger.Info(\"SubmissionJob initializing...\");\n\n            this.stopping = false;\n            this.processingSubmissionIds = processingSubmissionIds;\n\n            this.logger.Info(\"SubmissionJob initialized.\");\n        }\n\n        public string Name { get; set; }\n\n        public void Start()\n        {\n            this.logger.Info(\"SubmissionJob starting...\");\n            while (!this.stopping)\n            {\n                var data = new OjsData();\n                Submission submission;\n                try\n                {\n                    submission = data.Submissions.GetSubmissionForProcessing();\n                }\n                catch (Exception exception)\n                {\n                    this.logger.FatalFormat(\"Unable to get submission for processing. Exception: {0}\", exception);\n                    throw;\n                }\n\n                if (submission == null)\n                {\n                    // No submission available. Wait 1 second and try again.\n                    Thread.Sleep(1000);\n                    continue;\n                }\n\n                if (!this.processingSubmissionIds.Add(submission.Id))\n                {\n                    // Other thread is processing the same submission. Wait the other thread to set Processing to true and then try again.\n                    Thread.Sleep(100);\n                    continue;\n                }\n\n                try\n                {\n                    submission.Processing = true;\n                    data.SaveChanges();\n                }\n                catch (Exception exception)\n                {\n                    this.logger.Error(\"Unable to set dbSubmission.Processing to true! Exception: {0}\", exception);\n                    this.processingSubmissionIds.Remove(submission.Id);\n                    throw;\n                }\n\n                submission.ProcessingComment = null;\n                try\n                {\n                    data.TestRuns.DeleteBySubmissionId(submission.Id);\n                    this.ProcessSubmission(submission);\n                    data.SaveChanges();\n                }\n                catch (Exception exception)\n                {\n                    this.logger.ErrorFormat(\"ProcessSubmission on submission №{0} has thrown an exception: {1}\", submission.Id, exception);\n                    submission.ProcessingComment = string.Format(\"Exception in ProcessSubmission: {0}\", exception.Message);\n                }\n\n                try\n                {\n                    this.CalculatePointsForSubmission(submission);\n                }\n                catch (Exception exception)\n                {\n                    this.logger.ErrorFormat(\"CalculatePointsForSubmission on submission №{0} has thrown an exception: {1}\", submission.Id, exception);\n                    submission.ProcessingComment = string.Format(\"Exception in CalculatePointsForSubmission: {0}\", exception.Message);\n                }\n\n                submission.Processed = true;\n                submission.Processing = false;\n\n                try\n                {\n                    data.SaveChanges();\n                }\n                catch (Exception exception)\n                {\n                    this.logger.ErrorFormat(\"Unable to save changes to the submission №{0}! Exception: {1}\", submission.Id, exception);\n                }\n\n                // Next line removes the submission from the list. Fixes problem with retesting submissions.\n                this.processingSubmissionIds.Remove(submission.Id);\n            }\n\n            this.logger.Info(\"SubmissionJob stopped.\");\n        }\n\n        public void Stop()\n        {\n            this.stopping = true;\n        }\n\n        private static string GetCompilerPath(CompilerType type)\n        {\n            switch (type)\n            {\n                case CompilerType.None:\n                    return null;\n                case CompilerType.CSharp:\n                    return Settings.CSharpCompilerPath;\n                case CompilerType.MsBuild:\n                    return Settings.MsBuildExecutablePath;\n                case CompilerType.CPlusPlusGcc:\n                    return Settings.CPlusPlusGccCompilerPath;\n                case CompilerType.Java:\n                case CompilerType.JavaZip:\n                    return Settings.JavaCompilerPath;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(type));\n            }\n        }\n\n        private void ProcessSubmission(Submission submission)\n        {\n            // TODO: Check for N+1 queries problem\n            this.logger.InfoFormat(\"Work on submission №{0} started.\", submission.Id);\n\n            var executionStrategy = this.CreateExecutionStrategy(submission.SubmissionType.ExecutionStrategyType);\n            var context = new ExecutionContext\n            {\n                SubmissionId = submission.Id,\n                AdditionalCompilerArguments = submission.SubmissionType.AdditionalCompilerArguments,\n                CheckerAssemblyName = submission.Problem.Checker.DllFile,\n                CheckerParameter = submission.Problem.Checker.Parameter,\n                CheckerTypeName = submission.Problem.Checker.ClassName,\n                FileContent = submission.Content,\n                AllowedFileExtensions = submission.SubmissionType.AllowedFileExtensions,\n                CompilerType = submission.SubmissionType.CompilerType,\n                MemoryLimit = submission.Problem.MemoryLimit,\n                TimeLimit = submission.Problem.TimeLimit\n            };\n\n            context.Tests = submission.Problem.Tests.ToList().Select(x => new TestContext\n            {\n                Id = x.Id,\n                Input = x.InputDataAsString,\n                Output = x.OutputDataAsString,\n                IsTrialTest = x.IsTrialTest\n            });\n\n            ExecutionResult executionResult;\n            try\n            {\n                executionResult = executionStrategy.Execute(context);\n            }\n            catch (Exception exception)\n            {\n                this.logger.ErrorFormat(\"executionStrategy.Execute on submission №{0} has thrown an exception: {1}\", submission.Id, exception);\n                submission.ProcessingComment = string.Format(\"Exception in executionStrategy.Execute: {0}\", exception.Message);\n                return;\n            }\n\n            submission.IsCompiledSuccessfully = executionResult.IsCompiledSuccessfully;\n            submission.CompilerComment = executionResult.CompilerComment;\n\n            if (!executionResult.IsCompiledSuccessfully)\n            {\n                return;\n            }\n\n            foreach (var testResult in executionResult.TestResults)\n            {\n                var testRun = new TestRun\n                {\n                    CheckerComment = testResult.CheckerDetails.Comment,\n                    ExpectedOutputFragment = testResult.CheckerDetails.ExpectedOutputFragment,\n                    UserOutputFragment = testResult.CheckerDetails.UserOutputFragment,\n                    ExecutionComment = testResult.ExecutionComment,\n                    MemoryUsed = testResult.MemoryUsed,\n                    ResultType = testResult.ResultType,\n                    TestId = testResult.Id,\n                    TimeUsed = testResult.TimeUsed,\n                };\n                submission.TestRuns.Add(testRun);\n            }\n\n            this.logger.InfoFormat(\"Work on submission №{0} ended.\", submission.Id);\n        }\n\n        private void CalculatePointsForSubmission(Submission submission)\n        {\n            // Internal joke: submission.Points = new Random().Next(0, submission.Problem.MaximumPoints + 1) + Weather.Instance.Today(\"Sofia\").IsCloudy ? 10 : 0;\n            if (submission.Problem.Tests.Count == 0 || submission.TestsWithoutTrialTestsCount == 0)\n            {\n                submission.Points = 0;\n            }\n            else\n            {\n                submission.Points = (submission.CorrectTestRunsWithoutTrialTestsCount * submission.Problem.MaximumPoints) / submission.TestsWithoutTrialTestsCount;\n            }\n        }\n\n        private IExecutionStrategy CreateExecutionStrategy(ExecutionStrategyType type)\n        {\n            IExecutionStrategy executionStrategy;\n            switch (type)\n            {\n                case ExecutionStrategyType.CompileExecuteAndCheck:\n                    executionStrategy = new CompileExecuteAndCheckExecutionStrategy(GetCompilerPath);\n                    break;\n                case ExecutionStrategyType.CSharpTestRunner:\n                    executionStrategy = new CSharpTestRunnerExecutionStrategy(GetCompilerPath);\n                    break;\n                case ExecutionStrategyType.NodeJsPreprocessExecuteAndCheck:\n                    executionStrategy = new NodeJsPreprocessExecuteAndCheckExecutionStrategy(Settings.NodeJsExecutablePath);\n                    break;\n                case ExecutionStrategyType.NodeJsPreprocessExecuteAndRunUnitTestsWithMocha:\n                    executionStrategy = new NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy(\n                        Settings.NodeJsExecutablePath,\n                        Settings.MochaModulePath,\n                        Settings.ChaiModulePath);\n                    break;\n                case ExecutionStrategyType.IoJsPreprocessExecuteAndRunJsDomUnitTests:\n                    executionStrategy = new IoJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy(\n                        Settings.IoJsExecutablePath,\n                        Settings.MochaModulePath,\n                        Settings.ChaiModulePath,\n                        Settings.JsDomModulePath,\n                        Settings.JQueryModulePath,\n                        Settings.HandlebarsModulePath,\n                        Settings.SinonModulePath,\n                        Settings.SinonChaiModulePath,\n                        Settings.UnderscoreModulePath);\n                    break;\n                case ExecutionStrategyType.JavaPreprocessCompileExecuteAndCheck:\n                    executionStrategy = new JavaPreprocessCompileExecuteAndCheckExecutionStrategy(Settings.JavaExecutablePath, GetCompilerPath);\n                    break;\n                case ExecutionStrategyType.JavaZipFileCompileExecuteAndCheck:\n                    executionStrategy = new JavaZipFileCompileExecuteAndCheckExecutionStrategy(Settings.JavaExecutablePath, GetCompilerPath);\n                    break;\n                case ExecutionStrategyType.PythonExecuteAndCheck:\n                    executionStrategy = new PythonExecuteAndCheckExecutionStrategy(Settings.PythonExecutablePath);\n                    break;\n                case ExecutionStrategyType.PhpCgiExecuteAndCheck:\n                    executionStrategy = new PhpCgiExecuteAndCheckExecutionStrategy(Settings.PhpCgiExecutablePath);\n                    break;\n                case ExecutionStrategyType.PhpCliExecuteAndCheck:\n                    executionStrategy = new PhpCliExecuteAndCheckExecutionStrategy(Settings.PhpCliExecutablePath);\n                    break;\n                case ExecutionStrategyType.DoNothing:\n                    executionStrategy = new DoNothingExecutionStrategy();\n                    break;\n                case ExecutionStrategyType.RemoteExecution:\n                    executionStrategy = new RemoteExecutionStrategy();\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n\n            return executionStrategy;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.LocalWorker/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" />\n  <package id=\"log4net\" version=\"2.0.10\" targetFramework=\"net45\" />\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/CSharpCompileDisassemblePlagiarismDetector.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using OJS.Workers.Common;\n    using OJS.Workers.Tools.Disassemblers.Contracts;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public class CSharpCompileDisassemblePlagiarismDetector : CompileDisassemblePlagiarismDetector\n    {\n        private const string CSharpCompilerAdditionalArguments =\n            \"/optimize+ /nologo /reference:System.Numerics.dll /reference:PowerCollections.dll\";\n\n        public CSharpCompileDisassemblePlagiarismDetector(\n            ICompiler compiler,\n            string compilerPath,\n            IDisassembler disassembler,\n            ISimilarityFinder similarityFinder)\n            : base(compiler, compilerPath, disassembler, similarityFinder)\n        {\n        }\n\n        protected override string CompilerAdditionalArguments => CSharpCompilerAdditionalArguments;\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/CompileDisassemblePlagiarismDetector.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Common;\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n    using OJS.Workers.Tools.Disassemblers;\n    using OJS.Workers.Tools.Disassemblers.Contracts;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public abstract class CompileDisassemblePlagiarismDetector : IPlagiarismDetector\n    {\n        private readonly ISimilarityFinder similarityFinder;\n        private readonly IDictionary<string, string> sourcesCache;\n\n        protected CompileDisassemblePlagiarismDetector(\n            ICompiler compiler,\n            string compilerPath,\n            IDisassembler disassembler,\n            ISimilarityFinder similarityFinder)\n        {\n            this.Compiler = compiler;\n            this.CompilerPath = compilerPath;\n            this.Disassembler = disassembler;\n            this.similarityFinder = similarityFinder;\n            this.sourcesCache = new Dictionary<string, string>();\n        }\n\n        protected ICompiler Compiler { get; }\n\n        protected string CompilerPath { get; }\n\n        protected IDisassembler Disassembler { get; }\n\n        protected virtual string CompilerAdditionalArguments => null;\n\n        protected virtual string DisassemblerAdditionalArguments => null;\n\n        public PlagiarismResult DetectPlagiarism(\n            string firstSource,\n            string secondSource,\n            IEnumerable<IDetectPlagiarismVisitor> visitors = null)\n        {\n            string firstDisassembledCode;\n            if (!this.GetDisassembledCode(firstSource, out firstDisassembledCode))\n            {\n                return new PlagiarismResult(0);\n            }\n\n            string secondDisassembledCode;\n            if (!this.GetDisassembledCode(secondSource, out secondDisassembledCode))\n            {\n                return new PlagiarismResult(0);\n            }\n\n            if (visitors != null)\n            {\n                foreach (var visitor in visitors)\n                {\n                    firstDisassembledCode = visitor.Visit(firstDisassembledCode);\n                    secondDisassembledCode = visitor.Visit(secondDisassembledCode);\n                }\n            }\n\n            var differences = this.similarityFinder\n                .DiffText(firstDisassembledCode, secondDisassembledCode, true, true, true);\n\n            var differencesCount = differences.Sum(difference => difference.DeletedA + difference.InsertedB);\n            decimal textLength = firstDisassembledCode.Length + secondDisassembledCode.Length;\n\n            var percentage = textLength > 0\n                ? ((textLength - differencesCount) / textLength) * 100\n                : 0;\n\n            return new PlagiarismResult(percentage)\n            {\n                Differences = differences,\n                FirstToCompare = firstDisassembledCode,\n                SecondToCompare = secondDisassembledCode\n            };\n        }\n\n        protected virtual bool GetDisassembledCode(string source, out string disassembledCode)\n        {\n            if (this.sourcesCache.ContainsKey(source))\n            {\n                disassembledCode = this.sourcesCache[source];\n                return true;\n            }\n\n            disassembledCode = null;\n\n            var compileResult = this.CompileCode(source);\n            if (!compileResult.IsCompiledSuccessfully)\n            {\n                return false;\n            }\n\n            var disassembleResult = this.DisassembleFile(compileResult.OutputFile);\n            if (!disassembleResult.IsDisassembledSuccessfully)\n            {\n                return false;\n            }\n\n            disassembledCode = disassembleResult.DisassembledCode;\n\n            this.sourcesCache.Add(source, disassembledCode);\n\n            return true;\n        }\n\n        protected virtual CompileResult CompileCode(string sourceCode)\n        {\n            var sourceFilePath = FileHelpers.SaveStringToTempFile(sourceCode);\n\n            var compileResult = this.Compiler.Compile(\n                this.CompilerPath,\n                sourceFilePath,\n                this.CompilerAdditionalArguments);\n\n            if (File.Exists(sourceFilePath))\n            {\n                File.Delete(sourceFilePath);\n            }\n\n            return compileResult;\n        }\n\n        protected virtual DisassembleResult DisassembleFile(string compiledFilePath)\n        {\n            var disassemblerResult = this.Disassembler.Disassemble(\n                compiledFilePath,\n                this.DisassemblerAdditionalArguments);\n\n            if (File.Exists(compiledFilePath))\n            {\n                File.Delete(compiledFilePath);\n            }\n\n            return disassemblerResult;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/Contracts/IDetectPlagiarismVisitor.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat.Contracts\n{\n    public interface IDetectPlagiarismVisitor\n    {\n        string Visit(string text);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/Contracts/IPlagiarismDetector.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat.Contracts\n{\n    using System.Collections.Generic;\n\n    public interface IPlagiarismDetector\n    {\n        PlagiarismResult DetectPlagiarism(string firstSource, string secondSource, IEnumerable<IDetectPlagiarismVisitor> visitors = null);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/Contracts/IPlagiarismDetectorFactory.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat.Contracts\n{\n    public interface IPlagiarismDetectorFactory\n    {\n        IPlagiarismDetector CreatePlagiarismDetector(PlagiarismDetectorCreationContext context);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/JavaCompileDisassemblePlagiarismDetector.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.IO;\n    using System.Text;\n\n    using OJS.Common.Extensions;\n    using OJS.Workers.Common;\n    using OJS.Workers.Common.Helpers;\n    using OJS.Workers.Tools.Disassemblers;\n    using OJS.Workers.Tools.Disassemblers.Contracts;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public class JavaCompileDisassemblePlagiarismDetector : CompileDisassemblePlagiarismDetector\n    {\n        // http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javap.html\n        private const string JavaDisassemblerAllClassesAndMembersArgument = \"-p\";\n        private const string JavaCompiledFilesSearchPattern = \"*.class\";\n\n        private string workingDirectory;\n\n        public JavaCompileDisassemblePlagiarismDetector(\n            ICompiler compiler,\n            string compilerPath,\n            IDisassembler disassembler,\n            ISimilarityFinder similarityFinder)\n            : base(compiler, compilerPath, disassembler, similarityFinder)\n        {\n        }\n\n        ~JavaCompileDisassemblePlagiarismDetector()\n        {\n            DirectoryHelpers.SafeDeleteDirectory(this.workingDirectory, true);\n        }\n\n        protected override string DisassemblerAdditionalArguments => JavaDisassemblerAllClassesAndMembersArgument;\n\n        protected override CompileResult CompileCode(string sourceCode)\n        {\n            // First delete old working directory\n            DirectoryHelpers.SafeDeleteDirectory(this.workingDirectory, true);\n\n            this.workingDirectory = DirectoryHelpers.CreateTempDirectory();\n\n            var sourceFilePath = JavaCodePreprocessorHelper.CreateSubmissionFile(sourceCode, this.workingDirectory);\n\n            var compileResult = this.Compiler.Compile(\n                this.CompilerPath,\n                sourceFilePath,\n                this.CompilerAdditionalArguments);\n\n            return compileResult;\n        }\n\n        protected override DisassembleResult DisassembleFile(string compiledFilePath)\n        {\n            var compiledFilesToDisassemble =\n                Directory.GetFiles(this.workingDirectory, JavaCompiledFilesSearchPattern, SearchOption.AllDirectories);\n\n            var result = new DisassembleResult(compiledFilesToDisassemble.Length > 0);\n\n            var disassembledCode = new StringBuilder();\n\n            foreach (var compiledFile in compiledFilesToDisassemble)\n            {\n                var currentDisassembleResult =\n                    this.Disassembler.Disassemble(compiledFile, this.DisassemblerAdditionalArguments);\n                if (!currentDisassembleResult.IsDisassembledSuccessfully)\n                {\n                    result.IsDisassembledSuccessfully = false;\n                    break;\n                }\n\n                disassembledCode.AppendLine(currentDisassembleResult.DisassembledCode);\n            }\n\n            if (result.IsDisassembledSuccessfully)\n            {\n                result.DisassembledCode = disassembledCode.ToString();\n            }\n\n            DirectoryHelpers.SafeDeleteDirectory(this.workingDirectory, true);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/PlagiarismDetectorCreationContext.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System;\n\n    using OJS.Common.Models;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public class PlagiarismDetectorCreationContext\n    {\n        public PlagiarismDetectorCreationContext(PlagiarismDetectorType type, ISimilarityFinder similarityFinder)\n        {\n            if (similarityFinder == null)\n            {\n                throw new ArgumentNullException(nameof(similarityFinder));\n            }\n\n            this.Type = type;\n            this.SimilarityFinder = similarityFinder;\n        }\n\n        public PlagiarismDetectorType Type { get; set; }\n\n        public string CompilerPath { get; set; }\n\n        public string DisassemblerPath { get; set; }\n\n        public ISimilarityFinder SimilarityFinder { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/PlagiarismDetectorFactory.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System;\n\n    using OJS.Common.Models;\n    using OJS.Workers.Compilers;\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n    using OJS.Workers.Tools.Disassemblers;\n\n    public class PlagiarismDetectorFactory : IPlagiarismDetectorFactory\n    {\n        public IPlagiarismDetector CreatePlagiarismDetector(PlagiarismDetectorCreationContext context)\n        {\n            if (context == null)\n            {\n                throw new ArgumentNullException(nameof(context));\n            }\n\n            switch (context.Type)\n            {\n                case PlagiarismDetectorType.CSharpCompileDisassemble:\n                    return new CSharpCompileDisassemblePlagiarismDetector(\n                        new CSharpCompiler(),\n                        context.CompilerPath,\n                        new DotNetDisassembler(context.DisassemblerPath),\n                        context.SimilarityFinder);\n                case PlagiarismDetectorType.JavaCompileDisassemble:\n                    return new JavaCompileDisassemblePlagiarismDetector(\n                        new JavaCompiler(),\n                        context.CompilerPath,\n                        new JavaDisassembler(context.DisassemblerPath),\n                        context.SimilarityFinder);\n                case PlagiarismDetectorType.PlainText:\n                    return new PlainTextPlagiarismDetector(context.SimilarityFinder);\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(context), context.Type, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/PlagiarismResult.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.Collections.Generic;\n\n    using OJS.Workers.Tools.Similarity;\n\n    public class PlagiarismResult\n    {\n        public PlagiarismResult(decimal similarityPercentage)\n        {\n            this.SimilarityPercentage = similarityPercentage;\n        }\n\n        public decimal SimilarityPercentage { get; set; }\n\n        public string FirstToCompare { get; set; }\n\n        public string SecondToCompare { get; set; }\n\n        public IReadOnlyCollection<Difference> Differences { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/PlainTextPlagiarismDetector.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n    using OJS.Workers.Tools.Similarity;\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    public class PlainTextPlagiarismDetector : IPlagiarismDetector\n    {\n        private readonly ISimilarityFinder similarityFinder;\n\n        public PlainTextPlagiarismDetector()\n            : this(new SimilarityFinder())\n        {\n        }\n\n        public PlainTextPlagiarismDetector(ISimilarityFinder similarityFinder)\n        {\n            this.similarityFinder = similarityFinder;\n        }\n\n        // TODO: This method is very similar to CSharpCompileDecompilePlagiarismDetector.DetectPlagiarism\n        public PlagiarismResult DetectPlagiarism(string firstSource, string secondSource, IEnumerable<IDetectPlagiarismVisitor> visitors = null)\n        {\n            if (visitors != null)\n            {\n                foreach (var visitor in visitors)\n                {\n                    firstSource = visitor.Visit(firstSource);\n                    secondSource = visitor.Visit(secondSource);\n                }\n            }\n\n            var differences = this.similarityFinder.DiffText(firstSource, secondSource, true, true, true);\n\n            var differencesCount = differences.Sum(difference => difference.DeletedA + difference.InsertedB);\n            decimal textLength = firstSource.Length + secondSource.Length;\n\n            var percentage = textLength > 0\n                ? ((textLength - differencesCount) / textLength) * 100\n                : 0;\n\n            return new PlagiarismResult(percentage)\n            {\n                Differences = differences,\n                FirstToCompare = firstSource,\n                SecondToCompare = secondSource\n            };\n        }\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/SortAndTrimLinesVisitor.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Text;\n\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n\n    public class SortAndTrimLinesVisitor : IDetectPlagiarismVisitor\n    {\n        public string Visit(string text)\n        {\n            text = text.Trim();\n\n            var lines = new List<string>();\n            using (var stringReader = new StringReader(text))\n            {\n                string line;\n                while ((line = stringReader.ReadLine()) != null)\n                {\n                    line = line.Trim();\n                    lines.Add(line);\n                }\n            }\n\n            lines.Sort();\n\n            var stringBuilder = new StringBuilder();\n            foreach (var line in lines)\n            {\n                stringBuilder.AppendLine(line);\n            }\n\n            return stringBuilder.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/AntiCheat/SortTrimLinesAndRemoveBlankLinesVisitor.cs",
    "content": "﻿namespace OJS.Workers.Tools.AntiCheat\n{\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Text;\n\n    using OJS.Workers.Tools.AntiCheat.Contracts;\n\n    public class SortTrimLinesAndRemoveBlankLinesVisitor : IDetectPlagiarismVisitor\n    {\n        public string Visit(string text)\n        {\n            var lines = new List<string>();\n            using (var stringReader = new StringReader(text))\n            {\n                string line;\n                while ((line = stringReader.ReadLine()) != null)\n                {\n                    if (!string.IsNullOrWhiteSpace(line))\n                    {\n                        lines.Add(line.Trim());\n                    }\n                }\n            }\n\n            lines.Sort();\n\n            var stringBuilder = new StringBuilder();\n            foreach (var line in lines)\n            {\n                stringBuilder.AppendLine(line);\n            }\n\n            return stringBuilder.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Disassemblers/Contracts/IDisassembler.cs",
    "content": "﻿namespace OJS.Workers.Tools.Disassemblers.Contracts\n{\n    public interface IDisassembler\n    {\n        DisassembleResult Disassemble(string compiledFilePath, string additionalArguments = null);\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Disassemblers/DisassembleResult.cs",
    "content": "﻿namespace OJS.Workers.Tools.Disassemblers\n{\n    public class DisassembleResult\n    {\n        public DisassembleResult(bool isDisassembledSuccessfully, string disassembledCode = null)\n        {\n            this.IsDisassembledSuccessfully = isDisassembledSuccessfully;\n            this.DisassembledCode = disassembledCode;\n        }\n\n        public bool IsDisassembledSuccessfully { get; set; }\n\n        public string DisassembledCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Disassemblers/Disassembler.cs",
    "content": "﻿namespace OJS.Workers.Tools.Disassemblers\n{\n    using System;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Text;\n    using System.Threading;\n\n    using OJS.Common;\n    using OJS.Workers.Tools.Disassemblers.Contracts;\n\n    public abstract class Disassembler : IDisassembler\n    {\n        private const int ProcessSuccessExitCode = 0;\n\n        protected Disassembler(string disassemblerPath)\n        {\n            if (!File.Exists(disassemblerPath))\n            {\n                throw new ArgumentException(\n                    $\"Disassembler not found in: {disassemblerPath}\",\n                    nameof(disassemblerPath));\n            }\n\n            this.DisassemblerPath = disassemblerPath;\n        }\n\n        protected string DisassemblerPath { get; }\n\n        public DisassembleResult Disassemble(string compiledFilePath, string additionalArguments = null)\n        {\n            if (!File.Exists(compiledFilePath))\n            {\n                throw new ArgumentException(\n                    $\"Compiled file not found in: {compiledFilePath}.\",\n                    nameof(compiledFilePath));\n            }\n\n            var workingDirectory = new FileInfo(this.DisassemblerPath).DirectoryName;\n\n            var arguments = this.BuildDisassemblerArguments(compiledFilePath, additionalArguments);\n\n            var disassemblerProcessStartInfo =\n                new ProcessStartInfo(this.DisassemblerPath)\n                {\n                    RedirectStandardOutput = true,\n                    UseShellExecute = false,\n                    CreateNoWindow = true,\n                    WindowStyle = ProcessWindowStyle.Hidden,\n                    WorkingDirectory = workingDirectory,\n                    Arguments = arguments\n                };\n\n            this.UpdateDisassemblerProcessStartInfo(disassemblerProcessStartInfo);\n\n            string disassambledCode;\n            var isDisassembledSuccessfully =\n                this.ExecuteDisassemblerProcess(disassemblerProcessStartInfo, out disassambledCode);\n\n            return new DisassembleResult(isDisassembledSuccessfully, disassambledCode);\n        }\n\n        protected abstract string BuildDisassemblerArguments(string inputFilePath, string additionalArguments);\n\n        protected virtual void UpdateDisassemblerProcessStartInfo(ProcessStartInfo disassemblerProcessStartInfo)\n        {\n        }\n\n        protected virtual bool ExecuteDisassemblerProcess(\n            ProcessStartInfo disassemblerProcessStartInfo,\n            out string disassembledCode)\n        {\n            disassembledCode = null;\n\n            using (var outputWaitHandle = new AutoResetEvent(false))\n            {\n                using (var process = new Process())\n                {\n                    process.StartInfo = disassemblerProcessStartInfo;\n\n                    var outputBuilder = new StringBuilder();\n                    process.OutputDataReceived += (sender, e) =>\n                        {\n                            if (e.Data == null)\n                            {\n                                outputWaitHandle.Set();\n                            }\n                            else\n                            {\n                                outputBuilder.AppendLine(e.Data);\n                            }\n                        };\n\n                    var started = process.Start();\n                    if (started)\n                    {\n                        process.BeginOutputReadLine();\n\n                        var exited = process.WaitForExit(GlobalConstants.DefaultProcessExitTimeOutMilliseconds);\n                        if (exited)\n                        {\n                            outputWaitHandle.WaitOne(100);\n\n                            if (process.ExitCode == ProcessSuccessExitCode)\n                            {\n                                disassembledCode = outputBuilder.ToString().Trim();\n                                return true;\n                            }\n                        }\n                        else\n                        {\n                            process.CancelOutputRead();\n\n                            // Double check if the process has exited before killing it\n                            if (!process.HasExited)\n                            {\n                                process.Kill();\n                            }\n                        }\n                    }\n\n                    return false;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Disassemblers/DotNetDisassembler.cs",
    "content": "﻿namespace OJS.Workers.Tools.Disassemblers\n{\n    using System.Text;\n\n    public class DotNetDisassembler : Disassembler\n    {\n        public DotNetDisassembler(string dotNetDisassemblerPath)\n            : base(dotNetDisassemblerPath)\n        {\n        }\n\n        protected override string BuildDisassemblerArguments(string inputFilePath, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            // Input file argument\n            arguments.Append($\"\\\"{inputFilePath}\\\"\");\n            arguments.Append(' ');\n\n            // Additional disassembler arguments\n            arguments.Append(additionalArguments);\n            arguments.Append(' ');\n\n            // Displays the results to the OUT stream\n            arguments.Append(\"/text\");\n\n            return arguments.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Disassemblers/JavaDisassembler.cs",
    "content": "﻿namespace OJS.Workers.Tools.Disassemblers\n{\n    using System.Text;\n\n    public class JavaDisassembler : Disassembler\n    {\n        // https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javap.html\n        private const string PrintDisassembledCodeArgument = \"-c\";\n\n        public JavaDisassembler(string javaDisassemblerPath)\n            : base(javaDisassemblerPath)\n        {\n        }\n\n        protected override string BuildDisassemblerArguments(string inputFilePath, string additionalArguments)\n        {\n            var arguments = new StringBuilder();\n\n            arguments.Append(additionalArguments);\n            arguments.Append(' ');\n\n            arguments.Append(PrintDisassembledCodeArgument);\n            arguments.Append(' ');\n\n            // Input file argument\n            arguments.Append($\"\\\"{inputFilePath}\\\"\");\n\n            return arguments.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/OJS.Workers.Tools.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{A1F48412-495A-434C-BDD0-E70AEDAD6897}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>OJS.Workers.Tools</RootNamespace>\n    <AssemblyName>OJS.Workers.Tools</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>..\\..\\Rules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AntiCheat\\CompileDisassemblePlagiarismDetector.cs\" />\n    <Compile Include=\"AntiCheat\\Contracts\\IPlagiarismDetectorFactory.cs\" />\n    <Compile Include=\"AntiCheat\\Contracts\\IDetectPlagiarismVisitor.cs\" />\n    <Compile Include=\"AntiCheat\\Contracts\\IPlagiarismDetector.cs\" />\n    <Compile Include=\"AntiCheat\\CSharpCompileDisassemblePlagiarismDetector.cs\" />\n    <Compile Include=\"AntiCheat\\JavaCompileDisassemblePlagiarismDetector.cs\" />\n    <Compile Include=\"AntiCheat\\PlagiarismDetectorCreationContext.cs\" />\n    <Compile Include=\"AntiCheat\\PlagiarismDetectorFactory.cs\" />\n    <Compile Include=\"AntiCheat\\PlagiarismResult.cs\" />\n    <Compile Include=\"AntiCheat\\PlainTextPlagiarismDetector.cs\" />\n    <Compile Include=\"AntiCheat\\SortAndTrimLinesVisitor.cs\" />\n    <Compile Include=\"AntiCheat\\SortTrimLinesAndRemoveBlankLinesVisitor.cs\" />\n    <Compile Include=\"Disassemblers\\Contracts\\IDisassembler.cs\" />\n    <Compile Include=\"Disassemblers\\Disassembler.cs\" />\n    <Compile Include=\"Disassemblers\\DisassembleResult.cs\" />\n    <Compile Include=\"Disassemblers\\DotNetDisassembler.cs\" />\n    <Compile Include=\"Disassemblers\\JavaDisassembler.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Similarity\\DiffData.cs\" />\n    <Compile Include=\"Similarity\\Difference.cs\" />\n    <Compile Include=\"Similarity\\Contracts\\ISimilarityFinder.cs\" />\n    <Compile Include=\"Similarity\\ShortestMiddleSnakeReturnData.cs\" />\n    <Compile Include=\"Similarity\\SimilarityFinder.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\OJS.Common\\OJS.Common.csproj\">\n      <Project>{69B10B02-22CF-47D6-B5F3-8A5FFB7DC771}</Project>\n      <Name>OJS.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Common\\OJS.Workers.Common.csproj\">\n      <Project>{7F714D0B-CE81-4DD7-B6B2-62080FE22CD8}</Project>\n      <Name>OJS.Workers.Common</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\OJS.Workers.Compilers\\OJS.Workers.Compilers.csproj\">\n      <Project>{8570183B-9D7A-408D-9EA6-F86F59B05A10}</Project>\n      <Name>OJS.Workers.Compilers</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\Newtonsoft.Json.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.CodeFixes.dll\" />\n    <Analyzer Include=\"..\\..\\packages\\StyleCop.Analyzers.1.1.0-beta001\\analyzers\\dotnet\\cs\\StyleCop.Analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"OJS.Workers.Tools\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"OJS.Workers.Tools\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"21b3053a-1ac9-4d0c-b2d0-50c1b0f50083\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Similarity/Contracts/ISimilarityFinder.cs",
    "content": "﻿namespace OJS.Workers.Tools.Similarity.Contracts\n{\n    public interface ISimilarityFinder\n    {\n        /// <summary>\n        /// Find the difference in 2 text documents, comparing by textlines.\n        /// The algorithm itself is comparing 2 arrays of numbers so when comparing 2 text documents\n        /// each line is converted into a (hash) number. This hash-value is computed by storing all\n        /// textlines into a common hashtable so i can find duplicates in there, and generating a\n        /// new number each time a new textline is inserted.\n        /// </summary>\n        /// <param name=\"textA\">A-version of the text (usually the old one)</param>\n        /// <param name=\"textB\">B-version of the text (usually the new one)</param>\n        /// <param name=\"trimSpace\">When set to true, all leading and trailing whitespace characters are stripped out before the comparation is done.</param>\n        /// <param name=\"ignoreSpace\">When set to true, all whitespace characters are converted to a single space character before the comparation is done.</param>\n        /// <param name=\"ignoreCase\">When set to true, all characters are converted to their lowercase equivivalence before the comparation is done.</param>\n        /// <returns>Returns a array of Items that describe the differences.</returns>\n        Difference[] DiffText(\n            string textA,\n            string textB,\n            bool trimSpace,\n            bool ignoreSpace,\n            bool ignoreCase);\n\n        /// <summary>\n        /// Find the difference in 2 arrays of integers.\n        /// </summary>\n        /// <param name=\"arrayA\">A-version of the numbers (usually the old one)</param>\n        /// <param name=\"arrayB\">B-version of the numbers (usually the new one)</param>\n        /// <returns>Returns a array of Items that describe the differences.</returns>\n        Difference[] DiffInt(int[] arrayA, int[] arrayB);\n    }\n}"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Similarity/DiffData.cs",
    "content": "﻿namespace OJS.Workers.Tools.Similarity\n{\n    /// <summary>\n    /// Data on one input file being compared.\n    /// </summary>\n    internal class DiffData\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DiffData\"/> class.\n        /// </summary>\n        /// <param name=\"initData\">reference to the buffer</param>\n        internal DiffData(int[] initData)\n        {\n            this.Data = initData;\n            this.Length = initData.Length;\n            this.Modified = new bool[this.Length + 2];\n        }\n\n        /// <summary>\n        /// Gets or sets number of elements (lines).\n        /// </summary>\n        internal int Length { get; set; }\n\n        /// <summary>\n        /// Gets or sets buffer of numbers that will be compared.\n        /// </summary>\n        internal int[] Data { get; set; }\n\n        /// <summary>\n        /// Gets or sets array of booleans that flag for modified data.\n        /// This is the result of the diff.\n        /// This means deletedA in the first Data or inserted in the second Data.\n        /// </summary>\n        internal bool[] Modified { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Similarity/Difference.cs",
    "content": "﻿namespace OJS.Workers.Tools.Similarity\n{\n    /// <summary>\n    /// Details of one difference.\n    /// </summary>\n    public struct Difference\n    {\n        /// <summary>\n        /// Gets or sets start line number in Data A.\n        /// </summary>\n        public int StartA { get; set; }\n\n        /// <summary>\n        /// Gets or sets start line number in Data B.\n        /// </summary>\n        public int StartB { get; set; }\n\n        /// <summary>\n        /// Gets or sets number of changes in Data A.\n        /// </summary>\n        public int DeletedA { get; set; }\n\n        /// <summary>\n        /// Gets or sets number of changes in Data B.\n        /// </summary>\n        public int InsertedB { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Similarity/ShortestMiddleSnakeReturnData.cs",
    "content": "﻿namespace OJS.Workers.Tools.Similarity\n{\n    /// <summary>\n    /// Shortest Middle Snake Return Data\n    /// </summary>\n    internal struct ShortestMiddleSnakeReturnData\n    {\n        public int X { get; set; }\n\n        public int Y { get; set; }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/Similarity/SimilarityFinder.cs",
    "content": "﻿namespace OJS.Workers.Tools.Similarity\n{\n    using System;\n    using System.Collections;\n    using System.Text.RegularExpressions;\n\n    using OJS.Workers.Tools.Similarity.Contracts;\n\n    /// <summary>\n    /// This Class implements the Difference Algorithm published in\n    /// \"An O(ND) Difference Algorithm and its Variations\" by Eugene Myers\n    /// Algorithmica Vol. 1 No. 2, 1986, p 251.\n    /// There are many C, Java, Lisp implementations public available but they all seem to come\n    /// from the same source (diffutils) that is under the (unfree) GNU public License\n    /// and cannot be reused as a sourcecode for a commercial application.\n    /// There are very old C implementations that use other (worse) algorithms.\n    /// Microsoft also published sourcecode of a diff-tool (windiff) that uses some tree data.\n    /// Also, a direct transfer from a C source to C# is not easy because there is a lot of pointer\n    /// arithmetic in the typical C solutions and i need a managed solution.\n    /// These are the reasons why I implemented the original published algorithm from the scratch and\n    /// make it available without the GNU license limitations.\n    /// I do not need a high performance diff tool because it is used only sometimes.\n    /// I will do some performace tweaking when needed.\n    /// The algorithm itself is comparing 2 arrays of numbers so when comparing 2 text documents\n    /// each line is converted into a (hash) number. See DiffText().\n    /// Some chages to the original algorithm:\n    /// The original algorithm was described using a recursive approach and comparing zero indexed arrays.\n    /// Extracting sub-arrays and rejoining them is very performance and memory intensive so the same\n    /// (readonly) data arrays are passed around together with their lower and upper bounds.\n    /// This circumstance makes the LCS and SMS functions more complicate.\n    /// I added some code to the LCS function to get a fast response on sub-arrays that are identical,\n    /// completely deleted or inserted.\n    /// The result from a comparisation is stored in 2 arrays that flag for modified (deleted or inserted)\n    /// lines in the 2 data arrays. These bits are then analyzed to produce a array of Item objects.\n    /// Further possible optimizations:\n    /// (first rule: don't do it; second: don't do it yet)\n    /// The arrays DataA and DataB are passed as parameters, but are never changed after the creation\n    /// so they can be members of the class to avoid the parameter overhead.\n    /// In SMS is a lot of boundary arithmetic in the for-D and for-k loops that can be done by increment\n    /// and decrement of local variables.\n    /// The DownVector and UpVector arrays are always created and destroyed each time the SMS gets called.\n    /// It is possible to reuse them when transferring them to members of the class.\n    /// See TODO: hints.\n    /// diff.cs: A port of the algorithm to C#\n    /// Copyright (c) by Matthias Hertel, http://www.mathertel.de\n    /// This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx\n    /// </summary>\n    public class SimilarityFinder : ISimilarityFinder\n    {\n        /// <summary>\n        /// Find the difference in 2 text documents, comparing by textlines.\n        /// The algorithm itself is comparing 2 arrays of numbers so when comparing 2 text documents\n        /// each line is converted into a (hash) number. This hash-value is computed by storing all\n        /// textlines into a common hashtable so i can find duplicates in there, and generating a\n        /// new number each time a new textline is inserted.\n        /// </summary>\n        /// <param name=\"textA\">A-version of the text (usually the old one)</param>\n        /// <param name=\"textB\">B-version of the text (usually the new one)</param>\n        /// <param name=\"trimSpace\">When set to true, all leading and trailing whitespace characters are stripped out before the comparation is done.</param>\n        /// <param name=\"ignoreSpace\">When set to true, all whitespace characters are converted to a single space character before the comparation is done.</param>\n        /// <param name=\"ignoreCase\">When set to true, all characters are converted to their lowercase equivivalence before the comparation is done.</param>\n        /// <returns>Returns a array of Items that describe the differences.</returns>\n        public Difference[] DiffText(\n            string textA,\n            string textB,\n            bool trimSpace,\n            bool ignoreSpace,\n            bool ignoreCase)\n        {\n            // prepare the input-text and convert to comparable numbers.\n            var h = new Hashtable(textA.Length + textB.Length);\n\n            // The A-Version of the data (original data) to be compared.\n            var dataA = new DiffData(this.DiffCodes(textA, h, trimSpace, ignoreSpace, ignoreCase));\n\n            // The B-Version of the data (modified data) to be compared.\n            var dataB = new DiffData(this.DiffCodes(textB, h, trimSpace, ignoreSpace, ignoreCase));\n\n            var max = dataA.Length + dataB.Length + 1;\n\n            // vector for the (0,0) to (x,y) search\n            var downVector = new int[(2 * max) + 2];\n\n            // vector for the (u,v) to (N,M) search\n            var upVector = new int[(2 * max) + 2];\n\n            this.LongestCommonSubsequence(dataA, 0, dataA.Length, dataB, 0, dataB.Length, downVector, upVector);\n\n            this.Optimize(dataA);\n            this.Optimize(dataB);\n            return this.CreateDiffs(dataA, dataB);\n        }\n\n        /// <summary>\n        /// Find the difference in 2 arrays of integers.\n        /// </summary>\n        /// <param name=\"arrayA\">A-version of the numbers (usually the old one)</param>\n        /// <param name=\"arrayB\">B-version of the numbers (usually the new one)</param>\n        /// <returns>Returns a array of Items that describe the differences.</returns>\n        public Difference[] DiffInt(int[] arrayA, int[] arrayB)\n        {\n            // The A-Version of the data (original data) to be compared.\n            var dataA = new DiffData(arrayA);\n\n            // The B-Version of the data (modified data) to be compared.\n            var dataB = new DiffData(arrayB);\n\n            var max = dataA.Length + dataB.Length + 1;\n\n            // vector for the (0,0) to (x,y) search\n            var downVector = new int[(2 * max) + 2];\n\n            // vector for the (u,v) to (N,M) search\n            var upVector = new int[(2 * max) + 2];\n\n            this.LongestCommonSubsequence(dataA, 0, dataA.Length, dataB, 0, dataB.Length, downVector, upVector);\n            return this.CreateDiffs(dataA, dataB);\n        }\n\n        /// <summary>\n        /// This function converts all textlines of the text into unique numbers for every unique textline\n        /// so further work can work only with simple numbers.\n        /// </summary>\n        /// <param name=\"text\">The input text</param>\n        /// <param name=\"usedTextlines\">This extern initialized hashtable is used for storing all ever used textlines.</param>\n        /// <param name=\"trimSpace\">Ignore leading and trailing space characters</param>\n        /// <param name=\"ignoreSpace\">Ignore spaces</param>\n        /// <param name=\"ignoreCase\">Ignore text case</param>\n        /// <returns>a array of integers.</returns>\n        private int[] DiffCodes(string text, Hashtable usedTextlines, bool trimSpace, bool ignoreSpace, bool ignoreCase)\n        {\n            // get all codes of the text\n            int lastUsedCode = usedTextlines.Count;\n\n            // strip off all cr, only use lf as textline separator.\n            text = text.Replace(\"\\r\", string.Empty);\n            var lines = text.Split('\\n');\n\n            var codes = new int[lines.Length];\n\n            for (int i = 0; i < lines.Length; ++i)\n            {\n                var s = lines[i];\n                if (trimSpace)\n                {\n                    s = s.Trim();\n                }\n\n                if (ignoreSpace)\n                {\n                    s = Regex.Replace(s, \"\\\\s+\", \" \"); // TODO: optimization: faster blank removal.\n                }\n\n                if (ignoreCase)\n                {\n                    s = s.ToLower();\n                }\n\n                var code = usedTextlines[s];\n                if (code == null)\n                {\n                    lastUsedCode++;\n                    usedTextlines[s] = lastUsedCode;\n                    codes[i] = lastUsedCode;\n                }\n                else\n                {\n                    codes[i] = (int)code;\n                }\n            }\n\n            return codes;\n        }\n\n        /// <summary>\n        /// This is the algorithm to find the Shortest Middle Snake (SMS).\n        /// </summary>\n        /// <param name=\"dataA\">sequence A</param>\n        /// <param name=\"lowerA\">lower bound of the actual range in DataA</param>\n        /// <param name=\"upperA\">upper bound of the actual range in DataA (exclusive)</param>\n        /// <param name=\"dataB\">sequence B</param>\n        /// <param name=\"lowerB\">lower bound of the actual range in DataB</param>\n        /// <param name=\"upperB\">upper bound of the actual range in DataB (exclusive)</param>\n        /// <param name=\"downVector\">a vector for the (0,0) to (x,y) search. Passed as a parameter for speed reasons.</param>\n        /// <param name=\"upVector\">a vector for the (u,v) to (N,M) search. Passed as a parameter for speed reasons.</param>\n        /// <returns>a MiddleSnakeData record containing x,y and u,v</returns>\n        private ShortestMiddleSnakeReturnData ShortestMiddleSnake(\n            DiffData dataA,\n            int lowerA,\n            int upperA,\n            DiffData dataB,\n            int lowerB,\n            int upperB,\n            int[] downVector,\n            int[] upVector)\n        {\n            var ret = default(ShortestMiddleSnakeReturnData);\n            int max = dataA.Length + dataB.Length + 1;\n\n            int downK = lowerA - lowerB; // the k-line to start the forward search\n            int upK = upperA - upperB; // the k-line to start the reverse search\n\n            int delta = (upperA - lowerA) - (upperB - lowerB);\n            bool oddDelta = (delta & 1) != 0;\n\n            // The vectors in the publication accepts negative indexes. the vectors implemented here are 0-based\n            // and are access using a specific offset: UpOffset UpVector and DownOffset for DownVektor\n            int downOffset = max - downK;\n            int upOffset = max - upK;\n\n            int maxD = ((upperA - lowerA + upperB - lowerB) / 2) + 1;\n\n            // Debug.Write(2, \"SMS\", String.Format(\"Search the box: A[{0}-{1}] to B[{2}-{3}]\", LowerA, UpperA, LowerB, UpperB));\n\n            // init vectors\n            downVector[downOffset + downK + 1] = lowerA;\n            upVector[upOffset + upK - 1] = upperA;\n\n            for (int d = 0; d <= maxD; d++)\n            {\n                // Extend the forward path.\n                for (int k = downK - d; k <= downK + d; k += 2)\n                {\n                    // Debug.Write(0, \"SMS\", \"extend forward path \" + k.ToString());\n\n                    // find the only or better starting point\n                    int x;\n                    if (k == downK - d)\n                    {\n                        x = downVector[downOffset + k + 1]; // down\n                    }\n                    else\n                    {\n                        x = downVector[downOffset + k - 1] + 1; // a step to the right\n                        if ((k < downK + d) && (downVector[downOffset + k + 1] >= x))\n                        {\n                            x = downVector[downOffset + k + 1]; // down\n                        }\n                    }\n\n                    int y = x - k;\n\n                    // find the end of the furthest reaching forward D-path in diagonal k.\n                    while ((x < upperA) && (y < upperB) && (dataA.Data[x] == dataB.Data[y]))\n                    {\n                        x++;\n                        y++;\n                    }\n\n                    downVector[downOffset + k] = x;\n\n                    // overlap ?\n                    if (oddDelta && (upK - d < k) && (k < upK + d))\n                    {\n                        if (upVector[upOffset + k] <= downVector[downOffset + k])\n                        {\n                            ret.X = downVector[downOffset + k];\n                            ret.Y = downVector[downOffset + k] - k;\n                            return ret;\n                        }\n                    }\n                }\n\n                // Extend the reverse path.\n                for (int k = upK - d; k <= upK + d; k += 2)\n                {\n                    // Debug.Write(0, \"SMS\", \"extend reverse path \" + k.ToString());\n\n                    // find the only or better starting point\n                    int x;\n                    if (k == upK + d)\n                    {\n                        x = upVector[upOffset + k - 1]; // up\n                    }\n                    else\n                    {\n                        x = upVector[upOffset + k + 1] - 1; // left\n                        if ((k > upK - d) && (upVector[upOffset + k - 1] < x))\n                        {\n                            x = upVector[upOffset + k - 1]; // up\n                        }\n                    }\n\n                    var y = x - k;\n\n                    while ((x > lowerA) && (y > lowerB) && (dataA.Data[x - 1] == dataB.Data[y - 1]))\n                    {\n                        x--;\n                        y--; // diagonal\n                    }\n\n                    upVector[upOffset + k] = x;\n\n                    // overlap ?\n                    if (!oddDelta && (downK - d <= k) && (k <= downK + d))\n                    {\n                        if (upVector[upOffset + k] <= downVector[downOffset + k])\n                        {\n                            ret.X = downVector[downOffset + k];\n                            ret.Y = downVector[downOffset + k] - k;\n                            return ret;\n                        }\n                    }\n                }\n            }\n\n            throw new Exception(\"the algorithm should never come here.\");\n        }\n\n        /// <summary>\n        /// This is the divide-and-conquer implementation of the longest common-subsequence (LCS)\n        /// algorithm.\n        /// The published algorithm passes recursively parts of the A and B sequences.\n        /// To avoid copying these arrays the lower and upper bounds are passed while the sequences stay constant.\n        /// </summary>\n        /// <param name=\"dataA\">sequence A</param>\n        /// <param name=\"lowerA\">lower bound of the actual range in DataA</param>\n        /// <param name=\"upperA\">upper bound of the actual range in DataA (exclusive)</param>\n        /// <param name=\"dataB\">sequence B</param>\n        /// <param name=\"lowerB\">lower bound of the actual range in DataB</param>\n        /// <param name=\"upperB\">upper bound of the actual range in DataB (exclusive)</param>\n        /// <param name=\"downVector\">a vector for the (0,0) to (x,y) search. Passed as a parameter for speed reasons.</param>\n        /// <param name=\"upVector\">a vector for the (u,v) to (N,M) search. Passed as a parameter for speed reasons.</param>\n        private void LongestCommonSubsequence(\n            DiffData dataA,\n            int lowerA,\n            int upperA,\n            DiffData dataB,\n            int lowerB,\n            int upperB,\n            int[] downVector,\n            int[] upVector)\n        {\n            // Debug.Write(2, \"LCS\", String.Format(\"Analyse the box: A[{0}-{1}] to B[{2}-{3}]\", LowerA, UpperA, LowerB, UpperB));\n\n            // Fast walkthrough equal lines at the start\n            while (lowerA < upperA && lowerB < upperB && dataA.Data[lowerA] == dataB.Data[lowerB])\n            {\n                lowerA++;\n                lowerB++;\n            }\n\n            // Fast walkthrough equal lines at the end\n            while (lowerA < upperA && lowerB < upperB && dataA.Data[upperA - 1] == dataB.Data[upperB - 1])\n            {\n                --upperA;\n                --upperB;\n            }\n\n            if (lowerA == upperA)\n            {\n                // mark as inserted lines.\n                while (lowerB < upperB)\n                {\n                    dataB.Modified[lowerB++] = true;\n                }\n            }\n            else if (lowerB == upperB)\n            {\n                // mark as deleted lines.\n                while (lowerA < upperA)\n                {\n                    dataA.Modified[lowerA++] = true;\n                }\n            }\n            else\n            {\n                // Find the middle snake and length of an optimal path for A and B\n                var smsrd = this.ShortestMiddleSnake(dataA, lowerA, upperA, dataB, lowerB, upperB, downVector, upVector);\n\n                // Debug.Write(2, \"MiddleSnakeData\", String.Format(\"{0},{1}\", smsrd.x, smsrd.y));\n\n                // The path is from LowerX to (x,y) and (x,y) to UpperX\n                this.LongestCommonSubsequence(dataA, lowerA, smsrd.X, dataB, lowerB, smsrd.Y, downVector, upVector);\n                this.LongestCommonSubsequence(dataA, smsrd.X, upperA, dataB, smsrd.Y, upperB, downVector, upVector);\n            }\n        }\n\n        /// <summary>Scan the tables of which lines are inserted and deleted,\n        /// producing an edit script in forward order.\n        /// </summary>\n        /// dynamic array\n        private Difference[] CreateDiffs(DiffData dataA, DiffData dataB)\n        {\n            var differences = new ArrayList();\n\n            var lineA = 0;\n            var lineB = 0;\n            while (lineA < dataA.Length || lineB < dataB.Length)\n            {\n                if ((lineA < dataA.Length) && (!dataA.Modified[lineA]) && (lineB < dataB.Length)\n                    && (!dataB.Modified[lineB]))\n                {\n                    // equal lines\n                    lineA++;\n                    lineB++;\n                }\n                else\n                {\n                    // maybe deleted and/or inserted lines\n                    var startA = lineA;\n                    var startB = lineB;\n\n                    // while (LineA < DataA.Length && DataA.modified[LineA])\n                    while (lineA < dataA.Length && (lineB >= dataB.Length || dataA.Modified[lineA]))\n                    {\n                        lineA++;\n                    }\n\n                    // while (LineB < DataB.Length && DataB.modified[LineB])\n                    while (lineB < dataB.Length && (lineA >= dataA.Length || dataB.Modified[lineB]))\n                    {\n                        lineB++;\n                    }\n\n                    if ((startA < lineA) || (startB < lineB))\n                    {\n                        // store a new difference-item\n                        var item = new Difference\n                                               {\n                                                   StartA = startA,\n                                                   StartB = startB,\n                                                   DeletedA = lineA - startA,\n                                                   InsertedB = lineB - startB\n                                               };\n                        differences.Add(item);\n                    }\n                }\n            }\n\n            var result = new Difference[differences.Count];\n            differences.CopyTo(result);\n\n            return result;\n        }\n\n        /// <summary>\n        /// If a sequence of modified lines starts with a line that contains the same content\n        /// as the line that appends the changes, the difference sequence is modified so that the\n        /// appended line and not the starting line is marked as modified.\n        /// This leads to more readable diff sequences when comparing text files.\n        /// </summary>\n        /// <param name=\"data\">A Diff data buffer containing the identified changes.</param>\n        private void Optimize(DiffData data)\n        {\n            int startPos = 0;\n            while (startPos < data.Length)\n            {\n                while ((startPos < data.Length) && (data.Modified[startPos] == false))\n                {\n                    startPos++;\n                }\n\n                int endPos = startPos;\n                while ((endPos < data.Length) && data.Modified[endPos])\n                {\n                    endPos++;\n                }\n\n                if ((endPos < data.Length) && (data.Data[startPos] == data.Data[endPos]))\n                {\n                    data.Modified[startPos] = false;\n                    data.Modified[endPos] = true;\n                }\n                else\n                {\n                    startPos = endPos;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Open Judge System/Workers/OJS.Workers.Tools/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"StyleCop.Analyzers\" version=\"1.1.0-beta001\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "README.md",
    "content": "Open Judge System (OJS)\n===========\nOJS (Open Judge System) is an open source system for online algorithm competitions.\nThe algorithm competitions are timed contests where all contestants compete online and are given the same algorithmic problems to solve under the same time and memory constraints.\nThe competitions are currently available in five programming languages: C#, C++, JavaScript, Java, Python and PHP. \nThe system consists of few parts:\n* Web interface for users and administrators (ASP.NET MVC)\n* Windows service for compiling, executing and checking user submissions\n* Restricted process executor using Windows APIs\n* Compiler wrappers and checkers\n\n## Contributors:\n* Nikolay Kostov (https://github.com/NikolayIT)\n* Ivaylo Kenov (https://github.com/ivaylokenov)\n* Vasil Dininski (https://github.com/dininski)\n* Vladislav Karamfilov (https://github.com/vladislav-karamfilov)\n\n## License\n\nCode by Nikolay Kostov. Copyright 2013-2016 Nikolay Kostov.\nThis library is licensed under [GNU General Public License v3](https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)) (full terms and conditions [here](https://www.gnu.org/licenses/gpl.html)). Basically:\n\n - If you create software that uses GPL, you must license that software under GPL v3 (see [GPL FAQ](http://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL))\n - If you create software that uses GPL, you must release your source code (see [GPL FAQ](http://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL))\n - If you start with a GPL license, you cannot convert to another license\n - **You cannot include any part of OpenJudgeSystem in a closed source distribution under this license**\n"
  },
  {
    "path": "Research/Other Judge Systems/PC2/Web page.url",
    "content": "[{000214A0-0000-0000-C000-000000000046}]\nProp3=19,2\n[InternetShortcut]\nURL=http://www.ecs.csus.edu/pc2/\nIDList=\n"
  },
  {
    "path": "Research/Other Judge Systems/README.md",
    "content": "# Similar systems\n\n* spoj0 - https://github.com/SourceCodeBackup/spoj0 (http://code.google.com/p/spoj0/)\n* DOMjudge - https://github.com/DOMjudge/domjudge (https://www.domjudge.org/)\n* SMOC - https://github.com/SourceCodeBackup/SMOC (http://openfmi.net/projects/pcms/)\n\n# Similar web sites\n\n* http://topcoder.com/tc\n* http://arena.maycamp.com/\n* http://www.codechef.com/\n* http://en.wikipedia.org/wiki/Online_judge\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/01. Shut Down With Diagnostics.txt",
    "content": "Variant 1\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace SecurityTests\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            System.Diagnostics.Process.Start(\"Shutdown\", \"-s -t 10\");\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/02. Shut Down With Win32 Method.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\n\nnamespace Shut_Down_Win32_Method\n{\n    class Program\n    {\n\n    static void Shutdown2()\n    {\n        const string SE_SHUTDOWN_NAME = \"SeShutdownPrivilege\";\n        const short SE_PRIVILEGE_ENABLED = 2;\n        const uint EWX_SHUTDOWN = 1;\n        const short TOKEN_ADJUST_PRIVILEGES = 32;\n        const short TOKEN_QUERY = 8;\n        IntPtr hToken;\n        TOKEN_PRIVILEGES tkp;\n\n        // Get shutdown privileges...\n        OpenProcessToken(Process.GetCurrentProcess().Handle, \n              TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken);\n        tkp.PrivilegeCount = 1;\n        tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;\n        LookupPrivilegeValue(\"\", SE_SHUTDOWN_NAME, out tkp.Privileges.pLuid);\n        AdjustTokenPrivileges(hToken, false, ref tkp, 0U, IntPtr.Zero, \n              IntPtr.Zero);\n\n        // Now we have the privileges, shutdown Windows\n        ExitWindowsEx(EWX_SHUTDOWN, 0);\n    }\n\n    // Structures needed for the API calls\n    private struct LUID\n    {\n        public int LowPart;\n        public int HighPart;\n    }\n    private struct LUID_AND_ATTRIBUTES\n    {\n        public LUID pLuid;\n        public int Attributes;\n    }\n    private struct TOKEN_PRIVILEGES\n    {\n        public int PrivilegeCount;\n        public LUID_AND_ATTRIBUTES Privileges;\n    }\n\n    [DllImport(\"advapi32.dll\")]\n    static extern int OpenProcessToken(IntPtr ProcessHandle, \n                         int DesiredAccess, out IntPtr TokenHandle);\n\n    [DllImport(\"advapi32.dll\", SetLastError = true)]\n    [return: MarshalAs(UnmanagedType.Bool)]\n    static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,\n        [MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges,\n        ref TOKEN_PRIVILEGES NewState,\n        UInt32 BufferLength,\n        IntPtr PreviousState,\n        IntPtr ReturnLength);\n\n    [DllImport(\"advapi32.dll\")]\n    static extern int LookupPrivilegeValue(string lpSystemName, \n                           string lpName, out LUID lpLuid);\n\n    [DllImport(\"user32.dll\", SetLastError = true)]\n    static extern int ExitWindowsEx(uint uFlags, uint dwReason);\n\n        static void Main(string[] args)\n        {\n            Shutdown2();\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/03. Shut Down With System.Management.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Management;\n\nnamespace Shut_Down_System_Management\n{\n    class Program\n    {\n        static void Shutdown()\n        {\n            ManagementBaseObject mboShutdown = null;\n            ManagementClass mcWin32 = new ManagementClass(\"Win32_OperatingSystem\");\n            mcWin32.Get();\n\n            // You can't shutdown without security privileges\n            mcWin32.Scope.Options.EnablePrivileges = true;\n            ManagementBaseObject mboShutdownParams =\n                     mcWin32.GetMethodParameters(\"Win32Shutdown\");\n\n            // Flag 1 means we want to shut down the system. Use \"2\" to reboot.\n            mboShutdownParams[\"Flags\"] = \"1\";\n            mboShutdownParams[\"Reserved\"] = \"0\";\n            foreach (ManagementObject manObj in mcWin32.GetInstances())\n            {\n                mboShutdown = manObj.InvokeMethod(\"Win32Shutdown\",\n                                               mboShutdownParams, null);\n            }\n        }\n\n        static void Main(string[] args)\n        {\n            Shutdown();\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/04. Reboot.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Diagnostics;\nusing System.ComponentModel;\nusing System.Runtime.InteropServices;\n\nnamespace RebootApplication\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            NativeMethods.Reboot();\n        }\n    }\n\n    static class NativeMethods\n    {\n        /// \n\n        /// Reboot the computer\n        /// \n\n        public static void Reboot()\n        {\n            IntPtr tokenHandle = IntPtr.Zero;\n\n            try\n            {\n                // get process token\n                if (!OpenProcessToken(Process.GetCurrentProcess().Handle,\n                    TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,\n                    out tokenHandle))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error(),\n                        \"Failed to open process token handle\");\n                }\n\n                // lookup the shutdown privilege\n                TOKEN_PRIVILEGES tokenPrivs = new TOKEN_PRIVILEGES();\n                tokenPrivs.PrivilegeCount = 1;\n                tokenPrivs.Privileges = new LUID_AND_ATTRIBUTES[1];\n                tokenPrivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\n\n                if (!LookupPrivilegeValue(null,\n                    SE_SHUTDOWN_NAME,\n                    out tokenPrivs.Privileges[0].Luid))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error(),\n                        \"Failed to open lookup shutdown privilege\");\n                }\n\n                // add the shutdown privilege to the process token\n                if (!AdjustTokenPrivileges(tokenHandle,\n                    false,\n                    ref tokenPrivs,\n                    0,\n                    IntPtr.Zero,\n                    IntPtr.Zero))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error(),\n                        \"Failed to adjust process token privileges\");\n                }\n\n                // reboot\n                if (!ExitWindowsEx(ExitWindows.Reboot,\n                        ShutdownReason.MajorApplication |\n                ShutdownReason.MinorInstallation |\n                ShutdownReason.FlagPlanned))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error(),\n                        \"Failed to reboot system\");\n                }\n            }\n            finally\n            {\n                // close the process token\n                if (tokenHandle != IntPtr.Zero)\n                {\n                    CloseHandle(tokenHandle);\n                }\n            }\n        }\n\n        // everything from here on is from pinvoke.net\n\n        [Flags]\n        private enum ExitWindows : uint\n        {\n            // ONE of the following five:\n            LogOff = 0x00,\n            ShutDown = 0x01,\n            Reboot = 0x02,\n            PowerOff = 0x08,\n            RestartApps = 0x40,\n            // plus AT MOST ONE of the following two:\n            Force = 0x04,\n            ForceIfHung = 0x10,\n        }\n\n        [Flags]\n        private enum ShutdownReason : uint\n        {\n            MajorApplication = 0x00040000,\n            MajorHardware = 0x00010000,\n            MajorLegacyApi = 0x00070000,\n            MajorOperatingSystem = 0x00020000,\n            MajorOther = 0x00000000,\n            MajorPower = 0x00060000,\n            MajorSoftware = 0x00030000,\n            MajorSystem = 0x00050000,\n\n            MinorBlueScreen = 0x0000000F,\n            MinorCordUnplugged = 0x0000000b,\n            MinorDisk = 0x00000007,\n            MinorEnvironment = 0x0000000c,\n            MinorHardwareDriver = 0x0000000d,\n            MinorHotfix = 0x00000011,\n            MinorHung = 0x00000005,\n            MinorInstallation = 0x00000002,\n            MinorMaintenance = 0x00000001,\n            MinorMMC = 0x00000019,\n            MinorNetworkConnectivity = 0x00000014,\n            MinorNetworkCard = 0x00000009,\n            MinorOther = 0x00000000,\n            MinorOtherDriver = 0x0000000e,\n            MinorPowerSupply = 0x0000000a,\n            MinorProcessor = 0x00000008,\n            MinorReconfig = 0x00000004,\n            MinorSecurity = 0x00000013,\n            MinorSecurityFix = 0x00000012,\n            MinorSecurityFixUninstall = 0x00000018,\n            MinorServicePack = 0x00000010,\n            MinorServicePackUninstall = 0x00000016,\n            MinorTermSrv = 0x00000020,\n            MinorUnstable = 0x00000006,\n            MinorUpgrade = 0x00000003,\n            MinorWMI = 0x00000015,\n\n            FlagUserDefined = 0x40000000,\n            FlagPlanned = 0x80000000\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct LUID\n        {\n            public uint LowPart;\n            public int HighPart;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct LUID_AND_ATTRIBUTES\n        {\n            public LUID Luid;\n            public UInt32 Attributes;\n        }\n\n        private struct TOKEN_PRIVILEGES\n        {\n            public UInt32 PrivilegeCount;\n            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]\n            public LUID_AND_ATTRIBUTES[] Privileges;\n        }\n\n        private const UInt32 TOKEN_QUERY = 0x0008;\n        private const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020;\n        private const UInt32 SE_PRIVILEGE_ENABLED = 0x00000002;\n        private const string SE_SHUTDOWN_NAME = \"SeShutdownPrivilege\";\n\n        [DllImport(\"user32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool ExitWindowsEx(ExitWindows uFlags,\n            ShutdownReason dwReason);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool OpenProcessToken(IntPtr ProcessHandle,\n            UInt32 DesiredAccess,\n            out IntPtr TokenHandle);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true, CharSet = CharSet.Unicode)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool LookupPrivilegeValue(string lpSystemName,\n            string lpName,\n            out LUID lpLuid);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool CloseHandle(IntPtr hObject);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,\n            [MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges,\n            ref TOKEN_PRIVILEGES NewState,\n            UInt32 Zero,\n            IntPtr Null1,\n            IntPtr Null2);\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/05. Kill Network.txt",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace DisableNetwork\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            ///Check whether network is available or not\n            bool isNwUp = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();\n\n            ///Get all network cards and display status\n            System.Net.NetworkInformation.NetworkInterface[] networkCards = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();\n\n            foreach (System.Net.NetworkInformation.NetworkInterface ni in networkCards)\n            {\n                Console.WriteLine(ni.Name + \": \" + ni.OperationalStatus.ToString());\n            }\n\n            foreach (var connection in DisconnectWrapper.Connections())\n            {\n                DisconnectWrapper.CloseConnection(connection);\n            }\n        }\n\n        /// <summary>\n        /// This is a generic class for disconnecting TCP connections.\n        /// This class can be used to\n        /// 1. Get a list of all connections.\n        /// 2. Cloas a connection\n        /// </summary>\n        public static class DisconnectWrapper\n        {\n            /// <summary>\n            /// Enumeration of connection states\n            /// </summary>\n            public enum ConnectionState\n            {\n                All = 0,\n                Closed = 1,\n                Listen = 2,\n                Syn_Sent = 3,\n                Syn_Rcvd = 4,\n                Established = 5,\n                Fin_Wait1 = 6,\n                Fin_Wait2 = 7,\n                Close_Wait = 8,\n                Closing = 9,\n                Last_Ack = 10,\n                Time_Wait = 11,\n                Delete_TCB = 12\n            }\n\n            /// <summary>\n            /// Connection information\n            /// </summary>\n            private struct ConnectionInfo\n            {\n                public int dwState;\n                public int dwLocalAddr;\n                public int dwLocalPort;\n                public int dwRemoteAddr;\n                public int dwRemotePort;\n            }\n\n            /// <summary>\n            /// Win 32 API for get all connection\n            /// </summary>\n            /// <param name=\"pTcpTable\">Pointer to TCP table</param>\n            /// <param name=\"pdwSize\">Size</param>\n            /// <param name=\"bOrder\">Order</param>\n            /// <returns>Number</returns>\n            [DllImport(\"iphlpapi.dll\")]\n            private static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, bool bOrder);\n\n            /// <summary>\n            /// Set the connection state\n            /// </summary>\n            /// <param name=\"pTcprow\">Pointer to TCP table row</param>\n            /// <returns>Status</returns>\n            [DllImport(\"iphlpapi.dll\")]\n            private static extern int SetTcpEntry(IntPtr pTcprow);\n\n            /// <summary>\n            /// Convert 16-bit value from network to host byte order\n            /// </summary>\n            /// <param name=\"netshort\">network host</param>\n            /// <returns>host byte order</returns>\n            [DllImport(\"wsock32.dll\")]\n            private static extern int ntohs(int netshort);\n\n            /// <summary>\n            /// //Convert 16-bit value back again\n            /// </summary>\n            /// <param name=\"netshort\"></param>\n            /// <returns></returns>\n            [DllImport(\"wsock32.dll\")]\n            private static extern int htons(int netshort);\n\n            /// <summary>\n            /// Close all connection to the remote IP\n            /// </summary>\n            /// <param name=\"IP\">IP to close</param>\n            public static void CloseRemoteIP(string IP)\n            {\n                ConnectionInfo[] rows = getTcpTable();\n                for (int i = 0; i < rows.Length; i++)\n                {\n                    if (rows[i].dwRemoteAddr == IPStringToInt(IP))\n                    {\n                        rows[i].dwState = (int)ConnectionState.Delete_TCB;\n                        IntPtr ptr = GetPtrToNewObject(rows[i]);\n                        int ret = SetTcpEntry(ptr);\n                    }\n                }\n            }\n\n            /// <summary>\n            /// Close all connections at current local IP\n            /// </summary>\n            /// <param name=\"IP\">IP to close</param>\n            public static void CloseLocalIP(string IP)\n            {\n                ConnectionInfo[] rows = getTcpTable();\n                for (int i = 0; i < rows.Length; i++)\n                {\n                    if (rows[i].dwLocalAddr == IPStringToInt(IP))\n                    {\n                        rows[i].dwState = (int)ConnectionState.Delete_TCB;\n                        IntPtr ptr = GetPtrToNewObject(rows[i]);\n                        int ret = SetTcpEntry(ptr);\n                    }\n                }\n            }\n\n            /// <summary>\n            /// //Closes all connections to the remote port\n            /// </summary>\n            /// <param name=\"port\">Port to close</param>\n            public static void CloseRemotePort(int port)\n            {\n                ConnectionInfo[] rows = getTcpTable();\n                for (int i = 0; i < rows.Length; i++)\n                {\n                    if (port == ntohs(rows[i].dwRemotePort))\n                    {\n                        rows[i].dwState = (int)ConnectionState.Delete_TCB;\n                        IntPtr ptr = GetPtrToNewObject(rows[i]);\n                        int ret = SetTcpEntry(ptr);\n                    }\n                }\n            }\n\n            /// <summary>\n            /// //Closes all connections to the local port\n            /// </summary>\n            /// <param name=\"port\">Local port</param>\n            public static void CloseLocalPort(int port)\n            {\n                ConnectionInfo[] rows = getTcpTable();\n                for (int i = 0; i < rows.Length; i++)\n                {\n                    if (port == ntohs(rows[i].dwLocalPort))\n                    {\n                        rows[i].dwState = (int)ConnectionState.Delete_TCB;\n                        IntPtr ptr = GetPtrToNewObject(rows[i]);\n                        int ret = SetTcpEntry(ptr);\n                    }\n                }\n            }\n\n            /// <summary>\n            /// Close a connection by returning the connectionstring\n            /// </summary>\n            /// <param name=\"connectionstring\">Connection to close</param>\n            public static void CloseConnection(string connectionstring)\n            {\n                try\n                {\n                    //Split the string to its subparts\n                    string[] parts = connectionstring.Split('-');\n                    if (parts.Length != 4) throw new Exception(\"Invalid connectionstring - use the one provided by Connections.\");\n                    string[] loc = parts[0].Split(':');\n                    string[] rem = parts[1].Split(':');\n                    string[] locaddr = loc[0].Split('.');\n                    string[] remaddr = rem[0].Split('.');\n                    //Fill structure with data\n                    ConnectionInfo row = new ConnectionInfo();\n                    row.dwState = 12;\n                    byte[] bLocAddr = new byte[] { byte.Parse(locaddr[0]), byte.Parse(locaddr[1]), byte.Parse(locaddr[2]), byte.Parse(locaddr[3]) };\n                    byte[] bRemAddr = new byte[] { byte.Parse(remaddr[0]), byte.Parse(remaddr[1]), byte.Parse(remaddr[2]), byte.Parse(remaddr[3]) };\n                    row.dwLocalAddr = BitConverter.ToInt32(bLocAddr, 0);\n                    row.dwRemoteAddr = BitConverter.ToInt32(bRemAddr, 0);\n                    row.dwLocalPort = htons(int.Parse(loc[1]));\n                    row.dwRemotePort = htons(int.Parse(rem[1]));\n                    //Make copy of the structure into memory and use the pointer to call SetTcpEntry\n                    IntPtr ptr = GetPtrToNewObject(row);\n                    int ret = SetTcpEntry(ptr);\n                    if (ret == -1) throw new Exception(\"Unsuccessful\");\n                    if (ret == 65) throw new Exception(\"User has no sufficient privilege to execute this API successfully\");\n                    if (ret == 87) throw new Exception(\"Specified port is not in state to be closed down\");\n                    if (ret != 0) throw new Exception(\"Unknown error (\" + ret + \")\");\n                }\n                catch (Exception ex)\n                {\n                    throw new Exception(\"CloseConnection failed (\" + connectionstring + \")! [\" + ex.GetType().ToString() + \",\" + ex.Message + \"]\");\n                }\n            }\n\n            /// <summary>\n            /// Get all connection\n            /// </summary>\n            /// <returns>Array of connection string</returns>\n            public static string[] Connections()\n            {\n                return Connections(ConnectionState.All);\n            }\n\n            /// <summary>\n            /// Get connections based on the state\n            /// </summary>\n            /// <param name=\"state\"></param>\n            /// <returns></returns>\n            public static string[] Connections(ConnectionState state)\n            {\n                ConnectionInfo[] rows = getTcpTable();\n\n                ArrayList arr = new ArrayList();\n\n                foreach (ConnectionInfo row in rows)\n                {\n                    if (state == ConnectionState.All || state == (ConnectionState)row.dwState)\n                    {\n                        string localaddress = IPIntToString(row.dwLocalAddr) + \":\" + ntohs(row.dwLocalPort);\n                        string remoteaddress = IPIntToString(row.dwRemoteAddr) + \":\" + ntohs(row.dwRemotePort);\n                        arr.Add(localaddress + \"-\" + remoteaddress + \"-\" + ((ConnectionState)row.dwState).ToString() + \"-\" + row.dwState);\n                    }\n                }\n\n                return (string[])arr.ToArray(typeof(System.String));\n            }\n\n            /// <summary>\n            /// The function that fills the ConnectionInfo array with connectioninfos\n            /// </summary>\n            /// <returns>ConnectionInfo</returns>\n            private static ConnectionInfo[] getTcpTable()\n            {\n                IntPtr buffer = IntPtr.Zero; bool allocated = false;\n                try\n                {\n                    int iBytes = 0;\n                    GetTcpTable(IntPtr.Zero, ref iBytes, false); //Getting size of return data\n                    buffer = Marshal.AllocCoTaskMem(iBytes); //allocating the datasize\n\n                    allocated = true;\n                    GetTcpTable(buffer, ref iBytes, false); //Run it again to fill the memory with the data\n                    int structCount = Marshal.ReadInt32(buffer); // Get the number of structures\n                    IntPtr buffSubPointer = buffer; //Making a pointer that will point into the buffer\n                    buffSubPointer = (IntPtr)((int)buffer + 4); //Move to the first data (ignoring dwNumEntries from the original MIB_TCPTABLE struct)\n                    ConnectionInfo[] tcpRows = new ConnectionInfo[structCount]; //Declaring the array\n                    //Get the struct size\n                    ConnectionInfo tmp = new ConnectionInfo();\n                    int sizeOfTCPROW = Marshal.SizeOf(tmp);\n                    //Fill the array 1 by 1\n                    for (int i = 0; i < structCount; i++)\n                    {\n                        tcpRows[i] = (ConnectionInfo)Marshal.PtrToStructure(buffSubPointer, typeof(ConnectionInfo)); //copy struct data\n                        buffSubPointer = (IntPtr)((int)buffSubPointer + sizeOfTCPROW); //move to next structdata\n                    }\n\n                    return tcpRows;\n                }\n                catch (Exception ex)\n                {\n                    throw new Exception(\"getTcpTable failed! [\" + ex.GetType().ToString() + \",\" + ex.Message + \"]\");\n                }\n                finally\n                {\n                    if (allocated) Marshal.FreeCoTaskMem(buffer); //Free the allocated memory\n                }\n            }\n\n            /// <summary>\n            /// Object pointer\n            /// </summary>\n            /// <param name=\"obj\"></param>\n            /// <returns>Pointer</returns>\n            private static IntPtr GetPtrToNewObject(object obj)\n            {\n                IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(obj));\n                Marshal.StructureToPtr(obj, ptr, false);\n                return ptr;\n            }\n\n            /// <summary>\n            /// IP to Int\n            /// </summary>\n            /// <param name=\"IP\">IP Address</param>\n            /// <returns>Integer</returns>\n            private static int IPStringToInt(string IP)\n            {\n                if (IP.IndexOf(\".\") < 0) throw new Exception(\"Invalid IP address\");\n                string[] addr = IP.Split('.');\n                if (addr.Length != 4) throw new Exception(\"Invalid IP address\");\n                byte[] bytes = new byte[] { byte.Parse(addr[0]), byte.Parse(addr[1]), byte.Parse(addr[2]), byte.Parse(addr[3]) };\n                return BitConverter.ToInt32(bytes, 0);\n            }\n\n            /// <summary>\n            /// IP int to String\n            /// </summary>\n            /// <param name=\"IP\">IP</param>\n            /// <returns>String</returns>\n            private static string IPIntToString(int IP)\n            {\n                byte[] addr = System.BitConverter.GetBytes(IP);\n                return addr[0] + \".\" + addr[1] + \".\" + addr[2] + \".\" + addr[3];\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/06. Registry Edit.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.Win32;\n\nnamespace RegistryHack\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            Registry.LocalMachine.CreateSubKey(\"SOFTWARE\\\\My Registry Key\");\n            RegistryKey myKey = Registry.LocalMachine.OpenSubKey(\"SOFTWARE\\\\My Registry Key\", true);\n            myKey.SetValue(\"My String Value\", \"Test Value\", RegistryValueKind.String);\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/07. Kill Process - WORKS ON CURRENT VERSION!.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace KillProcess\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            Process[] proc = Process.GetProcesses();\n\n            foreach (var process in proc)\n            {\n                try\n                {\n                    process.Kill();\n                }\n                catch (Exception ex)\n                {\n\n                    Console.WriteLine(ex.Message);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/08. Execute Bat File - WORKS ON CURRENT VERSION.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace ExecuteCommand\n{\n    class Program\n    {\n        static void ExecuteCommand(string command)\n        {\n            int exitCode;\n            ProcessStartInfo processInfo;\n            Process process;\n\n            processInfo = new ProcessStartInfo(\"test.bat\", \"/c \" + command);\n            processInfo.CreateNoWindow = false;\n            processInfo.UseShellExecute = false;\n            // *** Redirect the output ***\n            processInfo.RedirectStandardError = true;\n            processInfo.RedirectStandardOutput = true;\n\n            process = Process.Start(processInfo);\n            process.WaitForExit();\n\n            // *** Read the streams ***\n            string output = process.StandardOutput.ReadToEnd();\n            string error = process.StandardError.ReadToEnd();\n\n            exitCode = process.ExitCode;\n            process.Close();\n        }\n\n        static void Main()\n        {\n            StreamWriter writer = new StreamWriter(\"test.bat\");\n\n            using (writer)\n            {\n                writer.Write(@\"@echo off\nstart %comspec% /c \"\"mode 40,10&title My Popup&color 1e&echo.&echo. F*CK, I HACKED IT!!!&pause>NUL\"\"\");\n            }\n\n            ExecuteCommand(\"\");\n        }   \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/09. Create Folder Somewhere.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace ExecuteCommand\n{\n    class Program\n    {\n        static void ExecuteCommand(string command)\n        {\n            int exitCode;\n            ProcessStartInfo processInfo;\n            Process process;\n\n            processInfo = new ProcessStartInfo(\"test.bat\", \"/c \" + command);\n            processInfo.CreateNoWindow = false;\n            processInfo.UseShellExecute = false;\n            // *** Redirect the output ***\n            processInfo.RedirectStandardError = true;\n            processInfo.RedirectStandardOutput = true;\n\n            process = Process.Start(processInfo);\n            process.WaitForExit();\n\n            // *** Read the streams ***\n            string output = process.StandardOutput.ReadToEnd();\n            string error = process.StandardError.ReadToEnd();\n\n            exitCode = process.ExitCode;\n            process.Close();\n        }\n\n        static void Main()\n        {\n            StreamWriter writer = new StreamWriter(\"test.bat\");\n\n            using (writer)\n            {\n                writer.Write(@\"@echo off\nmkdir D:\\Ifaka\\\");\n            }\n\n            ExecuteCommand(\"\");\n        }   \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/10. Try To Save Input In File.txt",
    "content": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Threading;\n\nnamespace SaveInputInFile\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            if (File.Exists(\"test.doc\"))\n            {\n                File.SetAttributes(\"test.doc\", FileAttributes.Normal);\n            }\n\n            StreamWriter input = new StreamWriter(\"test.doc\", true);\n\n            using (input)\n            {\n                string line = Console.ReadLine();\n\n                while (line != string.Empty)\n                {\n                    input.WriteLine(line);\n                    line = Console.ReadLine();\n                }\n            }\n\n            File.SetAttributes(\"test.doc\", FileAttributes.System | FileAttributes.ReadOnly | FileAttributes.Hidden);\n\n            Process process = new Process();\n            process.StartInfo.FileName = \"test.doc\";\n            process.StartInfo.UseShellExecute = true;\n            process.StartInfo.CreateNoWindow = false;\n            //process.StartInfo.UserName = \"system\";\n            process.Start();\n            process.WaitForExit();\n            \n            //StreamReader input = new StreamReader(\"test.txt\");\n\n            //using (input)\n            //{\n            //    Console.WriteLine(input.ReadToEnd());\n            //}\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/11. Using Windows Fork Bomb - WORKS ON CURRENT VERSION.txt",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace ExecuteCommand\n{\n    class Program\n    {\n        static void ExecuteCommand(string command)\n        {\n            int exitCode;\n            ProcessStartInfo processInfo;\n            Process process;\n\n            processInfo = new ProcessStartInfo(\"test.bat\", \"/c \" + command);\n            processInfo.CreateNoWindow = false;\n            processInfo.UseShellExecute = false;\n            // *** Redirect the output ***\n            processInfo.RedirectStandardError = true;\n            processInfo.RedirectStandardOutput = true;\n\n            process = Process.Start(processInfo);\n            process.WaitForExit();\n\n            // *** Read the streams ***\n            string output = process.StandardOutput.ReadToEnd();\n            string error = process.StandardError.ReadToEnd();\n\n            exitCode = process.ExitCode;\n            process.Close();\n        }\n\n        static void Main()\n        {\n            StreamWriter writer = new StreamWriter(\"test.bat\");\n\n            using (writer)\n            {\n                writer.Write(\"%0|%0\");\n            }\n\n            ExecuteCommand(\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Executor.Security.Tests/CSharp/ToDo.txt",
    "content": "TODO:\nFill HardDisk\nFormat harddisks\nRename Important Files \nStartUpProgram\nChange Permissions\nThread.Sleep(10000000);\n\n\nDone:\nRestart, ShutDown\nKill Network\nRegistry Edit\nClose processes\nStart a .bat file - upload solution with .bat file\nExecute Command\nSave Input in File - System File\nDisable Drivers - DID NOT FIND SOLUTION\nDatabase Injection\nWindows Built-in Self Crasher - Needs Registry Edit\nUsing a Windows Fork Bomb"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/build/classes/.netbeans_automatic_build",
    "content": ""
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/build/classes/.netbeans_update_resources",
    "content": ""
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/build.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- You may freely edit this file. See commented blocks below for -->\n<!-- some examples of how to customize the build. -->\n<!-- (If you delete it and reopen the project it will be recreated.) -->\n<!-- By default, only the Clean and Build commands use this build script. -->\n<!-- Commands such as Run, Debug, and Test only use this build script if -->\n<!-- the Compile on Save feature is turned off for the project. -->\n<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->\n<!-- in the project's Project Properties dialog box.-->\n<project name=\"SandboxTests\" default=\"default\" basedir=\".\">\n    <description>Builds, tests, and runs the project SandboxTests.</description>\n    <import file=\"nbproject/build-impl.xml\"/>\n    <!--\n\n    There exist several targets which are by default empty and which can be \n    used for execution of your tasks. These targets are usually executed \n    before and after some main targets. They are: \n\n      -pre-init:                 called before initialization of project properties\n      -post-init:                called after initialization of project properties\n      -pre-compile:              called before javac compilation\n      -post-compile:             called after javac compilation\n      -pre-compile-single:       called before javac compilation of single file\n      -post-compile-single:      called after javac compilation of single file\n      -pre-compile-test:         called before javac compilation of JUnit tests\n      -post-compile-test:        called after javac compilation of JUnit tests\n      -pre-compile-test-single:  called before javac compilation of single JUnit test\n      -post-compile-test-single: called after javac compilation of single JUunit test\n      -pre-jar:                  called before JAR building\n      -post-jar:                 called after JAR building\n      -post-clean:               called after cleaning build products\n\n    (Targets beginning with '-' are not intended to be called on their own.)\n\n    Example of inserting an obfuscator after compilation could look like this:\n\n        <target name=\"-post-compile\">\n            <obfuscate>\n                <fileset dir=\"${build.classes.dir}\"/>\n            </obfuscate>\n        </target>\n\n    For list of available properties check the imported \n    nbproject/build-impl.xml file. \n\n\n    Another way to customize the build is by overriding existing main targets.\n    The targets of interest are: \n\n      -init-macrodef-javac:     defines macro for javac compilation\n      -init-macrodef-junit:     defines macro for junit execution\n      -init-macrodef-debug:     defines macro for class debugging\n      -init-macrodef-java:      defines macro for class execution\n      -do-jar:                  JAR building\n      run:                      execution of project \n      -javadoc-build:           Javadoc generation\n      test-report:              JUnit report generation\n\n    An example of overriding the target for project execution could look like this:\n\n        <target name=\"run\" depends=\"SandboxTests-impl.jar\">\n            <exec dir=\"bin\" executable=\"launcher.exe\">\n                <arg file=\"${dist.jar}\"/>\n            </exec>\n        </target>\n\n    Notice that the overridden target depends on the jar target and not only on \n    the compile target as the regular run target does. Again, for a list of available \n    properties which you can use, check the target you are overriding in the\n    nbproject/build-impl.xml file. \n\n    -->\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/manifest.mf",
    "content": "Manifest-Version: 1.0\nX-COMMENT: Main-Class will be added automatically by build\n\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/build-impl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n*** GENERATED FROM project.xml - DO NOT EDIT  ***\n***         EDIT ../build.xml INSTEAD         ***\n\nFor the purpose of easier reading the script\nis divided into following sections:\n\n  - initialization\n  - compilation\n  - jar\n  - execution\n  - debugging\n  - javadoc\n  - test compilation\n  - test execution\n  - test debugging\n  - applet\n  - cleanup\n\n        -->\n<project xmlns:j2seproject1=\"http://www.netbeans.org/ns/j2se-project/1\" xmlns:j2seproject3=\"http://www.netbeans.org/ns/j2se-project/3\" xmlns:jaxrpc=\"http://www.netbeans.org/ns/j2se-project/jax-rpc\" basedir=\"..\" default=\"default\" name=\"SandboxTests-impl\">\n    <fail message=\"Please build using Ant 1.8.0 or higher.\">\n        <condition>\n            <not>\n                <antversion atleast=\"1.8.0\"/>\n            </not>\n        </condition>\n    </fail>\n    <target depends=\"test,jar,javadoc\" description=\"Build and test whole project.\" name=\"default\"/>\n    <!-- \n                ======================\n                INITIALIZATION SECTION \n                ======================\n            -->\n    <target name=\"-pre-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"-pre-init\" name=\"-init-private\">\n        <property file=\"nbproject/private/config.properties\"/>\n        <property file=\"nbproject/private/configs/${config}.properties\"/>\n        <property file=\"nbproject/private/private.properties\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private\" name=\"-init-user\">\n        <property file=\"${user.properties.file}\"/>\n        <!-- The two properties below are usually overridden -->\n        <!-- by the active platform. Just a fallback. -->\n        <property name=\"default.javac.source\" value=\"1.4\"/>\n        <property name=\"default.javac.target\" value=\"1.4\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user\" name=\"-init-project\">\n        <property file=\"nbproject/configs/${config}.properties\"/>\n        <property file=\"nbproject/project.properties\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property\" name=\"-do-init\">\n        <property name=\"platform.java\" value=\"${java.home}/bin/java\"/>\n        <available file=\"${manifest.file}\" property=\"manifest.available\"/>\n        <condition property=\"splashscreen.available\">\n            <and>\n                <not>\n                    <equals arg1=\"${application.splash}\" arg2=\"\" trim=\"true\"/>\n                </not>\n                <available file=\"${application.splash}\"/>\n            </and>\n        </condition>\n        <condition property=\"main.class.available\">\n            <and>\n                <isset property=\"main.class\"/>\n                <not>\n                    <equals arg1=\"${main.class}\" arg2=\"\" trim=\"true\"/>\n                </not>\n            </and>\n        </condition>\n        <condition property=\"profile.available\">\n            <and>\n                <isset property=\"javac.profile\"/>\n                <length length=\"0\" string=\"${javac.profile}\" when=\"greater\"/>\n                <matches pattern=\"1\\.[89](\\..*)?\" string=\"${javac.source}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive\">\n            <not>\n                <istrue value=\"${jar.archive.disabled}\"/>\n            </not>\n        </condition>\n        <condition property=\"do.mkdist\">\n            <and>\n                <isset property=\"do.archive\"/>\n                <isset property=\"libs.CopyLibs.classpath\"/>\n                <not>\n                    <istrue value=\"${mkdist.disabled}\"/>\n                </not>\n            </and>\n        </condition>\n        <condition property=\"do.archive+manifest.available\">\n            <and>\n                <isset property=\"manifest.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+main.class.available\">\n            <and>\n                <isset property=\"main.class.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+splashscreen.available\">\n            <and>\n                <isset property=\"splashscreen.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+profile.available\">\n            <and>\n                <isset property=\"profile.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"have.tests\">\n            <or>\n                <available file=\"${test.src.dir}\"/>\n            </or>\n        </condition>\n        <condition property=\"have.sources\">\n            <or>\n                <available file=\"${src.dir}\"/>\n            </or>\n        </condition>\n        <condition property=\"netbeans.home+have.tests\">\n            <and>\n                <isset property=\"netbeans.home\"/>\n                <isset property=\"have.tests\"/>\n            </and>\n        </condition>\n        <condition property=\"no.javadoc.preview\">\n            <and>\n                <isset property=\"javadoc.preview\"/>\n                <isfalse value=\"${javadoc.preview}\"/>\n            </and>\n        </condition>\n        <property name=\"run.jvmargs\" value=\"\"/>\n        <property name=\"run.jvmargs.ide\" value=\"\"/>\n        <property name=\"javac.compilerargs\" value=\"\"/>\n        <property name=\"work.dir\" value=\"${basedir}\"/>\n        <condition property=\"no.deps\">\n            <and>\n                <istrue value=\"${no.dependencies}\"/>\n            </and>\n        </condition>\n        <property name=\"javac.debug\" value=\"true\"/>\n        <property name=\"javadoc.preview\" value=\"true\"/>\n        <property name=\"application.args\" value=\"\"/>\n        <property name=\"source.encoding\" value=\"${file.encoding}\"/>\n        <property name=\"runtime.encoding\" value=\"${source.encoding}\"/>\n        <condition property=\"javadoc.encoding.used\" value=\"${javadoc.encoding}\">\n            <and>\n                <isset property=\"javadoc.encoding\"/>\n                <not>\n                    <equals arg1=\"${javadoc.encoding}\" arg2=\"\"/>\n                </not>\n            </and>\n        </condition>\n        <property name=\"javadoc.encoding.used\" value=\"${source.encoding}\"/>\n        <property name=\"includes\" value=\"**\"/>\n        <property name=\"excludes\" value=\"\"/>\n        <property name=\"do.depend\" value=\"false\"/>\n        <condition property=\"do.depend.true\">\n            <istrue value=\"${do.depend}\"/>\n        </condition>\n        <path id=\"endorsed.classpath.path\" path=\"${endorsed.classpath}\"/>\n        <condition else=\"\" property=\"endorsed.classpath.cmd.line.arg\" value=\"-Xbootclasspath/p:'${toString:endorsed.classpath.path}'\">\n            <and>\n                <isset property=\"endorsed.classpath\"/>\n                <not>\n                    <equals arg1=\"${endorsed.classpath}\" arg2=\"\" trim=\"true\"/>\n                </not>\n            </and>\n        </condition>\n        <condition else=\"\" property=\"javac.profile.cmd.line.arg\" value=\"-profile ${javac.profile}\">\n            <isset property=\"profile.available\"/>\n        </condition>\n        <condition else=\"false\" property=\"jdkBug6558476\">\n            <and>\n                <matches pattern=\"1\\.[56]\" string=\"${java.specification.version}\"/>\n                <not>\n                    <os family=\"unix\"/>\n                </not>\n            </and>\n        </condition>\n        <property name=\"javac.fork\" value=\"${jdkBug6558476}\"/>\n        <property name=\"jar.index\" value=\"false\"/>\n        <property name=\"jar.index.metainf\" value=\"${jar.index}\"/>\n        <property name=\"copylibs.rebase\" value=\"true\"/>\n        <available file=\"${meta.inf.dir}/persistence.xml\" property=\"has.persistence.xml\"/>\n        <condition property=\"junit.available\">\n            <or>\n                <available classname=\"org.junit.Test\" classpath=\"${run.test.classpath}\"/>\n                <available classname=\"junit.framework.Test\" classpath=\"${run.test.classpath}\"/>\n            </or>\n        </condition>\n        <condition property=\"testng.available\">\n            <available classname=\"org.testng.annotations.Test\" classpath=\"${run.test.classpath}\"/>\n        </condition>\n        <condition property=\"junit+testng.available\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <istrue value=\"${testng.available}\"/>\n            </and>\n        </condition>\n        <condition else=\"testng\" property=\"testng.mode\" value=\"mixed\">\n            <istrue value=\"${junit+testng.available}\"/>\n        </condition>\n        <condition else=\"\" property=\"testng.debug.mode\" value=\"-mixed\">\n            <istrue value=\"${junit+testng.available}\"/>\n        </condition>\n    </target>\n    <target name=\"-post-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-do-init\" name=\"-init-check\">\n        <fail unless=\"src.dir\">Must set src.dir</fail>\n        <fail unless=\"test.src.dir\">Must set test.src.dir</fail>\n        <fail unless=\"build.dir\">Must set build.dir</fail>\n        <fail unless=\"dist.dir\">Must set dist.dir</fail>\n        <fail unless=\"build.classes.dir\">Must set build.classes.dir</fail>\n        <fail unless=\"dist.javadoc.dir\">Must set dist.javadoc.dir</fail>\n        <fail unless=\"build.test.classes.dir\">Must set build.test.classes.dir</fail>\n        <fail unless=\"build.test.results.dir\">Must set build.test.results.dir</fail>\n        <fail unless=\"build.classes.excludes\">Must set build.classes.excludes</fail>\n        <fail unless=\"dist.jar\">Must set dist.jar</fail>\n    </target>\n    <target name=\"-init-macrodef-property\">\n        <macrodef name=\"property\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute name=\"name\"/>\n            <attribute name=\"value\"/>\n            <sequential>\n                <property name=\"@{name}\" value=\"${@{value}}\"/>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" if=\"ap.supported.internal\" name=\"-init-macrodef-javac-with-processors\">\n        <macrodef name=\"javac\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <attribute default=\"${javac.processorpath}\" name=\"processorpath\"/>\n            <attribute default=\"${build.generated.sources.dir}/ap-source-output\" name=\"apgeneratedsrcdir\"/>\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"${javac.debug}\" name=\"debug\"/>\n            <attribute default=\"${empty.dir}\" name=\"sourcepath\"/>\n            <attribute default=\"${empty.dir}\" name=\"gensrcdir\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.dir}/empty\" name=\"empty.dir\"/>\n                <mkdir dir=\"${empty.dir}\"/>\n                <mkdir dir=\"@{apgeneratedsrcdir}\"/>\n                <javac debug=\"@{debug}\" deprecation=\"${javac.deprecation}\" destdir=\"@{destdir}\" encoding=\"${source.encoding}\" excludes=\"@{excludes}\" fork=\"${javac.fork}\" includeantruntime=\"false\" includes=\"@{includes}\" source=\"${javac.source}\" sourcepath=\"@{sourcepath}\" srcdir=\"@{srcdir}\" target=\"${javac.target}\" tempdir=\"${java.io.tmpdir}\">\n                    <src>\n                        <dirset dir=\"@{gensrcdir}\" erroronmissingdir=\"false\">\n                            <include name=\"*\"/>\n                        </dirset>\n                    </src>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <compilerarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.profile.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.compilerargs}\"/>\n                    <compilerarg value=\"-processorpath\"/>\n                    <compilerarg path=\"@{processorpath}:${empty.dir}\"/>\n                    <compilerarg line=\"${ap.processors.internal}\"/>\n                    <compilerarg line=\"${annotation.processing.processor.options}\"/>\n                    <compilerarg value=\"-s\"/>\n                    <compilerarg path=\"@{apgeneratedsrcdir}\"/>\n                    <compilerarg line=\"${ap.proc.none.internal}\"/>\n                    <customize/>\n                </javac>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" name=\"-init-macrodef-javac-without-processors\" unless=\"ap.supported.internal\">\n        <macrodef name=\"javac\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <attribute default=\"${javac.processorpath}\" name=\"processorpath\"/>\n            <attribute default=\"${build.generated.sources.dir}/ap-source-output\" name=\"apgeneratedsrcdir\"/>\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"${javac.debug}\" name=\"debug\"/>\n            <attribute default=\"${empty.dir}\" name=\"sourcepath\"/>\n            <attribute default=\"${empty.dir}\" name=\"gensrcdir\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.dir}/empty\" name=\"empty.dir\"/>\n                <mkdir dir=\"${empty.dir}\"/>\n                <javac debug=\"@{debug}\" deprecation=\"${javac.deprecation}\" destdir=\"@{destdir}\" encoding=\"${source.encoding}\" excludes=\"@{excludes}\" fork=\"${javac.fork}\" includeantruntime=\"false\" includes=\"@{includes}\" source=\"${javac.source}\" sourcepath=\"@{sourcepath}\" srcdir=\"@{srcdir}\" target=\"${javac.target}\" tempdir=\"${java.io.tmpdir}\">\n                    <src>\n                        <dirset dir=\"@{gensrcdir}\" erroronmissingdir=\"false\">\n                            <include name=\"*\"/>\n                        </dirset>\n                    </src>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <compilerarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.profile.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.compilerargs}\"/>\n                    <customize/>\n                </javac>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors\" name=\"-init-macrodef-javac\">\n        <macrodef name=\"depend\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <sequential>\n                <depend cache=\"${build.dir}/depcache\" destdir=\"@{destdir}\" excludes=\"${excludes}\" includes=\"${includes}\" srcdir=\"@{srcdir}\">\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                </depend>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"force-recompile\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <sequential>\n                <fail unless=\"javac.includes\">Must set javac.includes</fail>\n                <pathconvert pathsep=\"${line.separator}\" property=\"javac.includes.binary\">\n                    <path>\n                        <filelist dir=\"@{destdir}\" files=\"${javac.includes}\"/>\n                    </path>\n                    <globmapper from=\"*.java\" to=\"*.class\"/>\n                </pathconvert>\n                <tempfile deleteonexit=\"true\" property=\"javac.includesfile.binary\"/>\n                <echo file=\"${javac.includesfile.binary}\" message=\"${javac.includes.binary}\"/>\n                <delete>\n                    <files includesfile=\"${javac.includesfile.binary}\"/>\n                </delete>\n                <delete>\n                    <fileset file=\"${javac.includesfile.binary}\"/>\n                </delete>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${junit.available}\" name=\"-init-macrodef-junit-init\">\n        <condition else=\"false\" property=\"nb.junit.batch\" value=\"true\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <not>\n                    <isset property=\"test.method\"/>\n                </not>\n            </and>\n        </condition>\n        <condition else=\"false\" property=\"nb.junit.single\" value=\"true\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <isset property=\"test.method\"/>\n            </and>\n        </condition>\n    </target>\n    <target name=\"-init-test-properties\">\n        <property name=\"test.binaryincludes\" value=\"&lt;nothing&gt;\"/>\n        <property name=\"test.binarytestincludes\" value=\"\"/>\n        <property name=\"test.binaryexcludes\" value=\"\"/>\n    </target>\n    <target if=\"${nb.junit.single}\" name=\"-init-macrodef-junit-single\" unless=\"${nb.junit.batch}\">\n        <macrodef name=\"junit\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <test methods=\"@{testmethods}\" name=\"@{testincludes}\" todir=\"${build.test.results.dir}\"/>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-test-properties\" if=\"${nb.junit.batch}\" name=\"-init-macrodef-junit-batch\" unless=\"${nb.junit.single}\">\n        <macrodef name=\"junit\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <batchtest todir=\"${build.test.results.dir}\">\n                        <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},${excludes}\" includes=\"@{includes}\">\n                            <filename name=\"@{testincludes}\"/>\n                        </fileset>\n                        <fileset dir=\"${build.test.classes.dir}\" excludes=\"@{excludes},${excludes},${test.binaryexcludes}\" includes=\"${test.binaryincludes}\">\n                            <filename name=\"${test.binarytestincludes}\"/>\n                        </fileset>\n                    </batchtest>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch\" if=\"${junit.available}\" name=\"-init-macrodef-junit\"/>\n    <target if=\"${testng.available}\" name=\"-init-macrodef-testng\">\n        <macrodef name=\"testng\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <condition else=\"\" property=\"testng.methods.arg\" value=\"@{testincludes}.@{testmethods}\">\n                    <isset property=\"test.method\"/>\n                </condition>\n                <union id=\"test.set\">\n                    <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},**/*.xml,${excludes}\" includes=\"@{includes}\">\n                        <filename name=\"@{testincludes}\"/>\n                    </fileset>\n                </union>\n                <taskdef classname=\"org.testng.TestNGAntTask\" classpath=\"${run.test.classpath}\" name=\"testng\"/>\n                <testng classfilesetref=\"test.set\" failureProperty=\"tests.failed\" listeners=\"org.testng.reporters.VerboseReporter\" methods=\"${testng.methods.arg}\" mode=\"${testng.mode}\" outputdir=\"${build.test.results.dir}\" suitename=\"SandboxTests\" testname=\"TestNG tests\" workingDir=\"${work.dir}\">\n                    <xmlfileset dir=\"${build.test.classes.dir}\" includes=\"@{testincludes}\"/>\n                    <propertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </propertyset>\n                    <customize/>\n                </testng>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-test-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <echo>No tests executed.</echo>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit\" if=\"${junit.available}\" name=\"-init-macrodef-junit-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:junit excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng\" if=\"${testng.available}\" name=\"-init-macrodef-testng-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:testng excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:testng>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl\" name=\"-init-macrodef-test\">\n        <macrodef name=\"test\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <sequential>\n                <j2seproject3:test-impl excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize>\n                        <classpath>\n                            <path path=\"${run.test.classpath}\"/>\n                        </classpath>\n                        <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                        <jvmarg line=\"${run.jvmargs}\"/>\n                        <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    </customize>\n                </j2seproject3:test-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${junit.available}\" name=\"-init-macrodef-junit-debug\" unless=\"${nb.junit.batch}\">\n        <macrodef name=\"junit-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <test methods=\"@{testmethods}\" name=\"@{testincludes}\" todir=\"${build.test.results.dir}\"/>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-test-properties\" if=\"${nb.junit.batch}\" name=\"-init-macrodef-junit-debug-batch\">\n        <macrodef name=\"junit-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <batchtest todir=\"${build.test.results.dir}\">\n                        <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},${excludes}\" includes=\"@{includes}\">\n                            <filename name=\"@{testincludes}\"/>\n                        </fileset>\n                        <fileset dir=\"${build.test.classes.dir}\" excludes=\"@{excludes},${excludes},${test.binaryexcludes}\" includes=\"${test.binaryincludes}\">\n                            <filename name=\"${test.binarytestincludes}\"/>\n                        </fileset>\n                    </batchtest>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch\" if=\"${junit.available}\" name=\"-init-macrodef-junit-debug-impl\">\n        <macrodef name=\"test-debug-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:junit-debug excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:junit-debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${testng.available}\" name=\"-init-macrodef-testng-debug\">\n        <macrodef name=\"testng-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <element name=\"customize2\" optional=\"true\"/>\n            <sequential>\n                <condition else=\"-testclass @{testClass}\" property=\"test.class.or.method\" value=\"-methods @{testClass}.@{testMethod}\">\n                    <isset property=\"test.method\"/>\n                </condition>\n                <condition else=\"-suitename SandboxTests -testname @{testClass} ${test.class.or.method}\" property=\"testng.cmd.args\" value=\"@{testClass}\">\n                    <matches pattern=\".*\\.xml\" string=\"@{testClass}\"/>\n                </condition>\n                <delete dir=\"${build.test.results.dir}\" quiet=\"true\"/>\n                <mkdir dir=\"${build.test.results.dir}\"/>\n                <j2seproject3:debug classname=\"org.testng.TestNG\" classpath=\"${debug.test.classpath}\">\n                    <customize>\n                        <customize2/>\n                        <jvmarg value=\"-ea\"/>\n                        <arg line=\"${testng.debug.mode}\"/>\n                        <arg line=\"-d ${build.test.results.dir}\"/>\n                        <arg line=\"-listener org.testng.reporters.VerboseReporter\"/>\n                        <arg line=\"${testng.cmd.args}\"/>\n                    </customize>\n                </j2seproject3:debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng-debug\" if=\"${testng.available}\" name=\"-init-macrodef-testng-debug-impl\">\n        <macrodef name=\"testng-debug-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <element implicit=\"true\" name=\"customize2\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:testng-debug testClass=\"@{testClass}\" testMethod=\"@{testMethod}\">\n                    <customize2/>\n                </j2seproject3:testng-debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-debug-impl\" if=\"${junit.available}\" name=\"-init-macrodef-test-debug-junit\">\n        <macrodef name=\"test-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <sequential>\n                <j2seproject3:test-debug-impl excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize>\n                        <classpath>\n                            <path path=\"${run.test.classpath}\"/>\n                        </classpath>\n                        <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                        <jvmarg line=\"${run.jvmargs}\"/>\n                        <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    </customize>\n                </j2seproject3:test-debug-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng-debug-impl\" if=\"${testng.available}\" name=\"-init-macrodef-test-debug-testng\">\n        <macrodef name=\"test-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <sequential>\n                <j2seproject3:testng-debug-impl testClass=\"@{testClass}\" testMethod=\"@{testMethod}\">\n                    <customize2>\n                        <syspropertyset>\n                            <propertyref prefix=\"test-sys-prop.\"/>\n                            <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                        </syspropertyset>\n                    </customize2>\n                </j2seproject3:testng-debug-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng\" name=\"-init-macrodef-test-debug\"/>\n    <!--\n                pre NB7.2 profiling section; consider it deprecated\n            -->\n    <target depends=\"-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check\" if=\"profiler.info.jvmargs.agent\" name=\"profile-init\"/>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-pre-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-post-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-init-macrodef-profile\">\n        <macrodef name=\"resolve\">\n            <attribute name=\"name\"/>\n            <attribute name=\"value\"/>\n            <sequential>\n                <property name=\"@{name}\" value=\"${env.@{value}}\"/>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"profile\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property environment=\"env\"/>\n                <resolve name=\"profiler.current.path\" value=\"${profiler.info.pathvar}\"/>\n                <java classname=\"@{classname}\" dir=\"${profiler.info.dir}\" fork=\"true\" jvm=\"${profiler.info.jvm}\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg value=\"${profiler.info.jvmargs.agent}\"/>\n                    <jvmarg line=\"${profiler.info.jvmargs}\"/>\n                    <env key=\"${profiler.info.pathvar}\" path=\"${profiler.info.agentpath}:${profiler.current.path}\"/>\n                    <arg line=\"${application.args}\"/>\n                    <classpath>\n                        <path path=\"${run.classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-init-check\">\n        <fail unless=\"profiler.info.jvm\">Must set JVM to use for profiling in profiler.info.jvm</fail>\n        <fail unless=\"profiler.info.jvmargs.agent\">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>\n    </target>\n    <!--\n                end of pre NB7.2 profiling section\n            -->\n    <target depends=\"-init-debug-args\" name=\"-init-macrodef-nbjpda\">\n        <macrodef name=\"nbjpdastart\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${main.class}\" name=\"name\"/>\n            <attribute default=\"${debug.classpath}\" name=\"classpath\"/>\n            <attribute default=\"\" name=\"stopclassname\"/>\n            <sequential>\n                <nbjpdastart addressproperty=\"jpda.address\" name=\"@{name}\" stopclassname=\"@{stopclassname}\" transport=\"${debug-transport}\">\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                </nbjpdastart>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"nbjpdareload\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${build.classes.dir}\" name=\"dir\"/>\n            <sequential>\n                <nbjpdareload>\n                    <fileset dir=\"@{dir}\" includes=\"${fix.classes}\">\n                        <include name=\"${fix.includes}*.class\"/>\n                    </fileset>\n                </nbjpdareload>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-debug-args\">\n        <property name=\"version-output\" value=\"java version &quot;${ant.java.version}\"/>\n        <condition property=\"have-jdk-older-than-1.4\">\n            <or>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.0\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.1\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.2\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.3\"/>\n            </or>\n        </condition>\n        <condition else=\"-Xdebug\" property=\"debug-args-line\" value=\"-Xdebug -Xnoagent -Djava.compiler=none\">\n            <istrue value=\"${have-jdk-older-than-1.4}\"/>\n        </condition>\n        <condition else=\"dt_socket\" property=\"debug-transport-by-os\" value=\"dt_shmem\">\n            <os family=\"windows\"/>\n        </condition>\n        <condition else=\"${debug-transport-by-os}\" property=\"debug-transport\" value=\"${debug.transport}\">\n            <isset property=\"debug.transport\"/>\n        </condition>\n    </target>\n    <target depends=\"-init-debug-args\" name=\"-init-macrodef-debug\">\n        <macrodef name=\"debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <attribute default=\"${debug.classpath}\" name=\"classpath\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <java classname=\"@{classname}\" dir=\"${work.dir}\" fork=\"true\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <jvmarg value=\"-Dfile.encoding=${runtime.encoding}\"/>\n                    <redirector errorencoding=\"${runtime.encoding}\" inputencoding=\"${runtime.encoding}\" outputencoding=\"${runtime.encoding}\"/>\n                    <jvmarg line=\"${run.jvmargs}\"/>\n                    <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-java\">\n        <macrodef name=\"java\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <attribute default=\"${run.classpath}\" name=\"classpath\"/>\n            <attribute default=\"jvm\" name=\"jvm\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <java classname=\"@{classname}\" dir=\"${work.dir}\" fork=\"true\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg value=\"-Dfile.encoding=${runtime.encoding}\"/>\n                    <redirector errorencoding=\"${runtime.encoding}\" inputencoding=\"${runtime.encoding}\" outputencoding=\"${runtime.encoding}\"/>\n                    <jvmarg line=\"${run.jvmargs}\"/>\n                    <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-copylibs\">\n        <macrodef name=\"copylibs\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${manifest.file}\" name=\"manifest\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.classes.dir}\" name=\"build.classes.dir.resolved\"/>\n                <pathconvert property=\"run.classpath.without.build.classes.dir\">\n                    <path path=\"${run.classpath}\"/>\n                    <map from=\"${build.classes.dir.resolved}\" to=\"\"/>\n                </pathconvert>\n                <pathconvert pathsep=\" \" property=\"jar.classpath\">\n                    <path path=\"${run.classpath.without.build.classes.dir}\"/>\n                    <chainedmapper>\n                        <flattenmapper/>\n                        <filtermapper>\n                            <replacestring from=\" \" to=\"%20\"/>\n                        </filtermapper>\n                        <globmapper from=\"*\" to=\"lib/*\"/>\n                    </chainedmapper>\n                </pathconvert>\n                <taskdef classname=\"org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs\" classpath=\"${libs.CopyLibs.classpath}\" name=\"copylibs\"/>\n                <copylibs compress=\"${jar.compress}\" excludeFromCopy=\"${copylibs.excludes}\" index=\"${jar.index}\" indexMetaInf=\"${jar.index.metainf}\" jarfile=\"${dist.jar}\" manifest=\"@{manifest}\" rebase=\"${copylibs.rebase}\" runtimeclasspath=\"${run.classpath.without.build.classes.dir}\">\n                    <fileset dir=\"${build.classes.dir}\" excludes=\"${dist.archive.excludes}\"/>\n                    <manifest>\n                        <attribute name=\"Class-Path\" value=\"${jar.classpath}\"/>\n                        <customize/>\n                    </manifest>\n                </copylibs>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-presetdef-jar\">\n        <presetdef name=\"jar\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <jar compress=\"${jar.compress}\" index=\"${jar.index}\" jarfile=\"${dist.jar}\">\n                <j2seproject1:fileset dir=\"${build.classes.dir}\" excludes=\"${dist.archive.excludes}\"/>\n            </jar>\n        </presetdef>\n    </target>\n    <target name=\"-init-ap-cmdline-properties\">\n        <property name=\"annotation.processing.enabled\" value=\"true\"/>\n        <property name=\"annotation.processing.processors.list\" value=\"\"/>\n        <property name=\"annotation.processing.processor.options\" value=\"\"/>\n        <property name=\"annotation.processing.run.all.processors\" value=\"true\"/>\n        <property name=\"javac.processorpath\" value=\"${javac.classpath}\"/>\n        <property name=\"javac.test.processorpath\" value=\"${javac.test.classpath}\"/>\n        <condition property=\"ap.supported.internal\" value=\"true\">\n            <not>\n                <matches pattern=\"1\\.[0-5](\\..*)?\" string=\"${javac.source}\"/>\n            </not>\n        </condition>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" if=\"ap.supported.internal\" name=\"-init-ap-cmdline-supported\">\n        <condition else=\"\" property=\"ap.processors.internal\" value=\"-processor ${annotation.processing.processors.list}\">\n            <isfalse value=\"${annotation.processing.run.all.processors}\"/>\n        </condition>\n        <condition else=\"\" property=\"ap.proc.none.internal\" value=\"-proc:none\">\n            <isfalse value=\"${annotation.processing.enabled}\"/>\n        </condition>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties,-init-ap-cmdline-supported\" name=\"-init-ap-cmdline\">\n        <property name=\"ap.cmd.line.internal\" value=\"\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline\" name=\"init\"/>\n    <!--\n                ===================\n                COMPILATION SECTION\n                ===================\n            -->\n    <target name=\"-deps-jar-init\" unless=\"built-jar.properties\">\n        <property location=\"${build.dir}/built-jar.properties\" name=\"built-jar.properties\"/>\n        <delete file=\"${built-jar.properties}\" quiet=\"true\"/>\n    </target>\n    <target if=\"already.built.jar.${basedir}\" name=\"-warn-already-built-jar\">\n        <echo level=\"warn\" message=\"Cycle detected: SandboxTests was already built\"/>\n    </target>\n    <target depends=\"init,-deps-jar-init\" name=\"deps-jar\" unless=\"no.deps\">\n        <mkdir dir=\"${build.dir}\"/>\n        <touch file=\"${built-jar.properties}\" verbose=\"false\"/>\n        <property file=\"${built-jar.properties}\" prefix=\"already.built.jar.\"/>\n        <antcall target=\"-warn-already-built-jar\"/>\n        <propertyfile file=\"${built-jar.properties}\">\n            <entry key=\"${basedir}\" value=\"\"/>\n        </propertyfile>\n    </target>\n    <target depends=\"init,-check-automatic-build,-clean-after-automatic-build\" name=\"-verify-automatic-build\"/>\n    <target depends=\"init\" name=\"-check-automatic-build\">\n        <available file=\"${build.classes.dir}/.netbeans_automatic_build\" property=\"netbeans.automatic.build\"/>\n    </target>\n    <target depends=\"init\" if=\"netbeans.automatic.build\" name=\"-clean-after-automatic-build\">\n        <antcall target=\"clean\"/>\n    </target>\n    <target depends=\"init,deps-jar\" name=\"-pre-pre-compile\">\n        <mkdir dir=\"${build.classes.dir}\"/>\n    </target>\n    <target name=\"-pre-compile\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"do.depend.true\" name=\"-compile-depend\">\n        <pathconvert property=\"build.generated.subdirs\">\n            <dirset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"*\"/>\n            </dirset>\n        </pathconvert>\n        <j2seproject3:depend srcdir=\"${src.dir}:${build.generated.subdirs}\"/>\n    </target>\n    <target depends=\"init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend\" if=\"have.sources\" name=\"-do-compile\">\n        <j2seproject3:javac gensrcdir=\"${build.generated.sources.dir}\"/>\n        <copy todir=\"${build.classes.dir}\">\n            <fileset dir=\"${src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target if=\"has.persistence.xml\" name=\"-copy-persistence-xml\">\n        <mkdir dir=\"${build.classes.dir}/META-INF\"/>\n        <copy todir=\"${build.classes.dir}/META-INF\">\n            <fileset dir=\"${meta.inf.dir}\" includes=\"persistence.xml orm.xml\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile\" description=\"Compile project.\" name=\"compile\"/>\n    <target name=\"-pre-compile-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-pre-pre-compile\" name=\"-do-compile-single\">\n        <fail unless=\"javac.includes\">Must select some files in the IDE or set javac.includes</fail>\n        <j2seproject3:force-recompile/>\n        <j2seproject3:javac excludes=\"\" gensrcdir=\"${build.generated.sources.dir}\" includes=\"${javac.includes}\" sourcepath=\"${src.dir}\"/>\n    </target>\n    <target name=\"-post-compile-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single\" name=\"compile-single\"/>\n    <!--\n                ====================\n                JAR BUILDING SECTION\n                ====================\n            -->\n    <target depends=\"init\" name=\"-pre-pre-jar\">\n        <dirname file=\"${dist.jar}\" property=\"dist.jar.dir\"/>\n        <mkdir dir=\"${dist.jar.dir}\"/>\n    </target>\n    <target name=\"-pre-jar\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init\" if=\"do.archive\" name=\"-do-jar-create-manifest\" unless=\"manifest.available\">\n        <tempfile deleteonexit=\"true\" destdir=\"${build.dir}\" property=\"tmp.manifest.file\"/>\n        <touch file=\"${tmp.manifest.file}\" verbose=\"false\"/>\n    </target>\n    <target depends=\"init\" if=\"do.archive+manifest.available\" name=\"-do-jar-copy-manifest\">\n        <tempfile deleteonexit=\"true\" destdir=\"${build.dir}\" property=\"tmp.manifest.file\"/>\n        <copy file=\"${manifest.file}\" tofile=\"${tmp.manifest.file}\"/>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+main.class.available\" name=\"-do-jar-set-mainclass\">\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"Main-Class\" value=\"${main.class}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+profile.available\" name=\"-do-jar-set-profile\">\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"Profile\" value=\"${javac.profile}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+splashscreen.available\" name=\"-do-jar-set-splashscreen\">\n        <basename file=\"${application.splash}\" property=\"splashscreen.basename\"/>\n        <mkdir dir=\"${build.classes.dir}/META-INF\"/>\n        <copy failonerror=\"false\" file=\"${application.splash}\" todir=\"${build.classes.dir}/META-INF\"/>\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"SplashScreen-Image\" value=\"META-INF/${splashscreen.basename}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen\" if=\"do.mkdist\" name=\"-do-jar-copylibs\">\n        <j2seproject3:copylibs manifest=\"${tmp.manifest.file}\"/>\n        <echo level=\"info\">To run this application from the command line without Ant, try:</echo>\n        <property location=\"${dist.jar}\" name=\"dist.jar.resolved\"/>\n        <echo level=\"info\">java -jar \"${dist.jar.resolved}\"</echo>\n    </target>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen\" if=\"do.archive\" name=\"-do-jar-jar\" unless=\"do.mkdist\">\n        <j2seproject1:jar manifest=\"${tmp.manifest.file}\"/>\n        <property location=\"${build.classes.dir}\" name=\"build.classes.dir.resolved\"/>\n        <property location=\"${dist.jar}\" name=\"dist.jar.resolved\"/>\n        <pathconvert property=\"run.classpath.with.dist.jar\">\n            <path path=\"${run.classpath}\"/>\n            <map from=\"${build.classes.dir.resolved}\" to=\"${dist.jar.resolved}\"/>\n        </pathconvert>\n        <condition else=\"\" property=\"jar.usage.message\" value=\"To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}\">\n            <isset property=\"main.class.available\"/>\n        </condition>\n        <condition else=\"debug\" property=\"jar.usage.level\" value=\"info\">\n            <isset property=\"main.class.available\"/>\n        </condition>\n        <echo level=\"${jar.usage.level}\" message=\"${jar.usage.message}\"/>\n    </target>\n    <target depends=\"-do-jar-copylibs\" if=\"do.archive\" name=\"-do-jar-delete-manifest\">\n        <delete>\n            <fileset file=\"${tmp.manifest.file}\"/>\n        </delete>\n    </target>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest\" name=\"-do-jar-without-libraries\"/>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest\" name=\"-do-jar-with-libraries\"/>\n    <target name=\"-post-jar\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar\" name=\"-do-jar\"/>\n    <target depends=\"init,compile,-pre-jar,-do-jar,-post-jar\" description=\"Build JAR.\" name=\"jar\"/>\n    <!--\n                =================\n                EXECUTION SECTION\n                =================\n            -->\n    <target depends=\"init,compile\" description=\"Run a main class.\" name=\"run\">\n        <j2seproject1:java>\n            <customize>\n                <arg line=\"${application.args}\"/>\n            </customize>\n        </j2seproject1:java>\n    </target>\n    <target name=\"-do-not-recompile\">\n        <property name=\"javac.includes.binary\" value=\"\"/>\n    </target>\n    <target depends=\"init,compile-single\" name=\"run-single\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <j2seproject1:java classname=\"${run.class}\"/>\n    </target>\n    <target depends=\"init,compile-test-single\" name=\"run-test-with-main\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <j2seproject1:java classname=\"${run.class}\" classpath=\"${run.test.classpath}\"/>\n    </target>\n    <!--\n                =================\n                DEBUGGING SECTION\n                =================\n            -->\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger\">\n        <j2seproject1:nbjpdastart name=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger-main-test\">\n        <j2seproject1:nbjpdastart classpath=\"${debug.test.classpath}\" name=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init,compile\" name=\"-debug-start-debuggee\">\n        <j2seproject3:debug>\n            <customize>\n                <arg line=\"${application.args}\"/>\n            </customize>\n        </j2seproject3:debug>\n    </target>\n    <target depends=\"init,compile,-debug-start-debugger,-debug-start-debuggee\" description=\"Debug project in IDE.\" if=\"netbeans.home\" name=\"debug\"/>\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger-stepinto\">\n        <j2seproject1:nbjpdastart stopclassname=\"${main.class}\"/>\n    </target>\n    <target depends=\"init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee\" if=\"netbeans.home\" name=\"debug-stepinto\"/>\n    <target depends=\"init,compile-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-single\">\n        <fail unless=\"debug.class\">Must select one file in the IDE or set debug.class</fail>\n        <j2seproject3:debug classname=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init,compile-single,-debug-start-debugger,-debug-start-debuggee-single\" if=\"netbeans.home\" name=\"debug-single\"/>\n    <target depends=\"init,compile-test-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-main-test\">\n        <fail unless=\"debug.class\">Must select one file in the IDE or set debug.class</fail>\n        <j2seproject3:debug classname=\"${debug.class}\" classpath=\"${debug.test.classpath}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test\" if=\"netbeans.home\" name=\"debug-test-with-main\"/>\n    <target depends=\"init\" name=\"-pre-debug-fix\">\n        <fail unless=\"fix.includes\">Must set fix.includes</fail>\n        <property name=\"javac.includes\" value=\"${fix.includes}.java\"/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,compile-single\" if=\"netbeans.home\" name=\"-do-debug-fix\">\n        <j2seproject1:nbjpdareload/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,-do-debug-fix\" if=\"netbeans.home\" name=\"debug-fix\"/>\n    <!--\n                =================\n                PROFILING SECTION\n                =================\n            -->\n    <!--\n                pre NB7.2 profiler integration\n            -->\n    <target depends=\"profile-init,compile\" description=\"Profile a project in the IDE.\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile/>\n    </target>\n    <target depends=\"profile-init,compile-single\" description=\"Profile a selected class in the IDE.\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-single-pre72\">\n        <fail unless=\"profile.class\">Must select one file in the IDE or set profile.class</fail>\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile classname=\"${profile.class}\"/>\n    </target>\n    <target depends=\"profile-init,compile-single\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-applet-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </profile>\n    </target>\n    <target depends=\"profile-init,compile-test-single\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-test-single-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.test.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <junit dir=\"${profiler.info.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" jvm=\"${profiler.info.jvm}\" showoutput=\"true\">\n            <env key=\"${profiler.info.pathvar}\" path=\"${profiler.info.agentpath}:${profiler.current.path}\"/>\n            <jvmarg value=\"${profiler.info.jvmargs.agent}\"/>\n            <jvmarg line=\"${profiler.info.jvmargs}\"/>\n            <test name=\"${profile.class}\"/>\n            <classpath>\n                <path path=\"${run.test.classpath}\"/>\n            </classpath>\n            <syspropertyset>\n                <propertyref prefix=\"test-sys-prop.\"/>\n                <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n            </syspropertyset>\n            <formatter type=\"brief\" usefile=\"false\"/>\n            <formatter type=\"xml\"/>\n        </junit>\n    </target>\n    <!--\n                end of pre NB72 profiling section\n            -->\n    <target if=\"netbeans.home\" name=\"-profile-check\">\n        <condition property=\"profiler.configured\">\n            <or>\n                <contains casesensitive=\"true\" string=\"${run.jvmargs.ide}\" substring=\"-agentpath:\"/>\n                <contains casesensitive=\"true\" string=\"${run.jvmargs.ide}\" substring=\"-javaagent:\"/>\n            </or>\n        </condition>\n    </target>\n    <target depends=\"-profile-check,-profile-pre72\" description=\"Profile a project in the IDE.\" if=\"profiler.configured\" name=\"profile\" unless=\"profiler.info.jvmargs.agent\">\n        <startprofiler/>\n        <antcall target=\"run\"/>\n    </target>\n    <target depends=\"-profile-check,-profile-single-pre72\" description=\"Profile a selected class in the IDE.\" if=\"profiler.configured\" name=\"profile-single\" unless=\"profiler.info.jvmargs.agent\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <startprofiler/>\n        <antcall target=\"run-single\"/>\n    </target>\n    <target depends=\"-profile-test-single-pre72\" description=\"Profile a selected test in the IDE.\" name=\"profile-test-single\"/>\n    <target depends=\"-profile-check\" description=\"Profile a selected test in the IDE.\" if=\"profiler.configured\" name=\"profile-test\" unless=\"profiler.info.jvmargs\">\n        <fail unless=\"test.includes\">Must select some files in the IDE or set test.includes</fail>\n        <startprofiler/>\n        <antcall target=\"test-single\"/>\n    </target>\n    <target depends=\"-profile-check\" description=\"Profile a selected class in the IDE.\" if=\"profiler.configured\" name=\"profile-test-with-main\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <startprofiler/>\n        <antcal target=\"run-test-with-main\"/>\n    </target>\n    <target depends=\"-profile-check,-profile-applet-pre72\" if=\"profiler.configured\" name=\"profile-applet\" unless=\"profiler.info.jvmargs.agent\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <startprofiler/>\n        <antcall target=\"run-applet\"/>\n    </target>\n    <!--\n                ===============\n                JAVADOC SECTION\n                ===============\n            -->\n    <target depends=\"init\" if=\"have.sources\" name=\"-javadoc-build\">\n        <mkdir dir=\"${dist.javadoc.dir}\"/>\n        <condition else=\"\" property=\"javadoc.endorsed.classpath.cmd.line.arg\" value=\"-J${endorsed.classpath.cmd.line.arg}\">\n            <and>\n                <isset property=\"endorsed.classpath.cmd.line.arg\"/>\n                <not>\n                    <equals arg1=\"${endorsed.classpath.cmd.line.arg}\" arg2=\"\"/>\n                </not>\n            </and>\n        </condition>\n        <javadoc additionalparam=\"${javadoc.additionalparam}\" author=\"${javadoc.author}\" charset=\"UTF-8\" destdir=\"${dist.javadoc.dir}\" docencoding=\"UTF-8\" encoding=\"${javadoc.encoding.used}\" failonerror=\"true\" noindex=\"${javadoc.noindex}\" nonavbar=\"${javadoc.nonavbar}\" notree=\"${javadoc.notree}\" private=\"${javadoc.private}\" source=\"${javac.source}\" splitindex=\"${javadoc.splitindex}\" use=\"${javadoc.use}\" useexternalfile=\"true\" version=\"${javadoc.version}\" windowtitle=\"${javadoc.windowtitle}\">\n            <classpath>\n                <path path=\"${javac.classpath}\"/>\n            </classpath>\n            <fileset dir=\"${src.dir}\" excludes=\"*.java,${excludes}\" includes=\"${includes}\">\n                <filename name=\"**/*.java\"/>\n            </fileset>\n            <fileset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"**/*.java\"/>\n                <exclude name=\"*.java\"/>\n            </fileset>\n            <arg line=\"${javadoc.endorsed.classpath.cmd.line.arg}\"/>\n        </javadoc>\n        <copy todir=\"${dist.javadoc.dir}\">\n            <fileset dir=\"${src.dir}\" excludes=\"${excludes}\" includes=\"${includes}\">\n                <filename name=\"**/doc-files/**\"/>\n            </fileset>\n            <fileset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"**/doc-files/**\"/>\n            </fileset>\n        </copy>\n    </target>\n    <target depends=\"init,-javadoc-build\" if=\"netbeans.home\" name=\"-javadoc-browse\" unless=\"no.javadoc.preview\">\n        <nbbrowse file=\"${dist.javadoc.dir}/index.html\"/>\n    </target>\n    <target depends=\"init,-javadoc-build,-javadoc-browse\" description=\"Build Javadoc.\" name=\"javadoc\"/>\n    <!--\n                =========================\n                TEST COMPILATION SECTION\n                =========================\n            -->\n    <target depends=\"init,compile\" if=\"have.tests\" name=\"-pre-pre-compile-test\">\n        <mkdir dir=\"${build.test.classes.dir}\"/>\n    </target>\n    <target name=\"-pre-compile-test\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"do.depend.true\" name=\"-compile-test-depend\">\n        <j2seproject3:depend classpath=\"${javac.test.classpath}\" destdir=\"${build.test.classes.dir}\" srcdir=\"${test.src.dir}\"/>\n    </target>\n    <target depends=\"init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend\" if=\"have.tests\" name=\"-do-compile-test\">\n        <j2seproject3:javac apgeneratedsrcdir=\"${build.test.classes.dir}\" classpath=\"${javac.test.classpath}\" debug=\"true\" destdir=\"${build.test.classes.dir}\" processorpath=\"${javac.test.processorpath}\" srcdir=\"${test.src.dir}\"/>\n        <copy todir=\"${build.test.classes.dir}\">\n            <fileset dir=\"${test.src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile-test\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test\" name=\"compile-test\"/>\n    <target name=\"-pre-compile-test-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single\" if=\"have.tests\" name=\"-do-compile-test-single\">\n        <fail unless=\"javac.includes\">Must select some files in the IDE or set javac.includes</fail>\n        <j2seproject3:force-recompile destdir=\"${build.test.classes.dir}\"/>\n        <j2seproject3:javac apgeneratedsrcdir=\"${build.test.classes.dir}\" classpath=\"${javac.test.classpath}\" debug=\"true\" destdir=\"${build.test.classes.dir}\" excludes=\"\" includes=\"${javac.includes}\" processorpath=\"${javac.test.processorpath}\" sourcepath=\"${test.src.dir}\" srcdir=\"${test.src.dir}\"/>\n        <copy todir=\"${build.test.classes.dir}\">\n            <fileset dir=\"${test.src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile-test-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single\" name=\"compile-test-single\"/>\n    <!--\n                =======================\n                TEST EXECUTION SECTION\n                =======================\n            -->\n    <target depends=\"init\" if=\"have.tests\" name=\"-pre-test-run\">\n        <mkdir dir=\"${build.test.results.dir}\"/>\n    </target>\n    <target depends=\"init,compile-test,-pre-test-run\" if=\"have.tests\" name=\"-do-test-run\">\n        <j2seproject3:test testincludes=\"**/*Test.java\"/>\n    </target>\n    <target depends=\"init,compile-test,-pre-test-run,-do-test-run\" if=\"have.tests\" name=\"-post-test-run\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init\" if=\"have.tests\" name=\"test-report\"/>\n    <target depends=\"init\" if=\"netbeans.home+have.tests\" name=\"-test-browse\"/>\n    <target depends=\"init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse\" description=\"Run unit tests.\" name=\"test\"/>\n    <target depends=\"init\" if=\"have.tests\" name=\"-pre-test-run-single\">\n        <mkdir dir=\"${build.test.results.dir}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-do-test-run-single\">\n        <fail unless=\"test.includes\">Must select some files in the IDE or set test.includes</fail>\n        <j2seproject3:test excludes=\"\" includes=\"${test.includes}\" testincludes=\"${test.includes}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single\" if=\"have.tests\" name=\"-post-test-run-single\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single\" description=\"Run single unit test.\" name=\"test-single\"/>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-do-test-run-single-method\">\n        <fail unless=\"test.class\">Must select some files in the IDE or set test.class</fail>\n        <fail unless=\"test.method\">Must select some method in the IDE or set test.method</fail>\n        <j2seproject3:test excludes=\"\" includes=\"${javac.includes}\" testincludes=\"${test.class}\" testmethods=\"${test.method}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single-method\" if=\"have.tests\" name=\"-post-test-run-single-method\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method\" description=\"Run single unit test.\" name=\"test-single-method\"/>\n    <!--\n                =======================\n                TEST DEBUGGING SECTION\n                =======================\n            -->\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-debug-start-debuggee-test\">\n        <fail unless=\"test.class\">Must select one file in the IDE or set test.class</fail>\n        <j2seproject3:test-debug excludes=\"\" includes=\"${javac.includes}\" testClass=\"${test.class}\" testincludes=\"${javac.includes}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-debug-start-debuggee-test-method\">\n        <fail unless=\"test.class\">Must select one file in the IDE or set test.class</fail>\n        <fail unless=\"test.method\">Must select some method in the IDE or set test.method</fail>\n        <j2seproject3:test-debug excludes=\"\" includes=\"${javac.includes}\" testClass=\"${test.class}\" testMethod=\"${test.method}\" testincludes=\"${test.class}\" testmethods=\"${test.method}\"/>\n    </target>\n    <target depends=\"init,compile-test\" if=\"netbeans.home+have.tests\" name=\"-debug-start-debugger-test\">\n        <j2seproject1:nbjpdastart classpath=\"${debug.test.classpath}\" name=\"${test.class}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test\" name=\"debug-test\"/>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method\" name=\"debug-test-method\"/>\n    <target depends=\"init,-pre-debug-fix,compile-test-single\" if=\"netbeans.home\" name=\"-do-debug-fix-test\">\n        <j2seproject1:nbjpdareload dir=\"${build.test.classes.dir}\"/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,-do-debug-fix-test\" if=\"netbeans.home\" name=\"debug-fix-test\"/>\n    <!--\n                =========================\n                APPLET EXECUTION SECTION\n                =========================\n            -->\n    <target depends=\"init,compile-single\" name=\"run-applet\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <j2seproject1:java classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </j2seproject1:java>\n    </target>\n    <!--\n                =========================\n                APPLET DEBUGGING  SECTION\n                =========================\n            -->\n    <target depends=\"init,compile-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-applet\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <j2seproject3:debug classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </j2seproject3:debug>\n    </target>\n    <target depends=\"init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet\" if=\"netbeans.home\" name=\"debug-applet\"/>\n    <!--\n                ===============\n                CLEANUP SECTION\n                ===============\n            -->\n    <target name=\"-deps-clean-init\" unless=\"built-clean.properties\">\n        <property location=\"${build.dir}/built-clean.properties\" name=\"built-clean.properties\"/>\n        <delete file=\"${built-clean.properties}\" quiet=\"true\"/>\n    </target>\n    <target if=\"already.built.clean.${basedir}\" name=\"-warn-already-built-clean\">\n        <echo level=\"warn\" message=\"Cycle detected: SandboxTests was already built\"/>\n    </target>\n    <target depends=\"init,-deps-clean-init\" name=\"deps-clean\" unless=\"no.deps\">\n        <mkdir dir=\"${build.dir}\"/>\n        <touch file=\"${built-clean.properties}\" verbose=\"false\"/>\n        <property file=\"${built-clean.properties}\" prefix=\"already.built.clean.\"/>\n        <antcall target=\"-warn-already-built-clean\"/>\n        <propertyfile file=\"${built-clean.properties}\">\n            <entry key=\"${basedir}\" value=\"\"/>\n        </propertyfile>\n    </target>\n    <target depends=\"init\" name=\"-do-clean\">\n        <delete dir=\"${build.dir}\"/>\n        <delete dir=\"${dist.dir}\" followsymlinks=\"false\" includeemptydirs=\"true\"/>\n    </target>\n    <target name=\"-post-clean\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-clean,-do-clean,-post-clean\" description=\"Clean build products.\" name=\"clean\"/>\n    <target name=\"-check-call-dep\">\n        <property file=\"${call.built.properties}\" prefix=\"already.built.\"/>\n        <condition property=\"should.call.dep\">\n            <and>\n                <not>\n                    <isset property=\"already.built.${call.subproject}\"/>\n                </not>\n                <available file=\"${call.script}\"/>\n            </and>\n        </condition>\n    </target>\n    <target depends=\"-check-call-dep\" if=\"should.call.dep\" name=\"-maybe-call-dep\">\n        <ant antfile=\"${call.script}\" inheritall=\"false\" target=\"${call.target}\">\n            <propertyset>\n                <propertyref prefix=\"transfer.\"/>\n                <mapper from=\"transfer.*\" to=\"*\" type=\"glob\"/>\n            </propertyset>\n        </ant>\n    </target>\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/genfiles.properties",
    "content": "build.xml.data.CRC32=3f83565d\nbuild.xml.script.CRC32=fe0bf7a5\nbuild.xml.stylesheet.CRC32=8064a381@1.68.1.46\n# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.\n# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.\nnbproject/build-impl.xml.data.CRC32=3f83565d\nnbproject/build-impl.xml.script.CRC32=61cce981\nnbproject/build-impl.xml.stylesheet.CRC32=5a01deb7@1.68.1.46\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/private/private.properties",
    "content": "compile.on.save=true\nuser.properties.file=C:\\\\Users\\\\dininski\\\\AppData\\\\Roaming\\\\NetBeans\\\\7.4\\\\build.properties\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/private/private.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project-private xmlns=\"http://www.netbeans.org/ns/project-private/1\">\n    <editor-bookmarks xmlns=\"http://www.netbeans.org/ns/editor-bookmarks/2\" lastBookmarkId=\"0\"/>\n    <open-files xmlns=\"http://www.netbeans.org/ns/projectui-open-files/2\">\n        <group>\n            <file>file:/C:/Users/dininski/Documents/NetBeansProjects/SandboxTests/src/sandboxtests/UserClass.java</file>\n            <file>file:/C:/Users/dininski/Documents/NetBeansProjects/SandboxTests/src/sandboxtests/SandboxSecurityManager.java</file>\n            <file>file:/C:/Users/dininski/Documents/NetBeansProjects/SandboxTests/src/sandboxtests/SandboxTests.java</file>\n        </group>\n    </open-files>\n</project-private>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/project.properties",
    "content": "annotation.processing.enabled=true\nannotation.processing.enabled.in.editor=false\nannotation.processing.processor.options=\nannotation.processing.processors.list=\nannotation.processing.run.all.processors=true\nannotation.processing.source.output=${build.generated.sources.dir}/ap-source-output\nbuild.classes.dir=${build.dir}/classes\nbuild.classes.excludes=**/*.java,**/*.form\n# This directory is removed when the project is cleaned:\nbuild.dir=build\nbuild.generated.dir=${build.dir}/generated\nbuild.generated.sources.dir=${build.dir}/generated-sources\n# Only compile against the classpath explicitly listed here:\nbuild.sysclasspath=ignore\nbuild.test.classes.dir=${build.dir}/test/classes\nbuild.test.results.dir=${build.dir}/test/results\n# Uncomment to specify the preferred debugger connection transport:\n#debug.transport=dt_socket\ndebug.classpath=\\\n    ${run.classpath}\ndebug.test.classpath=\\\n    ${run.test.classpath}\n# Files in build.classes.dir which should be excluded from distribution jar\ndist.archive.excludes=\n# This directory is removed when the project is cleaned:\ndist.dir=dist\ndist.jar=${dist.dir}/SandboxTests.jar\ndist.javadoc.dir=${dist.dir}/javadoc\nexcludes=\nincludes=**\njar.compress=false\njavac.classpath=\n# Space-separated list of extra javac options\njavac.compilerargs=\njavac.deprecation=false\njavac.processorpath=\\\n    ${javac.classpath}\njavac.source=1.7\njavac.target=1.7\njavac.test.classpath=\\\n    ${javac.classpath}:\\\n    ${build.classes.dir}\njavac.test.processorpath=\\\n    ${javac.test.classpath}\njavadoc.additionalparam=\njavadoc.author=false\njavadoc.encoding=${source.encoding}\njavadoc.noindex=false\njavadoc.nonavbar=false\njavadoc.notree=false\njavadoc.private=false\njavadoc.splitindex=true\njavadoc.use=true\njavadoc.version=false\njavadoc.windowtitle=\nmain.class=sandboxtests.SandboxTests\nmanifest.file=manifest.mf\nmeta.inf.dir=${src.dir}/META-INF\nmkdist.disabled=false\nplatform.active=default_platform\nrun.classpath=\\\n    ${javac.classpath}:\\\n    ${build.classes.dir}\n# Space-separated list of JVM arguments used when running the project.\n# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.\n# To set system properties for unit tests define test-sys-prop.name=value:\nrun.jvmargs=\nrun.test.classpath=\\\n    ${javac.test.classpath}:\\\n    ${build.test.classes.dir}\nsource.encoding=UTF-8\nsrc.dir=src\ntest.src.dir=test\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/nbproject/project.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://www.netbeans.org/ns/project/1\">\n    <type>org.netbeans.modules.java.j2seproject</type>\n    <configuration>\n        <data xmlns=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <name>SandboxTests</name>\n            <source-roots>\n                <root id=\"src.dir\"/>\n            </source-roots>\n            <test-roots>\n                <root id=\"test.src.dir\"/>\n            </test-roots>\n        </data>\n    </configuration>\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/src/sandboxtests/SandboxSecurityManager.java",
    "content": "/*\n* To change this license header, choose License Headers in Project Properties.\n* To change this template file, choose Tools | Templates\n* and open the template in the editor.\n*/\n\npackage sandboxtests;\n\nimport java.io.FileDescriptor;\nimport java.lang.reflect.ReflectPermission;\n\n/**\n *\n * @author dininski\n */\npublic class SandboxSecurityManager extends SecurityManager {\n    public SandboxSecurityManager() {\n    }\n    \n    @Override\n    public void checkAccess(Thread thread) {\n        throw new UnsupportedOperationException();\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/src/sandboxtests/SandboxTests.java",
    "content": "/*\n * To change this license header, choose License Headers in Project Properties.\n * To change this template file, choose Tools | Templates\n * and open the template in the editor.\n */\n\npackage sandboxtests;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Method;\n\n/**\n *\n * @author dininski\n */\npublic class SandboxTests {\n\n    /**\n     * @param args the command line arguments\n     */\n    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {\n        \n        // TODO: add checking for the user's package name.\n        // get the instance of the user created class, containing main(String[] args)\n        Class userClass = Class.forName(\"UserClass\");\n        Method userMethod = userClass.getMethod(\"main\", String[].class);\n        Constructor constructor = userClass.getConstructor();\n        Object instance = constructor.newInstance();\n        \n        // set the security manager\n        SandboxSecurityManager securityManager = new SandboxSecurityManager();\n        System.setSecurityManager(securityManager);\n        \n        // TODO: Limit the user from using Reflection as well other potentially\n        // dangerous libraries (java.lang ?)\n        userMethod.invoke(userClass, (Object)args);\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/SandboxTests/src/sandboxtests/UserClass.java",
    "content": "/*\n* To change this license header, choose License Headers in Project Properties.\n* To change this template file, choose Tools | Templates\n* and open the template in the editor.\n*/\n\nimport java.awt.Toolkit;\nimport java.awt.datatransfer.DataFlavor;\nimport java.awt.datatransfer.UnsupportedFlavorException;\nimport java.io.BufferedReader;\nimport java.io.FileReader;\nimport java.io.IOException;\nimport java.util.Scanner;\n\n/**\n *\n * @author dininski\n */\npublic class UserClass {\n    public static void main(String[] args) throws IOException {\n        // read the input\n        try {\n            PrintInput(args);\n        } catch (Exception ex) {\n            System.out.println(ex);\n        }\n        \n        // access file\n        try {\n            OpenFile(\"textfile.txt\");\n        } catch (Exception ex) {\n            System.out.println(String.format(\"Exception when trying to read a file. Exception: %s\", ex));\n        }\n        \n        // read clipboard - commented out because it throws an exception\n        // as new threads are not allowed\n        try {\n            // ReadClipboard();\n        } catch (Exception ex) {\n            System.out.println(String.format(\"Exception when trying to read clipboard. Exception: %s\", ex));\n        }\n        \n        // try to start a new thread\n        try {\n            StartNewThread();\n        } catch(Exception ex) {\n            System.out.println(String.format(\"Exception when trying to start a new thread. Exception: %s\", ex));\n        }\n        \n        // try to use reflection\n        try {\n            UseReflection();\n        } catch(Exception ex) {\n            System.out.println(String.format(\"Exception when trying to user Reflection. Exception: %s\", ex));\n        }\n        \n        // read console\n        ReadConsole();\n    }\n    \n    private static void PrintInput(String[] args) {\n        for (String arg : args) {\n            System.out.println(arg);\n        }\n    }\n    \n    private static void OpenFile(String fileName) throws IOException {\n        BufferedReader br = new BufferedReader(new FileReader(fileName));\n        try {\n            StringBuilder sb = new StringBuilder();\n            String line = br.readLine();\n            \n            while (line != null) {\n                sb.append(line);\n                sb.append('\\n');\n                line = br.readLine();\n            }\n            \n            String everything = sb.toString();\n            System.out.println(everything);\n        } finally {\n            br.close();\n        }\n    }\n    \n    private static void ReadClipboard() throws UnsupportedFlavorException, IOException {\n        String data = (String) Toolkit.getDefaultToolkit()\n                .getSystemClipboard().getData(DataFlavor.stringFlavor);\n    }\n    \n    private static void ReadConsole() {\n        Scanner scanner = new Scanner(System.in);\n        String enteredText = scanner.nextLine();\n        System.out.println(enteredText);\n    }\n    \n    private static void StartNewThread() {\n        TestThread obj;\n        obj = new TestThread();\n        Thread thread;\n        thread = new Thread(obj);\n        thread.start();\n    }\n    \n    static class TestThread extends Thread {\n        @Override\n        public synchronized void run() {\n            for (int i = 0; i < 10; i++) {\n                System.out.println(\"No\");\n            }\n        }\n    }\n    \n    private static void UseReflection() throws ClassNotFoundException {\n        Class cl = Class.forName(\"UserClass\");\n        System.out.println(cl);\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/build/built-jar.properties",
    "content": "#Mon, 16 Dec 2013 21:45:05 +0200\n\n\nC\\:\\\\Users\\\\dininski\\\\Documents\\\\NetBeansProjects\\\\TestApplication=\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/build.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- You may freely edit this file. See commented blocks below for -->\n<!-- some examples of how to customize the build. -->\n<!-- (If you delete it and reopen the project it will be recreated.) -->\n<!-- By default, only the Clean and Build commands use this build script. -->\n<!-- Commands such as Run, Debug, and Test only use this build script if -->\n<!-- the Compile on Save feature is turned off for the project. -->\n<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->\n<!-- in the project's Project Properties dialog box.-->\n<project name=\"TestApplication\" default=\"default\" basedir=\".\">\n    <description>Builds, tests, and runs the project TestApplication.</description>\n    <import file=\"nbproject/build-impl.xml\"/>\n    <!--\n\n    There exist several targets which are by default empty and which can be \n    used for execution of your tasks. These targets are usually executed \n    before and after some main targets. They are: \n\n      -pre-init:                 called before initialization of project properties\n      -post-init:                called after initialization of project properties\n      -pre-compile:              called before javac compilation\n      -post-compile:             called after javac compilation\n      -pre-compile-single:       called before javac compilation of single file\n      -post-compile-single:      called after javac compilation of single file\n      -pre-compile-test:         called before javac compilation of JUnit tests\n      -post-compile-test:        called after javac compilation of JUnit tests\n      -pre-compile-test-single:  called before javac compilation of single JUnit test\n      -post-compile-test-single: called after javac compilation of single JUunit test\n      -pre-jar:                  called before JAR building\n      -post-jar:                 called after JAR building\n      -post-clean:               called after cleaning build products\n\n    (Targets beginning with '-' are not intended to be called on their own.)\n\n    Example of inserting an obfuscator after compilation could look like this:\n\n        <target name=\"-post-compile\">\n            <obfuscate>\n                <fileset dir=\"${build.classes.dir}\"/>\n            </obfuscate>\n        </target>\n\n    For list of available properties check the imported \n    nbproject/build-impl.xml file. \n\n\n    Another way to customize the build is by overriding existing main targets.\n    The targets of interest are: \n\n      -init-macrodef-javac:     defines macro for javac compilation\n      -init-macrodef-junit:     defines macro for junit execution\n      -init-macrodef-debug:     defines macro for class debugging\n      -init-macrodef-java:      defines macro for class execution\n      -do-jar:                  JAR building\n      run:                      execution of project \n      -javadoc-build:           Javadoc generation\n      test-report:              JUnit report generation\n\n    An example of overriding the target for project execution could look like this:\n\n        <target name=\"run\" depends=\"TestApplication-impl.jar\">\n            <exec dir=\"bin\" executable=\"launcher.exe\">\n                <arg file=\"${dist.jar}\"/>\n            </exec>\n        </target>\n\n    Notice that the overridden target depends on the jar target and not only on \n    the compile target as the regular run target does. Again, for a list of available \n    properties which you can use, check the target you are overriding in the\n    nbproject/build-impl.xml file. \n\n    -->\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/dist/README.TXT",
    "content": "========================\nBUILD OUTPUT DESCRIPTION\n========================\n\nWhen you build an Java application project that has a main class, the IDE\nautomatically copies all of the JAR\nfiles on the projects classpath to your projects dist/lib folder. The IDE\nalso adds each of the JAR files to the Class-Path element in the application\nJAR files manifest file (MANIFEST.MF).\n\nTo run the project from the command line, go to the dist folder and\ntype the following:\n\njava -jar \"TestApplication.jar\" \n\nTo distribute this project, zip up the dist folder (including the lib folder)\nand distribute the ZIP file.\n\nNotes:\n\n* If two JAR files on the project classpath have the same name, only the first\nJAR file is copied to the lib folder.\n* Only JAR files are copied to the lib folder.\nIf the classpath contains other types of files or folders, these files (folders)\nare not copied.\n* If a library on the projects classpath also has a Class-Path element\nspecified in the manifest,the content of the Class-Path element has to be on\nthe projects runtime path.\n* To set a main class in a standard Java project, right-click the project node\nin the Projects window and choose Properties. Then click Run and enter the\nclass name in the Main Class field. Alternatively, you can manually type the\nclass name in the manifest Main-Class element.\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/manifest.mf",
    "content": "Manifest-Version: 1.0\nX-COMMENT: Main-Class will be added automatically by build\n\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/build-impl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n*** GENERATED FROM project.xml - DO NOT EDIT  ***\n***         EDIT ../build.xml INSTEAD         ***\n\nFor the purpose of easier reading the script\nis divided into following sections:\n\n  - initialization\n  - compilation\n  - jar\n  - execution\n  - debugging\n  - javadoc\n  - test compilation\n  - test execution\n  - test debugging\n  - applet\n  - cleanup\n\n        -->\n<project xmlns:j2seproject1=\"http://www.netbeans.org/ns/j2se-project/1\" xmlns:j2seproject3=\"http://www.netbeans.org/ns/j2se-project/3\" xmlns:jaxrpc=\"http://www.netbeans.org/ns/j2se-project/jax-rpc\" basedir=\"..\" default=\"default\" name=\"TestApplication-impl\">\n    <fail message=\"Please build using Ant 1.8.0 or higher.\">\n        <condition>\n            <not>\n                <antversion atleast=\"1.8.0\"/>\n            </not>\n        </condition>\n    </fail>\n    <target depends=\"test,jar,javadoc\" description=\"Build and test whole project.\" name=\"default\"/>\n    <!-- \n                ======================\n                INITIALIZATION SECTION \n                ======================\n            -->\n    <target name=\"-pre-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"-pre-init\" name=\"-init-private\">\n        <property file=\"nbproject/private/config.properties\"/>\n        <property file=\"nbproject/private/configs/${config}.properties\"/>\n        <property file=\"nbproject/private/private.properties\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private\" name=\"-init-user\">\n        <property file=\"${user.properties.file}\"/>\n        <!-- The two properties below are usually overridden -->\n        <!-- by the active platform. Just a fallback. -->\n        <property name=\"default.javac.source\" value=\"1.4\"/>\n        <property name=\"default.javac.target\" value=\"1.4\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user\" name=\"-init-project\">\n        <property file=\"nbproject/configs/${config}.properties\"/>\n        <property file=\"nbproject/project.properties\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property\" name=\"-do-init\">\n        <property name=\"platform.java\" value=\"${java.home}/bin/java\"/>\n        <available file=\"${manifest.file}\" property=\"manifest.available\"/>\n        <condition property=\"splashscreen.available\">\n            <and>\n                <not>\n                    <equals arg1=\"${application.splash}\" arg2=\"\" trim=\"true\"/>\n                </not>\n                <available file=\"${application.splash}\"/>\n            </and>\n        </condition>\n        <condition property=\"main.class.available\">\n            <and>\n                <isset property=\"main.class\"/>\n                <not>\n                    <equals arg1=\"${main.class}\" arg2=\"\" trim=\"true\"/>\n                </not>\n            </and>\n        </condition>\n        <condition property=\"profile.available\">\n            <and>\n                <isset property=\"javac.profile\"/>\n                <length length=\"0\" string=\"${javac.profile}\" when=\"greater\"/>\n                <matches pattern=\"1\\.[89](\\..*)?\" string=\"${javac.source}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive\">\n            <not>\n                <istrue value=\"${jar.archive.disabled}\"/>\n            </not>\n        </condition>\n        <condition property=\"do.mkdist\">\n            <and>\n                <isset property=\"do.archive\"/>\n                <isset property=\"libs.CopyLibs.classpath\"/>\n                <not>\n                    <istrue value=\"${mkdist.disabled}\"/>\n                </not>\n            </and>\n        </condition>\n        <condition property=\"do.archive+manifest.available\">\n            <and>\n                <isset property=\"manifest.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+main.class.available\">\n            <and>\n                <isset property=\"main.class.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+splashscreen.available\">\n            <and>\n                <isset property=\"splashscreen.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"do.archive+profile.available\">\n            <and>\n                <isset property=\"profile.available\"/>\n                <istrue value=\"${do.archive}\"/>\n            </and>\n        </condition>\n        <condition property=\"have.tests\">\n            <or>\n                <available file=\"${test.src.dir}\"/>\n            </or>\n        </condition>\n        <condition property=\"have.sources\">\n            <or>\n                <available file=\"${src.dir}\"/>\n            </or>\n        </condition>\n        <condition property=\"netbeans.home+have.tests\">\n            <and>\n                <isset property=\"netbeans.home\"/>\n                <isset property=\"have.tests\"/>\n            </and>\n        </condition>\n        <condition property=\"no.javadoc.preview\">\n            <and>\n                <isset property=\"javadoc.preview\"/>\n                <isfalse value=\"${javadoc.preview}\"/>\n            </and>\n        </condition>\n        <property name=\"run.jvmargs\" value=\"\"/>\n        <property name=\"run.jvmargs.ide\" value=\"\"/>\n        <property name=\"javac.compilerargs\" value=\"\"/>\n        <property name=\"work.dir\" value=\"${basedir}\"/>\n        <condition property=\"no.deps\">\n            <and>\n                <istrue value=\"${no.dependencies}\"/>\n            </and>\n        </condition>\n        <property name=\"javac.debug\" value=\"true\"/>\n        <property name=\"javadoc.preview\" value=\"true\"/>\n        <property name=\"application.args\" value=\"\"/>\n        <property name=\"source.encoding\" value=\"${file.encoding}\"/>\n        <property name=\"runtime.encoding\" value=\"${source.encoding}\"/>\n        <condition property=\"javadoc.encoding.used\" value=\"${javadoc.encoding}\">\n            <and>\n                <isset property=\"javadoc.encoding\"/>\n                <not>\n                    <equals arg1=\"${javadoc.encoding}\" arg2=\"\"/>\n                </not>\n            </and>\n        </condition>\n        <property name=\"javadoc.encoding.used\" value=\"${source.encoding}\"/>\n        <property name=\"includes\" value=\"**\"/>\n        <property name=\"excludes\" value=\"\"/>\n        <property name=\"do.depend\" value=\"false\"/>\n        <condition property=\"do.depend.true\">\n            <istrue value=\"${do.depend}\"/>\n        </condition>\n        <path id=\"endorsed.classpath.path\" path=\"${endorsed.classpath}\"/>\n        <condition else=\"\" property=\"endorsed.classpath.cmd.line.arg\" value=\"-Xbootclasspath/p:'${toString:endorsed.classpath.path}'\">\n            <and>\n                <isset property=\"endorsed.classpath\"/>\n                <not>\n                    <equals arg1=\"${endorsed.classpath}\" arg2=\"\" trim=\"true\"/>\n                </not>\n            </and>\n        </condition>\n        <condition else=\"\" property=\"javac.profile.cmd.line.arg\" value=\"-profile ${javac.profile}\">\n            <isset property=\"profile.available\"/>\n        </condition>\n        <condition else=\"false\" property=\"jdkBug6558476\">\n            <and>\n                <matches pattern=\"1\\.[56]\" string=\"${java.specification.version}\"/>\n                <not>\n                    <os family=\"unix\"/>\n                </not>\n            </and>\n        </condition>\n        <property name=\"javac.fork\" value=\"${jdkBug6558476}\"/>\n        <property name=\"jar.index\" value=\"false\"/>\n        <property name=\"jar.index.metainf\" value=\"${jar.index}\"/>\n        <property name=\"copylibs.rebase\" value=\"true\"/>\n        <available file=\"${meta.inf.dir}/persistence.xml\" property=\"has.persistence.xml\"/>\n        <condition property=\"junit.available\">\n            <or>\n                <available classname=\"org.junit.Test\" classpath=\"${run.test.classpath}\"/>\n                <available classname=\"junit.framework.Test\" classpath=\"${run.test.classpath}\"/>\n            </or>\n        </condition>\n        <condition property=\"testng.available\">\n            <available classname=\"org.testng.annotations.Test\" classpath=\"${run.test.classpath}\"/>\n        </condition>\n        <condition property=\"junit+testng.available\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <istrue value=\"${testng.available}\"/>\n            </and>\n        </condition>\n        <condition else=\"testng\" property=\"testng.mode\" value=\"mixed\">\n            <istrue value=\"${junit+testng.available}\"/>\n        </condition>\n        <condition else=\"\" property=\"testng.debug.mode\" value=\"-mixed\">\n            <istrue value=\"${junit+testng.available}\"/>\n        </condition>\n    </target>\n    <target name=\"-post-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-do-init\" name=\"-init-check\">\n        <fail unless=\"src.dir\">Must set src.dir</fail>\n        <fail unless=\"test.src.dir\">Must set test.src.dir</fail>\n        <fail unless=\"build.dir\">Must set build.dir</fail>\n        <fail unless=\"dist.dir\">Must set dist.dir</fail>\n        <fail unless=\"build.classes.dir\">Must set build.classes.dir</fail>\n        <fail unless=\"dist.javadoc.dir\">Must set dist.javadoc.dir</fail>\n        <fail unless=\"build.test.classes.dir\">Must set build.test.classes.dir</fail>\n        <fail unless=\"build.test.results.dir\">Must set build.test.results.dir</fail>\n        <fail unless=\"build.classes.excludes\">Must set build.classes.excludes</fail>\n        <fail unless=\"dist.jar\">Must set dist.jar</fail>\n    </target>\n    <target name=\"-init-macrodef-property\">\n        <macrodef name=\"property\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute name=\"name\"/>\n            <attribute name=\"value\"/>\n            <sequential>\n                <property name=\"@{name}\" value=\"${@{value}}\"/>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" if=\"ap.supported.internal\" name=\"-init-macrodef-javac-with-processors\">\n        <macrodef name=\"javac\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <attribute default=\"${javac.processorpath}\" name=\"processorpath\"/>\n            <attribute default=\"${build.generated.sources.dir}/ap-source-output\" name=\"apgeneratedsrcdir\"/>\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"${javac.debug}\" name=\"debug\"/>\n            <attribute default=\"${empty.dir}\" name=\"sourcepath\"/>\n            <attribute default=\"${empty.dir}\" name=\"gensrcdir\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.dir}/empty\" name=\"empty.dir\"/>\n                <mkdir dir=\"${empty.dir}\"/>\n                <mkdir dir=\"@{apgeneratedsrcdir}\"/>\n                <javac debug=\"@{debug}\" deprecation=\"${javac.deprecation}\" destdir=\"@{destdir}\" encoding=\"${source.encoding}\" excludes=\"@{excludes}\" fork=\"${javac.fork}\" includeantruntime=\"false\" includes=\"@{includes}\" source=\"${javac.source}\" sourcepath=\"@{sourcepath}\" srcdir=\"@{srcdir}\" target=\"${javac.target}\" tempdir=\"${java.io.tmpdir}\">\n                    <src>\n                        <dirset dir=\"@{gensrcdir}\" erroronmissingdir=\"false\">\n                            <include name=\"*\"/>\n                        </dirset>\n                    </src>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <compilerarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.profile.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.compilerargs}\"/>\n                    <compilerarg value=\"-processorpath\"/>\n                    <compilerarg path=\"@{processorpath}:${empty.dir}\"/>\n                    <compilerarg line=\"${ap.processors.internal}\"/>\n                    <compilerarg line=\"${annotation.processing.processor.options}\"/>\n                    <compilerarg value=\"-s\"/>\n                    <compilerarg path=\"@{apgeneratedsrcdir}\"/>\n                    <compilerarg line=\"${ap.proc.none.internal}\"/>\n                    <customize/>\n                </javac>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" name=\"-init-macrodef-javac-without-processors\" unless=\"ap.supported.internal\">\n        <macrodef name=\"javac\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <attribute default=\"${javac.processorpath}\" name=\"processorpath\"/>\n            <attribute default=\"${build.generated.sources.dir}/ap-source-output\" name=\"apgeneratedsrcdir\"/>\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"${javac.debug}\" name=\"debug\"/>\n            <attribute default=\"${empty.dir}\" name=\"sourcepath\"/>\n            <attribute default=\"${empty.dir}\" name=\"gensrcdir\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.dir}/empty\" name=\"empty.dir\"/>\n                <mkdir dir=\"${empty.dir}\"/>\n                <javac debug=\"@{debug}\" deprecation=\"${javac.deprecation}\" destdir=\"@{destdir}\" encoding=\"${source.encoding}\" excludes=\"@{excludes}\" fork=\"${javac.fork}\" includeantruntime=\"false\" includes=\"@{includes}\" source=\"${javac.source}\" sourcepath=\"@{sourcepath}\" srcdir=\"@{srcdir}\" target=\"${javac.target}\" tempdir=\"${java.io.tmpdir}\">\n                    <src>\n                        <dirset dir=\"@{gensrcdir}\" erroronmissingdir=\"false\">\n                            <include name=\"*\"/>\n                        </dirset>\n                    </src>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <compilerarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.profile.cmd.line.arg}\"/>\n                    <compilerarg line=\"${javac.compilerargs}\"/>\n                    <customize/>\n                </javac>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors\" name=\"-init-macrodef-javac\">\n        <macrodef name=\"depend\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${src.dir}\" name=\"srcdir\"/>\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <attribute default=\"${javac.classpath}\" name=\"classpath\"/>\n            <sequential>\n                <depend cache=\"${build.dir}/depcache\" destdir=\"@{destdir}\" excludes=\"${excludes}\" includes=\"${includes}\" srcdir=\"@{srcdir}\">\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                </depend>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"force-recompile\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${build.classes.dir}\" name=\"destdir\"/>\n            <sequential>\n                <fail unless=\"javac.includes\">Must set javac.includes</fail>\n                <pathconvert pathsep=\"${line.separator}\" property=\"javac.includes.binary\">\n                    <path>\n                        <filelist dir=\"@{destdir}\" files=\"${javac.includes}\"/>\n                    </path>\n                    <globmapper from=\"*.java\" to=\"*.class\"/>\n                </pathconvert>\n                <tempfile deleteonexit=\"true\" property=\"javac.includesfile.binary\"/>\n                <echo file=\"${javac.includesfile.binary}\" message=\"${javac.includes.binary}\"/>\n                <delete>\n                    <files includesfile=\"${javac.includesfile.binary}\"/>\n                </delete>\n                <delete>\n                    <fileset file=\"${javac.includesfile.binary}\"/>\n                </delete>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${junit.available}\" name=\"-init-macrodef-junit-init\">\n        <condition else=\"false\" property=\"nb.junit.batch\" value=\"true\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <not>\n                    <isset property=\"test.method\"/>\n                </not>\n            </and>\n        </condition>\n        <condition else=\"false\" property=\"nb.junit.single\" value=\"true\">\n            <and>\n                <istrue value=\"${junit.available}\"/>\n                <isset property=\"test.method\"/>\n            </and>\n        </condition>\n    </target>\n    <target name=\"-init-test-properties\">\n        <property name=\"test.binaryincludes\" value=\"&lt;nothing&gt;\"/>\n        <property name=\"test.binarytestincludes\" value=\"\"/>\n        <property name=\"test.binaryexcludes\" value=\"\"/>\n    </target>\n    <target if=\"${nb.junit.single}\" name=\"-init-macrodef-junit-single\" unless=\"${nb.junit.batch}\">\n        <macrodef name=\"junit\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <test methods=\"@{testmethods}\" name=\"@{testincludes}\" todir=\"${build.test.results.dir}\"/>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-test-properties\" if=\"${nb.junit.batch}\" name=\"-init-macrodef-junit-batch\" unless=\"${nb.junit.single}\">\n        <macrodef name=\"junit\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <batchtest todir=\"${build.test.results.dir}\">\n                        <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},${excludes}\" includes=\"@{includes}\">\n                            <filename name=\"@{testincludes}\"/>\n                        </fileset>\n                        <fileset dir=\"${build.test.classes.dir}\" excludes=\"@{excludes},${excludes},${test.binaryexcludes}\" includes=\"${test.binaryincludes}\">\n                            <filename name=\"${test.binarytestincludes}\"/>\n                        </fileset>\n                    </batchtest>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch\" if=\"${junit.available}\" name=\"-init-macrodef-junit\"/>\n    <target if=\"${testng.available}\" name=\"-init-macrodef-testng\">\n        <macrodef name=\"testng\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <condition else=\"\" property=\"testng.methods.arg\" value=\"@{testincludes}.@{testmethods}\">\n                    <isset property=\"test.method\"/>\n                </condition>\n                <union id=\"test.set\">\n                    <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},**/*.xml,${excludes}\" includes=\"@{includes}\">\n                        <filename name=\"@{testincludes}\"/>\n                    </fileset>\n                </union>\n                <taskdef classname=\"org.testng.TestNGAntTask\" classpath=\"${run.test.classpath}\" name=\"testng\"/>\n                <testng classfilesetref=\"test.set\" failureProperty=\"tests.failed\" listeners=\"org.testng.reporters.VerboseReporter\" methods=\"${testng.methods.arg}\" mode=\"${testng.mode}\" outputdir=\"${build.test.results.dir}\" suitename=\"TestApplication\" testname=\"TestNG tests\" workingDir=\"${work.dir}\">\n                    <xmlfileset dir=\"${build.test.classes.dir}\" includes=\"@{testincludes}\"/>\n                    <propertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </propertyset>\n                    <customize/>\n                </testng>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-test-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <echo>No tests executed.</echo>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit\" if=\"${junit.available}\" name=\"-init-macrodef-junit-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:junit excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng\" if=\"${testng.available}\" name=\"-init-macrodef-testng-impl\">\n        <macrodef name=\"test-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:testng excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:testng>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl\" name=\"-init-macrodef-test\">\n        <macrodef name=\"test\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <sequential>\n                <j2seproject3:test-impl excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize>\n                        <classpath>\n                            <path path=\"${run.test.classpath}\"/>\n                        </classpath>\n                        <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                        <jvmarg line=\"${run.jvmargs}\"/>\n                        <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    </customize>\n                </j2seproject3:test-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${junit.available}\" name=\"-init-macrodef-junit-debug\" unless=\"${nb.junit.batch}\">\n        <macrodef name=\"junit-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <test methods=\"@{testmethods}\" name=\"@{testincludes}\" todir=\"${build.test.results.dir}\"/>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-test-properties\" if=\"${nb.junit.batch}\" name=\"-init-macrodef-junit-debug-batch\">\n        <macrodef name=\"junit-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property name=\"junit.forkmode\" value=\"perTest\"/>\n                <junit dir=\"${work.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" forkmode=\"${junit.forkmode}\" showoutput=\"true\" tempdir=\"${build.dir}\">\n                    <batchtest todir=\"${build.test.results.dir}\">\n                        <fileset dir=\"${test.src.dir}\" excludes=\"@{excludes},${excludes}\" includes=\"@{includes}\">\n                            <filename name=\"@{testincludes}\"/>\n                        </fileset>\n                        <fileset dir=\"${build.test.classes.dir}\" excludes=\"@{excludes},${excludes},${test.binaryexcludes}\" includes=\"${test.binaryincludes}\">\n                            <filename name=\"${test.binarytestincludes}\"/>\n                        </fileset>\n                    </batchtest>\n                    <syspropertyset>\n                        <propertyref prefix=\"test-sys-prop.\"/>\n                        <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <formatter type=\"brief\" usefile=\"false\"/>\n                    <formatter type=\"xml\"/>\n                    <jvmarg value=\"-ea\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <customize/>\n                </junit>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch\" if=\"${junit.available}\" name=\"-init-macrodef-junit-debug-impl\">\n        <macrodef name=\"test-debug-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <element implicit=\"true\" name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:junit-debug excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize/>\n                </j2seproject3:junit-debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target if=\"${testng.available}\" name=\"-init-macrodef-testng-debug\">\n        <macrodef name=\"testng-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <element name=\"customize2\" optional=\"true\"/>\n            <sequential>\n                <condition else=\"-testclass @{testClass}\" property=\"test.class.or.method\" value=\"-methods @{testClass}.@{testMethod}\">\n                    <isset property=\"test.method\"/>\n                </condition>\n                <condition else=\"-suitename TestApplication -testname @{testClass} ${test.class.or.method}\" property=\"testng.cmd.args\" value=\"@{testClass}\">\n                    <matches pattern=\".*\\.xml\" string=\"@{testClass}\"/>\n                </condition>\n                <delete dir=\"${build.test.results.dir}\" quiet=\"true\"/>\n                <mkdir dir=\"${build.test.results.dir}\"/>\n                <j2seproject3:debug classname=\"org.testng.TestNG\" classpath=\"${debug.test.classpath}\">\n                    <customize>\n                        <customize2/>\n                        <jvmarg value=\"-ea\"/>\n                        <arg line=\"${testng.debug.mode}\"/>\n                        <arg line=\"-d ${build.test.results.dir}\"/>\n                        <arg line=\"-listener org.testng.reporters.VerboseReporter\"/>\n                        <arg line=\"${testng.cmd.args}\"/>\n                    </customize>\n                </j2seproject3:debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng-debug\" if=\"${testng.available}\" name=\"-init-macrodef-testng-debug-impl\">\n        <macrodef name=\"testng-debug-impl\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <element implicit=\"true\" name=\"customize2\" optional=\"true\"/>\n            <sequential>\n                <j2seproject3:testng-debug testClass=\"@{testClass}\" testMethod=\"@{testMethod}\">\n                    <customize2/>\n                </j2seproject3:testng-debug>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-junit-debug-impl\" if=\"${junit.available}\" name=\"-init-macrodef-test-debug-junit\">\n        <macrodef name=\"test-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <sequential>\n                <j2seproject3:test-debug-impl excludes=\"@{excludes}\" includes=\"@{includes}\" testincludes=\"@{testincludes}\" testmethods=\"@{testmethods}\">\n                    <customize>\n                        <classpath>\n                            <path path=\"${run.test.classpath}\"/>\n                        </classpath>\n                        <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                        <jvmarg line=\"${run.jvmargs}\"/>\n                        <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    </customize>\n                </j2seproject3:test-debug-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-testng-debug-impl\" if=\"${testng.available}\" name=\"-init-macrodef-test-debug-testng\">\n        <macrodef name=\"test-debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${includes}\" name=\"includes\"/>\n            <attribute default=\"${excludes}\" name=\"excludes\"/>\n            <attribute default=\"**\" name=\"testincludes\"/>\n            <attribute default=\"\" name=\"testmethods\"/>\n            <attribute default=\"${main.class}\" name=\"testClass\"/>\n            <attribute default=\"\" name=\"testMethod\"/>\n            <sequential>\n                <j2seproject3:testng-debug-impl testClass=\"@{testClass}\" testMethod=\"@{testMethod}\">\n                    <customize2>\n                        <syspropertyset>\n                            <propertyref prefix=\"test-sys-prop.\"/>\n                            <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                        </syspropertyset>\n                    </customize2>\n                </j2seproject3:testng-debug-impl>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng\" name=\"-init-macrodef-test-debug\"/>\n    <!--\n                pre NB7.2 profiling section; consider it deprecated\n            -->\n    <target depends=\"-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check\" if=\"profiler.info.jvmargs.agent\" name=\"profile-init\"/>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-pre-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-post-init\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"profiler.info.jvmargs.agent\" name=\"-profile-init-macrodef-profile\">\n        <macrodef name=\"resolve\">\n            <attribute name=\"name\"/>\n            <attribute name=\"value\"/>\n            <sequential>\n                <property name=\"@{name}\" value=\"${env.@{value}}\"/>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"profile\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property environment=\"env\"/>\n                <resolve name=\"profiler.current.path\" value=\"${profiler.info.pathvar}\"/>\n                <java classname=\"@{classname}\" dir=\"${profiler.info.dir}\" fork=\"true\" jvm=\"${profiler.info.jvm}\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg value=\"${profiler.info.jvmargs.agent}\"/>\n                    <jvmarg line=\"${profiler.info.jvmargs}\"/>\n                    <env key=\"${profiler.info.pathvar}\" path=\"${profiler.info.agentpath}:${profiler.current.path}\"/>\n                    <arg line=\"${application.args}\"/>\n                    <classpath>\n                        <path path=\"${run.classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target depends=\"-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-init-check\">\n        <fail unless=\"profiler.info.jvm\">Must set JVM to use for profiling in profiler.info.jvm</fail>\n        <fail unless=\"profiler.info.jvmargs.agent\">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>\n    </target>\n    <!--\n                end of pre NB7.2 profiling section\n            -->\n    <target depends=\"-init-debug-args\" name=\"-init-macrodef-nbjpda\">\n        <macrodef name=\"nbjpdastart\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${main.class}\" name=\"name\"/>\n            <attribute default=\"${debug.classpath}\" name=\"classpath\"/>\n            <attribute default=\"\" name=\"stopclassname\"/>\n            <sequential>\n                <nbjpdastart addressproperty=\"jpda.address\" name=\"@{name}\" stopclassname=\"@{stopclassname}\" transport=\"${debug-transport}\">\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                </nbjpdastart>\n            </sequential>\n        </macrodef>\n        <macrodef name=\"nbjpdareload\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${build.classes.dir}\" name=\"dir\"/>\n            <sequential>\n                <nbjpdareload>\n                    <fileset dir=\"@{dir}\" includes=\"${fix.classes}\">\n                        <include name=\"${fix.includes}*.class\"/>\n                    </fileset>\n                </nbjpdareload>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-debug-args\">\n        <property name=\"version-output\" value=\"java version &quot;${ant.java.version}\"/>\n        <condition property=\"have-jdk-older-than-1.4\">\n            <or>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.0\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.1\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.2\"/>\n                <contains string=\"${version-output}\" substring=\"java version &quot;1.3\"/>\n            </or>\n        </condition>\n        <condition else=\"-Xdebug\" property=\"debug-args-line\" value=\"-Xdebug -Xnoagent -Djava.compiler=none\">\n            <istrue value=\"${have-jdk-older-than-1.4}\"/>\n        </condition>\n        <condition else=\"dt_socket\" property=\"debug-transport-by-os\" value=\"dt_shmem\">\n            <os family=\"windows\"/>\n        </condition>\n        <condition else=\"${debug-transport-by-os}\" property=\"debug-transport\" value=\"${debug.transport}\">\n            <isset property=\"debug.transport\"/>\n        </condition>\n    </target>\n    <target depends=\"-init-debug-args\" name=\"-init-macrodef-debug\">\n        <macrodef name=\"debug\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <attribute default=\"${debug.classpath}\" name=\"classpath\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <java classname=\"@{classname}\" dir=\"${work.dir}\" fork=\"true\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg line=\"${debug-args-line}\"/>\n                    <jvmarg value=\"-Xrunjdwp:transport=${debug-transport},address=${jpda.address}\"/>\n                    <jvmarg value=\"-Dfile.encoding=${runtime.encoding}\"/>\n                    <redirector errorencoding=\"${runtime.encoding}\" inputencoding=\"${runtime.encoding}\" outputencoding=\"${runtime.encoding}\"/>\n                    <jvmarg line=\"${run.jvmargs}\"/>\n                    <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-java\">\n        <macrodef name=\"java\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <attribute default=\"${main.class}\" name=\"classname\"/>\n            <attribute default=\"${run.classpath}\" name=\"classpath\"/>\n            <attribute default=\"jvm\" name=\"jvm\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <java classname=\"@{classname}\" dir=\"${work.dir}\" fork=\"true\">\n                    <jvmarg line=\"${endorsed.classpath.cmd.line.arg}\"/>\n                    <jvmarg value=\"-Dfile.encoding=${runtime.encoding}\"/>\n                    <redirector errorencoding=\"${runtime.encoding}\" inputencoding=\"${runtime.encoding}\" outputencoding=\"${runtime.encoding}\"/>\n                    <jvmarg line=\"${run.jvmargs}\"/>\n                    <jvmarg line=\"${run.jvmargs.ide}\"/>\n                    <classpath>\n                        <path path=\"@{classpath}\"/>\n                    </classpath>\n                    <syspropertyset>\n                        <propertyref prefix=\"run-sys-prop.\"/>\n                        <mapper from=\"run-sys-prop.*\" to=\"*\" type=\"glob\"/>\n                    </syspropertyset>\n                    <customize/>\n                </java>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-macrodef-copylibs\">\n        <macrodef name=\"copylibs\" uri=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <attribute default=\"${manifest.file}\" name=\"manifest\"/>\n            <element name=\"customize\" optional=\"true\"/>\n            <sequential>\n                <property location=\"${build.classes.dir}\" name=\"build.classes.dir.resolved\"/>\n                <pathconvert property=\"run.classpath.without.build.classes.dir\">\n                    <path path=\"${run.classpath}\"/>\n                    <map from=\"${build.classes.dir.resolved}\" to=\"\"/>\n                </pathconvert>\n                <pathconvert pathsep=\" \" property=\"jar.classpath\">\n                    <path path=\"${run.classpath.without.build.classes.dir}\"/>\n                    <chainedmapper>\n                        <flattenmapper/>\n                        <filtermapper>\n                            <replacestring from=\" \" to=\"%20\"/>\n                        </filtermapper>\n                        <globmapper from=\"*\" to=\"lib/*\"/>\n                    </chainedmapper>\n                </pathconvert>\n                <taskdef classname=\"org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs\" classpath=\"${libs.CopyLibs.classpath}\" name=\"copylibs\"/>\n                <copylibs compress=\"${jar.compress}\" excludeFromCopy=\"${copylibs.excludes}\" index=\"${jar.index}\" indexMetaInf=\"${jar.index.metainf}\" jarfile=\"${dist.jar}\" manifest=\"@{manifest}\" rebase=\"${copylibs.rebase}\" runtimeclasspath=\"${run.classpath.without.build.classes.dir}\">\n                    <fileset dir=\"${build.classes.dir}\" excludes=\"${dist.archive.excludes}\"/>\n                    <manifest>\n                        <attribute name=\"Class-Path\" value=\"${jar.classpath}\"/>\n                        <customize/>\n                    </manifest>\n                </copylibs>\n            </sequential>\n        </macrodef>\n    </target>\n    <target name=\"-init-presetdef-jar\">\n        <presetdef name=\"jar\" uri=\"http://www.netbeans.org/ns/j2se-project/1\">\n            <jar compress=\"${jar.compress}\" index=\"${jar.index}\" jarfile=\"${dist.jar}\">\n                <j2seproject1:fileset dir=\"${build.classes.dir}\" excludes=\"${dist.archive.excludes}\"/>\n            </jar>\n        </presetdef>\n    </target>\n    <target name=\"-init-ap-cmdline-properties\">\n        <property name=\"annotation.processing.enabled\" value=\"true\"/>\n        <property name=\"annotation.processing.processors.list\" value=\"\"/>\n        <property name=\"annotation.processing.processor.options\" value=\"\"/>\n        <property name=\"annotation.processing.run.all.processors\" value=\"true\"/>\n        <property name=\"javac.processorpath\" value=\"${javac.classpath}\"/>\n        <property name=\"javac.test.processorpath\" value=\"${javac.test.classpath}\"/>\n        <condition property=\"ap.supported.internal\" value=\"true\">\n            <not>\n                <matches pattern=\"1\\.[0-5](\\..*)?\" string=\"${javac.source}\"/>\n            </not>\n        </condition>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties\" if=\"ap.supported.internal\" name=\"-init-ap-cmdline-supported\">\n        <condition else=\"\" property=\"ap.processors.internal\" value=\"-processor ${annotation.processing.processors.list}\">\n            <isfalse value=\"${annotation.processing.run.all.processors}\"/>\n        </condition>\n        <condition else=\"\" property=\"ap.proc.none.internal\" value=\"-proc:none\">\n            <isfalse value=\"${annotation.processing.enabled}\"/>\n        </condition>\n    </target>\n    <target depends=\"-init-ap-cmdline-properties,-init-ap-cmdline-supported\" name=\"-init-ap-cmdline\">\n        <property name=\"ap.cmd.line.internal\" value=\"\"/>\n    </target>\n    <target depends=\"-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline\" name=\"init\"/>\n    <!--\n                ===================\n                COMPILATION SECTION\n                ===================\n            -->\n    <target name=\"-deps-jar-init\" unless=\"built-jar.properties\">\n        <property location=\"${build.dir}/built-jar.properties\" name=\"built-jar.properties\"/>\n        <delete file=\"${built-jar.properties}\" quiet=\"true\"/>\n    </target>\n    <target if=\"already.built.jar.${basedir}\" name=\"-warn-already-built-jar\">\n        <echo level=\"warn\" message=\"Cycle detected: TestApplication was already built\"/>\n    </target>\n    <target depends=\"init,-deps-jar-init\" name=\"deps-jar\" unless=\"no.deps\">\n        <mkdir dir=\"${build.dir}\"/>\n        <touch file=\"${built-jar.properties}\" verbose=\"false\"/>\n        <property file=\"${built-jar.properties}\" prefix=\"already.built.jar.\"/>\n        <antcall target=\"-warn-already-built-jar\"/>\n        <propertyfile file=\"${built-jar.properties}\">\n            <entry key=\"${basedir}\" value=\"\"/>\n        </propertyfile>\n    </target>\n    <target depends=\"init,-check-automatic-build,-clean-after-automatic-build\" name=\"-verify-automatic-build\"/>\n    <target depends=\"init\" name=\"-check-automatic-build\">\n        <available file=\"${build.classes.dir}/.netbeans_automatic_build\" property=\"netbeans.automatic.build\"/>\n    </target>\n    <target depends=\"init\" if=\"netbeans.automatic.build\" name=\"-clean-after-automatic-build\">\n        <antcall target=\"clean\"/>\n    </target>\n    <target depends=\"init,deps-jar\" name=\"-pre-pre-compile\">\n        <mkdir dir=\"${build.classes.dir}\"/>\n    </target>\n    <target name=\"-pre-compile\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"do.depend.true\" name=\"-compile-depend\">\n        <pathconvert property=\"build.generated.subdirs\">\n            <dirset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"*\"/>\n            </dirset>\n        </pathconvert>\n        <j2seproject3:depend srcdir=\"${src.dir}:${build.generated.subdirs}\"/>\n    </target>\n    <target depends=\"init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend\" if=\"have.sources\" name=\"-do-compile\">\n        <j2seproject3:javac gensrcdir=\"${build.generated.sources.dir}\"/>\n        <copy todir=\"${build.classes.dir}\">\n            <fileset dir=\"${src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target if=\"has.persistence.xml\" name=\"-copy-persistence-xml\">\n        <mkdir dir=\"${build.classes.dir}/META-INF\"/>\n        <copy todir=\"${build.classes.dir}/META-INF\">\n            <fileset dir=\"${meta.inf.dir}\" includes=\"persistence.xml orm.xml\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile\" description=\"Compile project.\" name=\"compile\"/>\n    <target name=\"-pre-compile-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-pre-pre-compile\" name=\"-do-compile-single\">\n        <fail unless=\"javac.includes\">Must select some files in the IDE or set javac.includes</fail>\n        <j2seproject3:force-recompile/>\n        <j2seproject3:javac excludes=\"\" gensrcdir=\"${build.generated.sources.dir}\" includes=\"${javac.includes}\" sourcepath=\"${src.dir}\"/>\n    </target>\n    <target name=\"-post-compile-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single\" name=\"compile-single\"/>\n    <!--\n                ====================\n                JAR BUILDING SECTION\n                ====================\n            -->\n    <target depends=\"init\" name=\"-pre-pre-jar\">\n        <dirname file=\"${dist.jar}\" property=\"dist.jar.dir\"/>\n        <mkdir dir=\"${dist.jar.dir}\"/>\n    </target>\n    <target name=\"-pre-jar\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init\" if=\"do.archive\" name=\"-do-jar-create-manifest\" unless=\"manifest.available\">\n        <tempfile deleteonexit=\"true\" destdir=\"${build.dir}\" property=\"tmp.manifest.file\"/>\n        <touch file=\"${tmp.manifest.file}\" verbose=\"false\"/>\n    </target>\n    <target depends=\"init\" if=\"do.archive+manifest.available\" name=\"-do-jar-copy-manifest\">\n        <tempfile deleteonexit=\"true\" destdir=\"${build.dir}\" property=\"tmp.manifest.file\"/>\n        <copy file=\"${manifest.file}\" tofile=\"${tmp.manifest.file}\"/>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+main.class.available\" name=\"-do-jar-set-mainclass\">\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"Main-Class\" value=\"${main.class}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+profile.available\" name=\"-do-jar-set-profile\">\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"Profile\" value=\"${javac.profile}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-do-jar-create-manifest,-do-jar-copy-manifest\" if=\"do.archive+splashscreen.available\" name=\"-do-jar-set-splashscreen\">\n        <basename file=\"${application.splash}\" property=\"splashscreen.basename\"/>\n        <mkdir dir=\"${build.classes.dir}/META-INF\"/>\n        <copy failonerror=\"false\" file=\"${application.splash}\" todir=\"${build.classes.dir}/META-INF\"/>\n        <manifest file=\"${tmp.manifest.file}\" mode=\"update\">\n            <attribute name=\"SplashScreen-Image\" value=\"META-INF/${splashscreen.basename}\"/>\n        </manifest>\n    </target>\n    <target depends=\"init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen\" if=\"do.mkdist\" name=\"-do-jar-copylibs\">\n        <j2seproject3:copylibs manifest=\"${tmp.manifest.file}\"/>\n        <echo level=\"info\">To run this application from the command line without Ant, try:</echo>\n        <property location=\"${dist.jar}\" name=\"dist.jar.resolved\"/>\n        <echo level=\"info\">java -jar \"${dist.jar.resolved}\"</echo>\n    </target>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen\" if=\"do.archive\" name=\"-do-jar-jar\" unless=\"do.mkdist\">\n        <j2seproject1:jar manifest=\"${tmp.manifest.file}\"/>\n        <property location=\"${build.classes.dir}\" name=\"build.classes.dir.resolved\"/>\n        <property location=\"${dist.jar}\" name=\"dist.jar.resolved\"/>\n        <pathconvert property=\"run.classpath.with.dist.jar\">\n            <path path=\"${run.classpath}\"/>\n            <map from=\"${build.classes.dir.resolved}\" to=\"${dist.jar.resolved}\"/>\n        </pathconvert>\n        <condition else=\"\" property=\"jar.usage.message\" value=\"To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}\">\n            <isset property=\"main.class.available\"/>\n        </condition>\n        <condition else=\"debug\" property=\"jar.usage.level\" value=\"info\">\n            <isset property=\"main.class.available\"/>\n        </condition>\n        <echo level=\"${jar.usage.level}\" message=\"${jar.usage.message}\"/>\n    </target>\n    <target depends=\"-do-jar-copylibs\" if=\"do.archive\" name=\"-do-jar-delete-manifest\">\n        <delete>\n            <fileset file=\"${tmp.manifest.file}\"/>\n        </delete>\n    </target>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest\" name=\"-do-jar-without-libraries\"/>\n    <target depends=\"init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest\" name=\"-do-jar-with-libraries\"/>\n    <target name=\"-post-jar\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar\" name=\"-do-jar\"/>\n    <target depends=\"init,compile,-pre-jar,-do-jar,-post-jar\" description=\"Build JAR.\" name=\"jar\"/>\n    <!--\n                =================\n                EXECUTION SECTION\n                =================\n            -->\n    <target depends=\"init,compile\" description=\"Run a main class.\" name=\"run\">\n        <j2seproject1:java>\n            <customize>\n                <arg line=\"${application.args}\"/>\n            </customize>\n        </j2seproject1:java>\n    </target>\n    <target name=\"-do-not-recompile\">\n        <property name=\"javac.includes.binary\" value=\"\"/>\n    </target>\n    <target depends=\"init,compile-single\" name=\"run-single\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <j2seproject1:java classname=\"${run.class}\"/>\n    </target>\n    <target depends=\"init,compile-test-single\" name=\"run-test-with-main\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <j2seproject1:java classname=\"${run.class}\" classpath=\"${run.test.classpath}\"/>\n    </target>\n    <!--\n                =================\n                DEBUGGING SECTION\n                =================\n            -->\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger\">\n        <j2seproject1:nbjpdastart name=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger-main-test\">\n        <j2seproject1:nbjpdastart classpath=\"${debug.test.classpath}\" name=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init,compile\" name=\"-debug-start-debuggee\">\n        <j2seproject3:debug>\n            <customize>\n                <arg line=\"${application.args}\"/>\n            </customize>\n        </j2seproject3:debug>\n    </target>\n    <target depends=\"init,compile,-debug-start-debugger,-debug-start-debuggee\" description=\"Debug project in IDE.\" if=\"netbeans.home\" name=\"debug\"/>\n    <target depends=\"init\" if=\"netbeans.home\" name=\"-debug-start-debugger-stepinto\">\n        <j2seproject1:nbjpdastart stopclassname=\"${main.class}\"/>\n    </target>\n    <target depends=\"init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee\" if=\"netbeans.home\" name=\"debug-stepinto\"/>\n    <target depends=\"init,compile-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-single\">\n        <fail unless=\"debug.class\">Must select one file in the IDE or set debug.class</fail>\n        <j2seproject3:debug classname=\"${debug.class}\"/>\n    </target>\n    <target depends=\"init,compile-single,-debug-start-debugger,-debug-start-debuggee-single\" if=\"netbeans.home\" name=\"debug-single\"/>\n    <target depends=\"init,compile-test-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-main-test\">\n        <fail unless=\"debug.class\">Must select one file in the IDE or set debug.class</fail>\n        <j2seproject3:debug classname=\"${debug.class}\" classpath=\"${debug.test.classpath}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test\" if=\"netbeans.home\" name=\"debug-test-with-main\"/>\n    <target depends=\"init\" name=\"-pre-debug-fix\">\n        <fail unless=\"fix.includes\">Must set fix.includes</fail>\n        <property name=\"javac.includes\" value=\"${fix.includes}.java\"/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,compile-single\" if=\"netbeans.home\" name=\"-do-debug-fix\">\n        <j2seproject1:nbjpdareload/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,-do-debug-fix\" if=\"netbeans.home\" name=\"debug-fix\"/>\n    <!--\n                =================\n                PROFILING SECTION\n                =================\n            -->\n    <!--\n                pre NB7.2 profiler integration\n            -->\n    <target depends=\"profile-init,compile\" description=\"Profile a project in the IDE.\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile/>\n    </target>\n    <target depends=\"profile-init,compile-single\" description=\"Profile a selected class in the IDE.\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-single-pre72\">\n        <fail unless=\"profile.class\">Must select one file in the IDE or set profile.class</fail>\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile classname=\"${profile.class}\"/>\n    </target>\n    <target depends=\"profile-init,compile-single\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-applet-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <profile classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </profile>\n    </target>\n    <target depends=\"profile-init,compile-test-single\" if=\"profiler.info.jvmargs.agent\" name=\"-profile-test-single-pre72\">\n        <fail unless=\"netbeans.home\">This target only works when run from inside the NetBeans IDE.</fail>\n        <nbprofiledirect>\n            <classpath>\n                <path path=\"${run.test.classpath}\"/>\n            </classpath>\n        </nbprofiledirect>\n        <junit dir=\"${profiler.info.dir}\" errorproperty=\"tests.failed\" failureproperty=\"tests.failed\" fork=\"true\" jvm=\"${profiler.info.jvm}\" showoutput=\"true\">\n            <env key=\"${profiler.info.pathvar}\" path=\"${profiler.info.agentpath}:${profiler.current.path}\"/>\n            <jvmarg value=\"${profiler.info.jvmargs.agent}\"/>\n            <jvmarg line=\"${profiler.info.jvmargs}\"/>\n            <test name=\"${profile.class}\"/>\n            <classpath>\n                <path path=\"${run.test.classpath}\"/>\n            </classpath>\n            <syspropertyset>\n                <propertyref prefix=\"test-sys-prop.\"/>\n                <mapper from=\"test-sys-prop.*\" to=\"*\" type=\"glob\"/>\n            </syspropertyset>\n            <formatter type=\"brief\" usefile=\"false\"/>\n            <formatter type=\"xml\"/>\n        </junit>\n    </target>\n    <!--\n                end of pre NB72 profiling section\n            -->\n    <target if=\"netbeans.home\" name=\"-profile-check\">\n        <condition property=\"profiler.configured\">\n            <or>\n                <contains casesensitive=\"true\" string=\"${run.jvmargs.ide}\" substring=\"-agentpath:\"/>\n                <contains casesensitive=\"true\" string=\"${run.jvmargs.ide}\" substring=\"-javaagent:\"/>\n            </or>\n        </condition>\n    </target>\n    <target depends=\"-profile-check,-profile-pre72\" description=\"Profile a project in the IDE.\" if=\"profiler.configured\" name=\"profile\" unless=\"profiler.info.jvmargs.agent\">\n        <startprofiler/>\n        <antcall target=\"run\"/>\n    </target>\n    <target depends=\"-profile-check,-profile-single-pre72\" description=\"Profile a selected class in the IDE.\" if=\"profiler.configured\" name=\"profile-single\" unless=\"profiler.info.jvmargs.agent\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <startprofiler/>\n        <antcall target=\"run-single\"/>\n    </target>\n    <target depends=\"-profile-test-single-pre72\" description=\"Profile a selected test in the IDE.\" name=\"profile-test-single\"/>\n    <target depends=\"-profile-check\" description=\"Profile a selected test in the IDE.\" if=\"profiler.configured\" name=\"profile-test\" unless=\"profiler.info.jvmargs\">\n        <fail unless=\"test.includes\">Must select some files in the IDE or set test.includes</fail>\n        <startprofiler/>\n        <antcall target=\"test-single\"/>\n    </target>\n    <target depends=\"-profile-check\" description=\"Profile a selected class in the IDE.\" if=\"profiler.configured\" name=\"profile-test-with-main\">\n        <fail unless=\"run.class\">Must select one file in the IDE or set run.class</fail>\n        <startprofiler/>\n        <antcal target=\"run-test-with-main\"/>\n    </target>\n    <target depends=\"-profile-check,-profile-applet-pre72\" if=\"profiler.configured\" name=\"profile-applet\" unless=\"profiler.info.jvmargs.agent\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <startprofiler/>\n        <antcall target=\"run-applet\"/>\n    </target>\n    <!--\n                ===============\n                JAVADOC SECTION\n                ===============\n            -->\n    <target depends=\"init\" if=\"have.sources\" name=\"-javadoc-build\">\n        <mkdir dir=\"${dist.javadoc.dir}\"/>\n        <condition else=\"\" property=\"javadoc.endorsed.classpath.cmd.line.arg\" value=\"-J${endorsed.classpath.cmd.line.arg}\">\n            <and>\n                <isset property=\"endorsed.classpath.cmd.line.arg\"/>\n                <not>\n                    <equals arg1=\"${endorsed.classpath.cmd.line.arg}\" arg2=\"\"/>\n                </not>\n            </and>\n        </condition>\n        <javadoc additionalparam=\"${javadoc.additionalparam}\" author=\"${javadoc.author}\" charset=\"UTF-8\" destdir=\"${dist.javadoc.dir}\" docencoding=\"UTF-8\" encoding=\"${javadoc.encoding.used}\" failonerror=\"true\" noindex=\"${javadoc.noindex}\" nonavbar=\"${javadoc.nonavbar}\" notree=\"${javadoc.notree}\" private=\"${javadoc.private}\" source=\"${javac.source}\" splitindex=\"${javadoc.splitindex}\" use=\"${javadoc.use}\" useexternalfile=\"true\" version=\"${javadoc.version}\" windowtitle=\"${javadoc.windowtitle}\">\n            <classpath>\n                <path path=\"${javac.classpath}\"/>\n            </classpath>\n            <fileset dir=\"${src.dir}\" excludes=\"*.java,${excludes}\" includes=\"${includes}\">\n                <filename name=\"**/*.java\"/>\n            </fileset>\n            <fileset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"**/*.java\"/>\n                <exclude name=\"*.java\"/>\n            </fileset>\n            <arg line=\"${javadoc.endorsed.classpath.cmd.line.arg}\"/>\n        </javadoc>\n        <copy todir=\"${dist.javadoc.dir}\">\n            <fileset dir=\"${src.dir}\" excludes=\"${excludes}\" includes=\"${includes}\">\n                <filename name=\"**/doc-files/**\"/>\n            </fileset>\n            <fileset dir=\"${build.generated.sources.dir}\" erroronmissingdir=\"false\">\n                <include name=\"**/doc-files/**\"/>\n            </fileset>\n        </copy>\n    </target>\n    <target depends=\"init,-javadoc-build\" if=\"netbeans.home\" name=\"-javadoc-browse\" unless=\"no.javadoc.preview\">\n        <nbbrowse file=\"${dist.javadoc.dir}/index.html\"/>\n    </target>\n    <target depends=\"init,-javadoc-build,-javadoc-browse\" description=\"Build Javadoc.\" name=\"javadoc\"/>\n    <!--\n                =========================\n                TEST COMPILATION SECTION\n                =========================\n            -->\n    <target depends=\"init,compile\" if=\"have.tests\" name=\"-pre-pre-compile-test\">\n        <mkdir dir=\"${build.test.classes.dir}\"/>\n    </target>\n    <target name=\"-pre-compile-test\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target if=\"do.depend.true\" name=\"-compile-test-depend\">\n        <j2seproject3:depend classpath=\"${javac.test.classpath}\" destdir=\"${build.test.classes.dir}\" srcdir=\"${test.src.dir}\"/>\n    </target>\n    <target depends=\"init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend\" if=\"have.tests\" name=\"-do-compile-test\">\n        <j2seproject3:javac apgeneratedsrcdir=\"${build.test.classes.dir}\" classpath=\"${javac.test.classpath}\" debug=\"true\" destdir=\"${build.test.classes.dir}\" processorpath=\"${javac.test.processorpath}\" srcdir=\"${test.src.dir}\"/>\n        <copy todir=\"${build.test.classes.dir}\">\n            <fileset dir=\"${test.src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile-test\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test\" name=\"compile-test\"/>\n    <target name=\"-pre-compile-test-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single\" if=\"have.tests\" name=\"-do-compile-test-single\">\n        <fail unless=\"javac.includes\">Must select some files in the IDE or set javac.includes</fail>\n        <j2seproject3:force-recompile destdir=\"${build.test.classes.dir}\"/>\n        <j2seproject3:javac apgeneratedsrcdir=\"${build.test.classes.dir}\" classpath=\"${javac.test.classpath}\" debug=\"true\" destdir=\"${build.test.classes.dir}\" excludes=\"\" includes=\"${javac.includes}\" processorpath=\"${javac.test.processorpath}\" sourcepath=\"${test.src.dir}\" srcdir=\"${test.src.dir}\"/>\n        <copy todir=\"${build.test.classes.dir}\">\n            <fileset dir=\"${test.src.dir}\" excludes=\"${build.classes.excludes},${excludes}\" includes=\"${includes}\"/>\n        </copy>\n    </target>\n    <target name=\"-post-compile-test-single\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single\" name=\"compile-test-single\"/>\n    <!--\n                =======================\n                TEST EXECUTION SECTION\n                =======================\n            -->\n    <target depends=\"init\" if=\"have.tests\" name=\"-pre-test-run\">\n        <mkdir dir=\"${build.test.results.dir}\"/>\n    </target>\n    <target depends=\"init,compile-test,-pre-test-run\" if=\"have.tests\" name=\"-do-test-run\">\n        <j2seproject3:test testincludes=\"**/*Test.java\"/>\n    </target>\n    <target depends=\"init,compile-test,-pre-test-run,-do-test-run\" if=\"have.tests\" name=\"-post-test-run\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init\" if=\"have.tests\" name=\"test-report\"/>\n    <target depends=\"init\" if=\"netbeans.home+have.tests\" name=\"-test-browse\"/>\n    <target depends=\"init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse\" description=\"Run unit tests.\" name=\"test\"/>\n    <target depends=\"init\" if=\"have.tests\" name=\"-pre-test-run-single\">\n        <mkdir dir=\"${build.test.results.dir}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-do-test-run-single\">\n        <fail unless=\"test.includes\">Must select some files in the IDE or set test.includes</fail>\n        <j2seproject3:test excludes=\"\" includes=\"${test.includes}\" testincludes=\"${test.includes}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single\" if=\"have.tests\" name=\"-post-test-run-single\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single\" description=\"Run single unit test.\" name=\"test-single\"/>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-do-test-run-single-method\">\n        <fail unless=\"test.class\">Must select some files in the IDE or set test.class</fail>\n        <fail unless=\"test.method\">Must select some method in the IDE or set test.method</fail>\n        <j2seproject3:test excludes=\"\" includes=\"${javac.includes}\" testincludes=\"${test.class}\" testmethods=\"${test.method}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single-method\" if=\"have.tests\" name=\"-post-test-run-single-method\">\n        <fail if=\"tests.failed\" unless=\"ignore.failing.tests\">Some tests failed; see details above.</fail>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method\" description=\"Run single unit test.\" name=\"test-single-method\"/>\n    <!--\n                =======================\n                TEST DEBUGGING SECTION\n                =======================\n            -->\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-debug-start-debuggee-test\">\n        <fail unless=\"test.class\">Must select one file in the IDE or set test.class</fail>\n        <j2seproject3:test-debug excludes=\"\" includes=\"${javac.includes}\" testClass=\"${test.class}\" testincludes=\"${javac.includes}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-pre-test-run-single\" if=\"have.tests\" name=\"-debug-start-debuggee-test-method\">\n        <fail unless=\"test.class\">Must select one file in the IDE or set test.class</fail>\n        <fail unless=\"test.method\">Must select some method in the IDE or set test.method</fail>\n        <j2seproject3:test-debug excludes=\"\" includes=\"${javac.includes}\" testClass=\"${test.class}\" testMethod=\"${test.method}\" testincludes=\"${test.class}\" testmethods=\"${test.method}\"/>\n    </target>\n    <target depends=\"init,compile-test\" if=\"netbeans.home+have.tests\" name=\"-debug-start-debugger-test\">\n        <j2seproject1:nbjpdastart classpath=\"${debug.test.classpath}\" name=\"${test.class}\"/>\n    </target>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test\" name=\"debug-test\"/>\n    <target depends=\"init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method\" name=\"debug-test-method\"/>\n    <target depends=\"init,-pre-debug-fix,compile-test-single\" if=\"netbeans.home\" name=\"-do-debug-fix-test\">\n        <j2seproject1:nbjpdareload dir=\"${build.test.classes.dir}\"/>\n    </target>\n    <target depends=\"init,-pre-debug-fix,-do-debug-fix-test\" if=\"netbeans.home\" name=\"debug-fix-test\"/>\n    <!--\n                =========================\n                APPLET EXECUTION SECTION\n                =========================\n            -->\n    <target depends=\"init,compile-single\" name=\"run-applet\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <j2seproject1:java classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </j2seproject1:java>\n    </target>\n    <!--\n                =========================\n                APPLET DEBUGGING  SECTION\n                =========================\n            -->\n    <target depends=\"init,compile-single\" if=\"netbeans.home\" name=\"-debug-start-debuggee-applet\">\n        <fail unless=\"applet.url\">Must select one file in the IDE or set applet.url</fail>\n        <j2seproject3:debug classname=\"sun.applet.AppletViewer\">\n            <customize>\n                <arg value=\"${applet.url}\"/>\n            </customize>\n        </j2seproject3:debug>\n    </target>\n    <target depends=\"init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet\" if=\"netbeans.home\" name=\"debug-applet\"/>\n    <!--\n                ===============\n                CLEANUP SECTION\n                ===============\n            -->\n    <target name=\"-deps-clean-init\" unless=\"built-clean.properties\">\n        <property location=\"${build.dir}/built-clean.properties\" name=\"built-clean.properties\"/>\n        <delete file=\"${built-clean.properties}\" quiet=\"true\"/>\n    </target>\n    <target if=\"already.built.clean.${basedir}\" name=\"-warn-already-built-clean\">\n        <echo level=\"warn\" message=\"Cycle detected: TestApplication was already built\"/>\n    </target>\n    <target depends=\"init,-deps-clean-init\" name=\"deps-clean\" unless=\"no.deps\">\n        <mkdir dir=\"${build.dir}\"/>\n        <touch file=\"${built-clean.properties}\" verbose=\"false\"/>\n        <property file=\"${built-clean.properties}\" prefix=\"already.built.clean.\"/>\n        <antcall target=\"-warn-already-built-clean\"/>\n        <propertyfile file=\"${built-clean.properties}\">\n            <entry key=\"${basedir}\" value=\"\"/>\n        </propertyfile>\n    </target>\n    <target depends=\"init\" name=\"-do-clean\">\n        <delete dir=\"${build.dir}\"/>\n        <delete dir=\"${dist.dir}\" followsymlinks=\"false\" includeemptydirs=\"true\"/>\n    </target>\n    <target name=\"-post-clean\">\n        <!-- Empty placeholder for easier customization. -->\n        <!-- You can override this target in the ../build.xml file. -->\n    </target>\n    <target depends=\"init,deps-clean,-do-clean,-post-clean\" description=\"Clean build products.\" name=\"clean\"/>\n    <target name=\"-check-call-dep\">\n        <property file=\"${call.built.properties}\" prefix=\"already.built.\"/>\n        <condition property=\"should.call.dep\">\n            <and>\n                <not>\n                    <isset property=\"already.built.${call.subproject}\"/>\n                </not>\n                <available file=\"${call.script}\"/>\n            </and>\n        </condition>\n    </target>\n    <target depends=\"-check-call-dep\" if=\"should.call.dep\" name=\"-maybe-call-dep\">\n        <ant antfile=\"${call.script}\" inheritall=\"false\" target=\"${call.target}\">\n            <propertyset>\n                <propertyref prefix=\"transfer.\"/>\n                <mapper from=\"transfer.*\" to=\"*\" type=\"glob\"/>\n            </propertyset>\n        </ant>\n    </target>\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/genfiles.properties",
    "content": "build.xml.data.CRC32=397bbf81\nbuild.xml.script.CRC32=b0561600\nbuild.xml.stylesheet.CRC32=8064a381@1.68.1.46\n# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.\n# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.\nnbproject/build-impl.xml.data.CRC32=397bbf81\nnbproject/build-impl.xml.script.CRC32=8cfbb9eb\nnbproject/build-impl.xml.stylesheet.CRC32=5a01deb7@1.68.1.46\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/private/private.properties",
    "content": "compile.on.save=true\nuser.properties.file=C:\\\\Users\\\\dininski\\\\AppData\\\\Roaming\\\\NetBeans\\\\7.4\\\\build.properties\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/private/private.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project-private xmlns=\"http://www.netbeans.org/ns/project-private/1\">\n    <editor-bookmarks xmlns=\"http://www.netbeans.org/ns/editor-bookmarks/2\" lastBookmarkId=\"0\"/>\n    <open-files xmlns=\"http://www.netbeans.org/ns/projectui-open-files/2\">\n        <group/>\n    </open-files>\n</project-private>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/project.properties",
    "content": "annotation.processing.enabled=true\nannotation.processing.enabled.in.editor=false\nannotation.processing.processor.options=\nannotation.processing.processors.list=\nannotation.processing.run.all.processors=true\nannotation.processing.source.output=${build.generated.sources.dir}/ap-source-output\nbuild.classes.dir=${build.dir}/classes\nbuild.classes.excludes=**/*.java,**/*.form\n# This directory is removed when the project is cleaned:\nbuild.dir=build\nbuild.generated.dir=${build.dir}/generated\nbuild.generated.sources.dir=${build.dir}/generated-sources\n# Only compile against the classpath explicitly listed here:\nbuild.sysclasspath=ignore\nbuild.test.classes.dir=${build.dir}/test/classes\nbuild.test.results.dir=${build.dir}/test/results\n# Uncomment to specify the preferred debugger connection transport:\n#debug.transport=dt_socket\ndebug.classpath=\\\n    ${run.classpath}\ndebug.test.classpath=\\\n    ${run.test.classpath}\n# Files in build.classes.dir which should be excluded from distribution jar\ndist.archive.excludes=\n# This directory is removed when the project is cleaned:\ndist.dir=dist\ndist.jar=${dist.dir}/TestApplication.jar\ndist.javadoc.dir=${dist.dir}/javadoc\nexcludes=\nincludes=**\njar.compress=false\njavac.classpath=\n# Space-separated list of extra javac options\njavac.compilerargs=\njavac.deprecation=false\njavac.processorpath=\\\n    ${javac.classpath}\njavac.source=1.7\njavac.target=1.7\njavac.test.classpath=\\\n    ${javac.classpath}:\\\n    ${build.classes.dir}\njavac.test.processorpath=\\\n    ${javac.test.classpath}\njavadoc.additionalparam=\njavadoc.author=false\njavadoc.encoding=${source.encoding}\njavadoc.noindex=false\njavadoc.nonavbar=false\njavadoc.notree=false\njavadoc.private=false\njavadoc.splitindex=true\njavadoc.use=true\njavadoc.version=false\njavadoc.windowtitle=\nmain.class=testapplication.TestApplication\nmanifest.file=manifest.mf\nmeta.inf.dir=${src.dir}/META-INF\nmkdist.disabled=false\nplatform.active=default_platform\nrun.classpath=\\\n    ${javac.classpath}:\\\n    ${build.classes.dir}\n# Space-separated list of JVM arguments used when running the project.\n# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.\n# To set system properties for unit tests define test-sys-prop.name=value:\nrun.jvmargs=\nrun.test.classpath=\\\n    ${javac.test.classpath}:\\\n    ${build.test.classes.dir}\nsource.encoding=UTF-8\nsrc.dir=src\ntest.src.dir=test\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/nbproject/project.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://www.netbeans.org/ns/project/1\">\n    <type>org.netbeans.modules.java.j2seproject</type>\n    <configuration>\n        <data xmlns=\"http://www.netbeans.org/ns/j2se-project/3\">\n            <name>TestApplication</name>\n            <source-roots>\n                <root id=\"src.dir\"/>\n            </source-roots>\n            <test-roots>\n                <root id=\"test.src.dir\"/>\n            </test-roots>\n        </data>\n    </configuration>\n</project>\n"
  },
  {
    "path": "Research/Sandbox/Java sandbox/TestApplication/src/testapplication/TestApplication.java",
    "content": "package testapplication;\n\nimport java.math.BigInteger;\nimport java.util.Scanner;\n\npublic class TestApplication {\n    public static void main(String args[]) {\n        \n        int numbersCount;\n        BigInteger result;\n        Scanner scanner = new Scanner(System.in);\n        numbersCount = scanner.nextInt();\n        result = scanner.nextBigInteger();\n        \n        BigInteger currentNumber;\n        \n        for (int i = 0; i < numbersCount - 1; i += 1) {\n            currentNumber = scanner.nextBigInteger();\n            result = result.xor(currentNumber);\n        }\n        \n        System.out.println(result);\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/README.md",
    "content": "# Sandboxing \n\n* Chrome sandbox: http://www.chromium.org/developers/design-documents/sandbox\n* Create low-integrity process in C# (CSCreateLowIntegrityProcess): https://code.msdn.microsoft.com/windowsapps/CSCreateLowIntegrityProcess-d7cb5e4d\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/BaseSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// The base class for all security objects.\n    /// </summary>\n    public abstract class BaseSecurity : NativeObjectSecurity, IDisposable\n    {\n        private string m_Name;\n        private GenericSafeHandle m_Handle;\n        private StandardRights m_HandleRights = StandardRights.ReadPermissions;\n\n        private const int MaximumAccessAllowed = 0x02000000;\n\n        #region Constructors\n\n\n        internal BaseSecurity(bool isContainer)\n            : base(isContainer, ResourceType.Unknown)\n        {\n        }\n\n        internal BaseSecurity(ResourceType resType, bool isContainer)\n            : base(isContainer, resType)\n        {\n        }\n\n        internal BaseSecurity(string objectName, ResourceType resType, AccessControlSections sectionsRequested, bool isContainer)\n            : base(isContainer, resType, objectName, sectionsRequested)\n        {\n            m_Name = objectName;\n        }\n\n        internal BaseSecurity(GenericSafeHandle objectHandle, ResourceType resType, AccessControlSections sectionsRequested, bool isContainer)\n            : base(isContainer, resType, objectHandle, sectionsRequested)\n        {\n            m_Handle = objectHandle;\n        }\n\n        #endregion\n\n        #region Persistence methods\n\n        /// <summary>\n        /// Persists the changes made to the security object. Must be overridden for \n        /// custom security objects.\n        /// </summary>\n        public virtual void AcceptChanges()\n        {\n            if (m_Name == null && m_Handle == null)\n                throw new InvalidOperationException(\"Not associated with a valid Securable Object.\");\n\n            base.WriteLock();\n            try\n            {\n                AccessControlSections sectionsChanged = GetSectionsChanged();\n                if (sectionsChanged != AccessControlSections.None)\n                {\n                    if (m_Name != null)\n                    {\n                        base.Persist(m_Name, sectionsChanged);\n                    }\n                    else\n                    {\n                        MakeWriteableHandle(sectionsChanged);\n                        base.Persist(m_Handle, sectionsChanged);\n                    }\n                    ClearSectionsChanged();\n                }\n            }\n            finally\n            {\n                base.WriteUnlock();\n            }\n        }\n\n        /// <summary>\n        /// Gets the access control sections that have been changed.\n        /// </summary>\n        /// <returns></returns>\n        protected AccessControlSections GetSectionsChanged()\n        {\n            AccessControlSections sectionsChanged = AccessControlSections.None;\n\n            if (base.OwnerModified) sectionsChanged |= AccessControlSections.Owner;\n            if (base.GroupModified) sectionsChanged |= AccessControlSections.Group;\n            if (base.AccessRulesModified) sectionsChanged |= AccessControlSections.Access;\n            if (base.AuditRulesModified) sectionsChanged |= AccessControlSections.Audit;\n\n            return sectionsChanged;\n        }\n\n        /// <summary>\n        /// Resets the sections changed flags.\n        /// </summary>\n        protected void ClearSectionsChanged()\n        {\n            base.OwnerModified = false;\n            base.GroupModified = false;\n            base.AccessRulesModified = false;\n            base.AuditRulesModified = false;\n        }\n\n\n        #endregion\n\n        #region Handle Methods\n\n        private void MakeWriteableHandle(AccessControlSections sectionsToWrite)\n        {\n\n            StandardRights rightsRequired = m_HandleRights;\n            bool newHandleRequired = false;\n\n            if ((sectionsToWrite & AccessControlSections.Access) != 0 || (sectionsToWrite & AccessControlSections.Group) != 0)\n            {\n                if ((m_HandleRights & StandardRights.WritePermissions) == 0)\n                {\n                    rightsRequired |= StandardRights.WritePermissions;\n                    newHandleRequired = true;\n                }\n            }\n            if ((sectionsToWrite & AccessControlSections.Owner) != 0)\n            {\n                if ((m_HandleRights & StandardRights.TakeOwnership) == 0)\n                {\n                    rightsRequired |= StandardRights.TakeOwnership;\n                    newHandleRequired = true;\n                }\n            }\n            if ((sectionsToWrite & AccessControlSections.Audit) != 0)\n            {\n                if ((m_HandleRights & (StandardRights)NativeConstants.ACCESS_SYSTEM_SECURITY) == 0)\n                {\n                    rightsRequired |= (StandardRights)NativeConstants.ACCESS_SYSTEM_SECURITY;\n                    newHandleRequired = true;\n                }\n            }\n\n            if (newHandleRequired)\n            {\n                IntPtr writeHandle = NativeMethods.DuplicateHandle(m_Handle.DangerousGetHandle(), (int)rightsRequired);\n                if (writeHandle == IntPtr.Zero)\n                {\n                    int err = Marshal.GetLastWin32Error();\n                    switch (err)\n                    {\n                        case NativeConstants.ERROR_ACCESS_DENIED:\n                            throw new UnauthorizedAccessException();\n                        default:\n                            throw new System.ComponentModel.Win32Exception(err);\n                    }\n                }\n\n                try\n                {\n                    m_Handle = new GenericSafeHandle(writeHandle, m_Handle);\n                    m_HandleRights = rightsRequired;\n                }\n                catch\n                {\n                    //Should only happen if out of memory. Release new handle and rethrow.\n                    NativeMethods.CloseHandle(writeHandle);\n                    throw;\n                }\n            }\n        }\n\n        internal static GenericSafeHandle GetReadHandle(IntPtr handle)\n        {\n            return GetReadHandle(handle, NativeMethods.CloseHandle);\n        }\n\n        internal static GenericSafeHandle GetReadHandle(IntPtr handle, ReleaseHandleCallback releaseCallback)\n        {\n            IntPtr readHandle = NativeMethods.DuplicateHandle(handle, (int)StandardRights.ReadPermissions);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle, releaseCallback);\n        }\n\n        #endregion\n\n        #region Access Methods\n\n        /// <summary>\n        /// Gets the generic mapping associated with the securable object.\n        /// </summary>\n        /// <returns>A <see cref=\"GenericMapping\"/> associated with this security\n        /// object type.</returns>\n        protected abstract GenericMapping GetGenericMapping();\n\n        /// <summary> \n        /// Gets a bitmask representing the maximum access allowed to this \n        /// securable object.\n        /// </summary>\n        /// <param name=\"tokenHandle\">The handle to the token for which the \n        /// access is being calculated. This must be an impersonation token.</param>\n        /// <returns>An <see cref=\"Int32\"/> containing the bitmask of the access \n        /// rights that have been granted to the user represented by the token.</returns>\n        public int GetMaximumAccessAllowed(SafeHandle tokenHandle)\n        {\n            int privilegeLength = 4096;\n            byte[] accessCheckBuffer = new byte[privilegeLength];\n            int accessGranted;\n            bool accessAllowed;\n\n            if (!NativeMethods.AccessCheck(base.GetSecurityDescriptorBinaryForm(), tokenHandle,\n                MaximumAccessAllowed, GetGenericMapping(), accessCheckBuffer, out privilegeLength, \n                out accessGranted, out accessAllowed))\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    case NativeConstants.ERROR_NO_IMPERSONATION_TOKEN:\n                        throw new InvalidOperationException(\"The token is not an impersonation token.\");\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return accessGranted;\n        }\n\n        /// <summary>\n        /// Determines whether the user represented by the specified token handle \n        /// has been granted access to this securable object.\n        /// </summary>\n        /// <param name=\"tokenHandle\">The handle to the token for which the \n        /// access is being verified. This must be an impersonation token.</param>\n        /// <param name=\"desiredAccess\">The desired access.</param>\n        /// <returns>\n        /// \t<c>true</c> if the desired access is allowed; otherwise, <c>false</c>.\n        /// </returns>\n        public bool IsAccessAllowed(SafeHandle tokenHandle, int desiredAccess)\n        {\n            int accessGranted;\n            bool accessAllowed;\n            int privilegeLength = 4096;\n            byte[] accessCheckBuffer = new byte[privilegeLength];\n\n            GenericMapping mapping = GetGenericMapping();\n            NativeMethods.MapGenericMask(ref desiredAccess, mapping);\n\n            if (!NativeMethods.AccessCheck(base.GetSecurityDescriptorBinaryForm(), tokenHandle,\n                desiredAccess, mapping, accessCheckBuffer, out privilegeLength, out accessGranted,\n                out accessAllowed))\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    case NativeConstants.ERROR_NO_IMPERSONATION_TOKEN:\n                        throw new InvalidOperationException(\"The token is not an impersonation token.\");\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return accessAllowed;\n        }\n\n        #endregion\n\n        #region IDisposable Members\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public virtual void Dispose()\n        {\n            if (m_Handle != null) m_Handle.Close();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DesktopAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of DesktopRights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    public sealed class DesktopAccessRule : AccessRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopAccessRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity of the user to be granted or denied \n        /// the associated rights.</param>\n        /// <param name=\"desktopRights\">The desktop rights allowed or denied.</param>\n        /// <param name=\"type\">The type of access controlled by the rule.</param>\n        public DesktopAccessRule(IdentityReference identity, DesktopRights desktopRights, AccessControlType type)\n            : base(identity, (int)desktopRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopAccessRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity of the user to be granted or denied \n        /// the associated rights.</param>\n        /// <param name=\"desktopRights\">The desktop rights allowed or denied.</param>\n        /// <param name=\"type\">The type of access controlled by the rule.</param>\n        public DesktopAccessRule(string identity, DesktopRights desktopRights, AccessControlType type)\n            : this(new NTAccount(identity), desktopRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the desktop rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"DesktopRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public DesktopRights DesktopRights \n        {\n            get\n            {\n                return (DesktopRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DesktopAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of DesktopRights to be audited\n    /// for a user or group. This class cannot be inherited.</summary>\n    public sealed class DesktopAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"desktopRights\">The desktop rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public DesktopAuditRule(IdentityReference identity, DesktopRights desktopRights, AuditFlags type)\n            : base(identity, (int)desktopRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"desktopRights\">The desktop rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public DesktopAuditRule(string identity, DesktopRights desktopRights, AuditFlags type)\n            : this(new NTAccount(identity), desktopRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the desktop rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"DesktopRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public DesktopRights DesktopRights\n        {\n            get\n            {\n                return (DesktopRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DesktopRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum DesktopRights\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        ReadObjects       = 1,\n        /// <summary>\n        /// \n        /// </summary>\n        CreateWindow      = 2,\n        /// <summary>\n        /// \n        /// </summary>\n        CreateMenu        = 4,\n        /// <summary>\n        /// \n        /// </summary>\n        HookControl       = 8,\n        /// <summary>\n        /// \n        /// </summary>\n        JournalRecord     = 16,\n        /// <summary>\n        /// \n        /// </summary>\n        JournalPlayback   = 32,\n        /// <summary>\n        /// \n        /// </summary>\n        Enumerate         = 64,\n        /// <summary>\n        /// \n        /// </summary>\n        WriteObjects      = 128,\n        /// <summary>\n        /// \n        /// </summary>\n        SwitchDesktop     = 256,\n\n\n        /// <summary>\n        /// \n        /// </summary>f\n        Delete = 0x00010000,\n        /// <summary>\n        /// \n        /// </summary>\n        ReadPermissions = 0x00020000,\n        /// <summary>\n        /// \n        /// </summary>\n        WritePermissions = 0x00040000,\n        /// <summary>\n        /// \n        /// </summary>\n        TakeOwnership = 0x00080000,\n        /// <summary>\n        /// \n        /// </summary>\n        Synchronize = 0x00100000,\n\n        /// <summary>\n        /// \n        /// </summary>\n        Read = ReadObjects | Enumerate | StandardRights.Read,\n        /// <summary>\n        /// \n        /// </summary>\n        Write = WriteObjects | CreateWindow | CreateMenu | HookControl | JournalRecord |\n            JournalPlayback | StandardRights.Write,\n        /// <summary>\n        /// \n        /// </summary>\n        Execute = SwitchDesktop | StandardRights.Execute,\n\n        /// <summary>\n        /// \n        /// </summary>\n        AllAccess = ReadObjects | CreateWindow | CreateMenu | HookControl |\n            JournalRecord | JournalPlayback | Enumerate | WriteObjects | SwitchDesktop |\n            StandardRights.Required\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DesktopSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class DesktopSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopSecurity\"/> class.\n        /// </summary>\n        public DesktopSecurity()\n            : base(ResourceType.WindowObject, false)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopSecurity\"/> class.\n        /// </summary>\n        /// <param name=\"desktopName\">Name of the desktop.</param>\n        /// <param name=\"sectionsRequested\">The sections requested.</param>\n        public DesktopSecurity(string desktopName, AccessControlSections sectionsRequested)\n            : base(GetReadHandle(desktopName), ResourceType.WindowObject, sectionsRequested, false)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DesktopSecurity\"/> class.\n        /// </summary>\n        /// <param name=\"desktopHandle\">The desktop handle.</param>\n        /// <param name=\"sectionsRequested\">The sections requested.</param>\n        public DesktopSecurity(IntPtr desktopHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(desktopHandle, NativeMethods.CloseDesktop), ResourceType.WindowObject, sectionsRequested, false)\n        {\n        }\n\n        private static GenericSafeHandle GetReadHandle(string desktopName)\n        {\n            IntPtr readHandle = NativeMethods.OpenDesktop(desktopName, 0, false, (int)StandardRights.ReadPermissions);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle, NativeMethods.CloseDesktop);\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        /// <summary>\n        /// Gets the <see cref=\"T:System.Type\"/> of the securable object associated with this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object.\n        /// </summary>\n        /// <value></value>\n        /// <returns>\n        /// The type of the securable object associated with this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object.\n        /// </returns>\n        public override Type AccessRightType\n        {\n            get { return typeof(DesktopRights); }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:System.Security.AccessControl.AccessRule\"/> class with the specified values.\n        /// </summary>\n        /// <param name=\"identityReference\">The identity to which the access rule applies.  It must be an object that can be cast as a <see cref=\"T:System.Security.Principal.SecurityIdentifier\"/>.</param>\n        /// <param name=\"accessMask\">The access mask of this rule. The access mask is a 32-bit collection of anonymous bits, the meaning of which is defined by the individual integrators.</param>\n        /// <param name=\"isInherited\">true if this rule is inherited from a parent container.</param>\n        /// <param name=\"inheritanceFlags\">Specifies the inheritance properties of the access rule.</param>\n        /// <param name=\"propagationFlags\">Specifies whether inherited access rules are automatically propagated. The propagation flags are ignored if <paramref name=\"inheritanceFlags\"/> is set to <see cref=\"F:System.Security.AccessControl.InheritanceFlags.None\"/>.</param>\n        /// <param name=\"type\">Specifies the valid access control type.</param>\n        /// <returns>\n        /// The <see cref=\"T:System.Security.AccessControl.AccessRule\"/> object that this method creates.\n        /// </returns>\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new DesktopAccessRule(identityReference, (DesktopRights)accessMask, type);\n        }\n\n        /// <summary>\n        /// Gets the <see cref=\"T:System.Type\"/> of the object associated with the access rules of this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object. The <see cref=\"T:System.Type\"/> object must be an object that can be cast as a <see cref=\"T:System.Security.Principal.SecurityIdentifier\"/> object.\n        /// </summary>\n        /// <value></value>\n        /// <returns>\n        /// The type of the object associated with the access rules of this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object.\n        /// </returns>\n        public override Type AccessRuleType\n        {\n            get { return typeof(DesktopAccessRule); }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:System.Security.AccessControl.AuditRule\"/> class with the specified values.\n        /// </summary>\n        /// <param name=\"identityReference\">The identity to which the audit rule applies.  It must be an object that can be cast as a <see cref=\"T:System.Security.Principal.SecurityIdentifier\"/>.</param>\n        /// <param name=\"accessMask\">The access mask of this rule. The access mask is a 32-bit collection of anonymous bits, the meaning of which is defined by the individual integrators.</param>\n        /// <param name=\"isInherited\">true if this rule is inherited from a parent container.</param>\n        /// <param name=\"inheritanceFlags\">Specifies the inheritance properties of the audit rule.</param>\n        /// <param name=\"propagationFlags\">Specifies whether inherited audit rules are automatically propagated. The propagation flags are ignored if <paramref name=\"inheritanceFlags\"/> is set to <see cref=\"F:System.Security.AccessControl.InheritanceFlags.None\"/>.</param>\n        /// <param name=\"flags\">Specifies the conditions for which the rule is audited.</param>\n        /// <returns>\n        /// The <see cref=\"T:System.Security.AccessControl.AuditRule\"/> object that this method creates.\n        /// </returns>\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new DesktopAuditRule(identityReference, (DesktopRights)accessMask, flags);\n        }\n\n        /// <summary>\n        /// Gets the <see cref=\"T:System.Type\"/> object associated with the audit rules of this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object. The <see cref=\"T:System.Type\"/> object must be an object that can be cast as a <see cref=\"T:System.Security.Principal.SecurityIdentifier\"/> object.\n        /// </summary>\n        /// <value></value>\n        /// <returns>\n        /// The type of the object associated with the audit rules of this <see cref=\"T:System.Security.AccessControl.ObjectSecurity\"/> object.\n        /// </returns>\n        public override Type AuditRuleType\n        {\n            get { return typeof(DesktopAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Desktop specific types.\n\n        /// <summary>\n        /// Adds the access rule.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        public void AddAccessRule(DesktopAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        /// <summary>\n        /// Adds the audit rule.\n        /// </summary>\n        /// <param name=\"auditRule\">The audit rule.</param>\n        public void AddAuditRule(DesktopAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        /// <summary>\n        /// Removes the access rule.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        /// <returns></returns>\n        public bool RemoveAccessRule(DesktopAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        /// <summary>\n        /// Removes the access rule all.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        public void RemoveAccessRuleAll(DesktopAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        /// <summary>\n        /// Removes the access rule specific.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        public void RemoveAccessRuleSpecific(DesktopAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        /// <summary>\n        /// Removes the audit rule.\n        /// </summary>\n        /// <param name=\"auditRule\">The audit rule.</param>\n        /// <returns></returns>\n        public bool RemoveAuditRule(DesktopAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        /// <summary>\n        /// Removes the audit rule all.\n        /// </summary>\n        /// <param name=\"auditRule\">The audit rule.</param>\n        public void RemoveAuditRuleAll(DesktopAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        /// <summary>\n        /// Removes the audit rule specific.\n        /// </summary>\n        /// <param name=\"auditRule\">The audit rule.</param>\n        public void RemoveAuditRuleSpecific(DesktopAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        /// <summary>\n        /// Resets the access rule.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        public void ResetAccessRule(DesktopAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        /// <summary>\n        /// Sets the access rule.\n        /// </summary>\n        /// <param name=\"accessRule\">The access rule.</param>\n        public void SetAccessRule(DesktopAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        /// <summary>\n        /// Sets the audit rule.\n        /// </summary>\n        /// <param name=\"auditRule\">The audit rule.</param>\n        public void SetAuditRule(DesktopAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)DesktopRights.Read, (int)DesktopRights.Write,\n                                 (int)DesktopRights.Execute, (int)DesktopRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DirectoryAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of DirectoryAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class DirectoryAccessRule : AccessRule\n    {\n        public DirectoryAccessRule(IdentityReference identity, DirectoryRights directoryRights, AccessControlType type)\n            : base(identity, (int)directoryRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public DirectoryAccessRule(string identity, DirectoryRights directoryRights, AccessControlType type)\n            : this(new NTAccount(identity), directoryRights, type)\n        {\n        }\n\n        public DirectoryRights DirectoryRights \n        {\n            get\n            {\n                return (DirectoryRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DirectoryAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class DirectoryAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DirectoryAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"directoryRights\">The directory rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public DirectoryAuditRule(IdentityReference identity, DirectoryRights directoryRights, AuditFlags type)\n            : base(identity, (int)directoryRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DirectoryAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"directoryRights\">The directory rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public DirectoryAuditRule(string identity, DirectoryRights directoryRights, AuditFlags type)\n            : this(new NTAccount(identity), directoryRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the directory rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"DirectoryRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public DirectoryRights DirectoryRights\n        {\n            get\n            {\n                return (DirectoryRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DirectoryRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum DirectoryRights\n    {\n        ListDirectory       = 1,\n        AddFile             = 2,\n        AddSubdirectory     = 4,\n        ReadEA              = 8,\n        WriteEA             = 16,\n        Traverse            = 32,\n        DeleteChild         = 64,\n        ReadAttributes      = 128,\n        WriteAttributes     = 256,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | ListDirectory | AddFile,\n        Write = StandardRights.Write | AddSubdirectory | ReadEA,\n        Execute = StandardRights.Execute | ListDirectory | AddFile,\n\n        AllAccess = ListDirectory | AddFile | AddSubdirectory | ReadEA | StandardRights.Required \n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/DirectorySecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class DirectorySecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public DirectorySecurity()\n            : base(ResourceType.FileObject, true)\n        {\n        }\n\n        public DirectorySecurity(string directoryName, AccessControlSections sectionsRequested)\n            : base(directoryName, ResourceType.FileObject, sectionsRequested, true)\n        {\n        }\n\n        public DirectorySecurity(IntPtr directoryHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(directoryHandle), ResourceType.FileObject, sectionsRequested, true)\n        {\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(DirectoryRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new DirectoryAccessRule(identityReference, (DirectoryRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(DirectoryAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new DirectoryAuditRule(identityReference, (DirectoryRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(DirectoryAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Directory specific types.\n\n        public void AddAccessRule(DirectoryAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(DirectoryAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(DirectoryAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(DirectoryAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(DirectoryAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(DirectoryAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(DirectoryAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(DirectoryAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(DirectoryAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(DirectoryAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(DirectoryAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)DirectoryRights.Read, (int)DirectoryRights.Write,\n                                 (int)DirectoryRights.Execute, (int)DirectoryRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of FileAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class FileAccessRule : AccessRule\n    {\n        public FileAccessRule(IdentityReference identity, FileRights fileRights, AccessControlType type)\n            : base(identity, (int)fileRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public FileAccessRule(string identity, FileRights fileRights, AccessControlType type)\n            : this(new NTAccount(identity), fileRights, type)\n        {\n        }\n\n        public FileRights FileRights \n        {\n            get\n            {\n                return (FileRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class FileAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"FileAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"fileRights\">The file rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public FileAuditRule(IdentityReference identity, FileRights fileRights, AuditFlags type)\n            : base(identity, (int)fileRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"FileAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"fileRights\">The file rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public FileAuditRule(string identity, FileRights fileRights, AuditFlags type)\n            : this(new NTAccount(identity), fileRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the file rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"FileRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public FileRights FileRights\n        {\n            get\n            {\n                return (FileRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileMappingAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of FileMappingAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class FileMappingAccessRule : AccessRule\n    {\n        public FileMappingAccessRule(IdentityReference identity, FileMappingRights fileMappingRights, AccessControlType type)\n            : base(identity, (int)fileMappingRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public FileMappingAccessRule(string identity, FileMappingRights fileMappingRights, AccessControlType type)\n            : this(new NTAccount(identity), fileMappingRights, type)\n        {\n        }\n\n        public FileMappingRights FileMappingRights \n        {\n            get\n            {\n                return (FileMappingRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileMappingAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class FileMappingAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"FileMappingAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"fileMappingRights\">The file mapping rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public FileMappingAuditRule(IdentityReference identity, FileMappingRights fileMappingRights, AuditFlags type)\n            : base(identity, (int)fileMappingRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"FileMappingAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"fileMappingRights\">The file mapping rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public FileMappingAuditRule(string identity, FileMappingRights fileMappingRights, AuditFlags type)\n            : this(new NTAccount(identity), fileMappingRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the file mapping rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"FileMappingRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public FileMappingRights FileMappingRights\n        {\n            get\n            {\n                return (FileMappingRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileMappingRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum FileMappingRights\n    {\n        FileMapCopy = 1,\n        FileMapWrite = 2,\n        FileMapRead = 4,\n        SectionMapExecute = 8,\n        SectionExtendSize = 16,\n        FileMapExecute = 32,\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | FileMapCopy | FileMapRead,\n        Write = StandardRights.Write | FileMapWrite,\n        Execute = StandardRights.Execute | FileMapExecute,\n\n        AllAccess = FileMapCopy | FileMapWrite | FileMapRead | SectionMapExecute | SectionExtendSize |\n            StandardRights.Required \n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileMappingSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class FileMappingSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public FileMappingSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public FileMappingSecurity(string fileMappingName, AccessControlSections sectionsRequested)\n            : base(fileMappingName, ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public FileMappingSecurity(IntPtr fileMappingHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(fileMappingHandle), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(FileMappingRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new FileMappingAccessRule(identityReference, (FileMappingRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(FileMappingAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new FileMappingAuditRule(identityReference, (FileMappingRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(FileMappingAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for FileMapping specific types.\n\n        public void AddAccessRule(FileMappingAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(FileMappingAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(FileMappingAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(FileMappingAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(FileMappingAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(FileMappingAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(FileMappingAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(FileMappingAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(FileMappingAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(FileMappingAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(FileMappingAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)FileMappingRights.Read, (int)FileMappingRights.Write,\n                                 (int)FileMappingRights.Execute, (int)FileMappingRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum FileRights\n    {\n        ReadData            = 1,\n        WriteData           = 2,\n        AppendData          = 4,\n        ReadEA              = 8,\n        WriteEA             = 16,\n        ExecuteFile         = 32,\n        ReadAttributes      = 128,\n        WriteAttributes     = 256,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | ReadData | ReadAttributes | ReadEA  | Synchronize,\n        Write  = StandardRights.Write | WriteData | WriteAttributes | WriteEA | AppendData | Synchronize,\n        Execute = StandardRights.Execute | ReadAttributes | ExecuteFile | Synchronize,\n\n        AllAccess = StandardRights.Required | Synchronize | ReadData | ReadAttributes | ReadEA  |\n            WriteData | WriteAttributes | WriteEA | AppendData | ExecuteFile | 64\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/FileSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class FileSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public FileSecurity()\n            : base(ResourceType.FileObject, false)\n        {\n        }\n\n        public FileSecurity(string fileName, AccessControlSections sectionsRequested)\n            : base(fileName, ResourceType.FileObject, sectionsRequested, false)\n        {\n        }\n\n        public FileSecurity(IntPtr fileHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(fileHandle), ResourceType.FileObject, sectionsRequested, false)\n        {\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(FileRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new FileAccessRule(identityReference, (FileRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(FileAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new FileAuditRule(identityReference, (FileRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(FileAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for File specific types.\n\n        public void AddAccessRule(FileAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(FileAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(FileAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(FileAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(FileAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(FileAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(FileAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(FileAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(FileAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(FileAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(FileAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)FileRights.Read, (int)FileRights.Write,\n                                 (int)FileRights.Execute, (int)FileRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/GenericMapping.cs",
    "content": "/********************************************************************************\n *      Copyright (c) 2008, Asprosys Inc., Toronto, Ontario, Canada             *\n *      All rights reserved.                                                    *\n *                                                                              *\n *      Redistribution and use in source and binary forms, with or without      *\n *      modification, are permitted provided that the following conditions      *\n *      are met:                                                                *\n *                                                                              *\n *      Redistributions of source code must retain the above copyright notice,  *\n *      this list of conditions and the following disclaimer.                   *\n *                                                                              *\n *      Redistributions in binary form must reproduce the above copyright       *\n *      notice, this list of conditions and the following disclaimer in the     *\n *      documentation and/or other materials provided with the distribution.    *\n *                                                                              *\n *      Neither the name of Asprosys Inc. nor the names of its employees or     *\n *      contributors may be used to endorse or promote products derived from    *\n *      this software without specific prior written permission.                *\n *                                                                              *\n *      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS     *\n *      \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT       *\n *      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR   *\n *      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT    *\n *      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   *\n *      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT        *   \n *      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   *\n *      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY   *\n *      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT     *\n *      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE   *\n *      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.    *\n ********************************************************************************/\n\n\n\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public class GenericMapping\n    {\n        public readonly int ReadMask;\n        public readonly int WriteMask;\n        public readonly int ExecuteMask;\n        public readonly int AllAccessMask;\n\n        public GenericMapping(int readMask, int writeMask, int execMask, int allMask)\n        {\n            ReadMask = readMask;\n            WriteMask = writeMask;\n            ExecuteMask = execMask;\n            AllAccessMask = allMask;\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/JobObjectAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of JobObjectAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class JobObjectAccessRule : AccessRule\n    {\n        public JobObjectAccessRule(IdentityReference identity, JobObjectRights jobObjectRights, AccessControlType type)\n            : base(identity, (int)jobObjectRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public JobObjectAccessRule(string identity, JobObjectRights jobObjectRights, AccessControlType type)\n            : this(new NTAccount(identity), jobObjectRights, type)\n        {\n        }\n\n        public JobObjectRights JobObjectRights \n        {\n            get\n            {\n                return (JobObjectRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/JobObjectAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class JobObjectAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"JobObjectAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"jobObjectRights\">The job object rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public JobObjectAuditRule(IdentityReference identity, JobObjectRights jobObjectRights, AuditFlags type)\n            : base(identity, (int)jobObjectRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"JobObjectAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"jobObjectRights\">The job object rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public JobObjectAuditRule(string identity, JobObjectRights jobObjectRights, AuditFlags type)\n            : this(new NTAccount(identity), jobObjectRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the job object rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"JobObjectRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public JobObjectRights JobObjectRights\n        {\n            get\n            {\n                return (JobObjectRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/JobObjectRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum JobObjectRights\n    {\n        AssignProcess            = 1,\n        SetAttributes            = 2,\n        Query                    = 4,\n        Terminate                = 8,\n        SetSecurityAttributes    = 16,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | Query,\n        Write = StandardRights.Write | AssignProcess | SetAttributes | Terminate,\n        Execute = StandardRights.Execute | Synchronize,\n\n        AllAccess = AssignProcess | SetAttributes | Query | Terminate | SetSecurityAttributes |\n            StandardRights.Required | Synchronize\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/JobObjectSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class JobObjectSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public JobObjectSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public JobObjectSecurity(string jobName, AccessControlSections sectionsRequested)\n            : base(GetReadHandle(jobName), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public JobObjectSecurity(IntPtr jobHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(jobHandle), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        private static GenericSafeHandle GetReadHandle(string jobName)\n        {\n            IntPtr readHandle = NativeMethods.OpenJobObject((int)JobObjectRights.ReadPermissions, false, jobName);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle);\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(JobObjectRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new JobObjectAccessRule(identityReference, (JobObjectRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(JobObjectAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new JobObjectAuditRule(identityReference, (JobObjectRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(JobObjectAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for JobObject specific types.\n\n        public void AddAccessRule(JobObjectAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(JobObjectAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(JobObjectAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(JobObjectAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(JobObjectAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(JobObjectAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(JobObjectAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(JobObjectAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(JobObjectAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(JobObjectAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(JobObjectAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)JobObjectRights.Read, (int)JobObjectRights.Write,\n                                 (int)JobObjectRights.Execute, (int)JobObjectRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PipeAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of PipeAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class PipeAccessRule : AccessRule\n    {\n        public PipeAccessRule(IdentityReference identity, PipeRights pipeRights, AccessControlType type)\n            : base(identity, (int)pipeRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public PipeAccessRule(string identity, PipeRights pipeRights, AccessControlType type)\n            : this(new NTAccount(identity), pipeRights, type)\n        {\n        }\n\n        public PipeRights PipeRights \n        {\n            get\n            {\n                return (PipeRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PipeAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class PipeAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PipeAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"pipeRights\">The pipe rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public PipeAuditRule(IdentityReference identity, PipeRights pipeRights, AuditFlags type)\n            : base(identity, (int)pipeRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PipeAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"pipeRights\">The pipe rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public PipeAuditRule(string identity, PipeRights pipeRights, AuditFlags type)\n            : this(new NTAccount(identity), pipeRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the pipe rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"PipeRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public PipeRights PipeRights\n        {\n            get\n            {\n                return (PipeRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PipeRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum PipeRights\n    {\n        ReadData            = 1,\n        WriteData           = 2,\n        CreatePipeInstance  = 4,\n        ReadAttributes      = 128,\n        WriteAttributes     = 256,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | ReadData | CreatePipeInstance | ReadAttributes,\n        Write = StandardRights.Write | WriteData |CreatePipeInstance,\n        Execute = StandardRights.Execute,\n\n        AllAccess = ReadData | WriteData | CreatePipeInstance | ReadAttributes | WriteAttributes |\n            StandardRights.Required | Synchronize\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PipeSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class PipeSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public PipeSecurity()\n            : base(ResourceType.FileObject, false)\n        {\n        }\n\n        public PipeSecurity(string pipeName, AccessControlSections sectionsRequested)\n            : base(\"\\\\\\\\.\\\\pipe\\\\\" + pipeName, ResourceType.FileObject, sectionsRequested, false)\n        {\n        }\n\n        public PipeSecurity(IntPtr pipeHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(pipeHandle), ResourceType.FileObject, sectionsRequested, false)\n        {\n        }\n\n        //Probably not needed, we'll see.\n        //private static GenericSafeHandle GetReadHandle(string pipeName)\n        //{\n        //    IntPtr readHandle = NativeMethods.OpenPipeHandle(pipeName, (int)PipeRights.ReadPermissions);\n        //    return new GenericSafeHandle(readHandle);\n        //}\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(PipeRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new PipeAccessRule(identityReference, (PipeRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(PipeAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new PipeAuditRule(identityReference, (PipeRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(PipeAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Pipe specific types.\n\n        public void AddAccessRule(PipeAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(PipeAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(PipeAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(PipeAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(PipeAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(PipeAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(PipeAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(PipeAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(PipeAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(PipeAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(PipeAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)PipeRights.Read, (int)PipeRights.Write,\n                                 (int)PipeRights.Execute, (int)PipeRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PrinterAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public class PrinterAccessRule : AccessRule\n    {\n        public PrinterAccessRule(IdentityReference identity, PrinterRights serviceRights, AccessControlType type)\n            : base(identity, (int)serviceRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public PrinterAccessRule(string identity, PrinterRights serviceRights, AccessControlType type)\n            : this(new NTAccount(identity), serviceRights, type)\n        {\n        }\n\n        public PrinterRights ServiceRights \n        {\n            get\n            {\n                return (PrinterRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PrinterAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class PrinterAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PrinterAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"serviceRights\">The service rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public PrinterAuditRule(IdentityReference identity, PrinterRights serviceRights, AuditFlags type)\n            : base(identity, (int)serviceRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PrinterAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"serviceRights\">The service rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public PrinterAuditRule(string identity, PrinterRights serviceRights, AuditFlags type)\n            : this(new NTAccount(identity), serviceRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the printer rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"PrinterRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public PrinterRights PrinterRights\n        {\n            get\n            {\n                return (PrinterRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PrinterRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum PrinterRights\n    {\n        ServerAdminister = 1,\n        ServerEnumerate = 2,\n        PrinterAdminister = 4,\n        PrinterUse = 8,\n        JobAdminister = 16,\n        JobRead = 32,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | PrinterUse,\n        Write = StandardRights.Write | PrinterUse,\n        Execute = StandardRights.Execute | PrinterUse,\n\n        AllAccess = PrinterAdminister | PrinterUse | StandardRights.Required\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/PrinterSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Serializable]\n    public class PrinterSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public PrinterSecurity()\n            : base(ResourceType.Printer, false)\n        {\n        }\n\n        public PrinterSecurity(string printerName, AccessControlSections sectionsRequested)\n            : base(printerName, ResourceType.Printer, sectionsRequested, false)\n        {\n        }\n\n\n        #endregion\n\n        #region NativeSecurityObject Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(PrinterRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new PrinterAccessRule(identityReference, (PrinterRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(PrinterAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new PrinterAuditRule(identityReference, (PrinterRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(PrinterAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Service specific types.\n\n        public void AddAccessRule(PrinterAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(PrinterAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(PrinterAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(PrinterAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(PrinterAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(PrinterAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(PrinterAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(PrinterAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(PrinterAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(PrinterAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(PrinterAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)PrinterRights.Read, (int)PrinterRights.Write,\n                                 (int)PrinterRights.Execute, (int)PrinterRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ProcessAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of FileMappingAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class ProcessAccessRule : AccessRule\n    {\n        public ProcessAccessRule(IdentityReference identity, ProcessRights processRights, AccessControlType type)\n            : base(identity, (int)processRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public ProcessAccessRule(string identity, ProcessRights processRights, AccessControlType type)\n            : this(new NTAccount(identity), processRights, type)\n        {\n        }\n\n        public ProcessRights ProcessRights \n        {\n            get\n            {\n                return (ProcessRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ProcessAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class ProcessAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ProcessAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"processRights\">The process rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ProcessAuditRule(IdentityReference identity, ProcessRights processRights, AuditFlags type)\n            : base(identity, (int)processRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ProcessAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"processRights\">The process rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ProcessAuditRule(string identity, ProcessRights processRights, AuditFlags type)\n            : this(new NTAccount(identity), processRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the process rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"ProcessRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public ProcessRights ProcessRights\n        {\n            get\n            {\n                return (ProcessRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ProcessRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum ProcessRights\n    {\n        Terminate        = 1,  \n        CreateThread     = 2,  \n        SetSessionID     = 4,  \n        VMOperation      = 8,  \n        VMRead           = 16,  \n        VMWrite          = 32,  \n        DuplicateHandle  = 64,  \n        CreateProcess    = 128,  \n        SetQuota         = 256,  \n        SetInformation   = 512,  \n        QueryInformation = 1024,  \n        SuspendResume    = 2048,  \n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | VMRead | QueryInformation,\n        Write = StandardRights.Write | CreateProcess | CreateThread | VMOperation | VMWrite |\n            DuplicateHandle | Terminate | SetQuota | SetInformation,\n        Execute = StandardRights.Execute | Synchronize,\n\n        AllAccess = StandardRights.Required | Synchronize | Terminate | CreateThread | \n            SetSessionID | VMOperation | VMRead | VMWrite | DuplicateHandle | \n            CreateProcess | SetQuota | SetInformation | QueryInformation | SuspendResume\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ProcessSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\nusing System.Diagnostics;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class ProcessSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public ProcessSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public ProcessSecurity(int processID, AccessControlSections sectionsRequested)\n            : base(GetReadHandle(processID), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public ProcessSecurity(Process process, AccessControlSections sectionsRequested)\n            : this(process.Id, sectionsRequested)\n        {\n        }\n\n        public ProcessSecurity(IntPtr processHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(processHandle), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        #endregion\n\n        private static GenericSafeHandle GetReadHandle(int processId)\n        {\n            IntPtr readHandle = NativeMethods.OpenProcess((int)ProcessRights.ReadPermissions, false, processId);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle);\n        }\n\n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(ProcessRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new ProcessAccessRule(identityReference, (ProcessRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(ProcessAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new ProcessAuditRule(identityReference, (ProcessRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(ProcessAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Process specific types.\n\n        public void AddAccessRule(ProcessAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(ProcessAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(ProcessAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(ProcessAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(ProcessAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(ProcessAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(ProcessAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(ProcessAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(ProcessAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(ProcessAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(ProcessAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)ProcessRights.Read, (int)ProcessRights.Write,\n                                 (int)ProcessRights.Execute, (int)ProcessRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/RegistryKeyAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of RegistryKeyAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class RegistryKeyAccessRule : AccessRule\n    {\n        public RegistryKeyAccessRule(IdentityReference identity, RegistryKeyRights registryKeyRights, AccessControlType type)\n            : base(identity, (int)registryKeyRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public RegistryKeyAccessRule(string identity, RegistryKeyRights registryKeyRights, AccessControlType type)\n            : this(new NTAccount(identity), registryKeyRights, type)\n        {\n        }\n\n        public RegistryKeyRights RegistryKeyRights \n        {\n            get\n            {\n                return (RegistryKeyRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/RegistryKeyAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class RegistryKeyAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RegistryKeyAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"registryKeyRights\">The registry key rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public RegistryKeyAuditRule(IdentityReference identity, RegistryKeyRights registryKeyRights, AuditFlags type)\n            : base(identity, (int)registryKeyRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RegistryKeyAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"registryKeyRights\">The registry key rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public RegistryKeyAuditRule(string identity, RegistryKeyRights registryKeyRights, AuditFlags type)\n            : this(new NTAccount(identity), registryKeyRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the registry key rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"RegistryKeyRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public RegistryKeyRights RegistryKeyRights\n        {\n            get\n            {\n                return (RegistryKeyRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/RegistryKeyRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum RegistryKeyRights\n    {\n        QueryValue          = 1,\n        SetValue            = 2,\n        CreateSubKey        = 3,\n        EnumerateSubKeys    = 4,\n        Notify              = 16,\n        CreateLink          = 32,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | QueryValue | EnumerateSubKeys | Notify,\n        Write = StandardRights.Write | SetValue | CreateSubKey,\n        Execute = StandardRights.Execute | QueryValue | EnumerateSubKeys | Notify,\n \n        AllAccess = StandardRights.All | QueryValue | SetValue | CreateSubKey | EnumerateSubKeys |\n            Notify | CreateLink\n   }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/RegistryKeySecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\nusing Microsoft.Win32;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class RegistryKeySecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public RegistryKeySecurity()\n            : base(ResourceType.RegistryKey, true)\n        {\n        }\n\n        public RegistryKeySecurity(string registryKeyName, AccessControlSections sectionsRequested)\n            : base(registryKeyName, ResourceType.RegistryKey, sectionsRequested, true)\n        {\n        }\n\n        public RegistryKeySecurity(RegistryKey key, AccessControlSections sectionsRequested)\n            : base(key.Name, ResourceType.RegistryKey, sectionsRequested, true)\n        {\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(RegistryKeyRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new RegistryKeyAccessRule(identityReference, (RegistryKeyRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(RegistryKeyAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new RegistryKeyAuditRule(identityReference, (RegistryKeyRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(RegistryKeyAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for RegistryKey specific types.\n\n        public void AddAccessRule(RegistryKeyAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(RegistryKeyAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(RegistryKeyAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(RegistryKeyAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(RegistryKeyAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(RegistryKeyAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(RegistryKeyAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(RegistryKeyAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(RegistryKeyAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(RegistryKeyAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(RegistryKeyAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)RegistryKeyRights.Read, (int)RegistryKeyRights.Write,\n                                 (int)RegistryKeyRights.Execute, (int)RegistryKeyRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ServiceAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public class ServiceAccessRule : AccessRule\n    {\n        public ServiceAccessRule(IdentityReference identity, ServiceRights serviceRights, AccessControlType type)\n            : base(identity, (int)serviceRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public ServiceAccessRule(string identity, ServiceRights serviceRights, AccessControlType type)\n            : this(new NTAccount(identity), serviceRights, type)\n        {\n        }\n\n        public ServiceRights ServiceRights \n        {\n            get\n            {\n                return (ServiceRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ServiceAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class ServiceAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ServiceAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"serviceRights\">The service rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ServiceAuditRule(IdentityReference identity, ServiceRights serviceRights, AuditFlags type)\n            : base(identity, (int)serviceRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ServiceAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"serviceRights\">The service rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ServiceAuditRule(string identity, ServiceRights serviceRights, AuditFlags type)\n            : this(new NTAccount(identity), serviceRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the service rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"ServiceRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public ServiceRights ServiceRights\n        {\n            get\n            {\n                return (ServiceRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ServiceRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public enum ServiceRights\n    {\n        QueryConfiguration = 1,\n        ChangeConfiguration = 2,\n        QueryStatus = 4,\n        EnumerateDependents = 8,\n        ServiceStart = 16,\n        ServiceStop = 32,\n        ServicePauseAndContinue = 64,\n        ServiceInterogate = 128,\n        SendCustomControl = 256,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n\n        Read = StandardRights.Read | QueryConfiguration | QueryStatus | EnumerateDependents \n            | ServiceInterogate | SendCustomControl,\n        Write = StandardRights.Write | ChangeConfiguration,\n        Execute = StandardRights.Execute | ServiceStart | ServiceStop | ServicePauseAndContinue \n            | ServiceInterogate | SendCustomControl,\n\n        AllAccess = QueryConfiguration | ChangeConfiguration | QueryStatus | EnumerateDependents\n          | ServiceStart | ServiceStop | ServicePauseAndContinue | ServiceInterogate | SendCustomControl\n          | StandardRights.Required\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ServiceSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Serializable]\n    public class ServiceSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public ServiceSecurity()\n            : base(ResourceType.Service, false)\n        {\n        }\n\n        public ServiceSecurity(string serviceName, AccessControlSections sectionsRequested)\n            : base(serviceName, ResourceType.Service, sectionsRequested, false)\n        {\n        }\n\n\n        #endregion\n\n        #region NativeSecurityObject Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(ServiceRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new ServiceAccessRule(identityReference, (ServiceRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(ServiceAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new ServiceAuditRule(identityReference, (ServiceRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(ServiceAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Service specific types.\n\n        public void AddAccessRule(ServiceAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(ServiceAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(ServiceAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(ServiceAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(ServiceAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(ServiceAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(ServiceAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(ServiceAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(ServiceAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(ServiceAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(ServiceAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)ServiceRights.Read, (int)ServiceRights.Write,\n                                 (int)ServiceRights.Execute, (int)ServiceRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ShareAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public class ShareAccessRule : AccessRule\n    {\n        public ShareAccessRule(IdentityReference identity, ShareRights shareRights, AccessControlType type)\n            : base(identity, (int)shareRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public ShareAccessRule(string identity, ShareRights shareRights, AccessControlType type)\n            : this(new NTAccount(identity), shareRights, type)\n        {\n        }\n\n        public ShareRights ShareRights \n        {\n            get\n            {\n                return (ShareRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ShareAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class ShareAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ShareAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"shareRights\">The share rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ShareAuditRule(IdentityReference identity, ShareRights shareRights, AuditFlags type)\n            : base(identity, (int)shareRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ShareAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"shareRights\">The share rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ShareAuditRule(string identity, ShareRights shareRights, AuditFlags type)\n            : this(new NTAccount(identity), shareRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the share rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"ShareRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public ShareRights ShareRights\n        {\n            get\n            {\n                return (ShareRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ShareRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public enum ShareRights\n    {\n        FileRead    =  1, // user has read access\n        FileWrite   =  2, // user has write access\n        FileCreate  =  4, // user has create access\n\n        Read = StandardRights.Read | FileRead,\n        Write = StandardRights.Write | FileWrite | FileCreate,\n        Execute = StandardRights.Execute | FileCreate,\n\n        AllAccess = FileRead | FileWrite | FileCreate | StandardRights.Required\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ShareSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Serializable]\n    public class ShareSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public ShareSecurity()\n            : base(ResourceType.LMShare, false)\n        {\n        }\n\n        public ShareSecurity(string shareName, AccessControlSections sectionsRequested)\n            : base(shareName, ResourceType.LMShare, sectionsRequested, false)\n        {\n        }\n\n\n        #endregion\n\n        #region NativeSecurityObject Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(ShareRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new ShareAccessRule(identityReference, (ShareRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(ShareAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new ShareAuditRule(identityReference, (ShareRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(ShareAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Share specific types.\n\n        public void AddAccessRule(ShareAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(ShareAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(ShareAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(ShareAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(ShareAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(ShareAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(ShareAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(ShareAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(ShareAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(ShareAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(ShareAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)ShareRights.Read, (int)ShareRights.Write,\n                                 (int)ShareRights.Execute, (int)ShareRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/StandardRights.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public enum StandardRights\n    {\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = ReadPermissions,\n        Write = ReadPermissions,\n        Execute = ReadPermissions,\n        Required = Delete | ReadPermissions | WritePermissions | TakeOwnership,\n\n        All = Delete | ReadPermissions | WritePermissions | TakeOwnership | Synchronize \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ThreadAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of FileMappingAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class ThreadAccessRule : AccessRule\n    {\n        public ThreadAccessRule(IdentityReference identity, ThreadRights threadRights, AccessControlType type)\n            : base(identity, (int)threadRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public ThreadAccessRule(string identity, ThreadRights threadRights, AccessControlType type)\n            : this(new NTAccount(identity), threadRights, type)\n        {\n        }\n\n        public ThreadRights ThreadRights \n        {\n            get\n            {\n                return (ThreadRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ThreadAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class ThreadAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ThreadAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"threadRights\">The thread rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ThreadAuditRule(IdentityReference identity, ThreadRights threadRights, AuditFlags type)\n            : base(identity, (int)threadRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ThreadAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"threadRights\">The thread rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public ThreadAuditRule(string identity, ThreadRights threadRights, AuditFlags type)\n            : this(new NTAccount(identity), threadRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the thread rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"ThreadRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public ThreadRights ThreadRights\n        {\n            get\n            {\n                return (ThreadRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ThreadRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum ThreadRights\n    {\n        Terminate              = 0001,  \n        SuspendResume          = 0002,  \n        GetContext             = 0008,  \n        SetContext             = 0010,  \n        SetInformation         = 0020,  \n        QueryInformation       = 0040,  \n        SetThreadToken         = 0080,\n        Impersonate            = 0100,\n        DirectImpersonation    = 0200,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | GetContext | QueryInformation,\n        Write = StandardRights.Write | Terminate | SuspendResume | SetInformation | SetContext,\n        Execute = StandardRights.Execute | Synchronize,\n\n        AllAccess =  StandardRights.Required | Synchronize | Terminate | SuspendResume | \n            GetContext | SetContext | SetInformation | QueryInformation | SetThreadToken | \n            Impersonate | DirectImpersonation \n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/ThreadSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\nusing System.Diagnostics;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class ThreadSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public ThreadSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public ThreadSecurity(int threadID, AccessControlSections sectionsRequested)\n            : base(GetReadHandle(threadID), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public ThreadSecurity(ProcessThread thread, AccessControlSections sectionsRequired)\n            : this(thread.Id, sectionsRequired)\n        {\n        }\n\n        public ThreadSecurity(IntPtr threadHandle, AccessControlSections sectionsRequired)\n            : base(BaseSecurity.GetReadHandle(threadHandle), ResourceType.KernelObject, sectionsRequired, false)\n        {\n        }\n\n        #endregion\n\n        private static GenericSafeHandle GetReadHandle(int threadId)\n        {\n            IntPtr readHandle = NativeMethods.OpenThread((int)ThreadRights.ReadPermissions, false, threadId);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle);\n        }\n\n\n\n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(ThreadRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new ThreadAccessRule(identityReference, (ThreadRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(ThreadAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new ThreadAuditRule(identityReference, (ThreadRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(ThreadAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Thread specific types.\n\n        public void AddAccessRule(ThreadAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(ThreadAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(ThreadAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(ThreadAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(ThreadAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(ThreadAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(ThreadAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(ThreadAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(ThreadAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(ThreadAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(ThreadAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)ThreadRights.Read, (int)ThreadRights.Write,\n                                 (int)ThreadRights.Execute, (int)ThreadRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/TokenAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of TokenAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class TokenAccessRule : AccessRule\n    {\n        public TokenAccessRule(IdentityReference identity, TokenRights tokenRights, AccessControlType type)\n            : base(identity, (int)tokenRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public TokenAccessRule(string identity, TokenRights tokenRights, AccessControlType type)\n            : this(new NTAccount(identity), tokenRights, type)\n        {\n        }\n\n        public TokenRights TokenRights \n        {\n            get\n            {\n                return (TokenRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/TokenAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class TokenAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TokenAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"tokenRights\">The token rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public TokenAuditRule(IdentityReference identity, TokenRights tokenRights, AuditFlags type)\n            : base(identity, (int)tokenRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TokenAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"tokenRights\">The token rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public TokenAuditRule(string identity, TokenRights tokenRights, AuditFlags type)\n            : this(new NTAccount(identity), tokenRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the token rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"TokenRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public TokenRights TokenRights\n        {\n            get\n            {\n                return (TokenRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/TokenRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum TokenRights\n    {\n        AssignPrimary     = 1,\n        Duplicate         = 2,\n        Impersonate       = 4,\n        Query             = 8,\n        QuerySource       = 16,\n        AdjustPrivileges  = 32,\n        AdjustGroups      = 64,\n        AdjustDefault     = 128,\n        AdjustSessionID   = 256,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | Query,\n        Write = StandardRights.Write | AdjustPrivileges | AdjustGroups | AdjustDefault,\n        Execute = StandardRights.Execute,\n\n        AllAccess = StandardRights.Required | AssignPrimary | Duplicate | Impersonate | Query |\n            QuerySource | AdjustPrivileges | AdjustGroups | AdjustDefault | AdjustSessionID\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/TokenSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\nusing System.Diagnostics;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class TokenSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public TokenSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public TokenSecurity(Process process, AccessControlSections sectionsRequested)\n            : this(process.Id, sectionsRequested, true)\n        {\n        }\n\n        public TokenSecurity(ProcessThread thread, AccessControlSections sectionsRequested)\n            : this(thread.Id, sectionsRequested, false)\n        {\n        }\n\n        public TokenSecurity(int id, AccessControlSections sectionsRequested, bool idIsProcessID)\n            : base(GetReadHandle(id, idIsProcessID), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public TokenSecurity(IntPtr tokenHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(tokenHandle), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        private static GenericSafeHandle GetReadHandle(int id, bool idIsProcessID)\n        {\n            IntPtr tempHandle = IntPtr.Zero;\n            IntPtr readHandle = IntPtr.Zero;\n\n            if (idIsProcessID)\n            {\n                GenericSafeHandle procHandle = new GenericSafeHandle(NativeMethods.OpenProcess((int)ProcessRights.QueryInformation, false, id));\n                if (procHandle.IsInvalid)\n                {\n                    int err = Marshal.GetLastWin32Error();\n                    switch (err)\n                    {\n                        case NativeConstants.ERROR_ACCESS_DENIED:\n                            throw new UnauthorizedAccessException();\n                        default:\n                            throw new System.ComponentModel.Win32Exception(err);\n                    }\n                }\n                using (procHandle)\n                {\n                    if (!NativeMethods.OpenProcessToken(procHandle, (int)TokenRights.ReadPermissions, out readHandle))\n                    {\n                        int err = Marshal.GetLastWin32Error();\n                        switch (err)\n                        {\n                            case NativeConstants.ERROR_ACCESS_DENIED:\n                                throw new UnauthorizedAccessException();\n                            default:\n                                throw new System.ComponentModel.Win32Exception(err);\n                        }\n                    }\n                }\n            }\n            else\n            {\n                GenericSafeHandle threadHandle = new GenericSafeHandle(NativeMethods.OpenThread((int)ThreadRights.QueryInformation, false, id));\n                if (threadHandle.IsInvalid)\n                {\n                    int err = Marshal.GetLastWin32Error();\n                    switch (err)\n                    {\n                        case NativeConstants.ERROR_ACCESS_DENIED:\n                            throw new UnauthorizedAccessException();\n                        default:\n                            throw new System.ComponentModel.Win32Exception(err);\n                    }\n                }\n                using (threadHandle)\n                {\n                    if (!NativeMethods.OpenThreadToken(threadHandle, (int)TokenRights.ReadPermissions, false, out readHandle))\n                    {\n                        int err = Marshal.GetLastWin32Error();\n                        switch (err)\n                        {\n                            case NativeConstants.ERROR_ACCESS_DENIED:\n                                throw new UnauthorizedAccessException();\n                            default:\n                                throw new System.ComponentModel.Win32Exception(err);\n                        }\n                    }\n                }\n            }\n\n            return new GenericSafeHandle(readHandle);\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(TokenRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new TokenAccessRule(identityReference, (TokenRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(TokenAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new TokenAuditRule(identityReference, (TokenRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(TokenAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for Token specific types.\n\n        public void AddAccessRule(TokenAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(TokenAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(TokenAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(TokenAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(TokenAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(TokenAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(TokenAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(TokenAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(TokenAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(TokenAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(TokenAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)TokenRights.Read, (int)TokenRights.Write,\n                                 (int)TokenRights.Execute, (int)TokenRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WaitObjectAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of WaitObjectAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class WaitObjectAccessRule : AccessRule\n    {\n        public WaitObjectAccessRule(IdentityReference identity, WaitObjectRights waitObjectRights, AccessControlType type)\n            : base(identity, (int)waitObjectRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public WaitObjectAccessRule(string identity, WaitObjectRights waitObjectRights, AccessControlType type)\n            : this(new NTAccount(identity), waitObjectRights, type)\n        {\n        }\n\n        public WaitObjectRights WaitObjectRights \n        {\n            get\n            {\n                return (WaitObjectRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WaitObjectAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class WaitObjectAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"WaitObjectAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"waitObjectRights\">The wait object rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public WaitObjectAuditRule(IdentityReference identity, WaitObjectRights waitObjectRights, AuditFlags type)\n            : base(identity, (int)waitObjectRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"WaitObjectAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"waitObjectRights\">The wait object rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public WaitObjectAuditRule(string identity, WaitObjectRights waitObjectRights, AuditFlags type)\n            : this(new NTAccount(identity), waitObjectRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the wait object rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"WaitObjectRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public WaitObjectRights WaitObjectRights\n        {\n            get\n            {\n                return (WaitObjectRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WaitObjectRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum WaitObjectRights\n    {\n        QueryState = 1,\n        ModifyState = 2,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | QueryState,\n        Write = StandardRights.Write | ModifyState,\n        Execute = StandardRights.Execute | Synchronize,\n\n        AllAccess = ModifyState | QueryState | StandardRights.Required | Synchronize \n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WaitObjectSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class WaitObjectSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public WaitObjectSecurity()\n            : base(ResourceType.KernelObject, false)\n        {\n        }\n\n        public WaitObjectSecurity(string waitObjectName, AccessControlSections sectionsRequested)\n            : base(waitObjectName, ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        public WaitObjectSecurity(IntPtr waitObjectHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(waitObjectHandle), ResourceType.KernelObject, sectionsRequested, false)\n        {\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(WaitObjectRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new WaitObjectAccessRule(identityReference, (WaitObjectRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(WaitObjectAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new WaitObjectAuditRule(identityReference, (WaitObjectRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(WaitObjectAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for WaitObject specific types.\n\n        public void AddAccessRule(WaitObjectAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(WaitObjectAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(WaitObjectAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(WaitObjectAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(WaitObjectAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(WaitObjectAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(WaitObjectAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(WaitObjectAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(WaitObjectAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(WaitObjectAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(WaitObjectAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)WaitObjectRights.Read, (int)WaitObjectRights.Write,\n                                 (int)WaitObjectRights.Execute, (int)WaitObjectRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WindowStationAccessRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>Represents a set of WindowStationAccessRights rights allowed or denied\n    /// for a user or group. This class cannot be inherited.</summary>\n    /// <remarks><para></para></remarks>\n    public sealed class WindowStationAccessRule : AccessRule\n    {\n        public WindowStationAccessRule(IdentityReference identity, WindowStationRights windowStationRights, AccessControlType type)\n            : base(identity, (int)windowStationRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        public WindowStationAccessRule(string identity, WindowStationRights windowStationRights, AccessControlType type)\n            : this(new NTAccount(identity), windowStationRights, type)\n        {\n        }\n\n        public WindowStationRights WindowStationRights \n        {\n            get\n            {\n                return (WindowStationRights)base.AccessMask;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WindowStationAuditRule.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Asprosys.Security.AccessControl\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public sealed class WindowStationAuditRule : AuditRule\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"WindowStationAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"windowStationRights\">The window station rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public WindowStationAuditRule(IdentityReference identity, WindowStationRights windowStationRights, AuditFlags type)\n            : base(identity, (int)windowStationRights, false, InheritanceFlags.None, PropagationFlags.None, type)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"WindowStationAuditRule\"/> class.\n        /// </summary>\n        /// <param name=\"identity\">The identity.</param>\n        /// <param name=\"windowStationRights\">The window station rights.</param>\n        /// <param name=\"type\">The type.</param>\n        public WindowStationAuditRule(string identity, WindowStationRights windowStationRights, AuditFlags type)\n            : this(new NTAccount(identity), windowStationRights, type)\n        {\n        }\n\n        /// <summary>\n        /// Gets the window station rights associated with this rule.\n        /// </summary>\n        /// <value>The combination of <see cref=\"WindowStationRights\"/> values that defines\n        /// the rights associated with this rule.</value>\n        public WindowStationRights WindowStationRights\n        {\n            get\n            {\n                return (WindowStationRights)base.AccessMask;\n            }\n        }\n        \n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WindowStationRights.cs",
    "content": "using System;\n\nnamespace Asprosys.Security.AccessControl\n{\n    [Flags]\n    public enum WindowStationRights\n    {\n        EnumDesktops         = 1,\n        ReadAttributes       = 2,\n        AccessClipboard      = 4,\n        CreateDesktop        = 8,\n        WriteAttributes      = 16,\n        AccessGlobalAtoms    = 32,\n        ExitWindows          = 64,\n        Enumerate            = 256,\n        ReadScreen           = 512,\n\n        Delete = 0x00010000,\n        ReadPermissions = 0x00020000,\n        WritePermissions = 0x00040000,\n        TakeOwnership = 0x00080000,\n        Synchronize = 0x00100000,\n\n        Read = StandardRights.Read | EnumDesktops | ReadAttributes | Enumerate | ReadScreen,\n        Write = StandardRights.Write | AccessClipboard | CreateDesktop | WriteAttributes,\n        Execute = StandardRights.Execute | AccessGlobalAtoms | ExitWindows,\n\n        AllAccess = EnumDesktops  | ReadAttributes  | AccessClipboard | CreateDesktop | \n            WriteAttributes | AccessGlobalAtoms | ExitWindows | Enumerate | ReadScreen |\n            StandardRights.Required\n    }\n}"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AccessControl/WindowStationSecurity.cs",
    "content": "using System;\nusing System.Security.AccessControl;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Security.AccessControl\n{\n    public sealed class WindowStationSecurity : BaseSecurity\n    {\n\n        #region Constructors\n\n        public WindowStationSecurity()\n            : base(ResourceType.WindowObject, false)\n        {\n        }\n\n        public WindowStationSecurity(string windowStationName, AccessControlSections sectionsRequested)\n            : base(GetReadHandle(windowStationName), ResourceType.WindowObject, sectionsRequested, false)\n        {\n        }\n\n        public WindowStationSecurity(IntPtr windowStationHandle, AccessControlSections sectionsRequested)\n            : base(BaseSecurity.GetReadHandle(windowStationHandle, NativeMethods.CloseWindowStation), ResourceType.WindowObject, sectionsRequested, false)\n        {\n        }\n\n        private static GenericSafeHandle GetReadHandle(string windowStationName)\n        {\n            IntPtr readHandle = NativeMethods.OpenWindowStation(windowStationName, false, (int)StandardRights.ReadPermissions);\n            if (readHandle == IntPtr.Zero)\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return new GenericSafeHandle(readHandle, NativeMethods.CloseWindowStation);\n        }\n\n        #endregion\n        \n        #region NativeObjectSecurity Abstract Method Overrides\n\n        public override Type AccessRightType\n        {\n            get { return typeof(WindowStationRights); }\n        }\n\n        public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)\n        {\n            return new WindowStationAccessRule(identityReference, (WindowStationRights)accessMask, type);\n        }\n\n        public override Type AccessRuleType\n        {\n            get { return typeof(WindowStationAccessRule); }\n        }\n\n        public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)\n        {\n            return new WindowStationAuditRule(identityReference, (WindowStationRights)accessMask, flags);\n        }\n\n        public override Type AuditRuleType\n        {\n            get { return typeof(WindowStationAuditRule); }\n        }\n\n        #endregion\n\n        #region AccessControl Overloads for WindowStation specific types.\n\n        public void AddAccessRule(WindowStationAccessRule accessRule)\n        {\n            base.AddAccessRule(accessRule);\n        }\n\n        public void AddAuditRule(WindowStationAuditRule auditRule)\n        {\n            base.AddAuditRule(auditRule);\n        }\n\n        public bool RemoveAccessRule(WindowStationAccessRule accessRule)\n        {\n            return base.RemoveAccessRule(accessRule);\n        }\n\n        public void RemoveAccessRuleAll(WindowStationAccessRule accessRule)\n        {\n            base.RemoveAccessRuleAll(accessRule);\n        }\n\n        public void RemoveAccessRuleSpecific(WindowStationAccessRule accessRule)\n        {\n            base.RemoveAccessRuleSpecific(accessRule);\n        }\n\n        public bool RemoveAuditRule(WindowStationAuditRule auditRule)\n        {\n            return base.RemoveAuditRule(auditRule);\n        }\n\n        public void RemoveAuditRuleAll(WindowStationAuditRule auditRule)\n        {\n            base.RemoveAuditRuleAll(auditRule);\n        }\n\n        public void RemoveAuditRuleSpecific(WindowStationAuditRule auditRule)\n        {\n            base.RemoveAuditRuleSpecific(auditRule);\n        }\n\n        public void ResetAccessRule(WindowStationAccessRule accessRule)\n        {\n            base.ResetAccessRule(accessRule);\n        }\n\n        public void SetAccessRule(WindowStationAccessRule accessRule)\n        {\n            base.SetAccessRule(accessRule);\n        }\n\n        public void SetAuditRule(WindowStationAuditRule auditRule)\n        {\n            base.SetAuditRule(auditRule);\n        }\n\n        #endregion\n\n        #region AccessCheck Methods\n\n        private static GenericMapping m_GenericAccessMapping\n            = new GenericMapping((int)WindowStationRights.Read, (int)WindowStationRights.Write,\n                                 (int)WindowStationRights.Execute, (int)WindowStationRights.AllAccess);\n\n        protected override GenericMapping GetGenericMapping()\n        {\n            return m_GenericAccessMapping;\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AsproLock.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"12.0\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{8B240ED4-4766-4AC5-8ECD-5325B9784F67}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Asprosys.Security</RootNamespace>\n    <AssemblyName>AsproLock</AssemblyName>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>3.5</OldToolsVersion>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DocumentationFile>AsproLock.xml</DocumentationFile>\n    <NoWarn>1591</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <DocumentationFile>AsproLock.xml</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AccessControl\\BaseSecurity.cs\" />\n    <Compile Include=\"AccessControl\\DesktopAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\DesktopAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\DesktopRights.cs\" />\n    <Compile Include=\"AccessControl\\DesktopSecurity.cs\" />\n    <Compile Include=\"AccessControl\\DirectoryAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\DirectoryAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\DirectoryRights.cs\" />\n    <Compile Include=\"AccessControl\\DirectorySecurity.cs\" />\n    <Compile Include=\"AccessControl\\FileAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\FileAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\FileMappingAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\FileMappingAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\FileMappingRights.cs\" />\n    <Compile Include=\"AccessControl\\FileMappingSecurity.cs\" />\n    <Compile Include=\"AccessControl\\FileRights.cs\" />\n    <Compile Include=\"AccessControl\\FileSecurity.cs\" />\n    <Compile Include=\"AccessControl\\GenericMapping.cs\" />\n    <Compile Include=\"AccessControl\\JobObjectAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\JobObjectAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\JobObjectRights.cs\" />\n    <Compile Include=\"AccessControl\\JobObjectSecurity.cs\" />\n    <Compile Include=\"AccessControl\\PipeAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\PipeAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\PipeRights.cs\" />\n    <Compile Include=\"AccessControl\\PipeSecurity.cs\" />\n    <Compile Include=\"AccessControl\\PrinterAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\PrinterAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\PrinterRights.cs\" />\n    <Compile Include=\"AccessControl\\PrinterSecurity.cs\" />\n    <Compile Include=\"AccessControl\\ProcessAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\ProcessAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\ProcessRights.cs\" />\n    <Compile Include=\"AccessControl\\ProcessSecurity.cs\" />\n    <Compile Include=\"AccessControl\\RegistryKeyAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\RegistryKeyAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\RegistryKeyRights.cs\" />\n    <Compile Include=\"AccessControl\\RegistryKeySecurity.cs\" />\n    <Compile Include=\"AccessControl\\ServiceAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\ServiceAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\ServiceRights.cs\" />\n    <Compile Include=\"AccessControl\\ServiceSecurity.cs\" />\n    <Compile Include=\"AccessControl\\ShareAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\ShareAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\ShareRights.cs\" />\n    <Compile Include=\"AccessControl\\ShareSecurity.cs\" />\n    <Compile Include=\"AccessControl\\StandardRights.cs\" />\n    <Compile Include=\"AccessControl\\ThreadAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\ThreadAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\ThreadRights.cs\" />\n    <Compile Include=\"AccessControl\\ThreadSecurity.cs\" />\n    <Compile Include=\"AccessControl\\TokenAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\TokenAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\TokenRights.cs\" />\n    <Compile Include=\"AccessControl\\TokenSecurity.cs\" />\n    <Compile Include=\"AccessControl\\WaitObjectAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\WaitObjectAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\WaitObjectRights.cs\" />\n    <Compile Include=\"AccessControl\\WaitObjectSecurity.cs\" />\n    <Compile Include=\"AccessControl\\WindowStationAccessRule.cs\" />\n    <Compile Include=\"AccessControl\\WindowStationAuditRule.cs\" />\n    <Compile Include=\"AccessControl\\WindowStationRights.cs\" />\n    <Compile Include=\"AccessControl\\WindowStationSecurity.cs\" />\n    <Compile Include=\"AssemblyInfo.cs\" />\n    <Compile Include=\"Win32\\GenericSafeHandle.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Win32\\NativeConstants.cs\" />\n    <Compile Include=\"Win32\\NativeMethods.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AsproLock\")]\n[assembly: AssemblyDescription(\"Win32 Security Access for Dotnet\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Asprosys Inc.\")]\n[assembly: AssemblyProduct(\"AsproLock\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2009\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"744cd9f5-c044-4525-b98a-e05da4a2d3e5\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"0.5.0.4\")]\n[assembly: AssemblyFileVersion(\"0.5.0.47\")]\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/Win32/GenericSafeHandle.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nusing Asprosys.Win32;\n\nnamespace Asprosys.Win32\n{\n\n    public delegate bool ReleaseHandleCallback(IntPtr handle);\n\n    public class GenericSafeHandle : SafeHandle\n    {\n        private ReleaseHandleCallback m_ReleaseCallback;\n\n        #region Constructors\n\n        public GenericSafeHandle(IntPtr handle, ReleaseHandleCallback releaseCallback)\n            : base(IntPtr.Zero, true)\n        {\n            base.handle = handle;\n            m_ReleaseCallback = releaseCallback;\n        }\n\n        public GenericSafeHandle(IntPtr handle)\n            : this(handle, NativeMethods.CloseHandle)\n        {\n        }\n\n        public GenericSafeHandle(IntPtr newHandle, GenericSafeHandle oldHandle)\n            : this(newHandle, oldHandle.m_ReleaseCallback)\n        {\n            oldHandle.Close();\n        }\n\n        #endregion\n\n        public override bool IsInvalid\n        {\n            get { return (handle == IntPtr.Zero); }\n        }\n\n        protected override bool ReleaseHandle()\n        {\n            return m_ReleaseCallback(handle);\n        }\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/Win32/NativeConstants.cs",
    "content": "using System;\n\nnamespace Asprosys.Win32\n{\n    internal static class NativeConstants\n    {\n        public const int FILE_SHARE_READ = 1; \n        public const int FILE_SHARE_WRITE = 2;\n        public const int FILE_SHARE_DELETE = 4;\n        public const int FILE_SHARE_ALL = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;\n        public const int FILE_ATTRIBUTE_NORMAL = 128;\n        public const int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000; //Open directory with CreateFile\n        public const int OPEN_EXISTING = 3;\n        public static readonly IntPtr INVALID_HANDLE_VALUE = (IntPtr)(-1);\n\n        public const int ACCESS_SYSTEM_SECURITY = 0x01000000;\n\n        public const int BOOL_FAIL = 0;\n\n        public const int ERROR_SUCCESS = 0;\n        public const int ERROR_FILE_NOT_FOUND = 2;\n        public const int ERROR_PATH_NOT_FOUND = 3;\n        public const int ERROR_ACCESS_DENIED = 5;\n        public const int ERROR_INVALID_HANDLE = 6;\n\n        public const int ERROR_INSUFFICIENT_BUFFER = 122;\n\n        public const int ERROR_NO_IMPERSONATION_TOKEN = 1309;\n        public const int ERROR_NO_SUCH_PRIVILEGE = 1313;\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock/Win32/NativeMethods.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing System.Security.Principal;\n\nusing Asprosys.Security.AccessControl;\n\nnamespace Asprosys.Win32\n{\n    internal static class NativeMethods\n    {\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool CloseHandle(IntPtr hObject);\n\n        [DllImport(\"user32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool CloseWindowStation(IntPtr hWinSta);\n\n        [DllImport(\"user32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool CloseDesktop(IntPtr hDesktop);\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern void RtlMoveMemory(IntPtr destination,\n            IntPtr source, uint length);\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern IntPtr GetCurrentProcess();\n\n        [DllImport(\"kernel32.dll\")]\n        public static extern int GetCurrentProcessId();\n        \n        [DllImport(\"kernel32.dll\")]\n        public static extern int GetCurrentThreadId();\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool DuplicateHandle(IntPtr hSourceProcessHandle,\n            IntPtr hSourceHandle, IntPtr hTargetProcessHandle,\n            out IntPtr lpTargetHandle, int dwDesiredAccess,\n            int bInheritHandle, int dwOptions);\n\n        public static IntPtr DuplicateHandle(IntPtr sourceHandle, int desiredAccess)\n        {\n            IntPtr processHandle = GetCurrentProcess();\n            IntPtr newHandle;\n\n            if (!DuplicateHandle(processHandle, sourceHandle, processHandle, out newHandle,\n                    desiredAccess, 0, 0))\n            {\n                int err = Marshal.GetLastWin32Error();\n                switch (err)\n                {\n                    case NativeConstants.ERROR_ACCESS_DENIED:\n                        throw new UnauthorizedAccessException();\n                    case NativeConstants.ERROR_INVALID_HANDLE:\n                        throw new InvalidOperationException();\n                    default:\n                        throw new System.ComponentModel.Win32Exception(err);\n                }\n            }\n            return newHandle;\n        }\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenFileMapping(int dwDesiredAccess,int bInheritHandle,\n            string lpName);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        public static extern int GetProcessId(IntPtr processHandle);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        public static extern IntPtr OpenProcess(int dwDesiredAccess, \n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        public static extern IntPtr OpenThread(int dwDesiredAccess, \n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwThreadId);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenJobObject(int dwDesiredAccess, \n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenEvent(int dwDesiredAccess,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenMutex(int dwDesiredAccess,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenSemaphore(int dwDesiredAccess,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenWaitableTimer(int dwDesiredAccess,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);\n\n        [DllImport(\"user32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenWindowStation(string lpszWinSta,\n            [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwDesiredAccess);\n\n        [DllImport(\"user32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern IntPtr OpenDesktop(string lpszDesktop,\n            int dwFlags, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, \n            int dwDesiredAccess);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool OpenProcessToken(SafeHandle processHandle,\n            int desiredAccess, out IntPtr tokenHandle);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool OpenProcessToken(IntPtr processHandle,\n            int desiredAccess, out IntPtr tokenHandle);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool OpenThreadToken(SafeHandle threadHandle,\n            int desiredAccess, [MarshalAs(UnmanagedType.Bool)] bool openAsSelf,\n            out IntPtr tokenHandle);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern void MapGenericMask(ref int AccessMask,\n            [In] Asprosys.Security.AccessControl.GenericMapping mapping);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool AccessCheck(byte[] pSecurityDescriptor,\n            SafeHandle clientToken, int desiredAccess, \n            [In] Asprosys.Security.AccessControl.GenericMapping mapping,\n            byte[] privilegeSet, out int privilegeSetLength, out int grantedAccess,\n            [MarshalAs(UnmanagedType.Bool)] out bool accessStatus);\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool AccessCheckAndAuditAlarm(string subsystemName,\n            IntPtr handleId, string objectTypeName, string objectName,\n            byte[] securityDescriptor, int desiredAccess, \n            Asprosys.Security.AccessControl.GenericMapping mapping,\n            [MarshalAs(UnmanagedType.Bool)] bool objectCreation, out int grantedAccess,\n            [MarshalAs(UnmanagedType.Bool)] out bool accessStatus,\n            [MarshalAs(UnmanagedType.Bool)] out bool pfGenerateOnClose);\n\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool DestroyPrivateObjectSecurity(ref IntPtr ObjectDescriptor);\n\n        public static bool ClosePrivateObjectSecurity(IntPtr objectDescriptor)\n        {\n            return DestroyPrivateObjectSecurity(ref objectDescriptor);\n        }\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool CreatePrivateObjectSecurity(\n          byte[] ParentDescriptor,\n          byte[] CreatorDescriptor,\n          out IntPtr NewDescriptor,\n          [MarshalAs(UnmanagedType.Bool)] bool IsDirectoryObject,\n          IntPtr Token,\n          ref GenericMapping GenericMapping\n        );\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool GetPrivateObjectSecurity(\n          IntPtr ObjectDescriptor,\n          int SecurityInformation,\n          byte[] ResultantDescriptor,\n          int DescriptorLength,\n          ref int ReturnLength\n        );\n\n        [DllImport(\"advapi32.dll\", CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        private static extern bool SetPrivateObjectSecurity(\n          int SecurityInformation,\n          IntPtr ModificationDescriptor,\n          ref IntPtr ObjectsSecurityDescriptor,\n          ref GenericMapping GenericMapping,\n          IntPtr Token\n        );\n\n\n    }\n}\n"
  },
  {
    "path": "Research/Sandbox/Software/AsproLock.v0504.src/AsproLock.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30110.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AsproLock\", \"AsproLock\\AsproLock.csproj\", \"{8B240ED4-4766-4AC5-8ECD-5325B9784F67}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8B240ED4-4766-4AC5-8ECD-5325B9784F67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8B240ED4-4766-4AC5-8ECD-5325B9784F67}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8B240ED4-4766-4AC5-8ECD-5325B9784F67}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8B240ED4-4766-4AC5-8ECD-5325B9784F67}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Research/Tools/API Monitor.url",
    "content": "[{000214A0-0000-0000-C000-000000000046}]\nProp3=19,2\n[InternetShortcut]\nIDList=\nURL=http://www.rohitab.com/apimonitor\n"
  }
]